Home to my programs and projects


My name is Keith, and I’m a developer and all-around tech enthusiast.

I’ll be using this site to show some of the projects I’ve worked on in the past, as well as being a development log for any projects I do should I find the time.

Most will be in C++, PHP. JavaScript, and Batch as those are the languages I have the most experience in, but I have been known to use C# and Python on occasion.

For more information about me and my experience, please see my bio.

Functionality Restored

After consistently forgetting about this site, I finally fixed the wordpress issues that had screwed up the site.

Since my last post, i graduated with a 2:1 in Computer Science from the University of Derby and have been living in Nottingham since mid-2015.

I work as a Software Engineer for a small contract development company and primarily develop in C++ for Windows, Android and iOS. I also did most of the development work on a CMS solution for creating Google Assistant apps.

Enter Pathy

So as part of my Language Design and Implementation module I had to create a language. Well my language is going to be used as the “dummy object” i mentioned before.

The language has been called “Pathy” and is a logical language designed for checking routes and states of a world. The idea is that the user declares their world, then queries it. The world is made up of Nodes, Links, Junctions, Actions and Entities.

Nodes are places in the world where actions can happen and can link to other nodes and junctions; junctions are places in the world that simply act as a means of linking multiple links together. Links are the routes from node-to-node, junction to junction, or node to junction. Entities are then put in the world and are used to check distances (or weights as they’re known to Pathy)

It’s important to note that Pathy has no concept of location, only a position in the world relative to other objects. It’s like the London Underground map: you know what stations are on what lines, and can use it to plan a series of connections. You don’t actually care where the station’s physical location in London is while you’re planning your route, only that you can take the Jubilee line from Baker St to Canning Town in order to connect with the DLR and get to Custom House for Excel – a trip I’ve done a few times.

Granted Pathy isn’t complete, and when it is complete (or at least at version 1.0 when I hand it in) it’ll not be able to compute a route as complex as that, but it should provide the tools for another program to do so.

Pathy is written in Antlr4 and Java and the code can be found in my GitHub repository.

Backup Plan

As there has been no progress on getting the BrickPi to actually work (it has in fact gotten worse, as more issues have been discovered) I’m faced with no option but to start my Independent Study and have it interface with a dummy python object that would do nothing with the motors and sensors, but instead prints to the screen displaying it’s simulated position and actions.

The idea is to have a webserver on the Raspberry Pi and have it talk to the dummy object which will react as if it were actually operating.

First slice of Raspberry Pi

A Raspberry Pi Board with attached Brick Pi Board built into a robot made of LEGO techinic elements. with two front wheels and a caster rear wheel.

I’ve had my Pi now for just under 6 months, however for half of that it was in Carlisle while I was in Oxford, and for the two months after that I was too busy to do anything with it; as this was a typical student summer for me: sorting the stuff I’d brought back to Carlisle; packing to back to Derby; and upgrading, fixing and building PCs for family and friends. All that normally keeps me busy enough, but a new addition for this summer was my part-time work at the Pinegrove Hotel, so what little time I had remaining was used to recuperate from all the aforementioned.

Now I’m back in Derby and have my Pi with me, I’ve finally got around to using it properly. My Dissertation piece is going to be based around a robot controllable from the web, but for assembly by an end user with no knowledge of programming or electronics, while still being customisable (i.e. not locking them to a specific form or set of tasks). (more…)