On keynotes and apologies

Posted by Chris Ball Fri, 25 Sep 2009 21:35:00 GMT

I wasn't going to blog about this, but I'm becoming pretty angry about it now, and I think I might actually have something constructive to say.

Here's the story: Mark Shuttleworth gave a keynote at LinuxCon, which I attended, in which he said lots of reasonable things and one very unfortunate thing. Paraphrased, he said that if we did a better job at considering our non-technical users and accepting help from expert UI designers, we'd have an easier time "explaining to girls what we actually do". (By girls, he meant women, not female children.) I'd like to be able to provide a direct transcript when critiquing his words, but the LinuxCon organizers don't seem to be willing to make the video available for free, so I can't do that yet. I'll link to it as soon as it's available.

Before I get started properly, I want to make it clear that I like and respect Mark Shuttleworth. I regularly use and recommend Ubuntu to other people, and am very glad that he's doing what he's doing in the world. There's no personal animosity or ill will behind this post at all.

It's actually not just the Ubuntu distribution that I recommend: I'm also hugely impressed by the Ubuntu Code of Conduct, which was a groundbreaking document at the time it was adopted, and made it clear — for the first time — that there is a free software community that is willing to put a stake in the ground and say that it's not a place for people who want to communicate by disrespecting someone else, or another group. I think the Ubuntu community is one of the most tolerant, welcoming and diverse free software communities we have, and I'm sure that this is a reflection of Mark's own thoughts on the matter.

So, back to the keynote. Kirrily Robert heard about this statement of Mark's from Emma Jane Hogbin's transcript in a conversation on identi.ca, and wrote an e-mail and blog post asking Mark to apologize and clear this up. Sam Varghese now has a blog post attacking Kirrily Robert, because Kirrily based her objection on someone else's transcript of what was said rather than being there herself.

Well, I was at the keynote too, and was paying attention, and it turns out that even with context applied, someone who talks about "explaining to girls what we actually do" when talking about free software really is saying something sexist, and buying into the noxious stereotype that women can't be developers or tech-savvy; that they'll never be a real part of our group, even if a few of them are brave enough to try in the face of other people dismissing their efforts (and Mark certainly isn't the first to have done that).

This statement actually wasn't the first exclusionary thing Mark had said in the talk, in my opinion. Earlier he attempted another joke about how when he talks about "releases", he doesn't mean "release" as in "happy ending". The joke didn't go over very well, and he made a comment about how it must be because we were tired and not listening properly. Actually, I was confused because I already felt pretty sure that he was talking about software, rather than male orgasms and hookers, because that's supposed to be a safe assumption to make during a technical conference keynote.

So, Sam Varghese can stop claiming that Mark's statement wasn't sexist because no-one in the room found it sexist: there's no doubt in my mind that it was a sexist thing to say, and I was there.

Varghese tries to paint himself as a martyr, saying that he's "sure he'll be shouted down too" for denying sexism, but it's actually extremely, overwhelmingly common to attack the person who points out sexism in free software communities — common enough that Matt Zimmerman, Canonical's CTO, has an excellent blog post on the subject: Backlash: feminism considered harmful. The backlash is so strong that if Kirrily were just an occasional contributor, I'd be thoroughly unsurprised if the kind of attacks she's receiving drove her away from free software completely. She's been in the community for long enough, though, that she's willing to put effort into calling out sexism even though she'll be attacked and ridiculed for it by people who think that there's nothing wrong with the situation. Thanks for not giving up in disgust and leaving us alone to enjoy our 1% participation by women, Kirrily.

Varghese finishes his post with:

"Shuttleworth has many faults, I'm sure, but one has to always assume that a person is innocent until proven guilty. If someone violates that basic rule, which should extend to every human on the planet, then that person is in the wrong."

Look, we're not talking about a trial that attempts to judge whether Mark is a good or bad person; we need to move past the idea that someone who said something sexist is "guilty" or deserving of punishment. Kirrily's letter, after all, didn't ask Mark to apologize for being a sexist person (which I don't think that anyone involved actually thinks is true), it just asked for an apology for one sexist thing he said. I don't know anyone who doesn't behave in sexist ways sometimes, because it turns out that discarding privilege is really goddamn hard, even when you're consciously trying to. We need to make it clear that someone who accidentally said something sexist is not "a sexist", or a bad person, or worthy of our contempt, or deserving of a ruling of innocence or guilt. I do respect Mark, and I still think he said something sexist, and if he apologizes for accidentally saying something sexist and says he'll try to make amends, that makes everything totally okay with me. We need to be able to admit when we say/do something sexist without it turning into something huge and unmanagable, because it's something that's probably going to happen quite a lot.

Matthew Jones also made a post defending Mark and I'd like to reply to that too:

"When Mark said try to explain to girls, he was not talking about women not understanding technology. He was talking about how hard the design work is to do, and that if things were designed poorly or had low usability, he would not know how to explain them to girls (my translation). The tone of his voice suggested sarcastic embarrassment, which implies he would prefer to impress girls."

I totally agree with the context of Mark's statement provided, although I don't at all see how that's "not talking about women not understanding technology". The statement is still as exclusionary a statement given this context — the fact that Mark may like to impress women doesn't excuse that his statement thinks of women as a synonym for "people who don't understand how software works"! That's a really destructive phrasing that we should all reject. It's not hard to substitute "the average person" or just "people who aren't as interested in computers as we are" and turn the statement from exclusionary-to-women to gender-neutral.

Here are some of the arguments made against asking Mark for an apology in the comments on Kirrily's blog post:

Mark is a nice guy. I agree! However, when someone (metaphorically, perhaps) steps on someone else's feet accidentally, you expect them to say "Oops, sorry." regardless of how nice a person they are; that's just not relevant to the fact that someone else is hurt and it's their fault. If they refused to apologize for it, that might change your idea of how nice a person they are, but the fact that they hurt someone unintentionally doesn't have any bearing on whether they're a good or bad person in the past or in the future. It's just a thing they did that they should apologize for.

Mark wasn't trying to offend people, he was just making a joke. I agree with this too, but making a joke doesn't stop the words we choose to tell the joke with from having power.

And, perhaps one that I'm expecting to see in the comments on this post:

Hey, you're not a woman, so you can't be upset about this. I think that actually helps, in this case. Sam Varghese used a lot of very loaded words like "emotional" and "irrational" in his rejection of Kirrily's post that I think were an idea of his that she shouldn't be able to complain about this because she's a woman. I don't agree with that restriction, of course, but I'm happy to help remove it from the discussion.

