Showing posts with label jfall. Show all posts
Showing posts with label jfall. Show all posts

Monday, 3 November 2025

JFall 2025

So last year I was unable to get tickets. They sold out pretty quickly (like in the first three minutes, I hear?).

I expected not to be able to attend this year either, but I added myself to the waiting list and hoped for the best.

Apparently, I was in luck! I have tickets!

I am planning on attending the following:

  • Catching the 137-Killer: A Java Memory Forensics Investigation
    Martijn Dashorst
  • Java; our personal career companion
    Peter Schuler Ragna Gerretsen
  • Why You Should Build Agents on the JVM
    Rod Johnson
  • Java 25 - Better Language, Better APIs, Better Runtime
    Nicolai Parlog
  • xz: The day the internet (almost) died
    Reinier Zwitserloot Roel Spilke
  • curl | bash | hacked: The Unseen Dangers in Your Dev Lifecycle
    Steve Poole
  • Benchmarking Project Valhalla
    Cay Horstmann
  • The Wait is Over: Foreign Function & Memory (FFM) API brings modern Java to the Raspberry Pi
    Frank Delporte

However, there's several that I also would have liked to see. I'll await those on the YouTubes.

It'll take place coming Thursday, 6th of November 2025.

References

NLJUG - JFall
http://jfall.nl/

Thursday, 10 November 2022

J-Fall 2022 Writeup

I went to J-Fall 2022 on the 3d of November 2022.

I attended the following sessions:

Pattern Matching: Small Enhancement or Major Feature? - Hanno Embregts Peter Wessels
I enjoyed it immensely.
Design Patterns in the Light of Lambda Expressions - Venkat Subramaniam
It was pretty good. An eyeopener was replacing Autoclosable with Lambdas, that was fun.
Java Next - From Amber to Loom, from Panama to Valhalla - Nicolai Parlog
Great overview of what's coming.
Effective Developer Testing: taking it to the next level - MaurĂ­cio Aniche
He had some thoughts on tests that I didn't think of before.
Modern and Lightweight Cloud Application Development with Jakarta EE 10 - Ivar Grimstad
I always like to keep up to date with Jakarta.
Keep your dependencies in check - Marit van Dijk
Dependencies, who doesn't hate them.

Things I would like to have attended, but will probably at some point look them up on the YouTube:

Supercharge your Native Image applications 🚀 - Alina Yurenko
Really interested in this, since I'm using GraalVM in my hobby projects. Unfortunately cannot go native at the moment, as lots of it is dynamic.
Threading the needle: multithreading with project Loom - Marcel Ton
Sounded interesting, but I don't do much with threads (which is the safe bet, honestly).

And that's about it.

References

NLJUG - JFall 2022
http://jfall.nl/

Wednesday, 3 November 2021

JFall 2021

After all the stuff with Corona and everything, there's finally going to be a genuine JFall in Ede (again) at the Pathe on Thursday, the fourth of November.

It's the first conference where I can go to "in the flesh" so to speak.

The previous one was a virtual conference, which was fun, but I do look forward to having social interaction face-to-face.

References

NLJUG - JFall 2021
http://jfall.nl/

Wednesday, 8 November 2017

J-Fall 2017 - Writeup

2 november 2017 has come and gone, and with it J-Fall 2017 has drawn to a close. Time for the write up.

Getting to know the Blockchain in plain Java
Johan Kragt & Cédric van Beijsterveldt
Welcome J-Fall 2017
Bert Jan Schrijver
Democratization of AI: from researchers to any user
Xavier Dupré
From Monolithic to SoC: Architecture & Teams
Guy Rombaut
CQRS Processing events
Martijn Blankestijn
Fostering an evolving architecture in the agile world
Roy van Rijn
From Code Commit to Production within a Day In One of the Most Critical Industries in the World
Gebrian uit de Bulten, Vincent van Kooten
Live Coding Time & State with Sonic Pi
Sam Aaron
Designing for Modularity with Java 9
Sander Mak
Safely Shoot Yourself in the Foot with Java 9
Heinz Kabutz

Afer all that, I felt the need to take a break and therefore did not attend the last presentation.

Getting to know the Blockchain in plain Java

This talk provided a very good basic level of how the blockchain works. It explained it by means of building a very simple blockchain in Java. The implementation mirrored the design choices made by Bitcoin. The presentation contained lots of demos, where you could see the blockchain being built. Based on the demos it became clear what the weaknesses of blockchains are, and what happens for example when an implementation forks.

It was most interesting and easy to follow.

Github repo was available at https://github.com/jcoreNL/Chain.

Democratization of AI: from researchers to any user

The Microsoft keynote was about machine learning, deep learning and Artificial Intelligence and how cloud services can facilitate this with custom made services and setup.

From Monolithic to SoC: Architecture & Teams

The talk focused on the evolution of both the backend and the frontend of applications. Where in the past these two were intertwined, nowadays we see increasingly that the two are separated.

You can find Guy Rombauts website here.

CQRS Processing events

It was a complicated talk, for anyone not familiar with some of the tools, software stack and principles behind CQRS. I hope to jot down some comments that struck me as important during the talk.

Event Sourcing (ES) basically means that all changes to the application state are stored as events. The current state is computed base on (re)playing the events.

Changing the state or the history is basically destruction of information, and is therefore frowned upon.

A good part of the talk was regarding what to do when the need for information changes. This requires some thinking on how to re-create the event stream or add information to the event stream. Some ways to do this:

  • multiple versions - has readside impact
  • upcasting - you can create a version 2 from version 1, this means the reads only need to know the latest version.
  • in place transformation - changes the event store
  • copy and transformation - creates a new event store to hold the new format, facilitates splitting and merging

See with regards to conversion also The Dark Side of Event Sourcing: Managing Data Conversion.

Then there's the difference between push and pull, where pull means periodically updating your read store, and push is registering yourself for new events. Push is therefore quite feasible in case events do not happen often.

“No one wants eventual consistency. It's a necessary evil. It's not cool. It's useful.”
- Jonas Bonér

Also check out what Martin Fowler has to say.

