kivikakk.ee

Direction: microkernels

My programming lately has sort of stagnated; not (entirely) in the traditional sense that I’ve just stopped or lost the inspiration, but that I tend to have been doing lots of smallish or trivial things that maybe don’t actually warrant my time.

The most recent project was writing the Erlang::Parser module for Perl, now distributed on the CPAN. This was a really great way to get to grips with Perl, Moose, and another excuse to write a parser. The resulting module may also prove handy in my line of work, where it might be beneficial to extend Erlang’s syntax with our own additions without having to modify Erlang’s own parser. I also wanted an excuse to have a module on CPAN, and I hope this isn’t the last module I release there.

While it was fun, and a lovely result for the test case—verifying that all of MochiWeb parses correctly—to finally pass on CPAN Testers, the original purpose for which I wanted to parse Erlang code has now gone.

I was toying around with an idea for an OS that implemented Erlang-style light-weight processes with mailboxes (and little else) as the core process type. Rather than inventing a new syntax, or indeed, language, I thought it might also be an idea to parse Erlang (which I thought couldn’t be that hard).

First, I started a prototype in Go, then decided I’d do a quicker and hackier one in Ruby; I cooked my own lexer, and my own not-very-LALR(1) parser generator, but ran out of steam shortly after my home-grown parser started having to deal with precedence issues—or not deal, as it ended up. When my Perl proficiency started to pick up, I started pawing through the Parse:: namespace and realised, in the Perl spirit of things, that I could build on some giants’ shoulders and probably end up with a parser in short order. Thus was born Erlang::Parser.

The first release of E::P such that one of its then 3 modules would end up being module #100,000, at least according to the small count in the lower-left corner of search.cpan.org. From what I could tell, I think I was successful; I uploaded E::P 0.1 to PAUSE when the number read 99,999; it updates quite slowly, but the next update was 100,002, so it was either E::P, or some other 3-module distribution that made #105.

I couldn’t leave the job half finished; even if it did parse enough Erlang at 0.1 to suit my needs, I wanted to do the job properly, now that it was on the CPAN. So I selected MochiWeb as the test case, assuming it would end up using every syntactic quirk of the language at least once. 0.2 ended up being able to fully parse (and verify that it did so to some degree of correctness) MochiWeb.

Now I was parsing code correctly, but the interface of E::P sucked; the AST nodes were just arrays, with the first element being a string describing the type of node, and the remaining elements differing (somewhat arbitrarily) according thereto. If I wanted the module to be really usable (and maintainable), I’d have to make the node types better defined. So I learned to cook a Moose, and then OO-ified the AST nodes. I also spent a lot of time writing POD for every node kind, which I’m glad I did now. That was 0.3. 0.4 was including the Parse::Yapp-generated parser in the distribution, as my Makefile.PL-fu is weak and most CPAN Tester reports were failing due to the generated parser’s absence.

A bit before that, I was enjoying exercising in Golang, and so a few weeks’ spare time were spent writing enwd, a Go DNS server. The name is a pun(?): ‘enw’ is Welsh for ‘name’, and the most popular DNS servers tend to be referred to as ‘named’ (name daemon). Getting things like compression was an exercise in following RFCs.

enwd still seems to disagree with some upstream servers, and doesn’t support recursion, but otherwise it’s a fully functional DNS server. The only thing it lacks is a sufficient administration interface to actually create the zone (!). My plan was for it to support interactive zone editing via HTTP—which it has the beginnings of—but doing that kind of front-end UI work for me is, frankly, pretty boring.

I pushed myself along for a bit, but commits become fewer and further between. The work stopped once I was in the thick of the admin interface.

Other recent-ish projects include golex, a lexical analyser-generator for Go (which makes use of Go’s nifty Go parser and AST manipulation libraries—a must for any language worth its salt!), kotaete, a not too-seriously open-sourced project in PHP which I used to quiz friends on which baby names they preferred.. and somehow not too much else. I suppose HaeSeun also counts—her source isn’t open, however.