Finally, I want to repeat that for me the real shame here isn't that Mark said something unfortunate — we can all say something unfortunate when we're speaking in front of a large crowd for a long time, myself certainly included. What's a shame is that it doesn't take a superhuman dose of empathy to give a short and sincere apology for an obviously harmful joke afterwards, yet we don't have one yet. To make matters worse, it's the second time in a few months that someone's implied that women are people who lack technical knowledge during a conference keynote, and it seems to be the second time we aren't getting any kind of apology for it. We're left to conclude that the biggest heroes in free software — the people who speak for and about us to the world — don't care much about whether women feel invited to or excluded from free software, or how they could use their power to affect that.

137 comments

The Best Card Trick

Posted by Chris Ball Thu, 17 Sep 2009 06:21:00 GMT

I gave a talk on The Best Card Trick at the Boston Haskell meetup tonight, and then we implemented the technique together in Haskell as a group. Afterwards, we compared our program with this one that my friend Mark Carroll wrote a long time ago. Here's a summary of the trick from the paper's abstract:

You, my friend, are about to witness the best card trick there is. Here, take this ordinary deck of cards, and draw a hand of five cards from it. Choose them deliberately or randomly, whichever you prefer — but do not show them to me! Show them instead to my lovely assistant, who will now give me four of them, one at a time: the 7♠, then the Q♥, the 8♣, the 3♦. There is one card left in your hand, known only to you and my assistant. And the hidden card, my friend, is the K♠.

In even-more-mind-blowing news, today John McCain gave a talk about OLPC.

Tags , ,  | 1 comment

Ciudad de México

Posted by Chris Ball Tue, 01 Sep 2009 16:31:00 GMT

Mad and I just got back from a fun two-week vacation — the first week was spent in Mexico City, visiting Mika and Mako and meeting Gunnar and Carolina for the first time, and the second week in Peru with Mad's family: Ayacucho, Cusco, Machu Picchu and Lima.

We spent a while working out a long list of stuff to do in Mexico City; here's the list of what we did, together with Mad's photos, in case you're interested in having a fun vacation in Mexico City too.

Saturday:

Sunday:

  • The Zócalo (photos)
  • Templo Mayor (photos)
  • Palacio de Bellas Artes (photos)
  • Shopping at the Centro de Artesanías La Ciudadela (photos)

Monday:

Tuesday:

Wednesday:

  • Xochimilco (photos)
  • drinks at a mezcal bar in Condesa (photos)

Thursday:

Friday:

Tags , , ,  | no comments

Teaching old code new tricks

Posted by Chris Ball Mon, 06 Jul 2009 22:58:00 GMT

ExploreTree

Over the July 4th weekend, I found time to release the tree visualizer that Mad and I wrote for the Processing Time code jam a few months ago. Mad's worked on it some more since the code jam, adding a search function, options for specifying font size and the tree depth shown, and a link from each node to its Wikipedia page. The program's available as an applet now, at:

http://exploretree.org/

Feedback welcome, especially if it doesn't work for you and you're able to figure out why.

Bugs Everywhere

Bugs Everywhere, everyone's favourite distributed bugtracker, has been seeing a decent amount of work lately thanks to some strong efforts:

It's nice to keep momentum going on some small projects. Counter-intuitively, I think it's much easier not to get tired of programming when you're working on code for work and different code outside of work, than when you're just concentrating on the code for work.

Tags , , ,  | no comments

Microfinance in Ayacucho

Posted by Chris Ball Sat, 27 Jun 2009 04:17:00 GMT

My awesome sister-in-law Suzy is in Ayacucho, Peru, volunteering for Kiva for around nine months. One of the difficulties with poverty relief charities is that people feel a disconnect between their donation and the result, and Kiva works around this problem by personalizing the process of making a loan to a specific entrepreneur. Kiva also empowers recipients by organizing loans that the recipients are expected to pay back.

Suzy's working with a local microfinance organization, interviewing potential borrowers and uploading their profiles to the main Kiva site for lenders to see. She's posted three times to the main Kiva Fellows blog now, and I hereby humbly present her posts. You should read them.

(Updated on 2009-07-22 to add the third link.)

Tags ,  | no comments

XO-1.5 bringup

Posted by Chris Ball Sat, 06 Jun 2009 14:12:00 GMT

Back from Taipei, and appropriately jetlagged, after a successful bringup of the XO-1.5. The bringup team did some interviews for olpc.tv while we were there, including a demo with Fedora 11 running on the new board. There are interviews with John Watlington (hardware), Richard Smith and Mitch Bradley (hardware/firmware), and me (software), which I've embedded below.

Thanks to Charbax for recording the interviews! Was also wonderful to see the new Pixel Qi screen — I'm looking forward to seeing it on mainstream laptops in the coming months.

Tags ,  | no comments

Jorge Cardoso - Milonga

Posted by Chris Ball Tue, 19 May 2009 03:47:00 GMT

I'm off to Taipei to help with the XO-1.5 bringup. Before I go, here's a new guitar piece — the milonga is a Uruguayan relative of the tango.


Jorge Cardoso, Milonga (youtube, download)

Tags , ,  | no comments

The OLPC XO-1.5 and Fedora 11

Posted by Chris Ball Sat, 16 May 2009 02:20:00 GMT

Some good news from OLPC: we've decided to base the new XO-1.5 laptop's software release on Fedora 11. Unlike previous releases, we plan to use a full Fedora desktop build, booting into Sugar but giving users the option to switch into a standard GNOME install instead. (This will mostly be useful for older kids in high school.)

I'm particularly happy about this plan because it will allow us to catch up with the awesome work present in the Sugar community's most recent release, Sugar 0.84, as well as merging the latest Fedora work and including GNOME into the mix for the first time. The new machines will have 1GB of RAM and 4GB of flash, so we have enough room for both environments at once.

We think we'll need to use our own kernel and initrd, but the other base packages we expect to need are present in Fedora already, including Sugar; in fact, we already have an F11+Sugar+GNOME build for the XO-1 using pure Fedora packages. That build will get better as a result of this work (although OLPC's focus will be on getting the XO-1.5 running) and it will form the basis for the XO-1.5 build.

If you're interested in contributing, we'd certainly love your help, and you can find us on the fedora-olpc mailing list, and freenode IRC's #fedora-olpc channel. Our existing F11 build images for the XO-1 are here, and we'll soon begin publishing images for the XO-1.5 too. XO-1.5 beta machines will start to be manufactured over the next few months, and will be available to contributors as part of our Contributors Program once the hardware's up and running.