Fostering an evolving architecture in the agile world

It was a very interesting talk of Roy van Rijn, regarding the software application used by the Port of Rotterdam and how it evolved from a monolithic monster to more and more microservices.

“Don't do agile, be agile.”
- Roy van Rijn

“The purpose of bureaucracy is to compensate for incompetence and lack of discipline.”
- James C. Collins

“Schedule irreversible decisions for the last responsible moment, that is, the last chance to make the decision before it is too late.”
- Mary Poppendieck, Implementing Lean Software Development: From Concept to Cash

He also seems to have doubts about a DOD - Definition of Done document. He poses that your responsibility for your code will be replaced by a list. Which means, if the list is followed, it's no longer your problem.

positive/negativevisibleinvisible
positiveFeatureArchitecture
negativeBugTechnical Debt

He also showed us the greatest example of Survivorship Bias I have ever heard!

A general in the army put some grunts to work registering the places on returning airplanes were these were hit by enemy fire. He took this diagram to the airplane designers, and told them they needed more armour on marks on the airplane where the damage was. The airplane designers told him, they would put the armour at the places where no damage was.

Their reasoning was: the diagram had no damage points in those areas, because if your plane gets damaged there, it is no longer in a position to land safely at an airport. It crashes. Which means we need more armour there.

From Code Commit to Production within a Day In One of the Most Critical Industries in the World

A massively interesting talk about the company that is processing billions of financial transactions per day on the internet, Ingenico. About all the different payment systems that are in use around the world, and how to interact with them and what kind of challenges that brings.

Live Coding Time & State with Sonic Pi

Sam Aaron showed us the Sonic Pi, which is basically a Raspberry Pi with software to generate programmatically music live. It was an amazing piece of work, where he showed different styles of music, performed by a simple 10 lines of code. He uses it to show kids in school how programming can be fun.

He also told of the challenges to create the software, make it perform music in parallel in a multi-threaded way. How to keep the music in sync on different architectures with different threading principles and the challenges that this brings.

Check it out at Sonic Pi - The Live Coding Music Synth for Everyone.. Incidentally, he's looking for money to continue the work.

Designing for Modularity with Java 9

An interesting talk, where we are introduced shortly into modules in Java 9, before diving deep into it and seeing how dependencies work, etc.

Safely Shoot Yourself in the Foot with Java 9

The talk was about how to do weird and unsafe things in Java 9, which were already possible in Java 8, but now require some changes.

Java Modules:

  • The Size of the JVM has decreased significantly.
  • Security has been a big plus.
  • Faster performance

Some things to look up:

  • get/setPlain
  • get/setOpaque
  • getAquire/setRelease
  • @Contented
  • Stream.takeWhile(pred)
  • Stream.dropWhile(pred);

He showed how to overwrite the underlying bytearray in a static string, how to write UNIX Shell scripts using the new java jshell. He mentioned that the visualvm memory poker is gone from the JDK, but can still be gotten from github. He mentioned both Java Flight Recorder and Java Mission Control as good replacements. And lots of other things.

References

NLJUG - JFall 2017
http://jfall.nl/

Thursday, 2 November 2017

J-Fall 2017 Starts Now!

It is 2 november 2017 and it is time again for J-Fall 2017. I am already on route to the Cinemec in Ede and looking forward to an entire day of finding out what's new in the Java Community.

I plan to focus on a bit of Blockchain, a bit of Java 9 and a bit of Microservices.

References

NLJUG - JFall 2017
http://jfall.nl/

Thursday, 3 November 2016

JFall 2016 - Writeup

“Knowledge is the only treasure that increases when you share.”
- African saying.

This blog post is my writeup and evaluation of the sessions I attended at J-Fall 20161.
CQRS and Event Sourcing with Lagom
Unfortunately I was rather late in attending this seminar. It caused me some problems with understanding the matter. I gather it is about event sourcing and CQRS with Lagom.
Hands-on Lab: 12 things you can do better with Java8 - Jakub Marchwicki
Wow, there was a severe shortage of places to sit (properly) and headphones. He provided a github repo2. I decided to leave early because of these issues. I hope to get some info from the github repo.
Sharing 2 years experience using Scala in a real project by a Java team

It did mean I could attend this session for a bit. Unfortunately, my knowledge of Scala is limited, but it was possible to follow the talk, except for the details.

Though there are some rumours that the takeoff of Scala isn't as big as it once was, the real project proved that with excellent programmers you can build a better application in Scala than in Java.

It does take some serious getting used to, though.

Java9 and the impact on Maven projects

A bit dull. Seems there are only a few little problems with using Java 9. Big problems were fixed right quickly.

Note: new jar format, special classes for different JDKs in different directories. src/main/java8 src/main/java9 etc. This is called Forward compatibility.

Modularity dependencies are hard.

Java - The Ecosystem Awakens
Sharat Shander mentioned that Java is now 21 years old already. The three top (new!) speakers of Jfall 2016 are invited to JavaOne.
Rise of the Machines - Automate your development
Sven Peters, Atlassian Evangelist, had a very entertaining seminar about Bots in Software development in general, and how they can make our lives easier. It all started with the advent of Hudson, the automated building environment, if I may call it that.
Coding Bots
JIRA should follow our versioning systems "Don't branch from a red branch". "Invite right reviewers" "Two approvals minimum before merge is possible"
Test Bots
Developers don't write bad code on purpose -> Developers are trying to solve problems. Calling Dr. Code -> Hall of Shame/Hall of Fame Hallelujah - Functional Test RunManager Flaky Test Detector -> test in Quarantaine -> create issue
Ops Bots
No more throwing stuff over the wall pagerduty : Faster feedback loop Own your code -> from end to end
Service Bots
Hercules -> scans (log) files and has system knowledge. Confluence has machinereadable bit for hercules. Hercules suggests that page. Hercules learns from response of user/firstlinesupport.

Robots can only do so much. They are very good at automating simple tasks.

Creating customer value is an art, however, and is hard to automate. Therefore humans will always be required.

Treat your bots well.


