Older blog entries for braden (starting at number 124)

Free as a dove

I have finally liberated myself from the mail storage format/layout of a particular mail client: I have set up a dovecot IMAP server. I’m using fetchmail to pull down mail from my SpamCop account and dovecot’s CMU Sieve plug-in for filtering. It seems to work quite well. I can point any IMAP client (including the one on my new iPhone 3G S) at endoframe.net and read e-mail in one centralized location.

The most painful part of this has been (and continues to be…I’m not done yet) moving e-mail from Evolution’s store to IMAP folders. I am an e-mail pack rat, which means I have several very large mail folders. Unsurprisingly, these can take some time to move. More annoyingly, Evolution tends to crash at the end of moving particularly large folders. Fortunately this hasn’t resulted in any actual data loss (yet?). It seems to crash after it’s copied everything over to the new location, during deletion of the messages at the old location.

Syndicated 2009-06-30 04:10:24 from endoframe :: log

Fedora 11 bolted on

As my last posting was about installing Fedora 10, I suppose I’m due for another now that I’ve installed Fedora 11. Ahem.

I put together hinge in 2005. hinge is a dual Opteron machine based on Tyan’s Thunder K8WE motherboard. It remains a very capable piece of hardware; but it is showing its age. Among other things, the older Opterons in the box don’t seem to support the fancy new virtualization stuff in Linux. So I figured it was time for an upgrade.

The new machine, bolt, uses an Asus Rampage II GENE motherboard in a Lian Li PC-A01 case. This is a really neat compact case that still manages to accommodate a standard ATX power supply. I think Lian Li has discontinued it; but it can still be found for sale at a few places online.

hinge has now assumed the role of file server. It has a 3ware RAID card running a couple of terabyte drives in a RAID1 configuration where I’ve put home directories, source code revision control repositories, and miscellaneous shared files.

At this point I’ve installed Fedora 11 on both hinge and bolt. There were a few hiccups; but things went much smoother than they did when I installed Fedora 10. NetworkManager has improved by leaps and bounds, but still seems to have some rough edges: when using it (instead of the old network daemon), I can’t get ypbind to come up a boot. Oddly, it comes up fine after booting.

Configuring NFSv4 and NIS was a bit rocky, but that was my fault a lot more than it was Fedora 11’s. Having now resolved those issues, I’m pretty pleased with this Fedora release.

Syndicated 2009-06-27 08:57:02 from endoframe :: log

ncm: I've suffered with oral ulcers my whole life. Just about any sort of oral wound or irritation turns into one (or more). They can also appear spontaneously in association with stress and/or seasonal allergies.

I have not tried walnut mash. I will. I do find tea quite soothing.

Fedora 10

I started using Linux with Red Hat 5.0. When that distribution morphed into Fedora, I continued using it. And I’ve eagerly installed each new version within days of its release.

In the past 9 years of using Red Hat/Fedora, only my attempts to get Red Hat 5.0 to work with some on-the-motherboard SCSI hardware rivals the pain I’ve experienced installing Fedora 10. While there was some self-inflicted pain described in my previous posting, it was quite mild compared to what I was walking into unwittingly.

Bug 466607 was my first, and biggest, problem. Now, after finding this bug report, the problem isn’t too difficult to work around: there’s a kernel parameter that can be passed at boot time that would get things working. But until one has managed to find this bug report, life sucks.

Then there is the relatively well known problem that NetworkManager—the magical take-control-of-all-your-network-interfaces-and-everything-will-Just-Work system service—actually doesn’t work very well at all with static IPs. Turning it off, one is then bound to run into bug 469434. This one isn’t a show-stopper by any means; but it’s also something that’s clearly a simple goof somewhere that’s bound to be trivial to fix. And yet, even though it was reported back at the end of October, it made it into Fedora 10. Bug 466607, which is much more severe, was reported earlier in October and it made it into Fedora 10, too.

Both of these bugs are, fortunately, now fixed. But my impression is that Fedora release managers need to be more willing to hold up a release to fix bugs that are outright showstoppers for users or simply instances of an egregious lack of polish.

