Guard rails

March 18th, 2019  |  General · Technology

I’ve been fascinated by this story ever since John Carreyrou started untangling its web of lies a few years ago. His book “Bad Blood” came out last year. ABC’s multi-part “The Dropout” podcast was released earlier this year. A new documentary airs on HBO tonight. And at some point in 2020 there’s a movie with Jennifer Lawrence playing Elizabeth Holmes.

You can see it as a story about a misunderstood genius who, against all odds that the heavily regulated environment threw at her, tried to push for a tremendous innovation in the field of blood testing. You can also see it as a story about a misguided idealist who was willing to lie through her teeth as her carefully crafted house of cards started collapsing with absolutely nothing she could show the world – or even her investors – that could back up her crazy dream.

We need the crazy innovators who are not willing to play by the rules of old industries. But we also need some educated adults in the room that should provide guidance on why those, perhaps outdated rules, are there to begin with.

Radiance 2.0.1

March 11th, 2019  |  Desktop · Flamingo · Substance · Swing · Trident

It gives me great pleasure to announce the second major release of Radiance. It was all ready to go as 2.0.0, but what’s a release really if a blocker bug doesn’t make it in? So instead, you get to get 2.0.1 for now – pending any other blockers that would require a couple more minor re-spins. Anyway, let’s get to what’s new. First, I’m going to use emojis to mark different parts of it like this:

