Amazon Black Friday sales: a clusterfuck.

This is a reproduction of a message I sent to Amazon.co.uk tonight, after their Black Friday sales system went to hell on me, and I found their response to the problem less than enlightening. I’m reproducing the message here, as a warning to all. On a related note, links to my Amazon wishlist are gone.

Extremely disappointing.

I’ve been hovering over the lightning deals for a few days, hoping to get something for a good price. Today, I managed to get two items of interest into my basket, out of the dozen or so items I’ve been trying for. The Amazon website clearly states that once items are in your basket, you have until midnight the same day to finalize the purchase at the lightning deal price, so I kept those items in my basket until I got home, so I could pay with my wife’s credit card.

Throughout the entire process, the lightning price remained – seemingly implemented by showing the normal Amazon price, then applying a total of about £55 of promotional discount at the checkout, making the total price about £85.

AFTER I clicked to finalize the purchase, after verifying that the delivery address, card to be charged, and importantly price, were all correct, everything seemed fine. Until I checked my email inbox a few minutes later, to find that no promotional discount had been applied after all – and I was charged full price, not the price shown at the checkout.

Whilst irritating, I reasoned that with the sheer size of the Black Friday promotion, things can occasionally go wrong, so I called up to ask for assistance. However, rather than any degree of sympathy for my situation, the customer service representative seemed intent on blaming me for the problem – first implying that I hadn’t really added the items at the promotional price to my basket, then that there was an unpublished undisclosed rule about a 1-hour limit between adding an item to the basket and purchasing it (directly counter to the “Once you have added to your basket, be sure to check out before midnight” on Amazon.co.uk)

Eventually he agreed to cancel the purchase, making it sound like a special favour, rather than the absolute bare minimum response.

I’m not happy. If I’d been told “something broke, we don’t know what, but we can’t discount the items now” then I’d have been disappointed but accepted it. But being accused of being to blame by the customer service representative – using childish banqueting analogies no less – left me utterly infuriated. As a result, I’ve cancelled a second order I placed tonight, and will be looking into closing my account entirely.

Things go wrong sometimes. It’s unfortunate, but they do. But when things go wrong, there’s a wrong way and a right way to deal with the customer. Blaming them is not usually the right path to take. Neither is inventing secret rules.

Since this feedback form explicitly says “we will not respond to messages which were sent to us using this form”, I’ll be sending a copy of this feedback via order help, in the hope that someone might actually read it, as well as republishing it elsewhere for the benefit of friends and family.

Always twirling, twirling, twirling towards Freedom

I’ve never quit a job before. Well, not a real job. Quitting PC World was more than easy, it was practically required for my soul not to leave my body. Quitting Waitrose was, well, it was a freaking supermarket job. And Southampton football stadium… I just stopped turning up after one girl fainted in the kitchen from heat exhaustion. But a real, proper handing in of notice is something new – in no small part because I’ve been in the same place since my first job as a new graduate.

Not that I’m ungrateful, mind. Looking after big iron at the University of Oxford has been pretty awesome – more blinky lights than you can shake a stick at – but there comes a time when you need to think about your career, and move on to pastures new. I’m fairly sure six and a bit years is WELL past that point.

When I started looking at work, I had only a few mandatory criteria – a sysadmin job, working with Free Software, without any significant decrease to my monthly income. Beyond that… well, in this economy, who am I to argue?

What I hadn’t accounted for, however, was a job whose awesomeness can’t be contained. A job with a dedicated Free Software company whose entire staff roster, top to bottom, is filled with the most talented, smart, and generally awesome people you could hope to work with. Such a job would be a fevered dream, the mere ramblings of a madman. Yet, somehow, for the second time running, I find myself in an enviable job, working exclusively on Free Software.

Being able to show off root access to a box with 256 cores and a tibibyte of RAM is pretty cool. But you know what’s even cooler? A job where I never need to worry about openSUSE 10.1 administration ever again. A job where several of my colleagues are fellow Debian Developers, with all the prestige and knowledge that comes with such a title. And somehow, by rolling proverbial twenties, I find myself in that position.

I am very, VERY proud to say that from the start of January, I’ll be joining Collabora Ltd as their new Systems Manager.

Mono mythbusting, September 2010 edition

