Random learnings and other thoughts from an unashamed geek

Happy New Year 2012

| Comments

How’s your year going so far? Mine’s going really well. Xander’s walking well and he’s getting closer to speech every day which is fascinating and exciting to watch, my health has improved massively over last year and I’m really enjoying work.

This year I’m making an effort to do the things I’ve always meant to do as a programmer; and playing with lots of new (to me) tech in the process! I intend to cover a few of these topics in the coming weeks/months, but here’s a summary:


I’ve started using Vim as my main editor (or more specifically MacVim with the Janus vim distribution) and I’m loving it. It’s a relatively steep learning curve, but you don’t have to jump in at the deep end - just start with i to enter insert mode, use it like a normal editor, and then to save press <Esc> followed by :wq<Enter> to save and exit (drop the q if you don’t want to exit). Slowly start learning new things and forcing yourself to start using normal mode (where you type commands like :wq) and as you use more, you’ll want to use more. Once you’ve mastered the whole count-verb-modifier-noun grammar of vim you’ll be using it for everything and wondering how you ever managed without it!


Okay, so I’ve been playing with this for a while, but I’m using it for more and more stuff now - pretty much anything that needs scripting I now do in JavaScript, or more specifically…


CoffeeScript, which is bloody brilliant - especially if you have a strong understanding of how the underlying JavaScript functions. This isn’t new either, but I’m now using it for ALL my JavaScript programming


Underscore.js is a light library of helpful JavaScript functions for working with objects, arrays, collections and other such things in a functional programming way without extending the native objects. jQuery/Mootools use $ for working with DOM nodes, Underscore uses _ for dealing with everything else.


Backbone.js extends Underscore.js and is a great way of keeping the code of your RIAs organised. It’s very flexible and can fit to many different programming methodologies, but I use it in a M-VC (Model, ViewController) manner not dissimilar to iOS. Event are emitted from models when they’re added, changed or deleted; hooking into these events allows your app to always display consistent information without the need for lots of hard-coded callbacks.


It seems everybody uses jQuery, and has done since its inception. I refused to jump on the band-wagon and I’m glad I did - I coded everything in JavaScript from scratch using native methods and help from articles across the web (especially sites such as QuirksMode) and now have a very good understanding of how different parts of a modern web browser piece together and the faster/slower ways to go about doing things.

However, jQuery is a lot faster than it used to be, as are modern web browsers, so my concerns are much less valid. It reduces programming time significantly and adds flexibility so I now use it (or Zepto.js) in a lot of my projects and I really like it - it doesn’t take long to learn and master, and it improves the speed of Backbone development considerably.


Git, as you should know, is a brilliant version control software. I’ve been using SVN for years but have had the itch to switch for ages, so with some new projects that I’ve been working on (using the above technologies) I decided to switch to using git where possible. It’s brilliant - lightening fast and so flexible. The lack of the old /trunk/, /branches/, /tags/ layout makes me happy too - trying to convince employees to use svn switch was very hard, but with git they’ve got no choice but to do it the right way! I’m using gitolite for our internal (private) hosting, and …

Open Sourcing

… I’ve started Open Sourcing some stuff I’m working on to GitHub. First is my ec2-prune-snapshots script for automatically deleting sensibly old EBS snapshots on AWS, but I intend to release much more in the coming year, and possibly even retro-actively releasing some older software, such as MythPyWii which currently sits on Google Code.

What Are You Using?

If you’re using some cool technology for web/mobile application development that you think I might enjoy experimenting with then please let me know in the cooments!