Finally, thanks are due to the volunteer Fedora packagers and testers who helped us get to the point of being able to commit to Fedora 11 for this new build, in particular: Fabian Affolter, Kushal Das, Greg DeKoenigsberg, Martin Dengler, Scott Douglass, Sebastian Dziallas, Mikus Grinbergs, Bryan Kearney, Gary C. Martin, Steven M. Parrish, and Peter Robinson. Thanks!

Fedora 11 Preview running on the XO-1

Tags , , ,  | 7 comments

Processing Time

Posted by Chris Ball Sun, 03 May 2009 15:28:00 GMT

Madeleine and I took part in the Processing Time code jam yesterday, and won a prize! Processing is a programming language for creating data visualizations, which Mad's been using to create graphs for papers recently. Our entry was a program that takes a description of a tree (in Newick format) and draws it, allowing you to zoom in to explore large trees.

The example we used, and the motivation for creating the program, was the phylogenetic tree of life. Since creating this comic, Mad's wanted a way to create a zooming interface to explore the same, but we didn't get around to it until we were put in the setting of having four hours to code and then present something. It was a lot of fun; I did the boring part of walking a tree recursively, and Mad worked out the geometry for a radial graphing algorithm that splits points along the edge of a semi-circle equally between end leaves of the tree.

For now, the code's in this Processing sketch archive, but we're hoping to make an applet out of it soon. Hat tip to the authors of TreeJuxtaposer, whose Newick format parser we used.

Here's the obligatory screenshot — zoomed in on part of the mammals section — which isn't very exciting since the whole point is to explore the tree interactively:


Thanks to the organizers and other participants for such a fun day; it's great to be given motivation to work on something fun, and lovely to be recognized for it too.

Tags ,  | 6 comments

Classical guitar

Posted by Chris Ball Sun, 08 Feb 2009 03:35:00 GMT

I've been pushing myself to record and upload more classical guitar pieces lately. Part of my motivation is that it's been a long time since I saw my parents and brother, and guitar music's a nice thing to share with them from afar.

Here are three pieces — if you're sort of person who cares about copyright licenses, you can consider them CC-BY-SA:


Tárrega, Prelude No. 1 (youtube, download)



Barrios, Gavota al Estilo Antiguo (youtube, download)



Tárrega, Endecha (youtube, download)

Tags ,  | 9 comments

Multi-pointer Remote Desktop

Posted by Chris Ball Mon, 26 Jan 2009 05:10:00 GMT

Remote desktop is a pretty useful technology. It would be more useful if it wasn't so competitive, though; when someone joins, the sharer has to sit back and watch, or fight over who gets control. Well, now it's cooperative — here's a video demo:


Download the video (23M)

I should make it clear that I'm responsible only for the smallest piece of this work. Peter Hutterer's MPX is the core technology enabling an X desktop to have more than one pointer and keyboard present on it, and my work was modifying the Vino VNC server to make it understand how MPX works. As shown in the video, this requires no modifications to VNC clients — each client can become another pointer on your X desktop regardless of whether it's running on a Windows, Mac or other Unix machine, which I think makes the whole thing pretty compelling.


My patches against Vino are here, and this is a complete summary of them: for each new client that joins, we create a new keyboard/pointer pair and store its details with that client, then when new events come in for a client we send them through to the appropriate device. That's all. This is still prototype code, so there are bugs, the most noticeable of which is when you have more than one client connected, each client can only see the pointer of themselves and the server, although the server can see everyone's pointer; this will be fixed by having vino_cursor_update_timeout() and parents act on a list of cursor positions rather than a single one. (Ideally, GDK should become aware of multiple pointers, too.)

The next steps are to fix some bugs and get the code upstream into the main Vino repository, so that it's ready for when the distros start shipping a multi-pointer X server — one way to do this would be to have Vino's preferences check to see whether your X server supports MPX, and ask you to choose between sharing your main pointer or granting extra pointers to new clients if it does.

The original motivation for this work, besides it being a useful-sounding idea in general, was as an experiment for a collaboration model for OLPC. A very intuitive way for writing collaborative applications would be to make programs that don't have to understand anything about networking, but do have the idea that there's going to be more than one pointer and keyboard around sometimes and that they should be treated differently, just like when using a games console with multiple controllers.

For example: to write a collaborative text editor using this model, you'd want to color the text written by each participant's keyboard differently, but other than that you don't need to care about any details of networking. (You'd want an out-of-band way for each participant to get a copy of the file they were working on afterwards, though...)

I'd be interested to hear any other use cases people could imagine. If you want to give this a try, you need an MPX-enabled X server (which you can get from Xorg Jhbuild) and window manager (such as compiz), and you'll need to apply my Vino patches. Enjoy.

Tags , , ,  | 22 comments

Response to "Ten easy ways to attract women to your free software project"

Posted by Chris Ball Sat, 18 Oct 2008 06:34:00 GMT

About a month ago, Free Software Magazine published an article that looks into the reasons behind the dearth of women joining free software communities, and makes concrete suggestions about what to change to improve the situation. While I think the article was well-intentioned, I also think it was confused, and promotes recommendations that buy into many of the sexist stereotypes that we should be trying to combat. I haven't noticed any negative responses to the article, so I decided I should write one.

It's an odd situation for me to challenging another man's writing as sexist. It can be hard for women to challenge sexism owing to accusations of overreaction, and on the other hand it can be hard for men to do the same owing to a perceived lack of standing in saying what's offensive to women; I don't have a defence for this, other than that I showed drafts of this post to a few women in technology and will invite more to leave comments with their own thoughts after I post. Here's what I found objectionable about the article, going through some of its bullet point list of recommendations:

  • Use forums instead of mailing lists

This suggestion doesn't make sense to me. I agree with the author (and the many people who have said this before him) that women are turned off by an ultra-aggressive alpha geek style of conversation, but the solution isn't to "use forums", it's to stop using and encouraging these destructive behaviors. We might retitle the suggestion to "When considering flaming someone, don't." If you need an example of how moving to a web forum doesn't make the slightest bit of difference to how respectful a conversation is, consider the average comments in a Slashdot thread.

A point the author doesn't make — but which I find compelling — is that it's not just women who are turned off by aggressive conversation modes, it's anyone who doesn't want to take part in the alpha geek mentality. By making an environment that is more welcoming to women, we make an environment that is more welcoming to everyone except a loud subset that we're currently optimizing for.

  • Avatars create a face-to-face-like feeling that encourages "more human" behavior

