Gitting Hubbed

Ah the Uni holidays. A great time to play with the kids and get some coding done. I’ve been using Unfuddle for my version control system for code and it’s served me well. I was mainly after a free, SVN version control system and it’s been just perfect, really.

I have Tortoise SVN installed, which gives me shell integration in Windows and allows me to manage my code files directly from Windows Explorer. I’ve also been using AnhkSVN for Visual Studio to look after my .NET Micro Framework code. It’s a complete, simple solution.


I’m dreaming of going into business for myself. Whatever this business dream is it will likely involve code and microcontrollers. While I work out what’s a viable business to pursue, I’m continuing my Arduino/.NETMF development. I want to ‘open source’ my software. Not just make my code downloadable (barely) from my blog, as I have done, but go mainstream.

Developing code and providing downloadable ZIP files is a kind of closed/open model of development. If I go truly open, my incomplete code, as well as my completed code is in the public space. I’d like to be able to put up a blog post and say “I’m writing an Arduino library for the DS1307 real-time clock chip. The repo’s here. Contributions appreciated”. With this in mind I looked at Unfuddle to fulfil this new need. It can’t. It won’t. It’s not aimed at that use. GitHub is.

I’ve tried a number of times to wrap my head around GitHub. My main objection, as I suppose is the main objection of most, is that it’s “for Linux hippies”. Seriously. I mean, I’ve used Linux quite a bit, but not lived my life on the command line as it appears you need to do in GitHub’s world. Look at the documentation. 2.1 Git Basics – Getting a Git Repository takes you straight to the command line, with a bash prompt no less. Sorry, but the majority of the world’s computer users know Windows as a first UI language. But (as far as I’ve seen) not a single line in the documentation suggests “hey, if you’re here without any UNIX/Linux experience, you will find this a little strange”. I’m still looking for the documentation to confirm for me the command line syntax is the same on all platforms – nada!

I’m getting over my objections. That, and I’ve tried the GitHub Windows application this time. I expect it has limited functionality and at some point I’ll be forced to the command line. I guess I’ll have to configure VI or EMACS as my text editor then, won’t I? For the non-Linux hippies, these are text editors in UNIX/Linux. Again, if the service or the documentation even acknowledged the existence of Windows users there’d be some mention of Notepad++ or some such. But hey, when I get the command line under control I should be able to seamlessly move between my Windows, OSX and Linux machines as I do development. That would be sweet.

My GitHub account is in order, my application works, I can create repositories, commit files, all the good stuff. But there is much to learn here. The first major learning is there seems to be a “one project, one repository” mindset. I had anticipated creating a repository for Arduino, one for my .NETMF stuff and maybe a separate one for other bits and pieces. But no, I’m apparently going to manage a stack of repos. We’ll see how long this takes to become unwieldy.

So the model I imagining is this. I’ll want to create a project, like my GPS clock. I’ll assemble the hardware components and build (not download) code libraries for these. Each library will be a separate GitHub repo. When a library (class) is complete and tested for each software and hardware component, then the main project can begin as another repo. However, the main project will only #include the libraries and the repo will not contain them directly. For each #include required for the GPS_Clock project, the appropriate header and implementation files will be downloaded from their respective GitHub repositories to the Arduino \libraries folder.

I can see my overengineering this. The GPS clock repo will require the inclusion of the repo’s for:

  • EM-406A GPS
  • DS1307 RTC
  • BOB-00099 SparkFun 4x7-Segment LED Display
  • DateTime library (full-featured dates and times)
  • Location library (GPS coordinates)
  • … etcetera!

But that’s the plan for now. I’m going to have a hack at this and see what I learn. The library for the DS1307 is already mostly complete although it’s on Unfuddle at the moment. For the next post I’ll get that up on GitHub.

That is all.