The more I look at this paltry(!) list, the more I wonder where my time has been going.. outside of work, family, Loki, etc. I made a few abortive attempts at reviving very old game ideas, and messed around a bit with programming language ideas. Really, though, I’ve been gearing so much thought towards systems programming.

Rob Pike’s “Systems Software Research is Irrelevant” talk from 2000 continues to exact as much of an effect on my thoughts about the subject as it did when I first read the slides (the contention of which, if you hadn’t guessed it, is other to that which the title suggests). See page 6: the software and language stacks we used in 1990 (Unix, X Windows, Emacs, TCP/IP, C, C++) were still used in 2000, with the addition of Netscape, Java, and a little Perl. What’s changed in 2011? Netscape lives on as Firefox, and programming languages fade out of and back into obscurity. The web has probably been the single biggest change in ‘software’ since 2000, which is fitting (with regards to the talk) as it actually largely escapes the realm of the concerns of systems software. I still think systems software research is really important.

In a future post1, I’ll expand on why I’m thinking that microkernels will probably be a large part of how I choose to spend my free time. I want to stop frittering away my spare time on aimless (though fun) projects, and start trying to actually stretch my creativity, and maybe make something novel while I do it.

  1. famous last words?

曖昧さ

A little bit of confusion seems to exist around what gender identity disorder (GID) is. As label-avoidant as I am, this is one that seems to be here to stay.

Recently, a few people have (accidentally?) made clear how they feel about it—or at least, what they think it is—which has been an interesting experience.

One person (who’s known about me identifying as at least gender dysphoric since I was 8 years old1 or so) said, “but so what does [your wife] think about all this?”, and it turned out that the assumption was that, seeing as I married a girl, and am now a father, it means that I must have acceded to the role as a husband2 and father by taking on my biologically conferred masculinity with open arms and .. I don’t know, doing something very manly with it. Crushing it under my bicep? Or something.

Another was encouraging of my writing web log3 posts on the topic if it helped me fix the problem sooner; this again seemed an interesting way to view the “issue”.

I guess my point in writing this now is to say that I don’t think this is something that necessarily will have a close. I wrote a letter to my mother to tell her about my feelings in ’05 or ’06:

I am a girl.

Here is the severity of what I feel: just writing that gives me an inner release, something that I could never have felt before. Just seeing that which I have written, right there, displaying it so plainly for anyone to see; it gives me a feeling of inner peace. Here’s Chloe4 on my lap; I’ll whisper it into her ear: Chloe, I’m a girl like you.

I feel gender dysphoria: like the (physical) sex assigned to me does not correspond to my (mental) gender. I can’t think of how many times people have told me that I’m effeminate, but that’s exactly the way that I feel on the inside, if not much, much stronger. It makes me feel uncomfortable to have this mismatch, and it’s been getting much, much worse.

That bit above about seven years wasn’t exactly true; a white lie. The first time I thought about girls in this way; not the way that pubescent boys think about them, or the ways that most typical teenagers, either; the way that I wanted to actually be one, and mingle with them, and be accepted as a peer, was ten years ago; 1996, prep. I can recall not much from my early days of school; but the strong feeling that something wasn’t right is something I can.

In 1999, in grade four, all of seven years ago, I distinctly remember thinking to myself; I wish I was a girl … The way I want to act around other people is the opposite of how I’m supposed to, and (almost) every day feels jarring as a result.

Yay, teenaged me! This was right in the middle of a long-ish letter I wrote to my mother (after a lot of text trying to outline that I was being serious), and I suppose that was a turning point: for the first time I actually discussed gender issues with.. anyone, really, and happily, it was with someone who would take the time to understand me and help me with it.

Twice, I nearly went down the road of actually transitioning physically. To date, I’m still not sure if I regret not following through. Had I done so, I’m sure I’d probably have the same lack of certainty about what I’d done. Damned if I do; damned if I don’t. All I can do is cater one way, or cater another. More ambiguity? Maybe.

So. More of that.

  1. (!)

  2. Head of the household! Breadwinner for his adoring, beloved wife! etc.!

  3. haw, haw.

  4. my cat.

