Recently I have been refactoring some code so that various computed results are saved in a memcached cache to improve performance. A common cache idiom is:
  1. Compute cache key
  2. look up key in cache
  3. if value found, return it
  4. else, run some code to generate the required value
  5. save the generated value in the cache
  6. return the value
It’s quite awkward to have that code repeated all over your app, so I hit upon the idea of passing a block to Cache#get() which would be used to compute the value if the key wasn’t found in the cache.

A couple of weeks ago I was asked to set up a web cam on the PC in our basement, so that James could video chat with one of his school friends who is leaving for a different school. I stopped on the way home from work on the Friday evening and bought a fairly cheap (£25) webcam from Staples.

I left my iPod Shuffle in my car all day today, connected to my car stereo and playing (although the car stereo itself was off of course). It still had enough power to provide me with music all the way home, which means it lasted at least 8 hours (it wasn’t fully charged this morning). I’m currently listening to iTunes on my PowerBook, and it is using between 10 and 15% CPU. This obviously runs down the battery in my PowerBook. Itunes Cpu Usage Why can’t Apple “build” an iPod shuffle into the PowerBook? It could connect to the USB bus internally, and all it would need is a kernel driver to control it, that iTunes could use to tell it to play a particular track. It would free up the system CPU to do other stuff, and extend the life of the battery.

I bought a book called Getting Things Done by David Allen. It arrived on Monday. I haven’t had time to read past the prologue yet. Happy New Year, by the way.

Mac OS X 10.4 comes with ruby 1.8.2, it seems to have a problem with OpenSSL which causes switchtower to hang when trying to connect to your server. You can download the source code to Ruby 1.8.3, compile it and install it, but you’ll start getting weird errors in gem when you try to install some libraries. The solution turned out to be to compile Ruby slightly differently. You need to pass some flags to configure:
./configure --enable-shared --enable-pthread
After configuring it, makeing it, and running sudo make install, I had what seemed to be a working Ruby installation. It installs to /usr/local/bin which is already in my path. Executing hash -r causes bash to re-scan the path, after which executing ruby -v correctly reports
ruby 1.8.3 (2005-09-21) [powerpc-darwin8.3.0]
After that I installed RubyGems-0.8.11 and the rails and switchtower gems, including all dependencies. The installation worked fine, and so did switchtower when I tested it. I didn’t even need to remove Apple’s Ruby install. If you do want to remove Apple’s installation of Ruby, you’ll want to back up and delete the following files and directories: