FITG 2010 finished, debriefing.

Another awesome event, organized by Damien Marchal and Nicolas Roussel. And for the first time, the PyMT Core team was in the same place. Thanks to all my friends in Lille for coming during the show, it was really nice to see you too !

We’ve done one conference, using the “presemt” application. For all who wanted to use our presentation application, you can get it on PyMT Apps repository. The slides will be available in PDF soon. A lot of peoples was interested, and impressed by PyMT itself. I’ve been very glad to meet some PyMT users, specially Jay !

On the barcamp, we’ve animated 3 sessions:

  1. Write your first PyMT Application (mathieu)
  2. Make a game with PyMT + PyMunk (christopher + thomas)
  3. Advanced OpenGL optimization + Python optimization

(Content will be available soon)

During the event, some work have been done :

  • finish blobtracker in Movid
  • ability to record / save PyMT events (event-recording branch)
  • ability to share event over network (event-share branch)
  • using PyMT + Ogre 3D with Anthony Martinet

And we’ve think a lot about the future of PyMT, and where we want to go for 1.0. More information soon πŸ™‚

Also, a intern in the MINT team is actually researched to work on a project with PyMT. If any people is interested, don’t hesitate to send our CV to Nicolas.

It look like the future of PyMT is very good, and it’s just a start….

PyMT/Movid @FITG2010

That’s going to be a very nice event, again. A big UP to ircica team which have work with PyMT nearly from the start, and special thank to Damien Marechal for his contribution !

Now, they are doing a event on 3 days… and they are more.

Thomas Hansen and Christopher Denter from PyMT/Movid will be here ! For the very first time, our core team will be at the same place, IRL. That’s will change a lot from IRC πŸ™‚

Be ready for our workshop, we are scheduled in Friday, 13h30, for 15 minutes + 5 minutes for discussion.
We have some ideas about how we can be really wonderful during only 15 little minutes πŸ™‚

I’ll animate a session around coding with PyMT in Saturday. If you want to join, be ready with your laptop. It would be better if you already have PyMT installed.

For more information, you can read the FITG2010 website !

THSF 2010 finished, debriefing.

First of all, thanks to every awesome guys i’ve meet on this event. In particular to Marc BruyΓ¨re who give me a nice seat in his appartment. And every other guys in the tetalab !

I’ve been in Mix’art – Myrys, where living lot of artists, very nice. Creativity and OpenMind spirit is the keyword of the place.
The event involved Corpus Media, and they made fantastic show, based on the body, with video visualization and voice/audio transformation. I’ve take lot of pictures of mix’art, myrys, just browse them a little bit to feel the spirit πŸ™‚

I’ve made a conference on PyMT on saturday. Unfortunatly, the streaming was cutted due to some guys using Free Internet connectivity for downloading torrents… Thanks guys ): Part of the streaming is available, but audio is desync. Specially for this event, you can see the Presemt application, made with Thomas and I. It’s available on PyMT-Apps : Presemt is a application to make dynamic presentation, based on PyMT.
I’ll record a little video, and push it on the website !
I think people have really appreciated the conference, and we already got new users πŸ™‚

During the workshop day, Jimmy ask me if we can do an SMS Wall with PyMT, and play with it… I’ve spend more than 1 hour to check how i can get SMS from my HTC Hero. And i found Remote Notifier. Once a message is received on my Phone, it broadcast a TCP Packet using Wifi. 30 minutes later, we’ve got our first version of the SMSWall.
With a nice girl from tetalab (i don’t remember his name :/), we’ve started to make a V2 on saturday, with some other vizualization. But i’ve not been able to finish the code…

During the last day, i wanted to play with their LedWall in construction. An awesome work made by Lionel and Fabrice. This was my first attempt to use Arduino… and success ! After fixing some issues in the Arduino code, they have been able to use a sketch: Camera -> Pixelize -> Gray scale -> Send to arduino.

Now, you can check the video :
THSF – PyMT SMSWall + Deaf people
THSF – Led Wall !

And the pictures :

PyMT/Movid @THSP

THSP is a Festival in Toulouse, with lot of events and hackers, from the 28 to the 30 May.

Saturday, i’ll do a talk/introduction about PyMT and Movid. Jimi is doing a workshop during the whole event, to build another Wall, and some other Multitouch Table. It will be a nice playground for both software! Thanks to Marc Bruyere and Jimi Hertz for giving me the possibility to talk here πŸ™‚

Read more about the event with the THSP Program May 2010.

Multitouch Linux Support for PyMT

Since the last week, i’ve done some jobs about supporting nativly multitouch screens in PyMT. Linux was missing in the native support, next to Windows and MacOSX, already available.

2 supports have been realized : HID Input Support, and MPX/XI2 Support.

1. Kernel Part

HID Input is the Input part of Linux Kernel. Since 2.6.34, lot of multitouch screens got their drivers integrated in the source code. Most of the drivers have been done by the Stephane Chatty from the ENAC Laboratory, inside the ShareIT project.

HID Input is reading the Event generated by the kernel, using /dev/input/eventX.

The Event are documented in the input.h. New event type have been added for Multitouch support: all the ABS_MT_. As today, we support :

  • ABS_MT_POSITION_X : X position
  • ABS_MT_POSITION_Y: Y position
  • ABS_MT_PRESSURE : pressure
  • ABS_MT_TOUCH_MAJOR : width of the object
  • ABS_MT_TOUCH_MINOR : height of the object

