Skip to main content

Links from my inbox 2025-11-24

· 18 min read

SQLite

2025-10-06 SQLite File Format Viewer { sqlite-internal.pages.dev }

SQLite File Format Viewer This tool helps you explore the SQLite file format internals according to the official specification. It's designed for developers and database enthusiasts who want to understand the internal structure of SQLite database files.

invisal/sqlite-internal: Playaround with SQLite internal { github.com }

image-20251005214535369 image-20251005214622301

2025-10-06 Download HeidiSQL { www.heidisql.com }

image-20251005214700240

2025-10-06 How bloom filters made SQLite 10x faster - blag { avi.im }

That’s what the researchers did! They used a Bloom filter, which is very space efficient and fits in a CPU cache line. It was also easy to implement.

They added two opcodes: Filter and FilterAdd. At the start of the join operation, we go over all the rows of dimension tables and set the bits in the Bloom filter which match the query predicate. The opcode is FilterAdd.

During the join operation, we first check if the row exists in the Bloom filter at each stage. If it does, then we do the B-tree probe. This is the Filter opcode.

2025-10-06 SQLiteStudio { sqlitestudio.pl }

image-20251005215049159

.NET

2025-07-14 Rejigs: Making Regular Expressions Human-Readable | by Omar | Jul, 2025 | Medium { medium.com }

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
var emailRegex = 
Rejigs.Create()
.AtStart()
.OneOrMore(r => r.AnyLetterOrDigit().Or().AnyOf("._%+-"))
.Text("@")
.OneOrMore(r => r.AnyLetterOrDigit().Or().AnyOf(".-"))
.Text(".")
.AnyLetterOrDigit().AtLeast(2)
.AtEnd()
.Build();

Nice! The improved version at the top looks very concise and clean! 💖 :D

C || C++

2025-11-15 Reallocate memory | Field Guide { programmers.guide }

image-20251114192325977

image-20251114192239014

2025-11-05 zserge/grayskull: A tiny, dependency-free computer vision library in C for embedded systems, drones, and robotics. { github.com }

🏰 Grayskull

Grayskull is a minimalist, dependency-free computer vision library designed for microcontrollers and other resource-constrained devices. It focuses on grayscale images and provides modern, practical algorithms that fit in a few kilobytes of code. Single-header design, integer-based operations, pure C99.

Features

  • Image operations: copy, crop, resize (bilinear), downsample
  • Filtering: blur, Sobel edges, thresholding (global, Otsu, adaptive)
  • Morphology: erosion, dilation
  • Geometry: connected components, perspective warp
  • Features: FAST/ORB keypoints and descriptors (object tracking)
  • Local binary patterns: LBP cascades to detect faces, vehicles etc
  • Utilities: PGM read/write

2025-11-05 By the power of grayscale! { zserge.com }

When people talk about computer vision, they usually think of OpenCV or deep neural networks like YOLO. But in most cases, doing computer vision implies understanding of the core algorithms, so you can use or adapt them for your own needs.

I wanted to see how far I could go by stripping computer vision down to the bare minimum: only grayscale 8-bit images, no fancy data structures, plain old C, some byte arrays and a single header file. After all, an image is just a rectangle of numbers, right?

This post is a guided tour through the algorithms behind Grayskull – a minimal computer vision library designed for resource-constrained devices.

image-20251104191746300

2025-11-02 Notes by djb on using Fil-C (2025) { cr.yp.to }

I'm impressed with the level of compatibility of the new memory-safe C/C++ compiler Fil-C (filcc, fil++). Many libraries and applications that I've tried work under Fil-C without changes, and the exceptions haven't been hard to get working.

I've started accumulating miscellaneous notes on this page regarding usage of Fil-C. My selfish objective here is to protect various machines that I manage by switching them over to code compiled with Fil-C, but maybe you'll find something useful here too.

Timings below are from a mini-PC named phoenix except where otherwise mentioned. This mini-PC has a 6-core (12-thread) AMD Ryzen 5 7640HS (Zen 4) CPU, 12GB RAM, and 36GB swap. The OS is Debian 13. (I normally run LTS software, periodically upgrading from software that's 4–5 years old such as Debian 11 today to software that's 2–3 years old such as Debian 12 today; but some of the packages included in Fil-C expect newer utilities to be available.)

Related:

  • I've posted a script to help auditors see how Fil-C differs from upstream sources (clang, glibc, ...).
  • I've posted a self-contained filian-install-compiler script (replacing the 20251029 version) to download+compile+install Fil-C on Debian 13 in what I think are Debian-appropriate locations, along with glibc and binutils compiled with Fil-C. A run took 86 minutes real time (for 477 minutes user time and 52 minutes system time).
  • I've posted the start of a filian-install-packages script to download+compile+install Debian source packages, using Fil-C as the compiler (after filian-install-compiler has finished). This script has various limitations that need fixing, but it does work for a few packages already (e.g., ./filian-install-packages bzip2), after the installation of dh-exec etc. described below.
  • I've posted a graph showing nearly 9000 microbenchmarks of Fil-C vs. clang on cryptographic software (each run pinned to 1 core on the same Zen 4). Typically code compiled with Fil-C takes between 1x and 4x as many cycles as the same code compiled with clang.

