This write-up was created with AI assistance. I use this post type for projects I want to share quickly while spending most of my limited hobby time building interesting stuff. Why I publish AI-assisted posts: https://codeandlife.com/2026/07/10/introducing-ai-assisted-posts/ I have a 2 TB backup drive that was written on Linux: LUKS2 encryption, ext4 inside. Plugging it into a Mac gets you the…
This write-up was created with AI assistance. I use this post type for projects I want to share quickly while spending most of my limited hobby time building interesting stuff. Why I publish AI-assisted posts: https://codeandlife.com/2026/07/10/introducing-ai-assisted-posts/ I got to do some data recovery work with an old HDD that used to be in the office machine of a small nonprofit. The PC was…
This write-up was created with AI assistance. I use this post type for projects I want to share quickly while spending most of my limited hobby time building interesting stuff. Why I publish AI-assisted posts: https://codeandlife.com/2026/07/10/introducing-ai-assisted-posts/ I've been doing a lot of AI-assisted projects lately, and I've felt that many of them might be interesting to others as well…
This write-up was created with AI assistance. I use this post type for projects I want to share quickly while spending most of my limited hobby time building interesting stuff. Why I publish AI-assisted posts: https://codeandlife.com/2026/07/10/introducing-ai-assisted-posts/ Vibe coding has left me with quite a few small development apps. Starting any one of them is easy, but first I need to…
KittenTTS is a neat open-source text-to-speech model that packs a surprising amount of punch in sizes as low as 25 MB. It has over 11,000 stars on GitHub and for good reason — the output quality is impressive for something you can run locally. The catch? It's Python-only, needs pip install gymnastics, and you certainly can't just hand someone a link and have them try it out. The KittenTTS folks…
tl;dr Wrote a HTML based debug tool and two mini games for Novation LaunchPad, try it out on Chrome if you have one: https://tools.codeandlife.com/launchpad_test.html Longer version (templated with Claude Sonnet using the github commit): I've been thinking about getting a MIDI controller to use as a Stream Deck type of device — not to do any music stuff, but use the midi messages to automate…
I've been doing some housekeeping on my website, moving various small tools and experiments that were scattered in subfolders to a proper home at tools.codeandlife.com. While at it, I used Claude Code to give most of them a UI refresh while keeping the core functionality intact. Here's what was added: Tool Description Blackjack Trainer Practice blackjack basic strategy decisions Piano Trainer…
You might have noticed things look a bit different around here. I finally got around to refreshing the blog design with the aid of Claude Code. Thanks for drafting this post also go the same way. What's New Dark and light mode — The site now respects your system preference. No more blinding white pages at 2 AM. Retro-inspired styling — I went for a look that nods to the old-school web while…
Very small cross-advertisement: I finally got around to revamp my personal website, eliminating a lot of autobiographical jabber. Such level of detail felt very needed in 1998ish when I first did my homepage and I had followed the tradition, but now we're in a more streamlined mode. Having said that, it's still pretty verbose. Looks are now very clean, though smell AI generated (and rightly so),…
After setting up tools.codeandlife.com last week, I needed to actually create some tools for it. Simon Willison's detailed example of using LLMs for code inspired me — his https://tools.simonwillison.net/ has over 80 single-file HTML/JS apps, all built by prompting LLMs. My first tool idea: a browser-based zip image viewer. I just updated JZipView (a native C app), and thought a pure HTML/JS…
I released the JUnzip library back in 2014 as a minimalistic C library for reading ZIP files without heavy dependencies. It worked well for simple cases, but had a long-standing limitation: it couldn't handle "streaming" ZIP files where file sizes weren't known upfront. These ZIPs set bit 3 in the general purpose flag and store sizes in a "data descriptor" after the file data instead of the…
Simon Willison is writing great coverage on LLM, and his little web toolbox at https://tools.simonwillison.net/ got me inspired — use Github Pages to make any file in a tools repository automatically available. So of course I wanted one too: tools.codeandlife.com. I created https://github.com/jokkebk/tools, enabled GitHub Pages for it, and set a custom domain tools.codeandlife.com in the repo…
After about 6 years in hiatus, AI vibe coding finally enabled me to update my JavaScript-based Go board rendering library, jGoBoard. We've (meaning Claude Code and I) just rolled out version 4.0.3, and it brings a modern build stack and a bugfix to boot. Also thanks to Gemini CLI which composed the structure of this post, although the signature AI fluff needed to be heavily edited afterwards. For…
I haven't written much about the new fancy AI tools in the blog, so I thought I'll do a short writeup on a sample workflow through ChatGPT, VS Code with GitHub Copilot and Claude Code that resulted in a fully working food diary app in about one hour from the idea. The Problem Statement I decided keeping a food diary would be nice way to avoid unhealthy habits. I experimented with using ChatGPT's…
***Update 2025: I've had more trouble with this fish binding than it is worth. I've crippled my fish shell irrecoverably a couple times and had numerous issues trying to adapt for bash and zsh. I am keeping this post for reference, but I would strongly advice using a proper agentic tool nowadays with some guardrails. *** Read on if you want to read about my journey to make fish transform comment…
After a bit of AI hiatus, I noticed that llama 3.0 models were released and wanted to try the models. Sure enough, after a week the weights we re available at the official site. However, the Docker image hasn't been used in a while and I wanted to upgrade it without losing the models. There was almost no information on this available online yet, and even the ollama docker documentation is quite…
Continuing the awesome and not so unique stream of ideas on what to do with ChatGPT, here's a bit modified take to my previous post on self-running ChatGPT generated Python code. This time, let's do a shell script that takes a description of what you want as a shell command, and returns just that command. Here's how it will work: $ shai find latest 3 files 46 total tokens ls -lt | head -n 3 $ ls…
I previously covered how to run your own ChatGPT script with Python and Golang. But what if you want to create a script that automatically runs the ChatGPT generated code? That is what I will cover in this post. The idea is really simple: Create a script that asks for user input Pass the input to ChatGPT Run the ChatGPT generated code NOTE: Please read the caveats at the end of the post before…
OpenAI came out with ChatGPT, and wow, that is quite something. What is also remarkable is the load the ChatGPT client is under, and how often it is "experiencing high demand". Or just requires you to prove you are human and log in again. You can get ChatGPT Plus for $20 a month, but hey, you can also get chat experience for $0.002 per 1000 tokens. To hit that monthly fee, you need to use 10 M…
Having done 433 Mhz radio signal recording with PicoScope 2208B MSO and Raspberry Pi 4, Arduino Uno and regular USB soundcard, I figured, why not add one more to the mix: Let's try the RP2040! Compared to Arduino Uno, the RP2040 has major advantages for this project: Much higher clock frequency of 133 MHz means there's cycles to spare even at ~1 Mhz rates Relatively vast SRAM memory, 264 kB vs. 2…