Inexactly Comparing MediaTypes with Spring (1 mins read).

How to compare Spring's MediaType by ignoring charset or parameters.
Back to /posts/.
Inexactly Comparing MediaTypes with Spring (1 mins read).

How to compare Spring's MediaType by ignoring charset or parameters.
Converting X.509 and PKCS#8 .pem file to a JWKS (in Ruby) (2 mins read).

Converting X.509 and PKCS#8 files to JWKS format, using the ruby-jose library.
Generating a JSON Web Key (JWK) With Ruby (1 mins read).

How to create a new JWK with Ruby.
Creating a Personal IndieAuth Server (6 mins read).

Announcing the release of my personal IndieAuth server, and what I've spent my time on.
Setting up Passwordless Authentication using the Okta Factors API (3 mins read).

How to use Okta's Factors API to use push notifications to authenticate yourself.
How to List Gradle's Buildscript / Plugin Dependencies (1 mins read).

How to list the dependencies that are used by Gradle's plugins as part of its buildscript.
Filtering Tasks and their Subtasks in JIRA (1 mins read).

How to filter issues, and their subtasks, with JIRA Query Language.
Globally Logging all Spring (Boot) Exceptions (3 mins read).

How to log whenever an exception triggers on an exception handler with Spring.
Using Git Diff Without a Repo (1 mins read).

How to use git diff when you're not in a Git repo.
Changing the Storage of Cites on my Site (2 mins read).
Changing how I store and render context for other posts.
Providing Hints for Autoconfiguring Micropub Clients (3 mins read).

Enhancing my Micropub Server and autoconfiguring Micropub client with the support for hints.
Creating an Auto-configuring Micropub Client (2 mins read).

Announcing support for my Micropub Client configuring itself based on support in my server.
unknown revision or path not in the working tree after Jenkins Git Plugin Update (1 mins read).

How to fix git rev-parse suddenly not working after a Jenkins Git plugin update.
Publishing + Consuming Artefacts in the Local Maven Repository with Gradle (1 mins read).

How to use Gradle to publish and consume artefacts build on your local machine.
Women in Tech October: How to Manage Your New Manager (4 mins read).

A writeup of the Women in Tech October meetup in October, where Ruth Lee spoke about How to Manage Your New Manager.
Unit Testing Auth0 Rules (8 mins read).

How to write unit tests for your Auth0 Rules, without running it on an Auth0 tenant.
Resolving Gradle Error Unexpected Parent Dependency in IntelliJ (1 mins read).

How to resolve the error Unexpected Parent Dependency when building Gradle projects in IntelliJ.
Debugging Git Errors Using Environment Variables (1 mins read).

How to use environment variables such as GIT_TRACE to debug what's going wrong / what's happening under the hood with git.
Celebrating Four Years at Capital One (3 mins read).

Reflecting on my time at Capital One so far.
Hacktoberfest Comes to Homebrew Website Club Nottingham (2 mins read).

Announcing Hacktoberfest-themed events at Homebrew Website Club Nottingham in late September and October.
Creating Signed JOSE Objects with Ruby (1 mins read).

How to use ruby-jose to create a signed JSON Object Signing and Encryption (JOSE) object on the command-line.
Why I Actively Discourage Online Tooling like jwt.io and Online JSON Validators (5 mins read).

Why you should be opting for local tooling when working with sensitive data, even Non-Production ones.
Investigating Solutions for Private/Friends-Only Posts on a Static Website (6 mins read).
Discussing the options available for posts that require authentication while using a static site, using my own personal requirements.
Running Multiple JDK Versions with the Maven Toolchains Plugin (1 mins read).

How to use the maven-toolchains-plugin to configure multiple JDKs on your machine.
Sorting a Hash Recursively with Ruby (1 mins read).

How to sort a Hash in Ruby recursively, when nested Array exist.
Comparing Pretty-Printed JSON files on the Command-Line (4 mins read).
How to compare two JSON documents by pretty-printing them.
Generate Plain Old Java Objects (POJOs) from XML Schema Definitions with Maven (1 mins read).

How to generate POJOs really quickly and easily, with no manual work, using the Mojohaus jaxb2-maven-plugin.
My First Experience With Setting a Squad Healthcheck (8 mins read).