Advocating avatars because they're "more human"? Are we talking about women or children here? Women read more books than men. Women are perfectly capable of and comfortable with engaging in purely written communication, most likely moreso than men. This insinuation of a childish need for needing cartoons to create a "face-to-face-like feeling" seems extremely insulting.

  • When possible, wikis instead of version control archives

I'd love it if I could find more solid reasoning behind this than "wikis are friendly and version control is complicated and women like friendly things and don't know how to do complicated things so we should use a wiki for version control even though that doesn't make any sense", but I'm not seeing it in the article. Ugh.

  • When possible, high level languages

Ditto. For example, the FLOSSPOLS report contains a study that compares the programming ability of men and women taking college programming courses. It finds that women perceived their programming ability to be far lower than men perceived their ability, yet programming examinations showed ability levels to be equal between men and women at the end of the course. The problem isn't that women aren't smart enough for low-level languages, it's that we boast about how great we are at coding so much that we manage to convince women that they must not be as smart as us.

  • Replace pecking-orders with affirmation processes (thank you's)

"Women are more likely to want to discuss or seek approval for their changes, owing largely to confidence issues" is not a respectful thing to say. Who doesn't have confidence issues when joining a new group of people and submitting their first proposal or patch? We'd do well to thank our volunteers better regardless of their gender.

Oh, wow, I just noticed the photo of the sewing machine:

"Programming, like sewing, is largely a "tacit" skill, which is best learned by doing and by watching others."

Yes, because a comparison to sewing, which is apparently something the author thinks women seem to learn how to do really well, is totally appropriate. Good job. Full marks.

I think I just ran out of words. Please don't listen to the recommendations in this document. It actually uses good sources, even while it draws insulting conclusions from them, and the sources are worth reading. If you had to choose one thing to read about the (very real) reasons behind there being fewer women in free software, I'd recommend the FLOSSPOLS report, which is a large-scale academic study of the reasons women don't contribute more to free software projects, and is truly enlightening.

So, now that I've complained about the recommendations given, what would a replacement set of recommendations be? As well as the formal recommendations given in FLOSSPOLS, Val Henson's HOWTO Encourage Women in Linux contains a perfectly good set of advice. Note that one of the recommendations is (3.13) "Don't assume that all women like cooking, sewing, and babies". Note that this article attempts to make learning how to participate in a free software project more like learning how to sew.

38 comments | no trackbacks

An SSH public keyserver

Posted by Chris Ball Mon, 15 Sep 2008 05:36:00 GMT

I spent a few nights working on a web site recently — it's a public OpenSSH keyserver, in the style of the OpenPGP keyservers, and it's up now. I'd like to attempt to persuade you all to consider uploading your public SSH keys to http://sshkeys.net/, for a few reasons:

  • If you publish your public key, it's going to be easy for people setting up accounts for you in the future to find it, with a simple wget sshkeys.net/you@yourdomain.com.

  • If you manage machines, having your potential users upload keys to the site should save your time by making sure they get past problems like uploading the wrong file, since the site will tell them if they try to upload anything other than a public key.

  • There should be side benefits of having a large repository of SSH public keys: I think we would have detected the recent Debian/OpenSSL randomness bug sooner if we'd been on the lookout for unexpected duplicate keys, for example.

I used Django for the site and it was shockingly effortless, to the point where I didn't have to write any SQL or interact with the database manually. I wrote the following model, which says that there are Addresses, Keys, and combinations of Address and Key that have some extra fields like whether they've been verified against the supplied e-mail address or not:

class Address (models.Model):
    address = models.CharField(max_length=255)
    def __unicode__(self):
        return self.address

class SSHKey (models.Model):
    owners = models.ManyToManyField(Address, through='AddressKey')
    keytext = models.CharField(max_length=1024)
    def __unicode__(self):
        return self.keytext

class AddressKey:
    address = models.ForeignKey(Address)
    sshkey = models.ForeignKey(SSHKey)
    date_added = models.DateTimeField('date added')
    verified = models.BooleanField(default=False)
    token = models.CharField(max_length=40)
    token_sent = models.DateTimeField()

After that, it all just worked. The gap between having it all working in the Admin interface (time taken: 3 hours) and having it all working with production views was much larger, though. The Admin interface is full of beautiful widgets that are not at all re-usable in your production site.

The full code's available over at github (under AGPLv3). I'd be very happy to get patches to make it smarter, and let me know if you find any bugs. Thanks!

Tags ,  | 23 comments

An Openmoko bike ride

Posted by Chris Ball Mon, 11 Aug 2008 01:19:00 GMT

I've been having fun with new purchases recently: a new bike, and a Neo Freerunner phone from Openmoko. The phone is also my first GPS, and it's doing a fine job as one:

A bike-mounted Freerunner


Software for the Openmoko has come a long way since the previous model, with a pretty large community of developers building up. (I've tried to do my part by writing a patch to fix the touchscreen when the screen's rotated into landscape mode.) I'm particularly pleased with tangoGPS, which uses data from OpenStreetMap and has some great features: you can zoom out to enclose an area and ask it to download all of the map tiles inside that area for offline viewing, up to a specified zoom level (so, I now have map images for most of Massachusetts sitting on my SD card). You can also publish your current location and get a moving map of friends. It's written by a single developer, and I'd suggest making a donation to the project if you're using it — think about how much such an app might cost if it were running on the iPhone instead of the Freerunner!

The bike mount in the photo above is an Arkon CM927, which I don't recommend very highly; I've had the phone come off it (without major damage, which is good) twice now while riding over rough road. It should probably be strapped in separately, but that makes the whole thing less convenient. Let me know if you know of any better cell phone mounts.

Okay, on to the bike ride, which happened yesterday. It was a beautiful day, and we rode from Quincy Center to the beaches at Hull and back, with a few extra-fit people riding from Somerville to Quincy at the start. Here's a photo of the group:

At the base of Hull Wind 1


We've taken the ferry back into Boston harbor twice now (once from Salem and this time from Quincy) and the trip and harbor look fantastic around sunset.

Finally, here's a photo from tangogps:

Leaving Quincy Harbor on the ferry

Tags ,  | 16 comments

Wikipedia on XO!

Posted by Chris Ball Mon, 02 Jun 2008 17:37:00 GMT

A few weeks ago my coworker Scott made a post calling for Peruvian folk heroes to help OLPC out with infrastructure for our Peru deployment, and included a list of projects we'd like to work on. The post began like this:

Peru has ordered over 260,000 OLPC XO-1 laptops. These machines will be running Sugar on GNU/Linux. Forty thousand of these are already in warehouses in Peru, with Sugar builds 656 or 703 installed. That means over a quarter of a million kids will use Sugar/GNU/Linux in the next few months - and you can directly influence their lives! Your software, documentation, support expertise, ideas and insights can improve the education of a vast number of kids.

Wanted: Peruvian Folk Heroes. Will you become one?

From my perspective, the post was a big success. Later that day, Wade Brainerd — a game programmer and OLPC supporter — saw that I'd listed a Spanish Wikipedia snapshot on the list of project ideas and sent a mail asking for more details on the project.

The details are that recently Patrick Collison released a project called wikipedia-iphone, which is a GPL'd program that takes a compressed wikipedia dump (in particular, a single XML file compressed with bzip2), builds an index from each article title into the bzip2 block that stores it, and then allows you to retrieve articles by decompressing just the bzip2 block that's needed to get at the individual article's text. It's an awesome idea, and means you can be carrying around the complete text of a language's Wikipedia without using too much storage (480M compressed for the full text of the Spanish Wikipedia; 3.5G compressed for the full text of English).

480M is still too large to put on the XO, though, and we have deployments in Uruguay, Peru and Mexico that don't always have good connectivity. If we could get an archive that was under 100MB, I thought, it would probably be small enough for countries to consider preloading it on all of their XOs by default — providing offline access to the most popular Wikipedia articles for kids who have XOs and their families.

Once Wade and I got started, plenty of help followed. Mel Chua wrote up a wiki page with the state of wikipedia-iphone and what would need to be done, while Wade worked on porting the wikipedia-iphone code from Ruby/Mongrel/Inline-C to Python/BaseHTTPServer/SWIG. Once that was done, Wade started trying to find a renderer from wikitext to HTML that would work well for us. (He chose mwlib.)

Madeleine, Ben Schwartz and I looked at which ranking metrics do a decent job of allowing us to store articles that the user is most likely to want to see — we store that likely subset on the XO, and if an article that falls outside our metric is wanted, we can link out to the local school server or the global net for it, if either is available. Three weeks and over 150 GIT commits later, the finished activity is 98M, has around 30,000 articles and 3,000 images, and is available here.

It was a blast to work on this with a group of volunteers, and to get to know them better in the process. Having a community of passionate and immensely competent developers a stone's throw away if you can clearly articulate what's needed and why it's important is a feature of working at OLPC that I love.

Working on this project has been bringing me back to Eben Moglen's keynote at the 2006 Plone Conference (video, transcript). Eben describes the history of attempts to ameliorate human social inequality, and how traditional property being rivalrous and zero-sum has often led those attempts to fail due to the friction and violence that stems from trying to redistribute property from people who have it to people who don't. He argues that we are past that now; that software is non-rivalrous, and so it's no longer about "wealth redistribution" because we no longer need to take anything away from anyone; that the utopia of being able to share education and knowledge and the power that comes with them has never been so close. Being part of a team working on distributing hundreds of thousands of copies of Wikipedia to poor kids makes me inclined to agree with him about how close we are.

Eben goes on to describe the moral basis for free software — "If you could make as many loaves of bread as it took to feed the world, by baking one loaf and pressing a button, how could you justify charging more for bread than the poorest people could afford to pay?"

If we are indeed solving epic problems, we should be thankful to the people whose shoulders we're standing on: the Wikipedians for enabling this transfer of knowledge in the first place; the wikipedia-iphone author for choosing to share his code; the mwlib authors who are reimplementing the mediawiki PHP parser in Python; the determined volunteer OLPC developers who rallied around the idea and followed it through, and finally the creators of this cute green machine that allows us to facilitate a conversation for children to figure out how the world works, why, and how they can shape it for the better.

Tags ,  | 3 comments

Bugs Everywhere

Posted by Chris Ball Sat, 29 Mar 2008 00:54:00 GMT

Bugs Everywhere is a neat piece of software implementing distributed bugtracking: it combines a bugtracker and a distributed version control system. I've offered to be its new maintainer, taking over from its original author of Aaron Bentley and the folks at Panoramic Feedback. Bugs Everywhere posits that the use of a centralized bugtracker for software is no less inappropriate than the use of a centralized version control system1, and that real programmers work with bugs that exist in complex states of being fixed on some branches, as yet unmerged on others, and trying to keep a mental model of which is which is doomed to failure.

For example, at OLPC we believe in cheap and fast branching, and we have feature branches (e.g. "faster"), development branches ("joyride"), release branches ("update.1"), and production branches ("candidate", "release"). We have a bugtracker that allows us to describe bugs as being "open" or as being "resolved", which closes them. This is not cool.

In the Bugs Everywhere world, the same branch that contains your code also contains the bug state for that code. So, as I create my "faster" branch software, I can create/close bugs linked to those commits. When my tree is merged into the next branch up, we not only get the code merged, but the bug state merged as a side-effect. The bug state is not going to become inconsistent with the code.

How does it work? We insert a .be directory into your repo, and use a command-line interface ("be"), web interface (written in TurboGears) or GUI (written in wxWidgets) to let you perform the dual operation of changing the state of the text files that describe bugs, and committing that change to the underlying VCS. We support Arch, Bazaar, GIT, Mercurial and RCS. BE itself is written in Python. Of course, another benefit of this approach is that the same offline editing advantages that your dVCS gives you apply to your bugtracker.

You might argue that being distributed sounds good, but having a common place for developers and users to go to to query bug state is important too. Having a distributed bug tracker isn't incompatible with this — the central web interface to the bugtracker becomes just another client performing merges with the master location for the repository.

So, should you drop everything and switch to BE? Well, maybe. One way in which BE currently isn't suited to OLPC is that we like having a central bugtracker for many projects, even though each project has its own source repository, or even several. BE would be much more suitable if we were just developing a single software project, rather than the complex selection of projects and processes that we currently track. Maybe the way forward is to run a meta-tracker that keeps track of changes in any of the specified source repositories and collates them.

Another current limitation is the web interface support, which was written against an old version of TurboGears, and is still a proof of concept. Noah Kantrowitz is interested in working on a BE backend for Trac, which would offload the web interface awesomeness to Trac.

I'm writing this post to try and build up a community around BE: please check out our wiki and mailing list, and consider hacking on it. It's the future, honest.

1: Or at least, I do.

Tags , ,  | 8 comments

Transcript of Lawrence Lessig Obama video.

Posted by Chris Ball Tue, 05 Feb 2008 04:36:00 GMT

Lawrence Lessig has posted a video on why he is for Barack Obama. SJ Klein, Madeleine Price Ball and I just finished transcribing it. Lessig's video, and our transcription, are available under the Creative Commons Attribution 3.0 license.

"A request"

I received a strange request from someone I didn't know in my inbox the other day — a letter asking me to make a video "enumerating why I support Barack Obama". As Julie Cohen wrote, "Many of my smartest friends have been recently leaning towards Clinton" and that, she said, was because "I believe that his speeches are not detailed enough regarding his policy strengths" and she concluded "now is the right time for you to make a video, I know you can change a lot of minds."

Well I doubt I can change a lot of minds, Julie Cohen, but I do agree with you that this is an extraordinarily important election.

But it's important not because of the details about Barack Obama's policy strengths. I believe his policies are strong, especially the policies I know something in particular about — his technology policies are extremely strong. But policy differences between these two candidates are actually quite small. As the New York Times said in their editorial endorsing Hillary Clinton, "On the major issues there is no real gulf separating the two."

So in policy alone I'm not sure that there's any good reason to prefer the one over the other. Yet I still think it extraordinarily important that one win over the other: namely Barack over Hillary Clinton. For what's at stake here, I think, is something much more important than the particulars of some laundry list of policy disagreements that there might be between them.

So what is that something important — why should one support Barack over Hillary?

Well I think there are three factors to consider here: character, integrity, and what each candidate would do.

So let's start with character. In particular I'm thinking about a certain kind of moral courage. The question of whether the candidate is calculating in the face of right, or whether in the face of knowing what's right or consistent with his or her principles, he or she chooses that answer regardless of the consequences.

So for example, one feature of this man's presidency (Bill Clinton), a man I supported for president (and think he did an extraordinary job as president), but one feature (or let's say bug) was his consistent refusal to stand up for for what were strong principles, at least as he articulated them, in his campaign. So for example within a couple weeks of coming into office he had given up a commitment to let gays serve openly in the military. It was expedience that led him to that result rather than standing and fighting on the basis of principle.

Now, the question is whether Hillary is like Bill in this respect. And I think to be fair we have to say you can't really know, we haven't seen enough. There are things to make one suspect that she lets principle yield in the face of expedience.

So, for issues as small as whether she would call for presidential debates to be left free so that people could download them and remix them without fearing copyright restrictions, Hillary — unlike Barack and John Edwards and others even on the Republican side of the debate — refused to endorse this call, fearing, perhaps, that it would alienate some of her strong pro-copyright interests in the Democratic party.

To issues as large as Iraq, where here the decision she made was the wrong choice. But she made that choice in the face of overwhelming political pressure to go along with the president. Now maybe she didn't know it was the wrong choice, maybe she actually believed what she did was right; though it's important to remember that among the Democrats not facing re-election at the time of this war, a majority opposed the war. And for senators running for president — therefore susceptible to this political pressure more than anybody — all but one endorsed the war, including John Edwards.

So while we can't know about this feature of her character, I think all of us remember believing that when she voted in favor of the war at that time, rather than taking a strong and principled view that a majority of the Democrats not facing re-election did, it was an expression or sign of a certain kind of weakness that reminded many of us too much of the presidency of her husband.

This is the moral character — or lack of moral character, moral courage — that I fear most about this candidate.

Now, in this respect I think Barack Obama is exactly the opposite. There's one clear example of this all of us know, that's the example of Iraq. And we have to remember here just how hard this was. We have to remember the insanity of us, or of the United States, at this time. In October 2002, as the drumbeats for war were increasing, Barack Obama took to the streets of Chicago and made a strong call to stop the entry into this war. As he said:

