https://www.gravatar.com/avatar/485df9434f4908b5f6fab0750c113972?s=240&d=mp

Han

Unbind: Turn PDF Books into Real EPUBs

Unbind turns hard-to-read PDF books into clean, comfortable EPUB 3 ebooks—with one command.

PDFs are wonderful—right up until you open one on an e-reader. A PDF is a stack of fixed pages designed for paper. On a six-inch screen, that often means tiny text, awkward zooming, and no control over the font. Headers and page numbers can also end up mixed into the text.

What you really want is an EPUB: text that fits your screen, fonts you can resize, and chapters you can jump to. Simply moving the content from one format to another is not enough, though. Running headers, page numbers, broken words, missing chapter links, and scanned pages can all end up in the result.

Gorae: Your AI-Powered TUI Librarian

Gorae: A terminal-first librarian built for speed, minimalism, and flow—now with a conversational AI assistant baked right in.

📣 What’s New: Gorae’s AI co-reader has grown up — persistent chat sessions, a model that can write notes into your library (tool calling), your own slash-command skills, and optional web search. Plus Markdown notes with [[wikilinks]], navigable search that opens a PDF at the exact page, and built-in themes (:theme). Bring your own model with OpenAI or run local via Ollama. Existing users: pull the latest release.

App Demo GIFs on Linux

Creating High-Quality App Demo GIFs on Linux: The Professional Workflow

Motivation

I recently built a TUI-based librarian app, namely Gorae, for managing research papers, designed specifically for Vim and terminal lovers. I needed a polished demo for the README, but simple tools like Peek fell short—they lack the editing capabilities and text overlays needed for a professional presentation.

To do the project justice, I established a robust workflow on Arch Linux using OBS Studio for capture, Kdenlive for editing, and Gifski for high-fidelity compression.

uv workspace: effective management of Python apps

Understanding uv Workspaces

The official uv website explains workspaces very clearly:

Inspired by Cargo, a uv workspace is a collection of one or more Python packages (workspace members) managed together in a single repo. Each package has its own pyproject.toml, but the workspace shares one lockfile, keeping dependencies consistent across apps and libraries. Commands like uv lock operate on the whole workspace, while uv run and uv sync default to the workspace root but can target a specific member via --package 1.

Causal Inference Part 1: Causation and Correlation

Most of the time when we say “my model learned something,” what it actually learned is a bunch of very smart correlations. If users who click A also tend to click B, or if certain pixels tend to appear together in cat photos, our models will happily latch onto those patterns and exploit them. That’s powerful—and often enough for prediction—but it’s not the same as understanding what would happen if we actually changed something in the world: raised a price, changed a policy, or shipped a new feature.

Docker Tutorial Part 1: Basics

This is part of my Docker Basics series — introductory guides to help you get started with Docker, learn key concepts, and build your skills step by step.

Docker Fundamentals (Part 1)

Software systems frequently exhibit environment-dependent behavior: dependency versions drift, filesystem paths diverge, and minor operating-system differences produce major failures. Containerization addresses this by packaging an application together with its runtime dependencies so that a single artifact executes consistently across development laptops, continuous-integration pipelines, and production clusters. Formally: same package $\rightarrow$ same behavior across environments.