I am aware that there were a few problems with the website earlier today and most visitors that weren’t downloading files received “HTTP 500” errors. The problem turned out to be a rouge FastCGI process that was created and wouldn’t shut down or handle requests, I have shut the process down manually now and all systems should be running fine.

On another note regarding problems, I have been made aware of a bug in iSyncIt that causes iSyncIt to crash under certain circumstances. I have only had one actual report of this but if you have also being experiencing problems please contact me through the website. Please include details of your system, language etc. in your bug report. I am working on a fix as you read this.

Thanks in advance, check back soon.

Small Update

iSyncIt has been updated yet again, just a few localization corrections, not much else. Download it here.

Check back soon.

New iSyncIt

Well, I’m posting this a little late, I had completely forgotten about posting information about the update on my own website, yet I’d posted on everyone else’s. That’s right iSyncIt 1.2 has been released and as always you can download it here. The main changes in this release are the introduction of German localization, to match this iSyncIt is now bundled with the localized version of the Sparkle update engine. As for interface enhancements the time of last sync is now shown in the menu, this time comes from iSyncIt’s own records rather than iSync’s records. I have also introduced a menu bar icon that changes depending on the current bluetooth status again this is a work in progress but works well if you use iSyncIt to control your bluetooth power.

That’s all for now, check back soon.

Back From My Holiday

Just in case you were wondering why the recently flurry of activity had ground to a halt, I was on holiday. Only for a week, but it was enough to make the website look dead. Anyway I’m now back and working on iSyncIt and another, secret, application. Just a quick update on iSyncIt, thanks to a gracious user there should be a complete German translation included with the next version of iSyncIt as well as some new snazzy menu bar icons / features, I also hope to be creating some manuals / help files relating to iSyncIt and the other items available for download.

Hope this keeps you interested for now, check back soon.

Another Update

I’m pushing them out as fast as I possibly can now. iSyncIt has been updated yet again (download here) to version 1.1. The main emphasis for this version was a revised scheduling system. I was happy with the previous system but after many emails I felt it was necessary to implement a time based system as well as the current timer based system. This new system makes the program much more useable and should cater for the needs of many more people. It may also have introduced a few bugs so feel free to email me with them using the contact form.

My plans for the next release of iSyncIt include a menu bar item that will change depending on the current bluetooth status, unfortunately this requires a re-write of my older, less well formed menu bar code so this release will take a little longer to push out than recent releases, but please bear with me.

Check back soon.

More Java & TextMate [Updated]

Update: Unfortunately this doesn’t seem to work any more.

A while ago I wrote a short post (here) about some additions that I had made to TextMate in order to improve its compiling of Java applications, I had made the changes because I had started programming in Java at university and wasn’t happy with the way that TextMate handled the files. In the post I promised a follow up post detailing some other improvements I had made to the Java bundle, finally, that post is here, sort of.

I’ve made so many changes to various bundles and themes it has become to difficult / long winded to document the changes in a post so instead, I have decided to release the changes as a small download from the website. You can find the files you will need on the relevant software page (this does not work anymore, read the update at the top of the page). The main changes are some slight tweaks of the Blackboard theme, the main theme I use and the addition of some new snippets, the compiling shortcuts from my previous post & some menu reordering in the Java bundle.

Make sure that you follow the instructions on the download page or in the README file when installing the files, I don’t want you to go breaking your computer now.

Sorry for the delay in this one, hope it satisfies you appetite, check back soon.

Using rFlickr

I said it was coming and here it is, my little tutorial on how to use the rFlickr Ruby on Rails gem to create a photography section like the one on my own website. The first thing to note is that pretty much all of the options available in the Flickr API (here) are available for use in rFlickr due to the fact it is all based around XML. There is a laborious process of configuration to go through, however, to make everything work, but once this is done you should have no problems.

Firstly install the rFlickr gem, I should at this juncture note the fact I am primarily a UNIX user so will aim these instructions at other UNIX users, mainly because I don’t know the specifics for Rails installations on Windows. So lets dive in ($ denotes the terminal prompt and \ denotes line continues below):

sudo gem install rflickr --include-dependencies

The second thing you will need to do is make sure you have a Flickr account with some photos on it then pay a visit to and sign yourself up for an API key, once you have generated the key make a note of the key itself and the ‘secret’ that you are given, you will be needing these quite a bit.

The next thing to do is to basically follow the tutorial here, albeit with a few modifications, I have re-written the tutorial in full below.

cd /your/rails/application

To make differences clear the Rails console prompt will be shown as >>, don’t forget to replace the x’s with your information.

