Britomartis and Theia

[Continuity note: this serves as a continuation of an earlier post; it is, if you will, a separate story in the same "universe"]

Maybe I'm just Cassandra fleeting
Twentieth century Icon bleeding
Willing to risk Salvation
to escape from isolation
— Dream Theater, Voices

The Maiden was born into a modest family. She was not blessed with exceptional physical beauty, but nurtured by loving parents and family, her true beauty quickly began to show: an incredibly inner purity. The Maiden matured in a relatively sheltered environment; and yet, even had her family wished it, isolating her from the world would have been impossible. Thus, many expected the shine of her purity to be dulled and smudged by the corruption of reality, but this was not to be. Far from being dulled, her inner light grew in luminance, the external forces of destruction merely serving to polish her outer diamond-like facets, allowing the light to shine brighter than ever before.

Like all children, her mind was at first filled with the lies of childhood, her mind kept safely within a stained-glass prison of innocence. The simple lies were soon discarded like clothing out-grown, and yet the biggest lies of all she embraced with a frightening passion. Those trapped within the lies saw nothing strange in this, of course, but those who had long since discarded the lies for one reason or another found her dedication and passion either naïvely amusing, or alarmingly misguided. Few suspected the truth, however.

Such was her passion and dedication that out of lies and illusion she formed truth: that self-same stained-glass prison became a Temple of Light manifest in her purity, and those who glimpsed this temple were filled with awe and amazement. How could such purity survive, beset on all sides by corruption and evil? How could such innocence survive? For she truly did not realise that her unshakable truth was mere fantasy for others.

Time passed, and those who watched from the shadows continued to marvel and wonder. Would her purity continue to shine yet brighter? Could her innocence truly be impervious to worldly assaults? Naturally, she was still susceptible to the fragility of youth, but those around her could easily shield her from the mundane dangers that threaten all those not yet fully grown.

It was not to be, however. Her light had shone so brightly that few had been able to see behind it the keen intensity of her mind, a mind blessed with great intelligence. With this mind driving her inexorably along the only path she could see, it was inevitable that her path would lead her beyond the sandbox of familiar childhood, and there her innocence would run dry. And so it came to pass that the Maiden ate of the Tree, and was cursed with the horror of awareness; for the first time, she truly perceived the nightmare swirling about her Temple, and understood that those around her dealt in lies and illusion; only when illuminated by that inner light could these things manifest as truth.

For a time, she retreated under the shock and grief of this sudden awareness. Those around her mistook this for a sign of immaturity, as few could discern the truth of her situation, and this only served to reinforce her loneliness and bleakness. Yet, even this new curse could not destroy her; the light still sustained her, and as time passed on yet again, her wounds healed, and developed new strength to survive the nightmare.

The Maiden emerged from her Temple to once again confront the world: but this time, she moved with purpose: the determination of one who is not merely following the path, but who knows where the path will end. This time she would take her light to others, so that they might join her in the Temple, and find their worthless illusions manifest as truth.

The Maiden was now no more; but The Goddess now went forth into the world.

[to be continued]

TypePad fail

After recently discovering that people couldn't comment anonymously on my blog (apparently Vox just doesn't support this at all), I started looking around at other blogging platforms again. I decided to start with TypePad, what with it being another SixApart service.

So, I run through the registration process, only to get a generic "an error occurred" type page at the end of the process, with a "leave a message" form that I filled out. I suspect this may be related to having signed up for TypePad before, and then deleting my account, but who knows.

I still haven't had a response to my error report, but I got this e-mail in my inbox just now:

From: TypePad <>
Subject: Was it something we said?

Was it something we said?

We noticed that you started to register for a TypePad account, but didn’t complete it.

Maybe the doorbell rang. Maybe you were late for a meeting.

Or maybe it was us.

Whatever the reason, we want the chance to show you that we’re quite simply the best hosted blogging service on the market. Just follow the link below and enter code <snip> for a special 10% discount and a 14-day free trial.



Debian Project Secretary resigns

Manoj Srivastava, Debian Project Secretary since April 2001, has resigned.

I'd like to disclose up front that I am not (yet) a Debian Developer, but I have been involved with the project for quite a few years now, initially as a user, then later as maintainer and co-maintainer of various packages.

Throughout my involvement with the project, I have continued to be impressed by Manoj's conduct, both in his personal capacity, and in his official capacity as Project Secretary and the duties that form part of that position (mainly running votes). Up until recently, I had thought that the rest of the project held a similar view, but apparently certain individuals disagree.

Whatever disagreements anyone might have with how Manoj has handled certain votes, I don't think someone that has faithfully served the project for nearly 9 years deserves this kind of personal, in-your-face vitriol; if you don't like the way someone is doing their job, there are far more constructive ways of expressing your disagreement than burning them at the stake, and I am ashamed to be associated with any individuals who were involved in this. I know there are many others who share my respect for Manoj, despite disliking some of the decisions he has made; they're capable of disagreeing without resorting to personal attacks, so this clearly isn't impossible.

