The Distant Horizon
This is a bit of a meta-post; an introduction and disclaimer, if you will, for an upcoming series of posts. First up, the warnings: these posts are going to deal largely with personal issues of mine, how I'm dealing with them, and my philosophy surrounding them. At times, things may get intensely person, emotional, even upsetting; hopefully there will also be some bright shining inspiration along the way to balance it out. If this this sort of thing doesn't interest you, or makes you uncomfortable, please feel free to skip over these posts. I'll be tagging them all "MS" for reasons that will soon be clear if you haven't already guessed at them, or don't already know part of the story.
Secondly, due to the personal nature of these posts, you may feel obligated to respond in some way; perhaps to express sympathy and support, perhaps to share supposed words of wisdom, or perhaps in some other way. Well, please don't; I am in no way hostile or opposed to any of those things, but these posts are emphatically not a cry for help or attention. I've received endless support and sympathy from those around me since the news first began to trickle out, so I'm not in trouble here; I'm blessed with wonderful friends and family who have supported me throughout my life. If you feel that describes you, then by all means, join the chorus of responses. However, if you really just don't care, that's also fine! I'm not going to be upset or offended by that attitude; indeed, I would rather you acknowledge that than try to dredge up false sympathy and words filled with meaningless hot-air.
If you are interested, but purely for academic reasons, or reasons of curiosity, that's also okay! Part of the reason I'm putting this out there is that I think there's a lot I can say that will be interesting for reasons on an entirely impersonal level, and I certainly won't be upset by people who are drawn solely to that. If you want more details, or have questions you want answered, then please ask away.
No more ls
I don't want ls
anymore. For that matter, I don't want directories anymore; I'm not even sure I want files anymore, but let's leave that one alone for now. So, before you conclude I've taken leave of my senses: of course, I don't mean just deleting the /bin/ls binary, and ripping functionality out of all existing filesystems. All of that can still remain on a low level, and that may well prove useful in implementing a higher-level layer; what I mean is that I no longer wish to be concerned about all of that anymore. Why not? Well… story time!
Once upon a time, the web was brand new and unknown; indeed, the internet itself was relatively small and new and experimental. You could easily keep a list of every website around, and so people just did that. Over time, the number of websites grew to the point where keeping a flat list was no longer practical or useful. Enter Yahoo! Other directory projects existed, of course, but Yahoo! was the most successful and well-known; they built a directory of (just about) every website, broken down into an impressive array of categories. More time passed, and finally the directory system began to break down too; it was simply not possible to list and categorise every new website due to the rate at which new sites were popping up. And thus was born the age of search engines; the technology has improved today, and you'll probably be using Google instead of Yahoo! — but today, when you want to find something on the internet, the first step is generally visiting a search engine, not navigating some directory-like site.
So, that's what I want for my own filesystem too; I don't want to deal with categorising a file in my directory structure, and I don't want to deal with digging through that structure to find it again later. I just want to associate sufficient metadata in addition to the data itself, so that I can search for it later and find it without difficulty. What this really amounts to is decoupling the view of the data from the data itself; instead of hardcoding one particular view (ie. the filesystem directory structure) into my data, I can instead choose to view the data any way I want at a later stage.
How do I get there from here? I guess that will have to wait for my next post.
Sailing onwards
Down the way, where the nights are gay,
and the sun shines daily on the mountain top;
I took a trip on a sailing ship,
and when I reached Jamaica, I made a stop.But I'm sad to say, I'm on my way;
I won't be back, for many a day.
My heart is down, my head is turning around,
I had to leave a little girl in Kingston town.
He is my only one, now that my time has come;
now that my life is done, we look into the sun.
"Seize the day, and don't you cry;
now it's time to say goodbye.
Even though, I'll be gone;
I will live on, live on."— Dream Theater, A Change of Seasons
I just sent a mail to the Dosage mailing list announcing my retirement as maintainer; and this marks another step in the internal reorganisation of my personal project "workspace", as referred to in my previous post. Other projects going back on the shelf include Kali (the replacement services package being developed for Shadowfire), Eridanus (an IRC bot based on Mantissa and Twisted to which I haven't contributed much besides design advice), txAWS (a Twisted library wrapping Amazon Web Services APIs), txSmug (a Twisted library wrapping SmugMug's API), and FlyingCircus (an IRC quote database based on Mantissa).
What does being "shelved" entail? Well, firstly, it doesn't mean that I'm giving up completely on any of these projects, burning the source code, or refusing to ever work on them ever again. It does mean that I won't actively be thinking about or working on any of these projects; I might be persuaded to help someone out who's interested in taking over from me, but otherwise they're getting kicked out of my mental space to make room for working on other things.
This isn't necessarily the kiss of death for any of these projects; Dosage will slowly degrade over time, I guess, but maybe someone else will step up to the plate. Eridanus never really got any contributions from me, and the existing functionality isn't going to suddenly break. txAWS and txSmug are far from complete, but if you don't need anything beyond what they already provide, they're perfectly usable, and txAWS has other developers that may provide further contributions. Finally, FlyingCircus is pretty much "complete"; there's always room for improvement on any piece of software, of course, but it's perfectly usable as-is.
So, what am I going to be working on? Well, as always, most/all of my projects make use of Twisted and Divmod, and I'll continue contributing changes to those projects based on requirements of my own projects. Methanal is another project that falls into this category; and as a dependency / spin-off of the code base I work on for my day job, it'll probably keep ticking along. I'm not planning to package any new software for Debian, but I'll probably keep maintaining the software I'm already involved with, since there's not a huge amount of effort involved.
The "big one" is probably going to be EdgeVerse. In case you couldn't make any sense of the useless description on the website, or were too lazy to visit it, EdgeVerse is a project that's basically all about tracking media: books, movies, music, TV series, whatever. This includes tracking what you already own and have watched, tracking new releases that you're interested in, and of course tracking all of your friends too. It's ultimately a pretty ambitious project, and I'm not at all confident that it'll be able to succeed, but for now I'm going to be giving it a try (hopefully).
I'll no doubt be posting more about EdgeVerse in the days and weeks to come; if you're curious about the status of any project I haven't mentioned here, feel free to inquire in the comments, or by email / IRC / FriendFeed / whatever.
So long, and thanks for all the fish
And the hope I had is dying;
and what we had has come undone;
then your smile, it melts away again.— Caribou, Melody Day
As part of my new effort to actually start making progress again on some of my projects, I'm going through all the ones on my metaphorical desk, and deciding which ones to put back on the metaphorical shelf. One of those projects is the Debian New Maintainer process (and then more generally, being a Debian Developer); unfortunately, I've come to the conclusion that this is one of those projects that needs to be shelved. Some of the delays in my progression through NM can be attributed to waiting on my AM and so on, but largely it has been a matter of not having the time to spend on NM. As time rolls on, it seems even less likely that I'll have the time to finish the process off, much less actually doing real work as a DD; there's just a handful of packages I've ever cared about, and I'm starting to care less and less about all of this in general. I'm not sure yet whether I'll keep maintaining the packages I'm currently involved with, or just cut them loose (almost all of them have co-maintenance, or no longer matter much).
This decision has been a bit more disturbing than I thought it would be, and I'll probably think about it a bit more in the days to come, but for now it looks like this is the end of the road for me.
Stay tuned for more news about what other projects are going on the shelf, and which ones may be seeing some real activity on my part.
To GPL or not to GPL
Zed Shaw of, well, internet fame (or infamy?) recently posted about the GPL, and why he uses it as the license for his software. I understand his reasoning, and I think I even agree that the GPL is the best way to achieve his goals; however, for my own work, I strongly feel that other issues take priority over the ones he raises.
For starters, there are practical issues with the GPL. The biggest of these is simply the fact that it is a copyleft license; by their very nature, any two copyleft licenses are either legally equivalent, or incompatible, and so this just doesn't scale. Even the GPL v2 is mutually incompatible with the GPL v3, which has presented some people with some unexpected nasty surprises. This kind of compatibility barrier causes non-trivial damage to the Free Software ecosystem.
Another main benefit of Free Software projects is that the community is not isolated into silos; everyone can freely mingle as they choose, collaborating on changes and so on., and this even extends to developers working on proprietary software projects. The GPL + proprietary model breaks this; the companies that have to purchase a proprietary license are effectively isolated from everyone else due to the nature of those licenses, and so they're likely to just stay locked behind closed doors, rather than supporting the project through interaction and contribution.
So, my motivations and reasoning are quite different from Zed's. I don't want to build a shrine to my awesomeness that all passers by can see; I don't have any objection to that goal at all, it's just not something that motivates me. I don't want recognition or credit for the work I do on my projects; I won't object to any kudos I receive, of course, but ultimately I just want those projects to succeed, even if it's at the cost of my own ego or fame. On the flip side, making use of GPLed code, even in my own Free Software projects, presents such a significant burden that I'm likely to think very hard about whether the dependency is worth it, rather than just recreating what I need on my own. I'm not sure that Zed's model of Free Software or "open source" projects is actually something that can survive in the long run; we need to play to our strengths, not our weaknesses…
Oh, in passing, I'd like to add that I'm very happy to tell people about how awesome the other projects I rely on are, and in fact I do so quite often; not all of us are "plagiarists", even if it looks that way to Zed. Then again, I don't (yet?) use any software he's created, so I guess that doesn't help him, although I still have a lot of respect for what he's accomplished.
Slipping Away
And you run, and you run to catch up with the sun, but it's sinking;
racing around to come up behind you again.
The sun is the same in a relative way, but you're older;
shorter of breath and one day closer to death.— Pink Floyd, Time
Surviving change is perhaps one of the hardest things to do, and yet it may be one of the most important abilities to master for a species, idea, movement, company, or even an individual in order to be assured of survival. The issue of changing "with the times" is often explored in fantasy / sci-fi fiction involving immortal beings such as vampires, robots, or even sword-wielding immortals from the highlands of Scotland. In Stephen King's Dark Tower series, the gunslinger Roland Deschain describes his world as having moved on; and while this may have occurred in a more dramatic fashion than most beings on Earth are likely to experience, the failure of much that once existed in Roland's world is still reflected in the pattern of our own world.
One of the key ingredients of the human life form is the ability to dream, to hope, and to otherwise plan for a future, however vaguely. Following up on those dreams and plans involves a varying amount of risk, but the possibility of equal or greater rewards is always there to compensate; being risky and daring along some axis is unavoidable in the pursuit of great things.
Unfortunately, over time, these dreams lose their relevance, becoming fruitless pipe dreams. As time slips inexorably onwards, the reality of life diverges more and more from the dream path until the dream becomes unattainable, or even undesirable. If one clutches to these faded dreams, they too will be dragged further and further away from reality, losing touch as they go; this is a trap that must be avoided in order to survive.
As humans, we carry around a tremendous amount of emotional and intellectual baggage. Of course, a large quantity of this baggage is absolutely essential; without any knowledge whatsoever, the human mind would be a pointless empty vessel. The difficulty is in discerning which items of baggage are useful, and which are not; since we can't figure this out, we just keep absolutely everything, accumulating an ever-growing collection. Eventually the weight of the baggage is so great that we are unable to take even one step further; and so there we remain, as the world slowly passes us by, leaving us to fade away in the emptiness that is left behind.
To survive change, one needs to truly accept that the world moves on. One may strive and struggle as hard as possible to control the direction it moves in, but the passage of time is something that ultimately cannot be reversed. Not all change is for the better — in fact, much of it may be for the worse — but once all is said and done, refusing to accept this change merely disconnects you from the world, ensuring that you will never again influence it.
The past holds many lessons that we might do well to rediscover and revive. One may often be tempted to dig up the corpses of old ideas, and revive them through some feat of necromantic sorcery, but such an endevour can only result in a doomed Frankenstein-like monster with no chance of survival. Take anything out of the environment or context that provides the ingredients necessary for it to live, and it will have no hope of survival; in addition, the new environment will have its own peculiar strengths and advantages, which need to be considered and taken advantage of for maximal effect.
Recognising and accepting the changing world is but the first lesson in surviving change, but it is a critical lesson to learn; ignore it at your own peril.
Drowning in the Sea of Infinity
If the light of a thousand suns
were to rise in the sky at once
it would be like the light
of that great spirit.
— भगवद् गीता
I remember when we were so young,
you embraced my fears and made me strong;
but never did you actually hold my hand,
your silence no one would understand.
— Dream Theater, Speak to Me
I discovered this weekend that Fravia+ passed away about two months ago; I had read about his illness some time ago, but somehow missed the announcement of his death until now.
For those of you unfamiliar with this character, Fravia was one of the old school reversers (as in reverse engineering); or "hacker", in the sense that I personally identify with. In those days, knowledge was handed down from the great wizards like +ORC and others, but it was Fravia that truly brought the message to the masses (you may find his old site archived in various places). This was not merely about "cracking" software copy protection; but about taking things apart, understanding the way they work — and not just software, either. Later, he turned his focus to the meta-art of searching; seeking out information, wherever it may be hidden. His eccentric tone, which some no doubt found to be pompous and patronising, was something that endeared me to him from the very beginning; and the communities that sprung up around the gardens he planted were true jewels gleaming in the darkness of cyberspace.
Unfortunately, as time moved on, I lost touch with these communities, as I have lost touch with so many others. I still feel a strong connection to them, but I ceased participating in the interactions for whatever reasons, as my focus moved on to other places; and this is really what this post is about. Somehow, despite my efforts to the contrary, I'm unable to cling to everything I hold dear; like trying to gather the sea into one's hands, it just flows through my fingertips, and I don't know what to do about it. In some ways, this is similar to another problem I have previously described; dealing with ideas that are too big to hold in mind all at once. Yet, this is not quite the same issue; this is more of a social issue, wrapped up with issues of time and concentration. I somehow need to become my future self, without losing that which comprises my past self; to gain new understanding and insight, without losing that which was previously important.
And so, I find myself conflicted and disquieted; and most of all, mourning the passing of a great man, someone I would have liked to number amongst my friends, even if it were not so. Sail well, dearest Fravia, you are someone who will not be forgotten quickly or easily; and to those who perchance remember an old stranger, fellow traveller, or friend, I miss you all somehow, somewhere…
The Poignancy of Misery
As a child,
I thought I could live without pain,
without sorrow.And as a man,
I found it's all caught up with me;
I'm asleep yet I'm so afraid.— Dream Theater, Metropolis Pt. 1
So if you're empty come with me,
and watch the world go by;
we'll laugh and laugh until we bleed,
just so that we don't cry.— Cypher, Exit Stage Left
A good friend asked me a question the other day, something like: "What's your happiest memory of your parents?" I struggled quite a bit to come up with an answer to this question, and that effort really brought something into focus: that is, the difference in the way I perceive misery and happiness. Indeed, if you've read some of the "feeling" pieces of writing that I've posted on my blog in the past, you might easily come the conclusion that my life is defined by great misery and sadness; but while there's certainly been enough pain and suffering in my life, I would generally characterise it as one of happiness and contentment.
So, why all the sorrow and darkness? As I tried to think back to happy memories, I realised that I couldn't recall any single specific moment of happiness in my life; all of the happy times just blur together into one long stream of feelings, a sea of warmth and comfort. By contrast, the moments of sorrow stand out like brilliant points of light, frozen in the stream of time, individual moments of misery in a background of happiness. I can recall with frightening clarity most of these moments, down to the lines and bumps of the furniture, the dirt on the floor, the background sounds and noises, even the scents in the air; and most of all, the exquisite sensation or emotion of sorrow itself — what might perhaps be described as emotional masochism.
As a result, I find it hard to write about happiness and joy; there are no details to lock onto, no sensations to describe, no images with which a tapestry of metaphor may be weaved. Perhaps some day I'll find a frame of reference within which to describe these things; until then, I guess I'll continue to write about sadness and misery.
(Incidentally, I'm trying to work on bringing an actual character to life in their own right, rather than as a mere prop through which I attempt to convey a feeling; so with any luck, you'll be seeing some writing in that vein shortly…)
The Tempering
Allan knew, long before he stepped through the doorway.
The falcon's whisperings had been growing more and more frantic, but his mind desperately shoved this to the side, seeking out any distraction that presented itself in a futile attempt to avoid the inevitable. His companions had not even noticed; Allan spent most of his time seemingly preoccupied by matters of the mind, and his behaviour today was hardly out of character. Yet, as the group approached the entrance to Allan's home, Nicole was filled with a sourceless sense of foreboding and dread; her subconscious somehow picking up a hint of the invisible inner turmoil that now seized the young man.
Step followed step as the threshold drew near, and the whispers became whimpers, then loud sobs. The colours of the world began to leak away, leaving behind a painful contrast of greys. The light brush of clothing against the skin was suddenly the painful rasp of sandpaper, and the faint whisper of a breeze was now an icy blizzard, whirling around him in sympathetic agony. The inescapable dread rose up blindly in his mind, gibbering incoherently, as he retreated from the unbearable assault on his senses; the falcon's cries continued to grow in volume, drowning out all other sound and nearly forcing him to a stop as he stepped through the entrance.
Inside, the old man sat on one of the ancient chairs placed around the room; Emily's body sprawled across the chair next to him, clutching the old man's hand with a death grip. Her muted sobs were inaudible over the sudden, dreadful scream of the falcon as Allan's eyes brushed across the scene, barely taking it in. From somewhere within, the absurd observation that the furniture needed reupholstery flitted briefly across his mind, intermingled with that insane gibbering inner voice. He saw the old man's lips moving, the sobbing heaves of Emily's chest, but the sound was still far beyond. It didn't matter, anyway, and as he collapsed to the ground, the world exploded with unbearable light, the falcon's impossibly drawn-out scream pushing him to the ground.
Allan's mind turned away from the light and sound, only to be confronted by Her face. Her brilliant, ever-present smile was now somehow confrontational; the warmth and love in her eyes now shot accusations and blame as he turned and fled down a mental corridor. The effort was futile; the image was on every wall, waiting for him at every branch and corner, an infinite prison of reflections, while somewhere behind him a nameless, roaring threat pursued him through the mental maze. The insane, gibbering voice now threatened to utterly eclipse the others, driving him onwards mindlessly, until he finally collapsed screaming in his own mind, unable to continue. Within moments the pursuing storm swept over him, stripping the very flesh from his body; the scream was now all his, as indescribable agony wracked his damaged frame. Then, somehow, She was there; Her smiling face seemingly impervious to the destruction as Her delicate and fragile arms gripped him, holding him in place with impossible force.
The sensation of time passing had deserted him; the very memory of entering the house only moments ago was now buried in the distant past. Finally, the storm began to subside, the unimaginable fury beginning to dwindle. The inconceivable strength of Her arms had held him in place throughout the ordeal, cradling him with love and warmth, not allowing him to be moved even the slightest distance. Now, as the agony drew to an end, She gently lowered him to the floor of the corridor. He looked up, motionless and uncomprehending, as She began to fade, flowing away with the last of the storm, until Her whispered farewell accompanied the last of Her into oblivion.
The world snapped back into place. The stark contrast of grey assaulted his eyes again, and once more the falcon's voice could be heard again; no longer screaming, but now weeping inconsolably. As his eyes adjusted to the harshness of the light, he became aware of Nicole's frantic form bend over him; he realised her lips were moving, and strained for the sound… "Allan! Allan! Come back to us!"
He suddenly stood, his iron strength returning as demanded, and took the frantic Nicole into his arms, as she collapsed against him in relief. The others looked on, fearful; the warmth in his eyes was gone now, replaced by the icy coldness of the falcon, and even Emily's tear-streaked face was watching him intently, the flood having temporarily abated. He glanced over to the old man, and when he spoke, the terrifying ring of command could not be refused.
"Take me to Her body."
Firefox extensions
Out of the thinning mists and the cloud of strange incenses filed twin columns of giant black slaves with loin-cloths of iridescent silk. Upon their heads were strapped vast helmet-like torches of glittering metal, from which the fragrance of obscure balsams spread in fumous spirals. In their right hands were crystal wands whose tips were carven into leering chimaeras, while their left hands grasped long thin silver trumpets which they blew in turn. Armlets and anklets of gold they had, and between each pair of anklets stretched a golden chain that held its wearer to a sober gait. That they were true black men of earth's dreamland was at once apparent, but it seemed less likely that their rites and costumes were wholly things of our earth.
— H P Lovecraft, The Dream-Quest of Unknown Kadath
I use a variety of Firefox (Iceweasel, actually; thanks MozCo) extensions, and I thought I'd make a list for my benefit as well as everyone else's. I'll divide them into two categories; the "must-have" ones that are critical to my browsing experience, and then the less important ones.
First up, the "must-haves":
- Adblock Plus: Not much to say about this one; it's the best out of a handful of advert blocking extensions, and is pretty much essential to keep all of that cruft away from your eyeballs. It automatically updates the block list via subscriptions of your choosing, which is pretty handy
- Delicious Bookmarks: The official Delicious extension. Delicious is how I keep URLs for later reference; I don't care too much about the social aspect, just about being able to find things later when I want them.
- Feedly: Feedly is a Google Reader frontend, but so much more. It integrates with FriendFeed, Twitter, and other sites, and has its own completely separate UI.
- Firebug: This one is essential for doing any kind of web development. HTML / CSS exploring, JavaScript debugging, and more.
- FoxyProxy: Advanced proxy management tool. You can select different proxies for different sites based on pattern matching. For various reasons, I need to be able to do this to access certain sites, so this is a must.
- Greasemonkey: This one obviously has no value on its own, but there are a handful of extremely useful scripts I use, like Password Composer.
- NoScript: This one is fairly self-explanatory; it includes protection against XSS and ClickJacking, and allows you to "opt-in" to JavaScript, Flash, etc.
- Session Manager: This extension extends the built-in session management functionality in Firefox; you don't have to worry about losing your session every now and then, and lets you load older sessions, omit that page that keeps causing the crash when you load a session, manually save / load sessions, unclose closed tabs and windows, and more.
- Ubiquity: A command-line for your web browser; I use dozens of Ubiquity commands every day.
And now, the rest:
- bit.ly preview: This extension gives you rollover preview for URLs using various shortening services (like tinyurl, bit.ly, etc.) as well as some other things like Twitter tweets.
- DownThemAll!: A greatly enhanced download manager. Allows you to do thinks like snarfing a whole image gallery, and otherwise just giving you better functionality for managing active downloads, if you download in your browser a lot.
- Elasticfox: One of the best Amazon EC2 management interfaces.
- Firecookie: Extends Firebug with cookie management functionality.
- FireScope: Extends Firebug with linkage to reference material like the HTML and CSS specifications.
- Jiffy: JavaScript profiling for Firebug.
- Stylish: Like Greasemonkey, but for CSS.
- Tree Style Tab: Arrange your Firefox tabs in a collapsible tree, instead of a flat list.