>> require 'flickr'
>> API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
>> SHARED_SECRET = "xxxxxxxxxxxxxxxx"
>> flickr ="/tmp/flickr.cache", API_KEY, SHARED_SECRET)
>> flickr.auth.token
=> nil

The above just sets up your rFlickr object and makes sure that you don’t already have a key.

>> flickr.auth.getFrob

This returns a value that you will need to save somewhere.

>> flickr.auth.login_link
=> ""

Click or copy the link you are given into a browser and authorize the API for usage, don’t worry, we’re almost there.

>> flickr.auth.getToken('that_frob_number_we_saved' )
>> flickr.auth.cache_token
>> exit

Right, this is as far as the tutorial online goes, but there are some other useful steps we need to take to make everything more useable, mainly the moving of the token as the /tmp directory may get cleared by our host.

cp /tmp/flickr.cache /your/rails/application/config/flickr.cache
rm /tmp/flickr.cache

Now we can get onto the actual programming and leave the authentication business behind.

We’re going to need a controller to use, for the purposes of this tutorial I will use a controller named Photography, it should save me some time as that’s what mine is called, the page to be rendered will be called view.

In the file photography_controller.rb we will need the following information, rename as necessary to your application.

class PhotographyController < ApplicationController
  API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  SHARED_SECRET = "xxxxxxxxxxxxxxxx"

  def index
    render :action => 'view'

  def view
    flickr = + "/config/flickr.cache", API_KEY, SHARED_SECRET)
    @photos = flickr.people.getPublicPhotos(flickr.people.findByUsername("YOUR_FLICKR_NAME"))

Then in the view.rhtml that you will have created in your views folder (or at least, are creating now) paste the following code.

<% for photo in @photos %>
  <a href="<%= %>"><img src="<%= photo.url('s') %>" /></a>
<% end %>

And that’s it, your basically done, all the thumbnails will link directly to your Flickr page, easy wasn’t it? The main problem occurs when you load your newly created page, it’s very, very slow, due to the speed of the Flickr API (I think). In order to improve the situation I would recommend using either page or fragment caching, but that will be covered in a future tutorial.

Hopefully this will have given you a few pointers in using the rFlickr gem, read through the Flickr API for more inspiration if you are feeling adventurous. Check back soon.

Update: If you are having problems with Rails 2.0, take a look at this fix.

Update: I have written a new tutorial on caching your photos page, that should speed it up a lot, assuming you are having problems.

Scheduling & Photos

Things appear to be moving along more quickly than expected this week, I posted my main application iSyncIt and the My Book Icons on a few forums and the Apple software website and suddenly the visits to my website have rocketed from 200 a day up to 700 hits or more a day. Not as massive as some websites but it’s certainly an incentive for me to do some more work.

After many requests I have started to implement a more suitable scheduling system in iSyncIt, I added the original system for people that change their calendar and contacts very often but it seems people want more flexibility so I am currently coding something more suitable and user programmable.

Also, partially as an experiment and partially due to me wanting to unify my websites into a single website I have today programmed and uploaded a photography section to the website. This portion of the website showcases some of the better photographs that I take, for other people to see. It has been created using the ‘rflickr’ gem and my Flickr Photostream. I had several problems creating the section due to the lack of documentation for the ‘rflickr’ gem, so I will be writing a tutorial in the coming days to help other people who want to create something similar.

Well, thats all for now, check back soon.

Quick Update

There has been a quick redesign of the caching system behind the website, this means that the cache has had to be cleared. Pages may be a little slow to load for the first time as the website cache is slowly regenerated, the search spiders help with most of the regeneration. Now the problem has been fixed you may also see slightly longer loading times on the AJAX page elements such as the archive, login and live search on the right hand side of the website.

Thanks for your patience, check back soon.

It's Almost Complete

Today I’ve added what I believe are the final touches to the website back end. The main change is that I have finally been able to enable caching fully so the website will run much, much faster and reduce the load on my hosts server.

I thought in this post I had also better explain the architecture of the website and its caching a little bit for other people that would like to write a Ruby on Rails system for themselves. The website structure is based primarily on the 4 sections you can see in the navigation bar at the top of the page plus separate administration and account sections.

Only the 4 sections in the navigation bar have any sort of caching applied to them, all areas of these sections use page caching rather than other forms of caching, as it is generally faster. However in setting up caching I came across the problem of aspects of pages that require regular, specific modification such as the login information on the right hand side of the website or comments in blog pages, remained unchanged due to the cache. I could have sorted this by continually cleaning the caches or using fragment caching, but I wanted the website to be as fast as possible. I got around this problem through the use of AJAX.

