Making AirClick USB Plugins

Airclickusb_medIt should be fairly easy for someone with programming experience to create their own “Plugins” to extend the AirClick. It runs on the Microsoft .NET Framework 2.0, which means you can write plugins in any .NET capable language. Just add a reference to the actual AirClick.exe file, define that you are using the “AirClick” namespace, then create a derived class from the AirClick’s “Plugin” class. As you will see there will be several virtual methods you will have to define. These include accessor methods for the plugin’s name, author, description, executable name, and version. (NOTE: The only one of these attributes used at the present is the name, which appears in the AirClick menu. The others are to insure compatibility with potential future updates.)

To “tell” the AirClick software which button presses you are interested in knowing about, add a call to the “AddButton” method for each button press in your class’s constructor. Button presses are defined by an instance of the “Button” class. Here is a quick rundown of a Button’s constructor parameters:

ID – a unique integer ID given to the button. This ID is passed back also a paramter in the “Notify” method to tell a plugin which one of his buttons has been pressed.

Key – the button on the AirClick remote you want to know about. Values can be back, forward, play, voldown, or volup.

Modifier – a modifer key that must be held down along with the “Key”. Values can be back, forward, play, voldown, volup, or none.

Time – the number of milliseconds the “Key” must be held down in order to trigger this button press.

OnRelease – true if button is triggerd when it is released, false if it is triggered on push.

Name – short description of this button, such as “Play” or “Next Chapter”. (Presently not used, just there for potential future updates.)

ShowInMenu – whether or not this button’s name should appear in a list of this plugin’s functionality. (Presently not used, just there for potential future updates.)

Finally, the last thing you have to do is define the “Notify” method. This method is called by the AirClick software when a desired button press is found, and the ID of the found button pressed is passed to it.

There are a few more classes built in to more easily accomodate the making of Plugins. Their is the OSD class for using the AirClick’s on-screen display. It can display various combinatinations of strings, a progress bar, and generic player graphics. The player graphics are represented by the “DisplayGraphic” enumeration. The “Volume” class can get or set the system’s master volume, and the “WinMessages” class can send several different kinds of Windows messages to a windows with the given caption or class name. The messages it presently supports sending are “WM_APPCOMMAND”, “WM_APP”, “WM_COMMAND”, “WM_VSCROLL”, “WM_HSCROLL, “WM_SYSCOMMAND”, and “WM_USER”.

Once, you have built the plugin, just change the extension from .dll to .acp and place it in the AirClick’s “Plugins” folder. Restart the AirClick software, and it should appear in the AirClick’s menu.

Elite IV is not Vapourware

In a recent CVG interview, David Braben talks about the next version of Elite. Confirmation that Elite IV (No better name exists publically yet) is not vapourware as some have been saying.

Obviously they’ve not been listening to David and the passion with which he speaks of a future Elite.

Elite will be Frontier’s next big next-gen game after the political thriller The Outsider ships. The Outsider is going to be a game that breaks a lot of new ground in gameplay and immersiveness, ideas and technology that is required to make Elite what Braben dreams it could be.

Also confirmed is that the next incarnation of Elite will be a single player game at first, with a small LAN based multiplayer element. Followed later, after more development and technical advances, by a proposed Massive Multiplayer Online version of the game. Something that a lot of Elite fans have been fantasising about for many years.

Hacking AirClick USB for Windows/PC

(updated below)

In the aftermath of changing to my new Cherry MX switched keyboard I have found myself missing the handy media buttons on the old membrane keyboard.

So I had a little google about (using google) and found the Griffin Technology AirClick USB. A handy little Human Interface Device, it has five buttons and a number of plugins that allow you to control various applications. Primarily I was interested in Winamp control, playing, pausing and changing tracks. I had a deeper look into it and one of the available plugins in Sean Wilson’s new version 2 software is a winamp plugin. Cool, so I bought one.

Works great. Until I went to change volume that is, it’s just too slow for my purposes.

In the release notes there is the following addition to the latest version mentioned:

Easier creation of additional Plugins using any .Net supporting language

Well fantastic, I can do that, perhaps I can write my own winamp plugin. Plenty of searching around their site later and there’s no help or info on doing any such thing. I emailed support and got back a plugin that used sendkeys to just send configurable keys to Windows. Not a lot of use if you happen to be typing at the time!

I found the developer of the Mac software and his blog. He’s posted ways to hack the Mac version, no go for PC though.

I then noticed that the .acp plugin files in AirClick’s plugin folder were just renamed .net 2.0 IL dlls so I emailed support again asking if there was any supporting source code for writing your own plugins.

While I was waiting for a response I had a quick fiddle with Lutz Roeder’s Reflector and Denis Bauer’s FileDisassembler plugin and generated a C# project from the winamp.acp plugin. It compiled with no trouble, so I renamed the .dll to .acp, dropped it in the pugins folder, restarted AirClick and everything worked. Fantastic. Now I can get on with hacking it.

