Hannikainen's blog

Code snippet
Mar 30, 2024

Snippet: Render TypeDoc module members on same page

TypeDoc by default renders all functions, variables etc. on different pages. This custom theme renders module and namespace members on the same page.

Blog post
Feb 9, 2024

Speeding up your CI pipeline by 50% or more

Are you running `docker build` in your pipeline? Remember to enable image caching.

Blog post
Aug 3, 2023

Unlimited FPS with fixed physics timestep in MonoGame and Nez

MonoGame doesn't support having a separate physics and rendering update functions. Is it still possible to get unlimited FPS with fixed physics? Yes.

Blog post
Feb 1, 2023

Mutation testing

Because you want to make working software, you are writing tests to ensure that your software works... but how can you verify that do your tests actually work?

Music
Mar 20, 2022

Music: Everything's Alright (from To The Moon)

An arrangement of Everything's Alright for a male quartet.

Music
Dec 10, 2021

Music: You Were There (from Ico)

An arrangement of You Were There for a string quartet & a singer or a lead instrument.

Code snippet
Sep 10, 2021

Snippet: livereloading anything

Run a command every time files change.

Blog post
Sep 2, 2021

Practical state machines

State machines are the University's answer for handling strings. Do they have any practical uses?

Code snippet
Jul 27, 2021

Snippet: Prevent USB devices from sleeping

Prevent selected USB devices from sleeping with Linux under aggressive power saving settings.

Blog post
Mar 5, 2021

Automatically generated API tests with Clojure and Reitit

Is your entire API tested? Maybe you should test that.

YouTube
Oct 22, 2020

Parsing Is Validation (YouTube)

Is it possible to easily verify that you have validated user input? Parse the input to find out!

Blog post
Jul 31, 2020

Inverse Kinematics with Python

Inverse kinematics is a method for calculating how a limb should be positioned in order to touch some point. It's surprisingly simple!

Blog post
Mar 27, 2020

Simulating a pandemic with Elixir

Wash your hands! Just how many deaths can you prevent with this simple trick? Take a look with this Elixir-based pandemic simulator.

Blog post
Nov 21, 2019

Enforcing database transactions with Rust

Rust's ownership model enables enforcing the use of database transactions, while still allowing single queries without transactions.

Blog post
Sep 6, 2018

Fullstack shared typed API with TypeScript

TypeScript makes it possible to share type information between the frontend and the backend. Here's how to use it to ensure consistent API calls between the frontend and the backend.

Copyright (c) 2024 Jaakko Hannikainen