marnanel: (Default)
Goodness, Joel on Software has branched out into coal mining. I think this will be a miner sensation.
marnanel: (Default)
I think I'd like a new challenge. If anyone out there could make good use of a creative C/GTK/C++/Qt/object Perl/Python hacker based in Philadelphia with the ability to work in the US and EU, they can find my resume/CV at


Feb. 20th, 2011 04:41 pm
marnanel: (Default)
A cat on a bed

Rio has been learning poems by Eleanor Farjeon and A. A. Milne, and reciting them to me. Impressively, when she makes mistakes they are starting not to affect meaning or metre. I am very proud of her.

The spring is beginning to arrive, and I'm feeling quite a lot better than I was. I'm reminded of the stories about how a hundred years ago kids would be sewn into their winter underwear in the autumn and cut out again in spring; leaving the winter behind feels like finally getting free of your winter underclothes must have felt. I was talking to Sumana earlier about my poem May and how I think of it this time of year, and how people seem to like its description of seasonal change, even though they perhaps often miss the extra meanings about Revelation 22.

My grandfather was buried on Friday. They put my sonnet into the order of service.

We found his medal collection: I thought you might like to see it.

I spent far too long yesterday hacking: something I love to do, and in a way it defines me, but if left to my own devices I would spend the whole day doing nothing else. That would be bad. Yesterday I started adapting the imgur integration to use the new API, and built part of a test harness I had been daydreaming about, and made a start on debianising some fonts I need, and played around with an idea I had for a LiveJournal/Dreamwidth to Atom adaptor which allows you to read friends-only posts in a desktop feed reader. (I call it ljferea. I may be the only person amused by this.) I also tried to explain things to someone who was creating a new programming language, and told the story of where Firinel's name comes from.

There's much more I'd like to write, but little time, and it's only a half-formed wish anyway.


Feb. 19th, 2011 01:50 am
marnanel: (Default)
I wanted to write a post about a happy memory to do with programming and networks.

Many years ago I used to help teach programming on a Scripture Union camp called Transformers. Our lab was at the top of a hill, with a large window looking down the grassy slope and facing a similar window in the building at the bottom. That building was the radio studio. The radio show broadcast all day over our wired ethernet network, and was played by a spare machine in every lab. After several hours of broadcast there was a lag of several seconds.

One day, someone requested YMCA by the Village People. When the song started in the programming lab, we looked down the hill to the studio. The radio crew were dancing, so naturally we stopped talking about recursion and started dancing too. This repeated itself on several following days, until people elsewhere who weren't in on the joke kept complaining on IRC about the same song being played constantly.

The joke was to play it late in the afternoon so that there was a large lag. When you're dancing to the same music as people you can see, but with a lag of ten seconds or so from what they can hear, it's surprisingly amusing.

Fortunately, someone took a photo:


I think my favourite part of this picture is the kid on the right who is quietly getting on with his assignment.
marnanel: (Default)
In case it's useful to anyone else, here is a script to list translators of a program since the most recent release (defined as the most recent time you made a commit to NEWS). It goes in /usr/local/bin/git-translators, so that you can invoke it as git translators:

[marnanel@tinidril metacity]$ git translators
Khaled Hosny (ar); Jordi Mas, David Planella (ca); Carles Ferrando
(ca@valencia); Petr Kovar (cs); Christian Kirbach (de); Daniel Mustieles, Jorge
González (es); Ivar Smolin, Mattias Põldaru (et); Mahyar Moghimi (fa); Fran
Diéguez (gl); Yaron Shahrabani (he); Gabor Kelemen (hu); Kjartan Maraas (nb);
Og B. Maciel (pt_BR); Matej Urbančič (sl); Daniel Nylander (sv); Gheyret
T.Kenji (ug); Maxim V. Dziumanenko (uk); Nguyễn Thái Ngọc Duy (vi); Wei-Lun
Chao (zh_HK); Wei-Lun Chao (zh_TW).
[marnanel@tinidril metacity]$

I know there are other similar scripts out there; I wrote this a while ago when I couldn't find any of them quickly that still worked after we changed from using svn.

Thank you!

