Marwan Khelif

Experienced Java developer

Skills Experiences ▼ Projects Contact

{Skills}

Java EE, SE & libraries (Guava, Jersey, Apache...)

Spring Core, Web/MVC, Boot, AOP, Data

Database Oracle, SQL, PL/SQL, NoSQL

Development Agile Methodologies, TDD, OOD, SOA

Web JSP, Thymeleaf, JavaScript, JQuery

Design / UX CSS (SASS / LESS), Bootstrap, Swing, GWT

{CERN}

Network management software

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 network 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.

CSDB

Admin application

New layered architecture

WebReq

User-facing application Legacy Perl code migrated to Grails

  • Grails

    Backend in Grails

  • AngularJS

    Frontend in AngularJS

  • Micro-services

    After evaluating different options, I proposed to replace some parts of the legacy application using micro-services using Spring Boot.
    I chose Spring Boot as we were already heavily using Spring framework and it was at that time the more mature framework.

LANDB Database

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 applications developers in the section and is heavily used by other people around CERN using SOAP and REST API.

I was administering the database PL/SQL replacement by service layer in Java

Devops

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.

  • SVN repositories

    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.

  • Atlassian Bamboo

    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), retirement of old applications.

  • Atlassian Fisheye

    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.

  • Selenium Grid

    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.

J2EE Spring Boot, Core, MVC, AOP REST Jersey Hibernate Web JSP, SCSS, JavaScript Tests JUnit, Selenium

J2SE Swing Protocols GWT-RPC, RTMP Multithreading 1500+ Threads Tests JUnit

{Neotys}

Development of Neoload software

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.

Development Process

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

Simulation (record and replay)

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.

  • Adobe RTMP (Real Time Messaging Protocol)

    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).

  • Google Web Toolkit RPC

    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.

Monitoring

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.

  • Hypervisor

    VMWare ESx
    Connection to hypervisor Web service and collection of provided statistics.

  • Applications servers

    Oracle Application Server, JOnAS, GlassFish
    JMX connections to retrieve populated MBeans, statistics are different for all servers.

  • Databases

    DB2, PostgreSQL
    JDBC connection established with the database and statistics are retrieved using engine specific SQL queries.

{Projects}

Login with Amazon using Spring social

spring-social-amazon

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.

Login with Amazon using Spring social

Investr

Android application for assets management.

JavaScript unit testing framework

jsassert

JavaScript unit testing framework using fluent assertions.

{Blog}

View all posts

Contact me

Connect

Other ways

mkhelif@gmail.com

+33 629 93 72 95