Major software projects I have developed.
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.
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.
- Screenshot #1: Master GUI
- Screenshot #2: Slave GUI, termination request
- Screenshot #3: courtesy message
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.
- User manual (gzipped PostScript, PDF)
- Project report (gzipped PostScript, PDF)
- Screenshot #1: Control Panel at start
- Screenshot #2: Control Panel - setup interface
- Screenshot #3: Control Panel - joystick controls
- Screenshot #4: Control Panel - configuration
- Screenshot #5: Alarm Checker issuing two alerts
- Screenshot #6: Alarm Checker - definition of the actions
- Screenshot #7: Dispatcher Console
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.
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.
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.
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.
A filtering multi-threaded HTTP proxy server written in Java.
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.
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.
The Travelling Salesman's Problem, solved graphically by different heuristics.
Written in Java 1.2.2 with GUI Swing.
A collection of small Python programs and exercices, just for fun.
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.
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.
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 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.
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.
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.
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.