that is all…

01. March 2008 General 3 Comments

What he said

Hiring at LiDL

18. February 2008 General 1 Comment

Havoc reports that his new company, LiTL, are hiring.

LiDL are also hiring.

Never thought you’d write a browser, cos HTML is so passé

04. February 2008 General 3 Comments

I wrote my first web browser in 95 on the Amiga. The fact that I didn’t have an internet connection didn’t stop me, but really it was a bad HTML viewer. Later in 1998 I revisited the idea for my introduction to C course and wrote it again, using raw Xlib. Then Mozilla was released as open source and really there wasn’t much need for me to do more.

But the world is a funny place and history often ends up repeating itself, so without further ado sit back watch this short movie

Yup, webkit inside clutter. Completely proof of concept at the moment hacked up using the GTK backend. Thanks to Alp, Pippin and everybody else everywhere…

When you look in the mirror what do you see?

02. January 2008 General 0 Comments

A quick and fun game of compare and contrast to bring in the new year. Its so easy, the whole family can play…

Bands I Remember Seeing in 2007

27. December 2007 General 5 Comments

Aphex Twin
Portishead
Fuck Buttons
Kling Klang
Julian Cope
Thurston Moore
Malcolm Middleton
The Horrors
Rosy Red Rash
The Heads
Malakai
GZA/Genius
Madlib
Sunn o)))
Francioz Breut
Glenn Branca
Fuzz Against Junk
Sparklehorse
Oneida
OM
BORIS
Earth
Crippled Black Phoenix (x2)
Selah
Peter Broder
Efterklang
Cashier No9
Caribou
Cruz (x3)
Out Of Touch
29’s Fell Shadow
65daysofstatic (x4)
And So I Watch You From Afar (x5)
La Faro
Iron & Wine
Splitscreen
Angelfall
Fighting With Wire
The Winding Stair
The Benjamins
Kitty and the Can Openers
The Jazz Committee
The Paul Hartnoll Experience
Mixmaster Mike
Manic Street Preachers
Bjork
Modest Mouse
Slint
Alexander Tucker (x2)
Explosions In The Sky
Oppenheimer
LCD Soundsystem
Beastie Boys
The Fall
The Chemical Brothers
Polyphonic Spree
Sonic Youth
The Aliens
Final Fantasy
Jarvis Cocker
!!!
Shychild
The Little Ones
Soul II Soul
Dirty 3 (x2)
A Silver Mount Zion (x2)
Cat Power
The Drones
Yann Tiersen
Nina Nastasia
Einstürzende Neubauten
Bill Callahan
Joanna Newsom
White Magic
Ian Wadley
Art of Fighting
Brokeback
Nick Cave
Grinderman
Low (x2)
Devastations
Magnolia Electric Co
Papa M
The Only Ones
Shannon Wright
Gas Giants
Spiritualized Acoustic Mainline
Philip Glass
Yakuza (x2)
LITE
Tracer AMC (x3)
Cars In Walls
Boathouse
Amy McGarrigle
Ben Folds
Clem Snide
Parhelia
The Butterfly Explosion
Death Vessel
The Verve
Cathy Davey
The Elliots
Driving By Night
Pixie Saytar
Desert Hearts
Steer Clear
Killing April

(plus at least 2 others I remember seeing but not the names of)

I value my privacy

23. December 2007 General 8 Comments

I just noticed - these fuckers are recording the open source contributions I make. They’re even collecting the data and publishing it. Of course, its not *all* the contributions I make. This is an incomplete picture of my open source contributions. This is my data, they have no rights to do this. Its an invasion of my privacy!!!! Next they’ll be recording the things I say in my blog! This atrocity must stop before all our freedoms are stripped away from us!

And once that happens, the terrorists will have won!

All the colours

29. November 2007 General 1 Comment

Strangely productive in a random driveby patch way. Was choosing paints to decorate my house recently, and I loved the simple way to pick matching colours. Pick colour a - get the swatches for colour a and pick a colour that works with it. So I hacked that idea into the background colour selector.

