Microsoft Build event report

This is my event report from Microsoft Build last week. More pictures of the event is here. The last time I’ve been to a flagship Microsoft event is more than 10 years ago, where we showed Sun hardware that was certified for Windows Server and I was handing out Sun T-shirts. Before I joined Sun in…

Dockercon 2019

I was at the Dockercon last week. TL;DR is that +1 for the event team, their OSS strategy, and ARM, but -1 for the CTO’s stage performance, and their product value. Docker is clearly focused on developer experience (DX) that hides rapidly evolving “implementation details” (think Kubernetes, Helm, etc.) As the OSS strategy, that made…

On technology leadership

What does it mean to be a technology leader? This has been and still is a perpetual question for me. In this post, I’d like to reflect on what I learned about technology leadership in my experience as the creator of Jenkins and as the CTO of CloudBees. Leading by Code When a software engineer…

My personal journey around diversity

Today, in the software development industry, the issue of gender, racial, and other diversities is widely accepted. But I also think this is still largely understood as “social value,” as opposed to “business value.” As a result, the awareness is not leading to enough actions, because it loses out in the crucial fight over priority….

Groovy folks, time to start agreeing

I wrote about the drama unfolding in the Groovy project a month ago. I left that topic for a while, but I was pleased to find out today that the question is no longer whether they need to move to a foundation, but rather which foundation it should be. There’s an email thread that has…

POTD: ExceptionInInitializerError logger

It’s been a while I’ve done a project of the day, but here it is, the fruit of my yak-shaving today. The problem I was trying to solve today was java.lang.NoClassDefFoundError: Could not initialize class Xyz. When a Java class fails to initialize, the first attempt to do that causes ExceptionInInitializerError, but subsequent attempts to…

Groovy project should have a clear governance structure

I just came back from Tokyo to learn that the Groovy project is looking for a new home. Related posts from the project leaders here, here, and here. Hacker News commentary is here. This news hit close to home for me for several reasons. For one, I like Groovy a lot myself, to the point…

今週末から日本にいきます

今週後半から来週末まで日本に行きます。 メインイベントは1/11のJenkins User Conference 東京です。まだまだ参加できますのでぜひ宜しくお願いします。懇親会もぜひ参加してください。 月曜日にはJUCにドイツはBMW Car ITから来てくれるゲストスピーカーと一緒に東京観光をしようと思っています。Jenkins界隈の人で一緒に遊びに行ける人はぜひご一報ください。 休みが明けた火曜日の夜にはJJUGのJenkins祭りが!日曜日はこれないよーという方はぜひこちらにお越しください。 その週はあちこちの会社を訪問してCloudBeesの日本上陸に奔走します。もしその手の話に興味がある方がおられればぜひ個人宛にメールしていただければと思います。 1/17, 1/18の土日はオフなので、久々の日本をエンジョイしたいと思っています。日帰りか一泊でスキーにでも行くか。誰か一緒に遊んでもいいという人がいればぜひ声をかけてください。

POTD: random but meaningful name generator

I’m working on the automated blackbox acceptance tests for Jenkins, where I often need to generate random unique names. The code has been using random number generator to generate such names, but as I was debugging test failures, it became painful to remember those random names. For example, a test might create two new jenkins…

POTD: Application configuration via Guice binding + Groovy

Often I write my applications with Guice. I also often want to make those applications configurable externally. For example I might inject username and password for that app to talk to another app, I might configure some timeout value, and so on. I make these configuration values available in Guice, so that I can access…

POTD: cucumber annotation indexer

Cucumber for Java requires that you specify the packages in which your step definitions exist. At runtime, cucumber uses some hack to try to list all the classes in this package (it’s a hack because class loaders never really support the listing operation), loads them one by one, and finds those that have step definition…