RSSAmplifier

Blog

BirkeyCo

BirkeyCo

birkey.coRSS feed ↗40 posts

Latest posts

OneLoop: Local First Coding agent written in Rust with nix tooling

I have been working on my own personal coding agent for the last few months. As a matter of fact, my initial commit is on 18th of April 2026 and it went through quite a number of iterations. The git history is quite telling about my experimentation of features such as auto compacting, memory, and multi-model debate/consensus/judgment etc. It supported a few big name model providers on top of…

Engineered, Not Vibe Coded

People call coding with AI "vibe coding". Sloppy, they say. Not real engineering. I am not interested in having that debate. Whether it is good or bad in the abstract is not an interesting question to me. What interests me is what the current advances in AI, especially coding agents, actually enable: rigorous engineering. And by rigorous I do not mean lines of code. Lines of code matter, but they…

Ten Books That Shaped How I Think

I was recently asked for book recommendations and realized I have never written down the ones that actually changed how I think. Not the ones that taught me a language or a framework. The ones that shifted something in me as an engineer. Here they are, in no particular order. 1. A Philosophy of Software Design — John Ousterhout Short, opinionated, and right about most things. The core idea is Deep…

The Agent Is Not the Point

I recently finished building a coding agent 1 . Not a wrapper around someone else's. A small one, from scratch, in Rust. Its core is four tools: read a file, write a file, edit part of a file, and run a shell command. One agent loop. A session that appends linearly to a log. That is roughly it. The experience taught me something that I think the current conversation about AI in software…

Why I Love Agent Pi

Pi 1 is the first coding agent that really empowered me to morph it to fit the way my brain works, and I am genuinely excited about how malleable it is on top of a handful of primitives. Most coding agents I have tried in the past have grown in the same direction. More built-in tools. More opinionated prompts. More hidden, opaque decisions with no real visibility or control. More assumptions that…

Oneness is All You Need

Tony Hoare put the problem well when he wrote, "I conclude that there are two ways of constructing a software design." 1 One path is simplicity. The other is complexity, whose deficiencies are harder to see. That line has stayed with me for years because it names a real danger in our industry. We often mistake the absence of visible flaws for actual clarity. We add layers, libraries, frameworks,…

Emacs as a programmable workbench

What I care about in Emacs has less to do with editing text and more to do with one idea: a stable workbench becomes more valuable as the surrounding tool landscape becomes more volatile. Software engineering has never been only about typing code into files, but that is especially obvious now. More of the job is spent coordinating services, processes, tests, logs, prompts, REPLs 1 , diffs,…

Why I love NixOS

What I love about NixOS has less to do with Linux and more to do with the Nix package manager 1 . To me, NixOS is the operating system artifact of a much more important idea: a deterministic and reproducible functional package manager. That is the core of why I love NixOS. It is not distro branding that I care about. It is the fact that I can construct a whole operating system as a deterministic…

One csv parser to rule them all

One would think that parsing CSV files is pretty straightforward until you get bitten by all kinds of CSV files exists in the wild. Many years ago, I have written a small CSV reader with following requirements in mind: Should not depend on any other code other than Clojure Should allow me to control how I tokenize and transform lines Should allow me to have complete controll over delimiting…

Hacker news AI coding experience analysis

I have been using and experimenting with AI coding tools heavily for the last 3 months or so since joining Legion Health as a Founding Engineer. I was somewhat skeptical and approached using AI with suspicion since ChatGPT came out. I use Emacs as my workbench and optimized my workflow around using it as a terminal multiplexer, which naturally fits with Claude Code that I use as my main…

MCP explained with code

So you are curios about how Model Context Protocol works as a stand-alone client and server, and as a hub to provide context for LLM models to do their magic? Then read on. In this post, I am going to write about following few points: Why MCP? How does it work? What makes it worth learning and excited about? Disclaimer: This blog post is not about making a claim of its merit only without its trade…

Nix: Better way for fun and profit

Nix is started in 2003 as a research project aimed to solve the problem of reliable software deployment . The PhD thesis titled The Purely Functional Software Deployment Model proposed a novel way of building software where the final artifact is purely dependent on the inputs to the build system, which is a pure function in a mathematical sense. Regardless of where you are in your nix journey, I…

Google Bard and Emacs

After reading a Google blog post on Bard's increasing ability for reasoning about source code, I thought I would give it a try. The issue is that not like OpenAI, Bard currently does not have an http API that I can use via curl. I googled around and came across the `bard-rs` project here: https://github.com/Alfex4936/Bard-rs . So I followed the excellent instruction to get set up using bard from…

AI or not to AI

