JavaZone in Oslo is a nice conference to both attend to and speak at. The organizers show speakers around the venue the day before and you’re generally well taken care of. Another nice thing is the food which is served continuously from 10.00 throughout the day (there should be some more vegetarian options though :)). They also have a so called “overflow section” which is a large screen where all sessions are live-streamed. This is really nice if you’re unsure which session to pick. Using the provided ear phones and remote control you are able to choose the audio stream from the session of interest.
Most sessions were also uploaded really fast on Vimeo. Some of the highlights of the conference are presented below:
Jonas Bonér – Going Reactive: Event-driven, Scalable and Resilient Systems
Another good talk by Jonas about distributed systems and reactive programming. His conclusion that shared mutable state in combination with threads is the root of all evil still stands. He also spent some time talking about performance vs scalability, latency vs throughput, availability vs consistency. Of course we also heard about the Actor model and Agents (from Clojure, now also supported in Akka). He also emphasized Amdahl’s law that says that the “speedup of a program using multiple processors in parallel computing is limited by the time needed for the sequential fraction of the program”. Overall a great talk!
Brian McCallister – The Long Tail Treasure Trove
Brian presented more than 30 small but useful libraries in less than an hour. Even though you may have a fair knowledge on what frameworks are out there you’ll definitely find some nice new picks here. Some examples are xbean-finder that can find classes in classpath without loading them, AirLine (annotation-based framework for parsing Git like command line structures, inspired by JCommander) and OkHttp (a small Java HTTP client that also supports HTTP/2.0 + SPDY). There were a lot of other gems in the presentation and I would really encourage you to check it out.
Yves Hwang – Simple scales faster and better in the real world
Yves had a pretty interesting experience at his workplace were they were actually allowed to build two different solutions to the same problem. The best one would be chosen and the other one would be discarded. Yves was searching around the net for the some of hottest technologies of today and ended up combining ZeroMQ, Protobuff and the LMAX disruptor for their Varnish cache invalidation product written in Java. It turned out that in their case writing the entire stack from scratch (using NIO selectors) was the option that provided the fastest throughput, around twice the compared to the fancy solution. While they probably cloud have tweaked the first solution a great deal the home brewed one served their needs good enough at the moment. The moral of the story is of course that you shouldn’t just always pick the latest and greatest stuff out there, keeping things simple could very well yield faster results.
Ali Sabil – Think Erlang
Ali was originally a skeptic and took a long time to be convinced to try Erlang, but after making the move he never looked back. It was a good talk that went through the major features of Erlang the language, the OTP framework and the runtime, both their purpose and how they work. Soundrop (Ali’s company) use the ability to patch running code without taking down the system, for example Twitter had made an API change just before a major event. Ali was able to switch the code that accessed Twitter without affecting any users. It is also possible to use upgrades by using the supervisor hierarchy, but Soundrop currently don’t use that mechanism as it is slightly more complicated. An interesting question: “If everything is modelled as processes (actors), how do you work with files?”. Ali answered “Well, files are also processes and all you have to do is send and receive messages. In fact, all external things are processes.”
Stuart Sierra – Data, Visibility and Abstraction
Stuart recounted his personal journey towards Clojure and the various features from other languages he came to like along the way. For example the way his first computer gave him a BASIC prompt after booting where he could start experimenting, the way data structures and literals work in Perl, the way XML is just data and still you can express functions in XSLT (not that he enjoyed doing that!) and they many DSLs in Ruby. After the history he outlined where he is going with Clojure and the way he is designing functional programs.
Robert Smallshire – The Unreasonable Effectiveness of Dynamic Typing
As I (Jan) currently work on a talk about Clojure this presentation gave lots of arguments for why dynamic languages are a good idea. Robert showed the few studies (eg by Stefan Hanenberg and Lutz Prechelt) that have been performed comparing dynamic and static typing and they have shown that there are no difference in reliability, but dynamic languages seems to be significantly more productive. The problem seems to be that designing correct types takes more time that fixing defects that a compile could have found. (I have more than once discarded Java generic information, just in order to get the program to compile!) Robert also shared his analysis of GitHub issues that showed that roughly 2 % of defects in programs written using dynamic typing seems to be caused by type errors that a compiler would have found. He also argued that many statically typed languages fall back to reflection or just using Strings to circumvent the compiler, for example using JSON over HTTP.
Heinz Kabutz – Phaser and StampedLock Concurrency Synchronizers
When a talk is labeled ‘Advanced’ and it contains concurrency you know that it is not going to be easy. I (Mads) think threading should be used with caution and immutability is a better solution for writing concurrent code. That being said, it probably cannot hurt to know of concurrency idioms when you cannot avoid shared state. The talk walked through some more advanced concepts than just the ‘synchronized’ keyword, and showed idioms for these constructs. What really surprised me was how complicated these were. During the live code sessions the presenter had to revert to his slides to double check the correctness. Scary.
Seth Ladd – Dart and Web Components – Scalable, Structured Web Apps
This is a really good introductory talk about Dart and its ecosystem. Trying to modernize/rethink how web development should be done is quite a task – it looks like a job for Google! I (Mads) feel slightly biased on this approach because on the one hand I like the current web development, where tons of open source micro-frameworks are available and can easily be customized. On the other there are many improvements you can make when writing the whole development stack from scratch.
Last, but not least
Have a look at our own presentations and let us know what you think: