The end is nigh for NetBeans and Java GUIs

I recently updated my Mac to Mojave -- yea, just days before Catalina was released! I did this for a few reasons, but mostly I was unsure if JDK 11 would work on the macOS I was running and I needed JDK 11 for some consulting work. Since updating to Mojave I have found both NetBeans 8.2 (using JDK 8) and Apache NetBeans 11.1 (using OpenJDK 11) to be unstable. They don't freeze, but parts of the interface just stop working after a few hours of use. Mouse clicking fails in some places. Some keyboard commands fail. Typed input fails. The only solution is to restart NetBeans. This is not a good nor long term development environment tactic.

I have been worried for some time that Java on the Mac is at an end. Apple abandoned Java back in 2017. I didn't expect Oracle or anyone else to really put much effort into keeping the Java GUI toolkits current with macOS changes. I don't even expect Java GUIs to remain for much longer, either. JavaFX was dropped in JDK 11. I am sure Swing would have gone too if it were not for some very important customers that are still dependent on it, for example, the US military and especially the Navy.

I have similar observations about NetBeans. NetBeans always seemed like Oracle's unwanted stepchild from the Sun acquisition. Updates were infrequent and with little innovation. Oracle has now passed it on to Apache, but how much attention is it going to get there? There are commercial applications that are built on top of the NetBeans platform and so some support will come from them, but it would be foolish for these commercial applications to remain desktop bound for too much longer. Even Eclipse, the quintessential Java tool for building Java tools, has moved its focus from being a desktop application to being a web application.

It is finally time to move off of NetBeans and to move off of any Java GUI application. I say this with a heavy heart as I have enjoyed and benefited from both over very many years. RIP.

Aside: If you are interested in large scale, pluggable, user interface design then do read everything you can about the NetBeans platform. It is remarkably well designed.

healthyrhode.ri.gov and the worst online and telephone process

That Rhode Islanders have Health Source RI is great. Unfortunately, healthsourceri.com leads you to healthyrhode.ri.gov and this is by far the worst online and telephone process I have ever had to go through to get any kind of service. That the end result is a family's healthcare coverage means the stakes are really high for every customer interacting with the service. It better be rock solid and crystal clear to both the customer and the support representatives. As long as governments continue to select service designers the same way they select pickup trucks or any other interchangeable commodity we will continue to get crap.

Update: Coincidentally there was a useful Twitter thread about this same topic.

Andrew Gilmartin Consulting

Do you have a collection of data in one or more sources that need to be brought together, harmonized, and made accessible with an online search, or reports delivered daily via email or a wiki?

Do you have a back-office workflow that has become complicated due to multiple pathways to completion and referenced data scattered across multiple sources?

Do you want to bring transparency to your handling of customer requests, but need to integrate this with a legacy system?

Do your online business processes generate voluminous detailed logs within which you are sure you can get useful historical perspectives, current awareness, and even some predictions?

Andrew Gilmartin Consulting is a solo software engineering consultancy. There is much one person can do these days. The availability of inexpensive online infrastructure and best-in-class open-source tooling has greatly reduced the cost and effort required to provide a solution. I have decades of experience designing and building software and user interfaces. I have built everything from small gadgets to web-scale applications. It is your need to have it solved that interests me, and less so the kind of problem and my compensation.

So, please do call me or send me an email if you would like to chat about the problem and how I can help.

Andrew Gilmartin
andrew@andrewgilmartin.com
401-441-2062

Adding a Table of TODOs to a Google Document

I have been working on a document that details the changes needed to migrate a system from Java 8 to OpenJDK 11. While writing documents I add notes to myself in-situ, eg "TODO: Buy bread and milk before the next nor'easter." As the document was getting longer and the TODOs were mounting an itch was developing. I wanted a "Table of TODOs."

I use Google Docs and so the itch was scratched using Google's App Script. The script collects the text of all the TODO paragraphs and organizes them under a Table of TODOs heading. The TODO is a normal-styled paragraph that starts with "TODO: ". The Table of TODOs is a heading-styled paragraph that contains only "Table of TODOs". The script organizes the TODO texts in to numbered list items under the heading. The script also adds a Bookmark to each TODO paragraph so that it can be referenced from the numbered list item. To see the example you will need a Google account and to make a copy before you can view the script (under Tools / Script editor). [Update: Placed the script in a gist.]

The script was far more difficult to write than I expected. Google's scripting documentation is sparse and the IDE would randomly stop working. There is noApp Script language documentation (a mixed set of JavaScript versions) and the documentation for the Document API is a bare description of each class. Searching for help was hindered by the generality of any kind of questions I had, eg "google app script api bookmark" was more likely to get results about using URI bookmarks in Chrome. I am sure there are good resources and communities out there, but I have not found them yet. I will keep looking as the Google Suite can be combined into sophisticated applications and I would like to know how to do that.