Devoxx MA is a yearly conference in Morocco. Previously it was held in Casablanca but for their 4th edition, xHub, the organisation behind Devoxx MA, decided to hold it in Marrakesh, in the lovely Palm Plaza Hotel on the 27th, 28th and 29th of November 2018. Aside from the conference, the speakers were also offered an exclusive trip. Four colleagues of Ordina JWorks: Yannick De Turck, Tim Ysewyn, Tom Van den Bulck and Maarten Casteels attended both the conference and the speakers trip. Three of them were also featured as speaker. In this blog post we share our impressions and experiences.

JWorks @ Devoxx MA

Table of contents

The Speakers dinner

The evening before the conference started, we had the speakers dinner sponsored by Lightbend. The dinner was held at restaurant Kasar El Hamra in the center of Marrakesh. On our way to the center we got to experience the Moroccan traffic which seemed to be pretty chaotic with all the cars and motorcycles zipping around, evading each other on the streets. Once arrived, we got treated with Moroccan dishes. One after the other, each of them truly delicious.

Speakers Dinner

VueJS animation in action by Charles-Philippe Bernard

Charles-Philippe Bernard

Charles-Philippe explained why he loves VueJS so much. He criticised Angular and React because of the companies behind the frameworks, as well as the multiple variations of utilities and plugins. Instead, he prefers a community that stands as one behind the framework. Which is why he really likes VueJS as it is community-driven. He explained that for each functionality, there is exactly one solution promoted by the community.

During his session, Charles-Philippe went over several libraries that he often uses for animated websites:

A convenient trick that we learned during the session is how to make a JPG transparent using CSS. Note that this will only work if the image has a white background.

img {
    mix-blend-mode: multiply;
}

Be sure to check out Charles-Philippe’s amazingly animated slides.

MockK, the idiomatic mocking framework for Kotlin by Yannick De Turck

Yannick De Turck

Our colleague, Yannick, gave a talk about MockK. MockK is a mocking framework specifically made for Kotlin. As a Java developer, he is a huge fan of Mockito for using mocks in his unit tests. When he picked up Kotlin, Mockito was also his first choice to try out.

He explained however that using Mockito in a Kotlin project doesn’t go all that well due to how Mockito creates its mocks, which is by overriding classes and functions. And because Kotlin’s classes and functions are final by default, you can see that this poses some challenges. Yannick shared his experiences and mentioned that even though there is an incubating, opt-in feature to allow Mockito to mock final classes and functions, the user experience isn’t all that nice.

He looked for other frameworks and stumbled upon MockK, a mocking framework created for Kotlin by Oleksiy Pylypenko. MockK’s main philosophy is offering first-class support for Kotlin features and being able to write idiomatic Kotlin code when using it. He was pretty enthusiastic about MockK and went over all its features and its ease of use.

There is also a blog post written by Yannick specifically about his experiences with Mockito and MockK in Kotlin projects.


Stream Processing Live Traffic Data with Kafka Streams by Tom Van den Bulck and Tim Ysewyn

Tom van den Bulck Tim Ysewyn

Our colleagues, Tim Ysewyn and Tom Van den Bulck, gave a talk about stream processing live traffic data with Kafka Streams.

Tom presented the theoretical part of the talk starting with the bigger picture. He explained the stream processing concept which is basically computing data directly as it is produced or received.

Data at rest infrastructure

In the image above we can see an example without stream processing. In this case, the data is stored in databases and file storages. Using a scheduler, applications can retrieve and process the stored data.

Stream processing infrastructure

With stream processing the data will be processed directly as streams of events, creating other event streams for other applications if needed. The applications will react on events instead of scheduling jobs to retrieve and process data stored in databases and file storages.

Following up the theoretical part, it was time for the demo. Key part of the demo was of course the data that was going to get processed. The Flemish government offers XML documents with live traffic data. These documents are created every minute so by using a scheduled job, an event could be created out of it.

