41554 blogs Β· [ { "id": "01a08724-4371-7214-9773-18c45809393b", "title": "What is rendering on the web?", "url": "https://alexhwoods.com/blog/what-is-rendering-on-the-web/", "published_at": "2026-06-06T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c4587a8d28", "title": "Don't Let AI Write For You", "url": "https://alexhwoods.com/blog/dont-let-ai-write-for-you/", "published_at": "2026-03-09T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45896d1e7", "title": "Go does not allow truthiness", "url": "https://alexhwoods.com/blog/go-does-not-allow-truthiness/", "published_at": "2025-10-26T13:01:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c458d6f3a3", "title": "Tightening Constraints in Postgres", "url": "https://alexhwoods.com/blog/tightening-constraints-in-postgres/", "published_at": "2025-10-04T13:01:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45901d988", "title": "Domains in Postgres", "url": "https://alexhwoods.com/blog/domains-in-postgres/", "published_at": "2025-10-04T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c459f2f2ba", "title": "Unique and Exclusion Constraints in Postgres", "url": "https://alexhwoods.com/blog/exclusion-constraints-in-postgres/", "published_at": "2024-10-15T06:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45a21e3a3", "title": "Types From Tables in PL/pgSQL", "url": "https://alexhwoods.com/blog/types-from-tables-in-plpgsql/", "published_at": "2024-09-14T08:30:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45ab78428", "title": "Dynamic Commands in PL/pgSQL", "url": "https://alexhwoods.com/blog/dynamic-commands-in-plpgsql/", "published_at": "2024-09-14T08:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45b9a23dd", "title": "Trigger Execution Order in Postgres", "url": "https://alexhwoods.com/blog/trigger-execution-order-in-postgres/", "published_at": "2024-09-07T09:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45beb0ef6", "title": "Inserting Data in Postgres", "url": "https://alexhwoods.com/blog/inserting-data-in-postgres/", "published_at": "2024-09-07T08:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45c7741d8", "title": "Statement Triggers in Postgres", "url": "https://alexhwoods.com/blog/statement-triggers-in-postgres/", "published_at": "2024-09-07T07:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45d734135", "title": "Avoiding Unnecessarily Running Triggers in Postgres", "url": "https://alexhwoods.com/blog/avoiding-unnecessarily-running-triggers-in-postgres/", "published_at": "2024-08-24T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45df1b4fd", "title": "Simple Semaphore With a Buffered Channel in Go", "url": "https://alexhwoods.com/blog/simple-semaphore-with-a-buffered-channel-in-go/", "published_at": "2024-05-02T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45e5107b7", "title": "wc clone", "url": "https://alexhwoods.com/blog/wc-clone/", "published_at": "2024-05-02T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45f28d959", "title": "Two Approaches To Building A Chat Server", "url": "https://alexhwoods.com/blog/two-approaches-to-building-a-chat-server/", "published_at": "2024-04-28T11:18:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c45ff8caee", "title": "Building My Own Git", "url": "https://alexhwoods.com/blog/building-my-own-git/", "published_at": "2024-04-13T23:51:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c460235c0d", "title": "Format Strings in Rust", "url": "https://alexhwoods.com/blog/rust-format-strings/", "published_at": "2022-10-31T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c460309ae2", "title": "Genqlient", "url": "https://alexhwoods.com/blog/genqlient/", "published_at": "2022-08-18T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c460aa3470", "title": "Structural vs. Nominal Type Systems", "url": "https://alexhwoods.com/blog/structural-vs-nominal-type-systems/", "published_at": "2022-06-15T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c461271ac9", "title": "πŸŽ™οΈ, πŸŽ™οΈ - Is this thing on?", "url": "https://alexhwoods.com/blog/is-this-thing-on/", "published_at": "2022-01-16T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c461dbd978", "title": "Evaluating GCP's Cloud Key Management Service", "url": "https://alexhwoods.com/blog/cloud-kms-gcp/", "published_at": "2021-10-15T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c462cf6d8c", "title": "Invert a Binary Tree", "url": "https://alexhwoods.com/blog/invert-a-binary-tree/", "published_at": "2021-07-29T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c462fc5360", "title": "I made a dumb linux mistake", "url": "https://alexhwoods.com/blog/i-made-a-dumb-linux-mistake/", "published_at": "2021-07-27T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46339d688", "title": "What happens when you go to this site?", "url": "https://alexhwoods.com/blog/what-happens-when-you-go-to-this-site-dns/", "published_at": "2021-07-20T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c464021e00", "title": "Running Containers on AWS", "url": "https://alexhwoods.com/blog/running-containers-on-aws/", "published_at": "2021-07-13T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c464ccd92a", "title": "Exploring Kubernetes Ingress", "url": "https://alexhwoods.com/blog/exploring-kubernetes-ingress/", "published_at": "2021-07-09T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c465823a70", "title": "How To Revert a Merge Commit", "url": "https://alexhwoods.com/blog/how-to-revert-a-merge-commit/", "published_at": "2021-07-06T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46647f6a5", "title": "How To Reverse a LinkedList", "url": "https://alexhwoods.com/blog/how-to-reverse-a-linkedlist/", "published_at": "2021-07-05T12:36:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c466660a0f", "title": "Everything Useful I Know About kubectl", "url": "https://alexhwoods.com/blog/everything-useful-i-know-about-kubectl/", "published_at": "2021-06-25T17:15:43+00:00" }, { "id": "01a08724-4371-7214-9773-18c4673cda1c", "title": "What is a VPN?", "url": "https://alexhwoods.com/blog/what-is-a-vpn/", "published_at": "2021-05-10T10:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c467ce0eba", "title": "Lua Libraries in Istio's EnvoyFilter", "url": "https://alexhwoods.com/blog/lua-libraries-in-istios-envoyfilter/", "published_at": "2021-04-15T12:38:01+00:00" }, { "id": "01a08724-4371-7214-9773-18c4689149b0", "title": "Pulumi vs Terraform", "url": "https://alexhwoods.com/blog/pulumi-vs-terraform/", "published_at": "2021-02-02T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46945ec44", "title": "Notes on Jan 4th, 2021 Slack Outage", "url": "https://alexhwoods.com/blog/notes-on-jan-4th-slack-outage/", "published_at": "2021-01-26T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46978e5e2", "title": "Socket Hang Ups", "url": "https://alexhwoods.com/blog/socket-hang-up/", "published_at": "2021-01-20T21:17:04+00:00" }, { "id": "01a08724-4371-7214-9773-18c46a18d5f6", "title": "Consistent Hashing", "url": "https://alexhwoods.com/blog/consistent-hashing/", "published_at": "2020-09-11T09:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46a891f9c", "title": "Why spend innovation tokens on a service mesh?", "url": "https://alexhwoods.com/blog/why-service-mesh/", "published_at": "2020-09-02T09:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46b636a3b", "title": "Overlays over templating", "url": "https://alexhwoods.com/blog/overlays-over-templating/", "published_at": "2020-07-13T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46bc7df74", "title": "Intro to Bigtable", "url": "https://alexhwoods.com/blog/bigtable-intro/", "published_at": "2020-05-26T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46c7ee11c", "title": "Deep Dive into Joining in Kafka Streams", "url": "https://alexhwoods.com/blog/joining-streams/", "published_at": "2020-03-24T13:30:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46d4ee5d7", "title": "Sensible Schema Evolution", "url": "https://alexhwoods.com/blog/sensible-schema-evolution/", "published_at": "2020-03-03T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46d5b57ad", "title": "Landing a message from Kafka", "url": "https://alexhwoods.com/blog/landing-a-message/", "published_at": "2020-02-17T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46dd8e04e", "title": "Git home", "url": "https://alexhwoods.com/blog/git-home/", "published_at": "2020-02-10T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46e7abb52", "title": "Choosing the right scope function in Kotlin", "url": "https://alexhwoods.com/blog/scope-functions/", "published_at": "2020-02-03T11:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46ecf2b06", "title": "Inline Functions", "url": "https://alexhwoods.com/blog/inline-functions/", "published_at": "2020-01-27T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46fa670a8", "title": "Kotlin Algorithm Challenge #3", "url": "https://alexhwoods.com/blog/reverse-integer/", "published_at": "2020-01-20T05:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c46fbb12a1", "title": "Change Data Capture", "url": "https://alexhwoods.com/blog/cdc/", "published_at": "2020-01-16T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c47034027b", "title": "What do data classes give you in Kotlin?", "url": "https://alexhwoods.com/blog/data-classes/", "published_at": "2020-01-13T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c47035ccb4", "title": "Kafka Hello World", "url": "https://alexhwoods.com/blog/kafka-hello-world/", "published_at": "2020-01-05T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c470f3ce86", "title": "Kotlin Algorithm Challenge #2", "url": "https://alexhwoods.com/blog/longest-substring/", "published_at": "2020-01-02T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c471be8fe5", "title": "Kotlin's Lambda Syntax", "url": "https://alexhwoods.com/blog/kotlin-lambda-syntax/", "published_at": "2020-01-01T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c472b9e388", "title": "Kotlin Algorithm Challenge #1", "url": "https://alexhwoods.com/blog/add-two-numbers/", "published_at": "2019-12-19T13:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c4735c1bd7", "title": "Exactly Once", "url": "https://alexhwoods.com/blog/exactly-once/", "published_at": "2019-11-20T05:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c47398d405", "title": "Introduction To Celery", "url": "https://alexhwoods.com/blog/introduction-to-celery/", "published_at": "2019-10-16T04:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c4748a0a30", "title": "How the Node.js Event Loop Polls", "url": "https://alexhwoods.com/blog/event-loop-polling/", "published_at": "2019-08-21T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c47550bfa7", "title": "Asynchronous I/O", "url": "https://alexhwoods.com/blog/async-io/", "published_at": "2019-07-26T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c4764d2e17", "title": "Generators in JavaScript", "url": "https://alexhwoods.com/blog/generators-in-javascript/", "published_at": "2019-07-10T00:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c476ec93f7", "title": "Classes in JavaScript", "url": "https://alexhwoods.com/blog/classes-in-javascript/", "published_at": "2019-07-08T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c47787acb8", "title": "Modules in Node.js", "url": "https://alexhwoods.com/blog/modules-in-nodejs/", "published_at": "2019-06-24T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c4783eeb98", "title": "Data Structures and Database Indexes", "url": "https://alexhwoods.com/blog/data-structures-and-database-indexes/", "published_at": "2019-06-21T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c478d55066", "title": "HTTP Persistent Connections", "url": "https://alexhwoods.com/blog/http-persistent-connections/", "published_at": "2019-06-14T12:00:00+00:00" }, { "id": "01a08724-4371-7214-9773-18c47903c270", "title": "Git's DAG", "url": "https://alexhwoods.com/blog/gits-dag/", "published_at": "2019-06-03T00:00:00+00:00" }, { "id": "01a08724-4372-7100-9ebf-b00569058128", "title": "Gradle is a DAG", "url": "https://alexhwoods.com/blog/gradle-is-a-dag/", "published_at": "2019-05-29T12:00:00+00:00" }, { "id": "01a08724-4372-7100-9ebf-b0056961c30e", "title": "What is a topological ordering?", "url": "https://alexhwoods.com/blog/topological-ordering/", "published_at": "2019-05-09T12:00:00+00:00" }, { "id": "01a08724-4372-7100-9ebf-b00569a8dd16", "title": "What is a DAG?", "url": "https://alexhwoods.com/blog/dag/", "published_at": "2019-05-06T12:00:00+00:00" }, { "id": "01a08724-4372-7100-9ebf-b00569a96f62", "title": "Dijkstra’s Algorithm in Kotlin", "url": "https://alexhwoods.com/blog/dijkstras-algorithm-in-kotlin/", "published_at": "2019-04-27T12:00:00+00:00" }, { "id": "01a08724-4372-7100-9ebf-b0056a26e27a", "title": "How similar is the execution of Java and JavaScript?", "url": "https://alexhwoods.com/blog/how-similar-is-the-execution-of-java-and-javascript/", "published_at": "2019-04-14T12:00:00+00:00" }, { "id": "01a08724-4372-7100-9ebf-b0056ac3a1bd", "title": "Introduction to Monte Carlo Methods", "url": "https://alexhwoods.com/blog/introduction-to-monte-carlo-methods/", "published_at": "2015-07-25T12:00:00+00:00" } ] posts Claim your blog
Back to Alex Woods
Blog Β· corpus.blog/blogs/alexhwoods.com/posts

Alex Woods

alexhwoods.com

2026

2025

2024

2022

2021

2020

2019

2015