Documenting a squad healthcheck I ran last year, and the good learnings that came out of it.
JWKS-iCal Release v1.2.0: Determine the jwks_uri from Configuration (1 mins read).
Updating jwks-ical to add support for discovering jwks_uri endpoints automagically.
Globally Disable TLS Checks with Java for HttpsURLConnection (1 mins read).

How to disable TLS checks when using HttpsURLConnections in Java.
JWKS-iCal Release v1.1.0: Adding Calendar Reminder (1 mins read).
Updating jwks-ical to add support for calendar reminders before the certificate's expiry.
Connecting to the Docker Host from a Child Container (2 mins read).

How to access ports from the host machine when running in a child container.
How to Manually Trigger JSR380 Bean Validation on a Class (2 mins read).

How to perform validation on a class using JSR380, when not using a framework like Spring Boot.
Configure Gradle to Configure Tasks Globally with an initscript (1 mins read).

How to use Gradle's initialization scripts to globally configure tasks across all of your projects.
Configure Gradle to Allow Listing All Subproject Dependencies (1 mins read).

How to set Gradle configuration globally to add a task to list all your dependencies.
Capital One Promotion Celebrations (2 mins read).

Reflecting on the fun of today's promotion announcements session.
New Job Title, Who Dis? (1 mins read).

Moving into the world of being a Tech Lead.
Spring Boot: 'junit-vintage' failed to discover tests When Using Only JUnit5 Tests (2 mins read).

How to avoid the error 'junit-vintage' failed to discover tests when using Spring Boot.
Creating My Own Personal Micropub Client (3 mins read).

Announcing my own personal Micropub client to publish content that is very specific to my workflows.
Generating Random Bytes On the Command Line with OpenSSL (1 mins read).
How to generate random bytes as binary, base64 or hex, using openssl on the command-line.
Using @Mock as a Method Parameter with Mockito (2 mins read).

Using @Mock on method parameters to reduce manual mock setups with Mockito.
Converting a Byte Array to a String in Ruby (1 mins read).

How to convert an array of bytes to a String with Ruby.
Disabling the logging of Spring Security's Default Security Password (2 mins read).

How to disable Spring Boot logging the generated security password.
Changing my Static Site Search Setup (1 mins read).
Making changes to fix my search setup, and reduce download overhead for visitors.
Generating the Client Assertion JWT for private_key_jwt Authentication with Ruby (1 mins read).

A helper script to generate the client assertion required to authenticate to an Authorization Server that supports private_key_jwt, on the command-line with Ruby.
Verifying Signed JWTs (JWS) with Ruby (2 mins read).

Using the ruby-jwt library to verify a signed JSON Web Token (JWS) on the command-line.
Creating Signed JWTs (JWS) with Ruby (1 mins read).

Using the json-jwt and ruby-jwt libraries to sign a JSON Web Token on the command-line.
Issues with Ordering When Using Vault CLI's -no-print Argument (1 mins read).

A possible solution for no-print not taking effect with the vault CLI when using AWS EC2 auth.
Keeping Track of Certificate Expiry with a JWKS to iCalendar Converter (4 mins read).
Creating an iCalendar feed for certificate expiry details, given a URI for a JSON Web Key Set.
New CSS, Who Dis? (2 mins read).
Announcing my new site design, based on Hack.css.
Review: mycookiedough Delivery (2 mins read).

Reviewing our first mycookiedough delivery, and the corresponding sugar rush that came with it.
GitLab CI Shell Executor Failing Builds With No Such Directory (1 mins read).

How to work around No Such Directory errors with GitLab CI's shell executor.
GitLab CI Shell Executor failing builds with ERROR: Job failed: exit status 1 (1 mins read).

How to work around ERROR: Job failed: exit status 1 errors with GitLab CI's shell executor.
Deploying a Branch to Netlify on the Command-Line (1 mins read).

How to use Netlify's Node CLI to deploy a given branch to Netlify.
Generating JWK Thumbprints with Ruby (1 mins read).

How to generate JWK thumbprints with Ruby.
Generating JWK Thumbprints with Node.JS (1 mins read).

How to generate JWK thumbprints with Node.JS.
How are Open Banking Key Ids (kid) Generated? (1 mins read).
Sharing insight into how Open Banking has generated their kids for use with JWTs.
How to Run Java on the Command-Line to Attach a Debugger (1 mins read).