2025-11-02 FreeDOS Books { www.freedos.org }

image-20251102114516953

Teach yourself how to write programs with the C programming language. We'll start with simple command line programs, and work our way up to writing a turn-based game.

2025-10-18 EbookFoundation/free-programming-books: 📚 Freely available programming books { github.com }

https://ebookfoundation.github.io/free-programming-books/

image-20251018103813447

C

C++

2025-10-07 Heap based scheme machine. · GitHub { gist.github.com }

as a single C file

image-20251006223335240

2025-09-27 Jacob Sorber - YouTube { www.youtube.com }

image-20250927123455585

2025-09-27 Sean Barrett - YouTube { www.youtube.com }

image-20250927123557883

2025-09-05 Memory is slow, Disk is fast - Part 2 { www.bitflux.ai }

Sourcing data directly from disk IS faster than caching in memory. I brought receipts. Because hardware got wider but not faster, the old methods don't get you there. You need new tools to use what is scaling and avoid what isn't.

The article benchmarks different ways of scanning a 50 GB dataset and shows that a carefully pipelined disk I/O path can outperform naive in-memory access when using mmap and the page cache. It highlights how modern hardware favors bandwidth scaling over latency improvements, making streaming, batching, and overlapping computation with I/O essential for high throughput.

Key Takeaways:

  • In tests, mmap with page cache delivered 3.71 GB/s, SIMD unrolled loops on cached data 5.51 GB/s, disk I/O with io_uring 5.81 GB/s, and preallocated in-RAM reads 7.90 GB/s. Disk streaming with io_uring outperformed naive cached-RAM paths.
  • mmap overhead from page faults makes it slower than reading into preallocated buffers, even when data is in RAM.
  • io_uring enables deep queues, batched async I/O, and overlap of compute and fetch, making it ideal for streaming workloads.
  • Modern hardware has flat latency but rapidly increasing bandwidth, so performance comes from streaming and batching, not random fine-grained access.
  • Proper tuning matters: high queue depth, multiple workers, 16 KB aligned buffers, NUMA pinning, and RAID0 across SSDs all improved throughput.
  • Profiling showed that cached-RAM scans were compute-limited until vectorization was optimized; memory was not the bottleneck.
  • With multiple SSDs and DMA-to-cache features, disk throughput can approach or exceed naive in-memory scans, making out-of-core processing viable.
  • Best practices: build async pipelines, profile compute loops, use aligned preallocated buffers, disable unnecessary FS features, and pin workloads to NUMA domains.
  • Key advice: do not assume RAM is always faster; measure, profile, and design for streaming pipelines.

image-20250904193416094

2025-10-10 ashtonjamesd/lavandula: A fast, lightweight web framework in C for building modern web applications { github.com }

image-20251009213359084

2025-10-10 Show HN: I built a web framework in C | Hacker News { news.ycombinator.com }

faxmeyourcode 14 hours ago | next []

This is some of the cleanest, modern looking, beautiful C code I've seen in a while. I know it's not the kernel, and there's probably good reasons for lots of #ifdef conditionals, random underscored types, etc in bigger projects, but this is actually a great learning piece to teach folks the beauty of C.

I've also never seen tests written this way in C. Great work.

C was the first programming language I learned when I was still in middle/high school, raising the family PC out of the grave by installing free software - which I learned was mostly built in C. I never had many options for coursework in compsci until I was in college, where we did data structures and algorithms in C++, so I had a leg up as I'd already understood pointers. :-)

Happy to see C appreciated for what it is, a very clean and nice/simple language if you stay away from some of the nuts and bolts. Of course, the accessibility of the underlying nuts and bolts is one of the reasons for using C, so there's a balance.

2025-10-10 Love C, Hate C: Web Framework Memory Problems { alew.is }

image-20251009230900726

line [1] takes Content-Length off the http packet. This is a non validated value basically straight from the socket. line [2] allocates based on that size. Line [3] copies data into that buffer based on that size. But it's copying out of a buffer of any size. So passing a Content-Length Larger than the request sent in will start copying heap data into the parser.request.body.

Another interesting choice in this project is to make lengths signed:

😁 Fun / Retro

2025-11-15 DOOMscroll — The Game { gisnep.com }

image-20251114190733129

2025-11-04 When Stick Figures Fought - by Animation Obsessive Staff { animationobsessive.substack.com }

image-20251103200523861