Jan. 31st, 2011 02:00 pm
marnanel: (Default)
I just wanted to say thank you to Eric and Diana, whose birthday present for me arrived in the post this morning. In memory of all those hours developing Gnusto, it's a documentary about text adventures, Get Lamp:

The cover

I'm really looking forward to watching this. Thank you both!


Jan. 29th, 2011 10:53 pm
marnanel: (Default)
I spent perhaps too much of today coding. I didn't really mean to spend quite that long on it, though it was a lot of fun. Will Thompson's help fixing DBus problems was invaluable. Version 0.50 of imgur integration will be coming to a Maemo repository near you soon:

Later, since it's my birthday tomorrow, we went out for a curry. It was pretty good, but rather mild. I was amused that the people at the next table to us were clearly English as well. Then we went to the bookshop, came home, and had some coffee. A pretty good day, all told.
marnanel: (Default)
When people IM me out of the blue, so that I'm working in another program and a notification pops up, very often what they're sending me is a URL they want me to look at.

I would rather like it if notifications which contained only a URL had a "Follow" button, like this:

Then I could either dismiss the message, or go and see what they were talking about, without having to switch back to Empathy on the way.

I raised bug 640917 about this today, in case anyone else happens to agree with me that this would be nifty.
marnanel: (Default)
And on another issue: nobody on IRC seems to know a solution, so perhaps someone here does: is there a known issue that would cause libtool to add an X to the start of every line of its input? (The result looks like this.)

This is rather a nuisance, because it stops me doing things.

Update: autoreconf -f -i -v fixed it. Thanks, anonymous hacker!
marnanel: (Default)
It would be rather useful if there was a PermittedHours field in the .desktop file spec. It would list the hours during which the program could be run. That's not just for kids, it's also for me, in the manner of LeechBlock:

[Desktop Entry]
Name=Some Program I Use For Work
Comment=But let's say I don't want to be tempted to spend all evening working on it

[Desktop Entry]
Comment=And I definitely shouldn't be playing this during work hours

I wonder how best we could do per-user settings, though.

My idea is to prevent launching the program during those hours. What would happen if the system saw the program was still running when the time had expired, I'm not sure. Maybe nothing, or maybe it would put up a notification telling me I have five minutes to quit or the process gets it.

I know nanny does some of this, but I wonder whether it's generally something that should exist in application launchers.

What do you think? Worth suggesting to them?
marnanel: (Default)
A spot of lunchtime hackery brings you imgur integration v0.4.0, "Stieglitz". Here's the original announcement, in case you'd like the background.

New in this version:
  • Configuration files.
  • A man page.
  • Recording of details of previous uploads, API to check them, and commandline switches to access this API.
  • Details are always printed to stdout, even if the browser is launched.
  • Extra column in stdout details, giving the ID of the whole record.
  • More tests.
  • Bugfixes.
Next version will concentrate on getting Maemo libsharing working, which will be of great interest to some of you and none at all to the rest.

Download the tarball of 0.4.0, or look at the source control.

There is no packaging yet except for Gentoo; thanks to Dean Matzkov for doing the Gentoo packaging. Deb and RPM will follow soon.

Unrelatedly, the planets may like to hear about an awesome review of my storybook.
marnanel: (Default)
Every contact database program I know has a "nickname" field. Today I was thinking that I use the same values in that field for EXIF tags, and what I'd like to see is a plugin (or better, to see it coming out of the box) with a button on each person's contact record. The button would query Tracker, and then launch gthumb or the local equivalent to show images of that person. The button would not display if there were no such images.

Something like this (on Maemo, though the principle is the same for GNOME):


