Hacker's Diary

A rough account of what I did with Emacs recently.

January 31
Ow, a pub.

Got a bunch of bug reports and a few suggestions for librvp. Cool!

January 30
Had a look at Gaim 2.0. There are a few changes that will bite me, and a few changes that I can probably work around with compatibility wrappers. Still, though, finishing ACLs is looking easier.

January 29
Well, that was fun: after a few days of bashing, and bad documentation, and randomly trying stuff, I appear to have an Apache 2 version of the winbind auth module that works well enough. It may, for all I can tell, be leaking memory like a sieve, but anything's gotta be an improvement on a bunch of Perl that stalls every time you're debugging something interesting.

Fixed a configure bug in BBDB, which I still have delusions of maintaining.

Did a tiny bit more with the librvp ACL stuff, but nothing releasable yet. Also, I need to think a bit harder about the memory stuff, as currently I keep running into problems when I try to implement cleanups largely due to my not keeping a consistent policy on who owns allocated memory. D'oh. I've also snagged a Gaim 2.0 tarball to see if I can coerce the RVP stuff into working with it. Either that or ACL code will be the main feature of the 0.5 release, which should probably kick out some time this week. Right now I'm leaving the client run overnight to see if it spontaneously dies for any reason.

January 28
More Perl cleaning. Man, I have a lot of crappy little scripts.

Continuing the saga of the alleged gateway: enabling the SPI firewall appears to cause it to interfere with my work VPN. Removing the SPI firewall leaves my main server open to intarweb abuse, despite the fact that the settings page says, "don't send any data if it's not to a port listed below". Curiously, putting in a bogus IP address for unlisted ports to be directed to seems to do what I want. What a piece of junk.

Robots was lots of fun, with some really good laugh-out-loud moments. Definitely one to watch.

Happy Birthday, Sis!

January 27
Cleaned up a bunch of old Perl stuff that I've rewritten in newer and better ways. Also stopped my alleged gateway box from hanging all my services out on the intarweb.

January 26
Lilo and Stitch 2 wasn't quite the laugh riot the first movie was, but was still pretty enjoyable.

January 25
Started working on the Allow/Block code.

Pushed out a new release of Finance::Bank::IE which allows cash transfers in the BoI code; both account-to-account internally, and account-to-third-party.

January 24
Much digging around in the ACL code resulted in a possible fix for excessive calls to the ACL routines in the first place. Yay!

January 23
More tinkering with yesterday's Apache module. WTF is apxs doing in /usr/sbin?

Also, debugging a crashing Apache process is really no fun at all.

January 22
Hacking together a fairly nasty chunk of Perl to import registry settings from MSMessenger to Gaim.

Set up winbind to try and hack around the stalling NTLM auth problem. Ew. Then tried porting some Apache 1.x code to Apache 2.x. EW. The most "amusing" part of the latter is that the official documentation consists of (a) autogenerated stuff from the header files which frequently doesn't tell you much that you'd not have guessed from the name of the function and (b) some rather poorly written docs that include such phrases as "I don't know what this parameter is for" which, you know, fills me with confidence. In the end, I got the code compiling but crashing, so I abandoned it in favour of dinking with RVP some more.

New librvp release: mostly minor changes, aside from the nasty ACL bug mentioned on Friday. If you're using this code at all, upgrade now.

January 21
I ended up watching the end of Bad Taste on the laptop as my DVD player decided to give up on the disc at chapter 13. For a low-budget movie, it's actually pretty damned good - funny, lots of schlocky gore, and more foam latex than I've seen since One Crazy Summer. It's kinda funny to watch something like this and then compare it to King Kong or the Lord of the Rings trilogy from the same director...

January 20
Looks like I've found the bug. Different to what I thought, but still a gaping hole. New release forthcoming, but for now: don't add yourself as a buddy!

Of course, I found another bug in passing, but it's with the multi-user chat stuff which I know is imperfect anyway.

January 19
Happy Birthday, Hannah!

January 18
Shiny new RVP bug that, if I understand it correctly, reveals yet another gaping hole in the security model of the protocol. Tidy.

January 17
Got a flash of inspiration as soon as I'd gone to bed, so first thing this morning I fixed multi-user chat. Whee! Need to hammer it a bit more, and then I'll kick out a new release (featuring incomplete file transfer code...)

New librvp release: multi-user chat mostly works, as noted; install directory is determined automatically; redirects should work; endian bug in SRV code fixed. Next, I finish cleaning up multi-user chat, and go back to file transfers which really just looks like I should rip the MSNFTP code out of the MSN module.

January 16
Yay! I have several happy clients, and some bug reports! The Mac version works, which is neat, but there's a bug in the redirect code that means it won't work properly in a multi-server environment (I've patched this locally, but I'm working on a few more fixes before releasing it) and for some reason the client doesn't seem to be announcing itself properly on the network. Might just be another "you didn't say UTF-8 so I'm going to quietly fail" thing.

