<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Code and Life</title>
    <link>https://codeandlife.com/</link>
    <description>Programming, electronics and other cool tech stuff</description>
    <language>en-us</language>
    <atom:link href="https://codeandlife.com/feed.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Thu, 26 Feb 2026 12:00:00 GMT</lastBuildDate>
    <item>
      <title>Porting KittenTTS to the Browser with OpenAI Codex</title>
      <link>https://codeandlife.com/2026/02/26/kittentts-browser-port-with-codex/</link>
      <guid isPermaLink="true">https://codeandlife.com/2026/02/26/kittentts-browser-port-with-codex/</guid>
      <pubDate>Thu, 26 Feb 2026 12:00:00 GMT</pubDate>
      <description>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&#39;s Python-only, needs pip install gymnastics, and you certainly can&#39;t just hand someone a link and have them try it out. The KittenTTS folks say they have browser version planned, but I was a bit impatient and also was eager to find out if a...</description>
    </item>
    <item>
      <title>Novation Launchpad Mk3 Test Suite and Games</title>
      <link>https://codeandlife.com/2026/01/04/launchpad-mk3-test-suite/</link>
      <guid isPermaLink="true">https://codeandlife.com/2026/01/04/launchpad-mk3-test-suite/</guid>
      <pubDate>Sun, 04 Jan 2026 12:00:00 GMT</pubDate>
      <description>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&#39;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 workflows. Not having found anything compact, robust and with cool twiddly knobs, I thought to beta test...</description>
    </item>
    <item>
      <title>New Additions to tools.codeandlife.com</title>
      <link>https://codeandlife.com/2025/12/29/tools-codeandlife-com-new-additions/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/12/29/tools-codeandlife-com-new-additions/</guid>
      <pubDate>Mon, 29 Dec 2025 12:00:00 GMT</pubDate>
      <description>I&#39;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&#39;s what was added: Tool Description Blackjack Trainer Practice blackjack basic strategy decisions Piano Trainer Learn to read notes for left and right hand Wordle Solver Find possible Wordle letter orderings from...</description>
    </item>
    <item>
      <title>New Look for 2025</title>
      <link>https://codeandlife.com/2025/12/29/new-blog-look-2025/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/12/29/new-blog-look-2025/</guid>
      <pubDate>Mon, 29 Dec 2025 12:00:00 GMT</pubDate>
      <description>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&#39;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 staying readable. Monospace headers, clean lines, nothing fancy. Search — There&#39;s now a search box in the...</description>
    </item>
    <item>
      <title>JoonasPihlajamaa.com updated</title>
      <link>https://codeandlife.com/2025/12/29/joonaspihlajamaa-com-updated/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/12/29/joonaspihlajamaa-com-updated/</guid>
      <pubDate>Mon, 29 Dec 2025 12:00:00 GMT</pubDate>
      <description>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&#39;re in a more streamlined mode. Having said that, it&#39;s still pretty verbose. Looks are now very clean, though smell AI generated (and rightly so), but it&#39;s not a heavy traffic site and most readers will miss the point, so I&#39;ll let it stand. It&#39;s...</description>
    </item>
    <item>
      <title>First Tools on tools.codeandlife.com: AI-Generated Zip Image Viewers</title>
      <link>https://codeandlife.com/2025/12/17/tools-codeandlife-com-first-tools/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/12/17/tools-codeandlife-com-first-tools/</guid>
      <pubDate>Wed, 17 Dec 2025 12:00:00 GMT</pubDate>
      <description>After setting up tools.codeandlife.com last week, I needed to actually create some tools for it. Simon Willison&#39;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 version would be a nice complement. Two AI-Generated Viewers I had both Claude Opus 4.5 and ChatGPT 5.2...</description>
    </item>
    <item>
      <title>JUnzip and JZipView Updated After Almost 10 Years</title>
      <link>https://codeandlife.com/2025/12/16/junzip-and-jzipview-updated/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/12/16/junzip-and-jzipview-updated/</guid>
      <pubDate>Tue, 16 Dec 2025 12:00:00 GMT</pubDate>
      <description>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&#39;t handle &amp;quot;streaming&amp;quot; ZIP files where file sizes weren&#39;t known upfront. These ZIPs set bit 3 in the general purpose flag and store sizes in a &amp;quot;data descriptor&amp;quot; after the file data instead of the header. I was not aware of this exact nature of the problem until last week, just that...</description>
    </item>
    <item>
      <title>Building my own tools site (and the one dumb DNS gotcha)</title>
      <link>https://codeandlife.com/2025/12/13/tools-codeandlife-com-github-pages-opalstack-dns/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/12/13/tools-codeandlife-com-github-pages-opalstack-dns/</guid>
      <pubDate>Sat, 13 Dec 2025 12:00:00 GMT</pubDate>
      <description>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 settings. GitHub does the rest: deploy on push, serve static HTML. This should be plenty for one page...</description>
    </item>
    <item>
      <title>JGoBoard Gets a Modern Makeover: Version 4.0.3 Released with Vite, Bug Fixes, and AI Help!</title>
      <link>https://codeandlife.com/2025/11/11/jgoboard-modern-makeover-v4-0-3/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/11/11/jgoboard-modern-makeover-v4-0-3/</guid>
      <pubDate>Tue, 11 Nov 2025 12:00:00 GMT</pubDate>
      <description>After about 6 years in hiatus, AI vibe coding finally enabled me to update my JavaScript-based Go board rendering library, jGoBoard. We&#39;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 those unfamiliar, jGoBoard is a library designed to make rendering Go boards (gobans) in your web...</description>
    </item>
    <item>
      <title>Vibe coding a food diary bot in one hour</title>
      <link>https://codeandlife.com/2025/10/15/vibe-coding-food-diary-bot-in-one-hour/</link>
      <guid isPermaLink="true">https://codeandlife.com/2025/10/15/vibe-coding-food-diary-bot-in-one-hour/</guid>
      <pubDate>Wed, 15 Oct 2025 12:00:00 GMT</pubDate>
      <description>I haven&#39;t written much about the new fancy AI tools in the blog, so I thought I&#39;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&#39;s vision capabilities some time ago to do calorie estimates, and that worked pretty well, so I thought...</description>
    </item>
    <item>
      <title>Turn Comments into Fish Shell Commands with OpenAI</title>
      <link>https://codeandlife.com/2024/12/09/turn-comments-into-fish-shell-commands-with-openai/</link>
      <guid isPermaLink="true">https://codeandlife.com/2024/12/09/turn-comments-into-fish-shell-commands-with-openai/</guid>
      <pubDate>Mon, 09 Dec 2024 12:00:00 GMT</pubDate>
      <description>***Update 2025: I&#39;ve had more trouble with this fish binding than it is worth. I&#39;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 lines to runnable commands. Notice: I wanted to see if OpenAI canvas can do reasonable Markdown...</description>
    </item>
    <item>
      <title>How to upgrade ollama docker image without losing models</title>
      <link>https://codeandlife.com/2024/05/09/how-to-upgrade-ollama-docker-image-without-losing-models/</link>
      <guid isPermaLink="true">https://codeandlife.com/2024/05/09/how-to-upgrade-ollama-docker-image-without-losing-models/</guid>
      <pubDate>Thu, 09 May 2024 12:00:00 GMT</pubDate>
      <description>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&#39;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 non-existent — maybe for seasoned Docker users it is obvious what needs to be done? But not for me, so...</description>
    </item>
    <item>
      <title>Linux Shell AI made easy with ChatGPT automation</title>
      <link>https://codeandlife.com/2024/02/10/linux-shell-ai-with-chatgpt/</link>
      <guid isPermaLink="true">https://codeandlife.com/2024/02/10/linux-shell-ai-with-chatgpt/</guid>
      <pubDate>Sat, 10 Feb 2024 12:00:00 GMT</pubDate>
      <description>Continuing the awesome and not so unique stream of ideas on what to do with ChatGPT, here&#39;s a bit modified take to my previous post on self-running ChatGPT generated Python code. This time, let&#39;s do a shell script that takes a description of what you want as a shell command, and returns just that command. Here&#39;s how it will work: $ shai find latest 3 files 46 total tokens ls -lt | head -n 3 $ ls -lt | head -n 3 total 1233 -rwxrwxrwx 1 root root 5505 huhti 4 2023 python-chatgpt-ai.md -rwxrwxrwx 1...</description>
    </item>
    <item>
      <title>Stop Writing Scripts: Create and automatically run ChatGPT generated Python code</title>
      <link>https://codeandlife.com/2023/04/04/stop-writing-scripts-create-and-automatically-run-chatgpt-generated-python-code/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/04/04/stop-writing-scripts-create-and-automatically-run-chatgpt-generated-python-code/</guid>
      <pubDate>Tue, 04 Apr 2023 12:00:00 GMT</pubDate>
      <description>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 using this! Calling The OpenAI API First step is simple, just call the OpenAI API with the user input....</description>
    </item>
    <item>
      <title>Use ChatGPT with golang and SvelteKit GUI, including GPT4</title>
      <link>https://codeandlife.com/2023/03/25/use-chatgpt-with-golang-and-sveltekit-gui-including-gpt4/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/03/25/use-chatgpt-with-golang-and-sveltekit-gui-including-gpt4/</guid>
      <pubDate>Sat, 25 Mar 2023 12:00:00 GMT</pubDate>
      <description>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 &amp;quot;experiencing high demand&amp;quot;. 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 tokens, which is not that far from 10 M words. That is pretty heavy use... Using OpenAI...</description>
    </item>
    <item>
      <title>Recording 433 MHz Radio signals with Seeed XIAO RP2040</title>
      <link>https://codeandlife.com/2023/02/15/recording-433-mhz-radio-signals-with-seeed-xiao-rp2040/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/02/15/recording-433-mhz-radio-signals-with-seeed-xiao-rp2040/</guid>
      <pubDate>Wed, 15 Feb 2023 12:00:00 GMT</pubDate>
      <description>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&#39;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&#39;s cycles to spare even at ~1 Mhz rates Relatively vast SRAM memory, 264 kB vs. 2 kB Native C SDK that is rather easy to work with I&#39;m using the Seeed XIAO RP2040 for this project....</description>
    </item>
    <item>
      <title>Configuring CryptoJS to Use SHA256 HMAC with PBKDF2 for Added Security</title>
      <link>https://codeandlife.com/2023/02/07/configuring-cryptojs-to-use-sha256-hmac-with-pbkdf2-for-added-security/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/02/07/configuring-cryptojs-to-use-sha256-hmac-with-pbkdf2-for-added-security/</guid>
      <pubDate>Tue, 07 Feb 2023 12:00:00 GMT</pubDate>
      <description>The security of sensitive information is of utmost importance today. One way to enhance the security of stored passwords is by using PBKDF2 with SHA256 HMAC, a cryptographic algorithm that adds an extra layer of protection if the password hashes are compromised. I covered recently how to calculate PBKDF2 yourself with Python, but today needed to do the same with Javascript. Having just tried out CryptoJS to do some AES decryption, I thought I&#39;ll try the library&#39;s PBKDF2() function as well....</description>
    </item>
    <item>
      <title>Recreating Chris Veness&#39; AES256 CTR decryption with CryptoJS for fun and profit</title>
      <link>https://codeandlife.com/2023/02/05/recreating-chris-veness-aes256-ctr-decryption-with-cryptojs-for-fun-and-profit/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/02/05/recreating-chris-veness-aes256-ctr-decryption-with-cryptojs-for-fun-and-profit/</guid>
      <pubDate>Sun, 05 Feb 2023 12:00:00 GMT</pubDate>
      <description>A quick one tonight. Having just spent enjoyable hacking time to reverse engineer Chris Veness&#39; AES 256 encryption library enough to be able to decrypt some old data I had using CryptoJS, I thought I will share it with the world to enjoy. Now Chris&#39; library is nice and simple, you can just encrypt stuff with AES 256 counter mode with a single line of code: &gt; AESEncryptCtr(&#39;Well this is fun!&#39;, &#39;password&#39;, 256) &#39;SdzeY4GBgYHDEWay4JdHr/CnwwnAoBfjQA==&#39; Now AES 256 is a super standard cipher, so it...</description>
    </item>
    <item>
      <title>Decoding 433 MHz Radio Signals with Raspberry Pi 4 and Picoscope Digital Oscilloscope</title>
      <link>https://codeandlife.com/2023/01/29/decoding-433-mhz-radio-signals-with-raspberry-pi-4-and-picoscope-digital-oscilloscope/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/01/29/decoding-433-mhz-radio-signals-with-raspberry-pi-4-and-picoscope-digital-oscilloscope/</guid>
      <pubDate>Sun, 29 Jan 2023 12:00:00 GMT</pubDate>
      <description>Finale time! After analyzing the Nexa 433 MHz smart power plug remote control signal with Arduino Uno and regular USB soundcard, it is time to try some heavier guns: Raspberry Pi 4 and PicoScope 2208B MSO. I was initially sceptical on using a Raspberry Pi for analyzing signals, due to several reasons: Most GPIO projects on RaspPi seem to use Python, which is definitely not a low-latency solution, especially compared to raw C. Having done a raw C GPIO benchmark on RaspPi in the past, the...</description>
    </item>
    <item>
      <title>Using a Soundcard as an Oscilloscope to Decode 433 MHz Smart Power Plug Remote Control Signals</title>
      <link>https://codeandlife.com/2023/01/28/using-soundcard-as-oscilloscope-to-decode-433-mhz-smart-power-plug-remote-control-signals/</link>
      <guid isPermaLink="true">https://codeandlife.com/2023/01/28/using-soundcard-as-oscilloscope-to-decode-433-mhz-smart-power-plug-remote-control-signals/</guid>
      <pubDate>Sat, 28 Jan 2023 12:00:00 GMT</pubDate>
      <description>I previously covered how to decode Nexa smart power plug remote control signals using Arduino Uno. The drawback of Arduino was the limited capture time and somewhat inaccurate timing information (when using a delay function instead of an actual hardware interrupt timer). Another way to look at signals is an oscilloscope, and a soundcard can work as a &amp;quot;poor man&#39;s oscilloscope&amp;quot; in a pinch. You wire the signal to left/right channel (you could even wire two signals at the same time) and...</description>
    </item>
  </channel>
</rss>
