Reddit emoticon text expander Safari extension

Since I’ve been spending more time on reddit I’ve been somewhat annoyed at how some subreddits hide conversations inside emoticon text, mostly because it takes so long to read with all the hovering.

Since Google didn’t bring up any leads, and the Reddit Enhancement Suite didn’t help, I created my own! Though when people find this they’ll probably tell me all about the much better solutions people have already made.

The code was inspired by, but not based on, the (Super Reddit Alt-Text Display)[] userscript.

Go from this


to this!


So here is the aptly named titletext.safariextz



There’s been a seal hanging around the Wellington waterfront, and I managed to get this shot of the contented seal face




So I’ve been moving in to hardware hacking rather than software. I’ve been working in IT software for 8 years now, so something new is fun! Plus if you get hardware wrong you definitely know about it.

First thing I noticed was lighting adequate for software work is useless for tiny hardware work, so I set about building a custom lamp for it.

So, I started with a cheap clip-on desk lamp, and with some components from eBay and a LED pattern laser cut by Ponoko I set to work (pics in full post)


CNC, the DIY way

A couple of months ago I decided to do a little DIY air conditioning, more for fun designing circuits and programming microcontrollers. One thing led to another, and now I’m making a mini CNC mill out of spare printer and scanner parts. This will probably take most of the year to complete, but the planning is fun!


Chrome dropping h.264, my take.

I’m sure everyone knows that Chrome is dropping h.264 video support for WebM. They claim it will enable “open innovation”. I have a few problems with this.

Firstly, VP8 is probably patented (though it may not be), the algorithms are very similar to the h.264 algorithms, so the MPEG LA may have a claim. Also Google haven’t offered any form of indemnification or analysis to show the patents aren’t infringed. In many cases we’ve seen companies wait for popularity then sue those who can’t defend, one reason GNU doesn’t use GIF.

Secondly, VP8 may be the future, but h.264 is here now. While looking to the future is all well and good, it shouldn’t be at the expense of current usability unless the two are mutually exclusive. The ‘for the future’ argument also falls down with quality comparisons, VP8 and h.264 are of comparable quality, with VP8 falling short at the moment, though that may pick up with more development. VP8 is not a next generation codec, it’s current generation. Arguably VP8 has better peak signal-to-noise ratio (PSNR), but PSNR doesn’t reflect visual quality.

I believe that Google can push WebM in more effective ways. They are working on VP8 hardware acceleration for mobile devices and presumably re-encoding a lot of YouTube content to VP8. I assume they’re also working on WebM support in Flash Player, as once that’s complete non-WebM browsers will have a fallback. All that’s happened in the short term is Chrome users will see h.264 content in Flash Player, rather than in native video, which gives awful playback on Linux. Given Firefox’s performance it seems I’ll be stuck with proprietary browsers if I want performant video playback. Thanks Google.


Comic Sans Be Gone does Arial

I’ve pushed a new update to Comic Sans Be Gone. Apart from fixing a minor Javascript issue I’ve added the ability to replace Arial, and to change the replacement font.

Comic Sans Be Gone Settings screenshot

If you have Comic Sans Be Gone installed the check your extensions updates, else grab it


Using ApplicationSettings with F#

While F# is a first-class .NET 4 citizen it’s not really a first-class Visual Studio citizen, even in 2010. A lot of the application setup tools we have for C# aren’t present in F#.

I was recently making a quick and dirty tool in F# that needed some basic user settings, so I went with the ApplicationSettings infrastructure in .NET, as it’s the easiest way to implement this. In C# this is easy, the GUI designer writes the code for you. In F# you have to do it yourself. Microsoft’s documentation is in C#, so there’s some adaptation to do.

You’ll need a type that inherits ApplicationSettingsBase class from System.Configuration, and then add some property members with the attribute UserScopedSettingAttribute(). You can also use ApplicationScopedSettingAttribute() for application-level settings, but these require editing the XML in your App.Config, something that I’m not that familiar with yet.

There’s a little boilerplate for each setting, but other than that it’s a breeze.

Here’s a sample settings class:

open System.Configuration
type MySettings() = 
  inherit ApplicationSettingsBase()
  member this.UserSetting
    with get() = this.Item("UserSetting") :?> string
    and set(value : string) = this.Item("UserSetting") <- value

  member this.AppSetting
    with get() = this.Item("AppSetting") :?> string


EMPing released!

For a fair few months I’ve been working on a nifty app to do notifications for PowerShop products and power balances.

It’s finally released! I present EMPing.

No, it’s not free. Servers aren’t free either and I have to run one to do notifications.

If only I had a million-dollar game idea.


Comic Sans Be Gone update

Just a minor update, Comic Sans Be Gone now works on inline styles and FONT tags. Thanks to goblindegook for that.

For Chrome users goblindegook’s Allvetica replaces Arial and optionally Comic Sans with Helvetica.


Comic Sans? Shoo!

We all love to hate Comic Sans, so I whipped up a little Safari extension to remove it from any page and replace it with a much more pleasing font.

I was concerned that changing the font would mess up designs, but then I remembered that they were using comic sans, so it wasn’t a real concern.

However, it will slow down all web pages, as it iterates all stylesheet rules. If you notice your browser going slow this is probably why. Caveat Emptor.

So with that, I present Comic Sans Be Gone.

The latest information will be on the product page, and I’ve made an update manifest for it.