Hacker's Diary

A rough account of I did with Emacs recently.

February 28th
After a little poking around, I realised I could use mp3info and mpg123 to test my mp3s, at least for "file header length" vs. "actual file length". And it's like this:

echo -n "Checking $1: "
EXPECTED=`mp3info -f "%m:%02s" "$1" 2>/dev/null`
if [ -z "$EXPECTED" ]
ACTUAL=`mpg123 -t "$1" 2>&1 | sed 's/^\[\(.*\)\].*$/\1/' | tail -1`
if [ "$EXPECTED" != "$ACTUAL" ]
  echo "Mismatch: expected $EXPECTED, got $ACTUAL"
  echo "OK"

Spent most of the rest of the day working on Interphrase stuff. They'd like me to chunk some XML stuff in there, but I'm not sure it's appropriate. I need to think about it some more, I guess. The work is all PHP/MySQL stuff, which is very much a learning experience for me.

Finished up the day with another bunch of hacking on the MM2 file formats, and managed to figure out - I think - one of the flags. Picked up a few more bits and pieces about how the files work, too.

February 27th
Good grief. Turns out my patch to add Compaq Armada M700 support to xkeycaps was broken. doh. Doh. DOH. Fixed now.

I had another look at the BackSpace vs Delete thing, thinking that perhaps my stty setup was to blame, and maybe I should modify the X keymap to cope (hence the discovery re: the patch). And, well, I'm confused. The BackSpace key is, in fact, mapped to ASCII 0x08, as you'd imagine. Yet in a xterm, it is ^?. Okay. Well, at least that makes Emacs work. That is, I presume, controled by the BS/DEL setting. Delete, on the other hand, is mapped to ASCII 0x7f - again, as you'd expect - and maps to ^[[3~ in an xterm. Um. When I then telnet across to Gonzo and do stty erase ^? (well, it's already set), bash takes over and decides that irrespective of stty, it's using ^? as Delete, thanks. So maybe it's just a bash problem I have to fix. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGH.

Then I poked at /etc/inputrc for a bit, discovered that the one on Gonzo belonged to an older version of setup, upgraded, and... woah. It appears to work. Time to take that nasty comment out of my XTerm app-defaults.

February 26th
Spent some time hacking up a very cheezy front-end to the files from the old TBWA (Talk.Bizarre Wasteful Archive - we were providing a web-accessible newsgroup archive while Deja was still learning HTML) and then spent most of the day reading through old articles from 1992.

As you may have noticed, I'm in something of a slow-rinse brane cycle at the moment. Normal service will resume at some point, I'm sure. I did finally finish the Alcatraz stunt, though; here's a picture of my Ford Mustang on Alcatraz and here's the ramp I built to get there. Whee!

February 25th
Reboot to Linux, catch up with email, patch BBDB, that sort of thing.

February 24th
Silly me, suggesting things like that to myself. Now I have a half-assed Perl/Tk script that does the tweaking for me, and I've almost got a bridge to Alcatraz made out of jumptrailers. I think it's time I rebooted back to Linux.

Mom's school computer arrived at my doorstep; I've promised to give it a good seeing-to and a bigger hard drive. Also probably a coupla drops from the balcony to get its head straight.

February 23rd
More hacking with MM2. I now have a command-line map editor and I'm tweaking the location of toys on the map. I should really make a Tk interface for it.

And we will say nothing of the monster beerfest in Messrs. Maguire, nor the tales and songs of the post-beerfest hangovers.

February 22nd
Mostly off day, playing with MM2 and trying to hack its file formats. At about 4am I figured out the one I was hacking sufficiently. Bwahahah. Fetch me my Perl, boy!

February 21st
For the past while I've been getting messages like this every so often:
From: root@waider.ie (Cron Daemon)
To: root@waider.ie
Subject: Cron  run-parts /etc/cron.daily
Date: Wed, 21 Feb 2001 04:02:01 GMT

error: cron:1 duplicate log entry for /var/log/cron
I finally got fed up of it and tracked it down. Turns out it's due to there being both a /etc/rotate.d/cron and also an entry for /var/log/cron in /etc/rotate.d/syslog. Now, isn't that obvious from the error message? GAH.

February 20th
Still no sign of Icecast's site coming back up. Doesn't look good.

nhist.el is now at the point where I can query the history database for anything I've visited in the last 30 days by title or URL (or both), and it'll pop up a click-sensitive buffer full of matches. It was scarily easy to implement, and I learned about nconc in the process. Specifically, I learned that nconc can't have nil for one of its to-be-modified arguments. This means I have to have nasty code like (if foo (nconc foo bar) (setq foo bar)) which seems, well, inelegant.

February 19th
Hmmmm. Looks like the problems I was having streaming with Icecast are, in fact, caused by the streamer, Shout (and its descendant Ices). I figured this out by plugging in the old Icecast streamer, iceplay, and letting it run overnight. It's been running for 9 hours now without dropping the stream. The sound quality is rough, though, and it occasionally pauses, but I'm putting this down to the fact that iceplay is about as raw a streamer as you can get - open file, dump in 4k blocks to server, lather, rinse, repeat. So, I had a look at other streamers, and damned if the bulk of 'em aren't written in Java. Oh dear. That's the last thing I want.

Fixed all the typos I'd made in yesterday's code, with some help from people on bbdb-info, so now it all works and it's not polluting other peoples' namespaces.

Hmm. Just looking up a URL I'd visited for someone on Nerdsholm, and I realise it'd be rather useful (and almost in the spirit of my ideal computer) to have a means of searching Netscape's history list from Emacs. So I picked up a piece of code I was playing with ages ago and discovered it no longer worked, because RedHat now ships with something like three different versions of the Berkely DB routines. Further investigation revealed that at least one of said versions comes with a generic dumper that I can use. Woohoo! Now to see just how much evil I can wreak with this.