I stand before you as someone not opposed to all war in all circumstances. I don't oppose all wars. What I'm opposed to is a dumb war, what I am opposed to is a rash war. A war based not on reason, but on passion; not on principle, but on politics.

That was precisely the right description of the war that led us to Iraq, and this was not a popular position for a candidate for the United States Senate to take, especially in a State that had a Republican governor. Yet Barack Obama took this position. And in this one respect at least, it shows that he has a certain kind of moral courage. Not because he was smarter, not because he had access to better intelligence about Osama bin Laden, but because he had the moral courage to stand up for what was right in the face of very strong political opposition.

This is one clear example — perhaps the most important moral and political judgement of the last thirty years, signalling he is much less likely to make the same kind of cowering mistake again. That's character.

Think now a little bit about integrity. When I think about the worst in politics in the last fifteen years there are two features that stand out for me. One is the lack of moral courage, of again candidates and presidents like Bill Clinton, and second, a lack of political decency, in particular around the elections that got this man (Bush) into office orchestrated by this extraordinary figure, Karl Rove. Think about Karl Rove's tactics in South Carolina, where he made racial suggestions through push-polling that drove many Republicans away from John McCain, probably costing McCain the election. Suggestions that were false and were extraordinarily unfair to make, and that were made for the purpose of defeating the opponent.

Or think about the swiftboating of John Kerry, by taking his strongest character — the fact that he alone of all the candidates had voluntarily gone to war to defend the interest of his country — an unpopular war, while the President and the Vice-President found a way to escape that war. What Rove did was to find a way to take this strong feature and make it a target of an attack, by suggesting false and misleading facts about his service in Vietnam, to weaken this feature of his character: that's swiftboating.

I remember when watching these things happen, thinking to myself "How in America can these sort of techniques win?". Yet the worst in this campaign, was to watch this kind of Rovian Republicanism become Rovian Democrats. Think for example about the issues around the war: Hillary Clinton and Bill Clinton have launched an attack on Barack Obama, claiming he has been "inconsistent" about the war. Here's what she said in one of the debates:

It was after having given that speech, by the next year the speech was off your website. By the next year, you were telling reporters that you agreed with the president in his conduct of the war. And by the next year, when you were in the Senate, you were voting to fund the war time after time after time.

Now as Hillary Clinton knows, this statement is both false and misleading. It's false because in fact, the speech that she says was removed from Obama's website remained on Obama's website throughout the course of the next year. You can know that by going to this site, The Archive org's Wayback Machine, and you can actually see copies of the web taken in every couple of month intervals from 1996 on. And here's a copy of the Barack Obama website — we have to decode it a bit by looking at the very top line — this is a copy of February of 2003, there's Obama's speech.

Here's a copy taken in April of 2003, there again is Obama's speech. June, it's still there... August, it's still there... October, it's still there. It was there the whole year. And even after that year Barack continued to lead his Foreign Policy section by describing his strong and consistent and principled opposition to George Bush's decision to take us to war.

