41554 blogs · [ { "id": "01a07df2-88f5-73df-a4c3-9364d53003d2", "title": "reader 3.26 released – discovery, exports, demo", "url": "https://death.andgravity.com/reader-3-26", "published_at": "2026-06-24T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d5ddffb6", "title": "Ordered key sharding in DynamoDB", "url": "https://death.andgravity.com/albumtitle", "published_at": "2026-06-08T08:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d6c47f3a", "title": "DynamoDB crash course: part 3 – design patterns", "url": "https://death.andgravity.com/dynamodb-patterns", "published_at": "2026-05-30T15:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d72a7994", "title": "reader 3.24 released – help, multi-user updates", "url": "https://death.andgravity.com/reader-3-24", "published_at": "2026-05-20T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d7662e20", "title": "reader 3.23 released – OPML, hosted reader intro", "url": "https://death.andgravity.com/reader-3-23", "published_at": "2026-04-26T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d785479b", "title": "Learn Python object-oriented programming with Raymond Hettinger", "url": "https://death.andgravity.com/hettinger", "published_at": "2026-04-14T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d82f52a5", "title": "reader 3.22 released – new web app", "url": "https://death.andgravity.com/reader-3-22", "published_at": "2026-04-02T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d875ff06", "title": "DynamoDB crash course: part 2 – data model", "url": "https://death.andgravity.com/dynamodb-model", "published_at": "2026-02-10T10:35:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d9716974", "title": "DynamoDB crash course: part 1 – philosophy", "url": "https://death.andgravity.com/dynamodb", "published_at": "2026-01-23T08:40:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364d9ec9490", "title": "reader 3.20 released – we're so back", "url": "https://death.andgravity.com/reader-3-20", "published_at": "2025-11-28T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dae7dfbe", "title": "Announcing asyncio-thread-runner: you can have a little async (as a treat)", "url": "https://death.andgravity.com/asyncio-thread-runner", "published_at": "2025-08-22T12:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dba9e85a", "title": "Inheritance over composition, sometimes", "url": "https://death.andgravity.com/over-composition", "published_at": "2025-07-15T07:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dc19ab42", "title": "Process​Thread​Pool​Executor: when I‍/‍O becomes CPU-bound", "url": "https://death.andgravity.com/ptpe", "published_at": "2025-04-18T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dc5d5eab", "title": "reader 3.16 released – Archived feed", "url": "https://death.andgravity.com/reader-3-16", "published_at": "2024-12-09T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dc67e960", "title": "reader 3.15 released – Retry-After", "url": "https://death.andgravity.com/reader-3-15", "published_at": "2024-11-11T11:11:11+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dcacf537", "title": "reader 3.13 released – scheduled updates", "url": "https://death.andgravity.com/reader-3-13", "published_at": "2024-06-21T17:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364dd9c4bd2", "title": "reader 3.12 released – split search index", "url": "https://death.andgravity.com/reader-3-12", "published_at": "2024-03-07T07:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364de5f2c28", "title": "This is not interview advice: a priority-expiry LRU cache in Python without heaps or trees", "url": "https://death.andgravity.com/lru-cache", "published_at": "2024-01-20T12:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364defc001e", "title": "reader 3.10 released – storage internal API", "url": "https://death.andgravity.com/reader-3-10", "published_at": "2023-11-12T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364df1fba31", "title": "When to use classes in Python? When you repeat similar sets of functions", "url": "https://death.andgravity.com/same-functions", "published_at": "2023-09-11T21:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364df5393ef", "title": "reader 3.9 released – update hook error handling", "url": "https://death.andgravity.com/reader-3-9", "published_at": "2023-08-28T20:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364df71c8f0", "title": "Running async code from sync code in Python", "url": "https://death.andgravity.com/asyncio-bridge", "published_at": "2023-07-29T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e062235f", "title": "reader 3.7 released – contributor docs", "url": "https://death.andgravity.com/reader-3-7", "published_at": "2023-07-15T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e13f7034", "title": "Why you should still read the docs", "url": "https://death.andgravity.com/output", "published_at": "2023-05-16T10:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e1bbea0f", "title": "Announcing linesieve: an unholy blend of grep, sed, awk, and Python, born out of spite", "url": "https://death.andgravity.com/linesieve", "published_at": "2023-04-25T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e1ffb22b", "title": "Limiting concurrency in Python asyncio: the story of async imap_unordered()", "url": "https://death.andgravity.com/limit-concurrency", "published_at": "2023-03-27T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e251180b", "title": "yaml: while constructing a mapping found unhashable key", "url": "https://death.andgravity.com/yaml-unhashable-key", "published_at": "2023-02-21T23:02:21+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e30b9348", "title": "Caching a lot of methods in Python", "url": "https://death.andgravity.com/caching-methods", "published_at": "2023-02-13T20:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e37639af", "title": "reader 3.4 released – 5 years, 2000 commits", "url": "https://death.andgravity.com/reader-3-4", "published_at": "2023-01-23T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e4711084", "title": "Has your password been pwned? Or, how I almost failed to search a 37 GB text file in under 1 millisecond (in Python)", "url": "https://death.andgravity.com/pwned", "published_at": "2022-12-13T11:20:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e5173cc7", "title": "reader 3.0 released – multithreading", "url": "https://death.andgravity.com/reader-3-0", "published_at": "2022-09-16T18:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e5df1566", "title": "reader 2.14 released – Twitter, read time", "url": "https://death.andgravity.com/reader-2-14", "published_at": "2022-07-01T18:18:18+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e6599089", "title": "The unreasonable effectiveness of f‍-‍strings and re.VERBOSE", "url": "https://death.andgravity.com/f-re", "published_at": "2022-05-18T22:24:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e6e721a7", "title": "reader 2.11 released – metadata is tags", "url": "https://death.andgravity.com/reader-2-11", "published_at": "2022-03-18T18:35:10+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e6fdeb99", "title": "yaml: could not determine a constructor for the tag", "url": "https://death.andgravity.com/yaml-unknown-tag", "published_at": "2022-02-22T22:02:22+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e711b36b", "title": "Dealing with YAML with arbitrary tags in Python", "url": "https://death.andgravity.com/any-yaml", "published_at": "2022-01-23T10:53:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e78134c5", "title": "reader 2.5 released – usage statistics", "url": "https://death.andgravity.com/reader-2-5", "published_at": "2021-10-29T12:55:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e82c45ce", "title": "Write an SQL query builder in 150 lines of Python!", "url": "https://death.andgravity.com/query-builder-how", "published_at": "2021-08-20T16:42:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e90de366", "title": "namedtuple in a post-dataclasses world", "url": "https://death.andgravity.com/namedtuples", "published_at": "2021-07-21T07:55:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e91660ee", "title": "reader 2.0 released", "url": "https://death.andgravity.com/reader-2-0", "published_at": "2021-07-18T16:10:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364e9d6374f", "title": "Why I wrote my own SQL query builder (in Python)", "url": "https://death.andgravity.com/own-query-builder", "published_at": "2021-06-28T11:35:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ea792f98", "title": "When your functions take the same arguments, consider using a class: counter-examples", "url": "https://death.andgravity.com/more-arguments", "published_at": "2021-06-18T12:05:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364eb6d2157", "title": "Python sentinel objects, type hints, and PEP 661", "url": "https://death.andgravity.com/sentinels", "published_at": "2021-06-10T07:50:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364eba43aef", "title": "When to use classes in Python? When your functions take the same arguments", "url": "https://death.andgravity.com/same-arguments", "published_at": "2021-05-27T09:55:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ec0ca229", "title": "Why use an SQL query builder in the first place?", "url": "https://death.andgravity.com/query-builder-why", "published_at": "2021-05-18T15:20:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ec1a4799", "title": "SQL query builder in 150 lines of Python", "url": "https://death.andgravity.com/query-builder", "published_at": "2021-05-11T07:50:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ec70e9d6", "title": "Using a Makefile with .PHONY-only targets? Use a run.sh script instead", "url": "https://death.andgravity.com/run-sh", "published_at": "2021-04-28T15:40:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ecf5aa96", "title": "hashlib: object supporting the buffer API required", "url": "https://death.andgravity.com/hashlib-buffer-required", "published_at": "2021-04-20T12:44:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ed28c84c", "title": "Learn by reading code: Python standard library design decisions explained", "url": "https://death.andgravity.com/stdlib", "published_at": "2021-04-12T14:55:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364edd7ae58", "title": "Dataclasses without type annotations", "url": "https://death.andgravity.com/dataclasses", "published_at": "2021-03-23T15:18:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ede97a78", "title": "Deterministic hashing of Python data objects", "url": "https://death.andgravity.com/stable-hashing", "published_at": "2021-03-19T17:25:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ee8fd90f", "title": "Struggling to structure code in larger programs? Great resources a beginner might not find so easily", "url": "https://death.andgravity.com/aosa", "published_at": "2021-03-10T12:00:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364eeaf0585", "title": "Optimizing Advent of Code 2020 day 17", "url": "https://death.andgravity.com/fast-conway-cubes", "published_at": "2021-02-08T16:20:00+00:00" }, { "id": "01a07df2-88f5-73df-a4c3-9364ef6750da", "title": "Solving Advent of Code 2020 day 17 by not solving it", "url": "https://death.andgravity.com/conway-cubes", "published_at": "2021-01-22T15:10:00+00:00" } ] posts Claim your blog
Back to death and gravity
Blog · corpus.blog/blogs/death.andgravity.com/posts

death and gravity

death.andgravity.com

2026

2025

2024

2023

2022

2021