56,966 blogs · [ { "id": "01a08776-0c92-7044-956f-fc5f6bef8392", "title": "OpenWRT on an EdgeRouter X", "url": "https://ewpratten.com/blog/erx-openwrt/", "published_at": "2026-08-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6c84c665", "title": "Friends & Fireworks", "url": "https://ewpratten.com/blog/friends-and-fireworks/", "published_at": "2026-07-05T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6d01645d", "title": "Installing Tailscale on the Ableton Move", "url": "https://ewpratten.com/blog/ableton-move-tailscale/", "published_at": "2026-05-28T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6d886a3c", "title": "Spaced Out", "url": "https://ewpratten.com/music/spaced-out/", "published_at": "2026-03-08T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6e3152cf", "title": "\"We have stratum zero at home\"", "url": "https://ewpratten.com/blog/gps-timekeeping/", "published_at": "2026-01-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6e353be7", "title": "Authenticating SSH sessions with Secure Enclave", "url": "https://ewpratten.com/blog/ssh-secure-enclave/", "published_at": "2025-12-24T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6f25a12c", "title": "Fuzix on a Raspberry Pi Pico", "url": "https://ewpratten.com/blog/fuzix-pi-pico/", "published_at": "2025-12-15T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6f295a04", "title": "My snapshot-only Minecraft server", "url": "https://ewpratten.com/blog/minecraft-snapshot-server/", "published_at": "2025-11-20T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6fbc358e", "title": "Spatial pluck experiments", "url": "https://ewpratten.com/blog/spatial-pluck-experiments/", "published_at": "2025-11-11T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6fbe3e8d", "title": "Preliminary thoughts on the Jujutsu VCS", "url": "https://ewpratten.com/blog/learning-jj/", "published_at": "2025-08-11T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f6fd6eb5e", "title": "Late June music nights", "url": "https://ewpratten.com/blog/late-june-music-nights/", "published_at": "2025-06-30T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f70217d97", "title": "Learning (the basics of) nftables", "url": "https://ewpratten.com/blog/learning-nftables/", "published_at": "2025-06-15T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f70b4edfc", "title": "Far Fetched", "url": "https://ewpratten.com/music/far-fetched/", "published_at": "2025-05-11T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7135c3d8", "title": "Implantable SSH credentials", "url": "https://ewpratten.com/blog/implant-backed-ssh/", "published_at": "2025-01-12T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f715bd3b5", "title": "Suspension", "url": "https://ewpratten.com/blog/suspension/", "published_at": "2025-01-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f720c51ea", "title": "Coercing a Magic MIFARE credential into being an iPhone-compatible NFC tag", "url": "https://ewpratten.com/blog/iphone-mifare-magic/", "published_at": "2024-12-13T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f72cd3119", "title": "Better date handling for projects migrated to Gitea", "url": "https://ewpratten.com/blog/better-dates-for-gitea-imports/", "published_at": "2024-12-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f73a17d71", "title": "The project I will never finish", "url": "https://ewpratten.com/blog/the-project-i-will-never-finish/", "published_at": "2024-11-24T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f747a2cf0", "title": "Microcosm experiments", "url": "https://ewpratten.com/blog/microcosm-experiments/", "published_at": "2024-10-21T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f74e8f5ea", "title": "Evan's Minecraft modpack for 1.21.1", "url": "https://ewpratten.com/blog/mc-modpack-1-21-1/", "published_at": "2024-09-29T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7503c7e0", "title": "Taking a radio camping", "url": "https://ewpratten.com/blog/camping-radio/", "published_at": "2024-07-26T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f752a23aa", "title": "Evan's Minecraft modpack for 1.20.6", "url": "https://ewpratten.com/blog/mc-modpack-1-20-6/", "published_at": "2024-05-26T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f76228ced", "title": "Who are the upstreams for AMPRNet?", "url": "https://ewpratten.com/blog/ampr-upstreams/", "published_at": "2024-04-27T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f76517163", "title": "Mapping the SDF Minecraft server", "url": "https://ewpratten.com/blog/sdf-minecraft-map/", "published_at": "2024-02-01T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f767d7431", "title": "Evan's Minecraft modpack for 1.20.4", "url": "https://ewpratten.com/blog/mc-modpack-1-20-4/", "published_at": "2024-01-31T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f76f91739", "title": "Digest Bot", "url": "https://ewpratten.com/blog/digest-bot/", "published_at": "2024-01-15T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f77ba3a5d", "title": "Custom lighting for my bookshelf", "url": "https://ewpratten.com/blog/shelf-lights/", "published_at": "2024-01-14T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f77c89757", "title": "A quick introduction to OpenSCAD", "url": "https://ewpratten.com/blog/intro-to-openscad/", "published_at": "2024-01-10T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f78783156", "title": "Git Aliases", "url": "https://ewpratten.com/blog/git-aliases/", "published_at": "2024-01-08T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f79212f65", "title": "Building QMK Keyboard Firmware Out of Tree", "url": "https://ewpratten.com/blog/out-of-tree-qmk/", "published_at": "2024-01-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f79711141", "title": "WineASIO, Bottles, and Ableton", "url": "https://ewpratten.com/blog/wineasio-bottles-ableton/", "published_at": "2024-01-05T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7a37fab9", "title": "Printable cable organizing clips", "url": "https://ewpratten.com/blog/cable-organizers/", "published_at": "2023-12-08T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7b237f8b", "title": "Authoring Blog Posts with Obsidian", "url": "https://ewpratten.com/blog/obsidian-blogging/", "published_at": "2023-10-20T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7b5d018a", "title": "Evan's Minecraft modpack for 1.20.1", "url": "https://ewpratten.com/blog/mc-modpack-1-20-1/", "published_at": "2023-08-10T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7beb1cca", "title": "Building a VPN with an AMPRNet BGP allocation", "url": "https://ewpratten.com/blog/ampr-vpn/", "published_at": "2023-07-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7c4293a2", "title": "Setting up a static DNF repository", "url": "https://ewpratten.com/blog/simple-dnf-repo/", "published_at": "2023-07-05T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7d28865d", "title": "Rainbow keyboard", "url": "https://ewpratten.com/blog/rainbow-keyboard/", "published_at": "2023-06-15T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7d8a72e3", "title": "Evan's Minecraft modpack for 1.20.0", "url": "https://ewpratten.com/blog/mc-modpack-1-20-0/", "published_at": "2023-06-12T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7e74db14", "title": "KALLAX headphone holder", "url": "https://ewpratten.com/blog/kallax-headphone-holder/", "published_at": "2023-06-02T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7eeac580", "title": "Spring Tracks.", "url": "https://ewpratten.com/music/spring-tracks/", "published_at": "2023-05-31T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f7fde9378", "title": "I performed a button swap on my mouse", "url": "https://ewpratten.com/blog/mouse-button-swap/", "published_at": "2023-05-01T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8011d968", "title": "Evan's Minecraft modpack for 1.19.4", "url": "https://ewpratten.com/blog/mc-modpack-1-19-4/", "published_at": "2023-04-30T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8100f29a", "title": "What are people actually doing with APRS?", "url": "https://ewpratten.com/blog/aprs-usage/", "published_at": "2023-03-23T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f82005beb", "title": "A script that hides AI topics from Hacker News", "url": "https://ewpratten.com/blog/hackernews-block-ai/", "published_at": "2023-03-21T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8279a936", "title": "Some lesser known WireGuard settings", "url": "https://ewpratten.com/blog/wireguard-options/", "published_at": "2023-02-15T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f82ed7734", "title": "Blatant self-advertising on the IPv6 Canvas", "url": "https://ewpratten.com/blog/ipv6-canvas/", "published_at": "2023-02-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f83626006", "title": "Lazy search for Mastodon accounts", "url": "https://ewpratten.com/blog/webfinger-redir/", "published_at": "2023-01-17T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f83b14354", "title": "I re-implemented ls to query the Steam API", "url": "https://ewpratten.com/blog/gamels/", "published_at": "2022-12-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f84513142", "title": "Channels", "url": "https://ewpratten.com/music/channels/", "published_at": "2022-11-25T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f854ce3e6", "title": "An analysis of personal ASNs in the wild", "url": "https://ewpratten.com/blog/personal-ases/", "published_at": "2022-10-02T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f85da4657", "title": "Summer Tracks.", "url": "https://ewpratten.com/music/summer-tracks/", "published_at": "2022-09-10T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f861c35f0", "title": "Website updates", "url": "https://ewpratten.com/blog/new-domain/", "published_at": "2022-09-09T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f865ef685", "title": "Rickrolling the internet", "url": "https://ewpratten.com/blog/rickrolling-the-internet/", "published_at": "2022-06-26T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f86a1f9d4", "title": "Meme Appreciation Month", "url": "https://ewpratten.com/blog/meme-appreciation-month/", "published_at": "2022-06-25T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f86f6a6e0", "title": "Using a Steam Controller with the Nintendo Switch", "url": "https://ewpratten.com/blog/steam-controller-switch/", "published_at": "2022-06-23T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8783f4e4", "title": "Getting Visual Paradigm to launch on Fedora 36", "url": "https://ewpratten.com/blog/fedora-36-vp/", "published_at": "2022-06-13T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8863b6ed", "title": "Field Log: First look at the NanoVNA", "url": "https://ewpratten.com/blog/nanovna/", "published_at": "2022-05-21T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f886611b6", "title": "Commit syncing across hosted GIT instances", "url": "https://ewpratten.com/blog/commit-sync/", "published_at": "2022-05-18T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f892a8e83", "title": "Space & Time, Vol. 1", "url": "https://ewpratten.com/music/space-time-v1/", "published_at": "2022-05-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f89d6e953", "title": "Making my UDM-Pro scream", "url": "https://ewpratten.com/blog/udm-fan/", "published_at": "2022-04-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8a71f0bb", "title": "Icy Shore", "url": "https://ewpratten.com/blog/icy-shore/", "published_at": "2022-03-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8a767a92", "title": "Monocular depth mapping in Blender", "url": "https://ewpratten.com/blog/monocular-blender/", "published_at": "2022-01-19T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8b3f7f60", "title": "Snow Day in Space", "url": "https://ewpratten.com/blog/snow-day-in-space/", "published_at": "2022-01-18T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8c338802", "title": "Unfinished projects and failed ideas", "url": "https://ewpratten.com/blog/unfinished-projects/", "published_at": "2022-01-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8c56e725", "title": "Scale Hop", "url": "https://ewpratten.com/music/scale-hop/", "published_at": "2022-01-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8d41aac7", "title": "A rusty guide to quaternions", "url": "https://ewpratten.com/blog/quaternions/", "published_at": "2021-12-03T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8e2c417b", "title": "Adventures in BGP: routing my own public IPv4 address space", "url": "https://ewpratten.com/blog/amprnet-bgp/", "published_at": "2021-11-14T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8ee81ffc", "title": "An overview of the tech on a complex FRC robot", "url": "https://ewpratten.com/blog/frc-tech-reference/", "published_at": "2021-09-28T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f8f89e23d", "title": "Configuring a native SSH server on Windows 10", "url": "https://ewpratten.com/blog/windows-ssh/", "published_at": "2021-07-07T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9052ab8b", "title": "Building a cheap APRS digipeater", "url": "https://ewpratten.com/blog/direwolf-aprs/", "published_at": "2021-04-20T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f90a96d4b", "title": "How I flashed QMK to my Vortex Core", "url": "https://ewpratten.com/blog/qmk-vortex-core/", "published_at": "2021-03-14T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f916db513", "title": "Mapping my friends' Minecraft server", "url": "https://ewpratten.com/blog/minecraft-map/", "published_at": "2021-02-28T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f922c9c2e", "title": "Using KBFS as a makeshift maven server", "url": "https://ewpratten.com/blog/kbfs-maven/", "published_at": "2021-02-25T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f925cd3b3", "title": "Tunneling a printer from a home network to a VPN", "url": "https://ewpratten.com/blog/printer-tunneling/", "published_at": "2021-01-16T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f934e5c5c", "title": "2020 Wrap-Up", "url": "https://ewpratten.com/blog/year-wrapup/", "published_at": "2020-12-31T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f93c06c86", "title": "How I have tweaked my Minecraft client to be 'just right'", "url": "https://ewpratten.com/blog/vanilla-plus-mods/", "published_at": "2020-12-19T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9421b1cd", "title": "Upgrading my chromebook", "url": "https://ewpratten.com/blog/galliumos/", "published_at": "2020-12-04T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9440d273", "title": "Connecting to a Minecraft server over IRC", "url": "https://ewpratten.com/blog/minecraft-irc/", "published_at": "2020-11-21T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f947d853b", "title": "My first mechanical keyboard: The Vortex Core", "url": "https://ewpratten.com/blog/vortex-core/", "published_at": "2020-11-06T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f94954722", "title": "Using Bazel to create Minecraft modpacks", "url": "https://ewpratten.com/blog/corepack-development/", "published_at": "2020-10-24T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f956cb120", "title": "Mounting Google Drive accounts as network drives", "url": "https://ewpratten.com/blog/mounting-google-drives/", "published_at": "2020-10-15T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f95cb7ad2", "title": "Reading metadata from a bitmap file", "url": "https://ewpratten.com/blog/reading-a-bitmap/", "published_at": "2020-10-01T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f96484ae4", "title": "My workflow: video conference edition", "url": "https://ewpratten.com/blog/gopro-webcam/", "published_at": "2020-09-24T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f970be424", "title": "Building a mini maven server", "url": "https://ewpratten.com/blog/ultralight-writeup/", "published_at": "2020-09-17T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f97d2780d", "title": "Integrating GitHub Codespaces with FRC", "url": "https://ewpratten.com/blog/codespaces-for-frc/", "published_at": "2020-09-10T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f980cdd94", "title": "Compiling AVR-C code with a modern build system", "url": "https://ewpratten.com/blog/bazel-and-avr/", "published_at": "2020-09-03T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f981f36d4", "title": "Taking notes with Markdown and LaTeX", "url": "https://ewpratten.com/blog/notetaking-with-latex/", "published_at": "2020-08-23T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f98397a2c", "title": "Notes from FRC: Autonomous point-to-point navigation", "url": "https://ewpratten.com/blog/drivetrain-navigation/", "published_at": "2020-08-13T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9885006e", "title": "Notes from FRC: Converting joystick data to tank-drive outputs", "url": "https://ewpratten.com/blog/joystick-to-voltage/", "published_at": "2020-08-03T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f98984cbb", "title": "Above the Thames", "url": "https://ewpratten.com/blog/above-the-thames/", "published_at": "2020-07-24T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f98b9b6dd", "title": "Two Cars", "url": "https://ewpratten.com/blog/two-cars/", "published_at": "2020-07-23T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f98e7e0f6", "title": "My Desk", "url": "https://ewpratten.com/blog/my-desk/", "published_at": "2020-07-19T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f99e1c772", "title": "Flashing code to a 32u4 chip", "url": "https://ewpratten.com/blog/32u4-upload/", "published_at": "2020-06-05T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f99f55f28", "title": "Running RoboRIO firmware inside Docker", "url": "https://ewpratten.com/blog/running-roborio-native/", "published_at": "2020-05-19T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9a585519", "title": "Ludum Dare 46: Jamming with friends", "url": "https://ewpratten.com/blog/ludumdare46/", "published_at": "2020-04-20T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9aaad411", "title": "Robot reveal: Darth Raider", "url": "https://ewpratten.com/blog/darth-raider/", "published_at": "2020-02-21T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9ac20c4e", "title": "Compiling BrainFuck with a shell script", "url": "https://ewpratten.com/blog/brainfuckinbash/", "published_at": "2020-01-20T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9ad5ea81", "title": "I used cron for the first time", "url": "https://ewpratten.com/blog/cron/", "published_at": "2019-12-11T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9b9c13b1", "title": "Programming a live robot", "url": "https://ewpratten.com/blog/realtime-robot-code/", "published_at": "2019-11-20T00:00:00+00:00" }, { "id": "01a08776-0c92-7044-956f-fc5f9c04c4e2", "title": "Using an RNN to generate Bill Wurtz notes", "url": "https://ewpratten.com/blog/billwurtz/", "published_at": "2019-10-05T00:00:00+00:00" } ] posts Claim your blog
Back to Evan Pratten
Blog · corpus.blog/blogs/ewpratten.com/posts

Evan Pratten

ewpratten.com

2026

2025

2024

2023

2022

2021

2020

2019