But the charge is also misleading, because there's no inconsistency with opposing the war and actually supporting funding for the war once it has been launched or supporting funding for our troops once they are there. Think about Howard Dean, who was the strongest candidate in the 2004 election opposing the war: he absolutely and clearly signalled that even though he opposed the war he would not cut off funding for the troops or withdraw them immediately if he became President.

This is a kind of swiftboating — it takes the strongest feature of Barack's political character here, the fact that he made the right decision about the war, and tries to weaken it by alleging false and misleading facts about that decision.

Or think about the brou-ha-ha around Ronald Reagan. At a Nevada editorial event, Barack said this about Ronald Reagan:

I mean, I think Ronald Reagan changed the trajectory of America, in a way that, you know, Richard Nixon did not and in a way that Bill Clinton did not. He put us on a fundamentally different path, because the country was ready for it.

And then a little later he said:

And the Republican approach, I think, has played itself out. I think it's fair to say that the Republican party was the party of ideas for a pretty long chunk of time there over the last ten, fifteen years, in the sense that they were challenging the conventional wisdom.

This statement says two things:

  • a), that Reagan was a transformational president;
  • and b), that the Republicans were a party of ideas.

Both statements are obviously true.

What Barack did not say, however, was a) that he agreed with Ronald Reagan's views, or that only the Republicans had ideas. And here's how that statement was used by Hillary Clinton in the debate at Myrtle Beach just before the South Carolina primary:

She said, quote:

He has said in the last week that he really liked the ideas of the Republicans over the last ten to fifteen years.

Now you saw what he said, and you can see that what she says here is just plainly false; Rovian in its character. But finally, consider this issue around the question of a woman's right to choose whether to terminate a pregnancy or not. Hillary Clinton and her campaign have campaigned on the idea that Barack Obama is weak on "choice". In mailings in both Iowa and New Hampshire she has claimed he's weak on choice, and in public speeches to women, and young women in particular, that he is weak on choice.

Lorna Brett Howard was a supporter of Hillary Clinton, a former president of the ChicagoNow! organization. But she was so outraged by what she called the "false statements" about Barack's campaign that she made this video, now appearing on YouTube where she asserts first that 100% ratings were received by Barack Obama during his time as Senator in the Illinois State Senate; and that the fact the he supported women's rights had never been questioned, including the right to choose.

Here the campaign — the Hillary Clinton campaign — is totally ignoring the truth, and this time, ignoring the truth with a certain important consequence, as Lorna Brett Howard said:

And this line of attack on an issue that I care about so deeply is not acceptable to me.

And because it wasn't acceptable, she publicly switched her support from Hillary Clinton to Barack Obama, switched her support because she had been using — Hillary Clinton had been using — the kind of techniques that we Democrats thought were only at the level of Republicans.

This is a measure of a certain kind of integrity, an integrity that I think we should all demand that the political process reveal.

Now people will say in response to this "Oh, that's so naive. This is the way that politics is. All politics is like this. You can't punish one candidate because they're using the style of politics."

But this is the way all politics will be only if we reward the behavior of people that employ this Rovian style of political behavior. We will get more of it if this is the kind of behavior we reward, and that's a good reason, following Lorna, for people who support Hillary Clinton to either criticize this behavior of her campaign or to switch support to Barack Obama.

But finally, most important is the distinction between the two candidates about what they will do. But to see this we have to think about what we expect this election to be about. The rhetoric around this election is focused on "change". But what is this idea of change? What do the candidates mean by it? Here's what Hillary Clinton said in one of the debates:

Well, let me say first, that I think we're all advocating for change; we all want to change the status quo, which is George Bush and the Republican domination of Washington for so many years.

When I heard that, I thought to myself "Is that really all we're trying to achieve in this election, to get the Republicans out of office?". Because as I heard candidates like Edwards and Obama, I heard a call for a change much more fundamental. A change in how Washington runs; a change in the power of money or corruption in how Washington runs. A change in the very core of the system that has produced the results that have slowed responses to global warming or slowed the adoption of healthcare. Edwards and Obama have evinced their support for this strong version of change by refusing to take any money from lobbyists or PACs: their target, at least as they see it, is fundamental reform of the system.

Hillary Clinton, here, is very different. Here is a speech she gave at the yearly Kos convention last summer:

"Senator Edwards has really a very straightforward question here, which is will you continue to take money from lobbyists or will you take his position..."

"Yes I will. I will, because you know a lot of those lobbyists, whether you like it or not... represent real Americans."

No-one doubts that the lobbyists represent real Americans; though of course they also represent lots of foreign entities as well. But the question is not who they represent, the question is whether their influence represents — mis-represents — solutions for America. Whether the effort they have and the power they have in controlling the agenda and access to members of Congress shifts the way Congress responds to the issues. But it's very clear given what she said, that when she speaks about change she speaks of a different kind of change; not the real change that Barack Obama puts at the center of his objective for a new administration. But there's a second kind of change that I think is actually much more important than this change in how Washington works. This is a change for peace.

We have to understand of course that the presidency has become something very different from an accountant or CEO of the Government. The presidency is a leader, a leader who inspires moral courage, who inspires us to be something different, to transform us, and inspires the world in how the world sees us.

Here I think there is no comparison betwen these candidates. Hillary Clinton is good enough, she's a good enough speaker, she's very powerful and responsive, she's a great debater. But in this debate, Barack Obama is just off the charts. Remember his intervention at the Democratic Convention in 2004:

"Tonight is a particular honor for me because, let's face it, my presence on this stage is pretty unlikely. My father was a foreign student, born and raised in a small village in Kenya. he grew up..."

And then, on his campaign too:

"There's no such thing as false hopes. But what I know deep in my heart is that, we cannot bring about change unless we are unified. Unless we do it together. Change does not happen from the top down, in America or anywhere else. It happens from the bottom up!"

This is a man who will inspire as he leads. He will inspire all of us, across racial lines, and gender lines, across class lines, across age. He will inspire us because he can capture, in a way that very few presidents in the last hundred years have been able to capture, the imagination of a generation.

But there's one more crucial way in which Barack Obama can inspire, distinct from how Hillary Clinton could ever hope to inspire, and that's the inspiration he would offer towards peace. We in this country need to acknowledge to the world a certain mistake that most of us understand we made. At the height of insanity, after this extraordinary and horrible bombing, of our own citizens on our own territory, we were led into war by a president who didn't care to pay attention to the facts.