Had a look at the contributed algorithm for decoding MP3 File Manager files. It works for the first three files, which means the guy who wrote it is onto something, but breaks on the fourth. I suspect there maybe some sort of silly bit dance like there is with the original MP3 File Manager.

Sort of got multi-way conversations working; there's still some oddball doubling up on users present, but for the most part it seems to do what I want.

January 15
So I'm working my way through a reverse-engineering of how the file transfer works under RVP, and once again I am stunned at the fragile nature of the official client: if you tell it you have a message of type text/x-msmsgsinvite, it quietly discards it, but if you append ; charset=UTF-8, it suddenly recognises that you're trying to handle a file transfer. Wonderful.

Eventually I got a chunk of the file transfer handshake working. Plus, I've compiled the code on a Mac (using the GTK Gaim client rather than a native version) and after a small amount of kicking it appeared to be working. Unfortunately there's a bug in the code I released which means it won't work, and since I'm midway through implementing stuff I don't have another release to upload just yet, so the quick fix is to modify the code that retrieves the SRV records to manually force the port to 80 instead of attempting to pull it out of the returned DNS record. The slightly less quick fix is to fix the mess I made of parsing the DNS record, which is what I've done with the local codebase.

January 14
One of my christmas goodies was a USB Bluetooth widget, so I finally splashed out and bought a TDK Blue5 for my Palm Vx. After some tinkering with the insane "Windows knows best" settings (hello, why do I have COM21?) I pressed the little glowing blue button and the Palm synced via Bluetooth. Neat! One odd sideeffect, though is that my Palm, which at some point forgot how to automatically turn itself off, once more understands the concept of idle time. Weird.

Also, another enterprising hacker has done some further digging in the files produced by newer versions of MP3 File Manager, and may have figured out how they're keyed. I've not yet tried out his code, but I've been rearranging the MPLE stuff into a more generic library so that in theory you could plug other devices into it and have a unified interface for tools like mple-dump and what not.

And, of course, RVP. I've just added in self-unsubscribe and started playing with the context menu stuff instead of dealing with useful bugs like memory leaks, the total lack of ACL handling, and the broken chat support. I'm fickle like that.