Other event are ignored, but would be interested to add the support, like ABS_MT_ORIENTATION. But right now, no device support them.

This work is available on the latest version of PyMT. Check our PyMT github repository. If you want to known how to use it, you can read the mail sent to the pymt-dev mailing list.

The result of my work : PyMT + HIDInput support on Linux

2. Xorg

Since Xorg 7.5, MPX is available. MPX is the support of Multi Pointer inside X. Benjamin (from the Enac too), have provided a modified evdev module for Xorg, to read Multitouch Event from kernel, and pass them to Xorg.
This work require a running daemon, actually called multitouchd (on the same page as evdev). The daemon detect all the devices with Multitouch support, and create by default 5 fake mouse device, attached to the main multitouch device. With this way, each touch control one fake mouse device.

Unfortunaly, this is not stable, and with a stantum screen, once i get more that 4 or 5 touch, Xorg crash.

Anyway, i’ve start the support in the PyMT branch input-xi2. This rely on python-xlib, but this library required some change to make our work run.
Since it’s really more complicated than HID Input, i’ll not explain all the work right now. Maybe in another blog post.

3. So, which screen i could buy to play with ?

That’s pretty simple. ENAC (again) maintain a full list of multitouch screen working on linux, and the status of the support in linux kernel.
For my part, i’m playing with an Acer T230H. A little bit bugged, and support only 2 points. But enough to play and debug with right now.

That’s all for the moment, enjoy !

Movid, a Modular Open Vision Interaction Daemon

Hi everyone,

We are glad to announce the birth of the Movid project:

Movid is an acronym; it stands for ‘Modular Open Vision Interaction Daemon’. It’s a cross-platform and Open Source vision tracker, designed to be as modular as possible. Although the project is pretty young, it already features more than 20 modules, including blob and fiducial trackers as well as TUIO output. Movid is coded in C++, and use WOscLIB, cJSON, libevent, libfidtrack, jpeg-8 and XgetOpt.


Python: is X is better than Y ? Round 3, pure python VS cython

Round 3: pure python drawing VS cython

Benchmark code :

s = time.time()
for x in xrange(10000):
   drawRectangle(0, 0, 50, 50)
print 'result=', time.time() - s

Let’s take the Python version of simplified drawRectangle():

def drawRectangle(x, y, w, h):
   glVertex2f(x, y)
   glVertex2f(x + w, y)
   glVertex2f(x + w, y + h)
   glVertex2f(x, y + h)

I got the result on poor graphics card: average ~1.1268s

Let’s rewrite in Cython:

cdef extern from "GL/gl.h":
   ctypedef float         GLfloat
   ctypedef unsigned int  GLenum
   int GL_QUADS
   cdef void glBegin(GLenum mode)
   cdef void glEnd()
   cdef void glVertex2f(GLfloat x, GLfloat y)
def drawRectangle(float x, float y, float w, float h):
   glVertex2f(x, y)
   glVertex2f(x + w, y)
   glVertex2f(x + w, y + h)
   glVertex2f(x, y + h)

And the result : average ~0.0325s

PyMT Impact: rewriting graphx package πŸ™‚

On a NVIDIA 9800 GT: with 1000000 (instead of 10000):

  • Python: 16.1
  • Python -O: 17.2
  • Python -OO: 16.9
  • Cython: 0.29

Very weird about -O / -OO…

Python: is X is better than Y ? Round 2, remove exception VS test in + remove

Round 2: catching remove exception VS test in + remove

Benchmark code :

from time import time

# exceptions vs list in
def bench_in_remove(count):
    for x in xrange(count):
        q = []
        for z in xrange(1000):
        for z in xrange(0, 500):
            if z in q:
def bench_exception(count):
    for x in xrange(count):
        q = []
        for z in xrange(1000):
        for z in xrange(0, 500):
            except ValueError:

def bench_remove(count):
    for x in xrange(count):
        q = []
        for z in xrange(1000):
        for z in xrange(0, 500):

def run(f, c=10000):
    t = time()
    print '%-15s time=%.8f count=%d' % (f.func_name, time() - t, c)


And the result :

bench_remove    time=4.20256305 count=10000
bench_in_remove time=4.49746203 count=10000
bench_exception time=4.33078504 count=10000

We can see a little improvement with testing exception instead of testing in.
We can also see the overhead due to the test before removing in list.

I’ve also tested with xrange(-500, 500) instead of (0, 500), to trigger invalid removal. Here is the result :

bench_in_remove time=12.42448401 count=1000
bench_exception time=14.26106405 count=1000

Triggering an exception cost much time than testing if value is in a list…

PyMT Impact: must check.

Python: is X is better than Y ? Round 1, deque vs list.

This week-end, i’ve spend some time about searching how to optimize PyMT code. And done some interesting benchmark. Next days, i’ll post some of them, in order to remember which is the better solution.

For the first round: let’s test Deque from collections package VS Python List !


from time import time

# collections VS list
def bench_deque(count):
    from collections import deque
    q = deque()
    for x in xrange(count):
        for z in xrange(1000):
        while True:

def bench_list(count):
    q = []
    for x in xrange(count):
        for z in xrange(1000):
        for y in xrange(len(q)):

def run(f, c=100000):
    t = time()
    print '%-15s time=%.8f count=%d' % (f.func_name, time() - t, c)


And the result :

bench_deque     time=35.61677003 count=100000
bench_list      time=78.20481586 count=100000

Impact for PyMT: wm_pen, wm_touch.