There are corners of the Internest where foolish people congregate, and invent stories. These foolish stories are then read as gospel by trusting people, and reposted, until the original made-up source is concealed from view. As an attempt to stem this flow of disinformation, here are some commonly held – but incorrect – beliefs about the Mono framework, and an explanation of the reality of the situation, as far as I understand it.

The next Mono version is co-developed with Microsoft

There is a grain of truth behind this one, but it’s a gross mischaracterisation. Mono 2.8, when it ships, will bundle, for convenience, a number of Free Software libraries, which are released by Microsoft under a license considered Free Software by the Free Software Foundation, the Ms-PL. These are:

  • System.Web.Mvc and System.Web.Mvc2: ASP.NET MVC, a library for writing ASP.NET web pages with a model-view-controller design, similar to Rails for Ruby. This is not news – System.Web.Mvc has been bundled in Mono since Mono 2.4.2 (June 25th 2009). System.Web.Mvc2 has been bundled in Mono since Mono 2.6.7 (July 14th 2010).
  • System.Numerics: Mono re-uses Microsoft’s implementation of BigInteger.cs from the Dynamic Language Runtime (see below). This is indeed new to Mono 2.8, as it is part of .NET 4.0 (Mono 2.8 targets .NET 4.0 compatibility by default).
  • System.Data.Services.Client: The OData SDK client library. This is indeed new to Mono 2.8.
  • System.ComponentModel.Composition: The Managed Extensibility Framework, a library for writing and using plugins. This is similar in scope to the existing Mono.Addins project. This is indeed new to Mono 2.8, although it was added to Mono Trunk in 2009.
  • System.Web.Extensions: Microsoft Ajax, a library for using Ajax inside ASP.NET projects. This is not news – MicrosoftAjaxLibrary has been bundled in Mono since Mono 1.2.6 (11th December 2007).
  • Microsoft.Scripting.Core and Microsoft.Dynamic: The Dynamic Language Runtime is a framework permitting implementation of dynamic languages (such as Python or Ruby) on top of the core .NET runtime. It is used for IronPython and IronRuby, amongst others. The DLR has very recently changed license from Ms-PL to Apache 2.0, but the version bundled in Mono is still under the older license. This is not news – the DLR has been bundled in Mono since Mono 2.6 (14th December 2009).

So, to summarise, there are five Free Software libraries written by Microsoft under the Ms-PL included in Mono 2.8 – but only two of those five are new, and none of them were “co-developed” in any meaningful sense.

Mono development is dead

There have been reports that Mono development has ended, on the basis that no commits have been made to Novell’s Subversion server for a few weeks. However, these reports miss one minor detail – Mono has moved to Github.com. There were 35 commits from 9 different people to the main mono.git repository (of dozens of repositories under the main Mono project) in the last 2 days, at time of writing – far from dead.

Mono lacks features found in Microsoft.NET

Mono lacks libraries found in Microsoft.NET, such as the Windows Presentation Framework GUI toolkit. In terms of features, i.e. things implemented at a compiler or runtime level, Mono is typically more advanced. This is helped in no small part by Mono’s Free Software development model, allowing experimentation and “what if” changes to the core runtime which a sluggish corporate behemoth like Microsoft cannot accommodate.

To give three real-world examples, Mono allows embedding of its compiler as a service, and provides a REPL shell – this is a planned feature for .NET 5.0, but has been available for years in Mono; Mono.Simd provides a number of data structures which will run on any version of Mono or Microsoft.NET, but will use optimized CPU extensions like SSE when run on a sufficiently new version of Mono, on an appropriate architecture – as far as I’m aware, there is nothing like this available or planned for Microsoft.NET. Mono is able to produce fully compiled, static executables which do not need to JIT anything at runtime – this is used for iPhone compilation, for example, where JITters are not permitted. There is no comparable feature in Microsoft.NET.

Clearly, Microsoft.NET can only be thought of as more featureful if one defines “features” in terms of “does it have lots of libraries?” – in terms of functionality, Mono is ahead.

Mono can “sneak onto” your system without your knowledge