This was the biggest political blunder, perhaps ever, that an American president engaged. It was extraordinarily destructive — destructive to us and to them. If we're going to find peace here, then that peace will only come if we can signal our own change. A change that they understand is a change in who we are, a change that they can see.

So I want you to shut your eyes and imagine what it will seem like to a young man in Iraq or in Iran, who wakes up on January 21st, 2009, and sees the picture of this man as the president of the United States. A man who opposed the war at the beginning, a man who worked his way up from almost nothing, a man who came from a mother and a father of mixed cultures and mixed societies, who came from a broken home to overcome all of that to become the leader in his class, at the Harvard Law Review, and an extraordinary success as a politician. How can they see us when they see us as having chosen this man as our president?

There can be no clearer way that we could say, that we could say that the United States could say, that we have changed, than by electing this man. There is no way we could more clearly move on toward peace than this. He represents the very best of who we are, the best of character, of integrity and ideals. And someone who opposed the war from the start.

So Julie Cohen, here is my request: I agree with you nothing could be more important than this election and this candidate; but nothing could be more important also than solving this impossible war; not just by bringing the troops home, but also by enabling the peace. By enabling that peace, by beginning a process of forgiveness and of hope. That is the great hope that this new generation, represented in this leader, Barack Obama, gives us. And gives the world.

Credits

Flickr photos, cc-licensed : Joe Grimmings Photography (Obama, Clinton, boy [holding an Obama sign]), Ficusrock (Kerry), Wigwam Jones (McCain), matthewbradley (Rove), sskennel (Clinton).

Tags ,  | 38 comments | no trackbacks

Fun with graphics drivers

Posted by Chris Ball Thu, 17 Jan 2008 17:47:00 GMT

It all started, as most things in the universe have, with a slight popping noise and a bad smell.

One of my coworkers sent me a message last weekend, while I was at home, pointing out that my desktop machine at work smelled like it was burning. After discussing the merits of turning off computers emitting burning smells before chatting with their owners about it, we had a look inside and found this:


The leftmost set of capacitors is fine, the set to the left of the fan is not. It’s actually a very well-controlled demolition; an electrolytic capacitor has boiled and blown out the top of its cap, which is perforated to enable exactly this failure method, and then once one cap is gone the rest are obliged to follow suit ‘cause the current on them increases in response. So, anyway, this left me in the market for a new graphics card.

The card in the picture is an nVidia 7300, which I bought two years ago because it was the only cheap card that could handle the dual-link DVI required for my 30” display with free drivers. Two months ago, though, Dave Airlie committed support for dual-link TMDS on ATI Avivo cards. These cards had historically been the worst of the worst for drivers—the free drivers were left nowhere without any specifications, and even the ATI binary driver for Linux took a long time to add support. Thanks largely to AMD’s latest NDA-less specification drops, though, we’re well on the way to a free accelerated driver for these cards, so I bought a X1600+ from buy.com.

When I booted X on it with the radeon driver, though, it looked craptastic. Since I like hacking on drivers, and since I didn’t have much of a choice, I thought I’d try to figure out what the problem was. The rest of this post is about what I tried during the subsequent bonding exercise between me and the registers on my new graphics card.

First, I asked around on IRC, and learned that it isn’t a known problem and that obtaining a register dump might be a good idea. You can get the “avivotool” that does this:

git clone git://people.freedesktop.org/~airlied/radeontool git checkout -b avivo origin/avivo

I made the register dumps, but nothing was standing out. Then I lucked out: I tried the fglrx (proprietary) driver to see whether the problem happened there—it didn’t, and furthermore it didn’t happen on the radeon driver after fglrx had run. This suggests that fglrx is setting useful registers that radeon doesn’t even know enough about to reset when it starts.

The next step is to diff register dumps with broken-radeon and post-fglrx working-radeon. This got >100 differently-set registers. Dave Airlie gave me a basic explanation of the register layout: under 0×1000 and over 0×6000 are setup, and the rest are mostly the 2D acceleration space.

Manually setting the <0x1000 space to the working values didn't come up with anything, though, and trying every register by hand was getting tedious. I wrote a perl script that takes two register dumps, assumes one is “good” and one “bad”, and offers to set each differently-set register to the “good” state, pausing for a second for you to inspect the screen output for a fix inbetween each.

And, eventually, it got it right—0×6590 (which radeon_reg.h knows to be AVIVO_D1SCL_SCALER_ENABLE ) and 0×6594 are both set when the card boots, but unset by the fglrx driver, and unsetting them while running radeon results in a fixed screen image. We can do this simply in the driver:

OUTREG(0x6590, 0); OUTREG(0x6594, 0);

At this point, Alex Deucher (who works at AMD/ATI on open-source driver development—awesome!) stepped in and explained that the scaler code doesn’t work yet, and the driver should really turn it off when it isn’t being asked for. So now we do.

Here’s a photo of the working result. Planet Emacsers will be pleased to see a ridiculous amount of emacs in it.

Tags  | 11 comments

Tracing internal function calls in a binary

Posted by Chris Ball Fri, 30 Nov 2007 20:27:00 GMT

Dear everyone who likes Unix,

I have a binary (which uses glib and was compiled from C) and I'd like to get output with the function name each time any function in that binary is called. So, I'd like the output of ltrace(1), but for function calls rather than dynamic library calls. I am bored of adding g_debug("%s", G_STRFUNC); to the top of all my functions.

You'd think this would be easy, given that incredibly similar tools have existed for twenty years, but so far the shortest answer I've heard starts "well, you could write a gcc profile function stub that..". It would be nice not have to recompile, since gdb certainly doesn't have to, but I'd welcome the way to achieve this with a recompile as well.

Any ideas? Thanks!

Update: jmbr wins, with the only solution that doesn't require anything more than gdb, and no recompile. Here's his script: http://superadditive.com/software/callgraph. I'd like to work on it to add support for modules loaded with dlopen().

Tags ,  | 15 comments

Spherical cows

Posted by Chris Ball Mon, 26 Nov 2007 01:56:00 GMT

Madeleine just started up a webcomic site -- everyone should go over to Tipping The Spherical Cow and leave her comments telling her to keep going with it.

We had a tofu turkey for Thanksgiving this year, for the first time. The visible seams were a little disturbing, and it was not entirely tasty though not bad when cold. The dog managed to pull it off the counter the next morning and ate all of the rest of it, which at least saved us from Tofurkey sandwiches for the next week. Here's a photo:

3 comments

Older posts: 1 2 3