Projects

Major software projects I have developed.


Sequencer

The Sequencer is a software developed for the operators of the CERN Control Centre, which controls the whole system of particle accelerators. It is a 3-tier software developed in Java 6, with several GUIs, a J2EE server, and different execution agents (front-end computers). The Sequencer operates similarly to a debugger. It has the purpose of running the long sequences of steps which are required in order to produce and accelerate the particle beams and to deliver them to the physics experiments.
The core component executes the sequence and communicates bi-directionally to the GUIs through JMS via an ActiveMQ broker. The operator can use the GUI to run/pause/resume the sequence, set breakpoints, skip lines, or simply observe a sequence that is running on another GUI.
A set of plugins allows the Sequencer to be used with different accelerators such as the Large Hadron Collider and the Super Proton Synchrotron. Depending on the facility, the sequences are written in Pnuts language or retrieved from a database.

As the designer and lead developer of the GUI, I gathered project requirements, created project specifications following the features requested by the Sequencer operators, and ensured that the Sequencer GUI was continuously integrated with the core component. I also redacted the operator manual and Javadocs, and ensured it was always up-to-date.
The GUI is entirely written in Swing (with the exception of some small SwingX widget) and is composed of about 16,000 lines of code.

Trivia: a Sequencer-like program and other LHC control software has been featured in Ron Howard's movie Angels and Demons (from the homonymous book by Dan Brown).


JIRA Advanced Mail Handler

This is an enhancement of the standard email handler for the Atlassian JIRA issue tracker system. It greatly improves the capabilities of the standard email handler, allowing the user to define almost every parameter of an issue in the email message.

I developed this software for the CERN Accelerators and Beams Controls group, which then released it as Open Source under the BSD license. This project was maintained by me for some time, and afterwards by CERN, but it is not maintained anymore.


Termination Control

A master-slave Java application written for CERN. The Master GUI allows the user to remotely shut down, via JMS, any Java application on which the Slave has been implanted. The shutdown can be immediate or delayed by a fixed time, and the user of the remote application may also request an additional delay; these delays are all set from the Master. Once the remote application has been terminated, a courtesy message remains on-screen to warn an user that may have been away from the console.


CHORUS Control System

This is a suite of control and audit programs that I independently conceived, designed, and developed as a technical student at CERN in the framework of the CHORUS (WA95) experiment. Implemented in Java/Swing on the basis of a pre-existent Monitor application, this suite is highly configurable and provides an easy-to-use, user-friendly graphical interface. It proved to be very reliable, and has been used until the end of the experiment. I also wrote a full documentation for users, administrators, and developers.

The CHORUS experiment was designed to search for neutrino oscillations in the muon-neutrino to tau-neutrino channel. The experiment is a combination of high precision tracking detectors, calorimetry and a large emulsion target. The analysis of the events in the nuclear emulsion requires high speed readout of CCD cameras, high precision mechanics and state-of-art optical systems. Three automatic microscopes are operated concurrently, and the data acquisition and process control are performed for each of these microscopes on separate PCs, with the help of two commercial DSPs. The results of the measurements are stored in an object-oriented database over a network. The measurements are performed fully automatically and 24 hours per day.
This suite of control programs are run on a fourth PC and permits effective remote control of the lab. It is composed of three standalone programs: the Control Panel, the Alarm Checker and the Dispatcher Console. Through a messaging system on the network, communications are exchanged between the production PCs and the control PC.

For each microscope, an instance of the Control Panel (the control program, which contains a graphical user interface and a message handler) is started. This application allows the human operator to interact with the measurement process through a finite state machine. The setup conditions and measurement dependencies are preset and stored in configuration files. The graphical interface then builds a large part of the widgets dynamically at runtime by parsing the configuration files.

Another application, the Alarm Checker module, controls the messages issued by the production PCs and checks if the operator must be alerted. An alarm-configuration file determines if the alert is just visual for operators locally available, or whether a message must be sent to a remote operator via email or SMS message over the GSM system. Alarms are also stored for future reference.

A third module, the Dispatcher Console, acts as a message sniffer and allows the user to filter and monitor the messages exchanged between the different components.


zkp