If you don’t have the “mono-runtime” package installed, you can’t run Mono apps. It is possible to install some Mono apps alongside the awful-yet-popular “mononono” equivs package, since the popular equivs script fails to place Conflicts on the correct packages (F-Spot will be blocked, Tomboy will not). No package in Debian or Ubuntu embeds its own copy of the Mono runtime, and we have no plans to make any changes to packaging which would allow execution of any C# application without mono-runtime installed. If one is using a different OS, then things may be different – e.g. The Sims 3 for Mac & PC uses embedded Mono, which you wouldn’t know about without looking.

Canonical are pursuing a pro-Mono agenda, and are responsible for it being “pushed” in Debian

Mono development has been happening in Debian for longer than Canonical has existed – the first upload was made in April 2002. Ubuntu is made primarily from software already available in Debian deemed of sufficient quality, and when F-Spot and Tomboy became parts of the default Ubuntu desktop system in 2006, both pieces of software were already available in Debian and deemed of sufficient quality. Nobody working on Mono in Debian is paid by Canonical… actually, that’s not entirely true, three packages related to accessibility are officially maintained by someone who was hired by Canonical after doing the initial packaging work when he worked for Novell. But the Mono runtime itself, Canonical have no influence over its direction in Debian. As for a “pro-Mono agenda”, they’ve always taken an extremely pragmatic approach to language choice, never showing any real preference for one language or another when it comes to app selection. They don’t exhibit any overt anti-Mono policies, which is not the same thing. The names of people contributing to Mono in Debian are not secret – check the pkg-mono team page on Alioth.

The System.Windows.Forms namespace is protected by Microsoft patents

The truth is, nobody knows for sure if SWF, or any other part of Mono, or any other framework such as Vala or Python, is covered by Microsoft patents. The way the US patent system is contrived, it is actively dangerous to check whether something contains any patents when you write it, as you are liable for triple damages should it later emerge that there WAS a patent, even if your searching missed the fact. You cannot patent an API or namespace – only a specific implementation of a software concept, in those countries where software patents are permitted. There has never been any evidence shown that Mono’s implementation of SWF, or indeed any part of Mono, infringes any Microsoft-held patents, because if that were the case, then the code would be rewritten to avoid the issue – much like the approach taken by Linux kernel developers when a patent becomes apparent.

The belief within the Mono community is that the core parts of Mono as defined in ECMA334/335 are safe (they are covered by the Microsoft Community Promise patent grant); any of the Ms-PL libraries mentioned above is definitely safe (Ms-PL includes an explicit patent grant); and the rest of the package is likely safe too (on the basis that it is a named component of the Open Innovation Network’s list of protected software – and on the basis that there’s unlikely to be anything patentable in one of many implementations of basic ideas like database connectors). Nobody knows for sure, because that’s how the system works. But, again, nobody knows for sure that Microsoft patents don’t apply to other frameworks such as Python – there is simply a belief and an assumption that they do not.

MonoDevelop contributors removed GPL code from MonoDevelop, in an attack on the GPL

This is somewhat disingenuous, given MonoDevelop is LGPL.

The MonoDevelop team excised the remaining GPL code (and there wasn’t much of it) in order to grant greater Freedom to developers. Previously, the entire MonoDevelop IDE was a GPL combination, meaning any add-ins for the IDE also needed to be GPL, regardless of developer choice. Now, any developer can write an add-in for MonoDevelop, using the license of their choice, whether another Free license like the Mozilla Public License, or a proprietary closed-source add-in. They are still welcome to produce GPL add-ins, if they want to, as well.

Mono won’t run random Microsoft.NET apps anyway, so isn’t really cross-platform

Actually, this one is often true. When developers write apps for Windows primarily, they rarely take the time to think “is this the correct way to do it?” and will often plough on with an assumption about the Windows way of doing things. It might be simple things like filesystem assumptions (assuming a case-insensitive filesystem, or assuming a backslash is used to separate directories, not a forward slash). It might be more involved, such as using P/Invokes into Windows-specific C libraries, when a more cross-platform alternative is possible. So, often, random applications for Microsoft.NET won’t run on Mono. The reverse is also true – F-Spot or GNOME Do are fairly heavily tied to Linux (or to UNIX-like OSes with X11, at any rate), through the libraries they invoke being fairly platform-specific. You can write platform-specific Java, with one quick piece of JNI, too.