Its filed as bug #500324. I’m bound to be leveling soon…

Like whores dancing for their trinkets

12. November 2007 General 13 Comments

Today I’m going to announce things. One thing has a screenshot, one thing does not. The thing without the screenshot is the important bit and the thing with the screenshot is simply to get peoples attention. I know how this marketing thing works.

Gypsy

I’ve been working on Gypsy for a while now and it is a GPS daemon. It uses Glib and D-Bus and handles Bluetooth and serial port GPS devices natively (ie you don’t have to use rfcomm to create a /dev entry for a bluetooth device before you run it). It has a website - http://folks.o-hand.com/iain/gypsy

The reasons I wrote it were because I was increasingly annoyed by gpsd’s shortcomings in many areas and I think I fixed them with Gypsy. A quick overview on how it works:

The gypsy-daemon process is started (currently at system boot, D-Bus 1.2 should solve that hopefully) and waits, doing nothing. Clients use D-Bus to tell gypsy-daemon to connect to a GPS device, and gypsy-daemon parses the NMEA sentences firing D-Bus signals as things change. The clients set up listeners for what ever signals they want and they *only* get woken up when that signal is fired. This means that clients which don’t care at all about the satellites changing do not have to listen for the satellite signal and they won’t get woken up every time the satellite changes (which is generally once every second). This technique allows Gypsy clients to use the minimum of power. Which is good for handheld devices…

Gypsy also comes with LibGypsy which is a nice wrapper library that contains GObjects that make using the D-Bus API really simple. There is also full API documentation and a tutorial.

Obviously at the moment Gypsy only supports basic NMEA commands, but is perfectly usable to get GPS data. There may be bugs here and there, and as there are a myriad myriad different GPS devices out there it’d be nice if people could test it and see if it works with them. If it doesn’t, it would be nice if you could put the NMEA log of the device in question on the bugtracker . The log can be got with the –nmea-log command line option when running gypsy-daemon. Thanks…

So, that was the bit I’m most excited about - Gypsy, but I know that people like screenshots and screenshots of GPS output on a terminal isn’t the most exciting thing to look at. Trust me, I know… To that end, and so that if any fools gets excited enough about the next part to pass the word around then my Gypsy stuff will get pulled along with it….Haahaa! A cunning plan I think you’ll agree…

Anyway, I’ve also been playing about with putting a compositing manager inside Metacity. I know this has been attempted before but the aim then was to put an all singing, all dancing, superduper effects overdrive 3D GL based compositor inside it. And it failed. But I don’t think this is the right approach anyway and most people I’ve spoken to and respect don’t want silly 3D spinning cubes or desktops that you can look down the side of your windows or fish, they just want translucent windows and drop shadows. I’ve been working on shoehorning xcompmgr into metacity. I figure that with enough force you can make anything stick together. And it seems to work.Well, for various defintions of works. There’s rendering glitches and silly things have shadows while sensible things that should have shadows dont, but its working well enough for me on both my desktops to use full time. Trying to get the core stable enough before adding all the finishing bits.

The code is in the subtly named iains-blingtastic-bucket-o-bling branch of metacity. The code is ugly, evil and a nasty hack at the moment (unlike Gypsy which is lovely code. You can test it if you want, but it will contain bugs, it will eat your data, it will shoot your cat, crash your car, drink all your beer and force your children to make clothes for GAP. (Gypsy on the other hand will not do any of that stuff at all…use it, it’s lovely)

The cost of code…

18. October 2007 General 4 Comments

Chris made a pretty map widget thing and threw down the gauntlet

I’m expecting a libjana-gtk/gypsy mash-up from a certain Mr. Burton (no pressure)

Given that Gypsy is my baby, I felt obligated to beat Ross to it :) And so I present

And a massive 87 line program to how how fun and easy it can be to find out your location and then draw it on a map.

#include <gtk/gtk.h>

#include <libjana-gtk/jana-gtk-world-map.h>