A little bit of coding later and I’ve now got a volume control that smoothly accelerates from small changes to larger the longer you hold down a button.

Then the reply came back from support:

Unfortunately we do not have source code for the AirClick. This is info that doesn’t leave the doors of research and development.

Oh dear, really, well I’m screwed then.


So top marks to Mr.Wilson and his code, but the usual non-technical nounce of the average support department proves to be a barrier yet again. Great product on the other hand.

Updated Information

I decided it was worth trying to contact Griffin again, so I penned a very similar email to the last one. This time I got a direct response from Sean Wilson, the creator of the PC AirClick software.

I have not written a formal SDK or Visual Studio template for writing

AirClick plugins yet, but I do have a txt file I wrote up real quick

to send to people who are interested in writing their own. I will

attach it with this email.  – Sean Wilson

Great stuff! So here’s a copy of that file for all you plugin makers.

Making Plugins

And here’s my modified Winamp plugin.

USB Keyboards again.

Well I’ve got meself a decent mechanically switched keyboard, and frankly I really don’t know why I didn’t do it before. I’ve concluded that my recent problems with USB keyboards are just that they both had lower than average quality membranes. My new mechanical switch enabled Cherry MX 3000 is working wonders for my typing speed. I had found that I had to slow down too much with the old keyboard, now I’m back up to previous speeds, perhaps even a little faster.

Natural Language Search