It should be noted, however, that Mono makes the chance of .NET applications being ported to Linux (and/or Mac) much more likely, since even in the worst case scenario, a company only needs to fix a portion of their source to make it cross-platform. The Mono team have a tool called MoMA, which will scan an application and its libraries, and give you detailed reports on the app’s portability. This info is used at both ends – by app vendors who want to become more portable, and by the Mono team who want to fill in the most frequently encountered blanks.

And, it should be stressed, writing cross-platform apps is entirely possible if one desires it – e.g. the IRC client Smuxi is pure cross-platform C#, and the executables compiled on Mono on Linux will run fine on Microsoft.NET on Windows. Portability in this direction is important too – consider how many people have been introduced to Free Software thanks to availability of Free apps on Windows like OpenOffice.org, Firefox, Pidgin or GIMP. You can download Tomboy for Windows, and work is ongoing on fixing Banshee portability issues (which are mostly caused by gStreamer).

Mono on Android is a terrible idea which will be super slow

There are two efforts to enable developers to write Android applications with Mono – a paid proprietary product from Novell called MonoDroid, and an untitled porting effort by big-name Android hacker Koushik Dutta. I have no insight into MonoDroid since it hasn’t been released yet, but Koush did some benchmarks of his work which exhibited some remarkable figures compared to Dalvik (and even compared to Sun Java for ARM). Those numbers haven’t been updated to reflect the Froyo Dalvik JITter, but Mono on Android is still very exciting from a performance perspective.

Mono isn’t really Free Software

The source code is all available under Free Software licenses. So, um, yes it is.

We don’t need Mono because we have $LANG

By the same logic, we don’t need $LANG because we have Mono. By all means, use the language of your choice – other developers will use the language of their choice too. If you want to use Vala or Python or Java, then by all means, go ahead. It doesn’t mean there’s no room for more languages, better suited to other usage patterns. Haskell is great for some types of development, so is Fortran, and so is C#.

You might not need Mono because of $LANG, but there are others in the world with different needs.

Mono apps are all slow, and crash your computer, and stuff

No userland app can crash your Linux system, unless there’s a bug in the kernel, or you have some severe problems with your hardware. If you’ve ever observed a crash as a result of running a Mono app, then it’s really coincidence that Mono is tickling whichever part of your system is busted. As for slow… startup time may well be slower than for apps written in C or Vala. There’s a delay due to the JITter needing to compile all the libraries used by the application (we may AOT the most common libraries in a future Mono package version, at upstream’s recommendation). Once an app is running, it should be fast compared to a Python app, and memory-light compared to a Java app. The new garbage collector in Mono 2.8 should also offer significant improvements to performance, especially under heavy workloads.

Ubuntu’s default GTK+ themes require Mono

This is my favourite recent nonsense to emerge from the Internest. There are reports – mostly restricted to IRC and blog comments, that (paraphrasing here) “removing Mono removes the Ubuntu themes”. Here’s the reality: in Ubuntu 10.04, a new visual style was implemented throughout the distro. As part of this, small icons (e.g. notification area icons) were set to be black-and-white by default, and colourised when attention is needed (e.g. the power-off icon turns red when a reboot is needed, the messaging indicator turns green when there’s a new message). All of these new monochrome icons are in a package named “ubuntu-mono”. Removing the ubuntu-mono icon package will also remove the new Ubuntu GTK+ themes, in the “light-themes” package. So there’s your explanation: the themes have a dependence on some monochrome icons, not on the Mono framework.

directhex-grub-themes 00000010 release announcement.

I’ve just made a new release of my GRUB2 gfxmenu themes. This time, there’s an Ubuntu Lucid theme. It looks like this:

Download it from here as always.

MonoDevelop 2.4 available now

I’ve finished uploading the latest version of the cross-platform MonoDevelop IDE to Debian Experimental. MonoDevelop is a full-blown IDE for working on software written in C#, Visual Basic.NET, Python, Vala, Java (via IKVM.NET), C, C++, and Boo. It also integrates support for debugging (both of C-based apps via GDB, and Mono-based apps via MDB or the new Soft Debugger), GUI design of C# apps, version control via Subversion, database querying, unit testing, and more.

Oh, and for good luck, I’ve also uploaded it to badgerports.org (which should now display okay on smaller displays), for use with Ubuntu 10.04, where support for authoring with Moonlight is included. It’ll be in the main Ubuntu 10.10 repository at some point in the future, also with Moonlight support.

Enjoy.