Installed PHP and MySQL on Gonzo so that I'd have a proper environment in which to play with the Interphrase stuff.

February 18th
I spent the entire day trying to get my head around Emacs' concept of contextual menus, and also its overlays - known as extents to you XEmacs folk. The overlays aren't too bad to deal with; that was mostly a case of figuring out what overlay functions map to what extent functions, and what to do with the missing bits. The real stinker, though, is the menu stuff. Emacs allows you to build an X popup menu in one of two ways. One way, you can only do submenus - you can't define a menu item that's either a top-level menu-command or an arbitrary piece of text. And that's the easy way. The hard way requires you to define an entire keymap for your menu, complete with unique keybindings, and you need to do it in a particular way to make submenus work. Now, I could get around all this by using my knowledge of keymap innards to hand-build a keymap, but then I'm screwed when RMS decides that there's not enough GNU in them and redefines the damn things. So I spent a day constructing menus by hand, fiddling with them, inspecting the keymaps, and then going back to the generator code to try and figure out the kosher way to replicate the work. This is another good example of how Emacs does not get X.

Anyway. At the end of all that, BBDB is now font-locked under Emacs and has contextual menus, and my brane is locked in elisp-mode.

February 17th
Wake up.
Bus to town.
Sit in pub.
Repeat previous until closing.
Bus home.

Oh yeah. Ireland beat France at rugby. Woohoo!

February 16th
Fitted a new CDROM in the Mac and set about cleaning it up, 'cos I'm giving it away. After a brief struggle, I had a clean OS 8.1 install, which is about as much as it can manage. I need to snag an external modem somewhere and set that up, then it's good to go.

February 15th
Urgh. Hangover. Minor fidgeting with a few things, nothing of note.

February 14th
Patched a few bits and bobs into BBDB, then went back to hacking at the camera, to no avail. Bah.

February 13th
Spent far too much time playing with the apparently-abandoned driver for the Creative Webcam I, a clone of which I acquired while working for Scope Communications. Eventually gave up on it and rebooted to Windows - which worked, hurrah - and played with it there instead.

February 12th
Finally got fed up of hand-patching URLs and made linkfarm-mode adjust the URLs it inserts to compensate for relative links. The elisp that does this is, predictably, pretty horrific, since it was written at 4am.

Went hunting for a bug in VM's base64 decoding after receiving a couple of messages from JoeV that weren't decoded. Turns out that (a) Mailman doesn't properly append its trailers to text/plain messages that are base64-encoded (b) Emacs' built-in base64 decoding refuses to do anything if any of the region you ask it to decode is non-base64 data. Pretty easy to patch around, but a complete nuisance. I've made a patch to vm-mime.el to fix the decoding here.

Had a doh! moment with Gonzo; I finally decided that it's time I recased everything and rearranged disks and so forth. I spent an hour playing with jumpers, cables, BIOS AutoDetect IDE Settings, BIOS IDE Interface Settings, and eventually copped that all I needed to do was go into the Basic BIOS settings and tell it the disks were auto-sized. DOH. DOH. DOH. Upgraded Gonzo to 2.4.1 while I was at it.

February 11th
Started messing about with an XML import for BBDB. The idea here is that with a sufficiently generic DTD, you should be able to get pretty much anything to feed data into your BBDB addressbook. bbdb-merge.el would do the actual work of reconciling the import data with the existing data.

Tweaked my "What movies are on TV today?" script to work a little better - better text parsing, and caching of pages retrieved from Aertel.

Thought briefly about adding in a generic status-switched to EveryBuddy so you could simultaneously set all your accounts to "Away", then thought better of it and goofed off instead.

February 10th
Solved the BBDB/VM window problem - silly bug where I'd confused a buffer with its name. Doh.

Spent most of the rest of the day writing about FROST.BOB II and making various tweaks to the website.

February 9th
"Do you want to get the new version of Microsoft Messenger?" it asked me. Thoughtlessly, I clicked "Yes". What a mistake that was. Suddenly, Explorer is crashing every 30 seconds with an error in WSOCK32.DLL, followed by an error in KERNEL32.DLL. Hell of an upgrade. So having tried a bunch of other stuff, I ripped out all the networking right back to the bare metal and rebooted. Detect stuff, fine, can't find one of the drivers, okay, continue anyway, yes, replace all that new crap with the old crap, reboot, forget to tell LILO I want Windows, so now I'm back in Linux Land and I'm not really too inclined to check if Windows is happy or not. What a piece of crap.

And all I wanted was a quick game of Midtown Madness 2. *sigh*

February 8th
Hacked up some Perl/Tk to manage the viewing and rotating of images for my thumbnailer. It's getting WAY out of hand. Discovered in the process that feeding arbitrary images to Perl/Tk is a real pain in the ass. Tk::Photo only understands GIFs and PNMs by default, and it appears that you need to go play in C land to augument its image handlers.

Hacked around a piece of elisp I've been meaning to finish to edit PilotManager's version of the Palm MemoPad stuff. Man. I have some DISGUSTING code there.

Played around with the XML resumé idea some. There are things I'm not really sure how to do, and the net is sparse on any decent examples - everyone's doing the simple stuff, and then referring you to the specs. Like learning HTML all over again.

February 7th
Put a Google search box on the front page. I wonder if it'll actually be used?

February 1st - 6th
FROST.BOB II, or too much fun and games below freezing.

previous month | current month | next month

Waider short month. drink faster.