A JDBC Query Monitor

I recently wrote a Java JDBC wrapper for monitoring calls to a database (JDBC DataSource). My employer has allowed this to be released as open source.

If you are creating or maintaining a Java application and would like to log requests to your database, look for unexpected operations, or gather statistics, then this code might be helpful.

Checking Git Merge Status

One of the software applications I work on uses Git as version-control and has a traditional (if somewhat old-fashioned) branching strategy: a branch per feature/bugfix, an integration branch, a release-testing branch, and release branches. Different users/tools are responsible for merging between these branches so it can sometimes be rather difficult to know whether a local Git branch has been merged to any specific target.

Sybase ASE Stored Procedure sp_jdbc_getprocedurecolumns and Performance

My employer has a large Java-based application which uses Sybase ASE as its data store, and a mysterious stored procedure sp_jdbc_getprocedurecolumns (which we never call directly) is causing performance problems. It took quite a lot of work to track down why; if you’re having similar problems then see the explanation here.

Learning Prometheus

I recently needed to track down some performance problems in a large (Java-based) application. My employer already uses Prometheus for monitoring, so it seemed time for me to get to grips with its concepts and instrument the application with appropriate metrics then create some matching Grafana dashboards.

Learning Prometheus/Grafana turned out to be a little harder than I thought so I have written up what I learned in case it is helpful to someone else.

And yes, it did help to track down the problem(s).

For fun: browser as scratchpad

A colleague recently pointed out that the following command can be pasted into either Firefox or Chrome to get an editable window for keeping notes. The text can even be saved afterwards..

data:text/html,<html contenteditable>

You can adjust the font-size, etc with inline styles, eg:

data:text/html,<html contenteditable style="line-height:1.5;font-size:20px;">

Another colleague pointed out a nice “retro console” variant:

data:text/html,<html contenteditable style="background:black;color:lime;font-family:monospace">

On a similar topic, a browser window can also make a nice JSON pretty-formatter (read-only):

data:application/json,{"yo":1}

Maven Multi-Module Builds with Centralized Version Management

Are you building Java software using a Maven multi-module structure, and using mvn versions:set to update the version-numbers on each release? If so, there is a much better way.

Book Review: Accelerate (Capabilities, Culture and Metrics)

The book “Accelerate: Building and Scaling High Performing Technology Organisations” is best known for its four “DevOps metrics” Lead Time for Change, Deployment Frequency, Mean Time to Restore, and Change Fail Rate. However there is quite a lot of other interesting content in the book too, addressing software development and deployment at mid-to-low management level.

I’ve written up my opinions of the book here (mostly positive), and would be interested in what you think..

OAuth2 and OIDC

I’ve written the occasional OAuth2 client application over the years but never really understood what was going on with client-ids, secrets, grants, scopes, and so forth. However I’m currently involved in a project to migrate a large IT system to using OAuth2 and OpenID Connect, so it is clearly time to learn this stuff properly.

After some long research, I have written an architectural introduction to OAuth2 and OpenID Connect summarizing what I have learned - mainly for myself, but maybe you will find it helpful too. Warning: it is pretty long (17,000 words)!