Favourite Firefox Four Feature FAIL!

I’ve been playing about with the beta of Firefox 4 for a little while now, and I wanted to tell you about a feature that I thought was absolutely amazing, until it turned out that it was a bug and they “fixed” it. This feature is made possible by a handful of other new tools that are coming into Firefox in this new version:

  1. App tabs. You’re now able to turn tabs into small tabs which sit at the left-hand side.
  2. Tab groups. You can “group” your tabs and display only a subset of them at once.

I run with a lot of tabs open most of the time. Not so many as Ruth, but a good number. These can be divided into three major categories: those related to my work with SmartData, those related to my work with Three Rings, and those related to my freelance work and my personal websurfing. Since an early beta of Firefox 4, I discovered that I could do this:

  1. Group all of my SmartData/Three Rings/personal tabs into tab groups, accordingly.
  2. This includes the webmail tab for each of them, which is kept as an App Tab – so my SmartData webmail is an app tab which is in the SmartData tab group, for example.
  3. Then – and here’s the awesome bit – a can switch between my tab groups just be clicking on the relevant app tab!

Time to do some SmartData work? I just click the SmartData webmail app tab and there’s my e-mail, and the rest of the non-app tabs transform magically into my work-related tabs: development versions of the sites I’m working on, relevant APIs, and so on. Time to clock off for lunch? I click on the personal webmail tab, look at my e-mail, and magically all of the other tabs are my personal ones – my RSS feeds, the forum threads I’m following, and so on. Doing some Three Rings work in the evening? I can click the Three Rings webmail tab and check my mail, and simultaneously the browser presents me with the Three Rings related tabs I was working on last, too. It was fabulous.

Firefox 4 app tabs

The other day, Firefox 4 beta 7 was released, and this functionality didn’t work any more. Now app tabs aren’t associated with particular tab groups any longer: they’re associated with all tab groups. This means:

  • I can’t use the app tabs to switch tab group, because they don’t belong to tab groups any more, and
  • I can’t fix this by making them into regular tabs, because then they won’t all be shown.

I’m painfully familiar about what happens when people treat a bug as a feature. Some years ago, a University Nightline were using a bug in Three Rings  as a feature, and were outraged when we “fixed” it. Eventually, we had to provide a workaround so that they could continue to use the buggy behaviour that they’d come to depend upon.

So please, Mozilla – help me out here and at least make an about:config option that I can switch on to make app tabs belong to specific tab groups again (but still be always visible). It was such an awesome feature, and it saddens me that you made it by mistake.

×

A Video Game Movie I’d See

Video game movies are notoriously bad, no matter how awesome the game that inspired them. Wing Commander took a classic video game series and completely ruined it. Doom was incredibly dull, even though it was based on one of the most popular game series that have ever exited. Prince of Persia: The Sands of Time had so much potential and the chance to draw from the multi-rebooted Prince of Persia video games, but in the end its only redeeming feature was that it co-starred Richard Coyle, whose earlier appearance in hit comedy series Coupling lead Ruth, JTA and I to rename the film after his character from that series, calling it The Legend of King Jeff, which would honestly have been a better film.

And let’s not forget the truly dire Street Fighter: The Movie, which ultimately lead to the short-lived arcade game Street Fighter: The Movie – The Game, attempting to cash in on the film before the developers realised that this wasn’t actually a very good idea. And it’s only the eighth-worst video game movie of all time, according to this video on GameTrailers. Let’s face it: video games don’t convert well to films.

That said, I’ve had an idea for a video game-inspired film that I think could really be good. Or, at least, so awful it’d be good.

Asteroids: The Movie

Don’t you dare tell me that you wouldn’t go to the cinema to see Asteroids: The Movie: CGI like this just has to be enjoyed on the big screen.

The plot is as follows: Earth governments have been secretly tracking an enormous asteroid for many years. Under the cover story of satellite launches, they’ve been firing nuclear weapons at long distances to try to destroy or deflect the mass, but all they’ve managed is to break it up into many hundreds of smaller (but still devastatingly-huge) rocks, many of which are still headed towards our planet.

We’re introduced to our main characters: a cocky ace fighter pilot who’s just been expelled from his wing group for being too cocky and ace, a young and immature geek who spends his life playing retro video games, and a love interest who spurns both of them and is probably employed by the shady government agency. Early in the film, she acts professionally and doesn’t approve of the other main characters’ respective aggressive self-confidence/childish behaviour, but eventually the three become closer as they work together (and probably save one another’s lives a few times).

Recruited for their various “talents” they’re recruited to pilot an experimental spaceship right out into the asteroid field and fire their cannons to destroy them. All is going well, but there are occasional sightings of fast-moving metallic objects around the edges of the field. These turn out to be aliens (in flying saucer like spaceships) who had originally propelled the enormous rock towards Earth in an effort to wipe out humankind, who they – as a result of their warlike culture – perceive as a threat to their galactic dominance. Earth has been on the brink of cracking faster-than-light travel for a while now, as evidenced by secret test flights of the ships which preceded the vessel used in the movie, and this makes the aliens twitchy.

There’s a fight, and it momentarily looks like the aliens stand to destroy the human ship. “This isn’t a video game: we don’t get extra lives!” shouts the love interest character, at one point. “No,” agrees the geek, “But we do have this…” He engages the highly-experimental “hyperspace jump drive” and the ship disappears just seconds before the alien missiles destroy it.

While drifting in hyperspace, the crew find evidence of the aliens’ culture and history, and the other planets they’ve destroyed. They also discover a possible weakness. They’re just beginning to understand what they have to do when they reappear in normal space, apparently only a split second after they disappeared. The chase is on as the aliens pursue the humans through the asteroid field in an exciting chase scene. Finally, the humans discover what they need to do to penetrate the alien shields, and fire upon them. They rush away as the alien ship explodes, vapourising the remaining asteroids as it goes.

The crew return to Earth as heroes.

Now: isn’t that at least as good as whatever Hollywood would come up with? And it’d certainly be far better than the Super Mario Brothers movie.

Hmm. Further research indicates that this might be already going to happen

×

Parsing XML as JSON

This morning, I got an instant message from a programmer who’s getting deeply into their Ajax recently. The conversation went something like this (I paraphrase and dramatise at least a little):

Morning! I need to manipulate a JSON feed so that [this JSON parser] will recognise it.

Here’s what I get out of the JSON feed right now:

<?xml version="1.0" encoding="UTF-8"?>
<module-slots type="array">
  <module-slot>
    <title>Module3</title>
    ...

“Umm…” I began, not quite sure how to break this news, “That’s XML, not JSON.”

“Is that a problem?” comes the reply.

Civilization V Release Day

For those of you in the USA, at least, today is the release day for the much-anticipated Sid Meier’s Civilization V. With the promise that this will be the most groundbreaking Civ game since Civilization II, I’ve managed to acquire a leaked screenshot of the very first thing that players will see when they launch Civilization V for the first time:


With apologies to those of you who haven’t had the experiences to find this funny.

×

The Modern Programmer’s Dictionary

In the field of  software development, there’s always something new to learn. Whether it’s a new language, framework, API or methodology, your need to study is never through – even if you’re a FORTRAN developer. But one of the more esoteric areas of your education will come in the form of the language programmers use, and I don’t mean programming languages.

And so I present to you a dictionary of modern programmer language (much of it shamelessly lifted from a discussion on Stack Overflow):

Ajah

Ajax, but returning HTML rather than XML (e.g. using jQuery‘s $.load method). Similarly, Ajaj, when you expect script to be returned (e.g. $.getScript).

Bicrement

Adding 2 to a number.

Boolean Zen

