The JavaOne Voting Machine



If you visited JavaOne this year you should have noticed the Voting Machines that were placed at each session room at JavaOne.


By using this machines you had the chance to give a vote for the current session. If you liked the session you simple pressed the green Duke, if you didn’t liked the presentation you choosed the red Duke and if it was quite ok you selected the Duke in the middle.


Here you can see an image of a final machine at JavaOne:


In this post I will show how we created the Voting Machines and the problems and pitfall that Michael and I were confronted with.

The concept

From the beginning it was clear to us that we use JavaFX to create the Voting Machine UI. We had the idea with the animated Dukes in our first brainstorming session and so the main concept was created in only a few hours. After that I created some raw drawings off the concept:


Based on this we had defined some main tasks:

  • Find a good designer and create the Duke animations
  • Create the JavaFX UI
  • Create a cloud based server application to store the data
  • Find some hardware that will work for this project
  • Create cover for the machine

The Duke animations

We found a good designer that already had some knowledge in drawing Duke since he did it several times for projects like DukeScript. Together with the designer we defined the animation and in the end we had over 3 minutes of animations based on more than 4800 images.

You can find a short example how these animations look like in this YouTube video:

Even if the designer already drew some Duke images he misunderstood the face of Duke and thought Duke is a Cyclops as you can see in this first preview of the sleeping animation:


The Cover

We wanted to have a cover for the voting machine that hides the unused area of the screen. To do so we started with covers that were made by cardboard. It was quite easy to define the right size for all areas since it took only some minutes to create anew cover. At this stage we didn’t want to have a cover that looks good. We wanted to define the physical dimension of all visual areas and how they should be sized and placed in JavaFX.


Once all dimensions were defined we ordered a first prototype based on plastic. Sadly something went wrong with the communication with the producer and some of the dimensions were wrong:


After we corrected the dimensions we ordered the final cover based on a much better material.


The Hardware

We used a Raspberry Pi to run the JavaFX application on the Voting Machine. It’s quite easy to create a touch based JavaFX application for the Pi by using this special JavaFX Embedded build that is provided by Gluon. In addition we found a large touch monitor that works perfectly with touch on Linux. Well, to be true the European versions worked perfectly. After we installed the Weezy image on the Pi we didn’t need to do anything to receive touch events in Linux. For the US version of the monitor we needed to reconfigure Linux that cost us more than a day.

The Software

Managing more than 4000 images on a Pi isn’t that easy ;) We used a lot of tricks to create an interactive UI with smooth animations. I don’t want to go deep into the details since Michael did most of the performance tweaks but at the end we found a good mix of in-memory images and lazy loaded images to create the final smooth UI.

Next to the software that runs on the Voting Machines, we created a fully animated JavaFX leaderboard application that was shown on big screens at JavaOne:


The Manufacturing

The days before JavaOne Michael and I built all the Voting Machine for JavaOne in a Hilton Meeting Room. Here are some impressions that show how we build our embedded robot army:


The Feedback

We got a lot of positive feedback at JavaOne and several people twittered about the Voting Machines:

In addition a nice reminder was show before each session:


But to be true: The coolest moment was the big announcement of the Voting Machine by Sharat Chander at the JavaOne keynote:


If you haven’t seen the keynote you can watch it online.

Voting analytics

At the end we tracked over 23000 votes for sessions and I think this is a big success. Here are some facts about the voting results that might interest you:

The average number of votes per session is 55. Most of these votes are positive as you can see in the following diagram:


Only 6 percent of all votes for sessions are negative. To me this indicates that the Java sessions in general are very good. A funny fact is that the negative button was mostly pressed when no session was scheduled for a room. I think people wanted to see the reactions of Duke when pressing the red button. Over 7000 clicks were registered in the break between sessions which makes 25% of all clicks. For me this is a good feedback that people liked the UX with the funny Duke animations :)

We tracked votes for 428 session. This includes most session types like the conference sessions, BOFs, tutorials. Until now I haven’t done an analysis based on the session types but I can show you a general overview over all session types. The following diagram shows the distribution of votes. As you can see there are almost 200 sessions that have more than 50 votes:



Based on the positive feedback and the voting results I think that the JavaOne Voting Machine was a great success. As far as I know all Voting Machines will be reused at JavaOne next year and maybe there will be some time to even improve them and add some additional Duke images or interaction, for example. In addition we are currently talking with other Java conferences about our voting concept and maybe you will find Voting Machines on your next local conference :)

Hendrik Ebbers

Hendrik Ebbers is the founder of Open Elements. He is a Java champion, a member of JSR expert groups and a JavaOne rockstar. Hendrik is a member of the Eclipse JakartaEE working group (WG) and the Eclipse Adoptium WG. In addition, Hendrik Ebbers is a member of the Board of Directors of the Eclipse Foundation.

Circle Circle

Open Source made right


Privacy Policy Cookie Policy Privacy Config Impressum