badgerports/lucid now open for business

For those of you who like new shiny toys, there are now packages with version 2.6.3 of the Mono Framework available for your local friendly Ubuntu 10.04 system. Visit badgerports.org using your advanced web browser technology for more info.

I know monodevelop-debugger-mdb is busted – it’s temporary (until this evening). Or you can install this package manually as a workaround until then. There’s still no support re-enabled in Monodevelop in Lucid for Mono 2.6’s Soft Debugger – this will happen at a later date, once I decide on how to do it.

Election 2010 is over – but what did it mean?

It took a while, but the 2010 General Election is now more or less over, and a victor crowned. David Cameron of the Conservative party has been given the job of Prime Minister by Queen Lizzie, at the head of a Conservative/Liberal Democrat coalition government. And it seems a lot of people are a bit miffed about this.

If you look around, there are a lot of messages saying things like “I voted Lib Dem to keep the Tories out – never again”. Clearly, some people didn’t understand what they were voting for, so I’m going to look back a bit at this election, and explain why – for now – we should wait and see what happens, rather than screaming blue murder.

The result and the choices

Nobody won the election – not the Conservatives, not Labour, not the Liberal Democrats, nobody. Our electoral system in the UK assumes the election of an undefeatable majority, which is why both Labour and the Tories spent so much time warning of the end of the world if a majority was not reached. In the absence of a clear majority, there are three possible outcomes – a coalition between multiple parties (traditionally seen by the public and the media as weak and unstable); a minority government which could be toppled by a single vote of no confidence (traditionally seen by the public and the media as weak and unstable); or going back to another General Election to see if a do-over would result in a majority.

So, in 2010, with the results we had, there were a number of possible options:

  • A Conservative-Liberal Democrat coalition (363 seats, majority government)
  • A Labour-Liberal Democrat-Scottish National Party-Plaid Cymru-Social Democratic & Labour Party (or similar) coalition (327 or so seats, majority government) – the so-called “losers’ rainbow”
  • A Labour-Liberal Democrat minority coalition (315 seats, minority government)
  • A Conservative minority government (306 seats, minority government)
  • A new General Election

Now, those are in order of number of seats, but not necessarily order of stability. But those were the choices we had. I don’t think anyone disputes that.

Vote Clegg, Get Brown

So, under the laws of this country, the first right to form a government when there’s no majority goes to the incumbent, which means Gordon Brown. People who were complaining about Gordon “squatting” at 10 Downing Street seem not to understand the law – it was the correct place for him to be, up until he either successfully formed a government, or failed to form a government and resigned.

So, from the numbers above, you can see that either the best Gordon would achieve would be a minority *slightly* larger than the Conservatives – something easily overturned if the Conservatives and any of the minor nationalist parties were to gang up – or the rainbow, which would be too unstable to last a week.

With the numbers the electorate came up with, there was never a feasible Lib-Lab option The pure Lib-Lab coalition would have been toppled trivially – and the rainbow coalition, fueled only by anti-Tory hate, would have lasted as well as any other political regime based purely on spite (i.e. it wouldn’t).

Vote Clegg, Get Cameron

So, how about the other options – the Liberal/Conservative alliance, or the Conservative minority? Well, as the clear least-losery party of the election (given nobody deserves the title “winner”), they had the most “right” to be in charge, like it or not. This is borne out by the number of seats the current system gives them – and the subsequent options it would provide (including the near-viability of a Conservative-only government). Whether Labour like it or not, it’s not people voting for the Liberal Democrats (who only got a 1% increase in vote share) who lead to the large number of Conservative seats – it’s the droves of people who abandoned Labour.

During and after the campaign, Nick Clegg said that in the event of a non-majority, then his party would speak first and foremost to the party which did best – which in this case was the Conservatives.

Vote Clegg, Get Clegg

Here’s the thing. There seem to be a lot of people who voted for the Liberal Democrats in the belief that it’d be a vote for “not Tories”. These people shouldn’t have voted for the Lib Dems, because clearly they’re against the main Lib Dem policy of vote reform. Vote reform in any form would increase the likelihood of hung parliaments – which means an increase in the number of coalitions and deals. A vote for the Liberal Democrats is a vote for coalitions and deals. And no, that doesn’t mean coalitions of “anyone but Tories”, that means any coalition or deal which helps push the individual parties’ manifestos with a minimum of compromise – which sometimes might mean the Conservatives, and sometimes mean Labour and sometimes might mean SNP and sometimes mean DUP and so on. Not only that, but electoral reform would help the small parties too – full STV, the preferred system as far as the Lib Dems are concerned, might well give commons seats to UKIP or even the BNP, as a “fair” representation of their voters (over a million votes between them).