Perchance this will help someone.

I had fun (no, I didn’t) getting wpa_supplicant working on Arch Linux. I kept getting “deauthenticated from c0:50:8a:99:d6:40 (Reason: 6)”.

The answer was that netcfg was defaulting to giving wpa_supplicant the nl80211 driver as well as wext (-D nl80221,wext).

Adding WPA_DRIVER=“wext” to /etc/network.d/interfaces/wlan0 fixed the issue.

Clothing

Some “aha” moments reading s.e. smith’s “Beyond the Binary: What to Wear, What to Wear”. Quoting:

One way to degender clothing is to see more inclusion of femme nonbinary people on sites dedicated to nonbinary fashion and identity. To celebrate femme transgender people and to showcase us in all our glory instead of hiding us away and telling us we don’t belong. For masculine genderqueer people to wear dresses when they feel like it instead of being afraid to do so because they worry about the messages it might send. To see more people who might be read on the surface as ‘male’ in skirts and dresses, heels and pearls, with fabulous hair, this would be a good thing that would break people out of the belief that the only way to do nonbinary ‘right’ is to do it in a masculine way, with men’s clothing, with breasts bound.

Clothing is such a complicated thing, and it is so coded and layered with meaning, that we can become quite snarled and tangled in it. Every now and then I convince myself that I should be wearing more clothes designed for men and I go and try some on and look dreadful, because they aren’t cut for my body, and I end up resenting my body, instead of the society that makes me feel like my body is wrong. Or the clothing manufacturers who cut clothing in very specific and limited ways. Or the community that makes it impossible for tailored clothing for queer folks to really be an option; there are places I could go in San Francisco to find clothing that will fit mybody, but I can’t find that clothing here because the stores that might be willing to stock it couldn’t sell enough of it to justify the expense.

I’m not too sure where I can say I fit into the gender spectrum; part of the reason, I suspect, is that I’m a bit shy to the terms “transgender” and more specifically, “transsexual.” It’s not a lack of willingness to accede to what it means to be TS, but instead underlying feelings of doubt and .. shame? I had a chance to start a transition in earnest years ago, and I gave it up! I’m married (to a cissexual woman) in a traditional nuclear family! How could I possibly be a girl? You’re kidding right?

In turn, I say: “oh, boy, i guess you’re right.” And then I sulk away and try to forget it all ’til I next find myself sliding off into despair somewhere and realise I can’t just ignore this.

Short on time, but in closing: how nice to wear a dress!

Impedance mismatch

Firstly: golly, GNOME software can be bad sometimes. Like, bad. Surely there’s some curses-based WordPress client that’s not so bad? Usability is not simple, but it ain’t rocket science either. Guess you can’t use Linux and want usability too, though, because this talk inevitably cues the “if you want it, make (or pay for) it!” debate. Sadface!

I just tried a terminal (no curses!) program, and it sucked too. Well, that’s life.

Now for a quote to sum up the last week.

I experience gender dysphoria. I experience, often, active hatred of my body. I look at it in the mirror and I sneer at it and want to tear it apart; I spend much of my time, actually, avoiding mirrors, glancing only to make sure that no tags are sticking out and my tie is on straight. I do not recognise the person in the mirror, the face that stares back at me. It looks wrong because it doesn’t feel like my body, and because people tell me over and over again that this body is wrong.

Source: Beyond the Binary: Body Image — this ain’t livin’.

I’m still trying to negotiate “calm acceptance of what is” with “persistent emotional response”. Part of me tells me that this is something that can be overcome; but is it the feeling of dysphoria that needs to be overcome, or the inertia against setting (my) reality in line with my mind?

とは?

今日、同僚(あるいは友達)のブログを一飲みで読んでる。この人も私も性同一性障害にどうにか煩う。それで少なくともこの痛みは私だけの問題だわけじゃないかわかるのはできる。

g.i.d.について書こう。

私は男で生まれた。このようで生めれたいと私に言われなかったけどそう起こった。

八歳の時、それが違うと始めてわかってた。その日からずっと一緒に歩いてきた。

