Archives
Welcome to my archives page, this includes a list of all blog posts I've written on this site.
2024
- 01 Dec Week Notes 24#48
- 29 Nov
Gotcha:
PersistentPostRunE
only runs on successful commands in Cobra - 24 Nov Week Notes 24#47
- 24 Nov Creating a Neovim plugin for my standup updates
- 24 Nov The joy of an asynchronous, always updating standup
- 19 Nov Creating a private mirror of the Renovate docs
- 17 Nov Week Notes 24#46
- 17 Nov Lessons learned adding OpenTelemetry to a (Cobra) command-line Go tool
- 10 Nov Week Notes 24#45
- 08 Nov
Summarising the
skipReason
s for Renovate data exports - 03 Nov Week Notes 24#44
- 31 Oct How to diff two datetimes
- 27 Oct Week Notes 24#43
- 20 Oct Week Notes 24#42
- 16 Oct Why has Firefox 133 lost all my tabs?
- 15 Oct Creating a /slashes page
- 13 Oct Week Notes 24#41
- 13 Oct OggCamp 2024
- 11 Oct How I manage my dotfiles
- 06 Oct Week Notes 24#40
- 02 Oct Don't do Agile, be agile
- 01 Oct Converting a Reveal.js slide deck to PDF
- 01 Oct
Getting symlinks to work with a
git clone
on Mac - 30 Sep
Using a separate Go module for your
tools.go
- 29 Sep Week Notes 24#39
- 22 Sep Week Notes 24#38
- 19 Sep I'm on API Evangelist Conversation
- 16 Sep
Utilising Renovate's
local
platform to test more easily - 16 Sep Don't pretty print your API's JSON response body
- 15 Sep Week Notes 24#37
- 12 Sep Nested teams in GitHub don't give you the control you think they do
- 09 Sep
Forcing
pacman
to perform post-upgrade tasks if it's failed part way through - 08 Sep Week Notes 24#36
- 03 Sep How to use Dependency Management Data to discover which dependencies are participating in Hacktoberfest
- 01 Sep Week Notes 24#35
- 26 Aug You're not mature enough to release your first version as v1
- 25 Aug Week Notes 24#34
- 18 Aug Week Notes 24#33
- 16 Aug GopherCon UK 2024
- 15 Aug Gotcha: SXHKD doesn't like comments (in bindings)
- 15 Aug How to get the next window created set to floating in BSPWM
- 14 Aug Creating a /typography page
- 11 Aug Week Notes 24#32
- 08 Aug I'm on Go Time!
- 05 Aug New CSS, Who Dis? (2024 edition)
- 05 Aug Why isn't Hugo regenerating my SCSS files?
- 04 Aug Week Notes 24#31
- 01 Aug
Why can't I use a comma with
gcloud
? - 31 Jul Using Spotless to auto-format Gradle Verification Metadata
- 30 Jul
Common issues faced with
exec
ing an executable on Linux - 28 Jul Week Notes 24#30
- 28 Jul
You can now parse repo-level Renovate configuration with
renovate-graph
- 27 Jul Dependency Management Data's Open Policy Agent support is now a whole lot more efficient
- 21 Jul Week Notes 24#29
- 18 Jul Migrating Renovate bots, while keeping existing PRs updated
- 16 Jul Manually triggering a Buildkite pipeline for a fork
- 14 Jul Week Notes 24#28
- 14 Jul Dependency Management Data's now on Mastodon!
- 14 Jul Dynamically querying EndOfLife.date data for internal packages with Open Policy Agent and Dependency Management Data
- 12 Jul 89 things I know about Git commits
- 09 Jul Dependency Management Data is now a lot easier to work with when using Software Bill of Materials
- 07 Jul Week Notes 24#27
- 01 Jul One THOUSAND blog posts
- 01 Jul Reader survey: Who reads my blog?
- 30 Jun Week Notes 24#26
- 28 Jun Dependency Management Data can now use sql-studio for database browsing
- 28 Jun Creating a test harness for validating Renovate regex manager rules
- 25 Jun
Modifying the response body of an
httputil.ReverseProxy
response - 23 Jun Week Notes 24#25
- 19 Jun Performing cross-database queries with SQLite
- 16 Jun Week Notes 24#24
- 16 Jun Dependency Management Data's web application can now be deployed as a single static binary
- 13 Jun
Using Go's
database/sql
to query an arbitrary columns of unknown type(s) - 09 Jun Week Notes 24#23
- 07 Jun My workflow for writing SQL(ite) queries (2024 edition)
- 02 Jun Week Notes 24#22
- 30 May
Calculating the GitHub API's
sha
representation of a local file - 26 May Week Notes 24#21
- 19 May Week Notes 24#20
- 15 May
Making it easier to schedule cross-timezones, with the
tz
CLI - 12 May Week Notes 24#19
- 11 May Installing Google Cloud CLI components on Arch Linux
- 10 May I'm on Cup o' Go!
- 09 May Responsible Disclosure: Using GitHub Search (without logging in using SSO) still allows searching
- 09 May oapi-codegen is moving to its own org
- 09 May
Creating a more sustainable model for
oapi-codegen
in the future - 05 May Week Notes 24#18
- 03 May Lessons learned self-hosting Renovate
- 28 Apr Week Notes 24#17
- 27 Apr Automating the syncing of files between repos with GitHub Actions
- 21 Apr Week Notes 24#16
- 14 Apr Week Notes 24#15
- 14 Apr Querying your organisation's Renovate configuration using SQL(ite)
- 12 Apr Why I recommend Renovate over any other dependency update tools
- 07 Apr Week Notes 24#14
- 31 Mar Week Notes 24#13
- 29 Mar
What can we learn about the backdooring of
xz
/liblzma
, using OpenSSF Security Scorecards and dependency-management-data? - 24 Mar Week Notes 24#12
- 24 Mar Week Notes 24#11
- 10 Mar Week Notes 24#10
- 04 Mar
What routes is my
http.ServeMux
listening for? - 04 Mar Why is Go 1.22's enhanced routing not working for me?
- 03 Mar Week Notes 24#09
- 26 Feb Job titles are bullshit
- 25 Feb Week Notes 24#08
- 18 Feb Week Notes 24#07
- 17 Feb You should listen to The Changelog
- 17 Feb I'm on Changelog and Friends!
- 15 Feb Gotcha: Don't try and authenticate to URLs generated by GitHub Actions Artifacts v4
- 11 Feb Week Notes 24#06
- 06 Feb Quantifying your reliance on Open Source software (State of Open Con version)
- 04 Feb Week Notes 24#05
- 02 Feb Celebrating dependency-management-data's first birthday
- 28 Jan Week Notes 24#04
- 27 Jan Introducing insight into your dependencies' health in dependency-management-data
- 24 Jan dependency-management-data now has a logo!
- 22 Jan
Why am I getting
Too many arguments
withvault
? - 21 Jan Week Notes 24#03
- 16 Jan
Using
renovate-to-sbom
with the GitHub Dependency Submission API - 15 Jan Comparing the different Merge Request / Pull Request merge methods in GitLab and GitHub
- 15 Jan How to unpublish/redact/undo/retract a Go release
- 14 Jan Week Notes 24#02
- 09 Jan
How do you represent a JSON field in Go that could be absent,
null
or have a value? - 07 Jan Week Notes 24#01
- 05 Jan
Why is
set -eu
not working? - 04 Jan 2023's Music In Review
- 01 Jan 2023's Site In Review
2023
- 31 Dec Week Notes 23#52
- 31 Dec Week Notes 23#51
- 17 Dec Week Notes 23#50
- 10 Dec Week Notes 23#49
- 07 Dec You can now interact with dependency-management-data using GraphQL
- 03 Dec Week Notes 23#48
- 26 Nov Week Notes 23#47
- 24 Nov You can now use Open Policy Agent with dependency-management-data
- 19 Nov Week Notes 23#46
- 19 Nov Week Notes 23#45
- 15 Nov
Introducing
snyk-export-sbom
to export SPDX and CycloneDX SBOM from Snyk - 05 Nov Week Notes 23#44
- 05 Nov Using dependency-management-data with npm's SPDX and CycloneDX SBOM export functionality
- 03 Nov
Introducing
renovate-to-sbom
to convert Renovate data to Software Bill of Materials (SBOMs) - 31 Oct dependency-management-data now supports OSS Review Toolkit (ORT)
- 29 Oct Week Notes 23#43
- 28 Oct Performing a v2 release of a Go module
- 28 Oct Getting Go modules to work with nested GitLab groups
- 23 Oct
Building resilient, runnable command-line demos with Asciinema and
demo
- 23 Oct Importing a subdirectory from one repo into another
- 23 Oct How we reduced oapi-codegen's dependency overhead by ~84%
- 22 Oct Week Notes 23#42
- 22 Oct Plea to Software Composition Analysis (SCA) providers and Software Bill of Materials (SBOMs) producers: give us more data!
- 15 Oct Week Notes 23#41
- 14 Oct Which version of Go was used to compile this binary?
- 13 Oct
Utilising Renovate's
local
platform to makerenovate-graph
more efficient - 10 Oct Gotcha: Using vCluster on Elastic Kubernetes Service requires a Container Storage Interface driver
- 10 Oct Listing environment variables used to trigger a Buildkite pipeline
- 10 Oct Publishing My On-Call Compensation History
- 08 Oct Week Notes 23#40
- 07 Oct Why should you blog?
- 05 Oct
Solving
/usr/lib/Xorg.wrap: Only console users are allowed to run the X server
errors with tmux over SSH - 05 Oct This talk should also be a blog post
- 04 Oct How blogging has affected me, as a neurodiverse person
- 01 Oct Week Notes 23#39
- 30 Sep Introducing tweetus-deletus 🐦🪄💀 - a tool to automate deleting your tweets, through the browser
- 30 Sep Reusing a browser session with Playwright
- 27 Sep Using dependency-management-data with GitLab's Pipeline-specific CycloneDX SBOM exports
- 24 Sep Week Notes 23#38
- 20 Sep Gotchas with pointing Go modules to a fork, when building an installable module
- 17 Sep Week Notes 23#37
- 14 Sep Building dynamic jobs with BuildKite
- 11 Sep
Setting up a matrix for GitHub Actions with Go's
go.mod
and specific versions - 10 Sep Week Notes 23#36
- 10 Sep Prefer using the GitHub Software Bill of Materials (SBOMs) API over the Dependency Graph GraphQL API
- 10 Sep dependency-management-data now supports Software Bill of Materials (SBOMs) and has better Dependabot support
- 03 Sep Week Notes 23#35
- 02 Sep
Setting up your Maven
settings.xml
to release a Jenkins plugin - 01 Sep Removing ANSI escape codes in Vim
- 01 Sep
Creating global middleware for
net/http
servers in Go - 31 Aug
Why is Go trying to upgrade my
go.mod
to Go 1.21? - 31 Aug What Go versions are my modules and dependencies targeting?
- 30 Aug Creating a Zoho Mail alias using the API
- 30 Aug Setting up Mend Renovate Community Edition for GitLab.com on Fly.io
- 29 Aug Custom Advisories: the unsung hero of dependency-management-data
- 27 Aug Week Notes 23#34
- 25 Aug Turning on Caps Lock when the Caps Lock key is bound to a different key
- 23 Aug Setting up real-time Slack notifications for GitHub
- 22 Aug Managing Buildkite Agent Images with Renovate
- 20 Aug Week Notes 23#33
- 18 Aug Running commands against every module in a Go multi-module project
- 15 Aug
Resolving
Timeout
s when generating entropy when generating a new GPG key - 14 Aug Resolving black screen display with SDDM and NVIDIA GPUs
- 13 Aug Week Notes 23#32
- 10 Aug Analysing GitHub Pull Request review times with SQLite and Go
- 06 Aug Week Notes 23#31
- 30 Jul Week Notes 23#30
- 25 Jul Quantifying your reliance on Open Source software
- 25 Jul Getting started with Dependency Management Data
- 23 Jul Week Notes 23#29
- 17 Jul LeadDev London 2023
- 16 Jul Week Notes 23#28
- 13 Jul Merging a branch in GitHub - the hard way
- 10 Jul Validating Renovate configuration changes before merging
- 09 Jul Week Notes 23#27
- 08 Jul
Introducing
dmd-web
, a web frontend for Dependency Management Data (DMD) - 03 Jul
Sharing state between
net/http
method calls in Go - 02 Jul Week Notes 23#26
- 30 Jun Who do these Google (JSON file) credentials belong to?
- 26 Jun I'm joining Elastic
- 25 Jun Week Notes 23#25
- 19 Jun
Using
go.mod
versions togo install
a binary - 19 Jun
Checking the migration status with
golang-migrate
- 18 Jun Week Notes 23#24
- 11 Jun Week Notes 23#23
- 04 Jun Week Notes 23#22
- 31 May
Introducing
openapi-sorbet
, a command-line tool for generating Sorbet types from OpenAPI - 29 May Learn how to build tools
- 28 May Week Notes 23#21
- 27 May
Getting a
--version
flag for Cobra CLIs in Go - 23 May Performing downtime-inducing AWS RDS changes with no downtime☆
- 21 May The Lazy engineer's guide to running your Go web application to AWS Lambda
- 21 May Week Notes 23#20
- 15 May Which OS and CPU architecture is this binary compiled for?
- 14 May Week Notes 23#19
- 11 May
Creating an HTTP 404 handler for Go
net/http
servers - 07 May Week Notes 23#18
- 02 May Serving the current directory over HTTP with Go
- 30 Apr Week Notes 23#17
- 23 Apr Week Notes 23#16
- 20 Apr Getting the commit author details for a GitHub App account
- 16 Apr Week Notes 23#15
- 09 Apr Week Notes 23#14
- 02 Apr Week Notes 23#13
- 27 Mar
Generating
Equal
methods for Go structs withgoderive
- 26 Mar Week Notes 23#12
- 23 Mar Checking if files are synced between repos with GitHub Actions
- 22 Mar I don't think I want my next promotion (yet)
- 19 Mar Week Notes 23#11
- 15 Mar Working out which Docker namespaces and images you most depend on
- 13 Mar Querying JSON with SQLite
- 12 Mar Week Notes 23#10
- 12 Mar Dynamically retrieving the version of a Node.JS/Typescript dependency, at runtime
- 11 Mar
Automating boilerplate/scaffolding code with custom code generation in Go, with
jen
- 11 Mar Debugging HTTP Client requests with Go
- 08 Mar Who do these Twilio credentials belong to?
- 05 Mar Week Notes 23#09
- 27 Feb
Getting a
--version
flag for Cobra CLIs in Go, built with GoReleaser - 26 Feb Week Notes 23#08
- 24 Feb Cross-compiling a CGO project using Goreleaser
- 20 Feb
Introducing
dmd
, a command-line tool for Dependency Management Data (DMD) - 19 Feb Week Notes 23#07
- 12 Feb Week Notes 23#06
- 11 Feb Getting a GitHub App installation token on the command-line
- 11 Feb Passing a private key as an environment variable
- 10 Feb 2022's Site In Review
- 10 Feb 2021's Site In Review
- 10 Feb 2020's Site In Review
- 10 Feb 2019's Site In Review
- 10 Feb 2018's Site In Review
- 10 Feb 2017's Site In Review
- 10 Feb 2016's Site In Review
- 05 Feb Week Notes 23#05
- 03 Feb Listing the status of your branch protection in GitHub
- 01 Feb Getting comfortable with the lack of privacy with my Week Notes
- 01 Feb
Determining missing translation keys from gettext
.po
files - 30 Jan Setting up default Renovate configuration while allowing overriding of that configuration
- 29 Jan Week Notes 23#04
- 23 Jan Does this Slack Webhook still work?
- 23 Jan Who does this NPM token belong to?
- 22 Jan Week Notes 23#03
- 21 Jan Performing bulk changes across Git(Hub) Repos with Turbolift and Microplane
- 15 Jan Week Notes 23#02
- 13 Jan Automagically determining which AWS Lambda runtimes are deprecated or end-of-life
- 09 Jan Who do these AWS credentials belong to?
- 09 Jan What I learned rebuilding our CI/CD pipelines for Chef Cookbooks
- 08 Jan Week Notes 23#01
- 06 Jan Listing secrets stored in CircleCI
- 05 Jan 2022's Music In Review
- 03 Jan Enabling/Disabling GitHub Issues via the GitHub API
- 01 Jan Week Notes 22#52
2022
- 25 Dec Week Notes 22#51
- 20 Dec
Using Renovate to manage updates to
go install
commands - 18 Dec Week Notes 22#50
- 15 Dec
Using Renovate to manage updates to
golangci-lint
versions - 12 Dec Performing arbitrary executions with Renovate
- 11 Dec Week Notes 22#49
- 09 Dec Getting diagnosed with ADHD
- 04 Dec Prefilling OAuth2 scopes for GitLab Personal Access Tokens
- 04 Dec Prefilling OAuth2 scopes for GitHub Personal Access Tokens
- 04 Dec Week Notes 22#48
- 27 Nov Week Notes 22#47
- 20 Nov Week Notes 22#46
- 13 Nov Week Notes 22#45
- 10 Nov
Performing
AND
conditionals in HAProxy - 09 Nov Creating a JSON Patch endpoint in Go
- 06 Nov Week Notes 22#44
- 01 Nov Extracting the dependency tree from Renovate for given repositories
- 30 Oct Week Notes 22#43
- 26 Oct Listing all GitHub repositories in a GitHub Organisation
- 23 Oct Week Notes 22#42
- 22 Oct 'Should I be able to learn how to be more productive at work?'
- 22 Oct Does the tech industry thrive on free work?
- 20 Oct Retrofitting OpenAPI documentation to your Rails codebase
- 16 Oct Week Notes 22#41
- 14 Oct Phew, that's a lot of traffic 😅 What happens when a blog post goes viral?
- 09 Oct Week Notes 22#40
- 04 Oct I've got ADHD
- 02 Oct Week Notes 22#39
- 29 Sep Analysing our dependency trees to determine where we should send Open Source contributions for Hacktoberfest
- 25 Sep Week Notes 22#38
- 21 Sep Lessons learned since posting my salary history publicly
- 18 Sep Week Notes 22#37
- 11 Sep Week Notes 22#36
- 04 Sep Week Notes 22#35
- 30 Aug
Gotcha: testable examples in Go need an
output
comment - 28 Aug Week Notes 22#34
- 21 Aug Week Notes 22#33
- 18 Aug
Introducing the
tidied
tool, to more easily check whethergo mod tidy
has been run - 14 Aug Week Notes 22#32
- 12 Aug Converting HTTP requests to Wiremock stubs, with Go
- 12 Aug
The first script I write in a new job:
gg
- 12 Aug Learning a new language, or how I gained familiarity with Go
- 07 Aug Week Notes 22#31
- 07 Aug Releasing a set of test cases for Content Negotiation
- 05 Aug Releasing a Go library for content-type negotiation
- 31 Jul Week Notes 22#30
- 29 Jul Using generics to get a pointer to any type, in Go
- 24 Jul Week Notes 22#29
- 22 Jul Optional configuration for configuring Go code
- 17 Jul Week Notes 22#28
- 12 Jul Building a Go RESTful API with design-first OpenAPI contracts
- 10 Jul Week Notes 22#27
- 07 Jul Pointing to a fork of a Go module
- 03 Jul Week Notes 22#26
- 01 Jul Running Go tests in Parallel
- 01 Jul Ignoring slow-running tests in Go
- 27 Jun Shipping services more quickly with design-first OpenAPI contracts
- 26 Jun Week Notes 22#25
- 26 Jun Automating boilerplate/scaffolding code with custom code generation in Go
- 22 Jun Describing a multi-value querystring parameter in OpenAPI
- 22 Jun
Stubbing out the Go
http.Client
to test an HTTPHandlerFunc
- 19 Jun Week Notes 22#24
- 19 Jun Automagically determining feeds provided for a given URL on the command-line
- 15 Jun
Managing your Go tool versions with
go.mod
and atools.go
- 12 Jun Week Notes 22#23
- 07 Jun Setting up OpenAPI Contract Tests with a Rails and RSpec codebase
- 05 Jun Week Notes 22#22
- 03 Jun Only testing your public API in a Go package
- 02 Jun API Design tip: use objects for similar data
- 01 Jun Idea for Open Source/Startup: monetising the supply chain
- 29 May Week Notes 22#21
- 29 May Describing JSON Patch operations with OpenAPI
- 23 May
Weirdness with
git diff-index
showing1 file changed, 0 insertions(+), 0 deletions(-)
- 22 May Week Notes 22#20
- 22 May
Introducing a library for OpenAPI contract testing with Go's
net/http
package - 21 May
Testing Go
net/http
handlers - 15 May Week Notes 22#19
- 13 May Constructing a serialised YAML string in Ruby
- 12 May Lessons learned from modernising a lesser maintained (Spring Boot) service
- 08 May Week Notes 22#18
- 06 May Getting the OpenID Connect thumbprint for AWS on the command-line with Go
- 06 May Getting the fingerprint of a certificate in Go
- 06 May Setting up a Go package structure for a combined library and CLI tool
- 06 May Parsing AWS ALB/ELB access logs into SQLite
- 05 May
When should I use
env
to start a command with environment variables? - 05 May Should I commit generated Go code?
- 02 May Lessons learned from the recent job hunt
- 01 May Week Notes 22#17
- 01 May Installing Nokogiri on an M1 Mac
- 29 Apr Determining if there are uncommitted changes in Git
- 28 Apr Extracting Podcast Addict listening history from the SQLite database
- 28 Apr Building a fault-tolerant work queue for command-line executions with GNU Parallel
- 28 Apr Removing 'smart' quotes from a file, on the command-line
- 25 Apr I'm Joining Deliveroo
- 24 Apr Week Notes 22#16
- 20 Apr Automagically setting the project version for Go projects in SonarQube
- 17 Apr Week Notes 22#15
- 12 Apr
Converting a Byte Array to String from a Node.JS
Buffer
, in Go - 12 Apr Prefactoring: Preparatory Refactoring
- 11 Apr Protecting an Architect Framework Application with OAuth2 or OpenID Connect Authentication
- 10 Apr Week Notes 22#14
- 08 Apr Getting node-canvas to run on AWS Lambda
- 07 Apr
Parsing the
Cookie
andSet-Cookie
headers with Go - 06 Apr Generating a Go HTTP Client from OpenAPI schemas
- 06 Apr Generating Go structs from OpenAPI schemas
- 06 Apr Setting up GitLab CI for Go projects
- 03 Apr Week Notes 22#13
- 01 Apr
Introducing
tiktok-mf2.tanna.dev
, for converting TikTok video metadata to Microformats2 - 01 Apr Adding a Non-AWS Hosted Custom Domain to an AWS API Gateway without CloudFront
- 30 Mar
Creating a minimal AWS S3 Bucket Policy for deploying with Hugo via
hugo deploy
. - 30 Mar Automagically deploying Architect Framework applications to AWS uisng GitLab CI
- 27 Mar Week Notes 22#12
- 22 Mar
Avoiding Spring context issues when parallelising
@Nested
Spring integration tests - 22 Mar
Providing a basic implementation of Ruby's
ARGF.read
in Go - 22 Mar
Integration Testing Your Spring
WebClient
s with Wiremock - 20 Mar Week Notes 22#11
- 16 Mar Accessing the OpenAPI Specification for a Kubernetes Cluster
- 16 Mar
Solving
ConnectException
s with the Kubernetes JavaApiClient
- 15 Mar Automagically Auditing GitHub (Actions) Security using OpenSSF Scorecards
- 14 Mar
Introducing
opengraph-mf2
a library, and serviceopengraph-mf2.tanna.dev
, for converting OpenGraph metadata to Microformats2 - 13 Mar Week Notes 22#10
- 10 Mar
How to fix
Failed to load ApplicationContext
in Spring (Boot) applications - 06 Mar Week Notes 22#09
- 06 Mar
Extracting
x5c
s from a JSON Web Key Set (JWKS) to PEM files with Node.js - 06 Mar
Converting an
x5c
from a JSON Web Key to a PEM with Node.JS - 04 Mar Generate a running mock server from an OpenAPI specification using Prism
- 04 Mar
Gotcha: checked and unchecked exception handling from Spring WebFlux
WebClient
- 04 Mar
Accessing the response body with Spring WebFlux
WebClient
withonStatus
- 03 Mar Running a command on a visual selection in Vim
- 02 Mar Updating the CA Certificate bundle in Chef Installations
- 01 Mar Introducing a Go command-line tool for interacting with Micropub servers
- 01 Mar Automagically formatting on save, with Neovim and Language Server Protocol (LSP)
- 28 Feb Gotcha: Segfault when HTTP headers include newlines with Go
- 27 Feb Week Notes 22#08
- 26 Feb Converting Spring Boot Property Variables to Environment Variables with Go
- 26 Feb Pretty Printing JSON Web Tokens (JWTs) on the Command Line using Go
- 25 Feb
Gotcha: Field casing is important when marshalling
struct
s to JSON in Go - 25 Feb
Testing
@Scheduled
annotations with Spring (Boot) - 23 Feb Creating a "Manual of Me"
- 21 Feb
Reading all of
stdin
on the command-line with Go - 21 Feb Pretty Printing JSON on the Command Line with Go
- 20 Feb Week Notes 22#07
- 18 Feb Exporting a Git repo as an archive
- 17 Feb
How to interpolate a property inside Spring Security
@PreAuthorize
/@PostAuthorize
- 17 Feb
Combining an Audio-only and Video-only MP4 with
ffmpeg
on the command-line - 13 Feb Week Notes 22#06
- 13 Feb Determining if the Spring Boot Application is Running in Debug or Trace Mode
- 13 Feb
Adding a Wiretap to a Spring WebFlux
WebClient
to Log All Request/Response Data - 12 Feb
Simplifying Spring (Boot)
ExceptionHandler
s by extendingResponseStatusException
- 10 Feb Bundling Multi-File OpenAPI Documents into a Single File
- 08 Feb
Announcing
openapi.tanna.dev
, a client-side OpenAPI Viewer - 07 Feb Generating Favicons using ImageMagick on the Command-Line
- 07 Feb Please Add a Relevant Publish Time to Blog Posts
- 07 Feb
Excluding
Filter
s When usingWebMvcTest
- 07 Feb
Integration Testing Your Spring
WebClient
s with okhttp'sMockWebServer
- 07 Feb
Capturing HTTP Requests with okhttp's
MockWebServer.takeRequest
- 06 Feb Week Notes 22#05
- 05 Feb Generate Plain Old Java Objects (POJOs) from OpenAPI Model Definitions with Gradle
- 03 Feb Running Elements API Viewer to Verify Local OpenAPI/Swagger Documents
- 03 Feb I don't think you should be logging that? 😳
- 02 Feb
Validating a
MockMvc
Response Has No Content Type - 01 Feb Replacing Text in Vim with the Output of a Command
- 01 Feb
Integration Testing Your Spring
RestTemplate
s withRestClientTest
, using spring-test - 31 Jan Running Swagger UI to Verify Local OpenAPI/Swagger Documents
- 30 Jan Week Notes 22#04
- 30 Jan Create Executables, not Shell Aliases or Functions
- 30 Jan
Announcing
spring-content-negotiator
, a Java Library for Content Negotiation with Spring - 28 Jan Getting Started with jMolecules and the (Classical) Onion Architecture, with a Spring Boot project
- 23 Jan Week Notes 22#03
- 23 Jan How to Create and Unit Test Java Bean Validation Annotations
- 21 Jan Codifying Your Technical / Architectural Standards with ArchUnit
- 20 Jan Don't Just String Append to a Querystring
- 20 Jan Appending to a Querystring using Go
- 20 Jan
Simplifying Spring (Boot)
ExceptionHandler
s withResponseStatus
Annotations - 20 Jan Use SLF4J, not Log4J, as Your Logging Interface
- 19 Jan
Using the Facade Pattern to More Easily Test
static
or Complex Classes - 18 Jan
Mocking
void
methods with Mockito - 18 Jan Thoughts on Social Media Anonymity
- 18 Jan
Content Negotiation with Servlet
Filter
in Spring (Boot) - 18 Jan
Content Negotiation with
ControllerAdvice
andExceptionHandler
s in Spring (Boot) - 17 Jan Error Handling in (Spring) Servlet Filters
- 16 Jan Week Notes 22#02
- 14 Jan 'Knowing Me, Knowing You': Wiggly ears, custom pizzas and a burst appendix
- 14 Jan Validating UUIDs with Regular Expressions in Java
- 14 Jan
Announcing
uuid
, a Java Library for UUID Validation - 13 Jan Auditing with Spring Boot Actuator
- 13 Jan
Returning a Value, or a Default, From a Java
Optional
- 12 Jan Building an Automagically Updating Personal README for GitLab and GitHub
- 10 Jan
Adding both an
ObjectMapper
and aYAMLMapper
to Spring Boot - 09 Jan Week Notes 22#01
- 07 Jan Testing Data Serialisation/Deserialization in Java (with Gson)
- 06 Jan Improving Life-Work Balance on GitHub using per-Organisation Notification Settings
- 06 Jan 2021's Music In Review
- 04 Jan Publishing to Maven Repositories with GitLab CI, with Signed Artefacts
- 04 Jan
Suppressing
No pinentry
warnings with GPG (in Automated Builds) - 02 Jan Week Notes 21#52
2021
- 30 Dec Using Dagger for Dependency Injection with Cucumber Tests
- 30 Dec Gotcha: PicoContainer requires Zero-Argument Constructors
- 26 Dec Week Notes 21#51
- 23 Dec Publishing a NPM Package to npmjs.com from GitLab CI
- 23 Dec
Announcing a new package:
@jamietanna/spectral-test-harness
- 22 Dec Test Driven Development for Your Spectral Rules, using Jest
- 21 Dec Autowiring your controllers automagically when using MockMVC and Spring Cloud Contract
- 20 Dec Decompiling Java Class Files On the Command-Line
- 20 Dec Validating a Spring (Boot) Response Matches JSON Schema with MockMVC
- 19 Dec Week Notes 21#50
- 16 Dec Retrieving All Dependencies Required by a JAR at Runtime
- 16 Dec Use a (JSON) Schema for the Interface Portion of your RESTful API
- 13 Dec Getting the Date from a Week Number in Java
- 13 Dec Debugging Chef Variables With Logs
- 12 Dec Week Notes 21#49
- 10 Dec Getting the Battery Status of a Bluetooth Device on Linux
- 08 Dec Converting a Kitchen YAML to Chef Attributes
- 08 Dec Using systemd-tmpfiles to manage temporary files and directories
- 08 Dec Should That (Secret) Thing Be In Your Querystring?
- 08 Dec Owning my Hashtags
- 07 Dec Extracting the Default Private / Secret Keys from OpenAM/Forgerock AM
- 06 Dec
Converting an Image to a Base64
data
URL with Node.JS - 05 Dec Week Notes 21#48
- 03 Dec Appending Values to a Querystring with Ruby
- 02 Dec Making Zoom Notifications/Windows Float on BSPWM
- 02 Dec Automagically Assuming AWS Roles for EC2/ECS
- 02 Dec Reducing Risk of Supply Chain Attacks with Reproducible Builds in Gradle
- 02 Dec Packaging Wiremock Stubs into a Standalone JAR
- 01 Dec Testing Data Serialisation/Deserialization in Java (with Moshi)
- 29 Nov Generate Plain Old Java Objects (POJOs) from JSON Schema Definitions with Gradle
- 28 Nov Week Notes 21#47
- 28 Nov Shift Your Testing Left with Spring Boot Controllers
- 22 Nov Generate Plain Old Java Objects (POJOs) from XML Schema Definitions with Gradle
- 22 Nov Use (End-to-End) Tracing or Correlation IDs
- 21 Nov Week Notes 21#46
- 17 Nov Lessons Learned from Running Java in Serverless Environments like AWS Lambda
- 17 Nov Determining the Version Of Libraries Packaged into the Java AWS Lambda Runtime
- 16 Nov Generating Dynamic Identifiers with Thymeleaf
- 14 Nov Week Notes 21#45
- 10 Nov Controlling the Linux Backlight via the Command-Line
- 10 Nov Make Your RSS Feed Discoverable
- 09 Nov Why You Should Avoid using Client Secret Authentication for OAuth2 Client Credentials
- 08 Nov Running a Java WAR File on the Command-Line
- 08 Nov Querying and Interacting with CSV Files More Easily with SQLite
- 07 Nov Week Notes 21#44
- 05 Nov How We Built a Team with a High Net Promoter Score
- 04 Nov Creating More Descriptive and Fluent Assertion Helpers
- 31 Oct Week Notes 21#43
- 28 Oct Using Middleman Redirects with a Custom, Non-HTML Content Type
- 27 Oct Improving Team Efficiency By Measuring and Improving Code Review Cycle Time
- 27 Oct Using JitPack to Install Gradle Plugins from Git Sources
- 26 Oct Listing Which GitHub Pull Requests are in a Project
- 25 Oct Things I Learned Migrating My Personal APIs To Kubernetes
- 24 Oct Week Notes 21#42
- 23 Oct Updating a Secret in Kubernetes with the Java Client
- 23 Oct
How to Undo a
git push --force
- 22 Oct Debugging Middleman Code With Middleman's Logger
- 19 Oct Lightweight and Powerful Dependency Injection for JVM-based Applications with Dagger
- 17 Oct Week Notes 21#41
- 15 Oct Implementing IndieAuth Server Metadata
- 15 Oct
Announcing a Service for Creating an iCalendar feed for event RSVPs:
rsvp-calendar.tanna.dev
- 13 Oct "I Thought You'd Be Paid More" - What I Learnt From Posting My Salary Publicly
- 10 Oct Week Notes 21#40
- 03 Oct Week Notes 21#39
- 02 Oct Testing Data Serialisation/Deserialization in Java (with Jackson)
- 29 Sep Setting up fluentd to Parse Nested JSON from Docker
- 26 Sep Week Notes 21#38
- 26 Sep Tips for Reducing Dependency Upgrade Toil with Renovate
- 19 Sep Week Notes 21#37
- 12 Sep Week Notes 21#36
- 12 Sep Packaging Wiremock Extensions into the Standalone Server Runner
- 10 Sep Testing Java Callbacks with Mockito
- 09 Sep Providing a Public Salary History Page
- 07 Sep Releasing a Java Library for Gherkin Formatting
- 06 Sep Pushing Back to Git In a Jenkins Multibranch Pipeline
- 05 Sep Week Notes 21#35
- 29 Aug Week Notes 21#34
- 28 Aug Using Bill of Materials to Simplify Dependency Management
- 24 Aug Making Your Gherkin Scenarios Written Using Human-Readable Language
- 22 Aug Week Notes 21#33
- 19 Aug I'm Joining the Cabinet Office
- 15 Aug Week Notes 21#32
- 11 Aug Using Abstract Test Classes To Reduce Duplication in Java
- 08 Aug Week Notes 21#31
- 01 Aug Week Notes 21#30
- 01 Aug
Introducing a Microformats API for Books:
books-mf2.fly.dev
- 29 Jul Encoding Strings for Embedding in JSON with Ruby on the Command-Line
- 25 Jul Week Notes 21#29
- 18 Jul Week Notes 21#28
- 15 Jul Programatically Comparing Versions Using Chef's Versioning Schemes
- 11 Jul Week Notes 21#27
- 04 Jul Week Notes 21#26
- 28 Jun Parsing Encoded JSON Strings on the Command-Line with Ruby
- 27 Jun Week Notes 21#25
- 25 Jun Testing that your Spring Boot Application Context is Correctly Configured
- 22 Jun Decrypting Encrypted JSON Web Tokens (JWE) with Ruby
- 20 Jun Week Notes 21#24
- 13 Jun Week Notes 21#23
- 09 Jun Running Multiple JDK Versions with the Gradle Toolchains Configuration
- 06 Jun Week Notes 21#22
- 02 Jun
Testing Data Serialisation/Deserialization using
JsonTest
with Spring Boot - 01 Jun Writing Better Wiremock Stubs
- 01 Jun Default Your Tests to run in Parallel
- 31 May Writing Better Tests
- 31 May Migrating Your Spring Boot Application to use Structured Logging
- 30 May Week Notes 21#21
- 29 May
Avoiding
NoClassDefFoundError
errors when using slf4j-test with Logback and Maven - 25 May Marking up my Curriculum Vitae with Microformats2
- 23 May Week Notes 21#20
- 16 May Week Notes 21#19
- 10 May Configuring a Jenkins Multibranch Pipeline to Specify the Trust Permissions with Job DSL
- 09 May Week Notes 21#18
- 02 May Week Notes 21#17
- 01 May Features I Want In My Social Reader
- 29 Apr How to get a field with Reflection in Java
- 29 Apr Server-less Wiremock, or Using Wiremock Without an HTTP Server
- 28 Apr Adding API Versioning to your Environment-Agnostic Functional Acceptance Tests
- 26 Apr Building a Multibranch Pipeline on a Schedule
- 25 Apr Week Notes 21#16
- 24 Apr Disabling a Multibranch Pipeline using Job DSL
- 19 Apr Uploading Community Cookbooks from Supermarket to Chef Server
- 18 Apr Week Notes 21#15
- 18 Apr Constructing an Ordered Dependency Graph for Chef Cookbooks, using Berkshelf
- 16 Apr Using Dynamically Generated Non-AWS Owned SSH Keys with Test Kitchen on EC2
- 11 Apr Week Notes 21#14
- 07 Apr
Waiting for SSH service
on Test Kitchen with the Docker driver - 06 Apr Setting up a Test Environment for Job DSL Projects
- 04 Apr Week Notes 21#13
- 31 Mar
Working with a Git remote's default branch, using
origin/HEAD
- 29 Mar Better Chef Reporting for Automated Pipelines
- 28 Mar Week Notes 21#12
- 24 Mar
Managing Your Chef Gem Dependencies More Easily in your
Gemfile
- 23 Mar Programatically Determining the Version of a Chef Cookbook
- 21 Mar Week Notes 21#11
- 14 Mar Week Notes 21#10
- 14 Mar How to Use Cookstyle to Autocorrect Style Issues
- 12 Mar Ensuring Consistent Code Style with Job DSL Repos
- 11 Mar Speeding Up Gradle Executions with Parallelisation
- 08 Mar Testing Time with Java
- 07 Mar Week Notes 21#09
- 06 Mar Introducing tokens-pls, a Web Application to Test OAuth2 Code Flows
- 06 Mar Using Proof of Key Code Exchange (PKCE) Using rack-oauth2 as an OAuth2 Client
- 04 Mar Determining the (Git) Branch of the Jenkins Pipeline Job
- 03 Mar Encrypting and Decrypting Text with OpenSSL
- 28 Feb Week Notes 21#08
- 23 Feb Getting Started With Jenkins Job DSL Plugin for Standardising Your Pipelines
- 22 Feb
Installing Gems From Your
Gemfile
When Developing Chef Cookbooks using the ChefDK / Chef Workstation - 21 Feb Week Notes 21#07
- 21 Feb Moving meetup-mf2 and eventbrite-mf2 to Heroku
- 14 Feb Week Notes 21#06
- 07 Feb Week Notes 21#05
- 04 Feb Autogenerating Postman Collections for IndieAuth Servers
- 31 Jan Week Notes 21#04
- 31 Jan Implementing the Refresh Token Grant in my IndieAuth Server
- 25 Jan
Executing
javax.servlet.Filter
s in aws-serverless-java-container Jersey Apps - 24 Jan Week Notes 21#03
- 18 Jan Writing Environment-Agnostic Functional Acceptance Tests
- 17 Jan Week Notes 21#02
- 11 Jan Autogenerating Postman Collections for Micropub Servers
- 11 Jan Releasing Two Lightweight Libraries for Server-Driven Content Negotiation
- 10 Jan Week Notes 21#01
- 05 Jan Why I Consistently Reach for Server-Driven Content Negotiation (For Versioning)
- 04 Jan 2020's Music In Review
- 03 Jan Week Notes 20#53
2020
- 27 Dec Week Notes 20#52
- 20 Dec Week Notes 20#51
- 13 Dec Week Notes 20#50
- 12 Dec
Inexactly Comparing
MediaType
s with Spring - 12 Dec
Converting X.509 and PKCS#8
.pem
file to a JWKS (in Ruby) - 12 Dec Generating a JSON Web Key (JWK) With Ruby
- 09 Dec Creating a Personal IndieAuth Server
- 06 Dec Week Notes 20#49
- 29 Nov Week Notes 20#48
- 22 Nov Week Notes 20#47
- 15 Nov Week Notes 20#46
- 11 Nov Setting up Passwordless Authentication using the Okta Factors API
- 08 Nov Week Notes 20#45
- 04 Nov How to List Gradle's Buildscript / Plugin Dependencies
- 03 Nov Filtering Tasks and their Subtasks in JIRA
- 01 Nov Week Notes 20#44
- 29 Oct Globally Logging all Spring (Boot) Exceptions
- 29 Oct Using Git Diff Without a Repo
- 26 Oct Changing the Storage of Cites on my Site
- 25 Oct Week Notes 20#43
- 19 Oct Providing Hints for Autoconfiguring Micropub Clients
- 18 Oct Week Notes 20#42
- 15 Oct Creating an Auto-configuring Micropub Client
- 11 Oct Week Notes 20#41
- 07 Oct
unknown revision or path not in the working tree
after Jenkins Git Plugin Update - 07 Oct Publishing + Consuming Artefacts in the Local Maven Repository with Gradle
- 07 Oct Women in Tech October: How to Manage Your New Manager
- 04 Oct Week Notes 20#40
- 01 Oct Unit Testing Auth0 Rules
- 29 Sep
Resolving Gradle Error
Unexpected Parent Dependency
in IntelliJ - 27 Sep Week Notes 20#39
- 22 Sep Debugging Git Errors Using Environment Variables
- 20 Sep Week Notes 20#38
- 16 Sep Celebrating Four Years at Capital One
- 13 Sep Week Notes 20#37
- 08 Sep Hacktoberfest Comes to Homebrew Website Club Nottingham
- 06 Sep Week Notes 20#36
- 02 Sep Creating Signed JOSE Objects with Ruby
- 01 Sep
Why I Actively Discourage Online Tooling like
jwt.io
and Online JSON Validators - 30 Aug Week Notes 20#35
- 26 Aug Investigating Solutions for Private/Friends-Only Posts on a Static Website
- 24 Aug Running Multiple JDK Versions with the Maven Toolchains Plugin
- 24 Aug Sorting a Hash Recursively with Ruby
- 24 Aug Diffing Pretty-Printed JSON Files
- 23 Aug Week Notes 20#34
- 22 Aug Generate Plain Old Java Objects (POJOs) from XML Schema Definitions with Maven
- 18 Aug My First Experience With Setting a Squad Healthcheck
- 16 Aug Week Notes 20#33
- 16 Aug
JWKS-iCal Release v1.2.0: Determine the
jwks_uri
from Configuration - 16 Aug
Globally Disable TLS Checks with Java for
HttpsURLConnection
- 16 Aug JWKS-iCal Release v1.1.0: Adding Calendar Reminder
- 15 Aug Connecting to the Docker Host from a Child Container
- 09 Aug Week Notes 20#32
- 06 Aug How to Manually Trigger JSR380 Bean Validation on a Class
- 02 Aug Week Notes 20#31
- 27 Jul Configure Gradle to Configure Tasks Globally with an initscript
- 27 Jul Configure Gradle to Allow Listing All Subproject Dependencies
- 26 Jul Week Notes 20#30
- 19 Jul Week Notes 20#29
- 15 Jul Capital One Promotion Celebrations
- 12 Jul Week Notes 20#28
- 09 Jul New Job Title, Who Dis?
- 05 Jul Week Notes 20#27
- 30 Jun
Spring Boot:
'junit-vintage' failed to discover tests
When Using Only JUnit5 Tests - 28 Jun Week Notes 20#26
- 28 Jun Creating My Own Personal Micropub Client
- 27 Jun Generating Random Bytes On the Command Line with OpenSSL
- 27 Jun
Using
@Mock
as a Method Parameter with Mockito - 23 Jun Converting a Byte Array to a String in Ruby
- 21 Jun Week Notes 20#25
- 19 Jun Disabling the logging of Spring Security's Default Security Password
- 17 Jun Changing my Static Site Search Setup
- 15 Jun
Generating the Client Assertion JWT for
private_key_jwt
Authentication with Ruby - 15 Jun Verifying Signed JWTs (JWS) with Ruby
- 15 Jun Creating Signed JWTs (JWS) with Ruby
- 15 Jun
Issues with Ordering When Using Vault CLI's
-no-print
Argument - 14 Jun Week Notes 20#24
- 14 Jun Keeping Track of Certificate Expiry with a JWKS to iCalendar Converter
- 11 Jun New CSS, Who Dis?
- 07 Jun Week Notes 20#23
- 07 Jun Review: mycookiedough Delivery
- 03 Jun
GitLab CI Shell Executor Failing Builds With
No Such Directory
- 03 Jun
GitLab CI Shell Executor failing builds with
ERROR: Job failed: exit status 1
- 03 Jun Deploying a Branch to Netlify on the Command-Line
- 03 Jun Generating JWK Thumbprints with Ruby
- 02 Jun Generating JWK Thumbprints with Node.JS
- 02 Jun
How are Open Banking Key Ids (
kid
) Generated? - 31 May Week Notes 20#22
- 29 May How to Run Java on the Command-Line to Attach a Debugger
- 29 May Extract a Public Cert from a Java Keystore/Truststore
- 29 May Evicting Spring Cache on a Schedule
- 28 May
No default controller available
Withbluetoothctl
- 27 May Migrating to Netlify's Deployments from GitLab CI
- 25 May Reading a Servlet/Spring Request Body Multiple Times
- 25 May
How to avoid
HttpMessageNotReadableException
when usingContentCachingRequestWrapper
with Java Servlet Filters - 24 May Week Notes 20#21
- 18 May
Disabling
@Valid
Annotation in a Spring Integration Test - 18 May Converting Output from Rest Assured to Curl Requests
- 17 May Week Notes 20#20
- 15 May Navigating through the Vim Changelist with Intellij
- 15 May Running Spotless Automagically with Gradle
- 13 May Rendering Micropub Client Data on Posts
- 10 May Week Notes 19
- 10 May Changing the Structure of Homebrew Website Club Nottingham
- 06 May Gotcha: AWS SDK Proxy Setup with Test Kitchen
- 05 May Determining What Motherboard You're Using, On Linux
- 04 May Creating a 'Firehose' Feed
- 03 May Week Notes 18
- 30 Apr
Extracting
x5c
s from a JSON Web Key Set (JWKS) to PEM files with Ruby - 29 Apr
Autogenerating the
Date
Header in Postman - 26 Apr Week Notes 20#17
- 26 Apr New Desk/Office Setup
- 20 Apr
Converting a Byte Array to String with
Buffer
in Node.JS - 19 Apr Week Notes 20#16
- 14 Apr GitLab Runner Docker TCP Error
- 14 Apr Inheriting the Proxy from the Jenkins Host in Docker
- 14 Apr Inheriting the Environment Variables from the Jenkins Host in Docker
- 12 Apr Week Notes 20#15
- 11 Apr Being a Bad POSIX Citizen
- 07 Apr Tomcat May Log Cookies Out-of-the-Box
- 07 Apr
Providing Custom Serialization for
Map
Keys in Jackson - 05 Apr Week Notes 20#14
- 29 Mar Week Notes 20#13
- 27 Mar
Toggling Your Bluetooth Connection using
bluetoothctl
on the Command-Line - 22 Mar Week Notes 20#12
- 22 Mar Platform-Aware @-mentioning People on my Blog
- 20 Mar Extract a Private Key from a Java Keystore
- 20 Mar Splitting an X509 PEM-Encoded Certificate Bundle into Multiple Files
- 15 Mar Week Notes 20#11
- 12 Mar PHPMiNDS March: Slim 4: PHP's Microframework
- 08 Mar Week Notes 20#10
- 05 Mar
What's the
jvt.me
at the end of your tweets? - 05 Mar Thanks GitLab for the Swag!
- 02 Mar
How to Use
curl
to Send Requests to Domains Without Editing Your/etc/hosts
File - 02 Mar Google confirms Microformats are still a recommended metadata format for content
- 01 Mar Week Notes 20#9
- 29 Feb Announcing Micropub-Media-Endpoint-Proxy
- 25 Feb How to unzip/decompress a Java JAR file
- 23 Feb Week Notes 20#8
- 23 Feb
meetup-mf2.herokuapp.com
release 0.3.0: Integration issue fixes + caching - 23 Feb Triggering an AWS Lambda from the Command-Line
- 23 Feb Skip Builds On Branch Indexing with Jenkins Multibranch Pipelines
- 21 Feb Generating HMAC Signatures on the Command Line with OpenSSL
- 19 Feb Creating Signed JWTs (JWS) with Node.JS
- 17 Feb Announcing Meetup.com Support for Bridgy Publish
- 16 Feb Week Notes 20#7
- 16 Feb Birds of Prey Review (No Spoilers)
- 15 Feb
Setting up Multiple
redirect_uri
s on the Meetup.com API - 11 Feb Week Notes 20#6
- 08 Feb How to Extract a Twitter Profile URL (But Not Status URL) with a Regex
- 06 Feb Converting a Ruby Hash to a String
- 03 Feb Week Notes 20#5
- 03 Feb
Generate Plain Old Java Objects (POJOs) from XML Schema Definitions with
xjc
- 26 Jan Week Notes 20#4
- 26 Jan Removing Distractions with the Focus Mode within Android's Digital Wellbeing
- 17 Jan Week Notes 20#3
- 15 Jan
Converting an
x5c
from a JSON Web Key to a PEM with Ruby - 14 Jan Parsing a Unix Epoch With Bash/Ruby on the Command-Line
- 14 Jan Performing Mutual TLS Authentication with Rest Assured (via Apache HTTP Client)
- 12 Jan Week Notes 20#2
- 12 Jan Converting Webmentions to Push Notifications
- 12 Jan 2018 in Review
- 11 Jan Moving Events for the Homebrew Website Club: Nottingham to the IndieWeb Events site
- 05 Jan Week Notes 20#1
- 05 Jan Netlify Billing Request: Extra Bandwidth Allowances
- 02 Jan Women in Tech January - Sensing Change: The Rise of the Smart bins
- 01 Jan 20xx Decade of Music In Review
- 01 Jan 2019's Music In Review
2019
- 29 Dec Open Request to Spotify About Data Requests and Spotify Wrapped Data
- 26 Dec Setting up a Staging Server for my Micropub Endpoint
- 23 Dec Gotcha: Running both JUnit4 and JUnit5 Together with Maven
- 23 Dec Gotcha: Running both JUnit4 and JUnit5 Together with Gradle
- 19 Dec
meetup-mf2.herokuapp.com
release 0.2.0: Addingh-feed
support - 17 Dec Pretty Printing XML on the Command-Line
- 17 Dec
Backporting/Replaying Changes using
git format-patch
andgit apply
/git-am
- 16 Dec Happy Second Appendixaversary
- 15 Dec List What Files Changed in a Git Commit
- 10 Dec Using Chef to Delete Files that aren't in a List
- 10 Dec
Converting a JSON Web Key to a X.509
.pem
file (in Node.JS) - 06 Dec Configuring a Jenkins Multibranch Pipeline to Use an External Script with Job DSL
- 06 Dec
ChefSpec Gotcha: Using
render_file
When Deleting Files - 05 Dec PHPMiNDS August - the Politics of Tool Shaming
- 04 Dec
Setting up a directory for OpenSSL's
SSL_CERT_DIR
- 03 Dec Locking Your Machine Before Suspending Using systemd
- 01 Dec Reader Mail: Getting an RSS Feed of Only Posts
- 30 Nov What I've Learned Over National Blog Posting Month (NaBloPoMo) 2019
- 30 Nov Parsing URL Querystrings with Node.JS
- 30 Nov Using the OpenSSL Command-Line to Verify an SSL/TLS Connection
- 29 Nov Viewing Jenkins Jobs' Configuration as XML
- 28 Nov Trusting Self-Signed Certificates from Ruby
- 27 Nov Pretty Printing YAML with the Ruby Command-Line
- 26 Nov Blocking Twitter Widgets from This Site
- 25 Nov Neurodiversity and Blogumentation
- 24 Nov
Piping Data When Not Running a Command with
sudo
- 23 Nov Minifying JSON with Python
- 22 Nov Minifying JSON with Ruby
- 21 Nov Only Adding Changes for Tracked Files With Git
- 20 Nov Sending Webmentions More Intelligently
- 19 Nov Adding Series Metadata to Posts
- 18 Nov Validating my JSON Feed on every site build
- 17 Nov Adding a Merge Request Checklist for new Articles
- 16 Nov Music and Associations
- 15 Nov
Creating a Global
.gitignore
- 14 Nov Ditching Event Platforms for the IndieWeb
- 13 Nov Reader Mail: What Static Site Generator Would I Recommend?
- 12 Nov Getting Started With Vim
- 11 Nov Gotcha: Netlify Makes All Your Filenames Case-Insensitive
- 10 Nov Making Hugo Generate Case Sensitive URLs
- 09 Nov New Push Notification: Suspicious Transactions
- 08 Nov Request for Enhancement for Gousto: Reducing Partial Use of Ingredients
- 07 Nov
Chef Attributes and
default.rb
- it's in the name - 06 Nov Take Take Take: Rethinking How I Consume Free and Open Source Software
- 05 Nov Auto-announcing Events in my Feed
- 04 Nov Viewing the Contents of a Certificate Signing Request (CSR) with OpenSSL
- 03 Nov Off Days
- 02 Nov Adulting: The Constant Struggle of Prioritisation
- 01 Nov National Blog Post Month (NaBloPoMo)
- 30 Oct Reader Mail: Webmention Spam
- 30 Oct Reader Mail: Getting Started with Hugo and Micropub
- 27 Oct Owning My Step Count
- 20 Oct The IndieWeb Movement: Owning Your Data and Being the Change You Want to See in the Web
- 20 Oct Setting Your Maven Project Versions
- 19 Oct
Introducing a Microformats API for Eventbrite:
eventbrite-mf2.herokuapp.com
- 16 Oct Listing the Contents of a Java Truststore
- 12 Oct DevOpsDays London 2019
- 11 Oct
Getting
git diff
Outputs Without a Prefix - 07 Oct Moving Teams after Three Years
- 06 Oct Diagnosing my Slow Netlify Deploy Times
- 05 Oct On Panic Attacks
- 03 Oct IndieWebCamp Amsterdam 2019
- 30 Sep Auto-linking URLs with Hugo
- 28 Sep Proposing a Microformats2 Markup for Licensing Information
- 22 Sep Pushing your Git Branches to a Matching Remote Branch
- 22 Sep Testing Your SLF4J Logs
- 22 Sep
Viewing Logs for a systemd Unit with
journalctl
- 17 Sep Setting up a custom RubyGems Repository for Chef in Test Kitchen
- 17 Sep Overriding Test Kitchen Driver Configuration
- 15 Sep How Many Gadgets Does the Kitchen Need?! The Many Tools for Chef Dependency Management
- 12 Sep Adding RSVP Support for Indie Events
- 10 Sep Sending Webmentions Automagically on Deploys of the static website www.jvt.me
- 08 Sep
Extracting Request Parameters Dynamically for a
multipart/form-data
Request - 08 Sep
Extracting Request Parameters Dynamically for a
application/x-www-form-urlencoded
Request in Spring - 07 Sep Adding a 404 page for www.jvt.me on Netlify, with Hugo
- 07 Sep Merging an 'Override' Ruby Hash into the Original Hash
- 07 Sep Converting Ruby Hash keys to Strings/Symbols
- 02 Sep Adding Newlines to all Files in Git
- 02 Sep Adding Calendar details on events pages
- 31 Aug
Introducing a Microformats API for Meetup.com:
meetup-mf2.herokuapp.com
- 28 Aug
Making it easier to determine the
kind
of content for Indie posts - 26 Aug Setting Up a Micropub Server for www.jvt.me
- 21 Aug How to RSVP to an Indie Event from your Website
- 20 Aug AWS Nottingham: Where Did All the Money Go?
- 18 Aug Restructuring The Way That My Site's Content Types Work
- 16 Aug Easily Parsing Failed Cucumber Scenarios from the JSON Report
- 06 Aug Using OpenSSL Behind a (Corporate) Proxy
- 02 Aug Extract a Secret Key from a Java Keystore
- 01 Aug Parsing Key-Value URL Fragments with Node.JS
- 27 Jul Creating an iCalendar feed for my RSVPs
- 27 Jul Add your Meetup.com Events to your Calendar
- 24 Jul Pretty Printing JSON Files Inline on the Command Line
- 22 Jul Why I Have a Website and You Should Too
- 21 Jul Croatia 2019 Summer Holiday
- 09 Jul Visualising My Posting Habits
- 07 Jul A Reflection on Four Months of Gousto
- 07 Jul Being Celebrated in the 2019 Tyk Community Awards
- 01 Jul DDD East Midlands: Speaker Workshop
- 30 Jun Rendering Webmentions using Client Side JavaScript
- 26 Jun Force a Refresh of an Emby Library in Kodi
- 26 Jun Notts Techfast: What do testers even do all day?
- 24 Jun Talking about the IndieWeb at OggCamp 2019
- 17 Jun Explaining Networking and Packet Switching with LEGO and the Postal Service
- 13 Jun Pretty Printing JSON Web Tokens (JWTs) on the Command Line using OpenSSL
- 08 Jun Women In Tech June 2019 - Negotiating For Fun And Profit
- 31 May URL Decoding with Ruby on the Command Line
- 26 May Why www.jvt.me?
- 26 May
Using Hugo
.Render
to Save Repetition - 22 May .NET Notts May: Software Quality in the DevOps World
- 22 May Adding iCalendar Feeds for Events in Hugo
- 19 May Cyber Nottingham May
- 19 May
Using
<details>
tags for HTML-only UI toggles - 17 May Creating a /now page
- 12 May Implementing h-feed, and making all site content discoverable
- 09 May PHPMiNDS May: Running your PHP site on AWS Lambda with Bref
- 01 May Re-enabling search on my static website
- 23 Apr Verify if a field in a JSON response is not set with Rest Assured
- 23 Apr Pretty Print JSON with Java
- 15 Apr Gotcha: URL Encoding for consecutive double slashes issue with Rest Assured
- 11 Apr PHPMiNDS April
- 10 Apr Marking up my pronouns with Microformats
- 10 Apr Tech Nottingham April
- 07 Apr Prettier HTML Reports for Cucumber-JVM
- 07 Apr Using Netlify for hosting www.jvt.me in Production
- 07 Apr Adding a JSON Feed to my site
- 03 Apr Viewing X.509 PEM Certificate Fingerprints with OpenSSL
- 03 Apr Viewing X.509 DER Certificate Fingerprints with OpenSSL
- 30 Mar Hello IndieAuth!
- 29 Mar Pretty Printing JSON with Ruby
- 27 Mar Hello IndieNews!
- 24 Mar Specifying datetime in your Hugo posts' front matter
- 23 Mar Marking up Events with Microformats
- 22 Mar Beyond Rest: The Future of Web APIs
- 20 Mar Homebrew Website Club: Nottingham, Session 1
- 20 Mar Easily rewriting Git URLs from HTTPS to SSH and vice versa
- 19 Mar Adding the microformats h-entry markup to my blog posts
- 18 Mar Displaying Webmentions on my Hugo website
- 15 Mar Setting up a personal hCard for myself
- 14 Mar Homebrew Website Club: Nottingham
- 02 Mar I'm Not Good With People
- 25 Feb Verifying Signed JWTs (JWS) with Node.JS
- 17 Feb Moving talks.jvt.me to reveal-hugo
- 10 Feb
Performing a No-Op with
chef-client
using JSON - 10 Feb FOSDEM 2019
- 29 Jan
Using
git worktree
to have multiple branches checked out at once - 19 Jan Using Git refs to help track your GitLab Environments, from your local repo
- 19 Jan Using Git refs to check out GitLab Merge Requests, from your local repo
- 19 Jan Using Git refs to check out GitHub Pull Requests, from your local repo
- 12 Jan Performing Code Review on Your own Merge/Pull Requests
- 11 Jan Pretty Printing JSON using Node.JS on the Command Line
- 11 Jan Automating Promotion of Jekyll Posts from Draft to Post
- 10 Jan
Converting X.509 and PKCS#8
.pem
file to a JWKS (in Node.JS) - 10 Jan
Using
git commit --fixup=
to track changes that need to be applied on top of another commit - 04 Jan Goodbye Jekyll, Hello Hugo!
- 01 Jan 2018's Music In Review
2018
- 23 Dec Creating Microservices for my Static Website
- 22 Dec Leaving BTRFS as my primary filesystem
- 10 Dec TYKJS Middleware Gotcha When Base 64 Decoding Data
- 10 Dec Unit Testing Your TYK (TYKJS) Middleware
- 09 Dec Hackference 2018
- 05 Dec How to run tests from the ChefDK in Docker
- 29 Nov Using Fake Cookbooks for Writing ChefSpec Tests for your Custom Chef Resources
- 19 Nov Tweaking Gatling HighCharts Response Time Bounds
- 19 Nov Creating a versionable, self-contained (fat-/uber-) JAR for Gatling tests
- 15 Nov Setting your default AWS profile for the AWS CLI and SDKs
- 13 Nov
Chef 14 Upgrade: Custom Resource Properties are Silently Coerced to
Hash
if they are anil
- 13 Nov Chef 14: ChefSpec Coverage Reporting Deprecation
- 12 Nov
Chef 14 Upgrade: Change in
ValidationFailed
error messages when settingrequired
properties - 07 Nov Why You Should Be Unit Testing Your Functional Acceptance Tests
- 02 Nov Viewing X.509 PEM Certificate Details with OpenSSL
- 02 Nov Viewing X.509 DER Certificate Details with OpenSSL
- 28 Oct
Backporting/Replaying Changes Using
git cherry-pick
- 28 Oct Revert 'Some knowledge-sharing news'
- 25 Oct DevOpsDays London 2018
- 19 Oct
Showing response headers with
curl -i
- 18 Sep
Safely Force Pushing with Git using
--force-with-lease=ref
- 11 Sep My editorial workflow for blog posts
- 11 Sep
Viewing Git history of a file in
git log
while ignoring file renames - 04 Sep Test-Driven Chef Cookbook Development Using ChefSpec (and a sprinkling of InSpec)
- 31 Aug Pretty Printing JSON Web Tokens (JWTs) on the Command Line using Ruby
- 29 Aug
Using
chef-shell
to interactively debug attributes and recipes - 23 Aug OggCamp 2018
- 16 Aug Context is key: thinking about your audience
- 15 Aug Creating a versionable, self-contained (fat-/uber-) JAR for Cucumber tests
- 05 Aug My Path from School to University to Work
- 29 Jul Being More Explicit on Content Licensing
- 06 Jul Some exciting job and knowledge-sharing news
- 24 Jun Notes from the AWS + Chef Dev Day Roadshow in London
- 18 Jun Pretty Printing JSON on the Command Line with Ruby
- 01 Jun
Merging multiple repositories into a monorepo, while preserving history, using
git subtree
- 04 May Sharing Multiple SSH Sessions over the Same Network Socket
- 04 May Better Git Diff Outputs with Git Submodules
- 30 Apr
Beware:
delete
ing afile
in Chef doesn't actuallydelete
it - 23 Apr Morsels of Goodness: What's Cooking in Chef 14?
- 19 Apr Finally Returning to Full Time Work After 123 Days
- 15 Apr Serving Branches on a Subdomain using Caddy and GitLab Review Apps
- 12 Apr Deploying to Netlify using GitLab CI
- 08 Apr Executing an Interactive Python Shell (REPL) for a Script
- 05 Apr Bundling Common Rake Tasks into a Gem
- 26 Mar
Running
docker login
as another user in Chef - 15 Mar My First Week Back to Working (Remotely) After Three Months
- 09 Mar
Chef 13 Upgrade:
knife-cookbook-doc
Rubocop Updates - 07 Mar Chef 13 Upgrade: Deprecation of Namespace Collisions in Custom Resources
- 07 Mar
Chef 13 Upgrade:
knife-cookbook-doc
gem upgrade - 07 Mar Verify a Ruby Class Method is Called with Arguments in Rspec, Without Doubles or Mocks
- 07 Mar
Testing Chef's
ruby_block
s with ChefSpec - 06 Mar
Chef 13 Upgrade: Testing
ruby_block
s with ChefSpec - 06 Mar
Chef 13 Upgrade: Rubocop Changes for Word Array Literals (
%w
) - 06 Mar
Chef 13 Upgrade: Rubocop Changes for Testing
render_file
with ChefSpec and awith_content
Block - 06 Mar
Chef 13 Upgrade: Rubocop Changes for
lazy
Parameters - 06 Mar Chef 13 Upgrade: Lessons Learnt and Documented for Posterity
- 28 Feb Emoji Support in Dunst
- 16 Feb
SSLError
When Running Berkshelf Behind a Proxy - 14 Feb 2017 in Review
- 05 Feb Hackference 2017
- 01 Jan 2017's Music In Review
2017
- 03 Sep
Running
service
resources in Kitchen-Docker - 17 Aug Trusting Self-Signed Certificates from the Chef Development Kit
- 12 Aug
Getting around
Permission Denied
when running ChefSpec - 18 Jul GitLab Review Apps with Capistrano and Nginx
- 16 Jul
Testing
include_recipe
s with Chef and ChefSpec - 25 Jun Blogumentation - Writing Blog Posts as a Method of Documentation
- 22 Jun Converting YAML to JSON and vice versa (Part 1 - Ruby)
- 07 Jun Clean up your Git branches
- 05 Jun Pretty Printing JSON on the Command Line with Python
- 01 Jun Viewing your diff while writing your commits with git commit --verbose
- 25 May Building Chef Cookbooks with GitLab (Part 1)
- 28 Apr Extracting SSL/TLS Certificate Chains Using OpenSSL
- 26 Apr
glances, a
top
andhtop
replacement - 17 Apr Saving Repetition with Git Commit Templates
- 13 Apr
Cleaning Up Your LaTeX Build Output with
latexrun
- 25 Mar Why You Should Use GitLab.com
- 15 Feb Resurrecting dinosaurs, what could possibly go wrong?
- 15 Feb Preparing a Technical Workshop - A Checklist
- 14 Feb CloudABI - Easily develop sandboxed apps for UNIX
- 09 Feb FOSDEM 2017
- 07 Feb Open S-awesome
- 25 Jan Continuous Delivery with Capistrano and GitLab Continuous Integration
- 01 Jan 2016's Music In Review
2016
- 01 Oct Hacktoberfest 2016
- 01 Jan 2015's Music In Review
2015
- 16 Nov Introduction to Python Programming - Session 5 Catchup
- 10 Nov Introduction to Python Programming - Session 4 Catchup
- 10 Nov Introduction to Python Programming - Session 3 Catchup
- 26 Oct Introduction to Python Programming - Session 2 Catchup
- 19 Oct Introduction to Python Programming - Session 1 Catchup
- 10 Oct Introduction to Python Programming
- 09 Oct Hacksoc Slack - Inclusive Communication
- 14 Apr The Sony Hack
- 01 Jan 2014's Music In Review
2014
- 18 Dec The Hour of Code: What's the Worst that Could Happen?
- 24 Nov Game of Drones
- 21 Nov Smart is the New Black: Lightbulbs to Reflect a Modern Age
- 15 Jul Intelligent Parenting
- 01 Jan 2013's Music In Review
2013
- 01 Jan 2012's Music In Review