1913 Webster dictionary gives following definition to Artificial Intelligence: Artificial - 1. Made or contrived by art; produced or modified by human skill and labor, in opposition to natural; 2. Feigned; fictitious; assumed; affected; not genuine. 3. Artful; cunning; crafty. 4. Cultivated; not indigenous; not of spontaneous growth; Intelligence - 1. The act or state of knowing; the exercise of…

Atomic commits made easy

Code complexity is something we all deal with in our daily work. There are many tools to helps us manage it. One of the most important one is to make incremental changes where each change is about one and one context alone , which is a great definition of an atomic commit . I do not think I need to convince you about its benefits any further than what I already have alluded to above, which is…

Notes on StrangeLoop 2022

StrangeLoop this year made me feel almost as normal as those during pre pandemic times especially in terms of size of participants and sponsors. I actually believe it had the most sponsorship so far among those I attended over the years. One noticeable company was AWS that a friend of mine joined earlier this year. So it was pretty exciting to meet up with him there. As always, the breadths of…

Automate OpenBSD anonymous public wifi log in

Security is somewhat cat and mouse game. This does not mean however you be careless or just live with what you are handed to when it comes to protecting yourself from ill-intentioned actors out in the wild. Generally, I recommend choosing security over convenience, speed or shiny features for your offline and online computing needs. To start with, you are much better protected if you start using…

OpenBSD 7 Xfce Desktop

I blogged previously about why one should use OpenBSD and this time I would like to document steps to have a fully working Xfce Desktop with default installation. My goal is to keep the changes minimal only to absolutely required steps, nothing more nothing less. If you find steps missing (or did not work as expected) or not necessary, please drop me a line via k tuman at acm dot org so I can…

Few notes on Strange Loop 2021

This year's Strange Loop was my 4th and it was as good as it has been in the past. One of the main reason I like to go to conferences especially Strange Loop was to see beyond the state of the art transmittable knowledge, which is the untransimittable one. In this age of Google search, Stack Overflow copy/paste and Coding school driven programming, which has its own place in our industry, we need…

Why Eshell? - Part 5

One of the feature of Eshell that took me sometime to really appreciate is its built-in ability to emulate Plan9 smart Shell. It allows you to run a script or a command, run it again by just hitting enter key after you modify it, say you made a mistake or want to change part of it using Emacs editing power. You might say that you can do same thing in any terminal using your up arrow key and…

Why Eshell? - part 4