Delivering Better and Faster Microservices and Mobile Apps with the Cloud

Bruno Borges was very engaging in telling the tale. A shame that the Technology in the room didn't actually help, especially the wireless.

Software helps companies to Innovate.

Oracle has a presence on github5.



Documentation avoidance for developers - Peter Hilton

Peter Hilton3 was tremendously entertaining in explaining how we can write as little documentation as possible, and get away with it.

The half life of a team is 3.1 years. After that period, half your team has moved on to something else, and the knowledge they have is gone. This in stark contrast to code, which has a half life of about 15 years.

What you need is constructive laziness, which means thinking hard on how to do as little as possible.

Excuses may help, things like "It's on the Wiki". Tell a person who is leaving the team to write everything down before he's gone doesn't work. But asking questions and posting the answers into a wiki will help.

Pair programming works. A person who writes horrible/complex code will write horrible/complex documentation.

Better naming and type safety helps.

Spotify and Github have a very well documented API.

A good term is "minimum viable documentation".


Java EE Next

David Delabassee mentioned the release deadlines for Java EE 8 (2017) and Java EE 9 (2018).

They seem to be more geared towards microservices and asynchronous behaviour.

JAX-RS 2.1
server sent events
Servlet 4.0
HTTP/2 drop-in replacement server push
CDI 2.0
more geared towards outside an application server
JDF 2.3
small changes
JSON-B 1.0
JAXB for JSON.

References

[1] J-Fall 2016
http://www.nljug.org/jfall/2016/
[2] GitHub.com - JFall Java 8 Lab
https://github.com/kubamarchwicki/jfall-java8-lab
[3] Peter Hilton
http://hilton.org.uk
[4] Tom Preston-Werner - Readme driven development
http://tom.preston-werner.com/2010/08/23/readme-driven-development.html
[5] GitHub - Oracle
https://github.com/oracle

Thursday, 15 September 2016

J-Fall 2016

Registration for J-Fall 2016 has recently been opened.

It will take place on Thursday, November 3th 2016 from 08:00 onwards. Once again it takes place at the CineMec Cinema at 150 Laan der Verenigde Naties, 6716 JE Ede. It is the biggest Java Conference of the Netherlands and is organised by the NLJUG.

I have chosen to follow the following sessions:
  • No excuses: switch to Kotlin - Thijs Suijten
  • Hands-on Lab: 12 things you can do better with Java8 - Jakub Marchwicki
  • How Kids Code and How We Know - Efthimia Aivaloglou
  • Hands-on Lab: Adopt-A-JSR: aan de slag met Java 9 (JSR 379) - Maurice de Chateau & Eelco Meuter
  • Documentation avoidance for developers - Peter Hilton
  • One application to rule them all - Tom Eugelink
Hope to see you there!

References

[1] NLJUG - Nederlandse Java Users Group
http://www.nljug.org
[2] J-Fall 2016
http://www.nljug.org/jfall/2016/

Thursday, 5 November 2015

J-Fall 2015

“Once you stop learning, you start dying.”
- Albert Einstein

I just got back from J-Fall 20151.

Seeing as the location had been changed from Nijkerk to Ede, I was unable to attend the Early Bird sessions, much to my dismay. I did manage to hitch a ride with a colleague of mine, but in the future, I will try and get a train. The connection seems to be quite good and once more there is a shuttle bus riding between the location (Cinemec) and the trainstation.

What with traffic (congestion) and my colleague sleeping late, I did miss the first keynote (The Experimental Enterprise - Keynote ING), only arriving at the destination at around 09:45.

The list of sessions I witnessed:

Pushing the limits of Continuous Delivery - Keynote Quintor

Provided by Rene Boere and Pascal Snippen

A fascinating view on what Quintor uses to provide Continuous Delivery (CD) using Docker, Apache Mesos, Marathon and Consul combined with HAProxy. The use of container ships to emphasise Docker was inspired and probably is starting to be overused by now. The microservices landscape is large and you can no longer see the forest for the trees, test environments are hard to set up, deployments are complex and timeconsuming.

Automation of Continuous Delivery is the answer.

Microservices for Mortals

Provided by Bert Ertman

This lecture could be construed as a big, huge, warning if you wish to use Microservices. It had a metaphore comparing coding practices with Italian food. The old way of coding compares to Spaghetti. Then SOA (Service Oriented Architecture) was introduced and those layered coding practices compare to Lasagna. Now the new Microservices compare more to Ravioli (tight independent containers of code bundled together) with sauce. The main idea behind microservices seems to be the ability to easy adapt to change. There is no hard definition on what microservices are. Apparently, microservices are small enough to just replace them with a completely new implementation, or just run 10 instances of one easily. They do away with a lot of items we are software developers have gotten used to:
  • synchronous programming models
  • ACID
  • code reuse
  • using abstractions
Instead, because of the characteristics of Microservices, you get:
  • asynchronous programming models
  • any constraints need to be taken care of at the application level
  • code duplication, each micro service is independent of the others, so code reuse between microservices doesn't make sense
  • separate data storages (one data storage per microservice)
  • passing data using websockets or binary protocols or messaging (REST is too much overhead, I don't want to even mention XML. It's all fine for a public API though.)
  • prefer conventions over abstractions (see code reuse)
If you have not been doing Devops, you cannot get started using Microservices without getting into a world of hurt.

Code for failure. Microservices are brittle, the distributed asynchronous models make them so. Design for this! Use fail early, use resilience patterns, use redundancy, etc.

10 Awesome Tips for Enterprise Javascript - Oracle

Provided by Geertjan Wielenga

This lecture provided an excellent overview of the current JavaScript landscape. I especially liked the fact that he mentioned that at the end of the lecture the landscape will probably already have changed. The JavaScript ecosystem is in that much flux.

Nowadays we have multiple devices, all with different screensizes requiring responsive design. One common factor in all these devices, is that all of them possess a browser. And the Single Page Application (SPA) is becoming the internet-enabled "application" of choice. Page navigation is irrelevant when it comes to Single Page Applications, yet for most Java-based Web Frameworks, page navigation is still an important part of their programming model.