Manoj (if you ever read this), I hope this whole affair has not caused you too much personal pain or anguish; please know that many of us out here have nothing but respect for the time and effort you've donated to the project, and I wish you well in your future efforts, wherever they may lie.

The Mirror

Temptation: why won't you leave me alone?
Lurking in the corner, everywhere I go.

Self-control: don't turn your back on me now,
when I need you the most.

Constant pressure
tests my will,
my will or my won't;
my self-control escapes from me, still.

— Dream Theater, The Mirror

A short time ago I came to the realisation that I had slipped into a somewhat insidious delusion about myself. Like many others in my family, I am an incredibly stubborn and willful individual; this likely comes as no surprise to anyone who knows me more than superficially, but it is something that lies somewhat deeper beneath the surface of my pleasant veneer, so not everyone is aware of it.

The depth to which it runs is, however, something people usually do not expect; I simply do not back down if I'm forced into a corner. Ever. It is this commitment that ensures that, so far as my own moral standards and commitments are concerned, I am completely incorruptible; if you think I'm bluffing, and call my bluff, you may find yourself extremely unpleasantly surprised. Please note that this has nothing to do with intellectual debate and discussion; this is an issue of other people attempting to impose their will on me.

Very few people have glimpsed how deep this runs; I'm not a confrontational person by nature, and I make every attempt to avoid situations where my options narrow drastically. However, on the odd occasion, people have caught a glimpse of how far I'm willing to go, and it's not pretty. I wouldn't be surprised if this attitude causes my untimely death at some point, although I hope it never comes to that.

So, having this kind of certainty is quite reassuring in some ways; present versions of myself do not have to worry about future versions of myself giving in to certain pressures, and in general it makes me feel like a very strong-willed individual. Imagine my surprise, then, when I realised that I was actually being quite weak-willed in many areas. The problem, if you have not already figured it out, is this: if someone pushes me, I push back. Hard. However, if nobody is pushing, then I'm not doing any pushing back, and I now realise that means not doing any pushing ever. Over time, I've continually engineered my way into situations where people have less and less opportunity to try to push me, and that has resulted in a sort of stagnation.

If I actually want to be serious about my life, this is something that's going to have to change. I'm not sure what the solution is, yet, but at least knowing about the problem means I can start devising a solution. Hopefully maintaining awareness of this particular weakness will help guide my path away from it, but only time will tell…

More on Python 3

Since my earlier post on this subject, someone has since brought to my attention this blog post by James Bennett. James writes well, cutting straight through to the real issues at hand, but in some places I think his facts are incorrect, and in other places I draw different conclusions to the ones he draws.

First up, Unicode strings vs. byte strings. In fact, these are handled in almost exactly the same fashion in Python 2 and in Python 3; both languages have a type for storing strings of characters, and a type for storing strings of arbitrary bytes (including things like data read from a network socket, and the encoded form of character strings). In Python 3, the str type is for storing character strings, and the bytes type is for storing byte strings. In Python 2, the unicode type is for storing character strings, and the str type is for storing byte strings. That’s really the only difference; the Python 2 str type has some methods that the Python 3 bytes type doesn’t, but that’s a relatively unimportant difference. The real problem in Python 2 is that many people have used the str type to store character strings, when they really should have been using the unicode type; this includes things built into the language (like attribute names or function names), various stdlib modules, and vast oceans of third-party code.

What does Python 3 do to solve this? Well, not all that much, except for completely breaking everyone’s existing string-handling code; I guess James assumes that in the process of fixing all of their string-handling code, they’ll get things right this time around, but I’m somewhat less optimistic. Still, I think it is important to point out that Python 3 does *not* give you any additional tools for dealing with character / byte strings, nor does it make it any easier to work with them; at best, it just fixes some of the broken character / byte string-handling code that was being distributed with Python.

With that out the way, I’ll move on to the “different conclusions” part. First up, the “Death by a thousand cuts”; I know many programmers feel similarly about the myriad minor issues he mentions, but I’m simply not one of them. Sure, there are all sorts of minor annoyances, and they do start to add up over time, but they’re simply irrelevant compared with the big issues. I might spend two weeks out of a whole year dealing with them, as opposed to months of time spent working around the lack of production-quality libraries for certain tasks, or the lack of higher-level programming constructs requiring me to write pages and pages of lower-level code to solve a certain problem. I’ll admit that I used to find these minor issues a great annoyance, but over time, they’ve just faded away to background noise, just like much of the supposedly major differentiating factors between different libraries and different programming languages. Once you see the forest, you stop caring so much about the trees.

Speaking of libraries, the new standard-library reorganisation is all very exciting; but I would really have liked it if they’d spent the time and energy on actually improving the code to a level suitable for production applications. It really doesn’t matter how most of the standard library is organised, if you’re not going to be using any of it anyway. In addition, projects reorganise APIs *all the time*, and there’s a perfectly straightforward way to do it in a backwards-compatible fashion. You introduce the new API or new location of the API, deprecate the old one, and then eventually remove it. No Python 3-style chasm-of-incompatibility required.

