Skip to main content

JFokus 2013: First confrence day

This was my first time at JFokus but hopefully not last. I wasn't quite sure what to except. I had heard good things about the confrence and knew that it was quite big. It was more and better than I expected. There were over 1500 attendees and great session from beginning to end. If i get the opportunity to go again I'm most definitely going again.

On the first day I attended six sessions. I'm not going to write all my notes here but I'll try to give good summary of each session and the rest can be read from JFokus website where you can find presentation materials for both days.

Taking development to the edge

This was the keynote of JFokus embedded, M2M & internet of things miniconfrence.

In the future everything is connected to each other and to the internet by everything meaning absolutly everything. Cars can share information of traffic, houses can tell if all the doors are closed and locked or the are the lights on.

Smart homes didn't succeed 10-15 years ago because automation was expensive and possibilities were unknown. In the future smart homes will be true but instead of full blown automated homes the automation will take care of the simple things. Lights can controlled automatically depending on movement in rooms or how much sunlight shines through the windows. When nobody is at home the lights can be switched off, temperature can dropped by adjusting central heating and home surveillance system be turned on.

For all this to be true and to keep the networks running without massive break downs embedded systems need to able to turn on and off their network traffic so that they don't send status updates every minute or so but when there's actually something signicant to report.

Today there are about 200 000 programmers in the embedded field but in the future there are going to billions of embedded devices. So who's going to be designing and implementing all those devices and their software. There's going to be a huge need for embedded programmers in the future and Oracle is going to respond to this with Java and their aiming to #1 platform of embedded devices. JVM already works in embedded devices but Oracle is going to expand this support by bringing Java SE APIs to Java ME.

By attending this session I also got a free Raspberry PI and hopefully I have some time in the future to try out some embedded programming with RPI and Java.

Design patterns in modern JVM languages

Very well presented session about patterns by Venkat Subramaniam. The most important thing to remember from this was that patterns are communication between people a common way to describe how something is done so don't force your code to patterns. I didn't have to make much notes abot this one because I was so concentrated on observing.

Unofrtunately there aren't anything about this session on the JFokus web site either but here's a few good patterns he demonstrated: Lambda expressions, execute around and function composition. And  these are a few you shouldn't use: Cascade pattern, Java 7 ARM (automatic resource management).

Continuous delivery: From dinosaur to spaceship in 2 years

Story of how SAP's SAP ID Service department brought their tools and methods to this day from Java 1.4 and waterfall methodology. This was a ok session nothing bad but also nothing amazing. I don't think I have anything say that you can't find in the presentation material.

Large scale automation with Jenkins

Introduction to Jenkins plugins that makes Jenkins more than just a CI build tool. Kohsuke Kawaguchi introduced Jenkins plugins for variuous situations like parameterized builds, naming builds, virtual maven repository and some for visualizing build workflows and pipelines. If your using Jenkins or evaluating it I really suggest that you look through the presentation material.

Howto do kickass software development

Great non-technical talk of howto create good software.

So why to deliver kick-ass software? 

To have happy customers of course.

Howto know that you're doing the right thing? 

Fake the software first, do a pretotype e.g. do paper models of web site and see how everything fits together. Constantly gather feedback and remember to answer to the feedback and don't let the project manager filter the feedback but go through the feedback in the development team and let the developers answer.

What about kick-ass development team? 

Traditionally developers are one team and QA is another break this! Make developers test each others code and practise this. Do pair programming with developer and tester or let developer do the testing and tester do the testing and compare notes.

Some other things you can do to improve

Automate builds and testing. This gives you the opportunity to fail fast and to share artifacts. Run your tests concurrently to run them faster. Have a build stategy for unit tests and for performance tests. Examine the statistics of your code, builds and tests.

Howto fail a software project fast and efficiently

This presentation listed almost all the possible things one can do to ensure that a project fails. I can't summarize this presentation because everything in the presentation was important. This is something everybody involved in software development at any level should read through. When you read it through remember to negate everything until you see the stop sign.

Popular posts from this blog

Simple code: Readability

Readability, understandability, two key incredients of great code. Easier said than done, right? What one person finds easy to read and understand another one finds incomprehensible. This is especially true when programmers have different levels of understanding on various subjects e.g. object oriented vs. functional or Node.js vs. Java. Even though there are obvious differences between paradigms and programming ecosystems there are some common conventions and ways to lower the barrier. Different approaches It's natural that in programming things happen sequentally e.g. you can have a list of objects and you need to do various things to the list like filter some values out and count a sum of the remaining objects based on some property. With the given list const stories = [   {name: "authentication", points: 43},   {name: "profile page", points: 11},   {name: "shopping cart", points: 24},   {name: "shopping history", points: 15},   {name: &qu

Simple code: Naming things

There are two hard things in programming and naming is one them. If you don't believe me ask Martin Fowler https://www.martinfowler.com/bliki/TwoHardThings.html . In this post I'll be covering some general conventions for naming things to improve readability and understandabilty of the code. There are lots of things that need a name in programming. Starting from higher abstractions to lower we need to name a project, API or library, we probably need to name the source code repository, when we get to the code we need to name our modules or packages, we give names to classes, objects, interfaces and in those we name our functions or methods and within those we name our variables. Overall a lot of things to name. TLDR; Basic rule There's a single basic convention to follow to achiveve better, more descriptive naming of things. Give it a meaningful name i.e. don't use shorthands like gen or single letter variables like a, x, z instead tell what it represents, what it does

Simple code: Simplicity

Simplest solutions are usually the best solutions. We as software developers work with hard problems and solve a lot of small problems every day. Solving a hard problem itself is a hard job. Though in my opinion it's not enough to solve a hard problem in any possible way but a hard problem should be solved with a simple solution. When a developer comes up with a simple solution to a hard problem then they can declare the problem solved. First a disclaimer. Coming up with a simple solution to a hard problems is itself a very hard problem and takes a lot of time, effort and practice. I've seen my share of "clever" solutions for hard problems and the problem with those is that usually the solution itself is so hard to understand that depending on the size of the problem it may take a developer from hours to days or even weeks to understand how that "clever" solution works. It's a rare occasion when a developer has come up with a simple solution to a hard pr