Jon Trowbridge gave me a B4 OLPC XO the other day, and I'm absolutely loving it. It is so much faster than my old B2, and with the latest softare it is rocking. Harper and I were chatting and collaboratively editing a document from across Chicago with zero setup. There is a relatively new activity called Pippy that includes many Python scripts that are simple (hello world, etc), fun (random pitch/sound generator), and educational. Coupled with a Run button it is a simple interactive console. It doesn't have anything for using the XO's built in camera, so I dove in to figure out what I could do. I looked at the Record activity but found its gstreamer/picture taking code very tied to how it did stuff, dependent on Gtk, etc. So using it as an example I wrote a simple Camera class that returns the raw RGB buffer, and a PixbufCamera subclass that has the exact same interface but returns a Gdk.Pixbuf. With these two classes we can write awesome, Pippy-ish scripts, like a time-lapse photography program:
from pixbuf_camera import PixbufCamera time_lapse = 60 * 60 * 4 # Take pictures over a 4 hour period freq = 120 # Take them every 2 minutes camera = PixbufCamera () for i in range(0, time_lapse/freq): pixbuf = camera.takePicture () pixbuf.save ("series/test_%04i.jpg" % i, 'jpeg') time.sleep (freq)Using this program on the XO I captured this outside my window today (and scp'd it to my computer): I'd like to add video support and expose a bunch of gstreamer properties so you could create a time-lapse Ogg Theora video instead of JPGs. Perhaps eventually this camera API could be used by the Record activity itself. I really need to buy some mirror fragments and build a clip-on device for XOs so you can photograph things in front of it (meaning you can film something and use the computer simultaneously).