Where ink is still wet and meaning flows. Scattered fragments become insights, errors bloom into breakthroughs, and inspiration stirs in the shadows. Code is how I speak to the world; words are how I listen to myself.
This is Ink Trace—a place where thoughts settle and memories linger.
The previous post, on translating place names with Wikidata, was about how much you have to pay for trustworthy translations when no official map data exists. This post is the opposite case: Taiwan has complete, free, regularly updated official map data, so the processing can be simple to the point of being boring, and that is the best thing about it.
This post doubles as a full walkthrough of one handler. The pipeline post covered the fixed extract pipeline and the per-country insertion points. Here we look at what Taiwan actually puts into those slots.
The previous post, Five Regions, Five Strategies, noted that place names written in non-Han scripts, as in Thailand and Indonesia, can only go down the translation route, and that the translation source this project settled on is Wikidata.
What follows is not about how to query. SPARQL itself is not the hard part. The hard part is this: when Wikidata gets it wrong, there is usually no sign at all. The pipeline does not stop, the log reports no error, and the output is a perfectly valid Chinese string that simply points to the wrong place.
The first two posts covered the mechanism and the pipeline: Immich reads place names from cities500.txt, and that file is produced from national mapping data by extract and release. Technically, “how to swap the data” is a settled question. The genuinely hard part is something else: what should a foreign place name look like so that it reads naturally to a Taiwanese user?
immich-geodata-zh-tw currently handles five regions, and it gives five different answers. This post is about the criterion behind those answers.
The previous post in this series, How Reverse Geocoding Works, took apart the way Immich reads geographic data: a handful of plain text files get imported into PostgreSQL at startup, and a nearest-neighbour query resolves a place name when a photo is uploaded. Since swapping the files is enough to swap what gets displayed, the remaining question is about those “better files” themselves.
This post takes apart the immich-geodata-zh-tw pipeline, from each country’s official map data all the way to the release.tar.gz that users download.
This guide walks through deploying Ornith-1.0-35B locally with llama.cpp, wiring it into Hermes Agent, and finally grafting on an MTP head to push inference speed even higher.
Fish Speech S2-Pro is Fish Audio’s SOTA open‑source TTS model. This article records how to deploy it on an RTX 3090 (24 GB VRAM) and integrate it with Hermes Agent to create a fully local, low‑latency speech synthesis service.
Every time you upload a photo to Immich, the system automatically tags where it was taken, say “Xinyi District, Taipei” or “Shibuya, Tokyo”. That is not the work of a cloud API. It is a reverse geocoding system that runs entirely offline.
Because it runs offline, there is room for a project like immich-geodata-zh-tw to exist (for the actual installation steps, see the illustrated setup guide in the first post of this series). Immich reads place names from a handful of plain text files, so replacing those files changes the place names it displays.
This is the first technical post in the series, and it lays the groundwork: what actually happens when Immich resolves a place name, which files it reads, and what room that mechanism leaves for us to work with. Everything in the later posts, the per-country strategies, the translation work, the validation, builds on this.
This guide details how to deploy the n8n workflow automation platform using Docker Compose. It covers basic configuration, integrating Redis for caching, and setting up a reverse proxy via Nginx Proxy Manager for secure HTTPS access.
A guide to installing the latest version of 7-Zip on Debian/Ubuntu. This resolves bugs present in p7zip, such as the inability to compress large files.
This comprehensive guide demonstrates how to build a complete Docker container monitoring system using Prometheus, Node Exporter, cAdvisor, and Grafana. We’ll cover creating Docker networks, preparing Prometheus configuration, deploying monitoring services with Docker Compose, and configuring Grafana data sources and dashboards to effectively monitor Docker container performance and status.