Jamie Tanna | Software Engineer

  • /now
  • Blog
  • Popular Posts
  • Archives
  • Search
  • Salary History
  • Open Source Projects I Maintain
  • Support Me
  • Hire Me (CV/Resume)

 Article

Create Executables, not Shell Aliases or Functions (2 mins read).

Why I create standalone executable scripts instead of shell aliases or functions.

Sun, 30 Jan 2022 13:37 by Jamie Tanna's profile image Jamie Tanna . #command-line #automation.

 Article

Announcing spring-content-negotiator, a Java Library for Content Negotiation with Spring (1 mins read).

Featured image for sharing metadata for article

Releasing a new library that can support content negotiation in Spring (Boot) applications, i.e. in Filters or ExceptionHandlers.

Sun, 30 Jan 2022 08:35 by Jamie Tanna's profile image Jamie Tanna . #spring #spring-boot #spring-content-negotiator #content-negotiation.

 Article

Getting Started with jMolecules and the (Classical) Onion Architecture, with a Spring Boot project (6 mins read).

Featured image for sharing metadata for article

A guided example of converting a Spring Boot project to the Onion Architecture pattern.

Fri, 28 Jan 2022 13:45 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #architecture #spring-boot #onion-architecture #jmolecules #archunit.

 Article

How to Create and Unit Test Java Bean Validation Annotations (12 mins read).

Featured image for sharing metadata for article

A guided example through what the different type of annotation ElementTypes are, with respect to Bean Validation, and how to write unit tests for them.

Sun, 23 Jan 2022 10:24 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #bean-validation #testing #tdd.

 Article

Codifying Your Technical / Architectural Standards with ArchUnit (7 mins read).

Featured image for sharing metadata for article

How to use ArchUnit to codify your technical standards to reduce code review requirements, and arrive at a more consistent codebase.

Fri, 21 Jan 2022 16:34 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #archunit #code-review.

 Article

Appending to a Querystring using Go (1 mins read).

Featured image for sharing metadata for article

How to append query parameters in a URL in Go.

Thu, 20 Jan 2022 21:40 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #go #web.

 Article

Don't Just String Append to a Querystring (1 mins read).

Why you shouldn't use concatenate strings together to append to a querystring.

Thu, 20 Jan 2022 21:40 by Jamie Tanna's profile image Jamie Tanna . #web.

 Article

Simplifying Spring (Boot) ExceptionHandlers with ResponseStatus Annotations (2 mins read).

Featured image for sharing metadata for article

How to use annotations to drive HTTP response codes from a Spring ExceptionHandler.

Thu, 20 Jan 2022 14:48 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #spring-boot #spring.

 Article

Use SLF4J, not Log4J, as Your Logging Interface (3 mins read).

Featured image for sharing metadata for article

Why we should be using the interface API for logging, rather than the underlying implementation's API.

Thu, 20 Jan 2022 09:33 by Jamie Tanna's profile image Jamie Tanna . #java #logs #slf4j #log4j #logback.

 Article

Using the Facade Pattern to More Easily Test static or Complex Classes (2 mins read).

Featured image for sharing metadata for article

How to use the Facade design pattern to more easily test classes that are more complex than our tests need to understand.

Wed, 19 Jan 2022 13:40 by Jamie Tanna's profile image Jamie Tanna . #java #testing.

 Article

Mocking void methods with Mockito (1 mins read).

Featured image for sharing metadata for article

How to Mock a void method with Mockito, for instance to throw an exception.

Tue, 18 Jan 2022 15:28 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #mockito.

 Article

Thoughts on Social Media Anonymity (4 mins read).

My thoughts on the protection of social media anonymity.

Tue, 18 Jan 2022 13:17 by Jamie Tanna's profile image Jamie Tanna . #social-media.

 Article

Content Negotiation with Servlet Filter in Spring (Boot) (3 mins read).

Featured image for sharing metadata for article

How to perform content-negotiation in a Servlet Filter, to serve the correct representation of error to a consumer, based on the Accept header.

