Tom Insam

Recently I've been bouncing back and forth a lot between Android and iPhone, both platforms now having multiple aspects that I like and multiple aspects that annoy me. In an effort to remove one of the major problems with Android, I've written myself a mobile HTML Simplenote client so I can read my notes when away from the iPhone (simplenote being one of the Killer Apps of the iPhone for me).

It's an HTML5 'app', is as much as android has those. It stores the contents of your notes in local storage, so it's fast, and it'll poll for changes, and it's got caching of files, so it should work if your phone is offline letting you read your notes on an aeroplane or something. If you're weird and want to use it on an iPhone, it works there as well and has proper home screen bookmark support.

Caveats - It's an early hack - this represents a few evenings of work (mostly spent yelling at cache manifests), not a real project. It's also read-only - you can't change notes yet. 90% of my use case is just reading things I've written on the desktop, so it's not likely to gain this ability any time soon either. I don't really care about the ability to edit notes.

Most importantly, because of HTML and cross-domain stuff being what it is, all requests made my this app go to MY server, and I proxy them to the simplenote server. This means that (a) I might be logging your password (I'm not, but you can't prove that), and (b) it all goes over HTTP because I don't have an HTTPS certificate, so someone else can sniff your password.


Anyway. check out the app itself, or have a look at the inevitable github project.

The bottom line here is that instead of doing all the much harder work of adding inlining to our own compiler, all we need to do is let the JVM do it, and we benefit from the years of work that have gone into current JVMs’ optimizing compilers. The best way to solve a hard problem is to get someone else to solve it for you, and the JVM does an excellent job of solving this particular hard problem.

Dr. Freeman, you really should not be out there. At the moment of
synapse as I teleport this chamber will be bathed in deadly particles that
have yet to be named by human science. Perhaps when I have the leisure to do
the work myself, I will name one after you. That way you will not be
completely forgotten. When the singularity collapses, I will be far away from
here, in another universe in fact. You on the other hand will be destroyed in
every way possible, and even some essentially impossible.

Dr Breen, Half-Life 2 (on the mac yay). Physicist put-downs, eh?

iTunes has two different ways to deal with files on disk - adding a file can either create only a reference to it in the library, or iTunes can copy the it into a central folder where it'll be managed for you. Both methods have their fans and their detractors, but I'm in the process of switching from referenced to managed, because iTunes 9 got a new, much prettier, folder structure and I'm tired of micromanaging this stuff.

The approved way to convert your library is to select "Keep iTunes Media Folder Organised" and "Copy files to iTunes media folder when adding to library" in the 'advanced' section of iTunes' preferences. Then you select the 'File.. Library.. Organize Library' menu item and tell it to copy all your media files into the new library.

I don't want to to this, I don't want 2 copies of everything, and I don't have the disk space anyway. To do this the easy way (on the Mac, anyway),

  • Move all your media files into the new library folder. You have to keep them on the same volume or the iTunes references will get lost. If you want the new media folder on a different volume, you're stuffed, but you'd have to copy them anyway so why are you here? How they're laid out on disk inside this folder doesn't matter.
  • Deselect "Keep iTunes Media Folder Organised" in advanced preferences.
  • Restart iTunes.
  • Reselect "Keep iTunes Media Folder Organised"
  • Click the 'Change' button next to the Media Folder location in advanced preferences, and click 'Choose' to re-select the current folder. We're not actually changing it, we just want to pretend we did.
  • Click Ok.
  • Watch iTunes happily re-organise all your files.

So, I got bored and started to Google my name..

So, I got bored and started to Google my name and found someone named “Jerakeen” (my name, Jeralkeen, without an “L”). I was amazed and searched “Jerakeen”. She/He/It has two(2) websites: FanFiction By Jerakeen and

This is exactly why I abandoned the old nick. I'm a nerd / computer programmer. The other jerakeen writes gay fanfic. Not an area where I want confusion, thank you very much. Alarmingly, they seem to own the google results now.

Take this as an important lesson, fellow nerds - it doesn't matter if you've used a particular nick for 10+ years. Normal people use the internet now, and they can DESTROY YOU.

Some time ago, I wrote a thing about Android that mentioned how nice Activities are. I've been trying to write the odd Android app recently (aren't damp miserable evenings great?) and this has prompted me to work out exactly what's going on, and I'm very confused.

The iPhone is simple, though very annoying. If you're in a twitter client, and you click a web link, the twitter client will quit (let's ignore the 4.0 multi-tasking stuff here, because it doesn't really change the underlying metaphor) and the web browser will open. The only way to get back to your twitters is to quit the web browser, run the twitter client again, and then maybe it's remembered where you were. Also, your web browser still has that window open in the background.

Sometimes, to get round this, the twitter client implements its own web view. You click a link, and you'll get an embedded web browser. This time you can go back to the twitter client, and you're not messing with the state of another application. But you can't bookmark the page you're looking at, because you're not really in your web browser. And the twitter client has had to do a lot of programming to get to this point, which I'd rather they spent on twitter-related features.

On Android, the interface revolves around Intents. My twitter client can just start a 'VIEW' intent with the URL of the page I want to look like. The system will interpret this by opening a web browser and putting it over my twitter client, displaying the page I wanted. If I press the hardware 'Back' button, I'll go back to the twitter client. Best of both worlds yay.

But at a system level there really is a web browser application here that I'm starting. It's not just a magical disconnected window. What's going on? Can I construct a meaningful model that tells me what's going on?

Testing on my Hero here has revealed the following behaviour:

Suppose I have my web browser open, looking at, and I have some browser history. Wow, what a site. Now I tap the Home button, and open my twitter client, to see if anything is up. Someone has twittered something with a link, so I click that link. A web browser window appears, and the link opens, so now I'm looking at Let's call this my base state.

Suppose I press 'Back'. I return to my twitter client! Yay. If I then press Home and open my web browser app, I see Perfect.

Ok, so instead of that, I don't press Back from the browser to get back to twitter, but instead I press Home, then re-launch my web browser application. Now when it opens, I'm looking at If I press Back in this state, I return to the home screen. If I now open the web browser again, I find myself looking at But if I press back now, I won't return home, instead I navigate backwards in my browser history.

So opening a link from another application has actually hijacked my current browser tab/window/whatever, and navigated it somewhere else, but with a hook in the history so that when you press 'back' over that note, it closes the browser and returns to what you were doing before. Which should have been twitter, but I'd relaunched the browser from the home screen, so it closed the browser. When I returned to my browser and saw before, it was because I'd navigated back to it from, but the interface had hidden that fact from me.

This is confusing.

iPhone notifications

People seem to think that for the iPhone, 'notifications' mean 'not really runing in the background, but merely gets woken up by a server ping'. From a strictly engineering point of view, this might be true, yes, your code is not running. But from a user point of view, what code is running is totally irrelevant. The 'application' as a user interaction experience can keep running in the background, do things, and notify you when there's an incoming call. Where the code is actually running is irrelevant.