Projects

import * from 'projects'

I've worked on a few things in my spare time, here are a seleciton.

Third Year Project

For my Third Year Project, I used a pair ATMega8535 to build a cheap FSO system. I programmed these Embedded Devices in C, and had to implement Manchester Encoding on them. I really enjoyed using C, because you could feel how close you were to the ‘bare metal’ of the hardware. You could calculate how my CPU cycles each instruction would take, and even see what the code translated to Assembly.

The devices communicated to the desktop software over the COM port, since they had no other form of networking on-board. The desktop software was written in C#, and was the main processor of information. The 8535’s only (“only”) had to deal with syncing with each other, and sending and receiving data once synced. It was the desktop software that told them what to send and when, and it also had to work out what each received byte even meant. I did this based on the current systems context, by essential asking a series of questions. Is this a brand new byte? Am I currently receiving a packet? Was I expecting this byte? Is this the type of byte I would expect right now? All these things any many more, and then mix that in with the error handling. Really, how do you know if 10010110 is an error or not?

It’s these difficult questions, and the fact I had the opportunity to build my own electronic devices, that made the project so much fun.

BT Infinity

I got really tired of not knowing when I was going to get BT Infinity. I had just finished my AJAX coursework at University, so I was high on the possibilities of AJAX. These two desires collided when I noticed that the BT Infinity Checker page, was made with AJAX. All it required was a building number and a postcode, and it retuned the status of BT Infinity for that address. So, I made a map.

First, I made a web app (PHP + MySQL), so that the service could run even while my PC was off. This was fine during development, I was doing one address at a time, so didn’t notice that each time I called the BT AJAX page, there was about 4 seconds delay before the page returned the results. This meant when I scaled up my requests, the PHP script over-ran the maximum script execute time, 30 seconds. Time for a re-think.

I was forced to make it a desktop app. I moved to C#. The app itself pulls on about 3 web service, to convert a single postcode into an area of post codes (at selectable radiuses), then turning those postcodes into a list of building addresses, and then those building addresses into BT Building ID’s, and then finally that building ID into a BT Infinity Status, which is basically either on, off, or coming soon.

This was great, but still so slow. The bottle neck was the 4 second delay on getting the Infinity Status. To solve this, I broke my program up into a Client-Server architecture. The Server would get a postcode request form the web server, and then turn that into the list of area postcodes. It would then give each connected client (each PC on my network could handle around 8 simultaneous instances of the client app) a postcode to process. Once done, the clients confirmed they were finished, and the server gave them another postcode if needed.

Great! It works! I have a map of BT Infinity for any postcode I want (currently, mine), all synced up to a MySQL DB in the cloud. But I still have to have a PC on to be a server. Next step, buy a RaspberryPi, implement this in Python, map the UK.

Website – Nina Paddick

www.bloominghelpful.co.uk

Following the designs given to me, I created this website using the Bootstrap framework which sped up development and allowed me to focus on getting the look and feel correct. There is also a messaging system that uses a MySQL database.