Tue, 18 Jan 2022 12:01 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #spring-boot #spring #content-negotiation.

 Article

Content Negotiation with ControllerAdvice and ExceptionHandlers in Spring (Boot) (5 mins read).

Featured image for sharing metadata for article

How to perform content-negotiation in a Spring ExceptionHandler, to serve the correct representation of error to a consumer, based on the Accept header.

Tue, 18 Jan 2022 09:03 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #spring-boot #spring #content-negotiation.

 Article

Error Handling in (Spring) Servlet Filters (2 mins read).

Featured image for sharing metadata for article

How to return HTTP errors when a Java Servlet fails with Spring (Boot).

Mon, 17 Jan 2022 17:14 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #spring-boot #spring.

 Article

'Knowing Me, Knowing You': Wiggly ears, custom pizzas and a burst appendix (5 mins read).

A copy of answers to the DSA's 'Knowing Me, Knowing You'.

Fri, 14 Jan 2022 14:34 by Jamie Tanna's profile image Jamie Tanna . #personal #cddo.

 Article

Announcing uuid, a Java Library for UUID Validation (1 mins read).

Featured image for sharing metadata for article

Releasing a new library that can be used to validate UUIDs in Java.

Fri, 14 Jan 2022 11:54 by Jamie Tanna's profile image Jamie Tanna . #java #uuid #jsr380 #bean-validation.

 Article

Validating UUIDs with Regular Expressions in Java (1 mins read).

Featured image for sharing metadata for article

How to validate UUIDs and UUIDv4s in Java with a regex.

Fri, 14 Jan 2022 11:54 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #uuid #regex.

 Article

Auditing with Spring Boot Actuator (9 mins read).

Featured image for sharing metadata for article

How to use Spring Boot Actuator for your audit and business event logging needs.

Thu, 13 Jan 2022 13:49 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #spring-boot #spring-security #logs.

 Article

Returning a Value, or a Default, From a Java Optional (1 mins read).

Featured image for sharing metadata for article

How to replace imperative code with a functional style, when returning a default value for a Java Optional.

Thu, 13 Jan 2022 09:53 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java.

 Article

Building an Automagically Updating Personal README for GitLab and GitHub (2 mins read).

Announcing the publishing of readme.jvt.me as well as automagically updating READMEs in my GitLab and GitHub profiles.

Wed, 12 Jan 2022 16:21 by Jamie Tanna's profile image Jamie Tanna . #go #github #gitlab #readme.jvt.me #microformats2.

 Article

Adding both an ObjectMapper and a YAMLMapper to Spring Boot (2 mins read).

Featured image for sharing metadata for article

How to have an ObjectMapper and a YAMLMapper coexisting in a Spring Boot project's bean dependencies.

Mon, 10 Jan 2022 17:35 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #jackson #spring-boot.

 Article

Testing Data Serialisation/Deserialization in Java (with Gson) (3 mins read).

Featured image for sharing metadata for article

How to validate your JSON types correctly serialise/deserialise when using the Gson library.

Fri, 07 Jan 2022 09:21 by Jamie Tanna's profile image Jamie Tanna . #java #testing #gson #blogumentation.

 Article

Improving Life-Work Balance on GitHub using per-Organisation Notification Settings (2 mins read).

Featured image for sharing metadata for article

How to set up per-organisation notification settings so your personal email doesn't get work-related notifications.

Thu, 06 Jan 2022 16:32 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #github #life-work-balance.

 Article

Publishing to Maven Repositories with GitLab CI, with Signed Artefacts (4 mins read).

Featured image for sharing metadata for article

How to publish signed artefacts from a Gradle build to Maven repositories (such as Maven Central) when using GitLab CI.

Tue, 04 Jan 2022 13:21 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #gradle #java #gitlab-ci #gpg.

 Article

Suppressing No pinentry warnings with GPG (in Automated Builds) (1 mins read).

How to get avoid No pinentry warnings when running GPG in automated build environments like CI/CD.

