Java SE, EE, Grails & libraries (Guava, Jersey, Apache...)
Spring Core, Web/MVC, Boot, AOP, Data
Database Oracle, SQL, PL/SQL, NoSQL
Development Agile Methodologies, TDD, , SOA
Design / UX CSS (SASS / LESS), Bootstrap, Swing, GWT
Member of the IT-CS group (Communication Systems) which is in charge of telephony (GSM, VOIP, analog), networks (from top-down: structured cabling, selection of switches/routers, installation, network engineering, network support, Wi-Fi) and central network services (DNS, DHCP, Radius, NTP, …).
In this group, my section, IT-CS-CT (Communication Tools) is a small team (around 7 people) of young and multicultural developers and is in charge of building software to support and manage the network, telephony, and group services.
The database controlled by our section (LANDB), is the core of the network activities at CERN, and we model all needed networking and telephony concepts that will be either consumed by high-level applications that we build or by other low-level applications in other sections of the group.
Administrators application, it is used by members of the group, security team and other power users to configure the network.
This application has been developped since many years, thus there were many architectures (JSP code, J2EE beans, master singleton with all the code, …). I proposed to introduce a new layered service-oriented architecture based on Spring (MVC, Data, …). This ended up with the standard three layers: controllers, services, repositories.
By using this architecture we were able to share code (through maven artifacts) among all the application that we develop.
User-facing application, it is used by all the users and visitors at CERN who requires network connectivity.
The old application WebReq was in Perl and written more than 20 years ago, it has been migrated to Grails.
The application backend is written using Grails framework. The service layer is shared between CSDB and LANDB Portal as a Maven artifact.
The application frontend is using AngularJS.
After evaluating different options, I proposed to replace some parts of the legacy application using Spring Boot powered micro-services.
I chose Spring Boot as we were already heavily using Spring framework and it was at that time the more mature framework. It allowed us to migrate very quickly and easily legacy features to our new architecture.
LANDB is the core network database which stored all the network configuration: topology, devices, users, connections, firewall, fibers, telephony, …
This database is the core of all the application developped in the section and is heavily used by other people around CERN using SOAP and REST API.
Since the database was the common layer of the legacy applications, all the logic has been developped in PL/SQL over many years. In order to greatly simplify the maintenance and the evolution of the codebase, I proposed to migrate this legacy code to a service oriented architecture. The two main application now use the same service layer and a REST interface will be setup based on the same layer.
I was in charge of administering all the applications used by the developers, inside the section but also used by other people in the group.
I was responsible of the SVN repositories used by the whole group. The creation of the repositories and the access management was automated using the access roles provided by CSDB application.
In order to provide high quality source code, commit hooks were setup running Checkstyle static analysis prior to any commit. This enforced the same source code format and really reduced the different development styles of each developer.
To build our applications we are using Atlassian Bamboo.
Very similar to Jenkins, I was maintaining and updating the build plans depending on the environment change: migration to Java 8, development of new applications based on different frameworks (Grails, Spring Boot, Android, ANT, Maven), retirement of old applications.
As part of our software development life cycle, prior to deploy any changes to the codebase, peer reviews were mandatory. Using Atlassian Fisheye at least two other developers had to review the code. This not only greatly improved the code quality, but also allowed the simplify knowledge transfer among all the developers.
I was managing the entire Selenium grid, from its setup to its maintenance using OpenStack to manage the nodes of the cluster.
I decided to develop a simple framework that allows to drastically simplify the development of integration tests, by creating a layer between Selenium API and our own applications.
The IT department at CERN is mostly using Git as VCS. In order to profit of all central services provided by IT, I took care of the migration of our standalone SVN server to GitLab.
This included to migrate all SVN repositories to Git keeping the history. As well to migrate our build system (based on Atlassian Bamboo) to GitLab CI (using Docker containers).
Organizer of a serie of events whose main goal was to build a community of software developers around CERN. Started in September 2015, the first event was very popular with more than 200 people attending (both in person or via webcast).
There are two events per year and span other a full day (or two afternoons). The Forums consist of talks and presentations by CERN software developers which present there point of view about the selected topic.
How do you keep your software from exploding?
September 28 and 29 2015
Due to its popularity we had to extend the number of presentation slots from 6 to 20. Thus the event spanned over one day and half and more than 200 people attended both in person or via the webcast.
Are you a Python guru, or would you like to learn?
May 30 and 31 2016
J2SE Swing Protocols GWT-RPC, RTMP Multithreading 1500+ Threads Tests JUnit
As member of a small development team (around 10 people), I was developing on NeoLoad software.
NeoLoad is a load testing solution designed for web and mobile applications to realistically simulate user activity and monitor infrastructure behavior. Developed in Java, Neoload is a heavy client using Swing for UI. To generate heavy load on tested servers it generates virtual users that replay a recorded scenario.
Based on Agile methodologies
SVN as version control system
Bugzilla as backlog
Jenkins as build system
JUnit for unit testing and QFTest for Swing UI testing
Theses modules are used to record the protocol traffic and display it in a user-friendly way. This allows the user to easily understand the purpose of each request but also to modify them according to their testing scenario.
Also used to execute the requests during a load test, these modules required strict memory management and code synchronization as they are used by more than 1500 threads simultaneously.
Protocol developped by Adobe to communicate between a media server and a client (mostly Flash player). Detect and record RTMP traffic at TCP level (using tcpdump/jNetPcap). This required not only to reverse-engineer the protocol but also to adapt the module to work with a variety of media server (using their own retro-engineered protocol).
Protocol developped by Google to ease communication between a GWT client and the server. Text based protocol, it is used to serialize Java objects between client and server. This required to understand the protocol by understanding GWT source code and be able to simulate it.
Modules used to analyze the behavior of the environment when performing an application load test. Each of them required to analyze how the monitored element provides statistics, retrieve them and provide usefull information to the tester.
Connection to hypervisor Web service and collection of provided statistics.
Oracle Application Server, JOnAS, GlassFish
JMX connections to retrieve populated MBeans, statistics are different for all servers.
JDBC connection established with the database and statistics are retrieved using engine specific SQL queries.
The Spring Social Amazon project is an extension to Spring Social that enables integration with Amazon.
It provides all needed functionalities to seamlessly integrate Login with Amazon OAuth service in any Spring Social enabled application.
Android application for assets management.
Je reviens après ce long silence pour vous présenter une “nouvelle” technologie qui se développe de plus en plus : les bases de données NoSQL, et principalement Cassandra, la solution de la fondation Apache. Introduction Pour commencer, une base de données NoSQL q’est-ce que c’est ? C’est une base de données non relationnelle. La plupart des bases de données relationnellesMySQL, Oracle, PostgreSQL) utilisent le langage SQL pour fournir un accès aux données. Pour les bases de données NoSQL, il’y a donc pas de requête SQL. Le stockage utilise alors différentes représentations : Bases orientées clé / valeur : représentation la...
La version 2.0 de GWT (Google Web Toolkit) est sortie (j’ai un peu de retard à cause du boulot ) et avec elle de nombreuses améliorations, principalement pour améliorer le développement des applications. Cette nouvelle version est accompagnée d’un outil d’analyse des performances des sites : Speed Tracer, qui donne des pistes d’amélioration de l’application. Development Mode Dans les versions précédentes de GWT, pour tester une application en cours de développement, il y avait le Hosted Mode. C’est une application que l’on lançait depuis son IDE, qui démarrait un serveur Tomcat et qui permettait de tester “rapidement” sont application Web....