一回以上一口で(女に)トランスしたがってたけど、やっぱりしてしまうのはいやだ。女じゃないから。だが女と及ばないから男と及ぶわけは全然全然ない。ほんとうはもう少しニュアンスあり。

オフィスで、開発者の同僚は二人で男の人。最近ムービーやゲームとかのモデルが持ってきた。机以上にした。多数ははやっぱり女のモデル。おっぱい大きすぎて、気持ちわるいもん。しょうがないね。

オーダない考えなんだったわ。これからもアンネリと申します。よろしく。


… is?

I’m reading a friend’s blog in a single go today; we both suffer from gender identity disorder in one way or another. With this, at least I can know that this pain isn’t just my problem.

I’ll write about G.I.D.

I was born (physically) male. I didn’t say I wanted to be born this way; it just happened. At 8 years old, I started to realise that it wasn’t right, and since that day I’ve walked hand in hand with that knowledge ’til today.

More than once I’ve wanted to transition (to being female), but in the end I’ve not carried through with the process. Maybe it’s because I’m not female, but not being able to be addressed as female doesn’t mean that I’m male, at all. The truth is a bit more nuanced than that.

At my office, I’ve two male coworkers. Lately they’ve come into some models from movies and games, placing them on their desks, the majority of which are female models; big-breasted and in bad taste. Can’t be helped, right?

These have been unordered thoughts. I’m Anneli from hereon. Nice to meet you.

Short-term goals are ...

.. best kept to oneself until after achieved. amirite?

I spent most of today reading 75 pages of the muse’s1 tumble log2, and it left me with a variety of feelings.

Anything consciousness-raising is good, and that it certainly did. As with any reading of large quantities of “good stuff”, I have the distinct feeling that I wasn’t being vigilant enough; surely reading so much of this type of material should have a transformational effect on a person, leaving me pumped and ready to fight injustice, love myself and be who I want to be. Yada yada.

Alternatively, perhaps not! What it did leave with me was a renewed sense of wanting to improve3, and a vague feeling that the way there is not only knowable, but more and more in the direction I’m headed, so long as I apply myself, bare myself, defend myself …

The steps I’ve taken towards being right with myself over gender have been rewarding so far; I’m “out” as makes sense at work, and while I don’t think I’ve heard anyone call me by (new) name yet4, that will be pretty special.

In the grand scheme of things a name (I suppose) doesn’t seem too special—you’d think with all my complaining about my own use of labels that I wouldn’t accord names so much. But while a label is something one uses to reduce the effort that needs to be expended in working out how to pigeon-hole me5, a name is the identifier that wrests control away from the labeller; it embodies ultimate identity, personality, agency, responsibility.

Whereas any label one can apply to someone is necessarily partial, often or eventually wrong, and usually poorly defined anyway6, a name embodies your imperfections, your divergences from the pigeon-holes: label-centric identification renders them as annoying impurities (“Ashley is a Buddhist, though not one who meditates.”); names just concentrate on the person (“Ashley.”), and let real communication, real learning, real experience take on the rest of the relationship. You can’t have a relationship with someone who’s defined purely in terms of the adjectives you can apply to them.

Being Anneli is empowering. I think partly I exhausted my (birth) name. Arlen is this. Arlen was this. Now Arlen is that. Uh-oh, Arlen was that. Now Arlen is something else. Et cetera. I’m trying to move on from that, though that is in no way necessary or sufficient to decide that I no longer feel the name represents me. There’s a deeper question in there.

My only explanation is that there’s some fighting somewhere inside me7 that rails against the notion of me being “male.” Part of the in-fighting I have (with myself) is that this seems to play into heteronormativity; after all, how can I say “I don’t feel so male, I feel female lots too!” without acknowledging what defines those terms? And frankly that hurts me a bit too; almost like I should be “better than that”8. There’s an alot9 wound up, just in that. Harbinger of heteronormativity’s end by day; reluctant customer by night. Or something.