A vote for the Liberal Democrats has resulted in the Conservatives dropping some of their policies entirely (such as the inheritance tax changes).

A vote for the Liberal Democrats has resulted in the Conservatives adopting some Liberal Democrat policies (such as the move to a £10,000 income tax free band).

A vote for the Liberal Democrats has resulted in the Conservatives going against their own future chances at power, and secured movement on vote reform (a first step system called AV where the winner is the least hated candidate).

And, whilst the specifics of the deal haven’t come out yet, we can assume that a vote for the Liberal Democrats has also added the farcical Digital Economy act to the Tories’ “Great Repeal Bill”, a laundry list of Labour laws that the Tories want stripped from the books.

A seventh of the coalition is Liberal Democrat. Five members of the new cabinet, including the Deputy Prime Minister Nick Clegg, are Liberal Democrats (though only Clegg and Danny Alexander as Scottish Secretary have been announced so far).

Vote Clegg, Get…

So, here’s the thing to take away from all this: if a Conservative-Liberal Democrat coalition were the same thing as a Conservative majority government, then there wouldn’t have been any need for five days of negotiation. If a Conservative-Liberal Democrat coalition were the same thing as a Conservative majority government, then there’d have been no change in the income tax threshold – but there’d have been a change in inheritance tax. The Lib Dems will keep the Tories honest, and achieve more of their manifesto than they’ve ever been able to before.

My advice to anyone stewing that they voted for a “coalitions are good” party believing them to be an “anti-Tory party” is: wait and see.

It’s bloo!

For the first time in 6 years, my personal site has gotten a makeover.

In 2004, pretty much directly after graduating, I felt I needed a presence online which wasn’t defined by my education – especially since my old ecs.soton.ac.uk address was gone, and using the alumni zepler.net domain seemed like a cop-out. I spent a few days pondering a nice, new, unique name for my site, equal parts enigma and stupid, and settled on APEBOX.NET. And in order to flex my newly graduated programmer muscles, I spent time creating a design from scratch, on top of a very simple Java Server Pages platform of my own design.

The observant amongst you may have noticed a discrepancy in the TLD, and you’d be right – I had some disputes with my web host over the topic of “blithering incompetence”, and ended up jettisoning the entire APEBOX.NET domain (which it appears had been registered in someone else’s name) and moved the whole shebang to the only slightly different APEBOX.ORG, a mere 6 months after starting up. With the change of domain and change of webhost, I found myself unable to find an affordable JSP host, so ported the whole effort to PHP instead.

Around September 2007, I made an executive decision that running my own publishing platform was silly – that I was relying on security by obscurity, and that needing to edit text files via SSH was an annoyance for posting new material. Subsequently, I settled on the much-maligned WordPress platform as a new way to run things, transplanting all the existing content into WordPress posts and pages, and recreating the original design as pixel-perfect as I could manage moving from <TABLE> and HTML 4.01, into CSS and XHTML 1.0, and growing fancy-pants things like comments boxes in the process.

Now, jump forward again to 2010, and I’ve run out of scope for the site’s old “grey on brown” style. The last 2.5 years have really been using WordPress in ways it wasn’t designed for – and attempting to shoehorn my 2004 approach into a modern web. This is especially visible with the old “RANTBOX” and “PENGUINBOX” links, which provided an un-dated list of blog posts, in an effort to mimic the old “which .blog files are in this directory” approach – I found myself avoiding blogging about other topics of interest such as politics or games, purely because I could see neither how to shoehorn them into an existing category, nor how to extend the list of categories without making compromises in my never-to-be-questioned new-graduate aesthetic.

So here we go, a new post in a new category, something which I would never have gotten away with under the constraints of the old “this is a site not a blog” blog. The theme, for the curious, is a wonderful happy-feeling creation called Monkey Island, which I’ve mildly tweaked to accommodate the width of images in existing blog posts.

