I use Launchy hundreds of times in a day. The Alt and Spacebar keys are usually the first to show significant wear and tear on any new computer I work with. It’s the first thing I install, and it’s how I keep my hands on the keyboard and off the mouse. I also use a web service called Toodledo for task, todo, and personal project management. Toodledo sounds like a lame children’s toy, but it is extremely good at what it does: being an ugly but efficient task management system.
Toodledo works via the web and iPhone, but what I really wanted was something that would allow me to add tasks via the Launchy window as I thought of them; in meetings, on phone calls, while writing, etc. This just needed to be a rapid fire todo creator: hit Alt+Spacebar for the Launchy window, then todo, tab, and my task. You would think that someone would have written a very simple windows native client to quickly add todo’s to the Toodledo service, but when I went looking the closest thing I found was a ruby client. Not exactly native. I pulled together a few projects that already existed out there and created my own little command line todo client that I could run from Launchy.
This was of course many months ago.
I’ve become a regular user of git and github lately. For open source projects, code snippets, and in general sharing text based files, github has been by far the most mature attempt I have had the pleasure of using. I figured if I was going to share this little snippet of code with the world at large, I may as well explore the git and github paradigm.
First, there is git as version control system. That’s simple enough: setup a repository and check in some code. Modify it locally, commit it, push it. Nothing special here. I created a repo for my little todo client, which I’m calling todo-cl, and checked in my code here.
To check out the merge features I created another local source tree and mucked with the code, then pulled it back into my original branch. No surprises here either. Let’s create a branch.
I think I created and switched between 3 or 4 branches, testing modifications and merges, in less than 5 minutes. In a command line window. Not in an IDE. This is really freaking cool. In most of the version control systems I’ve used, branching is by far the most problematic feature to work with. It usually means creating different directories with different versions of the source tree, taking up disk space, forcing me to navigate around and make sure that I’m making my changes in the right directory. It’s a pain in the ass. With git, I get to work in the same directory if I want, the amount of time it takes to switch branches is the time it takes to run a simple command, and I can create several branches without doubling and tripling the amount of disk space in use. Sure, hard drives are cheap, but you can’t put a price on time, and branching in git is a huge time saver.
From a version control standpoint, git is simple as hell, with a few powerful features that set it apart. This is where github takes over. Obviously github is a git server. It stores your repository, displays it via the web, and allows others to search is and see what you’ve done. Very cool.
But what else can github do?
For starters I can fork any public repository. I’ve already done this with the RWMidi project. If I decide that I want to make some changes to the Rails framework, the Linux kernel , or Apache’s HTTP server, I can do that. I can choose to go off on my own and continue working on my little fork, or I can issue a pull request and let the folks maintaining the main releases know that I’ve made a swanky fix that others might be interested in. This isn’t all that new, github has just made it extremely easy. Github has also made it personal. If someone wants to use my version of the Linux kernel instead of say, Linus Torvald’s version, they can. Really though…keep using official Linux kernel. My todo-cl repo can be forked too.
What are pages?
You can create a branch on any repository called gh-pages, load it up with a complete html website, and github will serve the contents. This can become the main page for the software hosted on that repository. Indeed, github has taken this a step further, and allowed custom domains for these pages, so that github can become the replacement for your shared hosting. Wanna keep going? Create a repository for your personal blog, load it up with html pages, and github will gladly serve that as well, custom domain and all. I created a page for todo-cl here.
But wait, there’s more.
There is Jekyll. Jekyll is a bit like a WordPress for github, a framework that allows you to create something like a blog in a repository. Throw some posts in a folder, and with a little presentation magic github serves it up. I doubt I’ll be switching to it anytime soon, but I find the concept intriguing and plan on keeping my eye on it.
So github is a bit like Facebook for hackers, without all the Mafia Wars and Farmville requests. Exploring the world of code waiting out there ready to be “forked with” is a little overwhelming, but to know there are so many folks out there making so many things with software is comforting. Coming from a guy who sees making machines do things as an end in an of itself, there is a lot of ends to explore here.
So check out todo-cl if you want to use enter todo’s from the command line or Launchy. Check out github if you want play with code.