So dressing ambiguously, wearing hair ambiguously, being named ambiguously10, acting ambiguously; they give me some life. Trans has never been a label11 I’ve been fully comfortable applying to myself for some reason, though I feel more and more that it’s appropriate (… even if I don’t plan on transitioning12). I hate the hair all over my body, and only the futility of fighting it lets me leave it grow out. And when it does, people13 comment on how masculine I look. That kinda kills me.

It’s those kind of experiences that lead me to think that I need to do more in order to broadcast that it’s actually not nice for me to hear things like that; that is, the more work I put into appearing effeminate, the more obvious it will be that I don’t want those comments.

At times like these, I tend to think back to how this plays into heteronormativity14. I’m a bit lost. But I’m finding my way.

  1. Sorry if calling you that makes you feel uncomfortable (should you be reading this)! It’s more a reflection on that you exemplify ideals I strive towards but still fail at practising now much more than I succeed at them.

  2. Does anyone call them that? Just like you’re reading my web log now. Hah.

  3. I nearly used the word “inadequacy” here, but I’ll step out and say: I don’t have any such sense. I don’t feel inadequate in the role I play in anyone’s lives, and where it is close to that line, it’s in my own.

  4. This could have something to do with me being too embarrassed (or something?) to speak louder than a whisper when someone requests clarification on how to pronounce it.

  5. This applies equally whether it is someone else or myself applying the label.

  6. Tell me “what it means to be male” in 20 words or less.

  7. Fighting that, frankly, I’m lucky to be able to give a voice to; I’m sometimes painfully aware (probably not often enough) that the concerns of others are so much bigger than mine that it seems petty in ways to complain about them—but what, does that mean that no one with “bigger” concerns can experience gender dysphoria? No, of course they can; it just gets added onto everything else, too.

  8. (!)

  9. I love you, alot!

  10. Or unambiguously, and as some would say (and I would tell them to go stick their head in a pig), wrongly.

  11. ohnonothoseagain.

  12. Which seems to some people to be as much a part of identifying as trans as actually feeling you’re in the wrong sexed body, as evinced by a friend’s “you’re not actually going to go trans, are you?” when I told them that I was Anneli.

  13. Like my mother.

  14. Why is being effeminate a goal or desire for me? Because it is!

Or not.

I use a Kinesis Advantage at work. They’re great for RSI-like symptoms, and they’re also programmable. You can remap keys on the fly, and put together macros. This suits me great.

Recently I realised that I never used capslock, and that I used Ctrl-A a lot (in GNU screen), so the obvious solution was to map capslock onto Ctrl-A, consistently saving me a keystroke. I could do this fine with a macro on the keyboard itself—but as it turns out, as long as you have at least one keyboard macro defined, the entire keyboard becomes sluggish and drops keys(!) at high typing speeds.

So, despite the promise of amazing programmability, the keyboard lets itself down here. I figured this shouldn’t be too hard to change in screen itself. Of course, I was wrong.

Capslock is a very special key in X, and it doesn’t appear to have any termcap-like name which I could bind to using bindkey in screen. Instead, you have to remap Capslock to something else entirely.

xmodmap lets you change key mappings—but you can only map one key onto another, not several. I’ll skip the entire story of how I got there, and give the solution instead:

xmodmap -e 'keysym Caps_Lock = Super_L'

Put this in your .bashrc or somewhere else where it’ll get executed on startup. Here we change Caps_Lock to instead behave as Super_L. If you actually use Super_L (winkey?), you’ll be in trouble.

XTerm*vt100.translations: #override \n\
    <Key>Super_L: string(0x1b) string("z")

Add this in your .Xresources file. This causes Super_L to instead emit an escape key followed by ‘z’ in xterm. I picked that pretty much at random, but no existing VT100/ANSI escape codes seem to use that. We could just use Caps_Lock here (and skip the xmodmap), but that would result in the shiftlock still being toggled (in addition to our desired action).

If you don’t use xterm, add it to the appropriate resource.

bindkey -d "^[z" command

This goes in .screenrc, and causes the emitted escape sequence on Super_L (Caps_Lock) to act as the command sequence for screen.