Archive for September, 2008

A certain kind of isolation


Written again during the wee hours of the morning, when I hit a wall and decided to take a half hour to think about my work habits.


In the “what took you so long?” department, I’ve started to actually acknowledge something that I came to grips with last year; I work better when I’m alone. Well, that’s not quite right. Restate: I work best when I have access to a certain kind of isolation. I need easy access to people, and I need to be around people once in a while, but I also need a space that isolates a small number of distractions I can bounce between.

A good workstation for me – I had this sophomore and junior year at Olin, and the lack of it for senior year might be one explanation why I was So Darn Jittery and couldn’t focus on my work sometimes – is having a piano and a computer and a reading-space (desk, couch, bed) all together in a corner so that I can quickly swivel between stations. To this I’d now add “and my drumset!” for the fourth wall of the playpen.

It’s occasionally hilarious to watch me work. I have frequent long moments of focused intensity during which I CANNOT BE DISTRACTED HOLY COW because things outside whatever I am working on (or reading) don’t even exist; it’s like a thick white mist blankets out the world that’s not in front of me. This is pretty boring to watch. I’m just doing the same thing for a long, long time.

The hilarious part looks like this: My first year at college I would literally have to run around my dormitory building – in pajamas in the snow, if that’s what I was wearing at the time – in the middle of a take-home exam before I could sit down and write and think straight for the next question. When I had that piano-on-one-side, computer-on-the-other setup, I’d pause mid-sentence in an essay, whip around, crash through a couple random chords or a scale, then finish typing the sentence. In high school I’d hop between coding at my desk and sitting on the radiator sketching, reading, or just looking out the window, and then back, in less than 15 minutes. Or I’d throw my chair off to the side and do 10 situps under my desk for no apparent reason (it’s not like I’ve ever had any sort of workout plan – I just needed to move), then get back to studying.

So I need to interrupt myself and mode-switch sometimes to reboot my brain on $ImportantTask. Maybe that’s why I had the habit of reading multiple books simultaneously as a kid. I’d have at least 4 or 5 open books strewn around the room, sometimes two or more books simultaneously open on my lap – and I would switch between them whenever I felt like it (which I think was apparently at random).

I remember grownups (teachers, older relatives) asking me, multiple times when I was still in elementary school, “don’t you get confused reading all those books at once?” I also remember how strange I thought it was that they would even ask that question. Why would you get confused? Wouldn’t it make less sense to keep on pushing through the same book when you hit that invisible wall of can’t-do-this-any-more-ness? Much more effective to go, read something else for a chapter, then come back a couple minutes later and continue. They’re different books. You can’t possibly mix different books up in your head. Right?

The problem comes in when I can’t control the way in which I interrupt myself. I am incredibly distractable, and once I start doing something new, I forget the previous thing I was doing. Hence the inconsistently applied habit of placing reminders in places I’ll walk smack-bang into; sticky notes on my monitor saying what I was doing before I went to lunch (problem: I may forget to come back from lunch), writing notes on my hand, leaving a text file with “REMEMBER!! YOU WERE DOING THIS!!” up on my screen…

If I have relatively few distractions to pick from (work1 + work2 + piano + book, for instance) it’s easy for me to figure out what I was doing. There aren’t that many options. But when people start dropping in and giving me an unlimited number of distractions from the outside, I quickly lose track of where I’ve been or what I should be doing. That’s why I work well from home if I’m alone at home (or with people who are doing their own thing in the same room), or if I’m in my room or something. And why I work well in situations where my role is that of a bounce-between, and it’s up to someone else to keep a mental stack – like teaching, where I can hop between students and they’ll keep themselves in some sort of queue until they’ve got their problems fixed so I don’t have to worry about forgetting some.

Also, I worry sometimes about distracting other people with random moments of music and pushups and running through the hallways with face paint on in the middle of exam period. Having a private workspace fixes this somewhat. I really do like being around other people when I work, though – maybe I just need blinders… ideally there’d be a big red button I could press to bring a Big Magic Shield down around me for “I need to have no external interruptions” time, and then press it again when I’m through with that period and can be surrounded by humans of interestingness without a productivity drop.

