A big build day, almost all of it at sea — figuratively.
The center of gravity was harbor-vessel-tracking, a new learning project that went from idea to working system fast: a fetcher for Denmark’s public AIS ship-position dumps, ~620 harbor geofences pulled from OpenStreetMap, visit detection in PostGIS, and a live map showing which vessels call at which harbors. Then reality pushed back. Harbor assignment in the database was unacceptably slow, so it moved into plain Python. The database nearly filled the system disk and got relocated. Two slow track queries managed to take the whole map API down for a minute, which forced a hardening pass. And the first version of vessel tracks jumped harbor to harbor, so ingest now keeps a downsampled open-water trail — tracks finally follow real sea routes. The outbound links pivoted twice too, ending with VesselFinder primary and MarineTraffic pointing at a map position.
The ideas repo logged the orchestration around all this, including an honest misdiagnosis: two killed jobs were first blamed on the Mac going to sleep, then correctly traced to the harness aborting them. Also there: cm93-to-mvt, a chart-conversion effort in maracaibo-charts that ports OpenCPN’s CM93 decoder to Python and renders vector tiles. I closed it as a fallback-only tool, then reopened it the same day for a full-world, restart-proof grind across 131 regions. It’s running.
Smaller stops: on Maracaibo, starboard engine telemetry had silently never logged because of phantom data paths — fixed, both engines now log independently. A Wine App got its scheduling docs corrected after macOS permissions blocked the obvious cron approach. signalk-alpicool swapped its Bluetooth library to clear security advisories. foreman gained a rule born from pain — verify a job actually fires at handover, after one died right there and monitoring caught it late. The Cloudy Brain took its nightly content commit.
Tonight: the harbor map is live and hardened, the world chart grind is churning, and the backfill keeps rolling.