Also, resist the hype. Apparently most managers make bad architecture decision based on hype. And you, as a developer, shouldn't want that.

For some applications, Javascript actually doesn't make any sense. The example provided was air traffic controllers. But different architectures can play different roles, even in those applications where Javascript doesn't make any sense. for example:
mobile apps
notifications
web apps
reporting to (upper) management
application itself
what users actually need and use in day-to-day work

NetBeans provided really nice point-and-click programming of the new HTML 5 components. The new HTML 5 components look very snazzy. Apparently, every new HTML 5 component is itself composed of sub-html-components, called the Shadow DOM and can therefore be styled appropriately. CSS has been split up into approximately 50 CSS modules. JavaScript can be used to avoid having to hide HTML using CSS, because hiding certain HTML components still makes the browser get the linked resources contained in those HTML components. Especially on mobiles this can make a huge difference.

In the Java world, the acronym WORA (Write Once Run Anywhere) is very well known. In the JavaScript world its WONTA (Write Once, Never Touch Again). The projects are so small, and the evolution of the Javascript ecosystem is so quick, it makes more sense to re-design and re-write everything from scratch when required.

Oracle has defined a Javascript framework, which is basically a bundling of common javascript libraries, into what is called the "Oracle Javascript Extention Toolkit"2.

“Javascript is the assembly language of the web.”

Then there's, if you really do not want to touch JavaScript with a ten-foot pole, the transpilers:
Dukescript
write Java, but also HTML and CSS. Combine those.
GWT/Vaadin
provides a Java backend similar to the Swing toolkit, and translates your code into HTML,CSS and JavaScript for the frontend.
Dart
separate programming language for the web/mobile/desktop.
Typescript
provides static typing to javascript, a sort of superset of JavaScript following ECMA recommendations that is transpiled to JavaScript
Coffeescript
programming language that translates to javascript

The Java renaissance continues - Keynote Oracle

Provided by Sharat Chander

A motivating speech on the fact that Java is still a success primarily because of the community. And a personal appeal to every person there to connect to at least two in the audience during the conference.

Devops - Are you walking or still talking? - Keynote Capgemini

Provided by Remko Reinders

A lecture on Devops, more importantly, what it takes for an organisation to become a success at Devops and what you can do to help your organisation and yourself to become a success as well.

“Most people will talk the talk. Few will walk the walk. Be amongst those few.”
- Steve Maraboli

“Software is eating up the world.”
- Marc Andreessen, Wall Street Journal

Building Asynchronous and Non-Blocking HTTP Applications with Ratpack

Provided by Hubert Klein Ikkink

My first introduction to Ratpack3, which I had never heard of before. It is a small webserver, that can be programmed using Java 8 and Groovy. It uses Netty for the HTTP IO, has a very small footprint, is very fast and is asynchronous. Does not provide JEE, does not follow the Servlet API and can be started by running a Jar file. Spock is used for testing.

If you want a quick webserver to dish out some REST stuff in a distributed environment, this is it. Check his webblog4 for more information.

Java modularity, life after Java 9 - Luminis

Provided by Sander Mak & Paul Bakker

“Good fences make good neighbours.”
- Proverb

An excellent talk about the upcoming Jigsaw in Java 9. It provides a faster startup and a smaller footprint, essential for small devices. It compared what little information there is about Jigsaw to the existing implementation of OSGI. Modules are allowed to talk to other modules only by the service contract each module provides. Modules are defined in a module-info.java file. The segregation is looked after by the VM itself and cannot be circumvented. Layers are used to prevent different versions of the same module interfering with each other. Versioning isn't really built into the new system. There is a linking tool called jlink and module maker tool called jmod. Jdebs can provide your program with which modules it needs. Identification of a module is done using a newly defined namespace specific for modules.

Classpath scanning for annotations is going to be a problem. It is going to have to be service-oriented in the future.

Especially application servers are going to need a major overhaul, as well as several annotation-crosscutting concerns frameworks as REST and JPA implementations.

See http://bit.ly/java9demo for more information.

References

[1] NLJUG - J-Fall 2015
http://www.nljug.org/jfall/2015/
[2] Oracle JavaScript Extention Toolkit
http://oraclejet.org
[3] Ratpack
https://ratpack.io/
[4] Mr Haki's Webblog
http://mrhaki.blogspot.nl/



Monday, 2 November 2015

J-Fall 2015 Incoming!

The NLJUG[1] is once again organizing J-Fall[2]. Edition 2015 obviously.

It takes place in a new location, as the old location apparently has grown too limiting in number of people allowed. It will be held in CineMec, 150 Laan der Verenigde Naties, Ede on Thursday, the 5th of November 2015. No longer on a Wednesday, that's a change!

Once again I am looking forward to it, to see what I can learn. I shall write up a report on what sessions I visited and found interesting.


References

[1] NLJUG - Nederlandse Java Users Group
http://www.nljug.org
[2] J-Fall 2015
http://www.nljug.org/jfall/2015/

Sunday, 9 November 2014

J-Fall 2014

Well, I have once again been privileged enough to attend the J-Fall 2014 on Wednesday, the 5th of November, in Nijkerk, the Netherlands.

I'll provide a short summary of the Breakout Sessions I followed, and the parts that really struck me as interesting. There's more information on the sessions available at [1].

My chosen schedule:

Keynotes

Bert Ertman, after 10 years at the NLJUG, has decided to step back and become a regular attendee of J-Fall. He is the most visible of the people behind J-Fall, as he has opened J-Fall, to the best of my knowledge, every year. Let us hope we shall see more of him and not less.

The Keynotes were not actually that interesting. The Keynote of Oracle was more related to awards for proven Java-ness, than what Oracle has planned for the future. The keynote of Oracle was provided by James Weaver, who was also giving a Session last year regarding JavaFX and guitar playing.

The Keynote of ING was surprisingly similar to last year, regarding the banks new way of working with software releases (Agile, Scrum, three releases every week, automated testing, DevOps, etc.)