A good routine – the one I inadvertently settled into at TOPP, and may settle into here at OLPC as well – is waking early, working from home before lunch, going to the office for lunch and meetings in the afternoon, (there is a part formerly/currently missing that involves Not Being In The Office all through evening, getting sunlight, cooking dinner with friends, that sort of thing), and checking in from home in the evening and cleaning up whatever small or urgent tasks have popped up in the meantime. (And then there is the other missing part involving relaxing before bedtime and then going to sleep.)

Speaking of which, I should get back to work.


Burning the midnight oil


From 14 hours ago, when I was at the office (and had been for… oh, 6 hours, maybe.) I’m still at the office. Don’t worry; I’m leaving for dinner soon.

It’s half-past-two; I’m at the office, but I’m not the only one (Richard is in his lab). I’m taking a writing break in between going through test cases. I’m trying to read patches for the bugs I’m verifying as fixed to see how, exactly, you’d solve that problem in code. Maybe half the patches I read fall into the “Ok, I think I see how that works, but how the blazes did you figure out to put the changes there and that you needed to type that?” category. Then there are some that fall into the “…and to fix this, they used a Magic Tool that is Undocumented According To Google” category. I need to start making a note of those black boxes so I can ask about them when we have some free time* after this release goes out.

I can’t overhear side convos that fly between the engineers who work around me (I never have been able to), so this is my way of trying to absorb the notion of “how things are done.” That, and I read IRC channel logs for as many OLPC-related channels as I can, as close to every day as I can, and attempt to piece together fragments of the conversations there into some sort of “I should learn from this” thing. Tentatively, slowly, I’m starting to ask questions. (I am very shy. The hyperactivity just occasionally looks like chutzpah.)

*free time? At 1cc? I swear we have… some of that… sometimes…

The nice thing about concentrating on absorbing is that you don’t have to worry about learning too many things at once; you touch a lot of different things, not much in depth, but you see what goes by. I need to find a way to balance that with the “I want to take an afternoon and sprint on learning X” thing for the list of X’s that I’ve compiled so far. I think I’ll think about this post-release, though. Only a few more days.


Reactions to Mark Pesce’s keynote


Vinay’s response to Dr. Horrible was the only one that made me stop and think amidst all the “that’s hilariously cool!” reactions I’ve seen about it (it is tremendously amusing). I will also note here that the Evil League of Evil is accepting applications.

Just read Mark Pesce’s keynote on hyperconnectivity. It definitely reads better as a speech than as a long written strand of text, but two ideas stood out to me. One was what Mark said about the need for social contextualizing tools, mental prostheses that prompt us to remember our now more-numerous-than-Dunbar relationships.

I was surprised by the alacrity of my knee-jerk reaction to that passage, and how negative it was. After all, I use tools like that all the time; we all do. My calendar reminds me when my friends’ housewarming parties are. I search my inbox to backtrack through conversations to get context before shooting off email replies to questions. I don’t have a Rolodex, but I pick up stubs of dead trees at conferences to remind me that I want to follow up with an acquaintance, and shoot coworkers messages on IRC asking “who’s that person on the left of so-and-so?” during meetings. I can’t hold everything I do inside my mind alone, and the way I show I care about something is by making it so that my system – not just my brain – remembers and responds to it the way I want it to.

Technology enables more people to effectively harness hyperconnectivity, but people are still the ones that have relationships. I’m hesitant to say “it all comes down to intentions,” because it seems like a rhetorical cop-out, but in a way, for this, it does. In terms of faking what ought to be a real human contact moment, sending out Christmas cards to people you no longer know or care about is worse than having a little cheat sheet pop up on your screen when someone you want to connect with, but haven’t seen for years, opens your office door.

The second part that struck me was Mark’s description of how he inadvertently – and unwillingly – found himself expected to start a carrier service. He’d complained about the current poor service, floated the idea of a community-run one, and basically got hit with tons and tons of people saying (but non-explicitly, which makes it worse) “That’s a great idea! I want this, but I’m not willing to put in my own time to make it work out. I do expect you to step up and do it, though.”

