My Github Account
I encourage developers to write software outside of work, not to be the best (if there were such a thing) but because rarely does a programmers' interests align perfectly with what they do at work. Often, only by practising outside of work can we work out what technologies really do excite us and what our career path may eventually look like. You don't always stay up to date for the sake of your company but because programming is your own passion and your work can only ever be a small part of that. Especially when you write code in multiple languages like I frequently enjoy doing.
So please allow me to introduce you to my github account, which I've had for four years now.
Here's a quick tour of my projects in Chronological order and why I started them.
Reddit Monitor (Python)
Reddit Monitor is an icon that goes into the system tray on a Linux Distro (xfce,gnome2,kde4 etc) and alerts you when you have new messages. Back at the time there were almost no other projects that did the same thing and it was widely appreciated. I submitted the Github URL back to Reddit and got a little Karma. I guess that was my motivation for that project: That people used it. It also got a couple of people forking my code and it does make you feel important, even though it's really only a small thing.
Bash Autojump (C)
Another developer had this idea that instead of using the
cdcommand to navigate around the filesystem, you could speed it up by writing a version that stores the amount of time you spend in directories, applying the appropriate weightings and then guessing what you mean. So typing in `j red` was enough information to
/home/phill/git/reddit_monitor, since it knew that was probably what I meant. I thought this idea was really cool. The original was a script tied into the BASH shell's prompt. Even back then I really liked programming in C, so I took it upon myself to actually reimplement the feature as a patch to the original BASH source code. It was a small, well defined project that demonstrated I could work with other people's C code. I was pretty pleased with my efforts.
The biggest and longest running project to date. Still being played with and developed (although nothing actually uploaded recently) Farmix is my hobby Operating System. I absolutely love Operating Systems and the complex challenges they offer. My code is taken from an Operating System tutorial on the Internet, then I added support for memory detection and memory functions such as the famous
free(). It needs a lot of work. Reading from disks, Process management and scheduling. However I enjoy playing with it from time to time. I could talk about this project for hours, and I often bore people in pubs with it, but I'll save the details for another blog post.
Conky List Connection By App (Perl)
Again, I'm a fan of customising things and sharing those customisations or at least keeping them somewhere. This script just shows how many tcp/udp connections a program has and lists the apps which have the most at the top. There's a screen shot attached.
The Patchwork idea is cool. You write a conceptually simple piece of code. Then you optimise it or fill in the edge cases making the code harder to read. Those changes become a patch, managed by Patchwork, allowing code to be feature rich, highly optimised and so forth without damaging how difficult it is for new programmers to pick up. Patchwork does have it's own blog post which you should visit if you don't quite believe me!
SMS Reader and Dictionary App (C++)
These any tiny apps that aren't very useful at all. There merely served to allow me to try out graphical C++ frameworks GTK and QT.
Poker Server (C++)
There comes a time when you need to prove to potential employers not just that you know C++ but that you've got the skills to write a non-trivial complete application in it. That's what the Poker Server is. A pretty functional C++ Application with complex business logic (working out whose turn it is, betting, calling and raising semantics, detecting the hands players are holding such as Flush, Full house or Two Pair) and other bits and pieces. It features use of correct memory management, good Object Oriented Design concepts, uses the correct data structures and some third party library (e.g. Boost::Asio). That's the point of the Poker Server.
So in summary, a bunch of projects written for a myriad of reasons in a couple of different programming languages. Each project helped give me a little more insight into the world of programming.