Zalgorithm

Posts

Completions are enabled - Fcitx5 configuration

Fcitx5 is an input method framework…. It is the cussessor to Fcitx.

Full text search with a preprocessed query

GitHub: search_rrf_substitutions.py Related:

The code below is using the RRF approach outlined in Querying for tmux keybinding with Reciprocal Rank Fusion . What’s different from that code is that before passing the query to the search_bm25 function, the query is preproceed to remove words that are in a “stop words” list and to substitute words that are in a substitutions list.

Hugo time format

I was surprised by the way that dates get formatted on Hugo: Format returns a textual representation of the time.Time value formatted according to the layout string .

An actual example:

I wanted to change the way dates were rendered by my site’s default frontmatter template (archetypes/default.md):

date = "{{ .Date }}"

Renders the date as something like: "2026-09-14T19:14:35-07:00".

To get it to render with a yyyy-mm-dd format - excluding the time data - I updated the template to:

Querying for tmux keybinding with reciprocal rank fusion

Reciprocal rank fusion (RRF) is a method for combining multiple result sets with different relevance indicators into a single result set. RRF requires no tuning, and the different relevance indicators do not have to be related to each other to achieve high-quality results.

Select search candidates with fts5 then rank by semantic similarity

Find a tmux key binding by searching key binding descriptions with SQLite full-text search, then rank the results with semantic search.

Upsert

Insert a new row if it doesn’t already exist; update the existing row if it does.

Zalgorithm style guide

An evolving style-guide for the Zalgorithm blog.

Obsidian to Hugo Script

Copy a markdown file from Obsidian to Hugo.

Create and populate an SQLite database with Python

Create an SQLite database, and populate it from a JSON file.

Combining full text and semantic search

Possible ways of combining full text and semantic search.

Create a persistent Chroma collection

Embed the descriptions of tmux keybindings into a Chroma collection.

Create and populate a persistent FTS5 table

SQLite virtual tables aren’t necessarily temporary.

Database indexes at a high level

A database index is like a book’s index.

FTS5 indexes

An FTS5 index is a database structure that maps tokens produced from the indexed columns of an FTS5 virtual table to their occurrences in that table.

FTS5 search with English stemming and and matching

A demonstration of the use of the SQLite porter tokenizer in conjunction with the full-text-search AND operator.

Query a Chroma collection

Try getting tmux key bindings with semantic search.

Rank tmux description FTS5 matches with BM25

Search an FTS5 table, ranking the results with BM25.

Searching a Database With Fts5 Queries and English Stemming

Search with FTS5 query syntax.

The Porter Stemming Algorithm

The Porter stemming algorithm is a process for removing the commoner morphological and inflexional endings from words in English. Its main use is a part of a term normalization process that is usually done when setting up Informational Retrieval systems.

Hello Fennel!

First steps with Fennel.

Create Fts5 Virtual Table in the Sqlite Cli

FTS5 is an SQLite virtual table module that provides full-text search functionality to database applications.

Searching a database with SQL LIKE queries

Confirming I know how to query an SQLite database with Python.

SQLite FTS tokenizers

Testing tokenizers in the SQLite CLI.

SQLite virtual tables

(Briefly) what is an SQLite virtual table?

The Obsidian to Hugo Script Now Transfers Tags and Created_at Frontmatter

Small wins.

What Deserves a Note?

It’s goingg to be hit or miss for a while.

Hello World

This is a test, this is only a test…

View Unstaged and Staged Git Modifications

Git diff to the rescue!

Print a Mandelbrot set to the console

A function to generate a Mandelbrot set and print it to the console.