41554 blogs · [ { "id": "01a08746-efbd-705a-936b-80a15df4ed31", "title": "Live image/video translation", "url": "https://blog.davidv.dev/posts/mobile-translator-video/", "published_at": "2026-06-11T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a15e09fb97", "title": "Improving OCR quality on the translator", "url": "https://blog.davidv.dev/posts/mobile-translator-ppocr/", "published_at": "2026-05-24T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a15ef96a4d", "title": "Building extensions into libpostgres", "url": "https://blog.davidv.dev/posts/postgres-extensions/", "published_at": "2025-12-15T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a15f662eb4", "title": "Postgres server as a library", "url": "https://blog.davidv.dev/posts/postgres-library/", "published_at": "2025-12-08T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a15fc8d8fa", "title": "Geo-distributed blog for $7/mo", "url": "https://blog.davidv.dev/posts/geo-distributed-blog/", "published_at": "2025-10-29T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a160b14461", "title": "Reverse engineering a basic gym app", "url": "https://blog.davidv.dev/posts/trainmore-re/", "published_at": "2025-07-22T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16198851d", "title": "Adding OCR support to the local translator", "url": "https://blog.davidv.dev/posts/mobile-translator-ocr/", "published_at": "2025-07-18T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1628cd5e0", "title": "Using local translation models on Android", "url": "https://blog.davidv.dev/posts/mobile-translator/", "published_at": "2025-02-01T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1629797bb", "title": "Making a client side IPVS-based load balancer", "url": "https://blog.davidv.dev/posts/ipvs-lb/", "published_at": "2024-12-29T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16352cee0", "title": "Spawning VMs for unreasonable workloads", "url": "https://blog.davidv.dev/posts/abusing-firecracker/", "published_at": "2024-09-30T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a163753197", "title": "Booting x86-64: from firmware to PID1", "url": "https://blog.davidv.dev/posts/booting-x86-64/", "published_at": "2024-08-24T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a164186163", "title": "A skeptic's first contact with Kubernetes", "url": "https://blog.davidv.dev/posts/first-contact-with-k8s/", "published_at": "2024-07-12T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a164c3c9b4", "title": "Learning about PCI-e: Implementing an option ROM", "url": "https://blog.davidv.dev/posts/pcie-option-rom/", "published_at": "2024-06-03T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16583e7b7", "title": "Learning about PCI-e: Driver & DMA", "url": "https://blog.davidv.dev/posts/pcie-driver-dma/", "published_at": "2024-05-24T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1661e0492", "title": "Learning about PCI-e: Emulating a custom device", "url": "https://blog.davidv.dev/posts/learning-pcie/", "published_at": "2024-05-05T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a167123d4c", "title": "Investigating crashes on self-modifying code", "url": "https://blog.davidv.dev/posts/self-modifying-code-crashes/", "published_at": "2024-03-27T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1679f0478", "title": "Exploring HUB75", "url": "https://blog.davidv.dev/posts/exploring-hub75/", "published_at": "2024-03-19T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1683c1962", "title": "Homelab backup LTE connection", "url": "https://blog.davidv.dev/posts/homelab-backup-lte-connection/", "published_at": "2024-03-14T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a168d5d5a9", "title": "Minimizing Linux boot times", "url": "https://blog.davidv.dev/posts/minimizing-linux-boot-times/", "published_at": "2024-02-04T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16927af64", "title": "Running a cross-architecture Nomad cluster", "url": "https://blog.davidv.dev/posts/cross-arch-nomad/", "published_at": "2023-11-11T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16a1c5d00", "title": "Spicing up a robot vacuum", "url": "https://blog.davidv.dev/posts/spicing-up-a-robot-vacuum/", "published_at": "2023-09-17T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16a8337a6", "title": "Writing a compiler & Lua runtime", "url": "https://blog.davidv.dev/posts/picopico-compiler-runtime/", "published_at": "2023-09-02T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16b7b98ce", "title": "\"strict mode\" Ansible", "url": "https://blog.davidv.dev/posts/strict-mode-ansible/", "published_at": "2023-08-18T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16bd59a5d", "title": "Rust's Default in Python", "url": "https://blog.davidv.dev/posts/rusts-default-in-python/", "published_at": "2023-08-17T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16c2f3aba", "title": "Cursing a process' vDSO for time hacking", "url": "https://blog.davidv.dev/posts/cursing-a-process-vdso-for-time-hacking/", "published_at": "2022-11-29T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16cceaf87", "title": "Pico8 performance", "url": "https://blog.davidv.dev/posts/pico8-console-part-2-performance/", "published_at": "2022-07-24T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16d9d5dfb", "title": "Making a handheld Pico8 console", "url": "https://blog.davidv.dev/posts/making-a-handheld-pico8-console-part-1/", "published_at": "2022-07-23T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16de2ca63", "title": "Measuring keyboard to display latency", "url": "https://blog.davidv.dev/posts/measuring-keyboard-to-display-latency/", "published_at": "2022-07-08T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16de9d52d", "title": "Building a GTK based mobile app", "url": "https://blog.davidv.dev/posts/building-a-gtk-based-mobile-app/", "published_at": "2021-04-16T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16e3d1fce", "title": "Docker-based images on baremetal", "url": "https://blog.davidv.dev/posts/docker-based-images-on-baremetal/", "published_at": "2021-01-22T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16ed33a5e", "title": "Building an MQTT client for the Kindle", "url": "https://blog.davidv.dev/posts/building-an-mqtt-client-for-the-kindle/", "published_at": "2021-01-06T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a16fcc4ef3", "title": "Cross compiling for OpenWRT platforms", "url": "https://blog.davidv.dev/posts/cross-compiling-for-openwrt-platforms/", "published_at": "2020-12-29T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1702f6e44", "title": "Reverse engineering the Bose QC35 bluetooth protocol", "url": "https://blog.davidv.dev/posts/reverse-engineering-the-bose-qc35-bluetooth-protocol/", "published_at": "2020-01-09T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a170b52c77", "title": "Creating a golden CentOS image", "url": "https://blog.davidv.dev/posts/creating-a-golden-centos-image/", "published_at": "2019-12-23T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1713e1ef6", "title": "Flashing Linux disk images from an initramfs", "url": "https://blog.davidv.dev/posts/flashing-linux-disk-images-from-an-initramfs/", "published_at": "2019-12-21T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a171fe1659", "title": "Revamping an old tv as a gift", "url": "https://blog.davidv.dev/posts/revamping-an-old-tv-as-a-gift/", "published_at": "2019-10-13T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a17214e464", "title": "Bookworm - Utility to download books via IRC", "url": "https://blog.davidv.dev/posts/bookworm---utility-to-download-books-via-irc/", "published_at": "2019-10-12T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a172485474", "title": "BSD inspired network setup", "url": "https://blog.davidv.dev/posts/bsd-inspired-network-setup/", "published_at": "2019-09-21T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1725ed5a3", "title": "Messing up backups", "url": "https://blog.davidv.dev/posts/messing-up-backups/", "published_at": "2019-08-03T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a173180c43", "title": "Simplifying the IOT framework's API", "url": "https://blog.davidv.dev/posts/simplifying-the-iot-frameworks-api/", "published_at": "2019-07-10T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1731d5237", "title": "Logging and remote debugging on the IOT house", "url": "https://blog.davidv.dev/posts/logging-and-remote-debugging-on-the-iot-house/", "published_at": "2019-07-05T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1738ad73d", "title": "Extending the capabilities of dumb devices", "url": "https://blog.davidv.dev/posts/extending-the-capabilities-of-dumb-devices/", "published_at": "2019-07-05T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a173c62cc1", "title": "Automated Debian install", "url": "https://blog.davidv.dev/posts/automated-debian-install/", "published_at": "2019-06-29T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a174005b65", "title": "Integrating a Kindle into house automation", "url": "https://blog.davidv.dev/posts/integrating-a-kindle-into-house-automation/", "published_at": "2018-12-14T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1747c1210", "title": "Rewriting history on Firefox to get reddit's old UI back", "url": "https://blog.davidv.dev/posts/rewriting-history-on-firefox-to-get-reddits-old-ui-back/", "published_at": "2018-11-17T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a174fd8570", "title": "OTA updates for the IOT house", "url": "https://blog.davidv.dev/posts/ota-updates-for-the-iot-house/", "published_at": "2018-08-08T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a175ca2628", "title": "IOT house with Sonoff and MicroPython", "url": "https://blog.davidv.dev/posts/iot-house-with-sonoff-and-micropython/", "published_at": "2018-08-05T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1760537e6", "title": "Segregating my home network", "url": "https://blog.davidv.dev/posts/network-update-part-3-network-segregation/", "published_at": "2018-05-19T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a176b947c7", "title": "Monitoring my home network", "url": "https://blog.davidv.dev/posts/network-update-part-2-monitoring-the-network-with-netflow-influxdb-and-grafana/", "published_at": "2018-05-18T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a176c2ad21", "title": "3D printer woes", "url": "https://blog.davidv.dev/posts/3d-printer-woes/", "published_at": "2018-05-01T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a17799ff08", "title": "Custom router with espressobin", "url": "https://blog.davidv.dev/posts/network-update-part-1-custom-router-with-espressobin/", "published_at": "2018-04-29T22:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a177f02629", "title": "Hacking the HG659", "url": "https://blog.davidv.dev/posts/hacking-the-hg659/", "published_at": "2018-03-09T23:00:00+00:00" }, { "id": "01a08746-efbd-705a-936b-80a1789ccbb5", "title": "GPU Passthrough in Debian", "url": "https://blog.davidv.dev/posts/gpu-passthrough-in-debian/", "published_at": "2018-02-26T23:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe3614c55b5b", "title": "Debian stretch headless install", "url": "https://blog.davidv.dev/posts/debian-stretch-headless-install/", "published_at": "2018-02-23T23:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe36157b57ad", "title": "Meta blogging", "url": "https://blog.davidv.dev/posts/meta-blogging/", "published_at": "2017-08-16T22:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe361617cfe0", "title": "Good luck, I'm behind 4 reverse proxies", "url": "https://blog.davidv.dev/posts/good-luck-im-behind-4-reverse-proxies/", "published_at": "2017-06-28T22:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe36167e16ce", "title": "nginx, caching and X-Accel-Redirect", "url": "https://blog.davidv.dev/posts/nginx-caching-and-x-accel-redirect/", "published_at": "2017-06-28T22:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe3616bef604", "title": "Patching over Backblaze's B2 lack of CORS", "url": "https://blog.davidv.dev/posts/patching-over-backblazes-b2-lack-of-cors/", "published_at": "2017-04-02T22:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe36170da741", "title": "Backups, Backups, Backups", "url": "https://blog.davidv.dev/posts/backups-backups-backups/", "published_at": "2017-02-22T23:00:00+00:00" }, { "id": "01a08746-efbe-7284-8150-fe36177aab9f", "title": "Migrating single disk to RAID1 on Debian", "url": "https://blog.davidv.dev/posts/migrating-single-disk-to-raid1-on-debian/", "published_at": "2016-10-18T22:00:00+00:00" } ] posts Claim your blog
Back to Mumbling about computers
Blog · corpus.blog/blogs/blog.davidv.dev/posts

Mumbling about computers

blog.davidv.dev

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016