Since eshell buffer is just a regular emacs buffer, we have all of the emacs power at our disposal. In part 3 of my post, I briefly alluded to multiple terminal management by just using few lines of elisp and all without using any third party packages. I am posting the main elisp function for posterity here: (defun krun (cmd) (interactive (list (ido-completing-read "Enter cmd to run (append ##name…

Why Eshell? - Part 3

If you have been following my `Why Eshell` series, you might be wondering about interactive ido completion for eshell. Since Eshell buffer is just a regular emacs buffer, we can compose few emacs builtin functionalities to bend it to our command line work flow. Following is all the code you need. Note that it is heavily commented so you can understand what is happening. (defun kshell-with-name…

Why Eshell? - Part 2

Among many reasons of why I use eshell as my main terminal, I listed following in part 1 of my `Why Eshell?` series blog post. I am listing it here for posterity: Long running command notification and time Cross session history Interactive ido completion Unified interface (shell prompt buffer as regular emacs buffer) Plan9 Style Shell prompt (Think of it as bash REPL) Multiple terminal management…

Why Eshell? - Part 1

From time to time, I got asked why I use eshell as my main terminal. There are multiple reasons I do so and covering all of them in one post would be too long. Instead, I would like to start with a high level bullet points and address each one in a separate blog post with working code examples where I can point my coworkers and friends to them so they can pick and choose as they wish. Long running…

Let and Binding macros in Clojure

Clojure has number special forms. Among them are let and binding that are implemented as macros. For new comers to Clojure, above can be confusing to understand, which I hope to address in this blog post. If you have read "Programming Clojure" book, you might be thinking that it is easy to use them correctly considering following straightforward example: (def x 7) ;; bind the var x to the value 7…

On programming style

I am pretty excited to learn that Strange Loop is happening this year! It is one of the few technical conference that I always recommend to my fellow teammates. What is more exciting are the sessions including few keynotes. What this has to do with the topic of the blog post, which is on programming style, you say? If you squint at the sessions, the author of Exercises in Programming Style is the…

less is literally more

As an Emacs user, your muscle memories constantly remind you of certain behavior of it when you had to use other Unix tools. I was recently viewing a large file using less and searched for ErrorCode by just typing errorcode and surprised to find that it did not find any match. Then, I searched by typing ErrorCode and it did find a match containing the word, which reminded me of the fact that less…

cURl to the rescue

A web application tinkerer deals with malformed inputs, faulty networks, buggy software and everything in between. One tool that saved the day on more than one occasion is: cURL , which should be under every engineers' arsenal. Following are two examples how it proved to be just the right tool to reach for. Among many micro services writtent in Clojure, one of them exposed following logic via a…

ETC - The principle to guide engineering

If you are just curious about the ETC principle to ground all other principles of software engineering, you can scroll all the way down of this post to find out what I meant by ETC. If you know what ETC stands for and are already grounding your engineering efforts, you can just skip this post and go on with your MIT (most important task). However, If you are skeptical, which you always should be,…

One command to drive all

Over the years, I got to learn various package managers either due to tinkering with work or home infrastructure. I need to keep remembering if I am on Ubuntu, OSX or on OpenBSD if I want to install/remove/list/update packages. wouldn't it be nice if all I need to remember is just one command pkg with following neumonic options? s for searching for a package i for install a package r for removing…

Self documenting Makefile

One of the pain points of starting a new project or even hacking on existing project is to know where to start. One can start with documentation, test cases or even running it to see the logs and stacktraces (Stracktrace way is one of my favourite and you can tell a lot about code flow, organzation and you can even find un-handled bugs that way, which is a topic of its own for a blog post). Each…

OpenBSD laptop for the paranoid

Disclaimer : This is not a post about UNIX variants flame war. It is not my intention to recruit OpenBSD converts either as no one has influenced me to switch to it after 10 years of distro hopping. The main reasons I am using OpenBSD as my daily driver on both of my laptops (Thinkpad X220 and XPS 13 9365) are: Security , Stability , and Frugality . Security I am software generalist who knows…

Atreus62 - Best portable mechanical keyboard

As a professional programmer, we spend a lot of time with our keyboards. Having a good ergonomic keyboard is extremely important to avoid RSI. Since I started learning more about mechanical and ergonomic keyboards couple of years ago, I have experimented with many of them - different models, layouts, and switches. Finally, I settled down with following two: Kinesis Advantage2 Profet Atreus62…

Why Emacs

I have been thinking about writing up my experience of using Emacs and its positive influence on me as a Software Craftsman over the last 10 years or so. Over the weekend, I came across a a blog post by the CTO of a company, who put it very well that have really resonated with me. It is a great read, not too long not too short, that I strongly recommend you go ahead read and come back here to…

Thoughts on Elixir Community by a Clojure Developer

I have been building systems in Clojure/ClojureScript for the the last 7 years or so. I enjoy using it to solve day to day problems. It is still my go-to language of choice and I love the fact that it guides me to think about problem at hand with very data centric way. As a tiny example of this, consider a feature where you need to toggle the sort ordering: (defn toggle-order [order] (order {:asc…

Datafy and tap> in Clojure 1.10

I noticed couple of new features being added to Clojure 1.10. One is tap , which is added to the core ns, and the other is datafy , which is added to clojure.datafy ns. tap essentially is an atom holding set of fns of single arity, which will be asynchronously called on any value you you send via tap> . You can add a single arity fn to the tap via (add-tap f) and remove the fn via (remove-tap f ).…

Debug VoidLinux unresolvable lib issue

I have been a happy user of VoidLinux for about a year now and so far have had almost no glitches whatsoever except for updating a year old version of it installed on one of my spare laptop. The issue started as following: xbps-install -Su # resulted in following: # mozjs: broken, unresolvable shlib `libicu.so' # Transaction aborted due to unresolved shlibs. I do not now about you but I usually…

Visualize Google search results from Clojure REPL

While back when I was learning Clojure, I have written a small lib that allows me directly generate bar chart out of google search results from Clojure. I updated it with latest deps and added a fn to save the bar-chart to a png file. You can checkout the project here: https://github.com/oneness/gcount . Here is a one liner to get you going: git clone git@github.com/oneness/gcount.git && cd gcount…

VM flags from running JVM

While I was doing some JVM GC analysis recently, I got curious about the vm flags that `java` command uses by default if you do not specify it when starting your JVM. Reading up JDK docs, I found jcmd is exactly what you need: jcmd That will list all jvm instances running on your system beginning with its pids, which you can pass into jcmd with options to print VM flags like this: jcmd <pid>…

Blogging Made Simple

After taking some time off from work to focus on projects that I like to take on, I set out to find a simple way to use git and emacs workflow to start blogging again. Among plethora of options on the web, I came across this project - Org Static Blog - that I resonated with. It took me no time to set it up and start blogging. Below is my setup: (use-package org-static-blog :straight t :config ;;…