Of course, some of the standard library changes are actual functional improvements, not just rearranging the deck chairs; I haven’t looked at it yet myself, but I’ll take it on faith that the new I/O library is a vast improvement over the old Python 2 I/O facilities. Except… you don’t need to break backwards-compatibility to introduce a new I/O library; and I assume it’ll be ported to Python 2 sooner or later. Indeed, this is a common trend in Python 3 improvements; all the really interesting functional improvements are stuff that can and most likely will be ported to Python 2, if it has not already been ported.

If Python was a brand new language, being developed from scratch with a brand new community, I would be very happy about all of the changes made in Python 3; but since it’s not, I must repeat my claim that aside from things that can be backported to Python 2 in the first place, absolutely none of the Python 3 changes are worth making the jump to what is essentially a whole new programming language.


Linux – Stop Holding Our Kids Back — A teacher sees a kid handing out Linux disks, confiscates the disks from him, and tells him free software is illegal.

What the hell is wrong with people? Seriously, I wish these idiots would just crawl back under whatever rock they came from.


For those of you who didn't read about this elsewhere already, I've just released Methanal 0.1.2. The project was recently moved to Launchpad / bzr in the hopes of making it more accessible.

Methanal is a Mantissa widget library, primarily consisting of an Athena-based forms implementation (if you don't get the obscure pun, it might help if I tell you that methanal is the IUPAC name for what is more commonly known as formaldehyde), but we're also building a collection of miscellaneous widgets that you may find useful. Unfortunately everything depends on Mantissa at the moment, but a lot of the widgets only depend on the Mantissa themes system, so if that was moved into Nevow, a lot of them would be usable in any Athena application.

Lost & Found

Found this in a text file today. No idea why it's there, or what it's about.

    In a flash of clarity, Jan made his decision. Focusing his
dissipated energies, he

Yes, it just cuts off like that.

Kirstenbosch slideshow

Pictures from Kirstenbosch National Botanical Garden.

EDIT: You can see the original pictures in my Smugmug gallery here.

None of you are real

Once upon a time, there was a intelligent young boy with all the boundless energy and enthusiasm of youth; he eagerly engaged those around him in timeless debates, seeking to increase his understanding, while correcting the lies and misunderstanding he encountered. The world spun around him in brightly blurred colours, wrapped in his joy and happiness, and those around him spoke in hushed, awed tones at what they believed to be his potential.

Time passed, and with it came the endless and relentless chipping away of life; the boy became a youth, and the youth became a man. If pressed, he could not have told you when it appeared there, or how, but about his shoulders lay a mantle of responsibility, growing indescribably heavy. The surface of his memories had become coarse and indistinct, the details scratched away by the sandpaper of time; and the energy and enthusiasm of his youth were now but a faint whisper in the depths of his mind. No longer did those around him whisper in awe; instead, they fearfully pulled away, sensing something dark and ugly lurking beneath his comely exterior. One by one, the friends and family that once surrounded him had slipped away, so quietly and swiftly that their disappearance had utterly escaped his notice, until the day that he suddenly looked around and found himself utterly alone.

For the first time in so very long, the young man stopped to look around him. Gone now were the blurred, colourful images that had surrounded him in his youth; in their place, he found a world of stark shades, viewed through a lens with focus of unearthly clarity. The sharpness of the images was nearly such that it hurt to gaze upon these new sights; and the images he saw now resembled nothing of his nearly-forgotten childhood, save for a few hints of familiarity glimpsed from time to time. He gazed fully upon the true darkness of the world that had now surrounded it, and as he gazed, the darkness was drawn inward, absorbed into his very soul, the sharpness of clarity cutting away the last vestiges of youthful ignorance.

Despite no longer being able to draw on the energy of youth for strength, the man was not powerless: he had now begun to draw on the darkness of the world. Trust had been replaced by cynicism, and the bubbling warmth of joy and happiness had been replaced by the soothing cold of sadness and despair. With this new-found strength, he began to rebuild his world, once again drawing a web friends and family about him, but far more selectively and cautiously than before. Slowly he expanded his web of control, gaining power over that which he could, and discarding that which was beyond his power.

More time passed, and he began to turn once more to the battles of intellectual will that he dimly recalled from his youth. But oh! how so very different it now seemed; having fought the world in the darkness of its true form, these battles now seemed to be nothing more than frivolous silliness. It was all meaningless now; he could now see through the cloak of lies and deception, and in every case the same truths presented themselves. No new meaning or knowledge was to be found.

He began to wander aimlessly through this landscape. Visiting the darkest of the dark places, he realised that there was no longer any true horror to be found in this world; returning to the places of brightest light, he found the light dimmed and subdued, no longer the searing powerful brightness he recalled from so long ago. With each step, he gained more power, and yet at the very same time, his need for it diminished; for what need is there for power, if there is nothing over which you would exert it? Even the deep, unfathomable chill of the sadness and despair within his soul was now of no consequence; and that mantle of responsibility which had once seemed unbearably heavy was now weightless about his shoulders.

Finally, he began to sense something new. Slowly, inexorably, relentlessly; a crushing weariness was now filling his soul.

[to be continued]