#include <gypsy/gypsy-control.h>
#include <gypsy/gypsy-device.h>
#include <gypsy/gypsy-position.h>

GypsyControl *control;
GypsyDevice *device;

static void
destroyed_cb (GtkWidget *window, gpointer data)
{
gypsy_device_stop (device);
g_object_unref (control);

    gtk_main_quit ();
}

static void
position_changed (GypsyPosition *position, GypsyPositionFields fields_set, int timestamp, double latitude, double longitude, double altitude, JanaGtkWorldMap *map)
{
if ((fields_set & GYPSY_POSITION_FIELDS_LATITUDE) &&
(fields_set & GYPSY_POSITION_FIELDS_LONGITUDE)) {
jana_gtk_world_map_add_mark (map, latitude, longitude);
}
}

int
main (int argc, char **argv)
{
GtkWidget *window, *map;
GypsyPosition *position;
GError *error = NULL;
char *path;

    gtk_init (&argc, &argv);

    if (argc < 2) {
g_print (”Usage: %s <device\n”, argv[0]);
return 1;
}

    control = gypsy_control_get_default ();
path = gypsy_control_create (control, argv[1], &error);
if (path == NULL) {
g_warning (”Error creating client for %s: %s”, argv[1], error->message);
g_error_free (error);
return 1;
}

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, “destroy”, G_CALLBACK (destroyed_cb), NULL);

    map = jana_gtk_world_map_new ();

    gtk_container_add (GTK_CONTAINER (window), map);
gtk_widget_show_all (window);

    device = gypsy_device_new (path);
position = gypsy_position_new (path);
g_signal_connect (position, “position-changed”, G_CALLBACK (position_changed), map);

    gypsy_device_start (device, &error);
if (error != NULL) {
g_warning (”Error starting %s: %s”, argv[1], error->message);
g_error_free (error);
return 1;
}

    gtk_main ();
return 0;
}

As you can see, its really not a lot of code. I also added 10 lines to libjana-gtk to draw the marker. Total time taken, about 40minutes, including testing, debugging and discussing a few bugs with Chris. So lets see what sloccount says about it:

Total Physical Source Lines of Code (SLOC) = 80
Development Effort Estimate, Person-Years (Person-Months) = 0.01 (0.17)
Schedule Estimate, Years (Months) = 0.11 (1.27)
Estimated Average Number of Developers (Effort/Schedule) = 0.13
Total Estimated Cost to Develop = $ 1,905

Hmm, we should have scheduled 1.27 months for it and I should have earned 2grand? (not including the code I added to libjana-gtk which would have increased the line count to 90)
Oh, whoops, almost forgot this:

Please credit this data as “generated by pulling numbers out of David A. Wheeler’s ass”

sloccount - for when you need to over estimate EVERYTHING.

A history lesson

15. October 2007 General 3 Comments

A few days ago, I too got an interesting email from a young chap

hi iain,

OMGLOL my name is iain and I am like, sooooo your biggest fan!!! Like, I totali love reading your blog and ur awesome KDE reviews and shit like that!!!1!!LOL that was sooo funni LOL ur awsum!!!! when I grow up (im 29 @ the moment) i want 2b just like u! how xactly did you get 2b sooooooooooo awesum, OMG i  hop u answer soon LOL!!!!!!!!!!!!!!

iain

It is an interesting question and one I think about a lot. How did I come to be so awesome? I’d encourage other bloggers to write about how awesome I am as well, then I can say I started the “how awesome is iain” meme.

But the long answer to iain’s very intelligent and interesting question is this:  I was born and I grew up and there is not a time in between then and now when I wasn’t totally awesome. They say that good leaders are not made, they’re born and that is the same for awesome people such as myself. I am, have always been, and will always be awesome and the sad answer is that no matter how hard you try, you won’t ever be as awesome as me. Maybe you should just buy me something to show your appreciation for all the awesomeness that I bring into this world. I think you should. Unless you’re french and like ManU, we don’t want another “incident
now do we?