All dynamic items on all pages of the website are called using AJAX (with the help of the Prototype framework). When you load the website you may see loading symbols in the “Account” box to the right or where the comments section is at the bottom of blog pages. The information that is called by the AJAX is not cached and is generated dynamically for every user, because the AJAX calls are JavaScript in each page only the JavaScript is cached rather than the visible product of the JavaScript.

With all modern browsers supporting the JavaScript required to implement AJAX calls, I believe this to be a valid way of using Rails page caching to my advantage.

I will write something more in depth soon, for now try for all your caching needs.

Back soon.

The Dark Side

Today I have done the unexpected and moved to the dark side, well, for a few minutes anyway while I release version 0.4 of My Book Icons, the main change for this set of icons is the inclusion of Windows versions of all the icons, including resources for Vista. My main reason for doing this is to give people some consistency between their OS X and Boot Camp / virtualization installations of Windows. But I don’t object to pure Windows users using the icons either, so, anyone that wants them, feel free to download them here.

Now you have recovered from the shock of reading the above I can tell you about a couple of other changes, to the website mainly. In order to try any fund the website and my software / graphics development I have introduced Google Ads to the website, I’m not particularly fond of Google Adverts so I’ve tried to make them as minimal and tasteful as possible, you will only see adverts in the header above and at the bottom of blog and software pages in the form of text ads.

If you like the work I produce I would also like you to consider making a donation using the button to the right (on the website if you are viewing this through RSS), any amount you choose to donate would be helpful to me.

Any money raised through adverts / donations will go towards funding the website and my development of software / graphics. In terms of development the money will be used for my Intel Mac fund so I can develop Universal applications that I can test properly as at the moment all my development is completed on a 12” PowerBook.

Thanks for you time, check back soon.

So Many Changes

Well, it looks like I lied, the iSyncIt release took longer than expected, due in part to my own laziness when it comes to programming but I put the effort in and iSyncIt 1.0 has finally been released. You can download it here.

The main changes to iSyncIt are the removal of the function to remove files installed by versions less than 0.4, the introduction of a preference to change the menu bar icon to one with a little more colour – this is at the request of several people that have emailed me. The final and largest change is the introduction of scheduling for your syncs, this means that you can now tell your computer to sync with your devices every 15, 30, 60 or 120 minutes, it even takes into account your bluetooth control preference. Along with the release of iSyncIt I have also re-vamped some of my smaller applications.

Kill Dashboard, Web Server Management and Kill Front Row have all gone to version 0.2, the main changes to these applications are improved workflow and brand new icons so you can actually keep them in the dock. I’ve also had a little fun with the icons for Kill Dashboard & Kill Front Row.

To continue the theme of making new icons I have released the My Books icons I created for my own external drive to the internet. After very high demand for the icons and a large number of requests I have added the larger My Book drives, vertical versions of the icons and Leopard 512×512 resources to the icon package. You can download them here.

I don’t think I have any other news at the moment, I’m sure i’ll think of something though whilst trying to come up with my next project and more features for iSyncIt. Check back soon.

Brand New Website

It was about time that I got round to doing this and finally it is (nearly) complete. The website has been re-written from the ground up to make it faster and more consistent, my hope eventually being to release the source code for everyone to use.

The primary reason for the re-write of the website is that the previous ‘blue’ website was hashed together from online tutorials, code snippets and myself reading the Ruby on Rails API, it worked okay but was slow, produced frequent errors and filled up my hosting server with logs, I corrected some of this in the back end several week ago but I still wasn’t happy. Hence the re-write.

Techie Bit: Over the course of my coding I have made the website more OO in the background so it is easier to maintain and to add to, also I have added more features to the website, the primary features being better security and the ability for me to categorize my posts, more features will be added over the coming weeks. I have also correctly configured the Rails settings and started to use migrations to manage the database. All of this should serve to make the website faster.

Everything should be in the same link locations as they always were, I did this to make sure that links from other websites still work correctly, if you find something out of place, do not hesitate to contact me. Unfortunately as a side effect of the change, users that have previously signed up to post comments have had their accounts erased due to authentication changes. The website will not be re-written again so it is safe to signup.

Anyways, that’s all for now, hope you like the new website.

I'm Back

I know I haven’t posted for a while but I just got absorbed into Uni, seen as the year is almost over however I thought i’d make a come back, of sorts. Hopefully from now on I will be posting more often and about topics that aren’t limited to my applications and website downtime, which seems to be the only content in my previous posts recently.