Syndicated 2008-12-26 18:38:18 from endoframe :: log

Bad *ware day

So Evolution decided to go sideways yesterday. I think this was prompted by me changing my SMTP server password. But rather than prompt me for a new password, Evolution simply froze when sending mail. As in “by-all-appearances-totally-hosed-because-the-UI-hasn’t-been-even-redrawn-in-several-minutes” frozen. Attempts to make Evolution forget the old password don’t change this outcome. Ugh.

While it would be ever so slightly gratifying to report a bug on this issue, I figure the Evolution developers won’t be particularly interested since I’m using version 2.22 and the latest is 2.24. Hell, I’d be inclined to blow me off on that basis. And I figure, “The Fedora 10 Preview has Evolution 2.24, I can just update to that.” What could go wrong, right? Well, if you’re the least bit familiar with these things, you know lots can go wrong; and you’re probably figuring that this is where things really start to go south.

But it’s not. In defiance of the odds, that part went okay. And when it was done, the shiny new Evolution 2.24 installation would send mail just fine. There was only one niggling problem: attempting to compose a new message now froze Evolution. Okay, so it just went mostly okay.

Ugh. But at this point I’m inclined to blame myself. After all, I knew I was tempting fate by upgrading to a partial set of Fedora 10 Preview packages. So I figure there must be some poorly-connected dependency I need to upgrade; and I figure “Fuck it; just upgrade the whole damn thing.” And I proceed to torrent the Fedora 10 Preview DVD image.

Deluge pulls it down at around 1 MB/s. Nice. On my bottom-tier cable connection. And I proceed to burn the disc image.

Hmm… Can’t mount that one. Crap. Try again (with Nautilus), but at a slower burn speed.

Damnit. That one won’t mount either. WTF? Check the SHA1 sum. It’s good. Okay, install K3B and try it. Its interface is a mess; but at least it’s produced reliable results in the past.

Fuck. Number three won’t mount and won’t boot. Another coaster.

Or is it? Stick it in the MacBook Pro. Hm. That reads it fine. Hm. Now let’s try stile (which runs i386 Fedora 9). Well fuck me. stile mounts it and boots it as well.

So let me get this straight: my DVD burner on hinge will burn apparently-valid DVDs that the same damn burner can’t read.

Fuck you, Plextor. Fuck you real hard.

This afternoon I ordered a Samsung DVD burner from Newegg for $28. I think I paid around $150 for the Plextor drive three or so years ago.

Meanwhile, I seem to have updated enough packages over the Internet to make Evolution happy. I’m trying to avoid updating X and the kernel so that I can keep my Nvidia driver happy.

Syndicated 2008-11-20 10:57:23 from endoframe :: log

6 Oct 2008 (updated 6 Oct 2008 at 17:07 UTC) »


Nvidia has stuck libraries that their libGL needs into a subdirectory; a subdirectory that the linker doesn’t know about. So the customary -lGL is insufficient; one needs to add


as well.

So I’ve made a lame hack to AX_CHECK_GL that should accommodate this. (Well, it’s no more—or less—lame than what I had to do for Mac OS X a little while ago.) And there’s a new release.

Syndicated 2008-10-06 05:46:14 (Updated 2008-10-06 15:28:08) from endoframe :: log

6 Oct 2008 (updated 21 Jun 2010 at 06:12 UTC) »


I have neglected this space for far longer than usual. Time has been short; and most of the time I have free I’d rather spend doing stuff than writing about what’s been done/happening. But there has been no shortage of happenings.

Back on July 14, my son was born.

Dylan, day 2

Dylan, day 2

Now he’s nearly three months old. I’ll post some more recent pictures later. He’s only gotten better looking. For now, Gina’s posted some videos to Vimeo.

Syndicated 2008-10-06 04:22:33 (Updated 2010-06-21 06:02:26) from endoframe :: log

Fading memory

The Tyan K8WE motherboard in hinge has always seemed to have flaky DIMM slots. I seemed to have to wiggle the DIMMs just right in order for the machine to recognize all of the memory. A recent graphics card upgrade nudged things and I was unable to nudge them back into an agreeable position. The board had about a month left on its three year warranty; so, back to Tyan it went.