(It's interesting to consider whether the plugin should assemble the list and then pass it to gthumb, or whether gthumb should be extended so that it can be passed a switch to display all pictures known to Tracker with a given tag.)

Of course, Tracker also tracks things other than images, so you could also have buttons for wordprocessor documents, emails, and so on. I could do this (in a while, when I have some time); would any of you want it?


Jan. 18th, 2011 02:12 pm
marnanel: (Default)
I keep most of my windows maximised, including the browser and the terminal. When I'm testing patches, I often have my browser open at a bug tracker. I like to test patches on a local branch named, say, bug156543, and obviously I also have to mention the bug number in the commit message. But I find it quite tricky to memorise arbitrary six-digit numbers, and it's a nuisance to keep switching windows to see the bug number. And of course it's impossible to automate this process.

Hence this program. It scans the titles of each open window and finds anything called "bug NNN", where NNN is a decimal number. It then prints the number. If there's more than one such, it separates them with spaces. If there are none, it prints none.

If you give it a single argument, it will replace %d wherever it occurs in that string with the relevant bug numbers.

Example of use:

$ git branch `bugid bug%d`

$ git commit -m "Added bouncy castle. Closes `bugid #%d`"

Well, it's useful to me, anyway, so I thought it might be useful to you.
marnanel: (Default)
I have had this sitting half-written in my projects directory for far too long, so I present: Imgur Integration version 0.20. is a website which allows you to host arbitrary images without creating an account. This program includes a DBus service which allows posting of images to, a command-line interface to the DBus service, and an Eye of Gnome plugin to do the same. It is not an official client, but I have talked to the imgur admins and they are happy about its existence.

So when you open a picture, you have a menu option that uploads it and opens a browser at the right page, with no configuration, thus:


You have to turn on the plugin in eog after installation (Edit > Preferences > Plugins > Post to If I package this, I may make it turn on automatically, since it's a little hard to find this.

As originally conceived, it would have also allowed you to use libsocialweb to tweet/dent the resulting URL. I took this out for now because libsocialweb also has API to post pictures, and I wasn't sure how best to do it. There is still a rather useless dependency on libsocialweb. Sorry about that.

eog seems not to look in /usr/local/share/eog/plugins, only /usr/share/eog/plugins. You may therefore have to set --prefix appropriately, or simply copy the files from /usr/local to /usr by hand after installation. Sorry about that, too.

There was a partially-written libsharing plugin for Maemo which used the imgur DBus service, but it's not finished. It could be finished, if people would like it.

Other thoughts on how the program could develop are in the README. You can download the program or look at the source control. This is quite a rough draft. Patches and suggestions are, as always, welcome.


Dec. 17th, 2010 01:35 pm
marnanel: (Default)
There has been a lot of fuss about shutting down (along with AltaVista— my goodness, I used that when I was an undergrad. How weird to see it go).

I am worried that someone out there is going to go to all the effort of writing a new del.ici.ous. Or more likely several someones, and all the results will be incompatible. As Mark Pilgrim points out, this is a bad idea. Don't do it.

I'd like to offer a better suggestion. Write something that takes the not-really-XML of the backup format and uploads it line by line to a given account. So, for example,

<DT><A HREF="" ADD_DATE="1104124425" PRIVATE="0" TAGS="flash,linguistics,phonetics">Flash-based IPA charts</A>

becomes Flash-based IPA charts #flash #linguistics #phonetics

That way
  • you keep your bookmarks somewhere
  • that somewhere runs on free software
  • tags still work
  • you can make feeds
  • you can get daily dumps added to your blog
and so on.  If there's something it can't do, it's far better to do it in and then extend than to write a whole new site.

The main issue is that the string becomes longer than 140 characters, but there are ways around that.

If anyone writes such a script, let me know and I'll link it here.
marnanel: (Default)
Further to my previous post:

Here's a live AJAX-based version you can play with. It's not very fast unless the word is cached, and it only takes at most a word of context (unlike the real thing, where the context is everything you've ever typed), but it should serve to demonstrate the principle.

Now to release the code, and to look into patching existing VKB systems.
marnanel: (Default)
Funnily enough, someone was asking about virtual keyboards on gtk-list this morning.

Last week at the MeeGo Conference several people were talking about virtual keyboards, and the idea came up of doing predictive text, either by making more likely letters physically larger, or merely by increasing their sensitivity.

When I came home, I wrote a JavaScript mock-up based on a third-order Markov chain. It's quite fun to play with, especially on a touchscreen.

When I showed this to a few people at Collabora and elsewhere, Rob McQueen suggested avoiding reinventing the wheel by using the rather wonderful Dasher system as a back end. So, after a longish hacking session, here it is:

State of the keyboard after typing "FLO".

Click here to see a video of the keyboard in action

The front end shown here is just a custom GTK widget I threw together; in real life it would use an existing input method. I've exaggerated the differences between letter sizes for demonstration. (As I mentioned above, the physical letter sizes might not change at all.)

There is a wiki page about all this. Let me know if you'd be interested in helping work on this; I'll be releasing the code shortly, and adding a link on the wiki to it. (Odd thought: I wonder how useful another demonstration piece of JavaScript would be, pulling data from Dasher running as a CGI. Let me know.)

There is also an existing roughly similar system for Android, and, I hear, for the iPhone.

Update: An AJAX version you can play with.
marnanel: (Default)
I'm hereby releasing a public beta of robotfindskitten version 2.0 for MeeGo. I've been sitting on it for far too long. This is a complete rewrite in Qt. It's only designed for the netbook; I haven't tested on the handset. It should work fine on the Lenovo machines distributed at the MeeGo conference.

Links:If you lot like this, it will go into the Garage.  There are some issues I still need to consider; let me know what you think:
  • Is it a good reimplementation of Maemo rfk?  Is it a good implementation of rfk in its own right?
  • Is it playable?
  • Are dialogue boxes a reasonable implementation of the popup messages?  On Maemo I used banners (thus), which were perhaps less intrusive.
  • For those of you who know Qt and C++, I would appreciate some code review.
  • On the handset it's still going to vibrate when robotfindskitten.  Do you think it should bleep or something (or miaow) on the netbook?
I think Planet GNOME will be getting this as well because my feed setup doesn't have tags specific enough; I apologise in advance.
marnanel: (Default)
The other day, over porter somewhere in Dublin, we were discussing people who run curses-based applications in the X terminal under Maemo, rather than using the GUI. (For example, some people run mutt rather than modest, irssi rather than xchat, and so on.) Sometimes people do this because they want or need to run the client on a remote machine, and they don't want to bother with X forwarding. Sometimes they just prefer the character interface.

The idea was then floated of having an escape sequence which caused the client to pop up a notification, so that even a curses-based application running on a remote server could alert you that you had new mail, or that someone had just said your name in channel.

So on the plane home, I hacked up an example implementation:

You can find the patches here:Further thoughts:
  • it still needs osso-xterm integration, but that should be easy
  • patches to mutt, irssi, and so on to produce these sequences would be useful
  • we need to work out something to do with terminfo to report that this sequence may be generated
  • it uses OSC code 55, which is otherwise unused in gnome-terminal, but I don't know whether anyone else uses it for anything.  (The relevant spec, ECMA-48, says that OSC codes are user-defined, but I'd still rather not tread on anyone's toes.)
  • it only allows the sequence to be terminated by BEL; this is traditional, but ECMA-48 actually requires ST instead.  This will be trivial to allow as well.
  • I'm not at all sure about min/max versions of libnotify
(Of course, there are also other ways to get the same effect.  But I think this is a good general solution.)

(Edit: naltrexone suggests appropriate Flann O'Brien parody.)

Your thoughts (and patches) are welcome, as always.
marnanel: (Default)
Woke up quite early, packed up my suitcase, and hacked for a while. Got stuck on the correct (fairly complicated) commandline to pass to qemu; kudos to Ian who woke up, recited it to me, and then fell back asleep again. After that I went downstairs and had breakfast, then caught a taxi to the airport.

The driver asked us whether we wanted to take the toll tunnel, which costs €3. One of the other passengers said yes, but he only had sterling, and was that all right? The driver made the sign of the cross at him.

The plane ride was long, dull, and uneventful, so I spent as much time hacking as my battery and lack of network connection would allow. I took this photo of another plane out of the window, and wrote about clouds. And it was wonderful to be back with Fin, Alex, and Rio, as always.

It's been quite a conference. Thank you once again to all the organisers, and to everyone who made it what it was. Perhaps we'll all see one another in May in San Francisco.

The rest of my conference posts:


marnanel: (Default)

February 2017



RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2017 09:02 am
Powered by Dreamwidth Studios