Development on my application iSyncIt has started again and it shouldn’t be too long until the 1.0 release is out & working better than ever, unfortunately it do not know what will happen to iSyncIt when Leopard is released, mainly because I don’t know how the Bluetooth framework will work and I can’t afford to get a pre-release of Leopard.

Work on the new website has been continuing and it is almost ready. There is a new look that is not too distant from the current look, however it is a little more readable. Categories and user levels are also supported meaning I can write a support forum for the website.

I will most definitely be posting again soon, so check back.

Possible Outage

On January 28th the website might experience some downtime, the hosting company I use is upgrading its Ruby on Rails installation to the latest 1.2.1 release. The website should work correctly with this version but I thought a pre-warning was in order just in case it doesn’t.

Exams, Exams, Exams

I suppose i’d better start by saying happy new year to everyone that reads this blog. As you can probably tell development is very slow. I haven’t really had much time to do anything as I have had a few computer science exams, the majority of which are still on going. I need to think of something new and interesting to do, something that will hold my attention for more than ten minutes. As soon as I think of something I will give you a heads up, but for now I will sign off.

Another Re-Design

Over the next few weeks the website will be going through another re-design. This time I am going to be re-writing the back end code for the website rather than the interface. Regular viewers of the site will notice some speed increases. Non-regular viewers probably won’t see anything different. The reason for the re-write is that, after writing reams of Java code, I wish my website code looked nicer and worked better. So that’s what i’m going to do. The website will go offline for a period during the transistion, but it shouldn’t be for too long.

TextMate, Java & Compiling [Updated]

For those of you that do not already know TextMate is a brilliant text editor for Mac OS X, including syntax highlighting and the most useful snippets system I have ever come across. If your a budding coder and want to try it out visit:, and download a copy.

This post illustrates some of the bundle items I have either modified or added to TextMate to make it easier to use for Java development. If you use TextMate already then hopefully you will know how to use the bundle editor if you don’t then there is some good documentation available here.

In the code snippets below a ‘\’ at the end of a line indicates the code continues but is illustrated on the line below.

  • Compile, but no run.
echo "<h2>Compiling $TM_FILENAME</h2>"
javac -encoding UTF8 "$TM_FILENAME" &> >("${TM_RUBY:-ruby}" -rtm_parser -eTextMate.parse_errors)
  • Run in terminal.
osascript <<EOF
  tell application "Terminal"
      close front window
    end try
    do script "cd '$TM_DIRECTORY'; java '${}'"
  end tell
  • Compile and run in TextMate.
echo "<h2>Compiling $TM_FILENAME</h2>"
javac -encoding UTF8 "$TM_FILENAME" &> >("${TM_RUBY:-ruby}" -rtm_parser -eTextMate.parse_errors)
if (($? >= 1)); then exit; fi

{ java -Dfile.encoding=utf-8 "${}" echo -e "\nProgram exited with status $?."; }|pre
  • Compile and run in terminal.
echo "<h2>Compiling $TM_FILENAME</h2>"
javac -encoding UTF8 "$TM_FILENAME" &> >("${TM_RUBY:-ruby}" -rtm_parser -eTextMate.parse_errors)
if (($? >= 1)); then exit; fi

osascript <<EOF
  tell application "Terminal"
      close front window
    end try
    do script "cd '$TM_DIRECTORY'; java '${}'"
  end tell
  • Compile and run package item. This also relies on you setting a CLASSPATH variable in you .bashrc, and will only work for packages one deep, still useful if you are just starting out with Java.
echo "<h2>Compiling $TM_FILENAME</h2>"
javac -encoding UTF8 "$TM_FILENAME" &> >("${TM_RUBY:-ruby}" -rtm_parser -eTextMate.parse_errors)
if (($? >= 1)); then exit; fi

export CURRENT_DIR=`pwd | sed -n 's/.*\///p'`

{ java -Dfile.encoding=utf-8 $CURRENT_DIR."${}" echo -e "\nProgram exited with status $?."; }|pre

This post was just an illustration of how to make compilation in TextMate for Java more useable, in the next post I will be adding some new snippets, the ones that are missing from the original TextMate bundle.

Update: I have now (finally) expanded on this post, you can read about more changes here.

Java Programming

Well, it was bound to happen eventually, i’ve turned to the dark side and accepted Java as a programming language. It was sort of inevitable being as I have to learn Java for uni and I now have a complete game to program for an assessment. As for iSyncIt, progress is slow, really slow, but it is getting done, I might release 1.0 as an incremental rather than a large change release. Sorry to disappoint but I really haven’t got time (it will be my primary focus again around christmas when I go home from uni). I may however try to write something Mac & Java in the mean time, to keep all you freeware hungry vultures going.