The Keynote of Salves was interesting, in that it had a high geek-techy-factor, with drones flying, and brainwaves to control them, with pattern recognition in cameras. But the complexity of the setup, and the conference location and The Dreaded Demo Effect got to 'em, which is a shame.

I found the best Keynote to be the one provided by Quintor, a consultancy business started in 2005, regarding a simulated Cluster with Hadoop they set up during one of their "Summer Camps" to brute-force a Shortest Path Algorithm. They needed some penguins to find an igloo between ice blocks and rocks. They created "Willem", a server that was running 20 or so virtual environments, chained in a Hadoop cluster with Apache HBase as work memory and Akka Reactive Streams.

The Sessions

Event-sourced architectures with Akka

A great number of projects are always based around the idea of Shared Mutable State. This shared mutable state makes things very hard to scale, so it has traditionally been pushed to the database as far as possible. Stateless code always scales better, because it can be easily run parallel.

It seems to me that event-sourcing is basically based on the database transactionlog that has been in Databases for the past hundreds of years.

The idea is that we store the events that happened, instead of storing only the changes of data. In the latter case we lose a lot of history. In order to keep the side effects out of the way when replaying the event log, these are not re-done.

A simple example is, instead of storing Price and Orders, we store events like PriceChanged or OrderCancelled.

Of course, this presents problems as you have to rerun the event log in order to find out the current situation of the system. This is solved by creating snapshots.

Another problem is the fact that Searching for stuff becomes harder. So it makes sense to have basically two different modules, one module is responsible for changes (and stores events and the likes) and one module is responsible for querying and searching (and searches, for example, over Snapshots).

The abbreviation concerning this is called CQRS, Command Query Responsibility Segregation2. Here the command model is the eventstore (the "journal") and the query model can have several data stores, each containing for example snapshots.

It is possible to have the module that stores events present hooks to the searchmodule to keep the segregated models synchronised.

Some software that is used for the event model and storage of events are:
  • Cassandra
  • Kafka
  • DynamoDB
  • MongoDB
  • HBase
  • HBase
  • MapDB
  • JDBC
We can use Java Serialization, the default, or specific implementations of Java Serialization for example Protobuf, Kryo, Avro.

Akka can be used for all this, it provides a new experimental persistence module called appropriately Akka Persistence, that uses event sourcing.

Code can be found on github at https://github.com/sandermak/akka-eventsourcing. The url provided by Sander was http://bit.ly/akka-es, convenient for if the source moves.

One of the advantages, are that events show the business processes a lot better than normal persisted objects do. With events it is much more clear what is happening.

Conclusion is that event sourcing is very applicable to Domain Driven Design.

A word on versioning, a change in event-structure is going to cause a problem for the history (which uses the old event-structure). There are several solutions for this:
  • don't change your event structure (which, likely isn't possible)
  • use both old and new event-structure at the same time (which, introduces legacy code that needs to be maintained)
  • change ALL your events, also the historical ones (which, from a purity standpoint is debatable)
  • create a snapshot of the historical (old) events, and continue using new events henceforth (losing a bit of history)

I rated this as the best Session of the day!

Reactive programming with Java 8 and Java EE 7

Most of our programming is run sequentially, which, with the current advent of multiple cores, becomes inefficient (they say).

In Java 7 "Futures" were introduced to take care of doing things in parallel using ThreadPools.

A Future is a placeholder for a value that hasn't been set yet, but will (hopefully) be set in the future.

The Java API for Futures is very extensive with a lot of different classes containing a lot of different methods. In the future (my, was that a pun?) there might well come to the front a framework that abstracts away a lot of the nitty-gritty of this highly detailed API. Where the other sessions were light on the amount of code, this one more than made up for them.

Some codepoints:
  • ForkJoinPool.commonPool() => suited to the number of cores the JVM is running on.
  • Callable -> interface, provides a task to perform.
  • ManagedExecutorService -> for externally configurated threadpools for example in an application server like Glassfish. It is a part of JEE 7.
  • CompletableFuture -> takes care of Promise Pipelining. These may trigger actions.
The example provided was regarding Customer data, Contract data of that customer, and Communication data of that customer.

Modelling the flow (probably in a flow model) helps a lot, as you lose a lot of visibility on what the code is actually doing.

You tend to define/plan everything up front, with Futures, and then you start the ball rolling, so to speak, with the last call in the chain.

JAXRS 2.0 has the possibility to perform REST services Asynchronously. This can be done, using:
public void retrieve(@Suspended AsyncResponse response, ...
{
    response.resume...
}

HTTP connections are released during requests, this will lead to much better scalability. (HTTP threads can be re-pooled)

His source is on github at martijnblankestijn/reactive-rest-demo.
One diagram that basically says it all, where green is retrieval of customer information, and red and purple are contract data and communication data respectively of said customer:

Modularity and Domain Driven Design : a killer combination?

The idea of this session was to be serious about the standard software design pattern Separation of Concerns, where you have Loose Coupling and High Cohesion.

The reason why, is that the Cost of A Change should be predictable, and should not result in slowly escalating costs, regarding lost/unattainable deadlines or high maintenance.

The way to do this is with Functional Modularisation, because a functional change should only impact that functional module.

There should be few hard connections between domains, for example no Foreign Keys or the like.
There should be no query between modules, which is a problem when you wish to do some serious Search Queries. A query between modules and across several modules, causes these modules to be tightly coupled.

So, in other words, cross module searches should be postponed as long as possible.

When this isn't possible, you could use CQRS, Command Query Responsibility Segregation.

Elasticsearch can be used to do the searching.

All the modules can be queried individually by the SearchModule, and the SearchModule uses elasticsearch.

Hand-on-Labs: Hands-on with Java 8

This was fairly interesting. They decided on providing a lab on several features in Java 8: the Lambdas (of course), and the new DateTime API.

I've managed to nick their Lab and plan on practicing more of the assignments at home (there wasn't enough time for me at the conference, there were quite many of them).

Microservices: the how and why?

Unfortunately, this was a bit of a miss. I am stuck with no clear idea of what Microservices are exactly, but it seems to follow quite closely in the footsteps of the Session on Modularity.