My first response: “Well, that sounds awfully familiar.” (Insert anti-apathy “do I have to do everything around here?” gripe here – pure indulgent self-pity, since I do know many, many people who Step Up and Make Stuff Happen.)

My second one: “Wow, what an awesome opportunity.” Large numbers of people who have a problem they want solved without work on their part – now, where I come from, we call these kinds of folks potential customers and partners. And they’re giving you their contact information. And telling you they think that you can solve their problem, fill their needs. If you can fix the thing that Mark (and I) complain about – making people understand that a solution to their problem has an (opportunity, not necessarily monetary) cost, but that this cost is worth it and that they can and should pay it,then…

…then I’m essentially saying “Yay! We’ve solved the tragedy of the commons!” That’s like saying “I found a way to open this unopenable vault door! All we have to do is find the key!” The problem’s still hard, but it’s rephrased, and maybe now we can tackle it from a different angle. (Not that this rephrasing is original; the business world has been trying to convince people to pay for stuff for years.)

So now there are two not-particularly-well-formed questions going around my brain. First, what do we want (or not want) from our relationships that tools can and should help us with – and what can’t and shouldn’t tools help with in terms of how we understand and what we do with other people? (Does it make a difference if that tool is purely mental – for instance, mnemonic devices?)

Second, if you want something but don’t want to pay for it, what are your options?

I need to nap. I’ll nap on this.


Forging a software development community


Mitchell Charity, a long-time OLPC volunteer, recently posted some interesting thoughts on our development community. I quote:

This wiki should be replaced. Groups of pages need to be owned by individual people. Only they can write to them. If you wish to contribute, you should email them patches. If you wish to create your own pages, you should fill out a form, and email it to the wiki administrator. What? You what? You think this profoundly misguided? Disastrous? Sure to stop wiki development dead in its tracks? Certain to dissipate and prevent formation of a wiki development community? Well, yes. Of course. That’s exactly what it’s done for the activity development community.

Seth asked for specific descriptions of what Mitchell would like to see. He responded “gforge.” I’m curious what others have to say about Mitchell’s description of the volunteer development situation as well as the proposed toolfix.

Here’s how I’d phrase the question as it stands: How can we optimize a system – technical and social – that gives us the largest and most varied pool of stable, volunteer-maintained, open-source, kid-hackable educational Activities possible? Gforge, workshops, bounties, documentation, toolchains, access… through any means possible, how would you maximize the number of Activites that meet the above criteria?*

Secondary: There are always reasons why things are the way they are. The question is whether those reasons and tradeoffs, deliberate or happenstance, still make sense given the current situation and the (always) limited resources available. Is this what we should be optimizing for, and how high-priority compared to other goals should this optimization be to whom?

*Note: I wanted to post a link to Walter’s criteria for good Activities here, but couldn’t find it – does anybody know the URL?


Find Mel (100 points)


The fog was thick this morning. I looked out across the bay on my way to the T, and there was no Boston on the other side – just blank white mist. It thickened and fell as I was biking out from 1cc to get batteries for my new portable recorder, and I ended up sloshing through the streets of Cambridge clutching a package in one hand, blinking the rain out of my eyes, and streaming water behind me as I lashed my bike to the nearest post and went back up into the office. I love rain.

And then the random phone calls started.

Well, not so random. Apparently one of the questions in the Olin scavenger hunt this year was “Find Mel (100 points)*.” The probable backstory to this: at Olin I acquired a reputation for being everywhere at once and simultaneously impossible to track down. After two years of playing answering machine, my suitemates proposed posting a sign by the door:

  1. No, Mel’s not here.
  2. No, we don’t know where she is.
  3. We also have no idea when she will be back.
  4. Yeah, we already tried calling her.
  5. We recommend you leave a message on the whiteboard.

I actually think it’s easier to find me these days; I actually answer my phone and have a home and office that I use. In any case, over a year after my graduation, this was apparently still an interesting enough challenge. I’ll also note that this was totally not my idea and I’d been given about 24 hours advance notice by Greg and Ellen (who, as far as I can tell, are responsible for the question in question).

The night I’d heard about it (read: yesterday), I sent Olin’s OLPC mailing list a “by the way, there’s a MassXO meeting Saturday morning” note by way of a subtle hint of where I might be findable for small slivers of the day. While criss-crossing Boston (I did not alter my usual habits or travel patterns at all for the event) I got 2 emails, 3 voicemails, caught 4 phone calls, missed and tried to return 8 more phone calls, and was ultimately found by 2 teams (out of… I have no idea. More than 2.)

I wonder how the rest of the scavhunt went, and who won, and how confused the freshmen on the 2nd team to find me were. (“Why are we hunting down this random person? Who the heck is Mel?”)

Just for fun, here’s a list of T stops you could have found me at throughout the day. This only counts stops I got on or off at or stops I locked my bike near, meaning I was actually in the immediate vicinity of the T stop doing something for a reasonably substantial chunk of time. All things considered, this was actually a pretty uneventful day without a bloody lot of travel.

  1. 8am: Maverick
  2. 9:30am: Kendall
  3. 10:30am: Central
  4. 11am: Kendall
  5. 12:40pm: Central
  6. 1:15pm: Symphony
  7. 2pm: Heath
  8. 3:45pm: Symphony
  9. 4:10pm: Kendall
  10. 6:30pm: Maverick

unordered paths and ASL


Gui reminded me that it’s possible to be ready for things you haven’t specifically prepared for. (Thanks, Gui.) I also had my first real ASL conversation in many years. Well, “real” “conversation” in that I could catch pretty much all of what Ian and Lissa were saying and I could get across my point by fingerspelling the many words I didn’t know.

Though I call myself hard-of-hearing, I feel like (and probably identify most with) a hearing person trying to learn about the deaf community andthis language that they use – I just happen to be a hearing person who… can’t really hear. (For instance, when someone’s signing and they have an interpreter speaking the words they’re  signing out loud, I can’t understand the ASL or the interpreter’s voice alone – I lipread the interpreter.) Not sure if there’s a proper name for this – “hearing on the outside, deaf on the inside?” Or the other way around?

Cscott has been experimenting with unordered paths in a gloriously casual, fun, and quirky way. I have coworkers who think like this. All the time. How did I get so lucky? I also really want to try tackling this ticket. It’s things like this that keep me plugging through weekends like this – 6 hours from now I’m going to be back in the office testing. Well, it’s only one more week until release. A little less, even.

I keep wanting to go back to my 11-year-old self and say “No, really, kid, you’re going to be okay – there is a place where you can fit into the world. It’s called Boston.”


Media snips I collided with today


Strongbad is wrong. Pouring Mountain Dew on an XO’s keyboard is highly unlikely to make it (1) shoot sparks or (2) break. (Thanks to Seth for the tip!)

I also now know what type of notebook-writing pens to get next, thanks to Jerzy.

And then there’s this new addition to my feed reader – an international development blog I got from Chris.

I should restart reading varied random things for edification and to share with other people. Hrm. Currently halfway through a book on adolescent psychology that runs counter to my own views on the topic (I like these kinds of books a lot; when rationally and calmly written, they make me consider topics from a different angle).

I have a sound recorder! I’m going to use it heavily over the next few days, carrying it around beside my paper-notebook to get used to taking (and listening to) notes in audio. Part of my self-imposed ear training. Remember, Mel: you’re not completely deaf. Recalibrate those expectations of what you can do with non-visual communication. They’re probably better than you think they are. Or maybe they’re worse. We don’t know; we’re just making assumptions.

Let’s find out.


pianopracticer.py


Oh. This is how I practice piano*.

#!/usr/bin/python

# Prints a new random chord to play every 5 seconds.
# This could be made more generalizable/hackable/useful, yeah. I'm lazy.

import time
import random

basenote = ['A','A#','B','C','C#','D','D#','E','F','F#','G','G#']
chord = ['major','minor','major 7','dominant','minor 7',
       'minor 7 flat 5','diminished']