How to run java on the command-line, and make it possible to attach a debugger.
Extract a Public Cert from a Java Keystore/Truststore (1 mins read).

How to export the public certificate from a Java keystore.
Evicting Spring Cache on a Schedule (1 mins read).

How to evict Spring Cache's @Cacheable data on a schedule.
No default controller available With bluetoothctl (1 mins read).

One possible solution for the No default controller available error message with bluetoothctl.
Migrating to Netlify's Deployments from GitLab CI (3 mins read).

Moving to avoid flaky deployments, and trying to reduce deployment times.
Reading a Servlet/Spring Request Body Multiple Times (2 mins read).

How to read the request body more than once using Java Servlet Filters.
How to avoid HttpMessageNotReadableException when using ContentCachingRequestWrapper with Java Servlet Filters (1 mins read).

How to avoid receiving Required request body is missing errors when using a ContentCachingRequestWrapper.
Disabling @Valid Annotation in a Spring Integration Test (1 mins read).

How to disable @Valid validation in Spring Integration Tests.
Converting Output from Rest Assured to Curl Requests (3 mins read).

How to convert the log output from Rest Assured to a curl request.
Navigating through the Vim Changelist with Intellij (2 mins read).

How to use g; and g, using IntelliJ's IdeaVim plugin to cycle through changes in a file.
Running Spotless Automagically with Gradle (2 mins read).

How to set Gradle configuration globally to always run spotlessApply in your projects.
Rendering Micropub Client Data on Posts (2 mins read).

Sharing more information about Micropub clients that have created a post, if possible.
Changing the Structure of Homebrew Website Club Nottingham (3 mins read).

Looking to change the format of Homebrew Website Club Nottingham so it works better as a remote event.
Gotcha: AWS SDK Proxy Setup with Test Kitchen (2 mins read).

How to avoid odd proxy issues when using the AWS SDK, when using Test Kitchen.
Determining What Motherboard You're Using, On Linux (1 mins read).
How to determine what motherboard the machine you're using is reporting, on the command-line with Linux.
Creating a 'Firehose' Feed (2 mins read).
Splitting out my content feeds, so it's (hopefully) more applicable and less noisy for consumers.
Extracting x5cs from a JSON Web Key Set (JWKS) to PEM files with Ruby (1 mins read).

How to extract the full chain of certificates from a JWKS' x5c parameter to files.
Autogenerating the Date Header in Postman (1 mins read).

How to generate and send a Date header using Postman.
New Desk/Office Setup (6 mins read).

Sharing the new layout for our office, and my new desk setup with my new Dell UltraSharp.
Converting a Byte Array to String with Buffer in Node.JS (1 mins read).

How to convert an array of bytes to a String using Node.JS's Buffer class.
GitLab Runner Docker TCP Error (2 mins read).

Fixing the cannot connect to the Docker daemon error with GitLab Runner and Docker.
Inheriting the Proxy from the Jenkins Host in Docker (1 mins read).

How to pass proxy variables from your Jenkins host to your Docker containers.
Inheriting the Environment Variables from the Jenkins Host in Docker (2 mins read).

How to pass environment variables from your Jenkins host to your Docker containers.
Being a Bad POSIX Citizen (2 mins read).

Owning up to using GNU coreutils, even on BSDs, because I'm lazy.
Tomcat May Log Cookies Out-of-the-Box (3 mins read).

Warning you about cookies being logged out-of-the-box, and how to resolve it.
Providing Custom Serialization for Map Keys in Jackson (1 mins read).

How to configure Jackson to use a custom method to serialise keys for a Map.
Toggling Your Bluetooth Connection using bluetoothctl on the Command-Line (1 mins read).

How to script bluetoothctl to toggle your connection to a Bluetooth device.
Platform-Aware @-mentioning People on my Blog (2 mins read).
More easily mentioning others on my posts, and improving my interactions with Twitter syndication.
Extract a Private Key from a Java Keystore (1 mins read).

How to export an asymmetric PrivateKeyEntry entry from a Java keystore.
Splitting an X509 PEM-Encoded Certificate Bundle into Multiple Files (1 mins read).
Splitting a certificate bundle into separate files using split or awk.
PHPMiNDS March: Slim 4: PHP's Microframework (2 mins read).

