Goodbye 2015!

2015 is over and I'm looking back.How did it go, which things worked out and which didn't. And how come I'm feeling so tired recently.

2015 is over. How did your year go? I hope you're feeling good about it. And if not, I really hope you're finding a way to make 2016 feel better!

These days end the second year that I started with concrete professional aspirations. I'm convinced that writing them down and occasionally coming back to them throughout the year helped me not only to stay focused but also to reflect. It helped me see where things changed, why that might be the case, and how I feel about the reasons. In developer terms: It shortened the feedback loop.

So here goes my professional review of 2015. It is tightly coupled to the resolutions I posted on January 1st. I will go through the list, check off what I did and mull over how I feel about the things.

Contributing to Open Source

Checking Off

In January I made a prioritized list of what I planned to do in 2015. Let's go through it one by one.

  1. finish refactoring of SnapshotView in ControlsFX

This got finally merged in May. Yay! The control is ready for production and since a small bug was reported (and fixed) it seems to be in use. Awesome!

  1. continue contributing to the Property Alliance

The alliance seems to have silently fallen apart. It has not been officially axed (as far as I know) but nothing happened since January. After Stephen's initial commits I was the only contributor and I shied away from the next task: creating an implementation that matches the JavaBeans 1.0.1 spec. I just didn't feel like reading 114 pages of specification. I'm not sure how I feel about this, should I have stepped up to the plate?

  1. implement checks for value-based classes in FindBugs

This one hurts. After not doing much for over half a year I got my shit together and spend some time working on it in September and October, finishing almost all the intended features. Almost! One thing is missing and I am unable to get help on how to implement it. So this is still unfinished and haunting me. Argh!

  1. keep working on LibFX

LibFX had a strong release in May, which included the very cool transforming collections. Since then I have been working on trees and various utilities, both coming close to being releasable. I'm fine with how this project develops but maybe I should release more often.

  1. another control for ControlsFX (optional)

I don't currently work with JavaFX and the idea I had is so old that I can barely remember. So I didn't do anything here.

  1. contributing to another project (optional, only if 1.

and 2. are done)

I made a microscopic contribution to AssertJ: It is now possible to assert that an Optional contains a specific instance.

And I started a new thing: JDeps Mvn. It's a Maven plugin running JDeps on the compiled classes, failing the build for dependencies on JDK-internal APIs. It's specialty is the ability to easily define exceptions from build-breaking for known dependencies that could not yet be removed. Cool stuff and in use at my day job!

There is also something else brewing but I still have to do some more work before announcing it.


So how do I feel about all this? I don't really know... My goals were deliberately conservative so I would actually have a chance of reaching them. And I did (mostly). But it's just small bits here and there and feels like it has no real impact.

One of the great things about open source is working towards a goal shared by a community (or so I hear). But I'm not part of one because I don't stick around. It could have happened for the Property Alliance but it never picked up pace. Maybe I should focus on one project and worm my way into that...


Checking Off

Let's start with the most important goal: Writing a meaningful post every 10 days. Nailed it! I wrote about 40 posts this year, with few fillers. It was not always easy to find the time but I did and I have to admit that I am pretty proud of that. A small step for mankind but a giant step for a lazy ass like myself.

I also had concrete plans what to write about. A lot of ideas were floating around in my head and I wrote that "some are more important to me than others":

  • JavaFX control tutorial
  • Open source project tutorial
  • Serialization proxy pattern extensions
  • Java 8
  • Project Valhalla

Well... not that important apparently. I utterly ignored the first three on the list and wrote only two posts about Project Valhalla. But I did continue to talk about Java 8, which was fun. So not a total loss here.

My Favorite Posts

  1. Comment Your Fucking Code! and the follow-up posts

Because this topic has been seething in me for months! And it still does. Just yesterday I stumbled into an internal API (custom Swing control) without any comments. I would've written the fucking post all over at that very moment. Also, ranting for the first time was really fun.

But I am also convinced that good came from it. It started a discussion among my colleagues and raised awareness. We didn't decide on anything yet but we will soon. And I will continue to write about it.

  1. Everything You Need To Know About Default Methods and Interface Evolution (part I and II)

Default methods are an interesting topic. The first post comprehensively presents all there is to know about it. It is continuously viewed by about 20 people a day and I feel like its providing a lot of value to other developers.