while(True):
    print random.choice(basenote), random.choice(chord)
    time.sleep(5)

*The “I need to learn chords, keys, and how to sightread them from a fake book” bit. There’s also the part where I’m reworking my Schubert impromptu, and the part where I’m actually going through Hanon to get back my technique. I am mindful that drilling != music and the latter is what I need and want to learn, but this is the equivalent of doing pushups – I’m trying to get the actual muscles of my fingers built up again until they hit keys evenly, because I physically can not play pieces well until they are.


Looking for pei pa koa


Super 88 no longer carries pei pa koa, a Chinese herbal cough syrup whose name I’ve just misspelled and which is my drug of preference when allergies have filled my lungs with gunk. On the up side, the more time I spend outside, the happier my respiratory system seems to be, despite the fact that Boston’s fliled with cars and noxious fumes thereof. Some of the time I spend outside involves sunlight. I do enjoy this self.take_care_of() upgrade thing.

When not draining my lungs this weekend, I put on my masochistic stoicism and wandered around pika, town, my roof deck, and our living room with some combination of Eric Munsing, Matt Ritter, Chris Carrick, and excellent conversations. This was followed by a Saturday morning cooking spree, the highlight of which was an improvised caramelized onion and sweet carrot soup (mmm, cumin) and a birthday celebration for my cousin Audrey, who turned 5 yesterday.

Sunday I read Catcher in the Rye and The Good Earth (did not much like the first – reading Holden’s voiceover narration makes me want to punch the kid) before having lunch and heading to the office to work on a weekend, which I… I know I’m trying not to do, but did anyway. The evening was rounded out by running from band practice through a sudden rain to nubtalks, where an unexpected reunion with Mitchell Charity led to me sitting on a cushion on Matt Knox’s floor at 11pm watching him give Ethan a crash course in Ruby on Rails. (Matt is, by the way, a fantastic teacher, and an amazing Ruby evangelist.)

Monday was somewhat less productive. Non-drowsy cold meds… aren’t. So I was pretty foggy-minded and didn’t charge through as much work as I would have liked. So today I’m working from home – pretty stuffed up and phlegmy-coughy (hence the work-from-home… contagiousness sucks), but clear-thinking – and I think I’ll clear yesterday’s backlog and today’s to-do list before dinnertime, which feels good.


How to test for memory leaks


My desktop background at work. (And on my personal laptop as well.) Every child needs their own velociraptor!

We now have a howto on memory leak testing – many thanks to Tomeu for taking the time to sit with me through my first memory leak test case. If you’re curious how hungry various actions in Sugar are, take a look. We have some memory leak bugs like #8394 that need test cases and testing, too, if you want to lend a hand.

I also started a section for test setups, which are shorthand references for actions that we do across many tests. It’s annoying to have to retype “first, take a USB stick…” or “if you don’t have this installed, wget this file…” dozens of times over, so we say things like “set up for a smoke test” and give a link to general smoke test setup instructions. This section is a stub right now; what other things should go in here?

Got some slightly confusing battery test results from yesterday’s run. Most of them performed as expected, but a couple had logs that terminated when the battery wasn’t even halfway discharged. I’ve also got a setup trying to reproduce #7893, which, if fixed, will be a triumph because it means your Neighborhood view will actually reflect the things present in your Neighborhood (instead of having Activities from no-longer-present XOs hanging out like the Ghost of Christmas Past). Fingers crossed.

For the record, according to our current test case management system, we have the following coverage…

  • Test cases we know should exist (i.e. stubs OR cases created): 59
  • Test cases actually written (i.e. cases, not stubs): 51
  • Test cases run: 25 (42.4% of test cases that should exist)
  • Test cases run and passed: 18 (72% of test cases run, 30.5% of test cases that should exist)
  • Test cases run and failed: 10 (40% of test cases run, 17% of test cases that should exist)
  • Test cases run with both passes and fails: 3

Clearly we need better test case coverage… and a better way of showing testing coverage, progress, results, and all that jazz. This is what we’ve got now. Suggestions? Ideas?