Skip to main content

Bank Statement Review with AI

· 5 min read
Bogdan Varlamov
Bogdan Varlamov
Technologist
Bank Statement Review with AI

The Statement Processor reads PDF bank and credit card statements, extracts every transaction, and groups them by vendor. It's finished and on GitHub under an MIT license. Building it surfaced a problem worth writing down: even on a clean, digitally-generated PDF straight from the bank, the table extraction sometimes dropped a row, usually the last one in a transaction table. A sum check that compares the extracted transactions against the total the statement already prints on itself is what made the output trustworthy.

Two Damaged HP ZBooks in a Row

· 3 min read
Bogdan Varlamov
Bogdan Varlamov
Technologist
Two Damaged HP ZBooks in a Row

Two HP ZBook units arrived damaged from shipping in a row: the first had a cracked screen, and its replacement had a screw missing from the cover. Two for two isn't the batting average anyone wants from a laptop. I ordered the ZBook with 128GB of RAM to run local AI inference experiments, and to replace an old laptop that was dying.

Wrapping Docling in a Reusable Text Extraction Pipeline

· 11 min read
Bogdan Varlamov
Bogdan Varlamov
Technologist
Wrapping Docling in a Reusable Text Extraction Pipeline

Docling already does most of what a batch text-extraction harness needs: it iterates over documents, swaps OCR backends, isolates per-document errors, and exports structured output. For the soviet.recipes project I wrap it in a thin pipeline so I can put different extraction approaches against each other on the same pages and trust the result. Docling does the extraction, but the wrapper prepares the book's curled and shadowed pages first and puts every engine behind one interface, whether it runs through Docling or bypasses it, so routing and scoring stay independent of which tool produced the text.

Testing Docling OCR on a Soviet Cookbook

· 5 min read
Bogdan Varlamov
Bogdan Varlamov
Technologist
Testing Docling OCR on a Soviet Cookbook

Docling with the EasyOCR engine extracted the Cyrillic text and page structure from a scanned Soviet cookbook, but it dropped text where the pages curved away from the camera. That data loss makes this configuration insufficient on its own for the soviet.recipes project. I tested four sample pages configured for Russian and English, using Kiro.dev to write the script.

This Is Not Bogdan

· 8 min read
Bogdan Varlamov
Bogdan Varlamov
Technologist
This Is Not Bogdan

When a prehistoric artist pressed a pigment-covered hand to a cave wall and blew color around it, something remarkable happened. The resulting outline was a declaration of presence and also an admission of absence. The handprint was not a hand. It was a trace of someone who lived, breathed, hoped, feared, hunted, loved, and eventually vanished. This gap between representation and reality has always shaped how humans express themselves.

The Treachery of Images (This is not a pipe)

René Magritte (1898–1967) — Image taken from "Approaches to Modernism". Fair use (over-50)

Magritte reminded us of the same truth much later with a pipe that "was not a pipe." His painting has become a classic example of a meta-message, a communication about communication itself. Like Alfred Korzybski's insight that "the word is not the thing" and "the map is not the territory," or Denis Diderot's literary experiment This Is Not a Story, Magritte's work highlights the fundamental gap between symbols and what they represent.

We intuitively recognize that no medium can ever contain the living substance of the person who created it. This very blog post is its own meta-message, acknowledging that these words about representation are themselves only representations, and that this post about the impossibility of digital presence is itself an attempt at digital presence.

This tension sits at the heart of every form of self expression. The medium gestures toward the self but never equals it. And yet we continue to endeavor, knowing the attempt will always fall short.