41554 blogs · [ { "id": "01a08783-93df-7058-94b2-d1799ddbd13c", "title": "Can AI Take a Software Engineer's Job?", "url": "https://hjr265.me/blog/can-ai-take-a-software-engineers-job/", "published_at": "2026-03-19T14:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c20fb8cbf8", "title": "My First Fully Agentic Coding Project: GitTop", "url": "https://hjr265.me/blog/building-gittop-with-agentic-coding/", "published_at": "2026-03-14T08:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c20fee8cfc", "title": "Resurrecting a 12-Year-Old Node.js Project With Claude Code", "url": "https://hjr265.me/blog/resurrecting-12-year-old-node-project-with-claude/", "published_at": "2026-03-07T11:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c210c0c09e", "title": "Ditching MongoDB Text Indexes for Edge N-Grams", "url": "https://hjr265.me/blog/ditching-mongodb-text-indexes-for-edge-n-grams/", "published_at": "2026-03-02T05:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21131cf43", "title": "Strangest AMD Ryzen 7950x Bug", "url": "https://hjr265.me/blog/strangest-amd-7950x-bug/", "published_at": "2025-03-08T13:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21133179d", "title": "All Our Customer Care Agents Are Busy at This Moment", "url": "https://hjr265.me/blog/all-our-customer-care-agents-are-busy-at-this-moment/", "published_at": "2024-09-19T13:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2119a6e8f", "title": "How Hard Can It Be: Use JavaScript to Close Web Browser Window After Print", "url": "https://hjr265.me/blog/web-browser-javascript-how-hard-can-it-be-close-window-after-print/", "published_at": "2024-05-09T06:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c211d48590", "title": "Remmina SPICE SSH Tunnel Bug and a Workaround", "url": "https://hjr265.me/blog/remmina-spice-ssh-tunnel-bug-and-a-workaround/", "published_at": "2024-01-15T13:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21227be6f", "title": "#100DaysToOffload Milestone: The 100th Blog Post", "url": "https://hjr265.me/blog/100daystooffload-milestone-100th-blog-post/", "published_at": "2023-11-23T08:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c212856363", "title": "Android Emulator Slow As a Snail; Reason BTRFS", "url": "https://hjr265.me/blog/android-emulator-slow-as-a-snail-reason-btrfs/", "published_at": "2023-11-23T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2132a0809", "title": "Check If a WireGuard Connection Is Up", "url": "https://hjr265.me/blog/check-if-a-wireguard-connection-is-up/", "published_at": "2023-11-21T09:55:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21409b7f1", "title": "Scanning a Website for Broken Links in Go", "url": "https://hjr265.me/blog/scanning-a-website-for-broken-links-in-go/", "published_at": "2023-11-20T17:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2141023a4", "title": "When Was the Last Time Technology Blew Your Mind?", "url": "https://hjr265.me/blog/when-was-the-last-time-technology-blew-your-mind/", "published_at": "2023-11-19T10:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21427060d", "title": "Go Web Server for Remotely Powering on a Desktop Computer With a Raspberry Pi", "url": "https://hjr265.me/blog/go-web-server-for-remotely-powering-on-a-desktop-computer-with-a-raspberry-pi/", "published_at": "2023-11-18T10:40:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21467c9cc", "title": "7 Useful io.Reader and io.Writer Wrappers in Go", "url": "https://hjr265.me/blog/7-useful-io-reader-and-io-writer-wrappers-in-go/", "published_at": "2023-11-17T03:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c215392dfe", "title": "Forwarding a Port Over SSH in Go", "url": "https://hjr265.me/blog/forwarding-a-port-over-ssh-in-go/", "published_at": "2023-11-16T06:50:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c215bafd54", "title": "Strange Hugo Bug and How to Work Around It", "url": "https://hjr265.me/blog/strange-hugo-bug-and-how-to-work-around-it/", "published_at": "2023-11-15T04:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c216802669", "title": "Serving JSON in Go with http.ServeContent", "url": "https://hjr265.me/blog/serving-json-in-go-with-http-servecontent/", "published_at": "2023-11-15T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21728f9c9", "title": "Editing an SVG Icon to Be Resize-friendly", "url": "https://hjr265.me/blog/editing-an-svg-icon-to-be-resize-friendly/", "published_at": "2023-11-14T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21770db0a", "title": "Testing a Go Package That Depends on Redis", "url": "https://hjr265.me/blog/testing-a-go-package-that-depends-on-redis/", "published_at": "2023-11-13T07:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c217d97009", "title": "Tracking io.Copy Progress in Go", "url": "https://hjr265.me/blog/tracking-io-copy-progress-in-go/", "published_at": "2023-11-12T03:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c217fbf0d1", "title": "Responsive Activity Chart With Chart.js", "url": "https://hjr265.me/blog/responsive-activity-chart-with-chart-js/", "published_at": "2023-11-11T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c218ba5094", "title": "Multi-threaded Downloads in Go", "url": "https://hjr265.me/blog/multi-threaded-downloads-in-go/", "published_at": "2023-11-09T08:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2196852b9", "title": "Building Advanced Search With Go and MongoDB", "url": "https://hjr265.me/blog/building-advanced-search-with-go-and-mongodb/", "published_at": "2023-11-07T07:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21a61d629", "title": "Backing up Self-hosted GitLab With Ansible", "url": "https://hjr265.me/blog/backing-up-self-hosted-gitlab-with-ansible/", "published_at": "2023-11-06T06:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21b1908ba", "title": "JavaScript window.close Won't Close the Window", "url": "https://hjr265.me/blog/javascript-window-close-wont-close-the-window/", "published_at": "2023-11-04T13:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21b58faa1", "title": "Adding Anchor Links Next to Headings in Hugo", "url": "https://hjr265.me/blog/adding-anchor-links-next-to-headings-in-hugo/", "published_at": "2023-11-03T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21c555a32", "title": "Setting Up Prometheus DNS-SRV Discovery with Terraform and DNSimple", "url": "https://hjr265.me/blog/setting-up-prometheus-dns-srv-discovery-with-terraform-and-dnsimple/", "published_at": "2023-11-02T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21cf58596", "title": "Waiting for an HTTP Service in GitLab CI/CD", "url": "https://hjr265.me/blog/waiting-for-an-http-service-in-gitlab-ci-cd/", "published_at": "2023-11-01T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21d17090d", "title": "SOCKS Proxy Over SSH", "url": "https://hjr265.me/blog/socks-proxy-over-ssh/", "published_at": "2023-10-31T07:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21e168fe0", "title": "Are There Three Types of #100DaysToOffload Challengers?", "url": "https://hjr265.me/blog/are-there-three-types-of-100daystooffload-challengers/", "published_at": "2023-10-31T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21e1a01c9", "title": "Uploading Files Over SSH in Go", "url": "https://hjr265.me/blog/uploading-files-over-ssh-in-go/", "published_at": "2023-10-29T08:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21e28912a", "title": "Steam Link Black Screen on a Retro Pie Raspberry Pi 4", "url": "https://hjr265.me/blog/steam-link-black-screen-on-a-retro-pie-raspberry-pi-4/", "published_at": "2023-10-27T02:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21ec27150", "title": "Synchronization Constructs in the Go Standard Library", "url": "https://hjr265.me/blog/synchronization-constructs-in-go-standard-library/", "published_at": "2023-10-26T09:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21efe4c51", "title": "Powering on a Desktop Computer Remotely With a Raspberry Pi", "url": "https://hjr265.me/blog/powering-on-a-desktop-computer-remotely-with-a-raspberry-pi/", "published_at": "2023-10-25T14:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c21fce22d7", "title": "Serving hjr265.me From an S3-like Bucket Using a Caddy Module", "url": "https://hjr265.me/blog/serving-hjr265-me-from-an-s3-like-bucket-using-a-caddy-module/", "published_at": "2023-10-24T09:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22072beda", "title": "Switch Monitor Input from Linux Command Line", "url": "https://hjr265.me/blog/switch-monitor-input-from-linux-command-line/", "published_at": "2023-10-24T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c220cb07d8", "title": "Making a Real-time \"Last N Days\" Leaderboard with MongoDB Aggregation Framework", "url": "https://hjr265.me/blog/making-a-real-time-last-n-days-leaderboard-with-mongodb-aggregation-framework/", "published_at": "2023-10-22T12:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c220e18725", "title": "Windows Is Weird", "url": "https://hjr265.me/blog/windows-is-weird/", "published_at": "2023-10-20T06:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c221b81ac4", "title": "Show a Log Throbber in Terminal with Go", "url": "https://hjr265.me/blog/show-a-log-throbber-in-terminal-with-go/", "published_at": "2023-10-19T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c221f16201", "title": "Not a \"High-rated\" Person", "url": "https://hjr265.me/blog/not-a-high-rated-person/", "published_at": "2023-10-18T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2222ba974", "title": "Gnome Not Reporting Bluetooth Earbuds Battery? Enable the D-Bus Interface", "url": "https://hjr265.me/blog/gnome-not-reporting-bluetooth-earbuds-battery-enable-the-dbus-interface/", "published_at": "2023-10-17T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c222acda16", "title": "#100DaysToOffload Milestone: The 67th Blog Post", "url": "https://hjr265.me/blog/100daystooffload-milestone-67th-blog-post/", "published_at": "2023-10-16T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2239bf4e8", "title": "10 Forms of Bash Shell Parameter Expansion", "url": "https://hjr265.me/blog/10-forms-of-bash-shell-parameter-expansion/", "published_at": "2023-10-15T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22410ff56", "title": "Parsing Social Media URLs in Go With Slinky", "url": "https://hjr265.me/blog/parsing-social-media-urls-in-go-with-slinky/", "published_at": "2023-10-14T04:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2241bb12e", "title": "Fixing Creality CR-10 Smart Touch Screen Orientation Issue", "url": "https://hjr265.me/blog/fixing-creality-cr-10-smart-touch-screen-orientation-issue/", "published_at": "2023-10-13T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22457cd68", "title": "Bash Script to Auto-archive Downloads by Date", "url": "https://hjr265.me/blog/bash-script-to-auto-archive-downloads-by-date/", "published_at": "2023-10-11T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c225477e59", "title": "Stardew Valley and Eric Barone", "url": "https://hjr265.me/blog/stardew-valley-and-eric-barone/", "published_at": "2023-10-10T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2261b4537", "title": "Building a Blog With Hugo", "url": "https://hjr265.me/blog/building-a-blog-with-hugo/", "published_at": "2023-10-09T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22657ebe5", "title": "Setup HTTP3 with NGINX Mainline", "url": "https://hjr265.me/blog/setup-http3-with-nginx-mainline/", "published_at": "2023-10-08T04:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c226b50b0b", "title": "Prevent Git Commits with Unformatted Go Code", "url": "https://hjr265.me/blog/prevent-git-commits-with-unformatted-go-code/", "published_at": "2023-10-07T04:10:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c226b804d0", "title": "Mattermost (or Slack) Message on SSH Login", "url": "https://hjr265.me/blog/mattermost-or-slack-message-on-ssh-login/", "published_at": "2023-10-05T09:05:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c227661b24", "title": "Allow External Keyboard to Wake Laptop", "url": "https://hjr265.me/blog/allow-external-keyboard-to-wake-laptop/", "published_at": "2023-10-04T07:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c227871ea8", "title": "Over-engineered URLs vs. A Little Script", "url": "https://hjr265.me/blog/over-engineered-urls-vs-a-little-script/", "published_at": "2023-10-04T02:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c228763bd0", "title": "Adding Icons for Go-built Windows Executable", "url": "https://hjr265.me/blog/adding-icons-for-go-built-windows-executable/", "published_at": "2023-09-30T13:55:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c228ba387d", "title": "Detect If Go Built Windows Executable Is Run From Command Prompt or File Explorer", "url": "https://hjr265.me/blog/detect-if-go-built-windows-executable-is-run-from-command-prompt-or-file-explorer/", "published_at": "2023-09-30T05:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c229448bf4", "title": "Go Tidbit: Retain Cache to Speed up Go Builds in Docker", "url": "https://hjr265.me/blog/go-tidbit-retain-cache-to-speed-up-go-builds-in-docker/", "published_at": "2023-09-29T14:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2299a77fa", "title": "Go Tidbit: Listing All Time Zones in Go", "url": "https://hjr265.me/blog/go-tidbit-listing-all-time-zones-in-go/", "published_at": "2023-09-24T13:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22a54cdca", "title": "Setup Dnsmasq and Systemd-resolved for *.local Hostnames", "url": "https://hjr265.me/blog/setup-dnsmasq-and-systemd-resolved-for-local-hostnames/", "published_at": "2023-09-23T11:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22a5d64ef", "title": "Making an Auto Scroll Bookmarklet", "url": "https://hjr265.me/blog/making-an-auto-scroll-bookmarklet/", "published_at": "2023-09-22T12:05:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22aed43a2", "title": "HTML Markup (and Hugo Shortcode) for the Modern Web", "url": "https://hjr265.me/blog/html-img-markup-for-the-modern-web/", "published_at": "2023-09-22T04:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22b22092b", "title": "Go Tidbit: Detect When the Terminal Is Resized", "url": "https://hjr265.me/blog/go-tidbit-detect-when-the-terminal-is-resized/", "published_at": "2023-09-20T15:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22b6d19ea", "title": "Go Tidbit: Putting The Terminal Into Raw Mode", "url": "https://hjr265.me/blog/go-tidbit-putting-the-terminal-into-raw-mode/", "published_at": "2023-09-19T18:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22c1f27a4", "title": "Go Tidbit: Waiting on Go Routines", "url": "https://hjr265.me/blog/go-tidbit-waiting-on-go-routines/", "published_at": "2023-09-17T15:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22cb29349", "title": "Hiding Files in ZIP Archives", "url": "https://hjr265.me/blog/hiding-files-in-zip-archives/", "published_at": "2023-09-16T04:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22cbba95a", "title": "Make a Part of Form Non-interactable With CSS", "url": "https://hjr265.me/blog/make-a-part-of-form-non-interactable-with-css/", "published_at": "2023-09-15T11:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22daae7aa", "title": "5 Upkeep Tips for Arch Linux", "url": "https://hjr265.me/blog/5-upkeep-tips-for-arch-linux/", "published_at": "2023-09-12T18:16:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22dabf7e2", "title": "Setup Multiple Passphrases for a LUKS Device", "url": "https://hjr265.me/blog/setup-multiple-passphrases-for-a-luks-device/", "published_at": "2023-09-12T18:10:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22e8b399f", "title": "Building Multi-platform Docker Image for Go Applications", "url": "https://hjr265.me/blog/building-multi-platform-docker-image-for-go-applications/", "published_at": "2023-09-10T15:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22f5d41c9", "title": "Private Cloud on a Raspberry Pi: Hardware", "url": "https://hjr265.me/blog/private-cloud-on-a-raspberry-pi-hardware/", "published_at": "2023-09-09T12:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c22f772f36", "title": "My GitHub Status Is A Clock", "url": "https://hjr265.me/blog/my-github-status-is-a-clock/", "published_at": "2023-09-08T18:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2307502c8", "title": "Pregenerate Colorful Letter Avatars With Go", "url": "https://hjr265.me/blog/pregenerate-colorful-letter-avatars-with-go/", "published_at": "2023-09-08T10:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c230f870ac", "title": "Making a Gnome Background Slide Show", "url": "https://hjr265.me/blog/making-a-gnome-background-slide-show/", "published_at": "2023-09-07T05:50:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c231a285c4", "title": "Client-side Search in Hugo with Fuse.js", "url": "https://hjr265.me/blog/client-side-search-in-hugo-with-fuse-js/", "published_at": "2023-09-06T13:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c232a20874", "title": "Shell Script for the #100DaysToOffload Challenge", "url": "https://hjr265.me/blog/shell-script-for-100daystooffload-challenge/", "published_at": "2023-09-06T04:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2339885e6", "title": "#100DaysToOffload Milestone: The 34th Blog Post", "url": "https://hjr265.me/blog/100daystooffload-milestone-34th-blog-post/", "published_at": "2023-09-03T06:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c233e983f9", "title": "Configuring Docker Health Check for Go Web Applications", "url": "https://hjr265.me/blog/configuring-docker-health-check-for-go-web-applications/", "published_at": "2023-09-02T06:45:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2344e4f96", "title": "Certbot-Name.com DNS Challenge Hooks", "url": "https://hjr265.me/blog/certbot-name-com-dns-challenge-hooks/", "published_at": "2023-09-01T11:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c234a696a9", "title": "Schedule MongoDB Backups with GitLab CI/CD", "url": "https://hjr265.me/blog/schedule-mongodb-backups-with-gitlab-ci-cd/", "published_at": "2023-08-30T09:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c234ef7c21", "title": "Spam Story 01: A Not-Quite-Ethical Hacker", "url": "https://hjr265.me/blog/spam-story-a-not-quite-ethical-hacker/", "published_at": "2023-08-29T04:20:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2355f3dcb", "title": "Makefile Recipe: Build with Docker and Export To A Gzipped Tarball", "url": "https://hjr265.me/blog/makefile-recipe-build-with-docker-and-export-gzipped-tarball/", "published_at": "2023-08-28T11:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2365db485", "title": "Presence Tracking with Redis", "url": "https://hjr265.me/blog/presence-tracking-with-redis/", "published_at": "2023-07-16T12:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c236b84358", "title": "Organizing Libvirt Hooks for Qemu", "url": "https://hjr265.me/blog/organizing-libvirt-hooks-for-qemu/", "published_at": "2023-07-16T10:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2377b9478", "title": "Hugo Footnote for the 100 Days to Offload Challenge", "url": "https://hjr265.me/blog/hugo-footnote-for-100-days-to-offload-challenge/", "published_at": "2023-07-01T13:50:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c237a9e0de", "title": "Simple Fixed-window Rate Limiter With Redis", "url": "https://hjr265.me/blog/simple-rate-limiter-with-redis/", "published_at": "2023-07-01T13:50:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c2380afae3", "title": "Makeshift CDN for Linode Object Storage with NGINX for Discourse", "url": "https://hjr265.me/blog/makeshift-cdn-for-linode-object-storage-with-nginx-for-discourse/", "published_at": "2023-06-26T03:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c238a71407", "title": "Memory Game in Less Than 100 Lines of JavaScript", "url": "https://hjr265.me/blog/memory-game-in-less-than-100-lines-of-javascript/", "published_at": "2023-06-24T07:06:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c238f9d884", "title": "Go Tidbit: Update Checker with GitHub Releases", "url": "https://hjr265.me/blog/go-tidbit-check-for-updates-with-github-releases/", "published_at": "2023-06-24T06:11:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23992c404", "title": "Generate SSH Known Hosts in Terraform", "url": "https://hjr265.me/blog/generate-ssh-known-hosts-in-terraform/", "published_at": "2023-03-24T04:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23a2a98ee", "title": "Randomised Suffix in Terraform Resource Names", "url": "https://hjr265.me/blog/randomized-suffix-in-terraform-resource-names/", "published_at": "2023-03-13T14:30:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23a93a193", "title": "Go Tidbit: Filtering Slices In-place", "url": "https://hjr265.me/blog/go-tidbit-filtering-slices-in-place/", "published_at": "2023-03-06T14:15:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23ae34aad", "title": "Making Ranked Leaderboards with MongoDB Aggregation Framework", "url": "https://hjr265.me/blog/making-ranked-leaderboards-with-mongodb-aggregation-framework/", "published_at": "2023-02-11T05:55:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23b6fa0fd", "title": "Go Tidbit: Handling Signals, Exiting Gracefully", "url": "https://hjr265.me/blog/go-tidbit-handling-signals-exitting-gracefully/", "published_at": "2023-02-09T14:25:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23c1c8d8d", "title": "Go Tidbit: Setting Variables in Go During Build", "url": "https://hjr265.me/blog/go-tidbit-setting-variables-in-go-during-build/", "published_at": "2023-02-07T16:40:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23cb80e15", "title": "Go Tidbit: Ellipsize Strings Without Breaking Unicode", "url": "https://hjr265.me/blog/go-tidbit-ellipsize-strings-without-breaking-unicode/", "published_at": "2023-02-06T15:00:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23cb8a0b3", "title": "Go Tidbit: Peek a Snippet From io.Reader", "url": "https://hjr265.me/blog/go-tidbit-peek-a-snippet-from-io-reader/", "published_at": "2023-02-05T07:40:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23d725231", "title": "Go Tidbit: How Much Was Read From io.Reader?", "url": "https://hjr265.me/blog/go-tidbit-how-much-was-read-from-io-reader/", "published_at": "2023-02-05T06:50:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23df226d4", "title": "Using Caddy to Indicate GitLab Repository for Go Module Path with Different Domains", "url": "https://hjr265.me/blog/using-caddy-to-serve-canonical-go-get-import-path/", "published_at": "2023-01-21T05:05:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23e90f1f5", "title": "Private and Secure Multi-cloud Network with WireGuard", "url": "https://hjr265.me/blog/private-secure-multi-cloud-network-wireguard/", "published_at": "2023-01-17T07:05:00+00:00" }, { "id": "01a08783-93e0-729f-bef0-d6c23ef495a2", "title": "Links for Social Network Share Dialogs", "url": "https://hjr265.me/blog/links-for-social-network-share-dialogs/", "published_at": "2023-01-07T05:20:00+00:00" } ] posts Claim your blog
Back to Blog · hjr265.me
Blog · corpus.blog/blogs/hjr265.me/posts

Blog · hjr265.me

hjr265.me

2026

2025

2024

2023