Recently I've had the opportunity to attend Geecon Prague conference. Taking into consideration the fact that there were only 3 available tracks, I must say I was pleasantly surprised by the valuable content of this event, and I'm looking forward to the next year.
I will mention some interesting talks:
Full-stack Reactive Java with Project Reactor & Spring Boot 2 by Mark Heckler
Mark has presented how easy it is to create a Netty-based Springboot 2 web reactive application. Non blocking Spring application can be produced as fast as Spring MVC one. It was a pleasure to listen to his presentation.
Software's Seven Deadly Wastes by Jez Halford
Jez summarized problems that take place during development.
The first problem he mentioned is Transport - movement of the work. Waiting for another team or for a process to happen.
Second is Inventory - undelivered work. It is abandoned work, work in progress and working at once on many tasks. When we cancel a project, it is worth to make a meeting summarizing work and what can be done better. We should learn something from the failed project. The majority of the team could feel that it was no sense to work wasting so much time. Do small deliverables units, branch by abstraction, feature toggles. Visualize your work in progress. Stop starting and start finishing. Reducing inventory also reduce motion. Get rhythm.
Second is Inventory - undelivered work. It is abandoned work, work in progress and working at once on many tasks. When we cancel a project, it is worth to make a meeting summarizing work and what can be done better. We should learn something from the failed project. The majority of the team could feel that it was no sense to work wasting so much time. Do small deliverables units, branch by abstraction, feature toggles. Visualize your work in progress. Stop starting and start finishing. Reducing inventory also reduce motion. Get rhythm.
Third is Motion - movement of people around the work. Task switching, irregular meetings. Consider the whole system, take ownership, talk to people.
Fourth is Waiting - delays in delivering the work, caused e.g. by waiting for another team, for an outside answer or clarification. Developers often find it annoying to simply wait for an issue. According to Jez, it may be helpful in such situations to address personally those who are blocking the task, as well as to complain to the teams and managers about it. To minimize this waste, deliver often, base performance improvements on evidence and refactor when you need to.
Fifth is Over Processing - working too hard. It is solving imaginary problems, writing libraries in production code. To limit this waste, focus on string product ownership, fast feedback and remove stuff that is not used.
Sixth is Over Production - doing useless work. 64% of built software is never used. We build features that won't be used. To prevent this, we can build automated tests, use continuous integration to be safer in refactoring process.
Seventh is Defects - working on work. We must have proper test environment, fast release system.
It was a good presentation to think over challenges in our work.
It was a good presentation to think over challenges in our work.
Deep dive and learn about your Operating System by Quentin Adam
Quentin presented how virtualization can be a performance horror for our applications. He described problems with processor caches and other abstractions. To mention some of them:
- In java we can use -XX:+UseLargePages
- We can change computer mode from energy safe to performance mode by C-States flag
- The less complicated code, the better.
- Be careful choosing data structures
- Do the next abstraction level only when it is really needed
It was a good presentation for high level developers to understand what system limitations our applications have.
High request rate system architecture - an Ad Tech case study by Jakub Dżon
It was an interesting presentation how ad platform is built. Jakub has shown selected architecture and how it has changed to meet the rising traffic.
Architecting for performance. A top-down approach by Ionut Balosin
It was a similar topic to Quentin's talk from the day before. To sum up:
srcdeps - source dependencies with Maven and Gradle by Peter Palaga
Peter presented library srcdeps that deals with source dependencies for maven and gradle project.
It allows us to create a dependency between one project with another project with an exactly given commit.
We must define project code repository and our project will retrieve dependent one, build it and install in our local repository. I think it is a very good idea to try it in microservice world. srcdeps has protection against releasing with source dependencies. Gradle implementation is new and does not have all features that maven has. It does not have an ant and a sbt implementations so far.
Java 9 security enhancements in practice by Martin Toshev
It was a good presentation that showed how to implement secure TSL interactions in java applications both using java 8 libraries and java 9.
Analyzing HotSpot Crashes by Volker Simonis
Using a few application problems he deal with, Volker has shown how to analyze JVM crashes. He has presented all layers of the Hotspot where problems can appear. It was very interesting to look how Hotspot can crash, while Jit compiles. We can write Serviceability Agents to debug where problem appears.
Twitter's quest for a wholly Graal runtime by Chris Thalinger
Chris talked about Twitter experience with Graal VM. It is a project based in Oracle Labs developing a new JIT Compiler and Polyglot Runtime for the JVM. In twitter case (they are using Scala), it allows to reduce CPU usage by 10%. It saves them a lot as they are using thousands of VMs. And JVM 9 contains Graal. It has also an enterprise paid option with more optimizations. Twitter has found a few bugs in Graal, but there are now fixed and for the last two years they have not found any new ones.
High Performance Managed Languages by Martin Thompson
Martin has made a talk that can be summarized by a quote of Albert Einstein he presented:
Any intelligent fool can make things bigger, more complex, more violent.
It takes a touch of genius, and a lot of courage, to move in the opposite direction.
He concluded, that contemporary choice of a technology to develop a new application is java, because of the ecosystem and optimizations on the whole stack (starting with JIT) that will make our application better then the one developed in low level technologies. To optimize we need to know the context. In the world with bounded budgets and time, high level technologies will serve us better.
He advice to develop code as simple as possible and add new abstraction layer if it is really needed with more then 2 items of a kind.