December turned out to be a pretty busy month for me – here are some of the stuff I have been involved in/working on:
FOSS.in: As always FOSS.in ‘09 turned out to be an amazing affair. Being someone who works remotely, this event is probably one of the best opportunities for me to have “real” interactions. It’s a place where I can simply sit down, have long face to face conversations, come up with new ideas, be inspired, and most importantly, have fun. My heartfelt thanks goes out to the people behind the event for making this possible. I have some photos in this Flickr photoset.
Book reader: This month’s priority has been stabilizing the Sugarlabs/OLPC book-reader code, and a large number of important bugfixes landed during the last few weeks. More in this status report.
Arduino: At FOSS.IN, thanks to the efforts of the ever enthusiastic Kushal Das, I managed to get hold of an Arduino clone board (it is terribly difficult to get hold of one in Kolkata). I had heard of Arduino before and wanted to get one, and the session on it at FOSS.in by Russell Nelson finally served as the “kick” which made Kushal and me call up the local distributor and get a couple of boards for ourselves. I have been playing around with sensors support in Sugar for sometime (I helped make the Measure activity work on XO 1.5 hardware), and realized that this would be yet another interesting way to connect Sugar with the “real” world. So after a couple of weekends worth of work, I got Arduino support in Turtle Art.
XO keyboards: There may be a new AZERTY keyboard for the XO laptops very soon. See this wikipage for details.
Pootle: The Pootle developers have released version 2.0, which is a vastly improved edition compared to the previous releases. I have been testing it out with plans to upgrade the Sugarlabs/OLPC translation server soon. While testing, I added a quick (and ugly) hack to implement msgfmt –check style syntax checking in Pootle. This would definitely make the process of integrating the translations with the upstream code much less painful – and here’s a screenshot (click on it for a larger version):
Its all over the web now – the Internet Archive has opened up over 1.6 million books for the OLPC XO laptops and in general, any machine running Sugar. Before going into anything else, it makes sense to provide a more specific meaning of “opening up” here – it involves two main objectives completed at the Internet Archive end:
Making sure that the books are readable in the XO, keeping in mind its relative low-end hardware specs and disk-space limitations
Ensuring that the books are available via a standardized catalog format, so that one can find, browse and download books easily using a tool more tuned for the purpose (think of feed-readers versus blog-entries in a web-page)
Now that the books are available (not just from the Internet Archive, but from a number of other sources as well), the next step is to figure out the best possible ways to actually make these books available to the XO and Sugar users. The major constraining factor is bandwidth, we do have deployments with zero, or very limited Internet connectivity, and perhaps these are the deployments which need access to these books the most. I spent most of this week working on implementing a feature in the Get Books activity which would allow books to be distributed via what has been jokingly called a sneaker-net (or sandalnet/chappalnet, if you prefer those forms of footwear). The idea is very simple – at a centralized location with Internet access, choose a few thousand books (size of a typical book is usually a few hundred KB or less), put them in a USB pen-drive and add a OPDS catalog to the mix. Make copies of the drive, and send them to the schools without connectivity. The latest version of Get Books would recognize the drive, and let the student browse through the collection, search for books, and add whatever she wants to the Sugar Journal. Once a book is in the Journal, it can be shared among all the students using the Journal object transfer support in Sugar, or via the Read Activity directly. So essentially, you get a Library on a Stick, with thousands of books, something which, till now, in its physical form, has been largely restricted to better equipped (and usually richer) schools.
Of course, even larger collections can be distributed if a School Server (XS) is present in the mix (due to the fact that the school server can have a larger disk in it), and support for this type of distribution method involving the XS would hopefully appear within the next few releases of Get Books.
The inspiration for this post comes from a talk by Alan Kay, entitled Beyond the Printing Press: Computers as Learning Environments for All Children. You can view the video recording of the talk here
The development versions of Read Activity is now shipping with Epub support. This makes me excited for quite a few reason. Of course, the most obvious reason to get excited is the fast growth and adoption of Epub as a standard for e-books. However, there is more to it…
Books, once again (after Gutenberg’s time) are changing. Gutenberg brought in the transition from hand-written books to large-scale print – and now we see yet another shift, where books are transitioning from ink, paper and the printing press to bits stored inside a variety of devices. Towards the beginning of the printing press revolution, there was a strong desire and tendency to mimic the “old” format as much as possible, in terms of look and feel. Gutenberg and his associates even hand-drew illuminated decoration on the Gutenberg Bibles, to retain the similarity to the older, handwritten copies of the Bible. In what seems to be an almost eerie repetition, today, in the ebook, we see a strong desire to mimic the traditional book as much as possible. (eg ebook readers trying to retain the older “UI” paradigm, efforts to make ebooks retain the formatting niceties of traditional books, etc). This is not unusual, or wrong. We are used to the traditional book, and it is important to make the path to transition as smooth as possible.
However, what makes me really excited at this stage is something else. It is the potential new things we could do with Ebooks, things that would not have been possible with books in the old format. This weekend, I did some changes to a Epub file, and extended the Read Activity a bit to come up with a few such things:
Audio-visual content inside books: This is almost obvious – with the transition to books which are read on devices having audio/video capabilities, the next logical step is to embed these into books.
(Video from the Internet Archive, text from Wikipedia)
An interactive shell inside a book: An interactive Python shell inside a book teaching Python, so that small examples and snippets can be tried out inside the book, right away.
(Text from How to Think like a Computer Scientist, Python edition)
A full blown, interactive environment inside books: A book on digital logic can have a small sandboxing area, where readers could connect the various virtual components together, and see what happens.
(Text from Wikipedia and the Lorem Ipsum generator, demo from the Etoys project)
Of course, this is just a proof of concept, and probably most Epub readers will simply ignore the interactive content part. Moreover, there may be security issues with such books as well (the idea of having a Python shell inside a book will make many nervous) – but I think this is where Bitfrost, and its software implementation, Rainbow (which is essentially an isolation shell) comes in.
There is another way of “interaction” which I have not covered in the above screencasts – and this is something which is already available in traditional ink and paper books, especially text-books. Ebooks need to support “exercises” like fill-in-the-blanks, multiple-choice-questions, etc. There is an urgent need to support this, and this should be done in a standardized way. The local storage standard associated with HTML5 seems to be a possible way forward, though probably there might be better ways to do this (especially if we want the ability to have teachers remotely check and evaluate exercises done on e-textbooks).
For the past few weeks, I have been spending most of my time implementing Epub support for Sugar’s Read activity. Epub is gaining increasing acceptance, and a few weeks back, Project Gutenberg started distributing many of their material in the format, and Google + Sony also seem to have started to distribute a large chunk of public domain books as Epubs.
Today I finally reached the stage where the work could be tested on an actual XO, and here’s how it looks:
The rendering is done using WebkitGTK (the Python bindings) and I was a bit concerned about the possible performance issues on the XO-1 (which has a relatively ancient processor, slow filesystem access, only 256 MB of RAM and no swap). The biggest worry was the loading time – since it involves pre-rendering the entire book to gather metrics for pagination (most Epub books I have come across do not have clearly defined page-breaks, so that has to be figured out), but to my surprise (and relief) the load time turned out to be quite acceptable.
Right now, the viewer supports a very limited subset of the Epub standard (and works only with XHTML based Epubs), but so far it has managed to handle all the files I have tested it with. The viewer is a standalone widget used by the , which should make it possible reuse the work to develop a Epub reader for GNOME as well.
Once the Epub support in Read reaches an acceptable state, the plan is to start working on implementing support for the draft Open Publication Distribution System specs, which allows ebook distributors to distribute e-books via XML catalogues. It makes sense to support this in Read, as well as in the school server, to ease the e-books distribution process. For example, if we have a large e-book collection for a particular deployment, it may not make sense to put all of them in individual laptops – instead allowing the user to browse/search the catalogue and download the books as and when required would probably be a better option.
This blog has not seen much activity in a while, so here goes:
Bought a HCL touch-screen based netbook. It’s somewhat ancient hardware, but most of the stuff works out of the box (except for the webcam, which does not even show up in lshal or lsusb). The touchscreen required a binary driver – but a Free/Open Source version seems to exist, though I could not get to calibrate the screen with the FOSS driver variant [Update: The webcam works - I had to press Fn-F5 to enable it. It is turned off by default to conserve battery.]
Taught myself (this was long overdue – but at least now I can admit that I did not know what I used not to know) how to properly write Python extensions in C. I started out with bindings for Hunspell (I’m reading up a bit on morphology nowadays, and finding it to be tremendously entertaining). There was a Python extension for Hunspell already, but it did not compile for me, and that pushed me to decide to figure out how to do this myself. One thing led to another, and so, as of now, there is (in progress) extensions for handling:
libgettext-po. This should be faster than the existing pure Python based PO file parsers out there. (maybe at some point, I could make Pootle/Translate Toolkit use this, and make the work of OLPC/Sugarlabs translation team members somewhat less frustrating.
XKB. I must admit that I took a shortcut for this, and this extension is actually based on the awesome libxklavier. The final plan is to develop a Sugar extension for managing the keyboard options and layouts using this extension. The code in the main git repository, though fairly complete in terms of what is required for Sugar at the moment, is not implemented via (py)gobject. Implementing the pygobject-based wrapper is turning out to be a bit more complicated than I initially thought, but some code for that is also available in this repository (it is somewhat easier now, since I know (at least most of of) what is happening under the hood).
Released a newer version of the FBReader activity, which is much more improved in terms of usability (eg: response to the game keys keys while the XO-1 is in tablet mode is much more smoother, and all the keys do something useful). People seem to be happy with the new release.
Coming back to the present, right now, among other things, I’m working on a few interesting (and important) enhancements for the book-reader(s). Some of them include support for long keypresses (eg: pressing the “square” game key for two seconds will show the table of contents), notification of critical power events (I realized to my horror during dogfooding, that in tablet mode, while the book reader is open in full screen, there is no way to tell how much battery-charge is left), etc. The bookmark support feature that I came up with a few months back needs a bit of polish, but I think I can make this show up in the next release of Read.
Sucrose 0.84, the latest stable version of the Sugar educational platform has been released. A large number of bugfixes, new features, improvements and tweaks have gone in during the past six months, and to try out this release, you can use Sugar on a Stick.
Sugarlabs (the organisation which is currently driving the development of Sugar) is a mentor organization for Google Summer of Code 2009. A list of ideas is currently on the Sugarlabs wiki.
It looks like Google has decided to publish out-of-copyright books as ePub files for the Sony Reader. This is awesome news, all the more so since some of us have been working for the past few weeks to ensure that more ebook formats are supported in Sugar. As a part of that, I have created a Sugarized version of FBReader, which handles epub files superbly:
Pootle migration: We are moving the OLPC/Sugarlabs Pootle instance to a newer dedicated server, which should speed it up considerably. This has also given me some opportunity to fine-tune and polish our l10n workflow – things should be a bit more easier and smoother (and faster) for translators. I also managed to gather some interesting data from the log and user registration files. It turns out that we have more than 1000 translators registered with the system, among whom about half have actively contributed translations in the past one year. I’m not sure what the user statistics for other Pootle installations are like, but it seems that we are one of the larger users of Pootle out there.
Read hacking: I have been also spending some time hacking on Read. While Mr Super Awesome Tomeu has been pushing our Evince patches upstream, I have been working on a few interesting features for Read (we have moved to Gitorious, which is so cool):
Support for books from the Universal Library: Many of the scanned childrens’ book from the Universal Library Project are too graphics heavy for the XO hardware to be handled in PDF form. However, it looks like the project also stores the book as zip files with each scanned page archived inside the zip file as individual jpegs – which in other words, is very similar to the comic book archive format which Evince (Read’s backend) supports quite nicely. More importantly, this format seems to have lesser performance issues on the XO hardware (compared to graphics heavy PDF files). So I have been making sure that Read also handles this format gracefully.
Bookmarks support:This has been one of the oft requested features for Read, apart from annotations. The original design specs for Read already provided me with ideas on how the UI should look like, so with some amount of coding, I have bookmark support which mostly works . I am also trying to do the implementation in such a way so that it would be easy to add support for sharing of bookmarks later on in the future. If anyone is interested in doing a project, contact me (hint.. hint )
Code for the above lives in the sayamindu-sandbox branch of Read’s Git repository. I plan to take a stab at annotations during the next few weeks – I have some ideas which, with some luck, may work. I also have some plans about a saner full-screen/ebook mode for Read – let’s see if I get the time to implement those as well.
This came up in one of the mailing lists a few days back. Serves as a reminder as to why the work we all do is so relevant and so important.
G1G1 is back (and we are shipping to Europe as well for this edition). This time, with Amazon around, the delivery issues would hopefully be a lot better.
It looks like the XO is topping the Amazon bestsellers list in the computer category today.
The laptops can also run GNOME with Fedora as an option (put in an SD card, and it will boot Fedora, pull the card out, and you’ll get Sugar). Someone is already selling Fedora pre-installed SD cards for the XO on Amazon. (of course, you can always create an image, and put it on a SD card yourself)
Apparently there is still confusion about OLPC and Microsoft – Greg’s post should clear things up.
Among the G1G1 related marketing efforts, there’s a pretty awesome video (I’m trying to find out if there is a Ogg version somewhere), and a cool (though flash based…) “equations to change the world” website, equation.laptop.org.
Got Table of Content support working in Read Activity
Wrote a small PDF viewer tool with support for the Journal which is then used by mozplugger to show PDF files within Browse. (You can put the file in your journal if you like it)
Over the past few weekends, I have been working on a few (semi)hobby projects.
Conversion of XKB data to M17N tables
I discovered pyparsing while working on this. The tool I wrote is supposed to extract the data out of XKB symbol files, and convert them into a format which can be easily modified into M17N db files. In fact, for some keyboard layouts, the output was directly usable in m17n (via SCIM), without any kind of direct modification at all.
The only problem with the script is that the parsing of the XKB symbol files take a significant amount of time, but in the end, it does provide something useful. [Gitweb]
An image viewer activity for Sugar
Sugar did not have a nice Image Viewer activity which I liked, so over the weekend, I hacked together a small activity which would perform the basic stuff expected of an image viewer (zoom, rotation, etc). [Gitweb]
Among them was the mayor of South Beirut, with whom I spoke. ‘The American government sends bombs to kill the innocent,’ he said, ‘and the American people send us computers for our children. We are very grateful to OLPC. This means opening up the world to our children.’
Also, in related news, Sugar is being translated into Aymara. If you can help in this effort, or for that matter, any of the translation efforts, you are more than welcome to jump in .
Nicholas Negroponte and David Cavallo will be in Mumbai during the first week August, for the OLPC India Day. You can register for the event here.
David recently gave a talk about the education model behind the efforts of learning group at OLPC. The talk was recorded and can be viewed online at dailymotion.
Also, on a somewhat related note, Marvin Minsky has written a series of extremely interesting essays on learning, which are all available on the OLPC wiki.
Summer of Code Updates
Julen has been showing awesome progress with his SoC project. He has already completed implementing the first feature in the project roadmap, and his ideas on feature #2 looks excellent.
Going back home
Today, I go back home, after spending around two weeks in Cambridge. It has been an exciting and productive visit – I got the chance to interact with a lot of people, and to do a lot of brainstorming on some of the problems that have been bugging us, and my personal TODO list for the next few months seems to be quite interesting.
Some statistics
People often wonder about the exact number of OLPC XO-1 laptops out there. Till date, Number of laptops shipped: 390,000 Number of laptops being built per month (currently): 50,000
That would be, I guess, one of the single largest Fedora derivative deployments out there .
My Dell XPS M1330 laptop had been freezing randomly for the past one month or so, and finally, on Monday I decided to call up their customer support. After around 40 minutes of being kept on hold and being redirected among different departments and IVRSs, I finally got hold of a support guy, who was quite helpful. He told me that complaints similar to mine had been coming in for some days, and he would send someone to replace the laptop’s motherboard by Thursday. Which was OK, till Thursday evening…
On Thursday evening, I got a call from a Kolkata number, and the guy on the phone told me that the replacement motherboard has not arrived yet, and they had no clue whatsoever on when it could land up. The guy was however, helpful enough to give his direct contact number, but explained that he was working for some subcontractor hired by Dell (Wipro ??) and all I can do at this stage is call up Dell support again. Bleh… so much for “Next Day On Site Service”.
(I really hope that this does not turn out to be like my previous experience with Dell)
In case you are trying to flash your OLPC XO-1 drive with a SD card, and if you get an error which says SDHCI: command ready timeout, Bad read of .img file, take a look at this workaround. It should work.
Finally managed to watch Khuda Ke Liye. Highly recommended.
Last Saturday, I appeared for what was the last examination of our four year BTech degree course. College life has ended for me, at least for the time being. It was fun while it lasted, bordering on insanity sometimes (can you imagine “normal people” participating in a sport which involves pouring rotten, and really stinky paper-maché over each other’s heads ?). The last few days were bitter-sweet, with a lot of memories, some of them happy, some of them not so happy, coming back all at once. I guess, in the end, all of us had a wonderful four years, years that made us mature, strong, and much more acquainted with the ways of the world. Thanks to everyone who has been beside me during the past four years, through all my ups, downs, successes and failures. Thanks a lot .
This week, I’m starting full time with OLPC. Apart from facilitating and helping with the l10n and i18n efforts (which I have been doing for the past six months), I also expect to start helping out with various parts of the OLPC software stack.
Everything on this site are my own personal opinions and thoughts. My employer has nothing to do with them.
Colophon
Sayamindu's Ramblings is brought to you by WordPress, PHP, Apache, GNU/Linux, the Gimp, some electrons, and a somewhat convoluted mass of organic matter, sometimes referred to as the human brain. Some electrons and a cat were disturbed during the making of this blog.