Tue, 04 Jan 2022 12:49 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #gpg.

 Article

Gotcha: PicoContainer requires Zero-Argument Constructors (2 mins read).

Featured image for sharing metadata for article

A little gotcha around using PicoContainer (with Cucumber) where it may not be usable unless you have zero-arg constructors.

Thu, 30 Dec 2021 21:01 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #cucumber #picocontainer.

 Article

Using Dagger for Dependency Injection with Cucumber Tests (4 mins read).

Featured image for sharing metadata for article

How and why to add Dagger for your Cucumber tests' dependency injection.

Thu, 30 Dec 2021 21:01 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #cucumber #dagger.

 Article

Publishing a NPM Package to npmjs.com from GitLab CI (1 mins read).

Featured image for sharing metadata for article

How to publish an NPM package to the public NPM registry, using GitLab CI.

Thu, 23 Dec 2021 11:01 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #nodejs #gitlab-ci.

 Article

Announcing a new package: @jamietanna/spectral-test-harness (1 mins read).

Featured image for sharing metadata for article

Announcing a new NPM package for easier testing of Spectral API linting.

Thu, 23 Dec 2021 10:34 by Jamie Tanna's profile image Jamie Tanna . #spectral-test-harness #api #unit-testing #testing #javascript #nodejs.

 Article

Test Driven Development for Your Spectral Rules, using Jest (7 mins read).

Featured image for sharing metadata for article

How to write unit tests for Spectral API linting, in a test-driven development fashion.

Wed, 22 Dec 2021 18:38 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #spectral-test-harness #spectral #api #unit-testing #testing #javascript #nodejs #tdd.

 Article

Autowiring your controllers automagically when using MockMVC and Spring Cloud Contract (2 mins read).

Featured image for sharing metadata for article

How to automagically set up your Spring controllers when using MockMVC with Spring Cloud Contract.

Tue, 21 Dec 2021 12:48 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #spring #spring-boot #spring-cloud-contract.

 Article

Decompiling Java Class Files On the Command-Line (2 mins read).

Featured image for sharing metadata for article

How to use the Fernflower decompiler on the command-line to decompile compiled Java classes.

Mon, 20 Dec 2021 20:49 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java.

 Article

Validating a Spring (Boot) Response Matches JSON Schema with MockMVC (3 mins read).

Featured image for sharing metadata for article

How to perform JSON Schema validation for a Spring (Boot) service's response when testing using MockMVC.

Mon, 20 Dec 2021 14:43 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #spring #spring-boot #java #json-schema.

 Article

Retrieving All Dependencies Required by a JAR at Runtime (3 mins read).

Featured image for sharing metadata for article

How to handily retrieve the full runtime classpath required for a JAR file, using Gradle.

Thu, 16 Dec 2021 15:14 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #gradle #java.

 Article

Use a (JSON) Schema for the Interface Portion of your RESTful API (3 mins read).

Why you should be using a well-defined (JSON) Schema for the data classes that your API consumers will need to utilise.

Thu, 16 Dec 2021 09:36 by Jamie Tanna's profile image Jamie Tanna . #api #json-schema #rest.

 Article

Getting the Date from a Week Number in Java (1 mins read).

Featured image for sharing metadata for article

How to get the date from a week number and year in Java.

Mon, 13 Dec 2021 20:33 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java.

 Article

Debugging Chef Variables With Logs (3 mins read).

Featured image for sharing metadata for article

How you can use different means of logging to make operations with Chef cookbook a little easier.

Mon, 13 Dec 2021 20:01 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #chef.

 Article

Getting the Battery Status of a Bluetooth Device on Linux (1 mins read).

Featured image for sharing metadata for article

How to use dbus-send to retrieve the percentage of battery left on a Bluetooth device on Linux.

Fri, 10 Dec 2021 21:58 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #command-line #bluetooth #linux.

 Article

Converting a Kitchen YAML to Chef Attributes (2 mins read).

Featured image for sharing metadata for article

How to convert attributes being set for your Chef Test Kitchen integration tests to an attributes.rb format.