Unleashed was an odd sort of film. Lots of kick-ass martial arts (as you'd expect from the combination of Jet Li and Yuen Wo Ping) and yet an actual story as well. The story was a bit heavy-handed in places (especially the "creative" use of weather as a metaphor) but on the whole I enjoyed the end result.

I really don't know what to make of The Life Aquatic - it's a decidedly odd movie, and I didn't give up in the middle of it or anything, but I can't say it was a great movie or that I enjoyed it all. It certainly had its moments, but overall it felt like a joke that I just wasn't understanding. I did like the Bowie music, though.

I started working on RVP file transfer, then decided I'd be better off in the pub. My life is full of hard choices like that.

January 13
Well, wahey. Fixed the bug I discovered all of last week, and now need to nail down the one I found yesterday. Then, for a little light entertainment, I'll try building it on MacOS X.

And so. Last night's bug also provisionally nailed down. As promised, I am providing a download: librvp-0.2.tar.gz. I am making no promises about how well this might or might not work, so grab it if you like, do the configure dance, and put it somewhere that Gaim will see it as a plugin. It's been compiled against Gaim 1.0.1, probably works with 1.5.0, and I've not yet downloaded 2.0. It doesn't do file transfers, marked-up text, or a bunch of other stuff. Due to the nature of the constraints under which I'm developing this, I probably won't accept patches, but will accept bug reports, preferably accompanied by debug output from Gaim running with the --debug parameter.

In putting up the previous I fixed a bug in another script that converts this diary into a bunch of html bits; the script now makes sure all the links are absolute, so I can fling the extracted HTML where I like.

January 12
Disheartening: looking for one bug, and finding another, and still not knowing how to sort out either one.

January 11
Bah. It appears that the fix doesn't.

King Kong is a pretty good movie, but damned long. And there are parts where I'm convinced the giant creatures are real, and the scenery's all fake. But I did like the dino fight.

January 10
After staring at some packet traces I think I've found the damned bug. I'll know for sure tomorrow, at which point I may actually post a version of this code on the site since it's the first decently functional version.

Dodgeball: A True Underdog Story was better than I was expecting, given the presence of Ben Stiller and, well, Vince Vaughn who annoyed me in most of the films I've seen him in since Swingers; turns out this is one of Vaughn's good movies, and I found myself laughing out loud at parts of it. Not a 100% brilliant movie, but certainly the best Stiller fare I've seen in quite a while. Nice cameos, too.

January 9
Hmm. So one of the fixes still doesn't work. Grr.

January 8
Woot, fixed my caching bug: when using a g_hash_table, don't free up the thing you used as a key after using it... also fixed Friday's bug, so now I'm back to figuring out how to make multi-user chats behave sanely. The main problem is that Gaim doesn't have an easy means of promoting a single-user chat to a multi-user chat.

Again with the hammered httpd. wtf?

January 7
Weird. Webserver went nuts; looked to have used up all its memory, but damned if I know how or why.

Ok, looks like someone hammered the shit out of my poor webserver. At least I now know that 100 httpd processes are apparently sufficient to kill the box it runs on (load average: 140+). Guess I should lower the MaxServers setting...

Be Cool was nowhere near as good as Get Shorty. It was all over the place, really. Largely unfunny, incoherent, and hopelessly scripted (the Steven Tyler scene in particular). About the only good thing about it was Christina Milian's singing. Not a movie I'd recommend at all.

So I think I've fixed Thursday's RVP bug, but I still haven't sorted out Friday's.

Tweaked spamassassin somewhat to be more aggressive about discarding penny stock mails. I don't see them, generally, but they end up in the "not sure" folder instead of the "definitely spam" folder, and I'm not happy with that.

Added IMAP support to a script I'd been using to clean up joe-job bounces, so now I don't need to log into the server to run it. Yay laziness!

January 6
Found another RVP bug today. Dammit. I'm supposed to be reducing the number of bugs, not increasing it.

January 5
Turns out the bug is exactly where I thought it was, just that the code's not doing what I thought it was doing. D'oh!

January 4
Bridget Jones: The Edge Of Reason is a bit hit-and-miss. Some of the missing is the cringe-inducing humour that I don't like, and some is simply unfunny gags like the changing-clothes scene with the taxi waiting outside. Some of the hits are damned fine, though, particularly Hugh Grant and Colin Firth floundering around in a fountain. "What are you going to do now, drown me in 16 inches of water?" "...good idea!" <proceeds with ducking>. Can't recall much of the first one, except that the endings felt like an endless series of options that had been patched together instead of the editor actually choosing one; things were a good deal tighter this time around, unfunniness not withstanding.

I found a bug in the RVP client today; or rather, I observed it, but when I went to look for it in the code I couldn't find it. I may need to resort to packet traces. The annoying thing is that it takes four hours for it to show up, and I'm not sure that I can short-circuit that. Time to start putting some more config options in, I think.

January 3
Back to work today...

Did a bunch of cleanup on the RVP code. I found another bug (by which I mean "undocumented server feature") which caused the client to behave oddly, but I've caught and killed that. Yay. Also caught a few uninitialised variables, although I don't think any of them were critical. There's still a little weirdness in the normalisation of usernames; I'd like to see the normalised versions being written out to the buddy list, but that's not happening and the normalise function gets called all over the place, too.

January 2
Hmm. I am having repeated problems with hashtables. Seems like every second one breaks as soon as it goes out of scope. I have no idea why this might be, but it's certainly annoying me.

Ok, that one turned out to be a stupid bug. Still perplexed by other occurrences of broken hashtables, though. Having solved a few more stupid bugs I now have the next chunk of multi-user chat working, which is that someone joined to a multi-user chat can send messages back. Next step is to have Gaim instigate the chat and see how Windows responds, which will allow me to figure out the multi-way handshaking.

Um. Except there isn't any that I can see. When you invite a user to a conversation, everyone on the conversation receives the invite which, as best I can tell, tips them off that they're all supposed to add the invited user to their copy of the conversation. There doesn't appear to be any way of blocking conversation invites that's immediately obvious to me, and there's no way of rejecting them either. Makes things simpler to implement, I guess, but ick. Maybe it's just something to do with my incomplete implementation of server-side ACLs.

I finally got around to upgrading the firmware on my router, but I still can't traceroute through it and it doesn't seem to have made PMTU discovery work, either. At least, I'm assuming that's what's preventing me from accessing my network when using a VPN elsewhere. What a piece of junk.

January 1
Happy New Year!

The main to-do list for the RVP code is now down to one major item - handling multi-user chat - and several minor items, the principal of which is probably adding timeouts for HTTP traffic. Yay me! Of course, I'm totally ignoring stuff like file transfers for now as they're not critical for my intended application of this code.

Hmm, the multi-user stuff is proving to be a little trickier than I thought, but it's not insoluble. The only major hurdle is that Gaim - at least the version I'm working against - doesn't appear to have a means of promoting a one-on-one conversation to a multi-user chat. There's a good chance I could fake it, mind you, but I'll try and get it working for the trivial case first. Right now, I'm able to use the Microsoft client to build a conversation and send messages to all participants, but the Gaim code can't talk back just yet.

previous month | current month | next month

Waider | Happy 2006 and all that