Recapping Rob Allen's talk about Slim 4 at PHPMiNDS.
What's the jvt.me at the end of your tweets? (1 mins read).
Answering why there are links to jvt.me at the end of all my tweets.
Thanks GitLab for the Swag! (2 mins read).

Thanking GitLab for the swag store credit for sharing how much I use GitLab.com.
How to Use curl to Send Requests to Domains Without Editing Your /etc/hosts File (1 mins read).

Using curl's --resolve flag to perform custom lookup for hosts.
Google confirms Microformats are still a recommended metadata format for content (1 mins read).

Noting Google's continued support for Microformats as a metadata format.
Announcing Micropub-Media-Endpoint-Proxy (2 mins read).

Announcing a web-based solution for uploading files to your Micropub media endpoint.
How to unzip/decompress a Java JAR file (1 mins read).

How we can use the unzip command to decompress JAR files.
meetup-mf2.herokuapp.com release 0.3.0: Integration issue fixes + caching (1 mins read).

Announcing the 0.3.0 version of meetup-mf2.
Triggering an AWS Lambda from the Command-Line (1 mins read).

How to invoke an AWS Lambda function from the Command-Line.
Skip Builds On Branch Indexing with Jenkins Multibranch Pipelines (2 mins read).

How to stop Jenkins unnecessarily kicking off builds on Multibranch pipelines when indexing the branches.
Generating HMAC Signatures on the Command Line with OpenSSL (1 mins read).
How to generate HMAC signatures for a given string, using openssl.
Creating Signed JWTs (JWS) with Node.JS (1 mins read).

How to use the jsonwebtoken library to create a Signed JSON Web Token (JWS) with Node.JS.
Announcing Meetup.com Support for Bridgy Publish (2 mins read).

Announcing the ability to RSVP to Meetup.com events from your website, using Bridgy.
Birds of Prey Review (No Spoilers) (3 mins read).

A short, spoiler-free, review of Birds of Prey: And the Fantabulous Emancipation of One Harley Quinn.
Setting up Multiple redirect_uris on the Meetup.com API (2 mins read).

How to allow multiple redirect_uris on your Meetup.com (OAuth2) API consumer.
How to Extract a Twitter Profile URL (But Not Status URL) with a Regex (1 mins read).
A regular expression to match Twitter Profile URLs, but not Status URLs.
Converting a Ruby Hash to a String (1 mins read).

The ways that we can convert a Hash to a String with Ruby.
Generate Plain Old Java Objects (POJOs) from XML Schema Definitions with xjc (4 mins read).

How to generate POJOs really quickly and easily, with no manual work, using the xjc command.
Removing Distractions with the Focus Mode within Android's Digital Wellbeing (4 mins read).
How I'm using Android's Digital Wellbeing functionality to reduce endless scrolling of social media, and reduce my reliance on my phone.
Converting an x5c from a JSON Web Key to a PEM with Ruby (1 mins read).

How to convert a JWK's x5c to a PEM-formatted certificate with Ruby.
Parsing a Unix Epoch With Bash/Ruby on the Command-Line (1 mins read).

How to convert a Unix Epoch to a human-readable date format.
Performing Mutual TLS Authentication with Rest Assured (via Apache HTTP Client) (3 mins read).

How to configure Rest Assured to perform Mutual TLS authentication against an API.
Converting Webmentions to Push Notifications (2 mins read).

Automagically sending push notifications to my mobile phone when I receive a Webmention.
2018 in Review (25 mins read).
Looking back at 2018 as a whole - both the positives and negatives, and looking forward to 2019.
Moving Events for the Homebrew Website Club: Nottingham to the IndieWeb Events site (2 mins read).

Announcing my decision to move Homebrew Website Club: Nottingham events from my own site to events.indieweb.org.
Netlify Billing Request: Extra Bandwidth Allowances (1 mins read).

A copy of an email I've sent to the Netlify team about improving billing for bandwidth allowances.
Women in Tech January - Sensing Change: The Rise of the Smart bins (4 mins read).

Eleanor Tang talks about the work that Eveno is doing to make waste management much smarter.