Powerset ( looks interesting. At present the company is in “semi-stealth” mode. Gathering investment as well as developing their natural language search engine.

Powerset’s Barney Pell has someinteresting stuff to say on the topic.

Well worth a read, some interesting concepts with respect to the way that search engines work nowadays.

Search engines are keyword based and at their heart are really just boolean based searches against their index. They take your search term and stripout out what are known as stopwords leaving just the keywords. Stopwords are words such as a, about, from, of, for and the like, these would only complicate the results of a boolean search as they are such common words.

Pell and gang demonstrate that in some searches these words are acutally useful. For example, take these three search terms:

  • Books for children
  • Books about children
  • Books by children

When for, about and by are all stripped out we are only left with Books children, and the search engine cannot distiguish between the three quite different purposes of the queries.

Pell says that we are all searching with an impovourished, pidgin english at present, I for one would welcome a more natural approach at times. I’m sure like me, many of you have sometimes come across a particular search that never seems to get the results that you’re after, or at the most it takes a long time to get the right string of keywords and advanced search options. Imagine what searching is like for the less techinacally minded out there who don’t speak keywordese. NL searching, if it works and is marketted well to that larger group of people, could be very successful.

If though, when it launches, it doesn’t have a toolbar-esque plugin then I will find it very difficult to remember to use it. When I want something my mouse cursor always goes straight for my Google toolbar.

USB Keyboards

It is just me or are USB keyboards slow? Everyone that I have ever used has a little bit of trouble keeping up with my typing sometimes. Is this something that anyone else has experienced?

Perhaps it’s just poor membranes and the completely unpositive feel. That’s it I’m going to finally bite the bulllet and get a nice Cherry M8 mechanically switched keyboard.

There you go, ordered. Matter of fact my boss was kind enough to pay for it.

Cheers Brian!

PHP Wiki Software and Skinning

Having recently acquired some unix hosting I’ve been experimenting with various PHP/MySQL based applications. WordPress for example that this blog runs under, as well as Joomla for CMS and phpBB for forums.

Having been a long time user of ASP applications some of my experiences have been quite refreshing, especially with respect to ease of installation on shared space in some cases.

Now just the other day I decided I needed a Wiki for a new project. I’ve been using the driven FlexWiki for some time now and have been very happy with it’s ease of install and the small changes I usually want to make to look and feel. When it came to choosing a unix based option I immediately plumped for MediaWiki, it seemed an obvious choice being that it runs the most famous Wiki out there, WikiPedia.

Oh how wrong could I have been though. When it came to skinning it to get a look that suited my purpose, it became a complete nightmare. The skinning system is a complete disaster area and it requires more work than I have time for to get your head around it. Yes it can be done, as witnessed by the Mono-project website or the Mozilla Dev site, but it’s a complete bitch. The mixture and muddle of markup and PHP code is just simply unprofessional.

So I had a look around and after a while searching I came up with a beautifully easily skinnable Wiki software. PMWiki has a great philosophy behind it’s code base and a simple skinning system that is a joy to behold after wading through the nightmare depths of MediaWiki.

I shall enjoy designing a nice template later tonight.

Sigma SD14

Sigma’s new D-SLR the Foveon X3 powered SD14 is looking very nice. The teaser site has some very luscious photography on it, mostly portraiture, that has the look of well scanned transparencies rather than digital pics.


I must admit I find the whole Foveon sensor concept very appealing, yet I’m never likely to go the Sigma route now that I have a collection of EF mount lenses. Now if Sigma were able to build bodies with different mounts as they do with their excellent range of lenses then I expect you’d see many many more people thinking about upgrading to a Sigma body. Especially if the sample images from the SD14 are anything to go by.

Also announced at the same time though is the new Sigma DP1 compact digital camera. This a similar Foveon X3 sensor as the SD14 with the same 14 mega pixels. So if you’re looking for a compact and want to try out the whole Foveon lark then this seems the perfect route for those of us that can’t see ourselves switching to a different mount for our SLRs.


It has a prime lens equivalent to a 28mm. Looking t the pics it also has a large LCD screen, and manual controls. Looks promising.


4 digit door entry systems

Our office block is protected by a keypad. The entry code is 4 digits long and the pad has the numbers 0 to 9. Now I noticed the other day, and have discovered that this is quite common with these entry systems, that there is no kind of punishment for getting the number wrong. The pad just looks at the last 4 numbers you have typed.

So you can try numbers over and over at quite a high speed till you get the right four, with no delay enforced for getting anything wrong.

So I’m thinking, could you make a small device with 10 solenoids that tried every number in turn? How long would it take?

There’s 10,000 four digit combinations, or 40,000 keypresses, but as it only looks at the last four digits we can seriously shorten that.

For example if I type 012345 then I’ve just tested 0123, 1234 and 2345. I looked about a bit and found something called de Bruijn sequences. A de Bruijn sequence is the shortest sequence containing all possible words of a certain length.

So it turns out that the shortest sequence is 10,003 digits long. Googling about some more I discovered this site, which generates de Bruijn sequences for you.

Say for example the keypad can manage 10 digits a second then we need 1000 seconds to try every possible combination. That’s roughly 15 minutes. Not bad down from an hour but I’m sure it could be faster.

Now, the person who regularly resets the code on my building is obviously fond of history, as the codes are always famous dates.We have not, for example, ever had a code that didn’t start with “1”.

I expect many people come up with a year or a day/month combination when asked to generate a 4 digit code. I wonder how many people pin numbers start with 0, 1, 2 or 3? Given this is there a way to order the sequence to increase the probability of an earlier win?

Humans are rubbish at being random. If we concentrate on years then it would seem to make sense to check 19[0-9][0-9] first or just the first 2000. If we are thinking many people choose day/month combinations such as then we shoud check for [0-3][0-9][0-1][0-9] or for US month/day [0-1][0-9][0-3][0-9].

To test any of this we really need sample data to work on. I reckon we need a sampling of the kind of 4 digits humans would choose, that would be a good start. How to go about gathering that data though?

Symantec are Stupid

I’ve just wasted half an hour of my life working out why IMG tags are missing and have been stripped out of the HTML source on my directors laptop.

The key to it was some Javascript that had been injected.

Function SymError()

So if you see this it’s Norton Internet Security and it’s advert blocker at work, seems there’s a list of banned words for images. One of which is “banner”.

So there I am using a perfectly self descriptive image name of main.banner.jpg, which just happens to be an innocent header image spanning the page, and it’s gets wiped out by some lazy cunt at Symantec.

Seems many strings are just wripped out. Here’s a full list. Images of certain sizes are also stripped out as well.

Blocked Strings



Blocked image sizes


Quicktime standalone without iTunes download

I just reinstalled my machine recently and have not five minutes ago tried to run an mov file for the first time since.

Went to download Quicktime from Apple and it forces you to also download iTunes. Now iTunes isn’t evil I use it on Mac Mini, but if you do not want it or need it then why download it?

Found it here.


Now forwards you to: where you have a choice of with or without iTunes.

Refactoring and Renaming in Visual Studio 2005

Thank you Microsoft. I am finding the renaming feature in VS2005 so very very useful.

I just renamed a namespace in a class I’d just created for a new project, basically just adding a company name before the product name. The Rename feature changed all the other namespace declarations in the whole project seamlessly, the default form and program.cs file that had been created and even the default namespace in the project properties had been changed.


How to Use Microsoft Voice Command and Your Bluetooth Headset with Your SPVM5000/JasJar/HTC Univsal

Have you installed MS Voice Command and been annoyed you can’t use the button on your headset to trigger a voice command? Here’s how to fix it.

Install Voice Command to the default location.


  1. Fire up a registry editor


  5. Modify the string marked “path” from the default \Windows\SDDialer.exe to \Program Files\Voice Command\VoiceCMD.exe


It won’t activate for me if the handset is close, ok open in both portrait and landscape mode, so possible to leave in portrait and in the case.