CodeFX Occasionally #75 — 31st of December 2019
today’s the last day of 2019 and I hope you all had a good year! Mine was… weird. I mean, 2019 — what kind of off-beat number is that even?! Now, 2020 looks much better! But I don’t want to get ahead of myself. In 2019, some big things went well, but a lot of smaller things didn’t. I’ll examine both in this newsletter, which, as is custom, is part one of a twofer about 2019 and 2020. Expect part two next weekend.
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
- Goodbye 2018 and Hello 2019
As usual, I’ll first review my plans for the ending year before looking at my various channels and a best of this year’s content.
I send this newsletter out some Fridays. Or other days. Sometimes not for weeks. But as an actual email. So, subscribe!
Plans for 2019
After a few years of creating content purely as a hobby, I realized in 2018 that that’s not sustainable and I needed to create a larger overlap of these activities with earning my livelihood. I struggled with thoughts of monetization and the strategies required to make that work until the end of that year brought another realization: Thanks to my various online activities I was gaining insights and visibility that allowed me to earn money elsewhere, e.g. as a trainer. That was good news because it allowed me to keep pursuing my passion of putting out content while justifying it as an investement into my skills and as marketing.
So I didn’t need to change much after all! Accordingly, my headline for 2019 was to keep doing all the things, but connect them better to each other and to my offer as a consultant and trainer. Without spoiling the rest of the newsletter, I can already say that producing content didn’t go so well because a few big ticket items, private and public ones, took a lot of time. We’ll look at all of that next.
As to better connecting these things, this became part of the bigger plan to kill CodeFX. I did a few important steps in that direction and they will come to fruition in 2020, so I’ll discuss it in detail in the next issue.
My 2019 was dominated by a few big endeavors that ate up much of my attention and energy. I want to briefly discuss them before coming to my blog and other channels.
Together with my daughter I spent the first two and a half months of the year in Vietnam. Not as a holiday, but as an experiment in living an everyday life in another country. I mostly worked remotely but also gave a few days of training in HCMC while the little one went to a German kindergarten. My wife (boy, I hate these possessive pronouns!) can’t work remotely, but she came to visit us for three weeks to take her holiday. The whole thing was amazing and I’m very grateful that we got to do it!
The Java Module System
The Java Module System finally got published! 🙌 After Manning and I disagreed on the final editing process, Jeanne Boyarsky jumped in and did the final review in my place. She effectively carried the book over the finishing line, which is pretty amazing. Thanks again Jeane!
The Java Module System
Nicolai's care and attention to detail allow you to take advantage of the distillation of his knowledge-from theory to…
While I’m not exactly ecstatic about how the entire writing-a-book-with-a-publisher thing went, I learned a lot from it and am looking forward to self-publish a book in twenty-twenty…mumblemumble…one? Maybe?
Then there’s my professional love child: Accento. Organizing half a conference (the other half was put together by my parter-in-crime Uta Leonhardt-Hamm) was a thrilling and fulfilling experience. That the event was so well-received gave me a palpable feeling of having built something important and I’m very thankful to all of you who came to the event, encouraged me with kind words, or helped spread the word about it.
In case you missed it:
- I wrote a lengthy report of our retrospective about 2019
- we’ll pute YouTube videos online in January
- the date for 2020 is already settled: it’s gonna be September 29th and 30th
Accento is an amazing combination of high-caliber conference and well-founded, hands-on trainings for experiennced…
Slow death of CodeFX
As mentioned, I’m working on replacing CodeFX with a different thing that has a new name and a part of that is rebuilding my online presence. To nobody’s but my surprise that takes a little while and after having found an agency that created a cooler design than what I cobbled together over the years, I’m now busy implementing it. More on that by Sunday.
And just to mention it, I did not continue working on my online courses. They have to wait until my new site is ready and I’ve produced some new videos and blog posts.
Death by a million cuts
Something else that’s eating my attention and energy are my habits, chief among them my tendency to do too many things at a time (like watching streams/videos while, well, pretty much everything that isn’t writing or coding) and to occasionally spend a night working or gaming. Together with run-of-the-mill stress the latter completely screwed my sleep to the point where I now often can’t fall asleep for hours, wake up an awful lot, and sometimes can’t even get back to sleeping in the middle of the night even though I’m clearly very tired.
As a consequence, I’m often exhausted by the middle of the day without actually having achieved much. This sucks.
Of all the channels, lets have a look at the blog first.
Posts of 2019
- Jakarta EE, javax, And A Week Of Turmoil summarized the community’s reaction to Oracle’s and Jakarta’s package naming conflict
- Immutable Collections In Java — Not Now, Not Ever explains why (I think) Java will never see immutable collections in the type system
- The JPMS Maturity Model defines a model that helps assessing tool support for Java’s module system
The JPMS Maturity Model - blog@CodeFX
I consider Java's module system a big boon for maintainability. That is, if tools, frameworks, and libraries play…
Since I haven’t written much this year, I’m afraid that traffic has dwindled for the first time ever. So afraid, in fact, that I didn’t check in months and months. Let’s do this together — can you hold my hand? So, reliability aside, let’s see some traffic numbers and compare them to 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 490,121 unique page views in 2018 (up almost 10% from 447,217 in 2018, hah! 🥳), pretty evenly distributed across the year with 43k-48.6k in the first quarter, a lull of 32.4k-35.8k during the summer (June, July, August), and 40k-42.9k in the other six months.
Most visited blog posts:
- All You Need To Know For Migrating To Java 11 (115,325)
- JUnit 5 — Parameterized Tests (35,230)
- Five Command Line Options To Hack The Java 9 Module System (22,513)
- First Contact With ‘var’ In Java 10 (20,620)
- Beware Of findFirst() And findAny() (19,452)
- A JDeps Tutorial — Analyze Your Project’s Dependencies (19,513)
- Definitive Guide to Switch Expressions (19,433)
- JUnit 5 Setup in IntelliJ, Eclipse, Maven, and Gradle (19,348)
- Maven on Java 9 — Six Things You Need To Know (16,610)
- Java 9 Migration Guide: The Seven Most Common Challenges (16,796)
- Casting In Java 8 (And Beyond?) (15,713)
- Code First Java Module System Tutorial (13,317)
- Definitive Guide To Java 12 (10,022)
I went all the way to 13 to find the first post that I wrote this year. Sad. Also, nine of the top ten have been in last year’s top ten as well and many of them with more traffic. Indeed, if it weren’t for All You Need To Know For Migrating To Java 11, the overall traffic would have tanked. That was a close call — really looks like I have to get back into the game.
Referrers with more than 2k inbound visits:
- Google (327,454, +22%)
- Twitter (8,683; -33%)
- DuckDuckGo (3,139; +49%)
- GitHub (2,455; -31%)
- Bing (2,269; +/-0%)
- DZone (2,143)
Google went up. That’s good. That’s all I have to say about this.
Including this one, I wrote eight newsletters this year, but that includes three turn-of-the-year editions and a Twitch announcement, which leaves us with four proper newsletters. Better than none, I guess. 😉
The newsletter has 745 subscribers now and 139 of you subscribed this year (vs ~220 new subscriptions in 2018). Welcome! 👋
CodeFX on YouTube
Not too much happened on YouTube this year.
Videos of 2018
I published five videos this year:
- Java 12 Experiments — an unedited live stream where I dug into Java 12
- Caliz I, II, and III — edited version of a live stream where I use Graal to make Java’s scripts faster
- The Java Module System with Sander Mak — an interview with Sander Mak about the module system
None of them did particularly well (5–53h of view time), but I don’t mind that very much. I had fun with the live streams and it was instructive to try and make them work on YouTube.
I’ve got 803 new subscribers this year (for a total of 2269 subscribers and compared to 943 new subs in 2018). For the videos, I look at view times to reflect engagement (vs. just clicks). In total, people watched 735h (down 53% from 1558h in 2018) of my videos — here are the top five:
- Java 11: A New Dawn — Releases, Oracle JDK vs OpenJDK, and LTS (196h)
- First Contact with Switch Expressions in Java 12 (131h)
- First contact with ‘var’ in Java 10 (77h)
- Static Factory Methods — Effective Java, Item 1 (72h)
- Use Builders… Cautiously — Effective Java, Item 2 (54h)
Given that I didn’t publish a lot, I’m happy with the numbers. I particularly like that the Effective Java videos get continuous views because it’s fun recording them and I expect them to age pretty well. And I’m really looking forward to continuing that series in the future because in 2020 I’ll go to a few more conferences again.
CodeFX on Twitch
This one is new! After watching a bunch of gamers stream I itched to do the same with coding. I knew it was going to be a tough challenge to make that work because as a viewer you have to stay much more engaged to a coding stream than to one presenting a game or “just chatting”. Still, I wanted to give it a go and I did.
And boy, is it fun! Even with just one or two people there, but when there’s half a dozen active chatters asking questions and helping each other out, that’s amazing! And, paradoxically, it helps me stay focused because even I don’t check Twitter or mail during a life-stream. 😜
If you want to take a look, I made a schedule for January.
I started streaming in February with a peak in April and May after my Vietnam stay before other things took my time. But I started again this month. In total, I streamed 70h and you watched 225h, which means there were on average slightly more than 3 viewers. The channel has 126 followers (up from 0 😁).
I think those are pretty good numbers. The spectre among new streamers is that they have to stream for zero viewers for days and weeks before somebody comes by. Thanks to people already knowing me from one my other activities I was rarely in that situation.
Code (no FX)
It doesn’t really belong here and it’s not quantifiable, but I still want to mention that after a longer period of absence, I invested some time into JUnit Pioneer again. I worked through some issues, reviewed/merged a bunch of pull requests and released a few versions. I have to admit, I’m a little proud to be the maintainer of an open source project that has actual users.
2019 in numbers
- posts published: 10
- unique page views: 490,121; +10%
- from Google: 327,454, +22%
- from Twitter: 8,683; -33%
- issues: 8
- new / total subscribers: 139 (-37%) / 745
- videos uploaded: 5
- hours watched: 735h (-53%)
- new / total subscribers: 803 (-15%) / 2269
- hours streamed: 70h
- hours watched: 225h
- new / total followers: 126 / 126
- 18 talks
- 14 training days
- active work on JUnit Pioneer
And that’s it for 2019! Not the best-performing year, but I am pretty content with how it went. Actually, more content now that I spend some time thinking about what I did than the rest of the year when I only thought about the things I didn’t do. Same thing happened last year:
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.
Maybe there’s a way to get a better feeling for how I’m doing during the year. Should improve my mood and keep me productive.
As I said earlier, I really hope your year went good as well and that you’re looking forward to 2020. I wish you a great night and a happy new year, everybody! ✨