I also like the ones about interface evolution - maybe even more. Part I presents something truly new (which I don't come up with often) and part II dissects failure (which is a little unusual and should happen more often).

  1. Transforming Collections

Because it was fun and challenging to implement and is a cool tool to have. Also made me explore Guava's collection testing library.

  1. Stream Performance and Your Ideas

Because streams are fun and JMH as well.

  1. All the posts about Jigsaw

The impact of Jigsaw is interesting. I really didn't care about Java 9 because I didn't see anything cool in modules. That obviously changed but I still find lambdas and streams way cooler.

What is interesting is that it was a total coincidence that I stumbled upon the topic. It was Robert Krüger's mail to the OpenJFX mailing list back in April that nudged me toward it. Incompatible changes in Java? Really? I had to look into it. And that small bit of curiosity birthed my most popular post (see blow) and from there on a series of a dozen articles about Jigsaw.


Let's have a look at some analytics data. (The statistics were taken with Piwik and the numbers are unique page views. The declaration of will to not be tracked is respected.)

110,355 unique page views in 2015, with a healthy monthly baseline of about 8,500 since the summer and a peak of 18,679 in July. I like!

Most popular blog posts:

  1. How Java 9 and Project Jigsaw May Break Your Code (9,616)
  2. Comment Your Fucking Code! (9,460)
  3. Everything You Need To Know About Default Methods (6,446)
  4. Value-Based Classes (6,141)
  5. Will There Be Module Hell? (5,599)

It's not surprising but a little vexing that negative, click-baity posts are dominating so clearly. That's why I really like to see the very instructive one about default methods up there.

Most effective referrers:

  1. Reddit (20,596)
  2. Google (14,395)
  3. Baeldung (3,583)
  4. DZone (3,471)
  5. Twitter (2,801)

Eh, Reddit. I don't know how I feel about that... Firstly, because some communities on Reddit truly suck and my usual way of dealing with problematic things (which I am not trying to fix) is to boycott them. But secondly, because the visits are very shallow. The average visit time is less than half of other referrers' and there is little interaction (comments, followers, subscribers). Not sure whether I'm gonna do something about this at some point...

But I'm happy that Google plays such an important role because it shows that the content is relevant (and that SEO efforts were not in vain).


I am pretty satisfied with how this turned out. I don't mind that I didn't cover the topics I envisioned (though I still think the open source project tutorial would be really useful). And with Jigsaw I discovered a topic at a time that lets me be ahead of the curve for a while, which is always fun.

But most of my posts are pretty ephemeral. Especially the ones about Jigsaw: The module system will be feature-freezed in less than a year but I am sure that so many things will change until then that the posts are obviously dated and borderline useless. What to do? At times I wonder whether a more Wiki-like approach would be better (like Martin Fowler's Bliki, which he describes in Evlolving Publication). I could just update existing content and keep it more relevant. More to think about...

Let's turn to the hard numbers. In short: I am very happy with my visitor stats! They developed so well that I basically stopped to forcefully promote my content. I will tweet about it, post to G+ and send the newsletter - everything else happens pretty much by itself, which is cool.

I've begun to wonder about syndication, though. It obviously raises my profile but many sites have become so blatant in their promotion that it starts to embarrass me.


Some other things worth talking about...

Blog @ Disy

I pushed Disy (where I work) to create a blog and we did:

It's a great way to show the world what we're doing and it allows us to partake in community discussions about the topics that we're best at: coding, databases and GIS-stuff. And I am sure it will help potential job candidates decide whether we fit their profile. But it is also great for me personally because I can occasionally write a post on company time.

It was also a lot of fun to create a blog with Jekyll, hosted at GitHub. This really made me wonder whether I should move away from WordPress. The longer I look at all these clean and customizable Jekyll blogs, the more cluttered and inflexible this one seems. Something to think about in 2016...


Somehow I found some free hours during the early summer and spent them with the first parts of Michael Church's Haskell summer course. That was great!

Unfortunately it was also a waste of time. I didn't finish the course, invested no energy into using the freshly acquired knowledge and hence let it rot. Nowadays I'm back to being hardly able to read the syntax. What a shame.


I say I'm an open source proponent. And I am! But I was still using Windows for a couple of years (because reasons) and that seriously pissed me off. So during the summer I finally switched my private laptop and my workstation at Disy over to Linux.

I started with Ubuntu but soon remembered how much I hated that the package management often contains totally outdated versions (Node.js v0.10.25 anyone?). And the somewhat painful updates every six months. Or every 24 months if anyone believes that makes things better. As part of my new year resolution (more about that in the coming days) I already moved my laptop to something more ... intense.


This was not a goal on my list but I reached it anyways. It looks like I am a slow worker and doing all of the above took somewhere between ten and twenty hours a week. Together with private obligations that left exactly zero time for anything else. No gaming, no sports (although I was already lazy before), little reading, hardly any movies or shows (I binged Sense8 on Monday, that was fun!), no other hobbies, and often too little sleep.

This was fine for a while but it took a toll and that showed during the last months. I grew irritable and scatterbrained and developed an aversion against blogging and coding. Not out of genuine dislike but because they required energy that, more and more often, just wasn't there. Many times I had to force myself to sit down and start working on this stuff, which surprisingly didn't improve my mood.

So I will have to downshift, which forces me to make some tough calls. But that's a problem for next year's Nicolai!

Goodbye 2014

So that’s my public alter ego’s year 2015 in a nutshell. All in all I am happy with how it turned out. But it also gave me a bunch of things to think about - some pretty important, some entirely artificial. They will play a role in my resolution for the next year, about which I will write in the next days.

Have a happy new year's eve! I hope to see you again in 2016.