A simple Javascript image viewer

Here is a very simple but functional Javascript image viewer (< 2ko) with no dependency (not even JQuery).

It is used by éClaircie. For a demonstration, please see the following page: Screenshots.

The source code is available in the second part of this post.

(More and comments...)

PyMedTermino 0.2 has been released !

PyMedTermino (Medical Terminologies for Python) is a Python module for easy access to the main medical terminologies in Python.

PyMedTermino 0.2 has been released ; this version is updated with the latest SNOMED CT and fix a bug in the computation of the lowest common ancestors of a concept.

It can be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/PyMedTermino

PyMedTermino 0.1 has been released !

PyMedTermino (Medical Terminologies for Python) is a Python module for easy access to the main medical terminologies in Python.

PyMedTermino 0.1 has been released and can be downloaded from PyPI (Python Package Index): https://pypi.python.org/pypi/PyMedTermino

BibReview 0.1.1

BibReview is a software for managing bibliographic database. Here is the latest version 0.1.1, in time for the preparation of IMIA Yearbook 2014!

New chapter "A medical informatics perspective on clinical decision support systems"

I have published a new book chapter:

other [x12] Bouaud J, Lamy JB. A medical informatics perspective on clinical decision support systems. Findings from the yearbook 2013 section on decision support. Yearbook of medical informatics 2013;8(1):128-31

New journal paper "Validating the semantics of a medical iconic language using ontological reasoning"

I have published a new journal paper:

journalif [j17] Lamy JB, Soualmia LF, Kerdelhué G, Venot A, Duclos C. Validating the semantics of a medical iconic language using ontological reasoning. Journal of Biomedical Informatics 2013;46(1):56-67

Cerealizer 0.8.1

Cerealizer 0.8.1 is out!

This is a new bugfix release. Get it here: http://download.gna.org/soya/Cerealizer-0.8.1.tar.bz2

Towards Soya 2.0

Soya 2.0 is coming!

The most striking feature of Soya 2.0 is mini shaders. They allow to write Open GL / GL SL shaders so easily! With GL SL, you have to rewrite the entire rendering pipeline, even if you want to modify only a small part of it...

On the contrary, with Soya's mini shaders, you can write a mini shader that overrides a part of the rendering pipeline (ex customizing the lighting computation), or that adds an extra step in the rendering (ex deforming the model geometry). Then Soya assembles all mini shaders, adds the missing pieces of the rendering pipeline, and generates a GL SL shader.

Additionally, Soya's mini shaders can be written with a Python-like syntax ;)

Soya provides 16 classes mini shaders, each corresponding to a specific part of the rendering pipeline. Here is an example of a "camera-space deform" mini shader, which deforms the model's geometry in camera space:

wavy_mini_shader = soya.MiniShader("wavy", """
uniform float self.time
def void cameraspace_deform_mini_shader():
  current_vertex.x = current_vertex.x + 0.2 * sin(0.2 * self.time + 3 * current_vertex.y)


Mini shaders can be associated to any object: a Model, a Body (an instance of Model), a World (a group of other 3D object) or a Material. When associating a mini shader to a World, it is inherited by all objects inside this World, and automagically combined with objects' own mini shaders. For more details about mini shaders, see the mini-shader-* tutos!

Want to try and start hacking with Soya 2? You're welcome! The development version can be obtained on this mercurial repository: http://hg.tuxfamily.org//mercurialroot/oomadness/soya2.

Other new features include:

  • Support both Python 2.7 and 3.3,

  • Open GL SL shader support,

  • new exporters for Blender 2.6x, with a bugfixed Blender => Cal3D exporter, able to take into account vertex location, normal and texture coords when merging vertices,

  • LOD support for models,

  • pre-rendered background, usefull for slow computer or old-style games,

  • Partial Open GL ES support (not yet finished).

Cerealizer 0.8

Cerealizer 0.8 is out!

This new version supports both Python 2.x and Python 3.x! Get it here: http://download.gna.org/soya/Cerealizer-0.8.tar.bz2

Songwrite 2 0.4


Songwrite 2 0.4 is out ! This major version adds supports for diatonic accordion tablature and chords. Additionally, repeat symbols have been (greatly) improved, and a new starting screen has been added. And many bugs have been fixed. Enjoy!

Songwrite 2 0.3

Songwrite 2 0.3 is out ! This major version proposes an improved interface, more usable on small screens, and adds many functionalities including appoggiatura, harmonics, F keys on staff, strumming direction, rests,... It also supports Koyabu board, ukulele, and lyre tablatures (my new instrument, although I'll probably be the only one to use them :-)). It requires EditObj 2 0.3.

There are also many bugfixes, and the licence is now GPL v3 (instead of v2).

Here is the full change log:

  • Touchscreen support

  • Lyre, Koyabu board and Ukulele support

  • Support for F key, appoggiatura, harmonics, strumming direction and rests

  • Smarter copy-paste (autochoose between by string / by note pitch more accurately)

  • Name sharp and bemol notes adequately, depending of the tonality

  • Add a window's icon

  • Fontsize options for screen and printing

  • Interval identification: select 2 notes and Songwrite display the corresponding interval in the title bar!

  • Licence changed to GPL v3


  • Lyrics not placed at the bottom were bugged in PS/PDF export/printing

  • Printing tabs with staffs was sometime causing an infinite loop

  • Printing tabs with staffs was not showing # and b rightly on the staff

  • After playing, select the previously selected notes

  • When reducing the length of ALL bars, the newly created bars at the end now use the lew length

  • Take capo into account when playing

  • Can play hammer / pull / legato / slide with no limit of amplitude

  • Fix g8 staff

  • Fix capo

My research area explained graphically

Here is a graphical presentation of my academic research area... Nobody should now says that it is ununderstandable and obscure !


Soya 0.15rc1 is out !

Soya 0.15rc1 is out !

Here is the Changelog :

  • January 2009 : Soya3D 0.15rc1

  • ODE 10 compatibility (required)

  • New collide property for lazer.

  • Quiet mode for soya initialisation and quit

  • New event management system. round event are now stored in main_loop.event and main_loop.raw_event.

  • New round_task attribut for main_loop.

  • Allow screenshot from backbuffer.

  • Allow to use WorldStep instead of WorldQuickStep for ODE iteration.

  • Allow None as angular_velocity, linear_velocity, torque, or force.

  • Allow None as hi_stop, lo_stop

  • Bugfixes

  • Fix delta_x and delta_y in coalesced event

  • Fix AngularMotorJoint API

  • soya initialisation now write in the common stdout and stderr

  • Fix font related segfault when soya wasn't initialised

  • Fix Pudding MainLoop (thanks David Martinez)

  • Work-around for OpenAL bug for absolute sound sources

Using Sunbird calendar on PDA (i.e. wake on RTC alarm on calendar's events)

The attached scripts allow to use Sunbird on PDA, that is to say to wake up automatically the device on Sunbird's alarm. I am successfully using them on the Sharp Netwalker (aka PC-Z1) but it should work on any device that supports wake up on RTC (the Netwalker does only after some hacks) and uses the APM daemon for power-related event management (the Netwalker does ; however for other devices that use ACPI, it should be quite easy to adapt).

To install it, proceed as following:

  1. Install the python-pysqlite2 package.

  2. Copy the attached file (link below) sunbird_set_next_rtc_alarm.py somewhere on your PATH (for example, in /usr/bin) and make this file executable:

    chmod a+x /usr/bin/sunbird_set_next_rtc_alarm.py
  3. Copy the attached file (link below) 50sunbird_rtc_alarm in /etc/apm/suspend.d and make this file executable:

    chmod a+x /etc/apm/suspend.d/50sunbird_rtc_alarm).
  4. Edit sunbird_set_next_rtc_alarm.py . At line 3, indicate the maximum time (in second) your device needs to resume from suspend (the default 10 seconds is right for the Netwalker).

  5. At line 4, indicate the path to the Sunbird's storage file. if you have no idea at all, the following command should give you some hints:

    ls /home/*/.mozilla/sunbird/*/storage.sdb

That's all! Now, every time you suspend the device, sunbird_set_next_rtc_alarm.py is called. It looks Sunbird's calendar for the closest alarm, and, if any, define the device's RTC alarm as needed. Then, the device will wake up a few second before the alarm, and thus Sunbird will be able to beep you.