Posted by Chris Ball
Thu, 19 Aug 2010 17:52:00 GMT
First, some background:
KDB (a kernel debugger shell) and
KMS (kernel mode-setting) combine to let you drop into a graphical shell when something debugger-worthy happens on your Linux machine. That thing might be a panic, or a breakpoint, or a hardware trap, or a manual entry into the kdb shell. Inside the shell you can, for example: get a backtrace, inspect
dmesg or
ps, look at memory contents, and kill tasks.
This is a big improvement over the previous model of "something bad happens to your laptop while it's in X, and the keyboard LEDs start blinking, and you hard-reboot and wonder what happened and wish your laptop had a serial port".
Here's a video of KDB+KMS in action — it's from Jason Wessel at Wind River, who deserves massive kudos for having enough patience to get all of this debugging code merged into mainline Linux to everyone's satisfaction:
Jesse recently wrote about how to give KDB+KMS a spin on Intel graphics chipsets, and now I've written patches that allow
radeon and
nouveau users to join in too. The method for testing them is similar to Jesse's:
git clone git://dev.laptop.org/users/cjb/linux-2.6
cd linux-2.6
git checkout kgdb-next
- Config the kernel as in Jesse's post, and build/install it.
- Boot with
kgdboc=kms,kbd kernel arguments.
- Enter KDB with sysrq-g, or
echo g > /proc/sysrq-trigger, and type go to leave KDB.
If you test with radeon or nouveau, please let me know what hardware you tested on, and whether everything worked. Thanks!
Tags kernel, linux | no comments
Posted by Chris Ball
Sun, 09 May 2010 20:30:00 GMT
It's incredibly rewarding to see videos like this one. I think working on the
Wikipedia activity might be the most important thing I've ever done:
(via
Jimmy Wales)
Tags olpc, wikipedia | 2 comments
Posted by Chris Ball
Tue, 30 Mar 2010 13:10:00 GMT
I've been wanting to get into electronics for a while now (it seems like a sensible thing for someone who works for a
laptop manufacturer to do) but haven't known where to start. Back in January, the fine people at
Sparkfun Electronics helped out with that by running a
Free Day where they gave away electronics worth USD $100k: $100 free, to 1000 people. I was lucky to be one of the 1000 people, which put some electronics ideas within my reach that I otherwise would have found it hard to justify spending money on.
And, here's the result —
Madeleine and I made a t-shirt together that displays how much unread e-mail I have using an
Arduino Lilypad and
Bluetooth dongle, and an Android phone to send the number of unread mails to the shirt. Here's an image of the center of the shirt, and a video showing it in action:
I've uploaded the source code that runs on the Lilypad and the python script that I'm running on the Android phone
to my github account.
Tags arduino, electronics, lilypad | 22 comments
Posted by Chris Ball
Sun, 07 Feb 2010 02:02:00 GMT
Me: "I think I'm done buying computers that I can't run my own code on."
Friend: "Just think of the iPad as being a pile of books. You can't run your code on those either."
Me: "Thinking of a computer as being a pile of books is like thinking of a guitar as being Abbey Road by the Beatles."
Tags apple, drm | 7 comments
Posted by Chris Ball
Thu, 19 Nov 2009 18:40:00 GMT
I've written up a feature proposal on how we can use Btrfs snapshots to enable system rollbacks in Fedora 13, by gluing together the existing kernel code to do Btrfs snapshots, a UI for performing rollbacks, and a yum plugin to make snapshots automatically before each yum transaction. Lots of good comments so far, and LWN has written an article about it.
(Updated: The LWN link is no longer subscriber-only.)
Tags btrfs, fedora, linux | 11 comments
Posted by Chris Ball
Tue, 27 Oct 2009 17:28:00 GMT
Boston was good to me last week — I got to see two talks from two particularly inspiring and heroic people, a day apart. (And a Rodrigo y Gabriela gig on Friday, which perhaps wasn't as heroic, but was also awesome: check out Tamacun, Orion and Captain Casanova on Youtube.)
Now, on to the talks:
William Kamkwamba
When he was 14, William Kamkwamba built a working windmill at his house in Malawi, despite having dropped out of high school a few years earlier because his parents weren't able to afford to send him anymore. He knew what to build by looking at pictures of a windmill in a science textbook in a library, using a dictionary to translate the words that referred to the pictures from English to his native language of Chichewa, and believing that the presence of the photo meant that someone must have built one before, therefore it must be possible for him to do it too. He also had some experience with repairing radios, taking them apart and working out what each component was doing by trial and error. His story is so inspiring because he lacked enough schooling in English and Science to be expected to gain the knowledge of electromagnetics he picked up, lacked any money to buy parts to work with, but somehow achieved his goal anyway. He gave a humorous and fascinating talk at MIT last week with Bryan Mealer, the co-author of the book that tells his story: The Boy Who Harnessed The Wind.
Reading the book after the talk totally changed my understanding of what he'd done and why, though; the background for his wanting to build a windmill is not always mentioned in articles and interviews with him. The season before he started, there had been a famine throughout Malawi — there was a drought, and corrupt government officials had sold off the country's strategic grain reserves and kept the money, meaning that the government did nothing to help feed millions of subsistence farmers (including William's family) who were left with a small fraction of the amount of food they needed for that season. William's family lost a lot of weight, sold their possessions and dropped out of school to pay for food, and watched many of their friends and other villagers waste away and die from hunger over a period of months. The book contains detailed descriptions of what it's like to live and go to bed hungry, after maybe a few mouthfuls of food all day, that make me deeply ashamed that we allow this to happen to anyone in the world.
Given all this context, it becomes totally obvious what William was doing the next year at the library: the textbook said that windmills could be used to power water pumps, which would mean freedom for his village from having to go through another drought and famine. The surprising conclusion you're left with is: "Of course he built a windmill, teaching himself a massive amount of electronics that was described in a language he barely understood in order to do so — what else was he supposed to do?".
Peter Singer
The second talk was from Peter Singer, who's an applied ethicist at Princeton, and writes about modern ethical questions from a utilitarian perspective. He wrote Animal Liberation thirty years ago, which is thought of as having founded the animal rights movement; his work persuaded me to start approaching vegetarianism, then become vegetarian nearly three years ago, and mostly-vegan earlier this year (vegan at home, vegetarian when eating out with friends or if it's difficult to find vegan food). Lately he's been writing about poverty and the nature of our responsibility to people suffering due to poverty in countries other than our own, and has a powerful argument that we aren't doing nearly enough. I first encountered his anti-poverty work with What Should a Billionaire Give — and What Should You? in the New York Times, and he's since written a book on the subject, The Life You Can Save. The book is excellent — as well as describing the moral basis for aid, he handles common objections to charitable giving, including what responsibility we have when others aren't accepting their share of it, where it's okay for us to stop and feel like we've done enough, why we shouldn't be giving money locally instead, and how we can find efficient and life-changing charities to donate to. Here's the book's opening and most provocative question, first proposed in his 1972 paper Famine, Affluence, and Morality:
"On your way to work, you pass a small pond. On hot days, children sometimes play in the pond, which is only about knee-deep. The weather's cool today, though, and the hour is early, so you are surprised to see a child splashing about in the pond. As you get closer, you see that it is a very young child, just a toddler, who is flailing about, unable to stay upright or walk out of the pond. You look for the parents or babysitter, but there is no one else around. The child is unable to keep his head above the water for more than a few seconds at a time. If you don't wade in and pull him out, he seems likely to drown. Wading in is easy and safe, but you will ruin the new shoes you bought only a few days ago, and get your suit wet and muddy. By the time you hand the child over to someone responsible for him, and change your clothes, you'll be late for work. What should you do?"
Of course, we all answer that the minor inconvenience of having to buy a new pair of shoes and change our clothes are not valid excuses for refusing to save a life, and the follow-up hits you like a ton of bricks: there actually are people dying from poverty every day, around 30,000 of them, and we really can save a life for not much more than the cost of a good pair of shoes. Furthermore, more than two and a half billion people live on the equivalent of less than USD $2 per day. How, then, can we say that we're different from the person who walks by the lake, sees the child drowning, realizes they could save them, and does nothing?
Singer's book explores the differences between the two situations — primarily that in one a child is next to you while in another they are far away — and concludes that this cannot be a sufficiently different situation to present a different moral answer, if we claim to hold ethical beliefs like "the value of a human life is the same no matter where in the world it is" and "a human life is worth more than a pair of shoes".
Now, I didn't mean for this post to make you feel guilty — in fact, I'm feeling very optimistic about this issue. Singer observes at the beginning of the book that the struggle to reduce suffering due to poverty has historically been a sort of climb towards an unreachable, unknowably distant mountain peak; but now we have cleared the clouds and can see the summit, our ability to do this is clearly within our means. I want other people to enjoy life the way I did at the gig on Friday night. While I can't give everyone tickets to go to concerts, I can certainly work towards them having enough food so that the William Kamkwambas of the world can, rather than trying to fall asleep in darkness and hunger, enjoy a full stomach and some good music with a radio they've managed to repair.
Tags ethics, poverty | 12 comments
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.
136 comments
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 card, olpc, trick | 5 comments
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 city, mexico, peru, travel | no comments
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 bugseverywhere, exploretree, processing, python | no comments
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 microfinance, poverty | 1 comment
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 fedora, olpc | no comments
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.
Tags guitar, music, olpc | no comments
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 fedora, gnome, olpc, sugar | 8 comments
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 biology, processing | 6 comments
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:
Tags guitar, music | 9 comments
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:
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 mpx, olpc, vnc, Xorg | 22 comments
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
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 django, python | 23 comments
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:
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 biking, openmoko | 14 comments