1
Fork 0

Merge pull request #6 from RealOrangeOne/content-update

Content update
This commit is contained in:
Jake Howard 2017-02-05 18:32:33 +00:00 committed by GitHub
commit f991723f78
40 changed files with 252 additions and 283 deletions

View File

@ -80,3 +80,9 @@ Django
dependancy-check
pypiup
seositecheckup
nextcloud
switcheroo
eg
glitching
dokku
letsencrypt

View File

@ -1,7 +0,0 @@
---
title: 7 languages in 7 weeks
gittime: off
date: 2016-05-05
template: blog
status: draft
---

View File

@ -1,7 +0,0 @@
---
title: My Level 3 Apprenticeship
gittime: off
date: 2016-07-06
template: blog
status: draft
---

View File

@ -6,15 +6,15 @@ image: https://protonmail.com/images/main-banner.jpg
summary: Incredibly secure, easy to use, but are it's trade-offs worth it?
---
Throughout my life, I've had many different email providers, starting with hotmail almost 10 years ago. In more recent years, I've been focusing more on ways I can secure my emails, both from potential intruders, or governments. No, I may not have anything to hide, but that doesn't mean I don't want the information I to have to be accessible easily.
Throughout my life, I've had many different email providers, starting with hotmail almost 10 years ago. In more recent years, I've been focusing more on ways I can secure my emails. No, I may not have anything to hide, but that doesn't mean I don't want the information I to have to be accessible easily.
Originally I thought the best way to keep things secure, and out of the hands of any government body was to host it all myself. This came with a number of problems, mostly due to my lack of experience running anything like this, which lead to problems with my spam filter not running, and any emails I did send ending up in peoples spam folders. It was after this I decided to look into hosted options, I'm happy to pay money to have someone else look after the email servers for me, even if that's at the cost of using another companies infrastructure.
Originally I thought the best way to keep things secure, and out of the hands of any government body was to host it all myself. This came with a number of problems, mostly due to my lack of experience running anything like this, which lead to problems with my spam filter blocking legitimate emails, and any emails I did send ending up in their spam folder. It was after this I decided to look into hosted options, I'm happy to pay money to have someone else look after the email servers for me, even if that's at the cost of using another companies infrastructure.
After searching around for a while, I stumbled on a company called _ProtonMail_, who claimed to be the most secure email host ever. Reading into the technologies they use, and watching one of their team members on a TED talk, I realised they weren't lying, their platform really was secure!
ProtonMail use a combination of open-source technologies, a closed-access platform, and swiss data centers to protect emails better than anyone else! The only way you can access your emails is by using their custom apps for Android, iOS, and web. Whilst this is annoying, it does mean the system isn't accessible through conventional protocols such as IMAP and POP3, which would considerably lower the security. The web portal itself is entirely open-source, and highly encourages any contributions, which should help make the platform even more secure, and help pump out features fast.
In April 2016, I signed up to ProtonMail's _Plus_ tier, and switched all my domains to use their servers as an email provider. The setup process itself was incredibly simple, it showed you every DNS record you needed to create, so all you had to do was copy-paste! It also showed you extra records you could add to aid the security of your emails, and protect against people sending out emails using your domain, including DKIM signatures, and SPF records.
Back in April, I signed up to ProtonMail's _Plus_ tier, and switched all my domains to use their servers as an email provider. The setup process itself was incredibly simple, it showed you every DNS record you needed to create, so all you had to do was copy-paste! It also showed you extra records you could add to aid the security of your emails, and protect against people sending out emails using your domain, including DKIM signatures, and SPF records.
### The Problems
@ -39,4 +39,7 @@ These problems are taken for granted in most other mail platform, but because Pr
Yes, this does mean I've paid for a service I'm technically no longer using. Which does annoy me, but considering it'll be used to help out the platform in the future, and I have every intention of switching back once it's got all the features I need, I can live with it.
## Next Steps
After looking around the internet for a suitable replacement, I settled on [FastMail](https://fastmail.com/?STKI=14665249). I've seen good things from RackSpace, OX and RunBox, but FastMail has all the features I need, with an easy-to-use interface, a cheap price tag, and a pretty decent security policy. For someone looking for a simple to use email provider, that's reasonably secure, and feature-rich, I can't recommend [FastMail](https://fastmail.com/?STKI=14665249) highly enough!
After looking around the internet for a suitable replacement, I settled on [FastMail](https://fastmail.com/?STKI=14665249) for a while, so I could get all the features I actually need, unfortunately sacrificing security.
##### __Update__
After being with [FastMail](https://fastmail.com/?STKI=14665249) now for almost a year, I'm moving back to ProtonMail. All issues listed above have now been fixed, and IMAP / SMTP support is currently in closed beta! I can finally have my security back!

View File

@ -1,19 +1,18 @@
---
title: React-Native intro dev meeting
gittime: off
date: 2016-03-16
template: blog
summary: Introducing React-Native to the rest of the office
---
Recently, at DabApps, we've been migrating our mobile app workflow over to using [react-native](https://facebook.github.io/react-native/) instead of [Ionic](http://ionicframework.com/), mainly because of its near native performance and cross-platform codebase. For the first few projects, there were only a couple of us that knew how to use React Native effectively, and work around the _qwerks_ it has. With the number of app projects growing, we needed to get more people up to speed with the react native workflow, as quickly as possible.
Recently, at DabApps, we've been migrating our mobile app workflow over to using [react-native](https://facebook.github.io/react-native/) rather than [Ionic](http://ionicframework.com/), mainly because of its near native performance. For the first few projects, there were only a couple of us that knew how to use React Native effectively, and work around the _qwerks_ it has. With the number of app projects growing, we needed to get more people up to speed with the react native workflow, as quickly as possible.
The workflow that we needed to adopt to use react native is an odd one. To keep the quality of our code at the highest possible, whilst keeping the codebase as maintainable as possible. The workflow we use was created by 4 of us, through experiences with both work and personal projects using the framework, and it works rather well. The only problem was that only 4 of us actually knew it very well.
The workflow that we needed to adopt to use react native is an odd one. To keep the quality of our code at the highest possible, whilst keeping the codebase as maintainable as possible. The workflow we use was created by 4 of us, through experiences with both work and personal projects using the framework, and it works rather well. The only problem was that only 4 of us actually knew it.
After one of the developers wanted to know our workflow, with a couple of potential app projects on the horizon, I set about creating a talk for our (_usually_) bi-weekly dev meetings. With the aim of trying to get everyone up to speed all in 1 go.
After a colleague wanted to know more about react-native, and with a couple of potential app projects on the horizon, I set about creating a talk for our (_usually_) bi-weekly dev meetings, With the aim of trying to get everyone up to speed all in 1 go.
The slides from my talk are available on my [GitHub](https://github.com/RealOrangeOne/react-native-intro-dev-meeting) page, and whilst they are primarily relevant to our workflow, I hope they will be able to help anyone else looking to get started with React Native.
React Native is a tricky platform to get started on, but once you understand the _qwerks_, it truly is the future of cross-platform mobile development!
React Native is a tricky platform to get started on, but once you understand the _qwerks_, I believe it truly is the future of cross-platform mobile development!
[Click here to view the slides](http://realorangeone.github.io/react-native-intro-dev-meeting/)

View File

@ -1,6 +1,5 @@
---
title: Cyber Security Month 2016
gittime: off
date: 2016-10-01
template: blog
summary: The best time to upgrade the security on my projects!
@ -11,25 +10,25 @@ As it's [Cyber Security Month](https://cybersecuritymonth.eu/), now's the perfec
As most of my projects revolve around NodeJS and Python, these are the languages I'll be concentrating on.
## Express Server
Express is one the most popular JS servers, and fortunately, they have a [security guide](http://expressjs.com/en/advanced/best-practice-security.html), that contains some of the best ways to secure your server. One of the best and simplest ways is to add the [helmet](https://www.npmjs.com/package/helmet) middleware, which contains a load of other middleware that drastically increase its security. It's incredibly easy to add too, at just 3 lines of change, [like this](https://github.com/RealOrangeOne/host-container/commit/90adfd04aed2f2065d803623c297dc1a8ae71632)!
Express is one the most popular JS servers, and fortunately, they have a [security guide](http://expressjs.com/en/advanced/best-practice-security.html), that contains some of best ways to write secure servers. One of the best and simplest ways is to add the [helmet](https://www.npmjs.com/package/helmet) middleware, which contains various other middleware that drastically increase security. It's incredibly easy to add too, at just 3 lines of change, [like this](https://github.com/RealOrangeOne/host-container/commit/90adfd04aed2f2065d803623c297dc1a8ae71632)!
You can use [securityheaders.io](http://securityheaders.io/) to check if any headers are being sent by your server that shouldn't be. As well as see how you can improve.
You can use [securityheaders.io](http://securityheaders.io/) to check if any headers are being sent by your server that shouldn't be, As well as see how you can improve.
## NodeJS Dependencies
One of the best and fastest ways to keep secure is make sure your dependencies are secure. If your code is secure, but one of your dependencies isn't, it wastes all your hard work! Fortunately there's a tool to check this, [nsp](https://www.npmjs.com/package/nsp). It checks the [Node Security Project](https://nodesecurity.io/) for known vulnerabilities in your dependencies, and reports them.
One of the easiest ways to keep secure is make sure your dependencies are secure. If your code is secure, but one of your dependencies isn't, it's a waste! Fortunately there's a tool to check this, [nsp](https://www.npmjs.com/package/nsp). It checks the [Node Security Project](https://nodesecurity.io/) for known vulnerabilities in your dependencies, and reports them.
If you don't want to add `nsp` to your dependencies, they offer a [CI service for GitHub](https://nodesecurity.io/#pricing) which will run the checks for you on their own servers.
### Checking for updates
Generally, keeping things up to date is a good thing, fortunately, there's a website for that! Upload you `package.json` to [npm.click](http://npm.click/), and it'll tell you what's out of date!
Keeping dependencies up to date is generally a good thing, and likely to help with the above. Upload you `package.json` to [npm.click](http://npm.click/), and it'll tell you what's out of date, and what the most recent version is!
## Python Code
Any of the projects I work on that are more advance that a simple static server, I use Django, written in Python. Checking your python code itself is nice and simple thanks to [bandit](https://github.com/openstack/bandit). It checks your code to make sure you're writing it properly, and are catching errors. It can check the dependencies too, but it takes a very long time, and you can't change the code in there, there isn't much point.
Any of the projects I work on that are more advance that a simple static server, are probably Django, written in Python. Checking the python code itself is nice and simple thanks to [bandit](https://github.com/openstack/bandit). It checks your code to make sure you're writing it properly, and are catching errors.
### Dependencies?
There is a tool, [dependancy-check](https://pypi.python.org/pypi/dependency-check/) that supposedly checks the security of python dependencies, but it didn't want to work for me, except display the help menu, which is useful.
As with NodeJS, there's a tool that checks dependencies for security issues. But, unlike `nsp`, [safety](https://pypi.python.org/pypi/safety) not only checks your dependencies, but also their dependencies.
Although, you check for updates to your dependencies with [pypiup](https://pypi.python.org/pypi/pypiup/). Working in much the same way as npm.click (and written by the same person), except it's a CLI instead of website.
It's also possible to check for updates using [pypiup](https://pypi.python.org/pypi/pypiup/). Working in much the same way as npm.click (and written by the same person), except it's a CLI rather than a website.
## Checking
To check your hard work has made a difference, [seositecheckup](http://seositecheckup.com/) contains a helpful section on security, as well as [securityheaders.io](http://securityheaders.io/). I've enabled these tricks on my website, so you can see their results here for [securityheaders.io](https://securityheaders.io/?q=https%3A%2F%2Ftheorangeone.net&followRedirects=on) and [seositecheckup](http://seositecheckup.com/seo-audit/theorangeone.net).
To check your hard work has made a difference, [seositecheckup](http://seositecheckup.com/) contains a helpful section on security, as well as the previously mentioned [securityheaders.io](http://securityheaders.io/). I've enabled these tricks on my website, and you can see their results here for [securityheaders.io](https://securityheaders.io/?q=https%3A%2F%2Ftheorangeone.net&followRedirects=on) and [seositecheckup](http://seositecheckup.com/seo-audit/theorangeone.net).

View File

@ -4,7 +4,7 @@ template: blog
summary: Fixing "`libGL error: failed to load driver: i965`"
---
Running steam on linux is great, except for the game support obviously. But running it on an iGPU has recently been causing me problems, mainly under Arch.
Running steam on linux is great, besides for the game support obviously. But running it on an iGPU has recently been causing me problems, mainly under Arch.
## Stacktrace:
```

View File

@ -4,12 +4,13 @@ slug: student-server
summary: The college needed a server, but didn't have any server admins
---
Back when I was in college, we needed a server for computing students to learn how to use FTP, and script on a server using python CGI and [PHP](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/#an-analogy), as well as possibly for some students coursework. Fortunately, the college already had one, running the IT students microsite for extra course information. The problem was that it was majorly out of date, and no one really new how to use it properly. It was up to me and my friend Alex to bring the server up to date, and get it ready for the students who needed it.
When I was in college, we needed a server for computing students to learn how to use FTP, and script on a server using python CGI and [PHP](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/#an-analogy), as well as possibly for some students coursework.
Fortunately, the college already had one, running the IT students microsite for extra course information. The problem was that it was rather out of date, and no one really new how to use it. It was up to me and my friend Alex to bring the server up to date, and get it ready for the students who needed it.
The original plan was to update the server's OS (at that stage running Ubuntu 12.04 LTS), install python and [PHP](http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/#an-analogy) backends, add student users, and then make sure they couldn't edit each others documents. In the end, because we had no idea how the server worked, because it was setup a long time ago, we decided it was just easier to backup what we needed, then do a complete fresh install. Meaning we could set things up exactly how we wanted them, and install the tools we needed.
## User Creation
I knew we would need user accounts for all the computing teachers, the students doing A2 computing. I wasn't expecting this to amount to over 50 user accounts that needed to be created, and permissions setup for their accounts. Fortunately Alex had started writing a basic script for this, which I quickly modified.
I knew we would need user accounts for all the computing teachers and the students doing A2 computing. I wasn't expecting that to amount to over 50 user accounts. Fortunately Alex had started writing a basic script for this, which I quickly modified to permission their home directories and setup passwords.
The basis of the script was to load information about the users from a database I had created (by hand) with all the required students in, create users based on this information, and configure the permissions for the user and their home directory. The script also allowed for manual entering of users with the same permission template, in case single users needed to be created. An additional feature that I added which has proved useful now that I've left is the ability to delete users manually, and from that original database, to make sure that no student will have access to the server once they have left, well, other than me that is!

View File

@ -4,9 +4,9 @@ slug: wall-of-sheep
summary: Hacking is fun!
---
Personally, I dislike being limited by technology. If there's a system in place like a proxy filter, network restrictions, or even any remote control software, I just have to try and break through it or work around it. This was mostly the case at college.
Personally, I dislike being limited by technology. If there's a system in place like a proxy filter, network restrictions, or even any remote control software, I just have to try and break through it or work around it.
Throughout my time there, I was able to break through many parts of their network, mostly the sections involving keeping students on task. The hardest part of this was doing it in such a way that it couldn't be traced back to me, just in case they didn't appreciate me _testing_ their systems. Whilst I don't condone doing this, it is certainly a lot of fun, and I learnt a whole lot through it. To this day, they still have no idea I did any of it, unless they're reading this, in which case, __Hi__!
Throughout my time there, I was able to break through many parts of their network, mostly the sections involving keeping us students on task. The hardest part of this was doing it in such a way that it couldn't be traced back to me, just in case they didn't appreciate me _testing_ their systems. Whilst I don't condone doing this, it is certainly a lot of fun, and I learnt a whole lot through it. To this day, they still have no idea I did any of it, unless they're reading this, in which case, __Hi__!
<!--- make this dynamic at some point! -->

View File

@ -8,11 +8,11 @@
<div class="container text-center">
<h3>The page you were looking for could not be found.</h3>
<h1>¯\_(ツ)_/¯</h1>
<p>For now, here's a picture of a cat!</p>
</div>
</section>
<section>
<div class="container text-center">
<p>For now, here's a picture of a cat!</p>
<img src="https://2.bp.blogspot.com/-mh8wLBv3gzk/TcTXhBCp3oI/AAAAAAAAxGA/dE9RuE1bNdc/s1600/CaturdayTechSupport6.jpg" alt="Cat" style="width: 75%;" />
</div>
</section>

View File

@ -1,19 +1,13 @@
<head>
<meta name="slug" content="about" />
<meta name="title" content="About Me" />
<meta name="title" content="About" />
<meta name="no_container" content="true" />
</head>
<body>
<section id="me">
<div class="container">
<div class="row">
<div class="col-sm-8">
<p>
Hi, I'm Jake, a software engineer currently working for a company in Brighton. I've been working as a developer since mid-2015, and have been studying IT and computer science since college.
I work as a full stack developer, but I prefer working on servers and mobile apps.
</p>
</div>
<div class="col-sm-4 text-center github-card-container">
<div class="text-center github-card-container">
<div data-theme="medium" data-github="RealOrangeOne" class="github-card"></div>
</div>
</div>
@ -22,27 +16,34 @@
</section>
<section class="bg-primary" id="website">
<div class="container">
<h2>About my website</h2>
<h2>Website</h2>
<p>
My website is the culmination of all my knowledge, compiled into 1 place. It not only contains all my projects, but it in itself is a project. Making sure this website works properly is a tall order, especially considering it's self hosted.
My website is the culmination of all my knowledge, compiled into 1 place. It not only contains all my projects, but is itself is a project.
</p>
<p>
The site is primarily powered by <a href="http://getpelican.com">Pelican</a>, a static site generator. This converts markdown and HTML templates into static HTML files. The templates are generated using <a href="http://jinja.pocoo.org/">Jinja2</a>, a templating language similar to <a href="https://www.djangoproject.com/">Django</a>'s. This allows me to write nice clean, <i>DRY</i> content, and have it come out as clean HTML.
The site is primarily built with <a href="http://getpelican.com">Pelican</a>, a static site generator. This allows me to write nice clean, <i>DRY</i> content, and have it come out as clean, minified HTML.
</p>
<p>
The static content (JS, CSS etc) is built using a custom build pipeline. The Javascript is built and compiled using <a href="https://babeljs.io/">Babel</a> and <a href="http://browserify.org/">Browserify</a>, and the CSS is written using <a href="https://github.com/sass/node-sass">node-SCSS</a> as a pre-processor.
The Javascript is built using <a href="http://browserify.org/">Browserify</a>, and the CSS is built using <a href="https://github.com/sass/node-sass">node-SCSS</a>. Both are run as a build step when pelican builds.
</p>
</div>
</section>
<section id="server">
<div class="container">
<h2>The Server</h2>
<h2>Server</h2>
<p>
The website is hosted on my <a href="/setup/web-server/">UK VPS</a>. Previous versions have been hosted on <a href="https://www.1and1.com/">1&amp;1</a> and <a href="http://www.myWindowsHosting.com/index?r=100196823">MyWindowsHosting</a>.
The website is hosted on part of my dedicated server from <a href="https://www.soyoustart.com/en/">SoYouStart</a>, running an Ubuntu Server VM with <a href="http://dokku.viewdocs.io/dokku/">Dokku</a> installed.
</p>
<p>
The static files are served using a <a href="https://github.com/RealOrangeOne/host-container">custom Express server</a>, which allows me to auto-deploy the site from my <a href="https://circleci.com/">CI</a>. This is then served using a custom, closed-source reverse proxy, which makes local development and domain switching much easier. This is pointed to by <a href="https://www.nginx.com/">NGINX</a>, which actually serves port 80.
The prebuilt static files are served using a <a href="https://github.com/RealOrangeOne/tstatic">custom Express server</a>, to make the site as fast and effective as possible.
</p>
</div>
</section>
<section class="text-center">
<div class="container">
<div class="btn-group">
<a class="btn btn-github btn-xl" href="https://github.com/RealOrangeOne/theorangeone.net"><i class="fa fa-github fa-lg"></i> View Source</a>
</div>
</div>
</section>
</body>

View File

@ -10,7 +10,7 @@
<div class="header-content-inner">
<h1>{{ AUTHOR }}</h1>
<hr>
<p>Full-stack Developer, Hardware tinkerer, <i>Hacker</i> of all the things</p>
<p>Full-stack Developer, Security Enthusiast, <i>Hacker</i> of all the things</p>
</div>
</div>
<a href="#about" class="page-scroll">
@ -23,7 +23,7 @@
<h2 class="section-heading">About</h2>
<hr class="light">
<p>
Hi, I'm Jake. I've been working as a full-stack developer for just over a year. This is my website, where all my projects, blog posts, and other stuff live. Some of it useful, some not so much!
I'm Jake. A software engineer with a passion for security and privacy. This is my website, a home for my projects, blog posts, and anything else for that matter.
</p>
<a href="/about/" class="btn btn-primary-dark btn-xl">More Info</a>
</div>
@ -37,29 +37,25 @@
<div class="col-lg-3 col-md-6">
<div class="service-box">
<i class="fa fa-4x fa-server wow bounceIn text-primary" data-wow-delay=".3s"></i>
<h3>Server</h3>
<p>Designing and building high-performance server applications and environments</p>
<h3>Servers</h3>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="service-box">
<i class="fa fa-4x fa-firefox wow bounceIn text-primary" data-wow-delay=".5s"></i>
<h3>Client</h3>
<p>Creating functional, fast, and responsive websites</p>
<i class="fa fa-4x fa-lock wow bounceIn text-primary" data-wow-delay=".5s"></i>
<h3>Security</h3>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="service-box">
<i class="fa fa-4x fa-mobile wow bounceIn text-primary" data-wow-delay=".7s"></i>
<h3>Mobile</h3>
<p>Building lightweight, cross-platform mobile applications</p>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="service-box">
<i class="fa fa-4x fa-usb wow bounceIn text-primary" data-wow-delay=".9s"></i>
<h3>Hardware</h3>
<p>Constructing workflow-specific Desktops, Servers and Notebooks</p>
</div>
</div>
</div>
@ -116,7 +112,6 @@
<div class="container text-center">
<h2 class="section-heading">More Content</h2>
<hr class="primary">
<p>There's more than just my project and blog!</p>
{% for category, articles in categories %}
{% if category.name not in ['blog', 'projects'] %}
<a class="btn btn-primary btn-xl margin" href="{{ category.url }}">

View File

@ -5,14 +5,13 @@ slug: astrill-extractor
repo: https://gist.github.com/RealOrangeOne/050da86871fb952ba7bfe97eece8555c
---
Astrill, my VPN of choice, allows you to export OpenVPN config files for all it's VPNs, allowing you to connect on platforms it doesn't provide clients for. The AUR package `astrill` has started becoming really unstable on my machine, so I decided to switch it out for these VPN files, as gnome has excellent support for OpenVPN.
The export step is really simple, you just login to the web portal, create an entry for your machine, and export the config files. Their tutorial for this can be found [here](http://wiki.astrill.com/index.php/Astrill_Setup_Manual:How_to_configure_OpenVPN_with_Network_Manager_on_Linux). The problem with this is that some applications wont accept the certificates embedded into the file like this. (Gnome does, but I only realised that whilst writing this). So I started writing a simple parser to extract the certificates from the config files, and saving them as separate files.
Astrill, my VPN of choice, allows you to export OpenVPN config files for all it's VPNs, allowing you to connect on platforms it doesn't provide clients for, which albeit isn't many. The AUR package `astrill` has started becoming really unstable on my machine recently, so I decided to switch it out for `ovpn` files, as gnome has excellent support for OpenVPN.
The export step is really simple, you just login to the web portal, create an entry for your machine, and export the config files. Their tutorial for this can be found [here](http://wiki.astrill.com/index.php/Astrill_Setup_Manual:How_to_configure_OpenVPN_with_Network_Manager_on_Linux). The only problem is that some applications won't accept the certificates embedded into the file like astrill provide. (Gnome does, but I only realised that whilst writing this).
<script src="https://gist.github.com/RealOrangeOne/050da86871fb952ba7bfe97eece8555c.js"></script>
The above script will split out the files and save them into separate directories for each config file. These files can then be imported and used in an openvpn-compatable application.
### Is it even needed?
Certain network-manager packages actually supports importing `.ovpn` files directly, and sets everything up for you, including the files for the keys etc, without needing to extract them before. This does make my script useless to me, but hopefully someone will find it useful!
Certain network managers do support importing `.ovpn` files directly, and sets everything up for you, including the files for the keys etc, without needing to extract them before. Gnome's `network-manager` does this. This does make my script useless to me, but hopefully someone will find it useful!

View File

@ -6,11 +6,11 @@ repo: https://github.com/RealOrangeOne/attack-on-blocks/
download_link: https://github.com/RealOrangeOne/attack-on-blocks/archive/master.zip
---
Attack on Blocks is a space invaders style game that I wrote for my IT coursework, for the games development unit. We were allowed to make any game that we wanted, provided it could be done within the time limits, be very easy to play, and easily run on the college computer (which were pretty terrible). I had never written a game before, so I knew this was going to be a challenge.
Attack on Blocks is a space invaders style game I wrote for my IT coursework, for the games development unit. We could make any game we wanted, provided it could be done within the time limits, was very easy to play, and easily run on the college computers (which were pretty terrible).
I decided to write the game in Python, seeing as there were other people in the class that could help me bug report and test features, and because it was easy to run on the college computers. I used PyGame for the graphics library, even though I had never used it before, because it was really simple to use, and there was a lot of support and documentation online.
I decided to write the game in Python, seeing as there were other people in the college that could help me bug report and test features, and because it was already installed on the college computers. I used PyGame for the game engine, because it's really simple to use, and there is a lot of support and documentation online.
## Easter Eggs
One of the key features of this take on space invaders (and unfortunately the thing I spent the most time on), is the easter eggs. There are a few dotted around the game, which make the game either much easier, or way more fun! At the moment, there are 3 main easter eggs, the first enabling the other 2. If you would like to know what they are, click the button below. If not, pay the game and try and find them, or search through the source to find them (it's not too hard through the source).
One of the key features of this (and unfortunately the part I spent the most time on), is the easter eggs. There are a few dotted around the game, which make the game either much easier, or way more fun! At the moment, there are 3 main easter eggs, the first enabling the other 2. If you would like to know what they are, click the button below. If not, pay the game and try and find them, or search through the source to find them (it's not too hard through the source).
As you will see (If and when you find the easter eggs), most of them are completely useless, and completely unrelated to the game or anything else. The main reason they were put in was because I'm friends with people that pester to the point it's just easier to give in. Hence there are some really very odd ones!
As you will see (If and when you find the easter eggs), most of them are completely useless, and completely unrelated to the game or anything else. The main reason they were put in was because I'm friends with people that pester to the point it's just easier to give in, hence they are really rather odd!

View File

@ -5,10 +5,12 @@ slug: bsod-enabler
summary: Call a _Blue Screen of Death_ on demand! It's more fun than it sounds
---
For those that use Windows, the famous [Blue Screen of Death](https://en.wikipedia.org/wiki/Blue_Screen_of_Death) is an annoyance that plagues computers, causing error, frustration, and even data loss. They happened to me a lot whilst I was trying to configure my computer, and I thought _I wonder who else I can annoy with a BSOD_
For those that use Windows, the famous [Blue Screen of Death](https://en.wikipedia.org/wiki/Blue_Screen_of_Death) is an annoyance that plagues computers, causing error, frustration, and even data loss. They happened to me a lot whilst I was trying to configure my computer, and I thought _I wonder who else I can annoy with one of these_...
__And thus the BSOD_Enabler was born!__
After researching into it for a while, it turns out that there are a few different ways to cause a BSOD, unfortunately most of which are by doing things that are meant to cause a BSOD, and can therefore be dangerous to a computer, something I didn't really want. Then I stumbled upon [this article](http://www.wikihow.com/Force-a-Blue-Screen-in-Windows), which shows that you can in fact raise a BSOD without causing any errors or damage to your computer. Now to write a program that can do it too!
After researching into it for a while, it turns out that there are a few different ways to cause a BSOD, unfortunately most of which are the reason a BSOD is there in the first place, which could potentially damage the target machine, something I didn't want! Then I stumbled upon [this article](http://www.wikihow.com/Force-a-Blue-Screen-in-Windows), which shows that you can in fact raise a BSOD without causing any errors or damage to your computer.
Obviously there are many different ways, and probably far better ways of doing this, but I wanted something that was simple to use, fast, and could be done by anyone, no matter how technically illiterate. So I decided to write it in C#, and use a windows console interface.
Obviously there are many different ways, and probably far better ways of doing this, but I wanted something that was simple to use, fast, and could be done by anyone, no matter how technically illiterate. I decided to write it in C#, and use a windows console interface so the whole thing could be done with a few key presses.
Unfortunately I can't find the original source, or a copy of the executable. Once I find them, I'll update this post!

View File

@ -7,14 +7,19 @@ summary: How I set up my machines just the way I like them!
---
### What are dotfiles?
Dotfiles are a way for people to store their settings and preferences to make setting up a new computer that much easier. They can usually be found in a persons VCS profile.
Dotfiles are a way for people to store settings and preferences to make setting up a new computer that much easier. I use both my laptop, desktop and work machine almost every day, and want them to be setup in an almost identical way.
### Taking dotfiles 1 step further
I use both my laptop and work machines almost every day, and want them to be setup in an almost identical way, despite the fact that 1 runs Ubuntu, and the other runs Arch. The main things I needed synced over were my `.bashrc` file and my atom config.
Most people I've seen store their dotfiles on GitHub. This is a great solution as it's possible to add authentication before accessing them, and stores a complete version history. This solution doesn't really work for me, having to run `git pull` is just too much effort to update files!
## How I did it
Originally, I used my owncloud server to sync all my dotfiles between my computer, and then used symlinks to split out the relevant files into the relevant locations.
I used my nextcloud server to sync all my dotfiles between my devices, and then used symlinks to split out some of the files into the right locations. This means that changes can be updated live between machines
This worked brilliantly, config files were automatically synced as soon as I made a change. This was especially great for my `.bashrc` file! The main problem was with atom packages, I had to manually store what files were installed, then manually install them on the other machine from the saved file. This was made easier by `apm` allowing me to list them and automatically save them in a file, but it wasn't perfect.
This worked brilliantly, config files were automatically synced as soon as I made a change, just as soon as they connected to a network.
After I got this all setup, I started committing the files to my GitHub too, so they could be publicly accessibly. I had to use the `.gitignore` to stop some parts being public like SSH config, but the rest is completely open!
### Atom
The main problem was with atom packages, I had to manually store what packages were installed, then manually install them on the other machine from the saved file. This was made easier by `apm` allowing me to list them and automatically save it to a file, but it wasn't perfect.
Eventually, after looking into possible solutions, I came across the [`Sync settings`](https://atom.io/packages/sync-settings) package, which was the answer to my prayers! It saved all my config data for atom into [a gist](https://gist.github.com/RealOrangeOne/9f9a4dd799ad01aa0502a09f06cbf454/), which I could then backup and restore too from within the application. It also warned me when my local data was out of date from the remote, and prompt me to download the updated data.
Eventually, after looking into possible solutions, I came across the [`Sync settings`](https://atom.io/packages/sync-settings) package, which seemed to be the answer to my prayers! It saved all my config data for atom into a gist, which I could then backup and restore too from within the application. It also warned me when my local data was out of date from the remote, and prompt me to download the updated data.

View File

@ -1,16 +0,0 @@
---
title: Hipchat emoticons for all
template: projects
slug: hipchat-emoticons-for-all
repo: https://github.com/RealOrangeOne/hipchat-emoticons-for-all/
---
After starting my new job at DabApps, I was introduced to the world of [Hipchat](https://hipchat.com), and it's wonderful array of emoticons, as well as the ones added. It was wonderful, it made communicating with friends and colleagues much more interesting!
Unfortunately, the emoticons on the other services we use, like [GitHub](https://github.com), were terrible in comparison. So it was after a discussion with [@JakeSidSmith](https://github.com/jakesidsmith) about him just using things like (facepalm), (notsureif), and (wat) in [Facebook messenger](https://www.messenger.com/) and hoping people understand what it means, that I decided to make 'Hipchat Emoticons for all', so people like him could use a much better set of emoticons.
The premiss is very simple, whenever it sees a hipchat emoticon code, like (notsureif), it replaces it with an emoticon. If only writing the code could have been this simple! I started writing the plugin in firefox, using [Jetpack](https://wiki.mozilla.org/Jetpack), which uses Javascript. The initial stages of the code were very simple, but I encountered problems making sure that anything loaded after the page was loaded (such as a Facebook message), be changed too.
Fortunately after many hours of testing, and changing the code, I finally got everything working perfectly, and in a way that made adding new sites incredibly easy! The code isn't the greatest in terms of performance, and there are some things that could have obviously been done better, but this was all done to help with a shared codebase between Chrome and Firefox, which don't play nice when it comes to extensions.
Currently the application is in very beta stages right now, only having tested partial support for GitHub, but the code is all available on GitHub, if people have their own suggestions of improvements.

View File

@ -1,7 +0,0 @@
---
title: JSFuckify
template: projects
slug: jsfuckify
repo: https://github.com/RealOrangeOne/JSFuckify
status: draft
---

View File

@ -6,15 +6,14 @@ repo: https://gist.github.com/RealOrangeOne/6dc94875c93b787e5834
summary: A JSON file to help decode morse-code
---
It's not often someone will need to decode text into morse code (and visa-versa), but if I had something like this when I needed it, it would have saved me hours of time!
It's not often people need to decode text into morse code (and visa-versa), but if I had something like this when I needed to, it would have saved me hours of time!
I originally wrote this code for the [Student Robotics 2015](/robotics/2015/) Entry, to convert a string message into a morse code message that would be transmitted using LEDs, for aesthetics and debugging. Unfortunately due to a fixed time frame, this idea was scraped before it could be fully implemented. Fortunately the decoder worked perfectly!
I originally needed this for the [Student Robotics 2015](/robotics/2015/) entry, to convert a string message into morse code that would be transmitted using LEDs, for aesthetics and debugging. Unfortunately due to a fixed time frame, this idea was scraped before it could be fully implemented. However, the decoder worked perfectly!
## Usage
In order to make it accessible for as many people in as many different languages as possible, the data is in JSON format. Just find a JSON library for your desired language, and it'll work perfectly!
The source of the library is on GitHub as a gist. I recommend downloading the file to use yourself, however for testing you can use GitHub's raw view as a hotlink.
In order to make it accessible for as many people in as many different languages as possible, I converted our code from python to JSON. Just find a JSON library for your desired language, and it'll work perfectly!
The source of the library is on GitHub as a gist. I recommend downloading the file to use yourself, however for testing you can use GitHub's raw file as a hotlink.
<script src="https://gist.github.com/RealOrangeOne/6dc94875c93b787e5834.js"></script>

View File

@ -1,7 +0,0 @@
---
title: React native busy indicator
template: projects
slug: react-native-busy-indicator
repo: https://github.com/RealOrangeOne/react-native-busy-indicator
status: draft
---

View File

@ -1,7 +0,0 @@
---
title: React native mock
template: projects
slug: react-native-mock
repo: https://github.com/lelandrichardson/react-native-mock
status: draft
---

View File

@ -6,27 +6,31 @@ repo: https://gist.github.com/RealOrangeOne/7da9a3dd1bf90ecdf7be
summary: Simple script to win the Wiki Game
---
For those who don't know what the Wiki Game is: [The Wiki Game](http://thewikigame.com) is an online game where you attempt to navigate through wikipedia from a start page to a goal page using as few other pages as possible. Once I was shown the Wiki Game by my friend, and after I realised that I really wasn't very good at it, I looked into how the system worked, and how I could beat it.
[The Wiki Game](http://thewikigame.com) is an online game where you attempt to navigate through wikipedia from a start page to a goal page using as few other pages as possible.
I couldn't see how the back end worked, but after playing a few games and checking what happened on the page,the way that the game was won was when the iframe was at the final page location, or at least a clone of it on their servers with extra querystring information.
Not long after I was shown the it, I realised that I _really_ wasn't very good at it. After about 15 minutes of coming in last place all the time, I started to wonder how it worked, and how I could beat it.
With this information, I started to write some javascript that would change the location of the iframe to the goal. Fortunately for me, there was already a link to the real winning page, so I could use that to construct the final URL, and direct the iframe to it, meaning I was able to win the game in 1 turn.
## Source
Naturally, the source for this was written in javascript, and relies heavily on the fact that the wiki game uses jQuery so I can plug into components and events really easily. The code can be found in the GitHub gists below. Both the standard and compact versions are available.
<script src="https://gist.github.com/RealOrangeOne/7da9a3dd1bf90ecdf7be.js"></script>
As it turns out, it really isn't very hard! It does require injecting some JS into the page, but it's not that much.
## Usage
1. Start a new game on [Wiki Game](http://thewikigame.com/speed-race), __don't__ press start!
2. Open your browser's developers console. This will vary from browser.
3. Open the Javascript console
4. Paste the compact version of the code there, and execute it (press enter)
5. Congratulations, you just won!
1. Start a [new game](http://thewikigame.com/speed-race), __don't__ press start!
2. Open your browser's developer console. This will vary from browser.
3. Paste the compact version of the code (`wiki-game-solver.min.js`), and execute it (press enter)
4. Congratulations, you just won!
If you want to win more games, just re-paste the code, it works as often as you like!
## How it works
The game isn't open source, so I couldn't see how the back end worked, but after playing a few games and checking what happened on the page, I worked out what it was doing.
The game was won when the iframe was at the final page location, or at least a clone of it on their servers with some extra querystring information.
With this, I started to write something that would change the location of the iframe to the goal. Fortunately for me, the goal URL was on the page. So all it took was a little switcheroo to win!
### Source
The source for this was written in pure JS, and relies heavily on the fact that the wiki game uses jQuery so I can plug into components and events really easily. The code can be found in the GitHub gists below. Both the standard and compact versions are available.
<script src="{{ article.repo }}.js"></script>
### Disclaimer
As I experienced whilst developing this, the people that play Wiki Game don't tend to like people cheating. There were a lot of people getting very annoyed whilst I was developing and testing. So please use this at your own risk! At the moment I don't think there is any kind of banning system, but be warned!

View File

@ -6,8 +6,27 @@ repo: https://github.com/RealOrangeOne/yoga-pal
summary: Control screen rotation, touch screen, and trackpad using the terminal
---
Once I started work, I bought myself a _Lenovo Yoga 3 14"_ laptop, because I needed a thin and light for trains etc. Unfortunately this came with windows, which within 10 minutes was running Ubuntu Gnome! Ubuntu greatly increased the performance, but I had to sacrifice all the screen, touchpad and keyboard customisation when changing 'modes'.
Once I started work, I bought myself a _Lenovo Yoga 3 14"_ laptop, because I needed a thin and light laptop for trains and the office. This came with windows, which within 10 minutes was running Ubuntu Gnome! Ubuntu greatly increased the performance, but I had to sacrifice all the screen, touchpad and keyboard customisation when changing 'modes'.
I found [this thread](https://askubuntu.com/questions/450066/rotate-touchscreen-and-disable-the-touchpad-on-yoga-2-pro-in-rotated-mode) on _Ask Ubuntu_ with someone else trying to find a solution to this, to find a nice way of rotating the screen when in tablet mode. On the thread was a really nice simple [script](https://askubuntu.com/a/485685/432138) that rotated the screen perfectly, and did the touchscreen too. This script worked great, doing exactly what it said it did, nicely and quickly, however it wasn't a great solution for me. Yes it worked, but it didn't allow me to change anything else, like the touchpad.
I found [this thread](https://askubuntu.com/questions/450066/rotate-touchscreen-and-disable-the-touchpad-on-yoga-2-pro-in-rotated-mode) with someone else trying to find a solution to this, to find a nice way of rotating the screen when in tablet mode. On the thread was a really nice simple [script](https://askubuntu.com/a/485685/432138) that rotated the screen perfectly, and did the touchscreen too.
So I started working on my own CLI, based off the above script, to allow me to tweak everything, so the laptop can be used as it was intended.
This script worked great, doing exactly what it said it did, nicely and quickly, however it wasn't a great solution for me. Yes it worked, but it didn't allow me to change anything else, like the touchpad.
So I wrote my own CLI, based off the above script, that would allow me to tweak everything, so the laptop can be used as it was intended. With a simple command, I could swap the _mode_ of the laptop to match how I was using it.
eg:
```bash
$ yoga mode tablet # Set to tablet mode
$ yoga mode laptop # Reset to laptop mode
```
After writing this, It ended up finding an accidental usage. The touchscreen started glitching out, causing ghost presses on the screen, making the mouse move all over the screen and switch focus all over the place. Fortunately, I'd already written a command to disable the touch screen and prevent this:
```bash
$ yoga disable touch
```
Problem solved!
Whilst I've only tested this on my laptop, there's no reason it shouldn't work on others too! If it doesn't, submit an [issue]({{ article.repo }}/issues/)!

View File

@ -1,37 +1,44 @@
<head>
<meta name="title" content="Student Robotics 2014">
<meta name="slug" content="2014">
z<head>
<meta name="title" content="Student Robotics 2014" />
<meta name="slug" content="2014" />
<meta name="no_container" content="true" />
<meta name="image" content="https://c2.staticflickr.com/8/7670/17115168179_1ef30ac6e9_b.jpg" />
</head>
<body>
<div class="row">
<div class="col-sm-4">
<img class="img-rounded" src="https://c2.staticflickr.com/8/7670/17115168179_1ef30ac6e9_b.jpg" />
</div>
<div class="col-sm-8">
<section>
<div class="container">
<p>
Welcome to the homepage of Collyer's Student Robotics 2014 team. Originally, this page was a part of the competition, but due to 3 different site rewrites, the original content and formatting has been lost.
</p>
</div>
</div>
<div class="row">
<div class="col-sm-8">
</section>
<section class="bg-primary">
<div class="container">
<h2>The Competition</h2>
<p>
The game for this year was called <em>Slots</em>. Teams compeated to get as many of their tokens into a scoring zone in 3 minutes. Teams would also get extra points if they could get the token into a zones 'slot', an area the size of a token, raised by around 3 cm.
The game for this year was called <em>Slots</em>. Teams compeated to get as many of their tokens into a scoring zone in 3 minutes. Teams would also get extra points if they could get the token into a zones 'slot', an area the size of a token, raised by around 3cm.
</p>
<p>
To see a copy of the rules from the competition, <a href="https://www.studentrobotics.org/resources/2014/rulebook.pdf">Click Here!</a>
</p>
</div>
<div class="col-sm-4">
<div class="list-group">
<a class="list-group-item active h4">Quick Links</a>
<a href="https://github.com/SR-CLY/2014" class="list-group-item">The Code</a>
<a href="https://www.flickr.com/photos/theorangeone/albums/72157651820386449" class="list-group-item">Gallery</a>
<a href="http://collyers-robotics14.tumblr.com/" class="list-group-item">Blog</a>
<a href="https://www.studentrobotics.org/schools/game#2014" class="list-group-item">Competition Information</a>
</div>
</section>
<section>
<div class="container text-center">
<h2 class="section-heading">Quick Links</h2>
<hr class="primary">
<a class="btn btn-primary btn-xl margin" href="https://github.com/SR-CLY/2014">
The Code
</a>
<a class="btn btn-primary btn-xl margin" href="https://www.flickr.com/photos/theorangeone/albums/72157651820386449">
Gallery
</a>
<a class="btn btn-primary btn-xl margin" href="http://collyers-robotics14.tumblr.com/">
Blog
</a>
<a class="btn btn-primary btn-xl margin" href="https://www.studentrobotics.org/schools/game#2014">
Competition Information
</a>
</div>
</div>
</section>
</body>

View File

@ -4,22 +4,21 @@ html_title: The Code | SR2015
slug: 2015/code
---
The code used for this competition was by far the most complicated and advanced code that had ever been written by a Collyer's team.
The code used for this competition was by far the most complicated and advanced code ever written by a Collyer's team.
The main change between any other year was using an entirely co-ordinate based movement system. Any input taken in from the camera was converted to co-ordinates in terms of the arena, so we could plot our movement more accurately and allow for any immovable objects such as the internal walls.
The main change between any other year was a co-ordinate based movement system. Any input taken in from the camera was converted to co-ordinates, so we could plot our movement more accurately and allow for any immovable objects such as the internal walls.
The addition of this coordinate system allowed us to create the killer feature of this year, the position correction code. This code allowed us to automatically correct our position after we scanned for a marker, meaning we could allow for any imperfections in the build.
The addition of this coordinate system allowed us to create the killer feature of this year, the position correction code. This code allowed us to automatically correct our position after we scanned for a marker, so we could allow for the motors not moving us exact distances.
There were a lot of really great features in this years code, that made our robot function much faster:
### Other features
- Position correction
- co-ordinate based movement
- Arc movement
- Distance based movement
- Pre-start calibration
- _move 'til touch_
- Camera rotation
### So, where is this code?
Unfortunately, due to the number of features, we have decided to keep the source private, so that only other Collyer's teams may access it. A lot of blood, sweat and tears (not literally) went into writing this code, and it would be a shame if that were to be used to help any of our opponents.
### So, where is it?
Unfortunately, due to the number of features, we have decided to keep the source internal. A lot of blood, sweat and tears (not literally) went into writing this code, and it would be a shame if that were to be used to help any of our opponents.
You can however see the code from some of our other years on our [GitHub organisation](https://github.com/SR-CLY).

View File

@ -1,21 +1,19 @@
<head>
<meta name="title" content="Student Robotics 2015">
<meta name="slug" content="2015">
<meta name="title" content="Student Robotics 2015" />
<meta name="slug" content="2015" />
<meta name="no_container" content="true" />
<meta name="image" content="https://c2.staticflickr.com/8/7674/17308375182_a172a341d6_h.jpg" />
</head>
<body>
<div class="row">
<div class="col-sm-4">
<img class="img-rounded" src="https://c2.staticflickr.com/8/7726/17309695331_584e7de16c_z.jpg" />
</div>
<div class="col-sm-8">
<section>
<div class="container">
<p>
Welcome to the homepage of Collyer's Student Robotics Team 2015 (The 'A' Team) - Creators of 'A.L.I.C.E'! Here you can see everything that goes on throughout the competition.
</p>
</div>
</div>
<div class="row">
<div class="col-sm-8">
</section>
<section class="bg-primary">
<div class="container">
<h2>The Competition</h2>
<p>
As was announced at kickstart, the game for this year is a take on the classic gamemode Capture the Flag. 4 teams compete over 5 flags to move as many of them as they can into their scoring zones. The person with the most flags in their scoring zone wins.
@ -27,16 +25,26 @@
To see a copy of the rules from the competition, <a href="https://www.studentrobotics.org/resources/2015/rulebook.pdf">Click Here!</a>
</p>
</div>
<div class="col-sm-4">
<div class="list-group">
<a class="list-group-item active h4">Quick Links</a>
<a href="/robotics/2015/robot/" class="list-group-item">The Robot - A.L.I.C.E</a>
<a href="/robotics/2015/code/" class="list-group-item">The Code</a>
<a href="https://flic.kr/s/aHska26DoH" class="list-group-item">Gallery</a>
<a href="http://collyersstudentrobotics.blogspot.co.uk/" class="list-group-item">Blog</a>
<a href="https://www.studentrobotics.org/schools/game#2015" class="list-group-item">Competition Information</a>
</div>
</section>
<section>
<div class="container text-center">
<h2 class="section-heading">Quick Links</h2>
<hr class="primary">
<a class="btn btn-primary btn-xl margin" href="/robotics/2015/robot/">
The Robot - A.L.I.C.E
</a>
<a class="btn btn-primary btn-xl margin" href="/robotics/2015/code/">
The Code
</a>
<a class="btn btn-primary btn-xl margin" href="https://flic.kr/s/aHska26DoH">
Gallery
</a>
<a class="btn btn-primary btn-xl margin" href="http://collyersstudentrobotics.blogspot.co.uk/">
Blog
</a>
<a class="btn btn-primary btn-xl margin" href="https://www.studentrobotics.org/schools/game#2015">
Competition Information
</a>
</div>
</div>
<div class="image-panel" data-image="https://c2.staticflickr.com/8/7674/17308375182_a172a341d6_h.jpg"></div>
</section>
</body>

View File

@ -2,45 +2,36 @@
title: The Robot - A.L.I.C.E
html_title: The Robot | SR2015
slug: 2015/robot
image: https://c2.staticflickr.com/8/7726/17309695331_584e7de16c_z.jpg
---
<div class="row">
<div class="col-sm-4">
<!-- Image of initial design (on paper) -->
</div>
<div class="col-sm-8">
<p>
Our entry for 2015, named 'A.L.I.C.E', was a massive improvement over last years model, in both design, and the code for it. Before ALICE was built, the design team built us a very basic chassis usind scrap parts from 2014, which allowed us to write a large amount of the code base before we even had the robot built. Originally I wanted the final chassis to be built before the end of January, so we had a lot of time to test out the design for the robot and test using the final, in reality, it was closer to the middle of march before this was a reality.
</p>
</div>
</div>
Our entry for 2015, _Alice_, was a massive improvement over last years model, in both design, and the code for it. Before ALICE was built, the design team built us a very basic chassis using scrap parts from 2014, which allowed us to write a large amount of the code base before we even had the robot built. Originally I wanted the final chassis to be built before the end of January, so we had a lot of time to test out the design for the robot and test using the final, in reality, it was closer to the middle of march before this was a reality.
The entire chassis was made from sheets of plywood, which we laser cut in college, allowing us to be very precise in the design of the robot to make sure that all the pieces would fit together properly, making the chassis less likely to break.
The initial design was conceived by Ben, at kickstart, and was then refined over the coming weeks the rest of the building team. This was made much easier from the use of the 3D model, that Ben made, which helped us visualize any changes that were to be made, as well as work out strategy by seeing the measurements we had to work with.
The initial design was conceived by Ben, at kickstart, and was then refined over the coming weeks by me and the rest of the building team. This was made much easier from the use of the 3D model, that Ben made, which helped us visualize any changes that were to be made, as well as work out strategy by seeing the measurements we had to work with.
Once the build was completed, it was to a much higher design and quality than I could've ever imagined! It allowed us to forget about any shortcomings when it came to chassis, not having to compensate for weight distribution, or worry about the grip on the wheels, as we had to do last year.
Once the build was completed, it was to a much higher design and quality than I could have ever imagined! It allowed us to forget about any shortcomings when it came to chassis, not having to compensate for weight distribution, or worry about the grip on the wheels.
<div class="image-panel" data-image="https://farm1.staticflickr.com/737/20984044320_ccbba155f9_o.gif"></div>
<section class="image" data-image="https://farm1.staticflickr.com/737/20984044320_ccbba155f9_o.gif"></section>
## Why call it _A.L.I.C.E_?
The decision to name the robot 'Alice' was a decision made by the whole group!
That's a lie.
That's a lie, Ben suggested it and as no one had any better ideas and because he gets overruling vote on this, for some reason , it stuck.
Ben suggested it and as no one had any better ideas and because he gets overruling vote on this, for some reason , it stuck.
One idea was also suggested that we name the robot after the first sponsor we got, but as we didn't get one until after the team split, the other team took that name instead.
After this decisions was made, I decided to set out to find the cheesiest acronym we could for 'Alice', to make the name slightly more interesting, and not some random girls name pulled from thin air on the bus ride home from kickstart. There were a few rather good ideas, most of them coming from Sam:
I decided to try to find the cheesiest acronym for 'Alice', to make the name slightly more interesting, and not some random girls name pulled from thin air on the bus ride home from kickstart. There were a few rather good ideas, most of them coming from Sam:
- 'Automated Laser-cut Interactive Capturing Entity'</li>
- 'Abnormally Lame and Inaccurate Control-less Engine'</li>
- 'Anti-Losing Immaculate Competitive Extravaganza'</li>
- _'Automated Laser-cut Interactive Capturing Entity'_
- _'Abnormally Lame and Inaccurate Control-less Engine'_
- _'Anti-Losing Immaculate Competitive Extravaganza'_
One idea was also suggested that we name the robot after the first sponsor we got, but as we didn't get one until after the team split, the other team took that name instead. In the end we decided to go with one that Sam initially suggested, so 'ALICE' officially stands for:
But the one we went with was:
<h3 class="text-center">'Autonomous Logistics and Inevitable Collision Engine'</h3>
### _'Autonomous Logistics and Inevitable Collision Engine'_
<div class="image-panel" data-image="https://c2.staticflickr.com/8/7656/16687742984_ee1c76d1d9_h.jpg"></div>
<section class="image" data-image="https://c2.staticflickr.com/8/7656/16687742984_ee1c76d1d9_h.jpg"></section>

View File

@ -6,30 +6,29 @@ image: /static/img/header.jpg
---
My setup is everything, I use my computer at least once a day to browse the internet, work on projects, even update this website, so it's very important that everything works perfectly and the fastest it can. Obviously this machine is probably a little too powerful for someone that does almost primarily software development, but it means when I want to do things like video editing, 3D modelling, or anything else that would require a high end computer, I can, because my computer is equipped to handle it.
My setup is everything, I use my computer at least once a day to browse the internet, work on projects, even update this website, so it's very important that everything works perfectly and the fastest it can. Obviously this machine is probably a little too powerful for someone that does almost primarily web development, but it means when I want to do things like video editing, 3D modelling, or anything else that would require a high end computer, I can, because my computer is equipped to handle it.
Over the years, my setup has evolved from a single monitor i5 machine, to a triple monitor AMD FX-based monster of a computer.
{{ article.screenfetch }}
[Current Parts list]()
This generation of my build was in response to an updated workflow. I'd recently started working on 3D modelling, and found the wonderful world that is PC gaming, and needed something slightly more powerful. It hasn't changed much since I originally built it, besides storage. The CPU cooler was changed from a 120mm AiO to an air cooler to stop things overheating, and the case was changed so I could fit more stuff in, like a few more drives.
##### [Current Parts list]()
### Next Generation
I've been using the current generation for around 3 years now, and it's worked perfectly for all of this. The main reason I'm upgrading is to get more features, The 990FX chipset is very old, and my motherboard is missing a few key features, such as dynamic fan control.
I've been using the current generation for around 5 years now, and it's worked perfectly for all of this. The main reason I'm upgrading is to get more features, The 990FX chipset is very old, and my motherboard is missing a few key features, such as dynamic fan control.
The next generation of my build isn't actually a thing yet, but I'm actively working on what it's going to look like and the components inside it. Currently it's going to be an Intel based build, unless AMD release the reported 16-core monster, which I obviously have to have! You can find the current parts list at the link below, the list is always changing.
The next generation of my build isn't actually a thing yet, but I'm actively working on what it's going to look like and the components inside it. You can find the current parts list at the link below, the list is always changing.
[Next-Gen Parts List]()
Recently, I've been using linux more and more, and have switched this machine to Arch Linux. But some days I miss my windows-only applications and games, so I'm going to be using a virtual machine running windows, with a graphics card hardware pass-through to it, so I can run windows applications, and play windows-only games. The best of both worlds! I got the idea for doing this from a video [TekSyndicate](https://www.youtube.com/user/razethew0rld) made, which is by far the single greatest example of tech wizardry I've ever seen. You can find the video [here](https://www.youtube.com/watch?v=16dbAUrtMX4).
##### [Next-Gen Parts List]()
#### OS
I use Arch Linux on all my machines now, But some days I miss my windows-only applications and games, so I plan to use a virtual machine running windows, with a graphics card hardware pass-through to it to run windows applications, and play windows-only games. I got the idea for doing this from this amazing [video](https://www.youtube.com/watch?v=16dbAUrtMX4).
## Previous Generations
The first generation of this was the first custom build I'd ever done. When I first built this, I wasn't really into gaming, programming, or any kind of heavy workflow for that matter, so this build isn't particularly powerful, although compared to my old [Dell Inspiron 1525](http://www.pcworld.com/product/31104/dell-inspiron-1525.html), it was pretty damn incredible!
The first generation was the first custom build I'd ever done. When I first built it, I wasn't really into gaming, or any kind of heavy workflow for that matter, so it wasn't particularly powerful, although compared to my old [Dell Inspiron 1525](http://www.pcworld.com/product/31104/dell-inspiron-1525.html), it was pretty damn incredible!
You can find the full list of parts over on the PCPartPicker link below. Unfortunately due to the lack of catalog, or bad memory on my part, not all the parts are there, but there are as many as possible.
##### [Previous Parts List]()

View File

@ -1,5 +0,0 @@
---
title: Laptop
slug: laptop
status: draft
---

9
content/setup/public.md Normal file
View File

@ -0,0 +1,9 @@
---
title: Public web server
---
My public server one of the VMs on my dedicated server. This VM actually runs [Dokku](http://dokku.viewdocs.io/dokku/), allowing me to easily deploy applications no matter what they're written in! There are currently several containers running on this server, some public websites, some applications just for me to use.
The best feature of [Dokku](http://dokku.viewdocs.io/dokku/) is the easy integration with [LetsEncrypt](https://letsencrypt.org/), so I can easily add https connection to applications, even if they don't natively support it!
{{ article.screenfetch }}

View File

@ -1,11 +0,0 @@
---
title: Public web server
slug: web-server
screenfetch_path: setup/web-server.txt
---
The server itself is a VPS hosted by [Inception hosting](https://clients.inceptionhosting.com/aff.php?aff=256). Obviously if I did more looking around I could probably find a slightly better deal, but these people have brilliant customer support, fast and customizable servers, that are also hosted in a data centre in the UK (a major bonus)!
The spec on this server are nothing special, but considering it wouldn't be running much, other than a web server, and a couple of other applications, it's plenty. The most important thing is that it is hosted in the UK, for connection speed, and for other applications like a VPN.
{{ article.screenfetch }}

View File

@ -1,18 +0,0 @@
 ./+o+- jake@TOO-webserver
 yyyyy- -yyyyyy+  OS: Ubuntu 14.04 trusty
 ://+//////-yyyyyyo  Kernel: x86_64 Linux 3.13.0-93-generic
 .++ .:/++++++/-.+sss/`  Uptime:
 .:++o: /++++++++/:--:/-  Packages:
 o:+o+:++.`..```.-/oo+++++/  Shell: bash 4.3.11
 .:+o:+o/. `+sssoo+/  CPU: Intel Xeon CPU E5-2630 v2 @ 2.6GHz
 .++/+:+oo+o:` /sssooo.  RAM: 972MiB
 /+++//+:`oo+o /::--:. 
 \+/+o+++`o++o ++////. 
 .++.o+++oo+:` /dddhhh. 
 .+.o+oo:. `oddhhhh+ 
 \+.++o+o``-````.:ohdhhhhh+ 
 `:o+++ `ohhhhhhhhyo++os: 
 .o:`.syhhhhhhh/.oo++o` 
 /osyyyyyyo++ooo+++/ 
 ````` +oo+++o\: 
 `oo++. 

View File

@ -1,21 +1,20 @@
---
title: LanSchool
slug: LanSchool
summary: The tool of choice of my college to monitor students usage of computers. Turns out it's not particularly robust!
summary: The tool of choice of my college to monitor students usage of computers. Turns out it's not particularly secure!
---
LanSchool is the software of choice for my college to monitor and control computer usage. It allows teachers to see students screens, interact with them, and even block certain functionality like the internet and removable storage. My secondary school had a system much like this, but they weren't as active in using it.
LanSchool was the software of choice for my college to monitor and control computer usage. It allows teachers to see students screens, interact with them, and even block certain functionality like the internet and removable storage.
By far the worst feature of LanSchool was the screen blocking. At will, a teacher could show an overlay on your screen, usually consisting of test saying _"Eyes front"_ etc. The problem with this pop up was there was no way to hide it, it just appeared suddenly and forced you to stop using your computer. This tool had to be stopped!
By far the worst feature of LanSchool was the screen blocking. At will, a teacher could show an overlay on your screen, usually consisting of test saying _"Eyes front"_ etc. There was no way to hide this product, it just appeared suddenly and forced you to stop using your computer.
Within a few weeks of realising this tool, A friend of mine discovered how to get around it in a really primitive way: simply unplugging the ethernet. It's rather incredible this worked, but it had some problems:
Within a few weeks, A friend of mine discovered how to get around it in a really primitive way: just unplugging the ethernet. It's rather incredible this worked, but it had some problems:
- It took around 10 seconds after disconnect before the screen was restored, not a major problem, but still annoying.
- With all documents and programs bring stored on the network, you couldn't access any programs and documents you didn't already have open.
- When you reconnect the cable, the screen returns to the state of everyone else.
- Your computer would suddenly disappear from the list of machines on the teachers screen. If they were observant, they'd notice!
This solution worked, but wasn't ideal. Another solution was to log out (using the `ctrl + alt + delete` shortcut, which worked for some reason), and log in again. Our network was slow, so sometimes it wasn't worth the wait if your screens were only disabled for a short period of time. However the main problem with this was the fact it didn't always work, only around 30% of the time.
This solution worked, but wasn't ideal. Another solution was to log out (using the `ctrl + alt + delete` shortcut, which still worked for some reason), and log in again. Our network was slow, so sometimes it wasn't worth the wait if your screens were only disabled for a short period of time. However the main issue was that it didn't always work, only around 30% of the time.
#### The best fix
@ -28,11 +27,11 @@ This method worked almost perfectly, however had a few problems:
- It worked for every user account on that computer, so it had to be done on each computer I used.
- A teacher would notice, as you would never show up on their list.
Fortunately this last point is a non-issue, as usually the teachers put it down to the software messing up, not a student breaking the install. Another key problem with this is that it's rather obvious when everyones computer other than yours is disabled, as you're still actively using yours, whilst everyone else is actually listening!
Fortunately this last point is a non-issue, as usually the teachers put it down to the software messing up, not a student breaking it intentionally. Another key problem with this is that it's rather obvious when everyone else's is disabled.
#### The silver lining
Disabling the client on a machine also allowed for another feature that I had never thought of, but was by far the greatest bi-product of disabling LanSchool: __Teacher Mode!__
Disabling the client on a machine also allowed for another feature that I had never thought of, but was by far the greatest feature of disabling LanSchool: __Teacher Mode!__
Due to me being able to have access to a teachers computer one evening, I was able to copy the executables for the teachers console onto a USB drive, and then run them later on my computer. Obviously I know most software won't work in this way, but I'm so glad this one did!
@ -40,4 +39,4 @@ Now, I had access to everything the teacher did, which made lessons much more ex
#### Phase 2
Whilst writing this article, over 2 years after all this, I realised I could improve it considerable. Writing some kind of wrapper program, to detect my username, and run LanSchool for users other than me, would be harder to work out there was a problem with the computer, as well as prevent it disabling LanSchool for every user.
While writing this, over 2 years after leaving, I realised I could improve it considerably. Writing some kind of wrapper program, to detect my username, and run LanSchool for users other than me, would be harder to work out there was a problem with the computer, as well as prevent it disabling LanSchool for every user.

View File

@ -2,7 +2,6 @@ bandit==1.4.0
flake8==3.2.1
fontawesome_markdown==0.2.6
git+https://github.com/ryneeverett/python-markdown-comments.git
gitpython==2.1.1
iso8601==0.1.11
markdown==2.6.7
nose2==0.6.5

View File

@ -44,20 +44,20 @@ class HomepageTestCase(TestCase):
class AboutPageTestCase(TestCase):
def test_title(self):
content = self.client.get('about/index.html')
self.assertHeaderTitle(content, 'About Me')
self.assertHeaderTitle(content, 'About')
self.assertTitle(content, 'About')
def test_website_section(self):
content = self.client.get('about/index.html')
section = content.find('section', id='website')
subtitle = section.find('h2')
self.assertEqual('About my website', self.get_children(subtitle))
self.assertEqual('Website', self.get_children(subtitle))
def test_server_section(self):
content = self.client.get('about/index.html')
section = content.find('section', id='server')
subtitle = section.find('h2')
self.assertEqual('The Server', self.get_children(subtitle))
self.assertEqual('Server', self.get_children(subtitle))
def test_github_card(self):
content = self.client.get('about/index.html')

View File

@ -1,5 +1,4 @@
header {
background-image: url("../img/header.jpg");
min-height: 100%;
h1 {

View File

@ -46,6 +46,11 @@ p a {
background-size: cover;
}
section.image {
background-attachment: fixed;
height: 55vh;
}
.container > img,
.container p > img,
.row > div > img {

View File

@ -10,9 +10,13 @@
{% block content %}
{% include 'extras/header.html' with instance=article %}
<section>
<div class="container">
{{ article.content }}
</div>
</section>
{% if not article.no_container %}
<section>
<div class="container">
{{ article.content }}
</div>
</section>
{% else %}
{{ article.content }}
{% endif %}
{% endblock %}

View File

@ -1,3 +1,3 @@
My setup is much more of a project than something that is stable and constant. I am constantly upgrading, and changing things, whether it's on my main machine (which most of it is), my desk at work, or just a standard upgrade to my phone. As I use technology every day, for many, __Many__ hours, I need it to work brilliantly, and not hold me back from anything I want to do.
My setup is much more a project than something that is stable and constant. I am constantly upgrading, and changing things, whether it's on my main machine (which most of it is), my desk at work, or my laptop. As I use technology every day, for many, __many__ hours, I need it to work brilliantly, and not hold me back from anything I want to do.
As well as my main desk, there are a few other machines I use often, namely my laptop, work rig, and my phone. All of which follow the same criteria of not holding me back from whatever I to do.

View File

@ -2,7 +2,10 @@
hide_from_nav: true
---
I've always had a keen interest with security and privacy. Whether it's protecting my personal information, or needlessly encrypting things, security is very important to me. With an interest in keeping things secure, comes an interest in breaking through others security.
I've always had a keen interest with security and privacy. Whether it's protecting my personal information, or needlessly encrypting things, security is very important to me. With an interest in keeping things secure, comes an interest in breaking others.
Whenever I start using a new tool, or piece of software, I almost instantly go to the security settings and check out what it supports. The same goes for making the software, I've been known to spend a lot of extra time working on the security aspect more than actual features.
The [_Wall of Sheep_](https://www.youtube.com/watch?v=6oxq_Xx-5vQ) comes from a concept at [DEFCON](https://defcon.org/), where any insecure information sniffed over wireless is displayed on a wall to shame those who's data is up there.
This is my wall. A list of things I've broken the security of, or spotted with terrible security.