Implementation of the Feige-Fiat-Shamir zero-knowledge proof of identity protocol, written in C language and using the GMP lib (GNU Multiple Precision Arithmetic library) to compute 512-bit prime numbers.

Written during a traineeship in the Cryptography Team of the Computer Science Lab at Ecole Polytechnique and released under GPL license.




Other projects

Here is a collection of my smaller projects, university assignments, programming exercices, experiments, and other various stuff. Whenever possible, I made them freely available in the hope they can be useful again to someone else. Please note that these projects (most of which are quite old) are not maintained anymore and are released "as is" without any kind of support.


Scanlog

A plugin for the Nagios monitoring system, written in PowerShell. It allows a Nagios user to perform an advanced search on a logfile.


Rosetta Stone import script

A PowerShell script to easily import users into the Rosetta Stone e-learning service.


Listmaker

A Java 1.5 widget that allows the user to create a list by selecting elements from another list. Can be used as a JPanel or a standalone Dialog.


RAMM Proxy

A filtering multi-threaded HTTP proxy server written in Java.


Janx

A dynamic navigator for Java classes. It retrieves information about the objects in the JVM from the bytecode. This is done by using the reflection API.
Written in Java 1.2.2 with GUI Swing.


BCH

Constructor of finite bodies Fq (q = pm) and of Bose-Chaudluri-Hocquenghem codes.
Written in Java 1.1.


UMLV Multicast Chat

A tiny chat client made of about 100 lines of Java code. I wrote it as an exercice of multicast communication in Java: the clients connect to a class D network address and send/receive chat messages via UDP datagrams.


PVC

The Travelling Salesman's Problem, solved graphically by different heuristics.
Written in Java 1.2.2 with GUI Swing.


Python programs

A collection of small Python programs and exercices, just for fun.


Landscape Navigator

This C-OpenGL program takes as input a PPM greylevel image and creates a 3D landscape using the image as map; the greater the RGB value of a pixel, the higher the height on that point. The program then allows the user to navigate the landscape like in a flight simulator.


Outil de recherche de sous-mots

This C program builds an automaton to retrieve the whole set of subwords of a given word, or all the subwords separating two given words. It is also capable to test the equivalence between two given complete finite deterministic automata.


3D solids

This C program operates geometric transformations of wireframe solids in parallel or perspective projection, and outputs the result in the form of a 512x512-pixel PPM file.
Below an example of output image, resized to 256x256.


HMAC-MD5

C source code for HMAC and MD5 as excerpted from RFC 1321 and RFC 2104, with a few changes: fixed typos, replaced some deprecated function, and added a function to test the keyed hash.


roulette / crypto / 740

Three small and very old programs in C language, written under Digital UNIX (OSF/1) v3.2 on a venerable DEC Alpha 4610 machine.

  • roulette.c - a Roulette game
  • crypto.c - a program that performs text encryption using simple ciphers (transposition, substitution, Vigenere, etc.)
  • 740.c - an archive with file I/O to keep track of revenues and expenses data; it implements all functions for reading, modifying, adding, and deleting records

sphinx

sphinx stands for Simple Picture Html INdeXer. It's a Bash shell script that I wrote several years ago to allow me to create/update a Web picture album directly from command line, easily and with minimal hassle. I developed it because at that time I couldn't find any software that did what I wanted.
All you need to do to use it is upload the pictures on your server and write their captions in an ASCII text file, then run the script. sphinx will take care of creating (or updating) the whole album, by generating thumbnails (via a call to ImageMagick), all picture pages, and the index pages.


Email Munger

A small program that encodes ("mungs") an email address so that it becomes invisible to web spambots. According to an empiric test I've been carrying out, a munged address receives 95% less spam than a non-munged one.
Implemented in Java, JavaScript, Perl, and Python.


The Library of Babel

This small and quite useless PHP script allows you to read a random page of a random book of Jorge Luis Borges' immense Library of Babel.


Chess tutorial

A multimedia CD-ROM, in French and Italian language, that teaches the basic rules of chess. Created with Asymetrix's Multimedia ToolBook.
Being ToolBook a copyrighted software and required for this tutorial to run, this project is not publicly available.