41554 blogs · [ { "id": "01a08d1c-5b79-7133-ac38-b623fe54457e", "title": "Five Laws", "url": "https://blog.philz.dev/blog/laws-of-software/", "published_at": "2026-09-10T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c03b2a79", "title": "Git Virtual Cherry-Pick", "url": "https://blog.philz.dev/blog/git-virtual-cherry-pick/", "published_at": "2026-08-31T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c0a56b72", "title": "20%", "url": "https://blog.philz.dev/blog/20-percent/", "published_at": "2026-06-22T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c194a741", "title": "Page on the client, really, even for 1M rows", "url": "https://blog.philz.dev/blog/page/", "published_at": "2026-06-07T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c280915c", "title": "Ralph and Lisa", "url": "https://blog.philz.dev/blog/ralph-loop-lisa-loop/", "published_at": "2026-04-22T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c2da6891", "title": "computing 2+2: so many sandboxes", "url": "https://blog.philz.dev/blog/sandboxes/", "published_at": "2026-03-29T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c2f01481", "title": "What is Buildkite?", "url": "https://blog.philz.dev/blog/what-is-buildkite/", "published_at": "2026-03-28T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c38e41b2", "title": "Philip's Second Law of Robotics", "url": "https://blog.philz.dev/blog/second-law-of-robotics/", "published_at": "2026-03-15T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c47ca0dd", "title": "What is tmux?", "url": "https://blog.philz.dev/blog/what-is-tmux/", "published_at": "2026-02-27T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c554d997", "title": "Uptime charts", "url": "https://blog.philz.dev/blog/uptime/", "published_at": "2026-02-27T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c6113696", "title": "Agentic Annotated Bibliography", "url": "https://blog.philz.dev/blog/agentic-bibliography/", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c64ac88c", "title": "The *ad hoc* Test", "url": "https://blog.philz.dev/blog/adhoc-test/", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c7252024", "title": "Dependency-less python3 is my preferred shell scripting language", "url": "https://blog.philz.dev/blog/python3-shell-scripting/", "published_at": "2026-02-13T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c77bce91", "title": "Unbundling a monorepo to a multi-repo", "url": "https://blog.philz.dev/blog/push-to-subrepo/", "published_at": "2026-02-09T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c78bd058", "title": "Git Commit Prompt Hook", "url": "https://blog.philz.dev/blog/git-commit-prompt/", "published_at": "2025-12-17T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c85c18f7", "title": "The Two Agentic Loops & Differing", "url": "https://blog.philz.dev/blog/diff-loop/", "published_at": "2025-12-12T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c8c6c9d4", "title": "Close Idle Tmux Panes", "url": "https://blog.philz.dev/blog/close-idle-tmux-panes/", "published_at": "2025-12-12T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6c93d33a2", "title": "Coverage", "url": "https://blog.philz.dev/blog/coverage/", "published_at": "2025-11-29T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6ca145416", "title": "tmux For Agents", "url": "https://blog.philz.dev/blog/tmux-for-agents/", "published_at": "2025-11-22T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6caa8086c", "title": "Maximum String Length Across Node.js Versions", "url": "https://blog.philz.dev/blog/node-string-length/", "published_at": "2025-11-17T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cadd607c", "title": "tool report: Subtrace", "url": "https://blog.philz.dev/blog/subtrace/", "published_at": "2025-11-10T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cb7d0917", "title": "Build Artifacts", "url": "https://blog.philz.dev/blog/build-artifacts/", "published_at": "2025-10-20T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cbf2ae98", "title": "Containerizing Agents", "url": "https://blog.philz.dev/blog/containerizing-agents/", "published_at": "2025-10-09T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cceed930", "title": "Pipefail Fail", "url": "https://blog.philz.dev/blog/pipefail-fail/", "published_at": "2025-09-20T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cd47f3ca", "title": "Itsy Bitsy Agent Bookmarklet (or, adding an agent to a PyBricks simulator)", "url": "https://blog.philz.dev/blog/itsy-bitsy-agent/", "published_at": "2025-08-11T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6ce00d4eb", "title": "Shell Trap", "url": "https://blog.philz.dev/blog/shell-trap/", "published_at": "2025-07-31T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6ce4b31e8", "title": "Infrastructure as Code for Grafana Dashboards", "url": "https://blog.philz.dev/blog/grafana/", "published_at": "2025-07-23T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cf051f2a", "title": "The Unreasonable Effectiveness of an LLM Agent Loop with Tool Use", "url": "https://blog.philz.dev/blog/agent-loop/", "published_at": "2025-05-15T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cf09b2d0", "title": "LLM Log", "url": "https://blog.philz.dev/blog/llm-log/", "published_at": "2024-11-30T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cf7da45a", "title": "tool report: spr", "url": "https://blog.philz.dev/blog/spr/", "published_at": "2024-11-29T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6cfe55e99", "title": "Exporting Language Server Data to SQL", "url": "https://blog.philz.dev/blog/language-server-db/", "published_at": "2024-10-16T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6d0a472a5", "title": "Safari Top, Part 2", "url": "https://blog.philz.dev/blog/safari-top-part-2/", "published_at": "2024-10-09T00:00:00+00:00" }, { "id": "01a08752-2547-73b4-8e80-b0b6d13e8a84", "title": "Finding top memory consumers in Safari", "url": "https://blog.philz.dev/blog/safari-top/", "published_at": "2024-08-27T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d231e3373f", "title": "CI Performance Debugging", "url": "https://blog.philz.dev/blog/ci-debugging/", "published_at": "2024-07-31T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d2326b701f", "title": "direnv for Node and Python", "url": "https://blog.philz.dev/blog/direnv/", "published_at": "2024-07-24T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d232dc4207", "title": "Observability in Trouble", "url": "https://blog.philz.dev/blog/observability-in-trouble/", "published_at": "2024-06-28T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d233a838f5", "title": "pybricks", "url": "https://blog.philz.dev/blog/pybricks/", "published_at": "2024-06-06T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d2341fd7d0", "title": "A Bibliography of Sorts and Some Quotes", "url": "https://blog.philz.dev/blog/bibliography/", "published_at": "2024-05-13T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d2347198e3", "title": "Extracting Safari's Reading List", "url": "https://blog.philz.dev/blog/reading-list/", "published_at": "2024-02-11T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d2351136f4", "title": "Drawing flamegraphs with DuckDB and Vega-Lite", "url": "https://blog.philz.dev/blog/flameduck/", "published_at": "2024-02-04T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d2357edcaa", "title": "In praise of the humble timeline visualization", "url": "https://blog.philz.dev/blog/timelines/", "published_at": "2024-01-30T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d235e3e64a", "title": "Advent of Code 2023 Day 24", "url": "https://blog.philz.dev/blog/aoc2023-day24/", "published_at": "2024-01-30T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d236ce1559", "title": "Counting the number of lines in a monitoring system", "url": "https://blog.philz.dev/blog/sum-divided-by-average-is-count/", "published_at": "2024-01-24T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d237551beb", "title": "Deploying for Compatibility", "url": "https://blog.philz.dev/blog/compatibility/", "published_at": "2024-01-09T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d237e1762e", "title": "Creating a monorepo out of a multirepo", "url": "https://blog.philz.dev/blog/git-monorepo/", "published_at": "2024-01-05T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d238c5768d", "title": "Pretty pictures from AOC 2023", "url": "https://blog.philz.dev/blog/aoc2023/", "published_at": "2024-01-05T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d239bd86f3", "title": "Handy window function trick to pick out the biggest/smallest/first", "url": "https://blog.philz.dev/blog/window/", "published_at": "2021-01-25T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d23a18df9a", "title": "decoder ring for debugging in Node, Python, Java", "url": "https://blog.philz.dev/blog/node-decoder-ring/", "published_at": "2020-06-11T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d23ad3d193", "title": "Virtualization All The Way Down; Nesting Dolls; Static Linking", "url": "https://blog.philz.dev/blog/virtualization-all-way-down/", "published_at": "2014-11-29T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d23bb83c7c", "title": "Slides–Tips and Tricks for Debugging Distributed Systems", "url": "https://blog.philz.dev/blog/strata-debugging-slides/", "published_at": "2013-02-27T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d23c71aba3", "title": "Quick Preview: Tips and Tricks for Debugging Distributed Systems", "url": "https://blog.philz.dev/blog/strata-debugging-preview/", "published_at": "2013-02-24T00:00:00+00:00" }, { "id": "01a08752-2548-73d5-bd34-81d23c98b19d", "title": "Debug Servlets, or 'HTTP Won; Use It'", "url": "https://blog.philz.dev/blog/debug-servlets/", "published_at": "2013-02-06T00:00:00+00:00" } ] posts Claim your blog
Back to blog.philz.dev
Blog · corpus.blog/blogs/blog.philz.dev/posts

blog.philz.dev

blog.philz.dev

2026

22 Jun 2026

2025

2024

2021

2020

2014

2013