The theory behind all of this can be a bit abstract if you are not familiar with the concept which is why Tim first did some live coding to demonstrate how the events can be handled properly.

Afterwards we learned how Spring can be used to help us with Kafka and how we can periodically fetch the data. We did this by first using pure code and secondly with the help of some convenient annotations to do the same thing with less code.

At the end of the demo we created a small application that calculates the average speed for a specific sensor during a time frame of two minutes.

The slides are available on SlideShare. The demo code can be found on GitHub.

Applying (D)DDD and CQ(R)S to Cloud Architectures with Spring Boot and Docker by Benjamin Nothdurft

Benjamin Nothdurft Benjamin started off by giving a brief introduction on Domain-Driven Design explaining the different building blocks such as domains, domain events, ubiquitous language and Event Storming.
He also mentioned the famous two books: Domain-Driven Design by Eric Evans and Implementing Domain-Driven Design by Vaugn Vernon.

Benjamin went through all the different steps of Event Storming. The goal is to bring people of different silos together, such as developers, analysts, architects and business experts. Together you want to create a logically ordered sequence of events to document a system using an ubiquitous language i.e. everybody using the same vocabulary and terms. Events describe things that have happened and are thus always in the past tense e.g. product added to cart. In a next step you want to identify commands, which are the triggers of events e.g. add product to cart. There are also aggregates which represent the data that is interacted with. And finally you want to identify the bounded contexts grouping relevant parts together.

Benjamin then explained how this all gets translated to your system architecture. Each bounded context can be mapped to a single microservice. He covered different context map patterns such as event publisher, shared kernel, customer/supplier and anti-corruption layer together with detailed code samples. Afterwards he went through a CQRS example with many code samples and the questions you should be asking yourself when determining the right architecture. We really liked how in-depth everything was as many presentations about Domain-Driven Design usually remain rather abstract and high-level.

You can check out Benjamin’s slides on slides.com.

Resiliency for 140 PB Cluster by Meriam Lachkar

Meriam Lachkar

Meriam works at Criterio which is a marketing company managing Europe’s largest Hadoop cluster.

Criterio uses various technologies:

  • Batch Processing: Map/Reduce and Apache Spark.
  • Stream Processing: Apache Flink and Apache Kafka.
  • Machine Learning: Spark ML and Tensorflow.

Her talk focused on the Hadoop setup of Criterio. The current cluster in Paris has 220 PB of hard disk, 550 TB of memory and 100.000 cores. But since it is almost “full”, with 160 PB used, a new cluster has been set up in Amsterdam. Between both clusters there is a dedicated 400 Gbit fiber installed. Every day, 1 PB of data is generated.

Meriam currently works at a project in which they want to synchronise the data between both clusters. This was not a trivial thing to do and the main question was how they were going to sync the data between both clusters, as copying over all data would fill the existing line for an entire day. RSync was just too slow, also some jobs are non-deterministic which means that executing the job a second time will yield a different result compared to the first time.

Various options were considered:

  • Double run: this means that the Paris data center would still become the bottleneck and would not yield real business value
  • Producer push
  • Consumer push
  • Dedicated central service which will determine where the jobs will run, on which data center.

A dedicated central service was the chosen solution. Codenamed “Mumak”, as it is the convention to name everything in the Hadoop ecosystem to an elephant.

Dataset by dataset will be progressively moved to Amsterdam, so that jobs will eventually be distributed between both data centers.

La keynote de la nouvelle generation by Saskia and Lois

Saskia and Lois The closing keynote was presented by Saskia (13) and Loïs (10) Blanc, the children of Sébastien Blanc. They started the closing keynote by asking the audience to close their eyes for a few seconds and to think about the near future and how we would imagine it.

The audience had to explain what they were thinking of. Most people shared the same things such as self-driving-cars and robots to help in the household. Saskia and Loïs in turn, shared their vision of the future which pretty much aligned with ours.

