Late Goodbye to 2018
CodeFX Occasionally #69 — 28th of April 2019
wow, December was a slow month — even for me. Between a very busy fall and the thing-I-failed-to-mention (TIFTM), I apparently needed some time to decompress. So for the last few weeks of 2018 I have been supremely lazy, but then, yes then, then I’ve been pretty busy fo a few months, which, long story short, is the reason why you’re getting the Goodbye 2018 newsletter in April. 😊
If 2018/19 is the first turn of the year that you’re subscribed, let me quickly tell you what this is about. Every year I publish a pair of posts looking back at my last and forward to my coming year. Here’s last year’s caveat:
Naturally, this is an exercise in navel-gazing. I’m doing this more for me than for anybody else because putting my thoughts in writing sorts them out and publishing them makes sure I can’t easily go back and retcon the stuff that didn’t work out. If you’re not into me talking about myself and are here for the Java content, I kindly recommend to skip this weekly and the next.
Last years’ posts:
- Goodbye 2014 and Hello 2015
- Goodbye 2015 and Hello 2016
- Goodbye 2016 and Hello 2017
- Goodbye 2017 and Hello 2018
As usual, I’ll first review my plans for the ending (well, ended) year before looking at traffic and best of.
I send this newsletter out some Fridays. Or other days. Sometimes not for weeks. But as an actual email. So, subscribe!
Plans for 2018
Every year gets a motto — for 2018 I picked Laying the Foundation. The idea was that as much as I enjoy writing posts, shooting videos, speaking at conferences, etc. it would be really nice if those activities, since they don’t actually pay any bills, would at least be complicit in it. So I planned to continue doing what I like while starting to offer a paid service that benefits from the notoriety: online courses.
Hence my plan for 2018 was two-pronged:
- continue writing, recording, speaking, etc.
- start working on my own site for online courses
Let’s see how that went…
Posts, videos, newsletter, code, … how did it all go?
* publish The Java Module System
* write at least 15 blog posts for CodeFX
* collect Java 9–11 content in a self-published book (stretch goal)
* make at least 10 YouTube videos
I obviously failed to publish The Java Module System (more on that later) and luckily wasn’t insane enough to start on a second book. On posts and videos I lagged behind for most of the year, but kicked myself in the butt in late summer and got back on track. Check and check, so I’m reasonably happy with that.
I started the year with CodeFX Weekly, but at some point lost the rigor and it turned into CodeFX Occasionally. I don’t like that.
Talks & Trainings:
* continue speaking at conferences
* hold a few Java 9 / JPMS trainings
I gave 19 talks at conferences and 6 at local meetups, so that went well.
The trainings were curious: I spent 15 days teaching developers about Java 8, Java 9–11, and JUnit 5 and I realized how much that contributes to paying bills. Interestingly enough, all the companies first reached out to me, so I started wondering how much potential there may be if I actually had some kind of marketing or sales strategy…
* get back on top of JUnit 5
* contribute to JUnit 5 (stretch goal)
* get JUnit Pioneer off the ground
* find a way to apply JPMS knowledge to an existing or new open source project (stretch goal)
I successfully reengaged with JUnit 5: Brushed up my knowledge, updated my posts created a one-day training (aimed at JUnit 4 users), even contributed a little bit.
Maybe more importantly, thanks to the JUnit team kicking my butt, I finally got JUnit Pioneer off the ground. If you’re using JUnit 5, you should check it out! Likewise if you have written your own extension — our goal is to collect all the things that may be useful to others.
JUnit 5 extension pack, pushing the frontiers on Jupiter.Released on GitHub, JCenter, and Maven Central…
I didn’t put my JPMS knowledge into practice, but there’s some potential in the pipeline. If it turns into something, I will let you know.
* use Kotlin in a real project
* stay on top off Java 10 and 11
* learn more about performance on the JVM (stretch goal)
I indeed started using Kotlin (but I’m still very much of a noob) and am ok with my Java 10/11 knowledge and content. I’m only ok and not, say, happy with it because there are still many internal changes that I don’t comprehend — I simply lack the proper understanding of what goes on below the surface. The stretch goal was intended to remedy that, but I didn’t get around to it. Probably not in 2019, either.
I tend to describe myself as a one-trick-(Java)-pony and most of my experience is with implementing domain logic. I’m not strong on either desktop or web development and know little about operations. That makes creating my own web app equal parts welcome learning opportunity and tough challenge.
And what a challenge it has been! I basically threw all the things at it that I wanted to try and that make a modicum of sense: GitLab, Kotlin, Spring Boot, Typescript, Continuous Deployment into the cloud, yadda yadda yadda. It’s not surprising that setting everything up took a while, but it looks like I almost got everything working together and can soon start going beyond Hello World.
While I could (should?) have reached more in the eight months that I occasionally worked on it, I’m actually content with how this turned out. It’s never easy nor quick to find your way through the jungle and learn new things.
(If you’re curious how I’m building the app, stick around. I want to start creating a web diary around it (words? videos?), but the usual caveats about me having more plans than time apply.)
The Java Module System
The book, this damn thing, was sometimes close to driving me insane. Not because it’s a lot of work, but because it was a constant cloud over my head, following me wherever I go, always ready to throw some shade whenever I felt good about myself. Seemingly, there were always TODOs, always someone wanting something from me.
Surprisingly, this all became worse once principal writing was done in early summer 2018. Until then, with content not covered and diagrams not drawn, the book was obviously not ready to be published. But then I handed it over to production and this is where the trouble began (with books as with software as it seems).
It came down to Manning and me not being able to agree on the amount of editing the book still warranted. In a nutshell, they wanted to do a lot and I didn’t want to spend weeks fixing the mistakes that heavy editing would inadvertently introduce. After months of back and forth I tapped out and they got somebody else to review the proposed edits. Tremendous thanks to Jeanne Boyarsky for carrying the book over the finishing line when I couldn’t.
This has a considerable upshot, though: The book will be released soon. For real this time.
The blog remains the most important outlet for my work and even though it didn’t get too much love in 2018 it continues growing.
Posts of 2018
I published a dozen posts in 2018 (and updated the seven in the JUnit 5 series). There are a few ones in there that make me really happy because they either share important information or because I just had a lot of fun researching and writing them:
- Unlocking Intersection Types With ‘var’ In Java 10 because I was surprised by generics once again
- How To Use Multi-release JARs To Target Multiple Java Versions because I think this will be important in the years to come
- Improve Launch Times On Java 10 With Application Class-Data Sharing because free performance is always good
- Scripting Java 11, Shebang And All because the seeming pointlessnes of scripts in Java make them so entertaining
- Reactive HTTP/2 Requests And Responses In Java 11 because it’s the first reactive API in Java
Scripting Java 11, Shebang And All - blog@CodeFX
There are several reasons why writing scripts in Java seems to be a bad idea, chief among them that it's always a two…
Even though they are notoriously unreliable, let’s see some numbers and compare them with last year’s stats. They’re all unique page views, taken with Piwik (the declaration of will not to be tracked is respected).
The blog had 447,217 unique page views in 2018 (up a whooping 110% from 213,899 in 2017, wow!). The year began with 30k per month (which were already the best months ever) and exploded when Java 10 (44k in March) and 11 (50k in October, 58k in November) were released. The fall was good in general and I assume that the continuous release of new posts played its roles.
Most visited blog posts:
- All You Need To Know For Migrating To Java 11 (40,136)
- First Contact With ‘var’ In Java 10 (37,545)
- Beware Of findFirst() And findAny() (33,166)
- Java 9 Migration Guide: The Seven Most Common Challenges (29,898)
- Maven on Java 9 — Six Things You Need To Know (25,666)
- JUnit 5 — Parameterized Tests (25,556)
- Casting In Java 8 (And Beyond?) (17,307)
- Code First Java Module System Tutorial (13,579)
- A JDeps Tutorial — Analyze Your Project’s Dependencies (13,392)
- Five Command Line Options To Hack The Java 9 Module System (13,365)
It’s a little surprising that only one post from 2018 made the top ten (and got first place), but apparently not many people search for newer Java features yet. I predict, they will in good time. 😁 Of course most of the other nine blogs above have an expiration date, but that’s ok. I’m sure, in 2019, I’ll produce content like a champ cough, cough to make up for dwindling interest in old news like Java 9 migration.
Referrers with more than 2k inbound visits:
- Google (268,064; +155%)
- Twitter (12,971; +90%)
- Baeldung (8,471; +55%)
- Reddit (4,579; +28%)
- GitHub (3,569; +158%)
- Bing (2,274; +184%)
- DuckDuckGo (2,100; +272%)
- CodeFX Weekly on Medium (1,750; +757%)
If this were a graph, all the lines would go up and since that’s good, it’s where my analysis ends. 😁
I like writing the newsletter. But that begs the question, why don’t I do it more often? I have no answer for that except the usual.
Unfortunately, my newsletter plugin only stores new subscriptions for the last twelve months, so I can’t look up how many new subscriptions I got in 2018. Sad, but I will guess that it’s about 220 (164 from May to December). There are really only two avenues to subscription:
- read a republication on Medium, enjoy it, follow the link to my blog, and subscribe there
- see the newsletter advertised on my blog and subscribe there
Detailed stats for the subscription page don’t go back far enough to see where visitors came from. Sad, once again. Looks like I’d have to up my data collection game to get usable statistics about subscriptions.
On the other hand, I think I’d rather invest that time into writing good content. Usually, the rest will follow. :)
CodeFX on YouTube
While my account is already about 18 months old, I only published about a dozen videos. I’d like to have uploaded more, but because this is not my main output pipeline that’s ok.
Let’s see how it did, though.
I'm Nicolai, a thirty year old boy, who has found his passion in software development. I'm a coder, blogger, author…
I garnered 943 new subscribers (total: 1466), compared to 523 in the three months of 2017 after I created my account. But that was practically cheating because I put together the community video about Java 9, which got me 300 subscribers in the first few days because so many well-known people shared it.
Given how few videos I created, I’m very happy with how the channel is growing.
Next are video stats. I decided to focus on watch time instead of views because it better reflects engagement. In total, people watched 93.5k minutes. Here are the top three videos:
- First contact with ‘var’ in Java 10 (58.4k min)
- Java 11: A New Dawn — Releases, Oracle JDK vs OpenJDK, and LTS (13.5k min)
- First Contact with Switch Expressions in Java 12 (6k min)
Just for comparison, there were 20.7k views (i.e. clicks on videos) in total, which is 4.6% of the number of reads (i.e. clicks on articles) the blog gets. Given that I had 10 videos vs about 130 posts (at the time) and that my blog ranks much better with Google, that makes sense.
2018 in numbers
To more easily compare numbers across years, I want to collect the most important ones in one place. One might call them key performance indicators (ugh!).
- posts published: 12 (+7 updated)
- unique page views: 447,217; +110%
- from Google: 268,064; +155%
- from Twitter: 12,971; +90%
- issues: 17
- new / total subscribers: 164 confirmed + 60 guessed / 616
- videos uploaded: 7 (6 from Sep 20th to Oct 24th)
- minutes watched: 93.5k
- new / total subscribers: 943 / 1466
- 25 talks
- 15 training days
In the beginning I wrote:
I’m doing this more for me than for anybody else because putting my thoughts in writing sorts them out
How fitting! When I started writing this newsletter, I felt like I missed a lot of marks and would end up depressed seeing how many things I planned, but didn’t follow through on. That may actually be another reason why you only get this in April. 😉
But now that I sat down and went through the goals one by one, it turns out that it’s not actually that bad. The numbers are good, too, so I can be content with 2018.
That said, it suffers from the same disease as the years prior: a lack of follow-through. It seems I have lots of ideas, but a hard time implementing them in a short time frame, and an even harder time to abandon old ones. Taken together that means that I’m doing way more things than I can and finish way less than I want. I really have to work on that in 2019!
I’ll let you know about that next week. Or the one after. Or July. You know the drill.