Last month I ran my very first PCR, attempting (and eventually failing) to amplify a region flanking a specific SNP. This meant designing a set of PCR primers, a process that turned out to include a surprising amount of gene-sequence copy-and-paste and waiting for NCBI's servers to run my job. Being a compulsive tool builder, I had to streamline this process, and see if it could all be done locally on my own computer.
Hi! I’m a biotechnology student at Aalborg University, after more than a decade as a startup co-founder and software developer.
I spent an hour tonight vibe coding a tiny CLI which exports iNaturalist observations to Ankivalenz-formatted Markdown, so I can easily turn my backyard observations into Anki cards.
To use it, install it via pip and run it, specifying your username:
$ pip install inaturalist-to-ankivalenz
$ inaturalist-to-ankivalenz --username vangberg
This generates an iNaturalist.md file which, if you run Ankivalenz on it, will create an Anki card for each observation, with the photo on the front and the species name on the back:

Happy exploring!
Image occlusion is a useful technique to create spaced repetition cards from an image. Cards are created by hiding different parts of the image and using the name of the hidden part as the answer, and a single image can easily result in 10s of cards. Image occlusion seems to be especially popular with medicine students who have to remember the names of endless bones (206, to be precise), but it is a technique that is useful beyond that.
I use my tool Ankivalenz to generate Anki cards from structured Markdown notes, and even though I did not know about image occlusion when I first built Ankivalenz, its syntax does a wonderful job of enabling image occlusion. Here is how to do it.
When you learn a new language, different skills must be practiced: reading, listening, speaking, writing. Writing is the one I find most difficult, involving a lot of friction and context switching. Foreign Dispatch is a new project, where I will build tools to make foreign language writing easier.
A few years ago I was introduced to the Zettelkasten note-taking method through the book "How to Take Smart Notes" by Sönke Ahrens.[^1] The very short version, as neatly summarized by Sascha Fast:[^2]
A Zettelkasten is a personal tool for thinking and writing. It has hypertextual features to make a web of thought possible. The difference to other systems is that you create a web of thoughts instead of notes of arbitrary size and form, and emphasize connection, not a collection.
Before reading Ahrens' book, I thought of myself as a compulsive note-taker, but all I had to show for it was a couple of half-empty paper notebooks and a dozen stale notes in a folder somewhere on Dropbox. It was mostly a write-and-forget kind of situation.
Armed with my newly found knowledge of how to take smart notes, I did what every technically inclined person would do, and started looking for apps that could help me write these smart notes. In my mind I was already imagining a holographic interface of some kind, but I was thoroughly disappointed. Then I did what every technically inclined person who can write code would do, and made my own note app, Skrift.
In product development our focus should be on providing value to the customer, and not just blindly piling on features to the product. A simple, if not always accurate, way of measuring whether a given feature provides value to the customer is to look at the adoption -- that is, what percentage of your users are using the feature.
In this post I will show you what my feature adoption report looks like, and how you can implement a subset of it with R, Segment and Google BigQuery.