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
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
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
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
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 olpc, wikipedia | 5 comments
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 bugseverywhere, olpc, python | 8 comments
Posted by Chris Ball
Tue, 06 Nov 2007 16:55:00 GMT
I spent a week (my first time in Asia) in Changshu, China the week before last, in preparation for this:
Congratulations to everyone involved with OLPC. You're all heroes.
Tags olpc | 5 comments
Posted by Chris Ball
Mon, 30 Jul 2007 00:41:00 GMT
Meike asks us for our nice experiences with Free Software developers. Here's one of mine.
I needed to find a new RSS reader. I have a somewhat lengthy subway commute to work each day, and I like listening to podcasts or reading PDFs on the OLPC laptop. I also have a pretty busy RSS feed list, and thought it'd be nice to merge my daily RSS read with my daily commute. The RSS reader I was using (Sage, a Firefox plugin) doesn't allow that, though, since there's no way to have it download all new feeds and present them on a single static HTML page for offline reading.
Google Reader was an obvious choice, but I try to use web services that run on Free Software when I can. Google brought me to GobbleRSS, which is a Google Reader clone with sync capabilities.
I tried installing it on my Xen host, which runs Debian/sarge. It didn't work; I got a PHP syntax error. I sent mail to the maintainer, Guillaume Boudreau, and went to bed. I had a reply waiting when I woke up, telling me that he'd just committed what he thought was a fix to my problem. Over the next seven hours, we sent twelve e-mails between us, with him (and occasionally me) proposing fixes. It turned out that he was using PHP 5 and MySQL 4.1, and I was using PHP 4 and MySQL 4.0. By the end of the day, he had full support for the older versions of each committed.
Thanks, Guillaume! Here's a photo of what my daily commute looks like now:
Tags olpc | 3 comments
Posted by Chris Ball
Mon, 21 May 2007 04:07:00 GMT
Dear esteemed colleague!
People with the middle name "Wormsbecker" shouldn't tell Christopher James Ball that his middle name is "weird".
Love,
Chris.
Tags olpc | 5 comments
Posted by Chris Ball
Tue, 19 Dec 2006 19:34:00 GMT
We just had our first trans-atlantic (and trans-Cambridge) videoconference on the OLPC!
We were chatting with the fine people at Collabora (Dafydd Harries is in the bottom photo), who have been working on getting Telepathy and Farsight running on the OLPC OS. Audio and video were both extremely smooth. We were exchanging 15fps, over wireless at both ends.
My hope is that starting a video call with another user on the mesh network could eventually be as easy as clicking on a buddy's icon in the mesh view.
Tags olpc | 11 comments | no trackbacks
Posted by Chris Ball
Sun, 29 Oct 2006 17:59:00 GMT
Don Marti has a thorough write-up of the cross-pollination happening between OLPC and a bunch of free software projects. I enjoyed the last paragraph of the article the most:
Just as the CM1's software is getting an overhaul, so is the keyboard. "Nicholas Negroponte's one absolute demand is to get rid of Caps Lock," Gettys says.
And, Bender says, "There's one new key they get that's the important one and that's the View Source key."
Having "the freedom to view the source" can seem very abstract, and having a "View Source" key makes this feature of the machines clear to the users. Imagine one of these kids visiting an Apple Store1 sometime in the future and innocently asking where the "View Source" key is. "Let you view the source? But that's our property, it belongs to us, you can't have it."
For anyone wondering how the technical side to the key can work: almost all of the code the user runs is written in Python, and the system keeps precise track of what's running where.
One of the inspirations for OLPC is the powerful ability children have to learn with minimal guidance; an ability which is consistently underestimated by adults. By providing free software in this way, the very structure of the machine reflects the potential for self-guided learning that originally motivated the creation of the device.
We've added many new features to the laptop since I started working with OLPC — a webcam, SD card reader and dedicated NAND flash controller are the latest — but it's going to take something very special to supplant the "View Source" key as my favourite addition.
(1: I don't mean to pick on Apple; insert any such vendor here. I chose Apple 'cause they're both a hardware and software manufacturer. In fact, as the article points out, Apple have helped us out significantly by agreeing to let the Squeak Foundation release the Squeak Smalltalk environment under an Apache-style license. Squeak will be one of the main programming languages used by the kids.)
Tags olpc | 24 comments | no trackbacks
Posted by Chris Ball
Wed, 04 Oct 2006 19:02:00 GMT
It's been a hectic few weeks. Two weeks ago I resigned from Netcraft, and on Monday I started work at One Laptop per Child. I'm loving it already; I'll try to blog progress as I go. I'm going to be working on performance tuning for the laptop's kernel drivers and userspace apps. This'll certainly be the first time I've been able to measure performance improvements by "amount of time and energy saved by several million children who are charging their machines by hand"...
Tags olpc | 10 comments | no trackbacks
Posted by Chris Ball
Mon, 31 Jul 2006 15:55:00 GMT
Looking forward to helping out with the One Laptop per Child project. I went over to Micro Center to pick up supplies yesterday, and they had USB hubs for $20, USB network adaptors for $30, and a combination three-port powered hub and network adaptor for $23. It's a D-link DSB-H3ETX, and works fine in both the Fedora installer and OLPC image via the 'pegasus' driver.
I'm hoping to get Dasher up and running as an input method, and to look at alternate calibration techniques for the tablet — "tap these four points at the corners of the screen in order" isn't easy to explain to a six year-old, but "play this game that happens to involve tracking an object with the stylus while it moves" might be.
Tags olpc | 8 comments | no trackbacks