A dull post on a topic nobody gives a shit about – and it feels great!

Don’t Vote

Don’t vote if you support war in Iraq and Afghanistan.

Don’t vote if you support tax evasion by billionaires.

Don’t vote if you support ID cards.

Don’t vote if you support fox hunting.

Don’t vote if you support 90 day detention without charge.

Don’t vote if you support disconnection from the Internet on the basis of accusation.

Don’t vote if you support tax rises and/or cuts to public services.

You get the idea.

The way democracy works in the UK, the election is decided by the biggest voting bloc – the non-voters. Non-voters who elect not to vote are not, in fact, failing to vote – they are casting a vote of “I’m with Stupid”, a vote of “whatever that guy says” – and they are casting that vote loudly. If you decide not to exercise your right to vote, you are directly supporting the minority decision to pick the party that wins – and your vote of confidence in their ability to vote on your behalf is a ringing endorsement of whatever comes next.

The usual complaint from the non-voters is that their vote doesn’t count – that one vote doesn’t matter, that there’s no material difference between the candidates, and so on. However, this is an entirely self-fulfilling prophecy. To demonstrate how wrong these people are, let’s have some fun with maths!

The population of the UK is about 62 million. Of those, at the last General Election, about 44 million were eligible to vote. Under 27 million people DID vote – the rest, about 17.5 million, did not. That’s 17.5 million “my vote doesn’t count for anything” non-voters. How much influence could they have wielded? Well, Labour’s total popular vote was 9.5 million. If one in twenty non-voters had voted Conservative, then the Conservatives would have won. If one in five had voted Liberal Democrat, then the Liberal Democrats would have won. If five in nine had voted Official Monster Raving Loony Party, then OMRLP would have won.

Clearly my numbers are a gross over-simplification, because that’s not how our voting system works – but it goes to show just how powerful the “I’m with Stupid” voting bloc is, and how much influence they could wield if they so chose. If you feel all MPs are the same, then stand for election yourself (there’s a £500 fee, refundable on 5% of votes received). It really doesn’t take many people voting together to overturn even the safest seat – it requires only a removal of apathy by the voters who decide the elections by not casting a vote. And surely, in a population of 62 million, we can find 640 or so individuals who can serve in public office WITHOUT being a corrupt git? Can we really not scrape together 0.001% of the population who are worthy of support?

Oh, and a spoiled ballot is not a vote for “none of the above”, it’s a non-vote. If you want to mix things up, then cast a vote for a third party – even cast it for a joke candidate. Because there really are enough people out there that they could change the landscape of politics completely. Convince just one out of five non-voting friends to vote Lib Dem, for example, and UK politics is changed forever.

So in advance of the voter registration deadline next week, and the General Election in May, think about what matters or doesn’t matter to you. And remember, if you really support the 2-party duopoly, then don’t vote.

Introducing Larval Editor

In my last post, about GRUB2 theming, there were a few people who were unhappy at the perceived difficulty of creating GRUB2 themes, largely based on the lack of documentation. And to be honest, those people are right – if the documentation were complete & correct when I started, then I wouldn’t have ended up bumping into all the bugs I did. So, to help on that front – and to help kick-start GRUB2 theming in general, I’m announcing Larval. More GRUB2 themes means more awesome-looking systems in the wild. Hopefully the GRUB2 upstream will embrace it as a project to help raise the profile and potential of GRUB2.

It didn’t take me long to realise the most obvious way to develop such an editor: GRUB2’s canvas-based layout system has an awful lot in common with XAML, so the obvious choice was to develop using Silverlight (or, more specifically, Gtk.Moonlight). Larval’s internal theme format is XAML files, which are then exported to (and imported from) GRUB2’s simple text based files.

The biggest piece of work, to be honest, is the Managed implementation of a PF2 font reader/writer, so you can design a theme using the regular TrueType fonts of your choice, then have them automatically ported to PF2 format as required.

I look forward to plenty of community input on Larval, once it reaches a point where I’m sufficiently pleased with my (Ms-PL licensed) code to share it with the world. Until then, you’ll have to make do with the above screenshot!

[Edit: If it wasn't obvious, this was mostly an April Fool. Mostly. I DID knock together a Gtk.Moonlight UI, and I *DO* think it's a good idea. But there's no code, and no real desire to write the required amount of cruft]