So I am without my primary development machine for at least a week. It’s hard to believe I’ve had this thing for nearly three years. Last year I upgraded the CPUs to Opteron 285s from the 242s I originally installed; but still it doesn’t seem that old. Its predecessor was a dual Pentium 3 machine that lasted me five years

When hinge is put back together, I think I’ll go ahead and release OpenVRML 0.17.6. I still haven’t fixed that damn JPEG bug; but I think there have been enough less consequential changes to warrant a release.

Another change I’d hoped to work into a point release in the 0.17 series is the use of D-Bus to replace the existing IPC mechanism used in openvrml-xembed. Aside from being generally cleaner and nicer than the existing hacky IPC solution, I’m thinking that expressing the IPC interface in D-Bus should lead to an improved code organization that will in turn make it easier to convert the existing multiprocess approach into a multithread approach for Mac OS X and Windows. This is becoming more pertinent as it seems there may be folks interested in contributing code to a Windows plug-in.

Syndicated 2008-05-25 05:08:34 from endoframe :: log

An RSS parser in PHP for SourceForge feeds

I wrote this for parsing RSS feeds associated with a SourceForge project. It should be reasonably capable for that purpose; though I do not expect it to be generally robust for handling arbitrary feeds. Reed suggested that this might be generally useful; however, I don’t want to put it anywhere that I might feel compelled to maintain it. So this seems like a good spot.

// Copyright 2008  Braden McDaniel
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 3 of the License, or (at your option)
// any later version.
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
// more details.
// You should have received a copy of the GNU General Public License along
// with this library; if not, see .

class RSS2Image
    var $url = "";
    var $title = "";
    var $link = "";
    var $width = "";
    var $height = "";

class RSS2Item
    var $title = "";
    var $link = "";
    var $description = "";
    var $author = "";
    var $category = "";
    var $comments = "";
    var $enclosure = "";
    var $guid = "";
    var $pub_date = "";
    var $source = "";

class RSS2Channel
    var $title;
    var $link;
    var $description;
    var $copyright;
    var $last_build_date;
    var $generator;
    var $image;
    var $items;

    function RSS2Channel()
        $this->title = "";
        $this->link = "";
        $this->description = "";
        $this->copyright = "";
        $this->last_build_date = "";
        $this->generator = "";
        $this->image = null;
        $this->items = array();

class RSS2Parser
    var $parser;
    var $channel;

    var $in_channel, $in_image, $in_item;
    var $current_element;

    function RSS2Parser()
        $this->in_channel = false;
        $this->in_image = false;
        $this->in_item = false;
        $this->parser = xml_parser_create();
        xml_set_object($this->parser, $this);

    function parse($data)
        xml_parse($this->parser, $data);
        return $this->channel;

    function start_element($parser, $name, $attribs)
        $name = strtolower($name);
        if ($name == "channel") {
            $this->in_channel = true;
            $this->channel = new RSS2Channel();
            return true;

        if ($this->in_channel) {
            if ($name == "image") {
                $this->in_image = true;
                $this->channel->image = new RSS2Image();
                return true;
            } elseif ($name == "item") {
                $this->in_item = true;
                $this->channel->items[] = new RSS2Item();
                return true;

        if ($this->in_image) {
            $this->current_element = &$this->channel->image->$name;
        } elseif ($this->in_item) {
            $this->current_element = &end($this->channel->items)->$name;
        return true;

    function end_element($parser, $name)
        $name = strtolower($name);
        if ($name == "channel") {
            $this->in_channel = false;
        } elseif ($name == "image") {
            $this->in_image = false;
        } elseif ($name == "item") {
            $this->in_item = false;
        return true;

    function character_data($parser, $data)
        if (isset($this->current_element)) {
            $this->current_element .= $data;
        return true;

Syndicated 2008-01-26 20:26:11 (Updated 2008-01-26 20:26:49) from endoframe :: log

115 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!