💔 marks an incompatible API / binary change
😻 marks new features
🤷‍♀️ marks bug fixes and general improvements


  • 💔 Java 9 is the new minimum requirement for build time and runtime of all Radiance modules


  • 💔 Removed Spoonbill (SVNKit-powered implementation of Flamingo’s breadcrumb bar
  • 😻 Added Meteor – Kotlin extensions for core Swing APIs
  • 😻 Added Ember – Kotlin extensions for SubstanceCortex APIs
  • 🤷‍♀️ Renamed Kormorant to Plasma
  • 🤷‍♀️ All core Kotlin modules (Ember, Meteor, Plasma) moved under the top-level kotlin-ext folder
  • 🤷‍♀️ Jitterbug (visual tool for editing Substance color schemes) renamed to Apollo
  • 😻 Added Ion – sample walkthroughs for replacing SwingWorker with Kotlin coroutines


  • 💔 An almost complete rewrite of NeonIcon APIs
  • 💔 Most Flamingo and Substance APIs moved off of ResizableIcon and to ResizableIcon.Factory
  • 💔 Moved some icon colorization APIs from Substance to Neon
  • 💔 Removed usage of UITable from FontPolicy API


  • 💔 Removed default public no-argument constructor from bundled templates for Java and Kotlin targets


  • 💔 Moved to builder-based construction of timelines


  • 😻 New Graphite Electric skin
  • 😻 New APIs for working with complex renderers, including built-in animations
  • 🤷‍♀️ Fix for incorrect offsets of rotated texts
  • 🤷‍♀️ Fix for inconsistent font metrics between preferred size and rendering passes
  • 🤷‍♀️ Fix for incorrect vertical position of icons in JOptionPane
  • 🤷‍♀️ Fix for crash in showing JColorChooser dialog
  • 💔 Moved all three Office 2007 skins to the extras pack


  • 💔 Moved all lower-level components (command button, command button strip. command popup menu, command button panel) to the new world based on content models, presentation models and projections
  • 😻 Added support for placing any ribbon content (including components, application menu links and galleries) in the taskbar
  • 😻 Added support for taskbar overflow (including built-in horizontal scrolling)
  • 💔 Keytips for taskbar content are controlled by keytip policy
  • 😻 Added support for separate keytips on action and secondary / popup areas of command buttons
  • 😻 Added support for global contextual menu on the ribbon
  • 🤷‍♀️ Added complete documentation

The first Radiance release focused on bringing all the different Swing open-source projects that I’ve been working on since 2005 under one roof. This release (code-named Beryl) is about making them work much better together. And it’s also about making it just a bit easier to use Flamingo components in general, and the ribbon in particular, in what one might call serious, if not even boring, business applications.

There’s still a long road ahead to continue exploring the never-ending depths of what it takes to write elegant and high-performing desktop applications in Swing. If you’re in the business of writing just such apps, I’d love for you to take this second Radiance release for a spin. Click here to get the instructions on how to add Radiance to your Gradle / Maven / Ivy / Leiningen / Bazel builds. And don’t forget that all of the modules require Java 9 to build and run.

Middle ground

March 9th, 2019  |  Politics

Photo by Kimon Maritz on Unsplash

Jeff Jarvis’s BuzzMachine is one of my favorite sites to follow. It offers deep, thoughtful, approachable analysis of the current state of media and how it might (or should) evolve going forward.

Jeff’s latest post from last Sunday linked to his earlier Medium post on what journalism is:

Convening communities into civil, informed, and productive conversation, reducing polarization and building trust through helping citizens find common ground in facts and understanding.

Much scorn and derision has been heaped on Newt Gingrich a few years ago when he was talking about “What I say is equally true” line (seen in this clip from John Oliver’s show, with generous background laughter track from the audience).

It’s easy to dismiss that entire interview as somebody who is spinning the tale that his “side” wants to hear. A tale not supported by any of the facts, any of the numbers, anything of what is actually happening across the country. Looking back at it through the prism of “alternative facts” of the last 2-3 years, such condescending dismissal can be seen as an instinctive, gut-based, knee-jerk reaction. Reaction that is built on the same quicksand “foundation” as the narrative Newt Gingrich was trying to defend.

You can’t find middle ground when one of the sides argues with facts, and another argues with feelings. You can’t throw numbers and charts out there, and expect the other side to change the way they feel. That’s not how humans work, unfortunately. Maybe you can try to convince that other side that numbers are more important than feelings. Maybe you can try and dig deeper into understanding where these feelings come from. But that’s not quite what the new left seems to be doing these days.

The new left seems to be taking a page or two straight out of the new right’s book. Forget the facts. Forget the numbers. Go for that punch to the gut. Speak to the instinct. Speak to that primitive, lizard brain that lurks just under the surface, ready to spring into that sweet “us vs them” mode.

As much as I want to live in the world where political and social issues can be discussed in a “civil, informed and productive conversation”, the world that Jeff Jarvis imagines, I don’t see that happening in the next decade or so.

If you were to ask me – today – what is the social, fiscal and political platform of the Democratic Party going into the 2020 elections, I would struggle to answer that question. “We are not Trump” is a political platform of feelings and not facts. If you can even call it a platform.

Technology (r)evolution

March 7th, 2019  |  Technology

There was a time, just eight short years ago, when so-called tech pundits argued, vociferously and tirelessly, that a 3.5″ size is the perfect one for all-screen phones, and anything above that is a wrong industrial design decision that can only come from throwing ideas against a wall and seeing what sticks. Thing is, the billion or so consumers of smartphones have spoken strong, and these days one would be hard-pressed to find a decent flagship that is under 5″.

Here’s another thought. It’s easy to dismiss certain explorations in consumer electronics these days, especially a few years after the fact. One can write articles after articles that disparage every single device out there (apart from those made by your favorite company, of course), and build a reputation of being a fearless, analytical mind. Every once in a while you might also throw in random concept “designs” that show your own ideal hardware assemblage, no matter how infeasible some details might be from the hardware perspective. No worries, it’s the pretty pictures that count.

And then, a few short months later you get to write another article or two after seeing the next wave of flagships that are, apparently, “disappointing” because they didn’t quite match that fairytale concept that was shared in your circles, building up the anticipation to something that was never quite promised by the companies that are right there, in the middle of actually doing things.

Every once in a while you also get to link back to what you wrote some time ago, and pride yourself on being the astute judge of a certain piece of exploration. “You see,” you humbly write to the adoring masses, “I was quite right back then when I said that it would not go anywhere“. No matter that you had no real skin in the game. No matter that you take the anecdote of your own reaction and misinterpret it as an unmistakable sign of your deep acumen. “If only they listened to me back then” you sigh contentedly, leaning in to type yet another click-baity “opinion” piece about the first iteration of a brand new thing that is not quite up to your “visionary” standards. “But what is the job that this accomplishes?” cry you, with a satisfied smirk on your face. You know that if you don’t see one, it surely must be quite pointless to bring that device to market.

Evolution of technology in general, and of devices in particular, is not a straight path. It’s not even a path per se. It’s a patchwork of exploring weird ideas that might not lead you anywhere, back-tracking to revisit what was once infeasible but may now be quite within your reach, and not being afraid to put all kinds of ideas out there for the world of consumers at large to sample, try and, ultimately, vote with their wallets on.