Wed, 08 Dec 2021 21:40 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #chef #test-kitchen.

 Article

Using systemd-tmpfiles to manage temporary files and directories (2 mins read).

How I'm using systemd-tmpfiles to manage a temporary working directory and automagically clean it out.

Wed, 08 Dec 2021 18:15 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #systemd #linux.

 Article

Should That (Secret) Thing Be In Your Querystring? (2 mins read).

Why you should be very cautious about putting potentially sensitive values into the querystring of web APIs.

Wed, 08 Dec 2021 16:34 by Jamie Tanna's profile image Jamie Tanna . #api #security.

 Article

Owning my Hashtags (2 mins read).

Why I decided to treat hashtags in my (syndicated) content as tags on my site.

Wed, 08 Dec 2021 09:00 by Jamie Tanna's profile image Jamie Tanna . #indieweb.

 Article

Extracting the Default Private / Secret Keys from OpenAM/Forgerock AM (2 mins read).

How to retrieve the contents of the private or secret keys from an OpenAM/Forgerock AM installation.

Tue, 07 Dec 2021 17:48 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #openam.

 Article

Converting an Image to a Base64 data URL with Node.JS (1 mins read).

Featured image for sharing metadata for article

How to convert an image to a data URL using Node.JS on the command-line.

Mon, 06 Dec 2021 18:41 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #nodejs #command-line.

 Article

Appending Values to a Querystring with Ruby (1 mins read).

Featured image for sharing metadata for article

How to append a query parameter to a URL's querystring in Ruby.

Fri, 03 Dec 2021 14:15 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #ruby.

 Article

Making Zoom Notifications/Windows Float on BSPWM (1 mins read).

Featured image for sharing metadata for article

How to get BSPWM to handle Zoom notification windows as floating windows, instead of tiles.

Thu, 02 Dec 2021 18:33 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #bspwm #zoom.

 Article

Automagically Assuming AWS Roles for EC2/ECS (1 mins read).

Featured image for sharing metadata for article

How to set up your AWS infrastructure to automagically assume IAM roles.

Thu, 02 Dec 2021 17:20 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #aws.

 Article

Reducing Risk of Supply Chain Attacks with Reproducible Builds in Gradle (1 mins read).

Featured image for sharing metadata for article

How to enable Gradle's reproducible builds functionality to allow others to verify your released libraries don't contain uncommitted, malicious code.

Thu, 02 Dec 2021 17:05 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #gradle #security.

 Article

Packaging Wiremock Stubs into a Standalone JAR (2 mins read).

Featured image for sharing metadata for article

How to use Gradle to package a standalone JAR for Wiremock, including any stubs needed.

Thu, 02 Dec 2021 11:11 by Jamie Tanna's profile image Jamie Tanna . #blogumentation #java #gradle #wiremock.

You're currently viewing page 8 of 17, of 850 posts.

Go to the previous page

Go to the next page

Other links that may be of interest:

  • /slashes
  • Follow This Blog (i.e. via RSS feed)
  • Talks
  • Blogroll
  • Why is my site www.jvt.me?
  • Archives
  • Post Visualisation
  • Manual of Me
  • Typography
  • My name and pronounciation
  • RSVPs
  • Links
  • Post by Kind

This site is part of an IndieWeb Webring πŸ•ΈπŸ’

  • Previous site
  • Next site

Want to get in touch? Drop me an email at  hi@jamietanna.co.uk. I try to get back to everything, if I don't reply in a couple of weeks, feel free to give me a nudge!

You can also check out a list of all the places /elsewhere you can find me.

© 2025 Jamie Tanna. Post content and code snippets licensing is detailed on respective pages, otherwise default to Creative Commons Attribution Non Commercial Share Alike 4.0 International and Apache License 2.0.
Site design released under the MIT License.
Proudly hosted on AWS using S3 + CloudFront, deployed by GitLab CI, and generated by 4a2feb8ddf on Sat, 18 Apr 2020 14:40:29 +0100..