While I was home over Thanksgiving break, I got an early graduation gift from my parents – a new 2.5 GHz i7 MacBook Pro. In the process of transferring all of my programs and documents to the new computer, I decided to look into some new programs to install, specifically a better way to keep track of my todo list. Recently, my todo list consisted of a 1/4 piece of printer paper that I would write out each Sunday when starting my work for the week, and hope that I would still be able to find by the middle of the week. I remembered reading about todo.txt a while back, and looked into it. The basic premise behind the program is a simple, text-based todo list that is updatable via the terminal and a few basic shell script commands. I set it up on my new MBP, and was immediately impressed by the program. I was talking to my friend Alex about the program, and started thinking about how convenient it would be to have a web based todo list. I looked into a few web apps that already existed, but quickly found a web-wrapper for todo.txt. It was written in PHP, and wrapped the shell commands in a convenient web interface. After getting the basic web functionality working, I began looking into ways to synchronize the local todo list on my computer with the copy stored on my server. I was originally going to try and use rsync, but found out it was a one way algorithm. Upon further searching, I came across unison – it operates using the same concepts as rsync, but allows for two-way syncing. The next hurdle was getting my hands on the appropriate binaries for each operating system (OS X for the MBP, and Linux, specifically CentOS, for my server) and making sure that they were the same version. Unison only allows syncing between identical versions of the binary – if you have 2.44 installed on your local system, 2.44 must also be installed on the server; there is no backward compatibility. The OS X binary was easy; I fired up Terminal and issued the appropriate commands and was up and running. For my server, I set up a CentOS virtualization to create the binary and then copied it over ssh to the appropriate location on my server. After everything was set up, I began tweaking a preference file that would automatically and silently handle the synchronization, and be fired from Geektool every couple of minutes. Additionally, by using Geektool to handle the synchronization between the server and the local copy, displaying the output on my desktop was also easily done. By handling the entire system the way that I have, I can update my todo list from any of my computers, or from the web interface, and always ensure that the latest copy will be downloaded and displayed locally.
Check out the screenshots below, and check back in the next few weeks – I’m hoping to clean up some of my modifications to the web-wrapper and repackage it for others to use. I only made a few changes with regard to security and formatting the output, but I think they’ll be helpful so that someone else doesn’t have to worry about. Any questions, leave a comment below.
Update [1/6/2012]: It seems that the organization behind ToDo.txt realized that they needed official iOS support and recently released their own native client. You can check it out here. I havent bought it yet (the $1.99 seems a little steep for what its actually doing), but from reading the reviews of it, you need to keep your todo file in your dropbox; not as clean a solution as I was hoping they would come out with, but probably offers a little more functionality than my web interface.