temple-image

Making Laverna Anki Addon

Recently, I’ve been working on simplifying the Laverna CLI integration with Anki. What seemed challenging during the planning phase turned out to be elegant in execution. Here’s a summary of the challenges and takeaways. The Original Workflow Three months ago, I built an integration between Laverna CLI and Anki with this workflow: User downloads a custom Cloze note type (note-type.apkg) from the repository and then imports to Anki (one-time setup) User prepares CSV data in the expected format User runs Laverna CLI, which outputs enriched CSV User manually imports the CSV via Anki’s deck import tab Everything looked normal on the surface, but steps 1 and 4 were cumbersome and repetitive. Since Anki doesn’t provide an official SDK or REST API, I needed to find another approach. Step 1 and 4 were also more error prone since it contained my internal app logic. ...

December 27, 2025 · 5 min · 878 words · Talha Altinel
jellyfish-image

Anki Feature For Laverna CLI

In this post, I announce an overhaul for Laverna CLI and new version which supports the new subcommands such as run and anki. The Recap In this blog post I have introduced Laverna CLI which was a language learning tool designed to swallow Google’s speech API. It was immensely useful but it lacked some features such as Anki integration. The New Anki Integration Starting with v0.1.0, users can use the new anki command to create anki decks with laverna CLI. ...

October 8, 2025 · 4 min · 652 words · Talha Altinel
pug-image

Top 8 Underdog Linters for Go

In this post, we will go over the most unknown 8 linters that are not used by the most people. These linters overall look unimportant, however they end up winning the hearts with their humbleness. If this sounds interesting, let’s start. 8 Godox # .golangci.yaml linters-settings: godox: # Report any comments starting with keywords keywords: - TODO - BUG - FIXME - OPTIMIZE - HACK // TODO: what the hell is this // hacky logic here ❯ golangci-lint run ./... main.go:18:2: main.go:18: Line contains TODO/BUG/FIXME/OPTIMIZE/HACK: "TODO: what the hell is this" (godox) // TODO: what the hell is this Godox checks the comments and dunks a linter error if unwanted comment is written with specific keywords. I encountered this linter after an incident that caused a prod deployment blockage due to me deleting TODO and hacky code section that were passing on all tests except prod environment tests. Long story short, there was no way for me to avoid TODO section logic because my task was interferring with already written hacky solution. ...

February 6, 2025 · 8 min · 1507 words · Talha Altinel
laverna-image

A Christmas Gift for Language Learners

In this post, I announce my newest tool for language learners. As long as I am learning a new language, I plan to maintain it. What is Laverna? What does it solve? Laverna is a sleek command-line tool that transforms text into spoken audio. All it needs is a config file to read. Whether you’re practicing Thai greetings, perfecting your Japanese pronunciation, or working on English phrases, Laverna can boost your productivity when you want to store individual language audios. ...

December 24, 2024 · 2 min · 232 words · Talha Altinel
turtle-slow-performance

Catching Slow Go Tests

The Problem Hello, in this short and sweet post, I will show a handy bash script to catch slow go tests based on their durations and their go cache status, but first we need to define the problem. Our current problem is when I run go test -v ./... we get simply huge output that is overwhelming with subtest outputs as well as t.Parallel pauses/continues. Plus, my inner OCD strikes when some things are always cached and some things are always not cached, I could never guess why and I never have time to look at plain log that has 1 million lines. ...

November 8, 2024 · 4 min · 656 words · Talha Altinel