A principle of programming lacked by those who perform expressions to compare variables to boolean constants. For example, if (userHasLoggedIn == true) lacks Boolean Zen, because the == true at best does nothing at all, and at worst results in an unnecessary evaluation.

Classtrophobia

When someone chooses not to use the obvious object-oriented approach when it is available.

Common Law Feature

A bug in some software which has existed so long that it has begun to be depended upon by the users, who will complain loudly when it is “fixed”.

Doctype Decoration

In web development, the practice of putting a Doctype Declaration (e.g. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">) into the document despite not actually writing standards-compliant code. Often accompanied by putting a “Valid HTML & CSS” link on the site, but never actually checking that the site passes the validator’s test.

Egyptian Brackets

That style of coding which puts the opening brace { of a block on the same line as the expression (wrapped in parentheses) before it, e.g.:

if (expression){

So called because the ){ sort-of looks like a stereotypical ancient Egyptian pose, depending on your preferred coding font:

Floater

A bug that sits at the top of the bug tracking system, but nobody claims responsibility for it. Everybody just works around it.

Flock of Geese Code

A block of deeply-nested and heavily-indented code forming a tight V-shaped wedge. Often occurs when adding functionality to a complex block of evaluations, by a developer who hasn’t noticed that perhaps a return statement, exception-handling, the && operator or even a goto statement might be more appropriate! Especially poignant when using a bracketed-block language, where you’ll see a string of closing braces flying away at the end of the code.

Hi-Driven Development

A variety of printf-debugging where you pepper your code with alert('hi'); in order to find out where it’s going wrong, rather than breaking out a proper debugger. Other acceptable string literals include “hello”, “here”, “xyzzy”, etc.

Higgs-Bugson

A bug that you believe to exist based on sparse log data and theoretical examination, but you have no evidence to support the idea that it has ever actually been observed, except perhaps vague anecdotal evidence from users.

Hindenbug

A catastrophic bug resulting in a devastating loss (typically of data). “Oh, the humanity!”

headlessCamels

CamelCase words lacking a leading capital letter, as required or recommended for various languages, frameworks, and styles. As opposed to ProudCamels.

Heisenbug

First noticed on Usenet in the 80s, but still awesome: a bug that defies investigation because, during debugging (when you’re observing it), it behaves differently.

Hydra Code

Code so bug-riddled that killing one problem results in two more in it’s place, like the mythological Lernaean Hydra‘s many heads.

IRQed

Interrupted while you were trying to program. Not necessarily by somebody with an actual flag.

Loch Ness Monster Bug

An important bug, if ever it could be proven to exist. Only ever observed once or twice by users who were unable to back up or reproduce their claims. These users often go on to swear by the existence of the bug, blaming it for all kinds of unusual phenomena even in completely unrelated systems for years to come.

Ninja Comments

Comments which are so stealthy that you can’t see them at all. It’s almost as if the code weren’t documented at all!

NOPping

Like napping, but what programmers do while they’re downtiming while waiting for a computer to finish a task. Based on the NOOP or NOP operation found in many low-level languages.

NP Hilarious

An algorithm whose complexity is a joke, whether deliberately (e.g. Bogosort, but not Quantum Bogosort) or not.

Object Oriented Pasta

Spaghetti code wrapped up into classes to look like proper object-oriented code. Also Ravioli.

Pokémon Exception Handling

For when you positively, absolutely, “gotta catch ’em all.” I’m talking about hideous code like this:

try {
MessageBox.Show(message);
} catch(Exception exc) {
MessageBox.Show(exc.Message);
}

See also Try, Catch, Forget.

Refucktoring

As defined by Jason Gorman: refactoring code in such a way that you are now the only person capable of maintaining it. E.g. stripping all comments and whitespace from an arcane bit of code that you wrote in order to give yourself the illusion of being indispensable. Results in Mortgage Code (code which pays your mortgage because you can’t be fired while it exists).

Rubberducking

Sometimes you’re working on a problem and what you really need to do to solve it is to talk through the problem with somebody else. The other person doesn’t even need to be a developer: often, they don’t even need to listen – they just need to be there while you talk your way to your own solution. So much so, that they might as well be replaced with a rubber duck, sat atop your monitor. A name come up with by a programmer who apparently actually did this.

Scar Tissue

Commented-out blocks of old code, after refactoring, that have been checked in to the main codebase.

Shrug Report

A bug report which contains no reproducible information whatsoever, or is so unclear as to be ambiguous. Often contains phrases like “doesn’t work”, or doesn’t show how the anticipated behaviour differs from that observed (e.g. “when I click the print icon, the document is printed onto A4 paper from the feeder tray of the printer”).

Smug Report

A bug report submitted by a user who acts as if they know more about the system than the developer does.

Stringly-Typed

Use of strings for all kinds of inappropriate variables, like strings containing the words “true” and “false” for use in comparisons (not helped by the fact that some languages, like PHP, will let you get away with boolean comparisons on these). Also common among inexperience database developers, who’ll make an entire database of VARCHARs because they’re then able to store whatever they want in there, right?

Troolian Logic

Using a boolean variable to deliberately hold three states of information: true, false, and null. Often requires the use of the === operator to function properly.

Try, Catch, Forget

An exception handling strategy based purely on catching exceptions and then doing nothing with them. In other words, telling your program “if something goes wrong… carry on anyway!” Sometimes also seen as a Trynally – a block of code with a try and a finally block, but no catch blog at all. See also Pokémon Exception Handling.

Unicorny

Adjective used to describe a requested feature that’s so early in the planning stages it might as well be imaginary. Used by Yehuda Katz to describe some of Rails‘ upcoming features.

Yoda Conditions

Expressions that test for (literal == variable) rather than the more-common (variable == literal). The former is preferred by some programmers because it reduces the risk of accidentally using a single-equals rather than a double-equals (this mistake would produce a compiler error rather than simply misbehaving). So-called because it results in Yoda-like phraseology (e.g. “has no errors, the form does”).

×

Troma Night Adventure

Because I promised you some Aber-nostalgia.

Do you remember the RockMonkey Wiki? Many years ago, Ruth bought the domain name rockmonkey.org.uk as a gift for Andy K, who’d been nicknamed “Rock Monkey” for longer than anybody could remember. He decided that what he wanted to host there was a wiki engine, and I helped him get one set up. Soon, every Abnibber and Troma Night veteran was using it, filling the pages with all kinds of junk.

Soon, Jon launched the wiki’s first WikiGame: a maze exploration game using littered with Dungeon Master Java screenshots and monsters aplenty (monsters like Tubgirl and Lesbians and The Splurg). This kicked off a series of other WikiGames, mostly by Jon, Andy R, and myself (although Andy K started about a dozen of them and Ruth got some way through developing her first).

My biggest contribution was probably TromaNightAdventure, a text-based adventure in which the player attempts to explore Aberystwyth to collect (at least) three Troma Night stars, some pizza, some beer, and some films. It was an epic quest, far larger than I’d meant for it to grow, with multiple non-linear ways to win and a scoring system that told you exactly by how much you’d beaten it (some, but few, people managed to score the maximum number of points).

The screenshot above isn’t from the RockMonkey Wiki. It’s from my relaunched version of Troma Night Adventure. That’s right: I’ve dug up the final backup of the RockMonkey Wiki, extracted the relevant content, knocked together a mini version of the wiki engine and the WikiGameToolkit, and re-launched the game. It’s read-only, of course: this isn’t a real wiki; the real wiki is long-gone. But it does have a few extra features than the original, like a pictorial inventory and a nippy Ajax-powered interface. If you’re looking for some nostalgia about the old RockMonkey Wiki or about Troma Nights back in Aberystwyth, here’s your ticket:

The Good, The Bad, And The Ugly Of System Tray Icons

What the fuck is that icon for? Despite the best efforts of icon designer to (apparently) make clear and comprehensible icons, and by computer users to learn and understand them, I still remain perplexed from time to time by the plethora of icons in my system tray (sorry, I mean Taskbar Notification Area). Let’s take a tour:

This is a good start. It’s a clear, obvious icon that just screams out what it is and what it does. It’s blatantly the volume control. If it’s got more lines, the speakers are louder. No lines, and it’s muted. It’s also a lot clearer than the standard volume icon that came with earlier versions of Windows, which tried too much to look like a speaker, and not like a representation of a speaker. There’s a reason that speed camera signs in the UK look like old-fashioned cameras: it’s about the representation (can you imagine an iconic form that actually represented a speed camera – how stupid would that look?).

And now it all goes rapidly downhill. What the fuck does this icon mean? It’s a monitor with a growth in the top-left corner which I’m lead to believe is supposed to be an Ethernet cable. Seriously, Microsoft? You almost had this one right in earlier versions of Windows, when you had the “two computers with a line between them” metaphor, which is a more clear representation of network than this is. And when it’s connecting? A pair of spinning balls! What the fuck does that mean? It means “something’s happening” without giving any clue as to whether my pen drive is mounting or my toast is nearly done.

Oh, it’s a flag. I guess this must be the icon I click on to, I don’t know, help aircraft land on my computer. While I applaud Microsoft’s efforts to make everyday users know about the maintenance tasks they ought to be doing on their computer (like backups), this icon doesn’t scream out “DO SOMETHING OR YOU MIGHT LOSE ALL YOUR DATA!” to me. Then again, my work puts me in contact with people who ignore even their I.T. departments telling them about the importance of backups, so this might be a losing battle anyway. That’s probably why Windows is waving the white flag.

As a side note, am I the only one who’s noticed that the Windows 7 taskbar and the new standard notification icons, above, are starting to bear a remarkable similarity to MacOS (at least, left in their default configuration), with it’s Dock and Notifcation Area. Unfortunately, Microsoft didn’t take the time to tell every software manufacturer that white is the new colourful, so only Windows’ own icons appear in shiny white: everything else looks just like it used to. Like these:

This is the icon for my wireless network device. Usually I don’t bother with these, but this this particular app is the first of it’s kind that I’ve actually found to be better than Windows’ own (excellent) Wireless Zero Configuration tool. Unfortunately, it’s icon leaves a little to be desired. Thanks to mobile phones, everybody and their grandmother now understands the universal icon for “signal strength” is a series of bars ascending like steps. Except for NetGear, apparently, who believe that the best icon would be a radioactive laptop whose screen changes colour from green through yellow to red to represent signal strength. I hope none of their customers are colourblind.

I like my keyboards (and mice) big and feature rich: I’ve got big hands and I have no problem memorising what functions and macros I’ve mapped to a dozen or so hotkeys. That’s why, as well as having the best mouse in the world, I have a related keyboard with about a million buttons. This icon, which depicts a keyboard and mouse, links to the applet that configures those hotkeys, and provides notifications about my mouse’s battery level.

It’s not the clearest icon in the world – how about a little more contrast between the mouse and keyboard there? – but it’s perfectly functional.

Obvious Bluetooth icon is obvious. Kthxbye.

Although I do wonder why the Bluesoleil driver stack – which I tend to use rather than the Microsoft one or the one provided by my chipset manufacturer, because of it’s fantastic support for just-about-everything from Wiimotes to OBEX/OPP – uses an icon with a very-slightly-different Blue, which only irritates you if you, like me, frequently have multiple Bluetooth dongles installed with different stacks attached to each. I guess that’s just me.

You can almost see where Microsoft is trying to go with the safely remove hardware icon, but it just doesn’t seem right. It only shows a USB plug, yet (for some unknown reason) provides features to unmount, for example, my internal SATA hard drives. And the little green “tick” icon suggests that this icon back-ends onto an application which is “doing fine” and doesn’t need my attention. So, as always, I happily yank out my pen drive without unmounting it, and it always turns out fine because I’m not the kind of idiot that does so while I’m copying files to and from it.

Ah, Sandboxie, how I love you. This icon’s actually pretty good, and I couldn’t think of a better one for an application that “runs other applications in a sandbox” – see, it’s a stylised sandbox! My only objection is that the best icon that the designer could come up with for when the application is working in the background is what looks like a sandbox with five cat turds in it. Seriously. Seriously; let me show you:

If that’s supposed to show me that my sandbox is in use then, well, yes, I guess it does. It could also be to indicate that my sandbox needs cleaning – a routine operation with the application – in which case, yes, it also works. Maybe it’s a better icon than I thought. Or maybe it’s just telling me to shoot the cat.

ZoneAlarm. I used to like the ZoneAlarm icon, back when it was two little bar charts – one red, one green – that indicated the amount of traffic coming and going from my computer. Now it still does that, but when there’s minimal traffic it shows this “Z” icon instead. This icon’s also okay, but it irritates me that the icon changes so drastically. If I’m looking for an icon, I want it to look somewhat vaguely sort-of the same as when I left it, not completely different.

What? An amorphous blob? I guess this much be the button to click if I run out of jelly cubes. Nope, it’s the icon for WebDrive, a wonderful little abstraction layer that allows S3, SCP, FTP, FTPS etc to be mounted transparently as local drives: in short, it makes it so that any application can manage files stored on just about any remote system can be edited as if they were local, which is a sickeningly lazy way to manage a network. It makes me feel dirty, and I love it.

On the other hand, the icon sucks. What does it mean? It looks like a piece of nondescript corporate artwork. Their other products don’t fare much better – they make an FTP server whose icon is the same as the WebDrive icon, but in red and blue instead of blue and orange.

One of these days somebody will release a program that allows me to easily change the system tray icons of other programs, and I will love it dearly. So long as it has a good icon.

You fail, Skype. When I think of you, I think of your lovely blue icon with the “S” in the middle. What you’ve got here is the same icon but in green and without the “S”. So… not the same icon at all. The worst of it is, I can see what they’re trying to achieve. It’s green because my status is “online”, but couldn’t you have used your regular icon and given it a thick green border, or made the cancerous growths on the top and the bottom turn green, instead? That way, I could still tell at-a-glance that you were Skype and not some mucus that had gotten stuck to the corner of my screen.

Okay, it’s a fox. Thankfully this icon is distinct, at least, unless you’re running some variety of furry-fandom-focussed-feed-fetcher, and doesn’t take long to identify as being the stunning AnyDVD, the flagship product of SlySoft, who use the fox head icon as their corporate image, too. I’ll let this one off, but surely an icon that somehow featured an optical disc in it might have been a little better?


This is a perfectly good icon. It’s for Giganews Accelerator, an abstraction layer that adds SSL, compression, and rate-limiting controls to any newsreader software. Most of you won’t care even a little about what any of that means, so here’s the scoop: the icon uses the style of their company logo, it’s small, legible, and distinct, and it’s shaped like a “down” arrow, which is pretty sensible for an application that streamlines downloading.

In other news, Giganews are a fantastic usenet provider and you should really give them a look.

Another perfectly good icon, this time for XMing. The artifacts around the edges are probably the result of the icon being designed to appear only on grey backgrounds, which is a little sloppy, but better that than for this mostly-black icon to disappear completely on black backgrounds. Again, many of you will have never heard of or care what this program is, but trust me: this is a perfectly good icon.

A computer… wearing a hat. You know, this one almost makes sense, if you think about it hard enough or if you’ve had a couple of drinks first. It’s the icon for Pageant, a part of the PuTTY suite, and it… no, wait: wearing a hat isn’t a good icon, is it? A good icon for this application, which stores the keys you use for connecting to other computers, might be more like a keyring, if it weren’t for the fact that every application in the world already used a keyring, sometimes completely inappropriately, like in the case of some versions of the Windows Genuine Advantage nagware. I initially thought that the hat metaphor was a good one, because it was about the different roles you’re in (or “hats” that you put on your computer), but that’s not a good metaphor because it’s possible to store any number of keys in Pageant, but very few people wear more than one hat. At least, not if they don’t want to get laughed at.

A speech bubble, sort-of, and the distinctive green spot of an instant messaging program. Not bad, although if I were running multiple instant messengers there’d be no way for me to know that this minimalist icon belonged to Pidgin. Of course, the theory with Pidgin is that you don’t need to run any other instant messengers (in my case, Pidgin keeps me simultaneously on four Google Talk accounts, MSN, ICQ, Yahoo!, IRC, Facebook Chat, and others), so you can see why they thought that would be okay. They’re wrong, of course, because I’m having to run Skype as well, but the theory was sound.

Like I said, it’s not a bad icon, but Pidgin has such a distinctive logo (a pigeon!) that you’d think they’d have tried to work that in, somewhere. On the other hand, I can’t complain too much because the program allows me to choose my own icons anyway. And also, it’s awesome.

Another pretty-good icon, this time for Synergy+, which helps me pretend that I’m hacking into The Matrix by running several computers (all running different operating systems) and a crazy number of monitors (of all shapes and sizes) simultaneously. Right now I’m surrounded by five screens and let me tell you, having 7.5MP of screen real estate in front of you (while most of your friends with just one high-def widescreen monitor have about 2MP) makes for a fabulous way of organising yourself. Instead of putting windows behind one another, just fling them over onto one of your other monitors, and glance across when you need them! Computer slowing down a little? Move some of your processing off onto your other computers, and get all your speed right back again. It’s like supercomputing on your desktop.

Anyway – the icon’s okay, because it’s the “ring” icon of Synergy with a “lightning bolt” that appears when connection has been established. It’d be better if it had more granularity (if the network connections between my computers failed, but at least one was still connected, the icon would still show a lightning bolt: how about a full lightning bolt if all the connections are working, and half a bolt if only some are?), but it’s still quite workable.

Another good icon. It’s AutoHotkey, and it’s, well, the AutoHotkey icon. I suppose it could have been a letter H “key” from a keyboard, but then again, half the things I use AutoHotkey for feel more like macro programming and less like shortcut keys. The key (hah!) thing is that I can identify it at a glance, and it’s perfectly good at that.

This is the icon for Quartz, SmartData‘s (really very good) in-house timesheet/task tracking solution. To plug the application a little more; it sits in your system tray and you click on it to change tasks (for example, right now I’m on my lunch break, but when I get back from lunch I’ll select the project I’m working on this afternoon. It collates all of the data that you and your staff have been working on and presents reports and statistics about how efficient you’re being (by comparison to the actual costs of your staff time, quoted costs for work, and so on), blah blah blah. It’s pretty cool. The icon… that’s debatable. In fact, Alex (lead developer on Quartz) and I have debated it many, many times.

It’s a clock. Well, yeah, that’s a pretty good starting point for a time tracking application, and it’s reasonably distinct. It changes the colour of the face when you’re on breaks, so you don’t forget to tell it when you’re back. And that’s about it. Basic and functional.

But there are two improvements I’d like to see. Firstly, the problem with a clock is it’s a little too generic. I’m actually surprised that more applications don’t have a clock icon (other than the long-dead Windows Clock). Secondly, it’d be awesome if I could tell even more at-a-glance, by associating colours, perhaps, to different projects, and having a little coloured “button” in the corner of the icon, like we saw earlier with Pidgin, that indicated which task I was currently on. I suppose I could just mouse-over the icon, but I’ve got 7.5MP of desktop, here, and it’s a long way from wherever-I-am to the Quartz icon.

On the other hand, I suppose I could just poke Alex until this feature makes it into the application. That’s what I usually do.

It’s a lightning bolt! Honestly, this could be the icon for anything: some anti-virus software, an instant messenger, a BitTorrent client: really, anything at all. As it happens, it’s the icon for Daemon Tools, disc virtualisation software. Again: seriously, couldn’t you have put a picture of a compact disc somewhere into the icon? Perhaps you could have even had a number in the corner, showing how many disc images were mounted right now, or changed the colour based on whether or not the virtual drive was being accessed? Maybe you could have done anything that it’s a dull and uninspiring lightning bolt icon. Such great software, let down by a shitty icon.

A fabulous icon. It’s for a VNC Server, and it’s even got the letters “VNC” in it. It’s a little plain, but perfectly functional, and it even changes colour when a connection has been established.

And finally: the Language Bar icon. I turn off all of the superfluous bits, leaving just the icon, and I only keep that because it changes colour (to a colour chosen by me, which is nice) when I change keyboard layout. I periodically switch between QWERTY and Dvorak keyboard layouts, depending on what I’m writing, and sometimes I use different layouts in different applications on the same monitor: it’s on these occasions that I’m thankful that I’m able to glance down and see easily what keyboard I’m typing on. It kinda ruins the sleek white icons that Microsoft are providing these days that the first thing I do with them is add a colourful (pink, no less) version of the same, but as we’ve already discovered; these white icons aren’t making the impact they were supposed to anyway, it seems.

(if you’d never heard of Dvorak before right now, I highly recommend you read the Dvorak Zine, especially if you write a lot and you aren’t a programmer)

So that’s my notification area: a mixture of good, bad, and ugly. Icon design and selection is often a lower consideration for developers than other parts of user interface design, and it’s easy to fuck up – especially because you can never be sure what environments your icon will ultimately inhabit, or what they’ll end up next to – and I’m not claiming that I could do any better… well; except in those cases above where I’ve specifically said that I could and how I’d do it, but these are the absolute worst cases.

BiCon: The Game

I shan’t be at BiCon this year, but I thought I’d share with you all something that tickled me today. Last year, at a Naked Lunch, I ended up chatting to several geeks about Interactive Fiction, and I through out a few ideas for a BiCon-themed piece of Interactive Fiction. Little did I know that this idea had sunk in, and cogs had begun to turn…

Rach has just released BiCon 2010: The Game, and it fully embodies everything that’s fabulous about BiCon. It’s also a really good bit of IF, for a first full adventure, and involves some fascinating hacking of the gender pronouns system for Inform. I tip my hat to the author.

(there’s some discussion going on about the game on the BiCon LiveJournal community)

The Best Mouse In The World

This was one of my most-popular articles in 2010. It continues to be popular in Spain (¡Hola! Mucho gusto). If you enjoyed it, you might also enjoy:

The Old

Back in 2006, I ordered a new mouse for my computer. Previously, I’d been using a series of mid-to-high-end five-button optical mice, like Microsoft’s IntelliMouse series: when you’re doing a lot of coding, websurfing, and video gaming, “extra” buttons make a big difference, and the IntelliMouse is fast and responsive and usable in either hand: a perfectly good all-rounder mouse. But when I destroyed my last mouse with a little too much overenthusiasm in an Unreal Tournament 2004 deathmatch, I thought it might be time to look for something a little… sturdier.

Relatively new to the European market at that time was Logitech’s new MX1000: the  world’s first generally-available laser mouse: instead of using a little red LED, these mice use an invisible laser to track movements, which apparently makes them far more sensitive and accurate on a wider range of surfaces. As an ultra high-end premium mouse, the MX1000 also came with a wheel that was not only clickable but “rockable” for sideways scrolling and five other buttons (aside from the wheel and the usual three), but it was wireless and used it’s own special “cradle” to recharge. I bought one, and for years I’ve described it as the best mouse I’ve ever owned.


This mouse was so good, in fact, that I’d always planned that when it finally kicked the bucket, I’d replace it with another one exactly the same. When I said that this was the best mouse I’d ever owned, I wasn’t kidding. It fit my palm in a way that I’d never experienced before (I have pretty big hands, and I find that those piddly little mice that are so popular to be  just useless for me, leaving me with my wrist dragging around on the desk like a beaver’s tail). I genuinely like the quirky bonus selling points of this mouse, like its unusual “thumb rest” and its wonderful little LED gauge that tells you when it needs recharging.

My MX1000 is still going strong, despite years of heavy (ab)use. I use my mouse for hours a day, every day, and it needs to not only feel great but be rugged and durable, too. But the time comes in the life of every mouse when it’s time to be retired to less-intensive duties. Here’s the underside of my MX1000 today:


See how scuffed and worn it is from the hundreds of miles it’s travelled back and forth across my desk? Even the non-slip teflon pads are beginning to wear down! And the two little copper contacts on the right, there, are tarnished – sometimes it takes a couple of attempts, these days, to get the pins to make a connection when dropping it into the charging cradle. It’s time that this little mouse was put out to pasture.

But my plan – my plan to replace it with another one just the same – can’t come to pass: Logitech no longer manufacture the fabulous MX1000! Oh noes! I know it’s still possible to buy old stock or unopened second-hand ones on eBay, but this feels to me more like the universe’s way of telling me that it’s time to look for something new.

The New

So I’ve gotten myself the successor to the MX1000: a Logitech Performance MX.


And here are my observations after using it for a few days:

Pros Cons
  • It’s just like an MX1000 – ludicrously accurate, sensitive, and fabulous to hold and use.
  • It’s slightly lighter than the MX1000.
  • Rather than charging in a cradle, it charges via a MicroUSB cable (either from a computer or a supplied power adapter), so you can continue to use it while it charges (I’m just using the cable I sometimes use to attach my phone to my PC).
  • Even more buttons! All configurable by application or usable for their default functions.
  • The wheel can now operate in “clicky” or “flywheel” modes, and the “flywheel” mode – in which the wheel just keeps on spinning freely – is very nice.
  • The “Unifying” USB receiver can apparently have up to six devices connected to it (although why you’d have six mice/keyboards, which are the only devices yet to use the technology, is beyond me).
  • The teflon pads and even the rechargable battery are now replacable, to keep the mouse running for longer.
  • The mouse now uses “Darkfield” technology, which allows the laser to work even on transparent or reflective surfaces. I have no idea how this black magic works, but it’s cool: I’ve tried the mouse on mirrors and on glass and it genuinely does seem to work, but I can’t work out how!
  • The new texture of the thumb rest is more pleasant than the plasticky feel of the MX1000 (which becomes apparent if you have sweaty hands).
  • It’s possible to change the mouse sensitivity “on the fly” using pre-configured button presses, which JTA tells me is useful (I’ve never had a mouse with such a feature before, so I’ll reserve judgment).
  • Charging using a cable isn’t quite so cool nor as convenient as just dropping the mouse into a charging cradle.
  • More of the MX1000s buttons “just worked” without the special driver software installed.
  • It’s still using a proprietary wireless pairing and communication system. Seriously, Logitech, would it have been so hard to use Bluetooth and save me from using up another USB port?
  • The battery gauge only turns on for a few seconds after you first start using the mouse in a long time, or when it’s getting low: I suppose this must be a measure to conserve battery life, but it does make it slightly harder to tell the battery level “at a glance”.
  • The “rocking” of the wheel to scroll left and right no longer produces an audible “click”, depriving you of feedback.
  • The driver package is 25MB. Seriously: why does it need to be this large?
  • Perhaps a little too big for some people’s hands? This isn’t a mouse for people with a small hand.

In short, the verdict is that the Performance MX is a worthwhile successor to the MX1000, and a great replacement when the time comes. And if you’re still using an LED or even a wired mouse (trust me, when you go wireless and lose the “tug” of the cable pulling your mouse back, you never want to go back), perhaps now is the time to upgrade.

Update – 8 March 2019: it took a while, but an even better mouse has now dethroned this one.

× × ×

Kitty

~$ sudo gem install kitty
Successfully installed kitty-0.0.2
1 gem installed
Installing ri documentation for kitty-0.0.2...
Installing RDoc documentation for kitty-0.0.2...

~$ kitty
     ____
    (.   \
      \  |
       \ |___(\--/)
     __/    (  . . )
    "'._.    '-.O.'
         '-.  \ "|\
            '.,,/'.,,

~$ kitty
         /\_/\
    /\  / o o \
   //\\ \~(*)~/
   `  \/   ^ /
      | \|| ||
      \ '|| ||
       \)()-())

Kitty. That is all.

Hiding In Plain “Site”

I’ve written a program called PicInHTML, which makes web pages with concealed images which are shown when text on the page is selected. What’s clever about these page are how they work: they’re a single file, with no dependence on images nor Javascript, and they work by leveraging the little-used ::selected CSS selector. Each individual letter on the page is given a CSS class to associate it with the colour of a corresponding pixel in the source image, and selecting the text changes the background colour to that pixel colour.

That’s a wordy way of putting it. Let’s try an example:

An example of a special page - selecting the text in this page reveals the Reddit alien. Click on the image to see the discussion about this example on Reddit.

Give it a go on any of the following pages. You’ll need to not be using Microsoft Internet Explorer, I’m afraid, as it doesn’t support the ::selected CSS selector. All you have to do is select the text on the page to reveal the secret image!

If you’re interested in the mechanics of how it works, or you’d like to get a copy of the source code and have a play yourself, see my project page on PicInHTML. You could also try looking at the source code of any of the pages, above: they’re not too-hard to read, especially for machine-generated code.

!
An example of a special page - selecting the text in this page reveals the Reddit alien. Click on the image to see the discussion about this example on Reddit.

T

×

One-Time Pad In Javascript

A few months ago, I spent one lunchtime writing a One-Time Pad Encryption/Decryption Engine in Javascript. I’d meant to blog about it at the time, but I forgot, but I came across it again today and thought it was cool enough to share with you all.

If you already appreciate why that’s cool, go play with it. If you don’t, allow me to explain.

What is a One-Time Pad and why is it awesome?

One-time pads are a form of cryptography which are simple enough to do by hand (you don’t need a computer, but it helps), versatile enough to transport any message, and – this is the clever part – completely unbreakable.

Yes, completely unbreakable. It doesn’t matter if you have a billion supercomputers and a billion years, a one-time pad is mathematically sound. So long as it’s used properly, it’s unbreakable, but it’s the difficulty and discipline required in using them properly – as well as difficulties in finding secure ways to share keys over long distances – that makes them impractical for widespread use.

They did, however, see a lot of use in espionage during the Second World War and the Cold War, and continue to be used today for some diplomatic messages, as well as occasionally by particularly paranoid civilians.

So what’s the story?

You’re probably familiar with the concept of a Caesar Cipher – you may have even played with them as a child – which is perhaps most-often seen nowadays in the form of ROT13. Put simply, a caesar cipher “rotates” letters through the alphabet, so perhaps A becomes B, B becomes C, C becomes D, and so on (in this example, Z would become A). So my message “IF YOU READ THIS YOU ARE GAY” becomes “JG ZPV SFBE UIJT ZPV BSF HBZ”. I can send that message to you, having already agreed with you the code, and you can roll each letter back by one (so A becomes Z, B becomes A, etc.), to get back the original message.

This is fundamentally flawed and offer no real security at all, of course. But suppose we made a couple of enhancements to our plain old Caesar Cipher. First, let’s add some punctuation to our alphabet (space, full stop, comma – we’ll treat these as letters in their own right which come after ‘Z’). Then, instead of rotating each letter in our message the same number of steps around, we’ll vary it. So let’s agree that the first letter will rotate 3 places, the second by 18, and the third by 11: then the fourth by 3 again, the fifth by 18, the sixth by 11, and so on. If we encode the same message now, we get:

  • I becomes L (rotated by 3)
  • F becomes X (rotated by 18)
  • [space] becomes I (rotated by 11)
  • Y becomes a comma (,)

And so on. Suddenly that’s a lot more secure than our plain old Caesar Cipher! Congratulations: you just invented the Vigenère Cipher. Unfortunately for you, it’s almost 500 years old already. Even more unfortunately, it’s still not very secure. It’s fine for passing notes in class, but it won’t do for sending orders to your agent on the other side of the Iron Curtain!

How is a One-Time Pad different?

The “key” to the cipher we used above is 3, 18, 11, and the problem is that the key ends up being re-used (repeated) throughout the course of the message. If the message was the word “ELF” (encrypted to “HAQ”), and we agreed never to use that same key again, then anybody who intercepted the message – even if they knew we were using a Vigenère Cipher – wouldn’t know what we’d said, except to say that it had three or fewer letters. We could equally have said “MAN” (using the key 8, 17, 8), “EAT” (using the key 0, 17, 14), or “EGG” (using the key 0, 23, 1). If we ever used the same key – 3, 18, 11 – again, our code would become vulnerable to frequency analysis, which is a technique for working out what the key might be based on the likelyhood of particular letters or words (especially common ones) being used in combination.

It’s pretty easy to see how to fix this: all you have to do is to choose a key that is at least as long as the message you want to encrypt, and never reuse the key.

This is how a one-time pad works. Suppose you and I agree a series of numbers, like this: 64191 25746 89891 93406 33604 89879. You keep a copy, and I keep a copy, and we never tell anybody else those numbers, or the order in which they appear.

When I want to send you a message, I first convert that message into a series of numbers, using a codebook or codetable. In the example codetable below – which has been optimised for the English language – the most-commonly used letters are represented by one digit each, while less-frequently used numbers are represented by two digits. So the message “STEAL THE PANTIES” becomes 82832 17890 83752 80148 33282. It’s important to remember that this still isn’t encrypted; it’s just encoded: turned into a format suitable for encryption.

If we often talk about “panties” in our messages (and who doesn’t?), we might add that word to our codebook to make it faster to write: for example, we might assign it the code “11” – in the table above, the prefix “99” means “look it up in the codebook”, so instead of writing “panties” as “80148 33282”, we’d write it as “9911” – cold war spies had whole dictionaries of most-common words assigned to numbers to make them shorter to write out! That makes our message: 82832 17890 83752 99110. In this particular implementation, we add a padding zero to make it up to a nice round block of five digits.

Next, we encrypt the message using our pre-arranged secret key, 64191 25746 89891 93406 33604 89879. To do this, we just take each digit in the message and add it to each digit in the key, ignoring any “tens” column. So 8 plus 6 is (1)4, 2 plus 4 is 6, 8 plus 1 is 9, and so on, to get our encrypted message.

All you have to do to decode it is run the whole thing backwards. From each digit in the message, deduct the corresponding value in the key – if you get any negative numbers, just add 10 to them so that they’re not negative any more. Then run the resulting encoded number through your codebook to get back the secret message.

In practice, using a codebook is optional, but very-highly recommended. In the basic codebook I’ve provided with my implementation, the word “condition” goes down from being “71547 23833 54” to just “99114 7”. A well-designed codebook will contain not only common words in your language, but anticipated words for the things that you expect to talk about in your messages (like “MISSION”, “CAPTURED”, and – of course – “PANTIES”).

Messages encrypted using one-time pads are so secure that it’s safe to send the message itself completely in the clear, which is exactly what we used to do. Especially during the cold war, but still today (and increasingly), governments have been able to communicate with spies in foreign countries simply by broadcasting strings of numbers over conventional radio, from what are called numbers stations by radio enthusiasts (and also by conspiracy theorists, of course). Of course, nowadays it’s perhaps more-feasible to send many kinds of messages by e-mail – and there are a number of one-time pad systems optimised for fully-computerised use, although there exists a greater risk of being traced online than by simply tuning in a radio.

Now: go have a play!

Click the link – One-Time Pad Encryption/Decryption Engine in Javascript – to try out my one-time pad engine and encrypt and decrypt a few messages of your own. It’s quite deliberately written in a way which does not communicate with my server at all, once the program has downloaded (unplug your computer from your Internet connection if you like, and you’ll find that it still works), so I’m not able to see what you’re encrypting. You can use your own codebook if you like, and the entire source code for the page should be reasonably easy to read, if you’re that way inclined. Have fun!

However, you certainly shouldn’t actually use it for passing secret messages around: read the caveats below if you can’t work out why for yourself!

Caveats

  • The first challenge with using one-time pads is finding a good secret key. People have used all kinds of things – patterns in music, entire text of books – that are all flawed and imperfect. The only secret key good enough for use in a one time pad is a cryptographically-random set of number. The random numbers generated by a conventional computer are not good enough: I suggest you get yourself five ten-sided dice and roll them all simultaneously, writing down the numbers which come up as they appear in front of you from left to right. Repeatedly. Yes, this is a boring process. For convenience, my implementation will generate random numbers for you, if you like, but they’re not good enough for actual use. The United States broke a German one-time pad in 1944 because the machine they used to generate the random numbers was not sufficiently random.
  • The second challenge is getting your secret key to the friend to whom you want to send secret messages. This must be done in person. If you transmit it by any other medium, it could already have been compromised. Even if you encrypt it, the system can only be considered to be as good as that encryption, which defeats the point entirely. During the cold war, KGB spies were issued with tiny keybooks like the one shown on the right. A book this small can be hidden in any number of places, as anybody who’s been geocaching knows! After receiving and decoding a message, the page used to provide the key could easily be burned, eaten, or otherwise destroyed.
  • A third challenge comes from the fact that no key must ever be re-used. As soon as a key is re-used, the code is no longer unbreakable. A combined U.S effort broke a 1945 Soviet one-time pad after the same key was used several times: once the U.S. knew something about the contents of some of the messages (they contained leaked British intelligence), they were able to partially break the key.
  • There must be no way for an unauthorised party to observe the plaintext before it has been encrypted or after it has been decrypted. Your desktop PC won’t do, because your enemy can read your screen through the wall, install a keylogger, or just peep through your window!
  • And, of course, as with all cryptography, your system is only as secure as the people involved. If your friend can be bribed, blackmailed, tricked or tortured into giving up information, the system fails. Obviously to maximise your ability to protect your system you should issue different keybooks to each of your trusted friends – this also helps to prevent them from talking to one another and organising a coup against you!

Further Reading

×

SuperGenPass In MicroB On The Nokia N900/Maemo

In the unlikely event that I’m not the only person who uses SuperGenPass to manage my passwords and MicroB on Maemo on my Nokia N900, here’s a few tips that I thought I’d share (they’re also valid on the N800 and N810 and “hacker edition” N770s, too, I expect):

  • You don’t have a Bookmarks Toolbar (where would you put it on a 3½ inch screen?), so once you’ve customised your SuperGenPass bookmarklet, you’ll need to click-and-hold on the generated link, and then select “Add bookmark” to save it to your bookmarks).
  • Use it as normal: either fill your master password into the form and click your Bookmarks menu and select the bookmarklet, or select the bookmarklet and give it your master password. Don’t forget when using complex forms or changing passwords that Maemo provides a full clipboard so you can copy/paste passwords around where the need arises (thankfully quite rarely).
  • If you’re irritated by the “You have requested an encrypted page that contains some unencrypted information” warnings that you see when logging into SSL-secured websites (and the fact that unlike desktop Firefox, you can’t turn it off from the settings), here’s how you disable it:
    • Enter the web address – about:config
    • Agree to the warning page, if you’re presented with one
    • Type “security.warn_viewing_mixed” into the search box, or browse the properties list for that option
    • Select it by clicking on it, and tap the Enter key to toggle it from true to false.
  • I don’t yet know the reason for the fleeting “Maximum number of characters reached” message, but it doesn’t seem to impact on functionality of SuperGenPass. Does anybody else know what it’s about or how it can be suppressed?

Nokia N900

I’ve just got myself a new mobile phone, and I thought I’d spend a moment to gloat about some of it’s more awesome features (and mutter under my breath about a few of the things that are less-fabulous about it).

So, my new phone is a Nokia N900. You’re not likely to have seen many of these floating around, yet, because they’re new to the UK and they’re currently in somewhat short supply, but thanks to some careful negotiation I’ve gotten my clammy mits on one just a little ahead of the curve.

I’m now loathe to say what I was initially inclined to about it – that it’s quite a remarkable phone – because it’s not really a phone (although it is quite remarkable). As somebody who has always gone for smartphones with heaps of geeky features, I’ve often gone through conversations like the one in the comic, above: where somebody has said “but can it make calls?” These comments tend to come from people who want a phone that makes calls, maybe sends texts, and little else, and often this “purist” view of mobile telephony somebody gives them a strange superiority complex (or perhaps it’s just a backlash against the feature-creep of modern portable devices: who knows). As for me, I don’t care – I want all of those extra features. I couldn’t imagine any more owning a phone without – at least – a fully-featured web browser, camera, bluetooth, wifi, and the capability for me to install (and ideally develop) my own applications onto it, such as connectivity tools, an instant messenger, and so on.

A Nokia N900 on a phone call

However, the Nokia N900 is the first communicator – yes, that’s the word I’m going to use, instead – where I’ve honestly felt that the telephony features “come second”. I suppose it’s the result of the natural progression of Nokia’s Nxxx range of PDAs that this should be the case – the N900 is the first in the series to actually support use of a mobile phone network at all; at least directly. In the device’s default configuration, out-of-the-box, supposing you wanted to make a cellular call, you’d need to:

  1. Switch desktops (by “swiping” one desktop along) or access the applications menu (by tapping the on-screen button for that purpose).
  2. Tap the “Phone” icon, which by default sits in 6th place on the list. Yes, 6th.
  3. Dial the number you wanted to call.

That’s about 66% steps more than just about any other phone ever made. (okay, there’s actually a faster way, but supposing you wanted to exclusively use the touch-screen interface, the above instructions are correct) I know a lot of people who would be put off by that, but I’m not one of them: I’m well past the point where phone calls are the primary thing I use my phone for!

There’s a few things that make the Nokia N900 remarkable by comparison to the phones I’ve had before:

Touchscreen (& hidden keyboard)

Superficially, the major change to my previous phones is the addition of a touchscreen, which seems to be The Thing if you want to make a smartphone these days, thanks to Apple’s innovations in that area. Unusually, the N900 also has a slide-out QWERTY keyboard. The slide-out keyboard takes some getting used to, because it’s best operated by your thumbs, which isn’t the way I’m used to using a keyboad. It also makes the phone almost twice as thick as the iPhone and slightly thicker than the HTC Magic, which may be a turn-off to those who like their devices skinny (again, not something that’s ever been a concern to me).

I’m quite pleased with the touchscreen. There’s a stylus embedded in the edge of the case (this is a resistive touchscreen, not a capacitative one like the iPhone, so a stylus can be used), which can be good for clicking tiny links on web pages without zooming in, sketching, and so on, but mostly I’ve just been using my big chunky fingers and that’s worked fine. While the hardware’s multitouch-capable, the factory-installed software isn’t (more on that later), presumably to avoid a lawsuit (there are a lot of complicated patents in that area right now), but having never owned a multitouch-capable phone I don’t miss it. Instead, there’s a good deal of standardised gestures – for example, drawing a spiral in a clockwise or anticlockwise direction can be used to zoom in and out.

The keyboard noticibly lacks a tab key, norkies (angle-brackets), and a few other uncommon pieces of punctuation, which is slightly disappointing (for a geek phone!), because acessing these using the alternate method is just slightly slower than would be ideal. Perhaps these could have been supplied as “special” characters on some of the keys which have no alternate function (e.g. the cursor keys): still, it should be reasonably easy to write this kind of functionality.

Operating System & architecture

Maemo OS screenshot

A particularly unusual feature of the Nokia N900 is it’s choice of operating system. It’s not that Linux-based smartphones are particularly rare per se – after all, Google Android is Linux-powered and the iPhone OS is based on a BSD kernel – but the thinking that’s behind the N900 that is unusual. You see, the N900 gives you root as-standard. If you want to install a different Linux distribution or completely change the one that comes with the device, you can – without “jailbreaking” the device or invalidating your warranty. The standard operating system for the N900, Maemo 5, is based on Debian Linux but with Matchbox and Hildon providing the GUI. This means that the entire operating system is open-source and virtually free of patents and restrictions, and the community support is quite significant. Plus, there’s something distinctly sexy about opening up a terminal on your new phone and typing “sudo apt-get install dosbox” onto it, and a few minutes later having a fully-functional DOS emulator running in your pocket.

I suppose you have to be my kind of geek to truly appreciate that.

Fresh from the factory, the N900 comes with the usual selection of tools – phone, SMS (Nokia have finally improved their stone-age predictive text system to a modern one with support for word-completion, Markov chains, and so on), address book, web browser (based on Mozilla Firefox, and with Flash 9.6 support – there’s nothing quite like watching Flash videos on your mobile, stutter-free), etc. There’s quite a lot more reliance on the community than on other devices: for example, despite the inlusion of an FM tuner in the hardware, there’s no software to support it unless you install it yourself. As a Linux geek, that suits me down to the ground, but this isn’t a phone for everybody – it’ll never be popular and it won’t hit the mainstream in the way that the iPhone and Android-powered phones have.

Want support for Ogg Vorbis in your media player (damn right you do): just install a community-supported codec package. Same goes for video formats, whatever applications or games you want, and so on. There’s a package to readily allow plain old Debian repo packages to “just work” on it, too, without recompilation, so there’s an immense number of applications already available without even having to go near the Ovi Store, Nokia’s answer to the Android Marketplace and the Apple App Store.

The hardware

Nokia N900 with keybord extended

If you’re the kind of geek who cares, the hardware for this device is really quite spectacular. But if you’re that kind of geek, you already know where to look it up… and if you’re not, you don’t need me to repeat it. Suffice to say that the N900 is nippy and responsive even when performing intensive tasks (like simultaneously restoring archives from parity files while listening to radio repeats on iPlayer and playing 3D-accelerated video games), thanks to a generous amount of RAM and a good seperation of responsibilities between the three (yes, three) individual processor cores.

This is a geek’s device, and it comes with all kinds of surprising extras for developers to tap into. As well as Bluetooth, the tilt sensors and accelerometers (some idiot has already written an app that detects how high you can throw your N900 based on what planet you’re on and the accelerometer readings – sounds like a quick way to break your new toy, to me!), two cameras (one a 5MP one, like the high-end Nseries phones), it’s even got an infared transmitter, so you’re only a copy of LIRC away from a universal remote, too.

Thanks to last year’s industry standards agreement, the N900 uses the new “standardised” mobile phone charger, so at least you shouldn’t have to throw out your charger ever again (at least, until mobile phones start charging by induction, as standard), and you’ll always be able to charge from USB. But in a genuine bit of Nokia care, the N900 box also contains an adapter that can be used to convert any old-style or even old-old-style Nokia charger into the new standard format, which is a world of awesome (what else was I going to do with my collection of Nokia chargers?). Thanks for thinking of us, Nokia. Oh: and the environment, I guess.

And now, the things I don’t like

It’s not all rainbows and kittens, though. There’s a few things about the N900 that haven’t won all of my praise and support just yet:

  • Why do virtually all of the default apps run exclusively in either “portrait” or “landscape” mode? Some applications will automatically switch when you rotate the phone, but not all of them: personally, I like to be able to browse the web in “portrait” from time to time! I’m sure it’ll be patched soon enough, but it’s a minor annoyance for now.
  • It would have been nice to have a physical “Task Manager” button on the device, for when a full-screen application has made the standard one inaccessible (this isn’t the iPhone – this is a true multitasking machine – so being able to switch apps “fast” would be nice, like we could on Symbian). On the other hand, there’s an app for that.
  • There’s no native A2DP support, so those “next track”/”previous track” buttons on your Bluetooth headset are officially useless. Would this really have been so hard to have in the standard package? Can somebody write it, please?
  • There are a few teething bugs in the first release of the Mail For Exchange package, which I use to synchronise my address book and calendar with my online accounts, resulting in some synchronisations simply failing (although failing-safely, of course: no data was damaged). Considering that Nokia have had working code to do this for several years now, porting it and then testing the port really shouldn’t have been so difficult.

So there we have it

An official thumbs-up from me, so long as you’re a geek and don’t mind the fact that this phone is – for the next month or two, I suspect – going have have the kinds of teething problems I’ve listed above. I’ll reiterate that this isn’t a phone for a regular Joe: if you’re not going to appreciate the freedom you’ve got with a device like this, you’d be better to save your money and get a HTC Nexus One or iPhone 3GS, or hold on for a couple of months and check out the spectacular-looking Sony Ericcson XPERIA X10.

The N900 is a phone for people with balls and a passion for the most open of open-source. And it’s awesome.

Your Experience May Differ

To: Daniel Hill <dlh9@….>
From: Dan Q <dan@….>
Subject: Aberystwyth University Is Awesome! Warning: Your Experience May Differ.

Dear Daniel,

There’s an age-old tradition amongst Aberystwyth graduates, and in particular amongst Computer Science graduates. But to truly understand it, you first need to understand a little bit about Aberystwyth University. Also, to understand recursion, you must first understand recursion (you’ll “get” that joke by your second year, if you don’t already).

As you know, your username is “dlh9”. There’s a reason for that: The letters are your initials. “But I don’t have a middle name,” I hear you cry (or, at least, not one that the University know about), “Where’s the ‘L’ come from?” Well, it turns out that Information Services, who look after all of the computer networks, have a System [TM]. And their System [TM] is that staff get usernames like “abc”, undergrads get “abc1”, postgrads get “abc12”.

(this has lead to some awesome usernames: for example, “bed” used to be the username of somebody from Residential Services, and “sad” was once the username of one of the counsellors at the Students’ Union)

Anyway, I digress. I was talking about usernames. The digit in your username is the year you started your course. So, because you’re starting this year, yours is “9” (see, ‘cos it’s 2009 – get it?). You’re not allowed to spend more than nine years getting your degree, so that’s a pretty good primary key (you probably know what one of those is, but if not, you will before the academic year is out). Postgraduates get two digits because they often hang around for years and years. I don’t know what would happen if somebody spent a century getting their PhD, but I’m guessing that it wouldn’t be pretty.

And so there’s been a long-standing tradition amongst Aber grads, and particularly Comp. Sci. Aber grads, and especially particularly Comp. Sci. Aber grads-who-graduated-and-got-jobs-in-Aberystwyth and never got around to leaving… that when their username comes up for “renewal” – when a decade passes after they first started their course – they finger (you’ll learn what that means soon enough, too) the Aber computer systems and check if their username has been re-assigned. It’s a great way to make yourself feel old, as if the annual influx of younger-every-year Freshers didn’t do that perfectly well already.

Over the years, I’ve seen many friends play this little game. Some of them won, but most of them lost – it turns out that the odds aren’t really on your side: there are 17,576 conceivable username combinations each year – from aaa9 to zzz9 – and only 3,000 new students, so odds are less than 50% whether or not you ignore the statistical biases that mean that things like “qxz9” (Quentin X. Zachary?) are basically never going to turn up.

So imagine my surprise when I, for the first time, get to play the game, today… and I not only win, but I get a double-win, because the person to whom my old username has been recycled is an undergraduate in my old department!

Yes: I was the last owner of “dlh9”. I was “dlh9” from 1999, when I started, to 2004, when I graduated, an alumni of the Computer Science Department at what was then the University of Wales, Aberystwyth (it changed it’s name to Aberystwyth University shortly afterwards – this, combined with the fact that I have since changed my name by deed poll, means that I am the proud owner of a degree certificate that contains neither my name nor the name of an existing university!). At the time, my name was Daniel Huntley – I didn’t have a middle name, either – and I spent five years getting a four-year degree in Software Engineering before I started working for a software company here in this very town. I haven’t yet got around to leaving.

It still feels strange to write an e-mail to your e-mail address – my old e-mail address. It feels like I’m writing an e-mail to myself. I wonder what I’d have made of it if I’d have received this e-mail when I first arrived at University. It’s not so hard to imagine: the person I am now would be unrecognisable to the person I was back then, just like I am a complete stranger to you, but writing to you nonetheless. But even if you discard this e-mail and never think of it again, you’ll have done me a wonderful service by allowing me the chance to participate in a fascinating thought experiment that has granted me a great and deep nostalgia for the time I spent at that University.

(by the way; I apologise if your e-mail address is still getting the spam it used to get when it belonged to me)

Like me, Aber’s changed over the last ten years. The University’s changed, and the Computer Science Department has changed too. But I’m sure that you’ll find the place as beautiful and as satisfying as it has always been: this remarkable town on the West coast of Wales, where the mountains meet the sea, full of strange and quirky characters, a million miles from anywhere, and truly unique. I find myself longing for you to have *my* experience of Aberystwyth; to do all the great things I did, to meet all the great people I did – but you won’t. You won’t have the same lovers; you won’t discover the same music; you won’t join the same clubs; you won’t have the same beautiful sunsets while you roast burgers on disposable barbeques and the rising tide laps at your ankles; you won’t have the same hangovers; you won’t scrape through the same exams; you won’t steal the same traffic cones; you won’t climb the same mountains. A different story told differently.

You won’t have any of the things that made my time here in Aberystwyth so wonderful for the last ten years, but don’t dispair, because you’ll have something far better – you’ll have all of your own marvellous experiences. Mine are mine in nostalgia alone, but yours are yet to come. And I hope you have an ass-kickingly good time, because that’s what every Aber Comp. Sci undergrad deserves when they come to this magical corner of the world.

When you get as far as your lectures, tell Richard Shipman I said “Hi”. That’ll put you in his good books, I’m sure. ;-)

And if you see me around town, give me a wave and I’ll buy you a pint. If you got nothing else from reading this old man’s drivel, you just earned yourself a free pint. When I was a student, I’d have called that a win-win. Your experience may differ.

Good luck, and best wishes;


Dan Q

Home