41554 blogs · [ { "id": "01a0873a-88fd-72d2-8cd5-a250e40adb56", "title": "Updating a side project with AI in 275 commits", "url": "https://benhoyt.com/writings/updating-gifty-with-ai/", "published_at": "2026-08-20T21:15:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-50880ee988aa", "title": "Fun with an indecisive AI coding agent", "url": "https://benhoyt.com/writings/indecisive-ai-agent/", "published_at": "2026-04-12T19:55:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-50880fc97b45", "title": "Every dependency you add is a supply chain attack waiting to happen", "url": "https://benhoyt.com/writings/dependencies/", "published_at": "2026-04-02T11:45:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-50881037508e", "title": "Don't fear Python subprocess or Go codegen", "url": "https://benhoyt.com/writings/jubilant/", "published_at": "2025-12-13T05:00:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-5088108de8ef", "title": "Go performance from version 1.0 to 1.22", "url": "https://benhoyt.com/writings/go-version-performance-2024/", "published_at": "2024-04-13T06:00:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-508810e49044", "title": "The One Billion Row Challenge in Go: from 1m45s to 3.4s in nine solutions", "url": "https://benhoyt.com/writings/go-1brc/", "published_at": "2024-03-03T03:00:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-5088113e6be9", "title": "Switching from S3 to Tigris on Fly.io", "url": "https://benhoyt.com/writings/flyio-and-tigris/", "published_at": "2024-02-13T09:00:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-508811d9ead8", "title": "Discussing Forth, C, CGI, Python, Go, and AWK on \"Stray Pointers\"", "url": "https://benhoyt.com/writings/stray-pointers-interview/", "published_at": "2024-02-04T01:00:00+00:00" }, { "id": "01a0873a-8938-731f-9cb9-50881219ff5e", "title": "\"Stray Pointers\" interview", "url": "https://sites.libsyn.com/481983/discussing-programming-languages-with-ben-hoyt", "published_at": "2024-01-16T04:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a2ff182d58", "title": "Using a Markov chain to generate readable nonsense with 20 lines of Python", "url": "https://benhoyt.com/writings/markov-chain/", "published_at": "2023-11-11T16:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a2ff55b0d6", "title": "How (not) to apply for a software job", "url": "https://benhoyt.com/writings/how-to-apply/", "published_at": "2023-09-26T04:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a2ffaba3ca", "title": "The AWK book's 60-line version of Make", "url": "https://benhoyt.com/writings/awk-make/", "published_at": "2023-09-10T21:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a2ffb59764", "title": "Using the WordStar diamond in 2023", "url": "https://benhoyt.com/writings/wordstar-diamond/", "published_at": "2023-08-17T00:15:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a2ffbfdd05", "title": "Name before type: why 'age int' is better than 'int age'", "url": "https://benhoyt.com/writings/name-before-type/", "published_at": "2023-08-06T20:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30011e897", "title": "The proposal to enhance Go's HTTP router", "url": "https://benhoyt.com/writings/go-servemux-enhancements/", "published_at": "2023-07-30T20:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a300705b3f", "title": "Scripting with Go: a 400-line Git client that can create a repo and push itself to GitHub", "url": "https://benhoyt.com/writings/gogit/", "published_at": "2023-07-29T04:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30077fccb", "title": "Names should be as short as possible while still being clear", "url": "https://benhoyt.com/writings/short-names/", "published_at": "2023-07-03T09:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a300a56785", "title": "Lookup Tables (Forth Dimensions XIX.3)", "url": "https://benhoyt.com/writings/forth-lookup-tables/", "published_at": "2023-07-01T10:10:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a300d9053c", "title": "For Python packages, file structure != API", "url": "https://benhoyt.com/writings/python-api-file-structure/", "published_at": "2023-06-30T10:50:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3014bebbf", "title": "Designing Pythonic library APIs", "url": "https://benhoyt.com/writings/python-api-design/", "published_at": "2023-06-18T09:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3015435ba", "title": "From Go on EC2 to Fly.io: +fun, −$9/mo", "url": "https://benhoyt.com/writings/flyio/", "published_at": "2023-02-26T21:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3024aa2fd", "title": "Code coverage for your AWK programs", "url": "https://benhoyt.com/writings/goawk-coverage/", "published_at": "2022-12-10T00:41:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3030846f7", "title": "I/O is no longer the bottleneck", "url": "https://benhoyt.com/writings/io-is-no-longer-the-bottleneck/", "published_at": "2022-11-26T09:20:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30319ce9a", "title": "microPledge: our startup that (we wish) competed with Kickstarter", "url": "https://benhoyt.com/writings/micropledge/", "published_at": "2022-11-14T08:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30337a3ec", "title": "Rob Pike's simple C regex matcher in Go", "url": "https://benhoyt.com/writings/rob-pike-regex/", "published_at": "2022-08-12T02:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a303be14bc", "title": "Tools I use to build my website", "url": "https://benhoyt.com/writings/tools-i-use-to-build-my-website/", "published_at": "2022-08-02T07:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a304016a84", "title": "Modernizing AWK, a 45-year old language, by adding CSV support", "url": "https://benhoyt.com/writings/goawk-csv/", "published_at": "2022-05-09T21:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3045df575", "title": "Prig: like AWK, but uses Go for \"scripting\"", "url": "https://benhoyt.com/writings/prig/", "published_at": "2022-02-27T17:20:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30472b874", "title": "Go performance from version 1.2 to 1.18", "url": "https://benhoyt.com/writings/go-version-performance/", "published_at": "2022-02-03T20:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30494dc0e", "title": "Optimizing GoAWK with a bytecode compiler and virtual machine", "url": "https://benhoyt.com/writings/goawk-compiler-vm/", "published_at": "2022-02-03T09:25:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a304ea3325", "title": "AWKGo, an AWK-to-Go compiler", "url": "https://benhoyt.com/writings/awkgo/", "published_at": "2021-11-21T11:10:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a305af5d23", "title": "Improving the code from the official Go RESTful API tutorial", "url": "https://benhoyt.com/writings/web-service-stdlib/", "published_at": "2021-11-16T18:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3065a3e5e", "title": "Simple Lists: a tiny to-do list app written the old-school way (server-side Go, no JS)", "url": "https://benhoyt.com/writings/simple-lists/", "published_at": "2021-10-03T18:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3070c195f", "title": "Structural pattern matching in Python 3.10", "url": "https://benhoyt.com/writings/python-pattern-matching/", "published_at": "2021-09-20T07:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30778505d", "title": "Mugo, a toy compiler for a subset of Go that can compile itself", "url": "https://benhoyt.com/writings/mugo/", "published_at": "2021-04-12T07:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30799f370", "title": "How to implement a hash table (in C)", "url": "https://benhoyt.com/writings/hash-table-in-c/", "published_at": "2021-03-26T07:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3081d53e3", "title": "Performance comparison: counting words in Python, Go, C++, C, AWK, Forth, and Rust", "url": "https://benhoyt.com/writings/count-words/", "published_at": "2021-03-15T07:30:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3090041ac", "title": "The small web is beautiful", "url": "https://benhoyt.com/writings/the-small-web-is-beautiful/", "published_at": "2021-03-01T17:50:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3090465f0", "title": "Coming in Go 1.16: ReadDir and DirEntry", "url": "https://benhoyt.com/writings/go-readdir/", "published_at": "2021-01-28T21:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a3090640b2", "title": "Fuzzing in Go", "url": "https://lwn.net/Articles/829242/", "published_at": "2020-08-24T20:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a309aa4d30", "title": "Searching code with Sourcegraph", "url": "https://lwn.net/Articles/828748/", "published_at": "2020-08-16T20:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30a93d103", "title": "Different approaches to HTTP routing in Go", "url": "https://benhoyt.com/writings/go-routing/", "published_at": "2020-07-30T20:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30b4f0b27", "title": "Go filesystems and file embedding", "url": "https://lwn.net/Articles/827215/", "published_at": "2020-07-30T12:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30c361d76", "title": "The sad, slow-motion death of Do Not Track", "url": "https://lwn.net/Articles/826575/", "published_at": "2020-07-21T23:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30c8b1dee", "title": "What's new in Lua 5.4", "url": "https://lwn.net/Articles/826134/", "published_at": "2020-07-14T23:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30c9648c8", "title": "Hugo: a static-site generator", "url": "https://lwn.net/Articles/825507/", "published_at": "2020-07-07T23:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30d92dc94", "title": "Generics for Go", "url": "https://lwn.net/Articles/824716/", "published_at": "2020-06-30T23:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30db7956c", "title": "More alternatives to Google Analytics", "url": "https://lwn.net/Articles/824294/", "published_at": "2020-06-23T23:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30e204fcf", "title": "Lightweight Google Analytics alternatives", "url": "https://lwn.net/Articles/822568/", "published_at": "2020-06-16T23:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30e6c73bc", "title": "An intro to Go for non-Go developers", "url": "https://benhoyt.com/writings/go-intro/", "published_at": "2020-06-10T11:38:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30e82e585", "title": "ZZT in Go (using a Pascal-to-Go converter)", "url": "https://benhoyt.com/writings/zzt-in-go/", "published_at": "2020-05-29T05:25:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30ee4a363", "title": "Testing in Go: philosophy and tools", "url": "https://lwn.net/Articles/821358/", "published_at": "2020-05-27T00:00:00+00:00" }, { "id": "01a0873a-8939-717d-906f-c1a30fa0d416", "title": "The state of the AWK", "url": "https://lwn.net/Articles/820829/", "published_at": "2020-05-20T00:00:00+00:00" }, { "id": "01a0873a-893a-738d-ab65-4b260321ff5b", "title": "What's coming in Go 1.15", "url": "https://lwn.net/Articles/820217/", "published_at": "2020-05-13T00:00:00+00:00" }, { "id": "01a0873a-893a-738d-ab65-4b26034ff0b2", "title": "Don't try to sanitize input. Escape output.", "url": "https://benhoyt.com/writings/dont-sanitize-do-escape/", "published_at": "2020-02-27T07:27:00+00:00" }, { "id": "01a0873a-893a-738d-ab65-4b2604219ba3", "title": "SEO for Software Engineers", "url": "https://benhoyt.com/writings/seo-for-software-engineers/", "published_at": "2020-02-20T00:00:00+00:00" } ] posts Claim your blog
Back to benhoyt
Blog · corpus.blog/blogs/benhoyt.com/posts

benhoyt

benhoyt.com

2026

2025

2024

2023

2022

2021

2020