Jeroen and Tom spent 5 days at Devoxx in Antwerp. For those unfamiliar with Devoxx, let us set the scene: it’s at the Kinepolis theater in Antwerp and the Java oriented talks are given from 9:30 ‘till 19:00 in the cinema rooms. The presenters were often surprised when their laptop screen got enlarged to the size of a building, for the attendees a comfortable view and setting to follow the topics. At the beginning of the week, the deep dive sessions were typically 2 hours, later on sessions were 50 minutes or quickies of 15 or 30 minutes.
Most of the talks were streamed live on Youtube and their recordings were published publicly afterwards.
In this blog we go over some of the sessions we attended. But let’s start with a typical Devoxx day:
It’s the third day of Devoxx and after arrival I grabbed a croissant from the exhibition hall with a coffee and dived into a room to watch the keynote.
The organizer Stephan Janssen explained how he used several AI enhanced products in the past 9 months to organise the event. He demonstrated how the practical usage of machine learning helped him to schedule the timetables, to tag the speakers in the massive amount of pictures that are taken during the event, how the twitter feed is cleansed from unwanted Russian bot spamming. Machine learning also helps doing the actual counting of the number of people in each cinema room this year. For this last one he even constructed a company counter.ai that uses a raspberry pi with a camera and a compute stick, with an embedded neural network, located above each entry to do the headcount (see picture).
At the end of the keynote, a special guest was welcomed to the stage: the father of Java: James Gosling. He works at Amazon nowadays and he took the opportunity to announce Amazon’s LTS build of the JDK named Coretto. For 3 years, Java 11 will be supported for free, after which Oracle will charge license fees for extended support and alternative (cheaper?) vendors for JDK’s will introduce healthy competition. For this to be possible, Mark Reinhold of Oracle explained previously during the keynote they had Open Sourced the last proprietary pieces of their JDK. After the keynote, the game that we would play all week began all over: ‘What will we attend in our next session?’
Switching to Gradle: maturity, performance, and pleasure!
Gradle, as being the default build tool for the Android projects, might seem familiar to many of us, but as I am more familiar with Maven I dove into this session. What I learned is that it has many optimizations, configuration capabilities and features in comparison to Maven.
A handy feature is the option to generate a shareable url hosted at Gradle (can become on-premise) if you want to share a failing build with a colleague. It’s highly optimized in order to minimize the time required to build: parallel building, caching, continuous build by only building changed code on the fly. Their philosophy on a Gradle configuration in a project: “It tells you what your project needs, what has been tested, in just the right format. It can still go wrong, but at least you have more flexibility to fix it (e.g. vs Maven exclude)”.
Java Streams vs. Reactive Streams: Which, When, How and Why?
The presenter, Venkat Subramanian, is one of the most memorable presenters. Not only by the high quality of his topics, but also by the fast pace he talks and the small and to-the-point jokes he quite often throws in.
“In life and programming we should never share 2 things: toothbrush, database.”
In this session he also stated reactive programming becoming a hot topic in Java in the coming years — async programming becoming more important than concurrent programming.
Java streams is data only and good luck with exceptions. Reactive streams on the other hand have 3 channels: data, error and complete. Deal with exceptions downstream.
Tracing performance of your service calls with some help of Sleuth, Zipkin & ELK
Rafaela showed a demo application that visually represented a toaster. All the kitchen appliances were implemented with microservices. Unfortunately, her toaster burnt all bread that it was given, so she did a live debug session. For this, she used Sleuth, a powerful tool that adds trace-id’s to the code log. On top of that she used Zipkin, a distributed tracing system to collect timing data across the system code during execution. With these 2 tools and Kibana, she was able to identify the slow parts in the code and resolve it (removing the sleep instructions).
Personally, we recognized similar features in Dynatrace that we regularly use at our clients.
A Dozen Ways to Hack Your Brain to Write Fluently
Allen walked us through the process of how to trick your brain when you need to write up a text. His take-away: by using some tricks, hopefully you can better, more fluently, produce high quality documents of all sort.
Implementing Microservices Security Patterns & Protocols with Spring Deep Dive
In this talk, OpenId and its underlying layers were explained and a code dive learnt us how microservices were configured to support authenticated flows. 3 possibilities of implementation flows were presented: Backend for frontend, bearer token relay and bearer token exchange. Definitely a good session if you need to deal with an OpenId implementation.
Refactoring to a system of systems
In this talk, Olivier Gierke went over the challenges and choices that a team needs to make when transforming the Monolith into a distributed system of systems. He went over the pro’s and cons of each architecture with the goal to strive to architecture good “Moduliths”.
Auto-Cascading Security Updates Through Docker Images
So you built your docker images, but have you thought about an update strategy: how do you keep up with the update of the underlying OS, Java and other images that your dockerfile uses? Well, this talk will give you some ideas.
Home s̶w̶e̶e̶t̶ Google Home: Build a smart(er) home!
Do you own a Google Home mini and you want to integrate it in your smart home application? This session discusses the protocol that shows how to integrate your device or application onto their platform.
AutoML + ML APIs = machine learning for all developers
A non-technical overview of the Google product services you can use in your own applications. It was quite an entertaining session: for example, we could take pictures of ourselves after which he applied some machine learning algorithms to them to classify the pictures, according to the mood with the extra side effect of getting a moustache… delightful french humor 😉
Yet another Venkat talk, he reminded us of how fast, or just how slow programming languages have evolved. You know object oriented programming was around in 1968 and functional programming gets his roots back in the lambda calculus of the 1930’s. Experience has shown that we as programmers are adapting with bite size changes to these (new?) paradigms and want to move to a more expressive and simpler way of programming. Venkat was very excited to see Java evolve from a language that ‘sucked’ to what is has become now and advises every programmer to get exposed to other programming languages.
Be More Productive With IntelliJ IDEA
Trisha showed us around in IntelliJ on how to refactor using all the shortcuts, refactor and code generation tools within this very popular Java IDE. As often in a live demo, sometimes it failed, but with her self-mockery it was very entertaining to see her solve it.
JHipster 5 – What’s new and noteworthy
Starting from a domain model expressed in JHipster Domain Language, a complete Spring Boot application composed of microservices with an Angular or React (= new!) frontend is generated and configured, ready to deploy on a Google Cloud cluster. Quite impressive to see and definitely noteworthy to scaffold a project this way.
Connected sensors and data visualization to measure working conditions
Using arduino-like devices stuck to the arms, legs and back, combined with a hearth sensor, Christophe and Sebastien demonstrated their solution to measure working conditions. The sensor data is processed via an MQTT protocol using NodeRed and stored in an Influxdb. Analysis of the data is done with Kapacitor to combine for example back and leg positions to identify unhealthy postures. Graphs are generated with Grafana to which they added their own widget plugins.
10 mistakes hackers want you to make
A really good rundown on common mistakes imposing security problems to an application with practical advices or product suggestions to help you out.
Java Modularity: the Year After
In Java 9, the module system was introduced and Sander evaluates the state after a year. Based on Maven repository, we see that frameworks are slowly adopting the module system in which they identified 3 levels of module adoption. Modularity is slowly getting more and more support and the last Java 11 LTS release will definitely accelerate its adoption.
Deep learning, Devoxx crowd counting in realtime
With a raspberry pi, a pi camera and an intel compute stick offering a hardware accelerated neural network, Stefaan went over an example code program to make a recognizer system for numbers that are drawn on a paper. He talked about the challenges they had building a ‘people counter device’ using the same hardware and principles to which they constructed a company named ‘counter.ai’.
Create your own Digital Adventure Room
Erik built an adventure escape room in his backyard shed and showed us the hardware and software he created for it.
Micronaut in Action!
If you want to put your Java program on a diet and run it blazingly fast with low memory usage, Micronaut is definitely the way to go. Ivan showed how an application is compiled AOT Ahead-Of-Time with Micronaut, with clear performance and memory benefits.
From Java to Kotlin: the adventures of a smooth migration
Paulien demonstrated how a small application is migrated from Java to Kotlin, following a 5-step plan:
- Setup dependencies
- Migrate pojos
- Rewrite unit tests
- Migrate business logic and integration tests
Event Sourcing – You are doing it wrong
David shared his experience in event sourcing and CQRS and gave us an insight in the typical problems that might arise and how to avoid them.
Implement End-to-End Encryption in Your App in Just 50 Minutes
In this talk, a web application was extended, using the Datapeps SDK. They add encryption on the client side and decryption of the content. With just roughly 100 lines of code and without server adaptation we saw how the content that originates from the client is sent encrypted to the server with only the client being able to decode it. By offering this sdk and platform, Datapeps makes it a breeze to add end-to-end encryption.
Building blockchain apps with zero knowledge
Making a blockchain app can be very daunting and difficult for both developer as end-users. Arkane has built a platform acting as a layer between the blockchain and the application. For example, an application using this platform allows companies to pay for fixes on open source projects on Github. When pull requests gets merged, the developer can claim the attached reward in a cryptocurrency to this issue.
A Better Approach for Testing Microservices – Introducing: Test Kits in Practice
Some approaches for testing microservices were explained: the pros and cons with “out of process component tests”, the pros and cons with “test doubles”, and how “Test Kits” are used in practice with its pros and cons.
- The service provider creates them;
- The consumer uses test builders to setup test expectations;
- “Integration contract tests” were also mentioned, which are created in the providers test kit to test if the Test Kit has the same behaviour as the real thing;
- It is also a way of communicating to the consumers, for example logging output or letting something fail when deprecated calls are performed.
Test Kits are a good approach but the downside is the extra development time and an extra build dependency.
The Test Kit approach is advised when there are a lot api consumers or when the api is complex — otherwise you might just stick with test doubles.
Java features 2018
Each year, Brian Goetz gives this talk, going over the features that are added or soon being added to Java. He gives an insight in how it is decided how new features are selected and lifecycle until it gets into the JDK. Important principle they use for this is: backward compatibility and the idea that added language features are forever.