Here are some book titles mentioned:
  • Domain Driven Design4 - Erik Evens
  • Release It!5 - Michael T. Nygard
  • Antifragile6 - Nassim Nicholas Taleb

Characteristics of Micro services:
  • small (1000 lines of code)
  • do one thing, and do it well (Unix philosophy)
  • independent
  • language agnostic communication
  • highly decoupled

Conway's Law3: organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.

Basically what this means is that, for example, if you have three teams, one for the UI, one for the Middleware, and one for the database, you end up with a software product that uses a UI, a Middleware and a Database. If the entire team works on ONE microservice, you get the absolute best product. It also means you cannot have a standard team. It is SOA (Service Oriented Architecture) done right.

Missed Sessions

I was planning on visiting Hot migration of JSF to cool SPA with smart hacks, but somehow that fell through.

Unfortunately, at the end of all that it was 17:00 hours, and I was Conference-tired, so I decided to skip Using Docker to Develop, Test and Run Maven projects.

Conclusion

J-Fall always provides an excellent glimpse in what the Software Community (at that current time) feels is most important in sharing with their colleagues.

The main conclusion that I can take away from this J-Fall is that somehow a number of the Sessions was regarding a Separation of Concerns in one way or another (either by an event log, or modules, or micro services, or you-name-it). I heard the term CQRS more than once. Perhaps its importance is felt more and more now that the entire world is getting wired and complexity and unlikely combinations of projects is growing at a rapid rate. (Internet-of-Things anyone?)

References

[1] NLJUG - J-Fall 2014
http://www.nljug.org/jfall/2014/
[2] Martin Fowler - CQRS
http://martinfowler.com/bliki/CQRS.html
[3] Wikipedia - Conway's Law
http://en.wikipedia.org/wiki/Conway%27s_law
[4] Domain Driven Design
Erik Evens
[5] Release It!
Michael T. Nygard
[6] Antifragile
Nassim Nicholas Taleb
ElasticSearch
http://www.elasticsearch.org/

Saturday, 9 November 2013

JFall 2013

I went to JFall 2013, the annual Dutch Java Conference, organised by the NLJUG on Wednesday, the 6th of November 2013 in Nijkerk, the Netherlands.

I found the Keynotes to be singularly exciting, a lot better compared to last year.

Main change was the main sponsor, ING, who have some interesting requirements for their software and who have undergone a change
from the traditional way of developing software to the DevOps way.

My chosen schedule:
  • Shootout! Template engines on the JVM (Jeroen Reijn)
  • Retro Gaming with Lambdas (Stephen Chin)
  • Code-driven introduction to the Java EE 7 Platform (Arun Gupta)
  • Hands-On Labs: Gradle (Mr. Haki)
  • Scratching the Surface with JavaFX (James Weaver)
  • ING Beleggen: how top quality software and state-of-the-art technology leads to continuous delivery (Jos Klompe)

I managed, according to my colleague, to miss out on the talk by Allard Buijze called 'Reactive applications: ready for the future'. But, if all is well, I should be able to view it at Parleys.com.

I hear the talk 'On the integrity of data in Java Applications' (Lucas Jellema) was also really good, that I didn't visit. There's only 24 hours in a day.

Shootout! Template engines on the JVM


The presentation was provided by Jeroen Reijn of Hippo (the Java CMS). He mentioned a few old Template engines, JSP, Freemarker and Velocity. Hippo seems to make use of Freemarker, at least at the moment.

