RSSAmplifier

Blog

mko.re

mko.reRSS feed ↗10 posts

Latest posts

age-plugin-se: Building a lean cross-platform cryptography tool (FOSDEM'25 Swift Devroom)

In this lightning talk, I show age-plugin-se in action, and touch on the steps taken to make it robust, simple, and distributable on multiple platforms (including Alpine Linux), all while keeping the dependencies (including tools) to a minimum.

Packaging Swift apps for Alpine Linux

While trying to build my Age Apple Secure Enclave plugin , a small Swift CLI app, on Alpine Linux , I realized that the Swift toolchain doesn’t run on Alpine Linux. The upcoming Swift 6 will support (cross-)compilation to a static (musl-based) Linux target, but I suspect an Alpine Linux version of Swift itself isn’t going to land soon. So, I explored some alternatives for getting my…

Generating coverage reports & badges for SwiftPM apps

The age plugin for Apple’s Secure Enclave is a small, platform-independent Swift CLI app, built using the Swift Package Manager . Because it does not use Xcode for building, you can’t use the Xcode IDE for collecting and browsing test coverage of your source files. I therefore wrote a small (self-contained, dependencyless, cross-platform) Swift script to transform SwiftPM’s raw…

A WebAssembly Core for Uxn

While watching a Strange Loop talk on concatenative programming , I learned about Uxn , a small virtual machine that runs games, editors, drawing programs, … Uxn has been ported to various platforms , including classic consoles such as the Nintendo DS, GBA, Playdate, … There also is a JavaScript version: Uxn5 . Since the Uxn5 core was a straight translation of the C reference…

Lightweight structured logging on Cloud Run using slog

In this post, I’ll walk through a small example of a Go web app for Cloud Run that uses Go 1.21’s standard library slog package for structured logging to Cloud Logging. Contrary to the documented ‘standard’ approach for logging , this example doesn’t use any third-party logging package for logging. Instead, it relies on Cloud Run’s support for ingesting…

An age plugin for Apple's Secure Enclave

For my day-to-day encryption needs, I’m a big fan of age . age is a simple, modern and secure file encryption tool, and serves as a better replacement for tools such as GnuPG. You can even use it as the backend for managing your passwords . For extra convenience and security, I wanted to be able to use my MacBook’s Secure Enclave (controlled by Touch ID) to encrypt files, so I created…

Exploring WebAssembly with Forth (and vice versa) (FOSDEM'23)

In this FOSDEM'23 talk, I dive into the details of WAForth, a tiny but complete Forth interpreter and dynamic compiler for and written in WebAssembly.

A Dynamic Forth Compiler for WebAssembly

In yet another ‘probably-useless-but-interesting’ hobby project, I wrote a Forth compiler and interpreter targeting WebAssembly. It’s written entirely in WebAssembly , and comes with a compiler that dynamically emits WebAssembly code on the fly. The entire system (including 80% of all core words) fits into a 10k (5k gzipped) WebAssembly module. You can try out the WAForth…

Ken Burns Effect Slideshows with FFMpeg

One of the first things that impressed me about Mac OS X when I first saw it was its screensaver. Instead of just showing a simple slideshow of your pictures, it actually used a Ken Burns panning and zooming effect with a fancy fading transition to make the otherwise static pictures really come to life. It always sounded like a fun project to create a standalone tool to create slideshow movies…

Universal/Isomorphic React on a Swift Backend

React ’s standard flow is to start with an empty HTML template from the server, and populate the DOM entirely on the client. Letting React pre-render the initial HTML for your app on the server before the client takes over has some advantages, though: it lets slower (mobile) clients load your app much faster, and it’s good for SEO for search engines that don’t support JavaScript.…