<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Francis Sunday</title><link>https://codehakase.com/blog/</link><description>Writing by Francis Sunday — long-form posts and short notes.</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 18 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://codehakase.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>A Quine in Haskell</title><link>https://codehakase.com/shorts/a-quine-in-haskell/</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/a-quine-in-haskell/</guid><description>Writing a correct quine in Haskell</description></item><item><title>The Database Is a Cache</title><link>https://codehakase.com/blog/the-database-is-a-cache/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/the-database-is-a-cache/</guid><description>A note on file-first systems where agents derive structured state from source documents, and the database becomes a derived cache.</description></item><item><title>Bounded Execution for AI Coding Agents</title><link>https://codehakase.com/blog/bounded-execution-for-ai-coding-agents/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/bounded-execution-for-ai-coding-agents/</guid><description>How I built ALPF to give AI coding tools like Claude Code and Amp deterministic execution with guaranteed termination.</description></item><item><title>Idiomatic Haskell Refactors</title><link>https://codehakase.com/blog/idiomatic-haskell-refactors/</link><pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/idiomatic-haskell-refactors/</guid><description>A note on some interesting idiomatic Haskell patterns I've learned and enjoy using.</description></item><item><title>Parsing, Not Guessing</title><link>https://codehakase.com/shorts/parsing-not-guessing/</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/parsing-not-guessing/</guid><description>Using ASTs over regex to build a predictable, lightweight, theme-aware Markdown renderer in Go.</description></item><item><title>import "reflect"</title><link>https://codehakase.com/shorts/import-reflect/</link><pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/import-reflect/</guid><description>An attempt at a concise explanation of Go's reflection library.</description></item><item><title>Maps Don't Shrink in Go</title><link>https://codehakase.com/blog/maps-dont-shrink-in-go/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/maps-dont-shrink-in-go/</guid><description>A note on how Go maps handle memory allocation and why they don't shrink automatically.</description></item><item><title>TTYs</title><link>https://codehakase.com/shorts/ttys/</link><pubDate>Tue, 13 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/ttys/</guid><description>Learn about the `tty` command, which returns the current user's terminal name.</description></item><item><title>GADTs for Type-Level Domain Logic</title><link>https://codehakase.com/shorts/gadts-for-type-level-domain-logic/</link><pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/gadts-for-type-level-domain-logic/</guid><description>Using Generalized Algebraic Data Types (GADTs) in Haskell to encode domain-specific rules and state transitions.</description></item><item><title>Composable Parsers with Attoparsec</title><link>https://codehakase.com/shorts/composable-parsers-with-attoparsec/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/composable-parsers-with-attoparsec/</guid><description>Using Attoparsec in Haskell to create efficient and composable parsers for structured text data.</description></item><item><title>Implementing Non-Copyable Embedded Structs</title><link>https://codehakase.com/shorts/implementing-non-copyable-embedded-structs/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/implementing-non-copyable-embedded-structs/</guid><description>Using a noCopy marker in Go to prevent accidental copying of embedded structs, ensuring safe concurrent access to shared resources.</description></item><item><title>Tmux sessionizer</title><link>https://codehakase.com/shorts/tmux-sessionizer/</link><pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/tmux-sessionizer/</guid><description>Using tmux-sessionizer to manage tmux sessions efficiently, with custom modifications for a streamlined development workflow.</description></item><item><title>Scripting a self-updating Github Readme</title><link>https://codehakase.com/shorts/scripting-a-self-updating-github-readme/</link><pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/shorts/scripting-a-self-updating-github-readme/</guid><description>Automating the update of my Github profile README using Go and Github Actions to fetch blog posts and render a template.</description></item><item><title>Notes on building a coding agent</title><link>https://codehakase.com/blog/notes-on-building-a-coding-agent/</link><pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/notes-on-building-a-coding-agent/</guid><description>My personal reflections on Thorsten's Ampcode article, which reveals how building AI coding agents can be more about leveraging powerful models than complex, custom code.</description></item><item><title>Functors: Identity, Composition, and fmap</title><link>https://codehakase.com/blog/functors-identity-composition-and-fmap/</link><pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/functors-identity-composition-and-fmap/</guid><description>An introduction to Functors in Haskell, exploring how fmap allows function application within wrapped contexts like Maybe and lists.</description></item><item><title>Largest product in a series</title><link>https://codehakase.com/blog/largest-product-in-a-series/</link><pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/largest-product-in-a-series/</guid><description>A short note on my haskell solution to Project Euler's problem 8</description></item><item><title>Working with JSON in Go</title><link>https://codehakase.com/blog/working-with-json-in-go/</link><pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/working-with-json-in-go/</guid><description>A summary of the encoding/json package in Go</description></item><item><title>Enum Stringer Interface optimisation in Go</title><link>https://codehakase.com/blog/enum-stringer-interface-optimisation-in-go/</link><pubDate>Thu, 08 Apr 2021 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/enum-stringer-interface-optimisation-in-go/</guid><description>A tip on how to optimise enum stringer interface</description></item><item><title>Line Numbers In Vim</title><link>https://codehakase.com/blog/line-numbers-in-vim/</link><pubDate>Fri, 07 Feb 2020 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/line-numbers-in-vim/</guid><description>Vim’s absolute, relative and hybrid line numbers</description></item><item><title>What I Use</title><link>https://codehakase.com/blog/what-i-use/</link><pubDate>Fri, 10 Jan 2020 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/what-i-use/</guid><description>My development gear setup</description></item><item><title>Building Small Containers for Kubernetes</title><link>https://codehakase.com/blog/building-small-containers-for-kubernetes/</link><pubDate>Sat, 01 Dec 2018 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/building-small-containers-for-kubernetes/</guid><description>This article will show you how you can build small containers to make your Kubernetes deployments faster and more secure.</description></item><item><title>Building a Web App With Go, Gin and React</title><link>https://codehakase.com/blog/building-a-web-app-with-go-gin-and-react/</link><pubDate>Fri, 20 Apr 2018 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/building-a-web-app-with-go-gin-and-react/</guid><description>In this tutorial, I'll show you how easy it is to build a web application with Go and the Gin framework and add authentication to it.</description></item><item><title>The CouchDB Replicator Database - An Overview</title><link>https://codehakase.com/blog/the-couchdb-replicator-database-an-overview/</link><pubDate>Thu, 19 Apr 2018 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/the-couchdb-replicator-database-an-overview/</guid><description>An overview of how the replicator database works in CouchDB, and how to setup replication like a Boss.</description></item><item><title>Here's What's New In Go 1.10</title><link>https://codehakase.com/blog/heres-whats-new-in-go-1.10/</link><pubDate>Tue, 06 Mar 2018 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/heres-whats-new-in-go-1.10/</guid><description>The latest Go release, v1.10 arrived six months after V1.9. This release was stated in the change-logs and the Go blog. I'm gonna share some interesting changes I've found in Go 1.10 with you.</description></item><item><title>React Native vs Ionic - A Quick Comparison</title><link>https://codehakase.com/blog/react-native-vs-ionic-a-quick-comparison/</link><pubDate>Tue, 05 Dec 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/react-native-vs-ionic-a-quick-comparison/</guid><description>Demistifying the differences between Ionic and React Native</description></item><item><title>Getting Started with Go - Variables</title><link>https://codehakase.com/blog/getting-started-with-go-variables/</link><pubDate>Sun, 19 Nov 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/getting-started-with-go-variables/</guid><description>Learn about variables in Go</description></item><item><title>Golang - Getting Started, The Practical Dev</title><link>https://codehakase.com/blog/golang-getting-started-the-practical-dev/</link><pubDate>Sat, 18 Nov 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/golang-getting-started-the-practical-dev/</guid><description>Getting started with Go</description></item><item><title>Terminal for Beginners!</title><link>https://codehakase.com/blog/terminal-for-beginners/</link><pubDate>Sat, 28 Oct 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/terminal-for-beginners/</guid><description>A simple guide to getting started with the Terminal</description></item><item><title>How I Learned Golang</title><link>https://codehakase.com/blog/how-i-learned-golang/</link><pubDate>Sat, 02 Sep 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/how-i-learned-golang/</guid><description>How I started with Go Programming</description></item><item><title>JavaScript Async/Await 101</title><link>https://codehakase.com/blog/javascript-async/await-101/</link><pubDate>Sat, 12 Aug 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/javascript-async/await-101/</guid><description>A simple guide to getting started with Async and Await in JavaScript</description></item><item><title>for...in vs for...of Loops in JavaScript</title><link>https://codehakase.com/blog/for...in-vs-for...of-loops-in-javascript/</link><pubDate>Mon, 19 Jun 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/for...in-vs-for...of-loops-in-javascript/</guid><description>Differences between the for..in and for..of loops in javascript</description></item><item><title>Build your first RESTful API with Node.js</title><link>https://codehakase.com/blog/build-your-first-restful-api-with-node.js/</link><pubDate>Tue, 13 Jun 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/build-your-first-restful-api-with-node.js/</guid><description>A simple guide to building RESTful apis with Node.js</description></item><item><title>Making hakasebot - Twitter Bots 101</title><link>https://codehakase.com/blog/making-hakasebot-twitter-bots-101/</link><pubDate>Tue, 30 May 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/making-hakasebot-twitter-bots-101/</guid><description>Learn how to make a twitter bot from this guide</description></item><item><title>JavaScript Objects 101</title><link>https://codehakase.com/blog/javascript-objects-101/</link><pubDate>Thu, 25 May 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/javascript-objects-101/</guid><description>A gentle guide to getting started with JavaScript Objects</description></item><item><title>Introduction to JavaScript Promises</title><link>https://codehakase.com/blog/introduction-to-javascript-promises/</link><pubDate>Sun, 21 May 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/introduction-to-javascript-promises/</guid><description>The basics you need to know, about promises in JavaScript</description></item><item><title>Object-Oriented PHP - An Easy Approach</title><link>https://codehakase.com/blog/object-oriented-php-an-easy-approach/</link><pubDate>Wed, 17 May 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/object-oriented-php-an-easy-approach/</guid><description>A simple guide to getting started with Object Oriented PHP</description></item><item><title>Introducing Adonis Js</title><link>https://codehakase.com/blog/introducing-adonis-js/</link><pubDate>Tue, 09 May 2017 00:00:00 +0000</pubDate><guid>https://codehakase.com/blog/introducing-adonis-js/</guid><description>An introduction to the AdonisJs framework for Node.js</description></item></channel></rss>