2025-10-27 DOSBox SVN, CPU speed: 3000 cycles, Frameskip 0, Program: MARIO { www.myabandonware.com }

image-20251026214407849

2025-09-29 I'm Not a Robot { neal.fun }

This is a game! image-20250929162638634

2025-09-29 MitchIvin XP { mitchivin.com }

image-20250929164857194

💖 Inspiration!

2025-11-13 Visual Types { types.kitlangton.com } Typescript

image-20251112211113670

image-20251112211445604 Visual Types is an animated, semi-interactive TypeScript curriculum by Kit Langton that teaches the type system through strong visual metaphors and motion rather than walls of text. It presents itself as a "humble collection of semi-interactive TypeScript lessons", focusing on giving newcomers durable mental models for how types behave at compile time and how they relate to runtime values.

2025-11-02 raine/anki-llm: A CLI toolkit for bulk-processing and generating Anki flashcards with LLMs. { github.com }

A CLI toolkit for bulk-processing and generating Anki flashcards with LLMs. image-20251102115322004

2025-10-27 DeadStack / Technology { deadstack.net }

image-20251026212653384

2025-10-26 ZzFX - Zuper Zmall Zound Zynth {killedbyapixel.github.io}

image-20251026112018441

2025-10-19 Notepad.exe - Native macOS Code Editor for Swift & Python { notepadexe.com }

image-20251019145620354 image-20251019145638050

2025-10-11 BreadOnPenguins/scripts: my scripts! { github.com }

image-20251011001955457

image-20251011001823643

2025-10-10 mafik/keyer: Firmware & goodies for making a KEYER (one-handed chorded keyboard). { github.com }

I've built a tiny hand-held keyboard image-20251009200630319

2025-10-04 Fluid Glass { chiuhans111.github.io }

image-20251003185844250

2025-09-29 Handy { handy.computer }

image-20250929121034886 Handy is a free, open-source speech-to-text application that runs locally on your computer. It allows users to speak into any text field by pressing a keyboard shortcut, with the app instantly transcribing speech into text. Designed for accessibility, privacy, and simplicity, Handy ensures that transcription happens on-device without sending data to the cloud.

Handy is an open-source speech-to-text app that anyone can download, modify, and contribute to.

It works via a keyboard shortcut (push-to-talk) that lets users dictate text directly into any text field.

Users can customize key bindings and choose between push-to-hold or press-to-toggle transcription modes.

All transcription is processed locally, ensuring privacy since no voice data is sent to external servers.

The app emphasizes accessibility, making advanced speech tools available for free without a paywall.

2025-09-29 consumed.today { consumed.today }

image-20250929121433709

2025-09-29 Learning Persian with Anki, ChatGPT and YouTube | Christian Jauvin { cjauvin.github.io }

image-20250929121642706 The article by Christian Jauvin describes his personal journey of learning Persian (Farsi) using a combination of tools and strategies: Anki for spaced repetition, ChatGPT for clarification and reinforcement, and YouTube with browser extensions for immersive listening practice. He emphasizes creating personalized flashcards, integrating visual aids, leveraging dual subtitles, and repeating structured listening exercises to deepen both reading and auditory comprehension.Anki as the core tool: Building a continuous deck with grammar-focused phrases, often sourced from YouTube lessons, helps reinforce memory more effectively than single words.

Card variety matters: Using "basic" cards for reading practice and "basic and reversed" cards for translation fosters both recognition and recall skills.

Challenge of Persian script: Despite knowing the alphabet, different letter forms and the absence of vowels make reading slow and difficult, requiring consistent practice.

ChatGPT as a tutor: By pasting screenshots of flashcards into a ChatGPT project, Jauvin gets instant explanations and contextual clarifications, supporting faster knowledge consolidation.

Dual Subtitles extension: Watching Persian YouTube videos with synchronized English and Farsi subtitles provides both learning material for new cards and contextual understanding.

Tweaks for YouTube extension: Fine-grained playback control (1-second skips) aids focused listening and pronunciation practice.

Listening technique: Steps include slowing playback to 75%, reading subtitles first in English, listening carefully to Farsi, cross-checking with Farsi script, and repeating out loud.

Iterative repetition: Rewatching videos multiple times allows the learner to progress from partial recognition to real-time understanding, which feels both effective and motivating.

Immersion mindset: Jauvin stresses the importance of “feeling” comprehension, even when not every word is known, by aligning meaning and sound during active listening.

Practical and replicable system: The method combines accessible digital tools with structured repetition, offering a practical framework for self-directed language learners.

2025-09-29 UTF-8 Playground { utf8-playground.netlify.app }

image-20250929163930599

2025-09-29 Why our website looks like an operating system - PostHog { posthog.com }

image-20250929164413791

2025-09-29 Elements of Rust – Core Types and Traits { rustcurious.com }

image-20250929164546808