I thought it was about time that I posted again to show that I am still alive and kicking. I am making progress with the 1.0 release of iSyncIt but the progress has been slow due to the fact I have to learn Java for university, don’t worry I will be keeping my applications in Obj-C for now but any new applications will probably grow a Java back end. I haven’t really done much work on the previously announced Aliquando but I will try and do some more soon because I could really do with the program for myself. Well, I hope that’s enough to keep you going for now.


Well, today, or at least some time around today in GMT time is Anti-DRM day. As a sideline to my normal ramblings I thought I would have a go at making my position clear. By the end of this post my position will probably be about as clear as mud due to my lack of writing skills, bit I’ll give it a go anyway.

In my general opinion DRM is a bad thing, or at least having many different forms of DRM is a bad thing. I don’t think that anyone would be so against DRM if it was compatible across devices & softwares, for example it really wouldn’t bother me as long as I could listen to Windows Media DRM’d files on my iPod and iTunes DRM’d files on Media Player.

In the original formats used to distribute media the fact that they were physical objects with, at first, no way to copy them provided some sort of built in protection. You could lend an LP to someone but if they wanted a copy they would have to go out and buy it themselves. With the advent of cassette recorders bootleg copies could be easily made, but it wasn’t necessarily the nicest way to listen to the music. CD’s at first could also be copied onto tape, then onto other CD’s but it was time consuming and expensive. The internet and MP3 (generally) has however opened up a massive way to ‘share’ files with other people. The main issue though is this word ‘share’.

If sharing were truly what was going on then it wouldn’t be so bad. You could lend someone a file but after a while it would expire, essentially giving it back, much as it was initially with LP’s, cassettes and CD’s, but when people stop buying music then income for companies decreases.

We all know that in reality artists are paid too much but if music was just given away all we would get is cheap & shoddy bands with records no one really wants.

I suppose what I am trying to say is that DRM should really be unified and refined and until this happens, get rid of it. I want to listen to my music the way I want, without restrictions.


I am finally at university & I have managed to get my internet working. As soon as I am settled in and I know where I am going work on iSyncIt will continue. The 1.0 release will be as stable as I can get it to be, but I will also be adding as many new features as I can possibly think of. I can’t imagine it being more than a few weeks until the next release is ready, so say tuned.

We're Almost There

iSyncIt 0.9 has been released, the last minor update before the big 1.0 & feature unfrozen release. If you have any particular requests for features then you can contact me and I will see what I can do. I cannot see any obvious problems withe 0.9 release but if there are bugs then they will be corrected in incremental 0.9 upgrades then the necessary code migrated to 1.0.

For those of you that are interested, the current features that are in the works for 1.0 are:

  • Scheduled Syncing
  • Localization
  • Dashboard Widget

Not many features but hopefully enough to keep you users happy for a while.

(I am trying to get .Mac to sync as well but this is proving to be more difficult, if I can work it out, this will also be in the 1.0 release.)

Another New Month

These months just seem to come round faster and faster. First of all I will start of by saying that iSyncIt development is moving along steadily and I will be implementing a few features that people have emailed me in the next few releases, especially in the 1.0 release that will be coming up very soon.

Secondly, development will slow down a little at the end of this month as I will be moving to Aberystwyth University to do Internet Engineering. Hopefully this will give me the grounds to write some even better applications.

Thirdly, because of my move to Aberystwyth I have decided that I need to be more organized and, being the geek that I am, I decided to write an application to do it all for me. Of course, it will be published and made available to everyone, hopefully sometime this month.

Finally, if anyone that reads this blog attends or will be attending Aberystwyth Uni let me know through the contact page. I want to know if any one (soon to be) local to me finds my stuff useful.

Downtime (Sort Of) [Updated, And Again]

Over the next few days I will be updating the website to the new stylesheet. This means that initially the current stylesheet will be removed at the website will be left plain and boring. As I start coding the new CSS in components should start to arrange themselves. The website should remain fully functional during this time but may look a bit odd.

Update: Well, the new stylesheet is in, quicker than expected. It will be in beta status possibly for the next few weeks but for now the website is back to it’s working(ish) condition.

Update 2: The first issue has emerged, the fact the the logo, being a PNG, does not display correctly in Internet Explorer. I can either hack it to work, switch it to a slightly worse looking GIF or use a nice bit of Flash. We’ll see, for now it’s going to stay the same.