Saskia started the first demo by giving an introduction on the Logo programming language while Loïs was doing some live coding. A simple square was drawn first but it got more interesting as they added rotations to draw more complex figures.

Loïs on the other hand explained Scratch, a program where you can create your own games, animations and interactive stories. He showed the community around the program and gave a really entertaining demo about two figures walking around.

Saskia explained us that she became more interested in what her dad was doing and that she wanted to get into more real programming. Her father being a Java developer, told her about the Groovy programming language. Saskia gave a demo in Groovy and explained some basics while live coding a small program. The program consisted of an Animal interface and a Cat class that could meow.

Saskia and Loïs ended their keynote mentioning that they both want to become developers of the new generation. Given their impressive presentation, we definitely see that happening!

The Speakers Trip in Essaouira

After three interesting days of Devoxx MA, we went on the speakers trip to Essaouira, considered as one of the best anchorages of the Moroccan coast. We started off by visiting Chez Ali in Marrakesh on the last evening of the conference. As we arrived we were heartily greeted by horsemen and Moroccans playing authentic music. We got to explore Ali Baba’s cave before passing by all kinds of folkloric groups. Dinner was served in big tents and consisted of multiple courses of Moroccan dishes. After the dinner we got to watch an amazing spectacle of stuntmen on horses, belly dancers and cavaliers.

Chez Ali

The morning after, we set off to Essaouira with three buses filled of speakers and people part of the Devoxx MA organisation. During the three-hour long ride we stopped by the magnificent “goat tree” and Arganomade, where they manufactured organic argan oil all by hand and where we got to see the whole manufacturing process. In the early afternoon we arrived at Essaouira Lodge where we would be staying during the trip. After checking in and unpacking our luggage, we set off to the Essaouira beach where we had delicious sea food at restaurant Fanatic.

Essaouira Lodge

With our hunger satisfied, we set off with our buses a bit further along the beach where we got to ride camels in caravans. With our newly allocated trusty steeds, we rode around the coast with the sun setting off in the background. After a 30-minute ride in the sand we arrived at a big tent where we would spend the rest of the evening. As dinner was being prepared in many tajines, we were entertained by live Moroccan music and dancers with a big cozy bonfire blazing about. This was truly an amazing and memorable day!

Camel Ride

The day after we went back to Essaouira beach and visited the fortress city with the walls still intact. As we strolled through the alley streets we got to visit all kinds of shops and markets. We had lunch on a roof terrace at Il Mare with an amazing view on the sea. Some more exploring was done around the city before we returned to our lodges. We spent the rest of the evening in our lodges where we invited all speakers in our lodge for a nice last evening together with a couple of Casablanca beers.

Essaouira Visit

As we would not have been able to catch our flight back to Belgium in time, the four of us booked a beautiful riad right in the center of Marrakesh. We explored the Djemaa el Fna together with its back alleys and visited an authentic tannery.

Riad Marrakesh

Summing it all up

Devoxx MA was amazing experience for us where we got to meet and befriend a lot of great people. We would like to thank the organisers for organising both Devoxx MA and offering us the chance to see more of Morocco with the speakers trip! The date for next year’s edition has already been announced and will happen on the 12th, 13th and 14th of November 2019. Be sure to mark it in your agenda!

Tom is a Senior Developer at Ordina Belgium, passionate about all software related to data. As competence leader Big & Fast Data he guides his fellow developers through dark data swamps by giving workshops and presentations. Tom is passionate about learning new technologies and frameworks.

Meet Maarten Casteels, a Practice Lead for Application Development at JWorks. With a passion for testing, he ensures that every code he creates is thoroughly tested before release. Outside of work, Maarten actively loves to bring people together.

Yannick is a principal Java consultant and practice manager at Ordina Belgium. He’s passionate about everything Java, Spring and cloud related as well as reactive programming, Kotlin, Lightbend technologies, software architectures, and coaching and enabling other colleagues.