Then he went into some (relatively) new Template engines with included benchmarks:
  • Thymeleaf (web+spring mvc+large memory footprint, a little slow)

    Has Natural Templating, which means that additional namespaces in the XHTML will cause the xhtml pages to render on a normal browser. (It just ignores the additional namespaces).

    Benchmark: 25,000 requests took 30 sec.
    For whom: html designers
  • Mustache (not just web+spring mvc addon)

    Logic-less, so they claim, has no control statements (if, for, while, else, etc). Called Mustache because Expressions are written between double curly brackets ({{), and those look like a mustache.

    Good IDE support.

    Benchmark: 25,000 requests took 12/13 sec.
    For whom: html designers
  • Jade (web)

    A Node.js based template engine. Indentation is part of the syntax, which means there's no need for closing tags. It's minimal, easy to read and small.

    Good IDE support.

    Benchmark: 25,000 requests took 20 sec.
    For whom: java developers
  • Scalate (Scala Template Engine, very slow due to the layout mechanism)

    Scala based, integrates well into Spring, Play, Lift, etc. Supports multiple template languages. The one language Jeroen went into deeper detail about is called SCAML.

    Benchmark: 25,000 requests took 100 sec.
    For whom: Scala enthousiasts

For the java developers that feel the need, the need for speed, stick to JSP and Freemarker.

Retro Gaming with Lambdas


Stephen Chen provided both an overview of lambdas in Java 8 and a practical example in the form of a JavaFX game called 'MaryHadALittleLambda'.

The latter part of which is available on github at https://github.com/steveonjava/MaryHadALittleLambda.

He talked about
  • lambdas
  • extension methods
  • the hamburger operator
  • method references
  • @FunctionalInterface

Code-driven introduction to the Java EE 7 Platform


It was given by the Arun Gupta. I was quite surprised to learn that he's been an employee of JBoss for the past three weeks.

I'm also still not used to the fact that their JBoss Application Server is now called ... Wildfly.

He did a quick code-driven introduction in the following topics:
  • WebSocket (URLs start with 'ws://')
  • JAX-RS (JS339)
  • JSON Client Api
  • Batch
  • JMS

JEE 7 samples are available at his github account at https://github.com/arun-gupta/javaee7-samples.

Hands-On Labs: Gradle


Gradle is sort of like Maven only with a Groovy DSL instead of XML and is more flexible than Maven. Where Maven required selfmade Plugins to get it to do the things you want, Gradle can just be adapted.

From what I hear it is quite easy, even automatic, to convert Maven build scripts into Gradle build scripts.

It seems that NetBeans has builtin support for Gradle, no plugins required. I gotta check that out!

Gradle helps in building a Project. The project consists of tasks. A task consists of actions.

The Lab was one of the easiest and simplest to do. I could have just as easily done that at home.

Scratching the Surface with JavaFX


I enjoyed the presentation of Jim (James) Weaver immensely. It started off with a Dutch Music Guessing Game to break the ice, presumably. After that he showed us the touch events interface in JavaFX. Then proceeded to dazzle us with simple 3D in JavaFX3D.

We should check out iotcommunity.net, and I should mention in JIRA that I want to have shadows from lightnodes.

JavaFX Ensemble application is very nice, as a starting point on what JavaFX makes possible.

Currently, there is some 'unofficial' versions of JavaFX that run on Android and IOS. Expect more news on this.

JavaFX can be lay outed by means of CSS. CSS is a good way to make it more 'finger friendly'. We're talking about touch screens after all.

The 3d parts showed things like shapes (ball, cube, triangle mesh, textures, bump maps), lights (ambient and directional), cameras.

One of the more awesome parts of the presentation was the fact that he wanted to play the guitar, when he was away from home, but without dragging his guitar along. So he programmed touch sensitive guitar strings in 3d on his Microsoft Touchpad. He could play quite well and it was very impressive to see a really good demo of all the touch events he had been talking about.

ING Beleggen: how top quality software and state-of-the-art technology leads to continuous delivery


Jos Klompe and his colleague provided a riveting and energizing talk about what they do for ING, to be specific the portal that customers and employees use to trade stocks and other, more complex, financial instruments.

The most interesting in the story is the complete turnaround from a Bank with a traditional waterfall model over to a dynamic Bank using Agile and Scrum and DevOps teams that is putting IT at the core of its business.

Sunday, 4 November 2012

J-Fall 2012 Report

J-Fall 2012[1] has come and gone, and I write a small blurb on what I managed to learn at each session.

It was a great J-Fall. I had a lot of fun and learned a lot from listening to some of the people, who were so passionate about the particular field they worked in. I hope next time it will be equally interesting. Or even better! Keep it up, y'all!!!

It's always interesting to see any big event that has a line for the mens room, instead of the ladies room.

Your Product Owner is Just Better at Pretending

Speaker(s): Erwin van der Koogh

It was extremely early in the morning, and I had to catch the very first train to the Conference, or I would miss out.

Some statistics. Of all the features of a software product, only 40% of those are actually used by the customer.

In which case it is very important to decide what to include in the product and what not to. Also, it might be obvious, who your customer is, but sometimes things are not as cut and dry.

The powerful example of Facebook was discussed. The Customers of Facebook are not the users, but the advertisers. Advertising is how Facebook makes (hopefully enough) money. The users are the Product. They are the reason Facebook can charge for advertising. This will make you look at Facebook in a whole other light.

Another statistic is that, if you were to eliminate your source code, and you'd have to write it again, but with the knowledge and experience you have now, how long would that take? Just as long? Twice as long? Half as long? It turns out around 1/3 to 1/4 of the time spend on a project is spent coding. Yet that is the only part that is currently being considered for efficiency in all our Software Development Methods we have gotten used to.

A third I wish to point out, was Documentation. Nobody (seems to) reads documentation. I always say that I prefer to have bad documentation instead of no documentation. I always have the optimistic view that if there is bad documentation, the incentive to fix it is greater than if there is no documentation to be the first to write it.

The speaker did not share my opinion. He mentions that bad documentation, if there is no hint that it is in fact bad, could be assumed to be correct and thusly provide misplaced confidence in what you are doing, leading to larger problems later on.

One other instance is to show people that there's a new Upgrade/Component/Widget/whatever available on your website that does X for you. Then place a link under it to a 404 page. Then run statistics on how often that 404 page was accessed. It gives you an idea of how much a feature is wanted, without writing any actual code. A lot of these ideas were expressed here.

I was sufficiently intrigued that I think there's more than one blogpost in here.

Keynote - Oracle


Stephen Chin @steveonjava Java Technology Ambassador and JavaOne Content Chair was late for the Keynote. He was on a Nighthacking tour on his bike through Europe attending all the major conferences.

But he did manage to get there, riding into the conference room, on said bike and biking gear.

They made quite a show of it.

Find more complete info on Geertjan's Blog.

I really liked the picture of 20 Raspberry Pies in a 8U unit.

Java EE 7 Platform Overview and Highlights

Speaker(s): David Delabassee


They are hard at work for the new version building new APIs and improving old ones.

new API:
  • JSONP presentation view
  • JSON API for Java
  • java.net.websocket
  • batchapplication for Java 1.0
  • java temp caching -> distributed across nodes?

old api to be updated:
  • rest + hypermedia + client api
  • JMS
  • Bean Validation
  • JSF 2.2
  • github.com/jersey./hol-sse-websocket

The Aquarium

javaee-spec.java.net

Some of the Specifications are not quite finished yet. So if you have something to say about how things should be implemented/work, you still have a chance to mention it.

Java EE Multi-tenancy in Practice

Speaker(s): Frans van Buul

Good stuff. Multi-tenancy here is having multiple customers in the same database, and your application is minimally impacted.

It is concerning adding a column to the tables (which can automatically be done by Oracle and by PostgresSQL Enterprise) that indicates the Tenant.

The idea is to have just one database, where every table can be "viewed" by tenants. The tenants will only see the information (rows) of himself and not of other tenants. This way, the impact in the code is minimal.

In a worse case scenario, we have to do all this stuff ourselves. This means that the code will be littered with a lot of if statements to double check if the proper tenant is inserted etc.etc...

In hibernate it is possible to "fix" the problem (though in Hibernate 5.0 there might be a solution for the problem) with an Interceptor (or a PrePersist) to fix the tenant properly on the entity by Lookingup in the context for the proper tenant. A good way of retrieving the tenant is by using the hostname for the proper information. For example holidayinn.localhost or novotel.localhost.

What I find most admiring is the fact that he did make some mistakes, and he managed to find out where he made those mistakes, and fix those mistakes.
Mistakes made were:
- tomcat selected instead of glassfish, and tomcat has a web profile, which isn't everything he needs

MySQL workbench was awesomeness! He generated the entire database from scratch every time, by executing a script created by MySQL workbench!

Combination Netbeans and Glassfish and MySQL and EclipseLink.

Netbeans never ceases to amaze me, the quick way in which an entire project can be started and generated in a manner of minutes.

EclipseLink supported a special annotation to get the Tenant system working,

One question in the public was that there were small and big companies and that the big companies, with their many permutations, would push the little companies out of the cache.

In the case of Frans, his organisations were all on the same scale and he didn't see this happening in his practice.

My opinion: the little companies do not need to be in the cache, as their involvement isn't that big to begin with. They can wait for their data a bit longer.

In general a very tricky question is the second level cache. It is possible to do all this by hand in MySQL, but you basically "screw" with the Primary keys. The primary key is partially "hidden" from the application, the tenant part to be precise. So the primary key known to the system might be the primary key of another record as well (but with a different tenant). This is a problem with caching, as the cache might provide the wrong instance. It is best in those case to just turn the second level cache off.

Question of the audience was: just make the primary key a autogenerated id, problem solved. Frans agreed in principle, but what if you have a customer that wishes to port his local database into your tenanted database. You'd have to resequence all the primary keys before inserting into your database. This is a complicated and error prone process. Not to mention that this must be done on a production database, during a time of low load, so basicallly at night.

Microsoft Keynote


Microsoft explained the advances made with their Windows Azure, their cloud solution. Apparently it is no longer Windows centered, but can support a number of different technologies. Even Linux was mentioned!

Also deploying to a staging environment, testing and then switching the staging and the production environment at the load balancer level to go live within a second was nice.

Hands-on Lab: RRRADDD! ... Really Ridiculously Rapid Application Development (Domain-Driven)

Speaker(s): Dan Haywood, Jeroen van der Wal

It concerns an Apache Incubation project called Apache Isis. It is still in its infancy but looks nice.

It reminds me the most of something we're building at work. It works on annotations for displaying your data on webpages without much hassle.

Hands-on Lab: MongoDB

Speaker(s): Maikel Alderhout

Database evolution in short:
  • 1990: Oracle RDBMS
  • 2000: RDBMS and OLAP/BI
  • 2010: NoSQL Hadoop

Several trends have a big impact on the database landscape:
  • data volume, type & use
  • agile development
  • new hardware architectures, cloud, commodity

4 categories of NoSQL are available:
  • key-value stores
  • document based
  • columnfamily/bigtable clones
  • graph databases

MongoDb is a scalable, high-performance NoSQL databaae of the document based type.
  • no transactions
  • json documents binary stored
  • replication/sharding/durability.

No strict data schema. Examples are
Twitter and Foursquares. Foursquares is actually running on MongoDB.

j:true => this is the system used by relational databases. Changes are stored in a journal on disk. MongoDB can be set to what you want:
  • asyn(default) instant feedback, "got the message I'll get around to it"
  • w=1, "Ï'll remember it"
  • j:true, "Wrote down what I need to do"
  • w=majority, "Wrote everything down"
  • w="<tag>", "Wrote everything down multiple times"

The command line client during the lab felt like working somewhere between SQL and calling javascript functions.

The situation:
  • RDBMS -> a lot of functionality, very little flexibility
  • memcache -> little functionality, a lot of flexibility
MongoDB for the most part goes a long way towards RDBMS feel.

Scala Through the Eyes of Java (8)

Speaker(s): Urs Peter

Urs Peter is a Speaker/Trainer of Xebia and provides courses in Scala, and it shows.

Scala started out in 2003. Created under the EPFL by Martin Odersky and exploited by the company Typesafe.

Has the following frameworks, Scala + Akka + Play.

Some points that came up:
  • syntax lightweight (helps?)
  • val = final
  • var = field
  • none = ?
  • operators are just methods (except == and a few others)
  • types are inferred.
  • no more NullPointerExceptions
  • functional programming (first class citizens)
  • object oriented programming (all the way, no native types)
  • multiple inheritance by means of traits.

An example was given using spaceships, always cool.
  • base, has the following traits
    • shield
    • gun
    • medic
  • commander, has the following traits
    • shield
    • gun
  • fighter, has the following trait
    • gun
  • mechanic, has the following traits
    • shield
    • medic

Dutch Scala Enthousiasts

Scala for the Impatient.

Shadaj Laddad

References

[1] J-Fall 2012
http://www.nljug.org/jfall/

Wednesday, 24 October 2012

J-Fall 2012

The NLJUG[1] is once again organising J-Fall 2012[2]. It takes place on the 31st of October 2012 in Nijkerk, in the Dutch province of Gelderland.

I shall be visiting, and see what new things I can learn.

I hope to write some blogs about it. As such I thought I'd post my current programme here.
Time: 08:00 - 08:50 Early Bird sessions
Title: Your Product Owner is Just Better at Pretending
Speaker(s): Erwin van der Koogh

Time: 09:20 - 10:10 General Session
Title: Keynote - Oracle

Time: 10:40 - 11:30 Parallelsessions
Title: Java EE 7 Platform Overview and Highlights
Speaker(s): David Delabassee

Time: 11:35 - 12:25 Parallelsessions
Title: Java EE Multi-tenancy in Practice
Speaker(s): Frans van Buul

Time: 13.35 - 14.20 General Session
Title: Keynote

Time: 14:25 - 15:15 Parallelsessions
Title: Hands-on Lab: RRRADDD! ... Really Ridiculously Rapid Application Development (Domain-Driven)
Speaker(s): Dan Haywood, Jeroen van der Wal

Time: 15:45 - 16:35 Parallelsessions
Title: Hands-on Lab: MongoDB
Speaker(s): Maikel Alderhout

Time: 16:40 - 17:30 Parallelsessions
Title: Scala Through the Eyes of Java (8)
Speaker(s): Urs Peter

References

[1] NLJUG - Nederlandse Java Users Group
http://www.nljug.org
[2] J-Fall 2012
http://www.nljug.org/jfall/