Archives
All the articles I've archived.
-
Property-Based Testing with `hypothesis`, and associated use cases
An introduction to property-based testing in Python using the hypothesis library, with practical examples.
-
Postgres, as an App! (Now with one-click deploys to AWS + Heroku!)
Deploying a PostgreSQL-backed application with one-click deploys to AWS and Heroku.
-
#lifeprotip: Haskell-inspired "lifting into structure" for individual shell commands within a Docker context
Applying Haskell's 'lifting into structure' concept to compose individual shell commands cleanly within Docker.
-
Postgres...as an App?
An exploration of using PostgreSQL directly as an application backend, covering architecture and motivation.
-
The Services that makes the Cloud Worth It
The specific AWS and cloud services that justify the cost and complexity of moving infrastructure to the cloud.
-
The Cloud's Kernel of Optionality
What makes cloud infrastructure uniquely valuable: the optionality it provides to scale, swap, and adapt.
-
DevOps is an Ice Rink
Using the ice rink as an analogy for DevOps: high learning curve, but infrastructure becomes natural with practice.
-
#lifeprotip: Use Docker to simplify development workflows
Using Docker as a drop-in replacement for Vagrant to create reproducible, isolated development environments.
-
Pioneering as a Process Person
How people with a process-oriented mindset can lead effectively in ambiguous, exploratory environments.
-
A Pythonista's Review of Haskell
A Python developer's honest review of Haskell: the type system, tooling, learning curve, and practical tradeoffs.
-
Getting Rid of Disqus
Why Disqus is worth removing from your blog and what lightweight alternatives exist.
-
What my QC25s taught me about designing long-lasting interfaces
What the durability and interface design of Bose QC25 headphones can teach us about building long-lasting software.
-
Writing Software to Last 50 Years
Design principles for writing software meant to survive decades of changing requirements and technology.
-
Monads aren't as hard as you think
A practical, approachable introduction to monads in Python — no category theory required.
-
Changelog Evolution
How changelogs evolve as a product matures, and what they reveal about team culture and process.
-
Concurrency with Python: Conclusion
Key takeaways from the Python concurrency series and guidance on choosing the right concurrency model.
-
Concurrency with Python: Data-Intensive Architectures
Designing data-intensive Python systems using concurrency patterns suited for high-throughput workloads.
-
Concurrency with Python: Hardware-Based Parallelism
Leveraging CPU and hardware-level parallelism in Python for compute-bound workloads.
-
Concurrency with Python: CSP and Coroutines
Communicating Sequential Processes and Python coroutines as a structured approach to concurrency.
-
Concurrency with Python: Actor Models
The actor model as a higher-level abstraction for concurrency in Python.
-
Concurrency with Python: Separating Identity From State
Separating identity from mutable state to make concurrent Python programs easier to reason about, drawing from Clojure.
-
#todayilearned: Isolate your Development Environment
Why isolating development environments matters, and practical tools for doing it in Python.
-
Concurrency with Python: Functional Programming
Applying functional programming principles to simplify concurrent code in Python.
-
Product Dimensionality
A mental model for thinking about product dimensions when scoping features and making tradeoffs.
-
#todayilearned: Encodings in Python
A quick look at character encodings in Python 3 and common mistakes to avoid.
-
Concurrency with Python: Threads and Locks
Using threads and locks as low-level concurrency primitives in Python, and the pitfalls to watch for.
-
Concurrency with Python: Why?
An introduction to concurrency in Python: what it is, why it matters, and when to reach for it.
-
#snippets: Generating randomized test data in PostGIS
A quick snippet for generating randomized spatial test data in PostGIS.
-
Gestalt-driven Software Development
Applying gestalt principles — proximity, similarity, and closure — to software design for more cohesive system architecture.
-
Data-driven Testing with 'pytest', Part Four: Fungible Infrastructure
How the pytest-based ETL test harness evolved to manage fungible infrastructure and capture stateful resource dependencies.
-
Data-driven Testing with 'pytest', Part Three: Chained Operations
How chained operations in an ETL pipeline drove a breaking schema update to the pytest-based data-driven test harness.
-
Data-driven Testing with 'pytest', Part Two: Iteration
How data-driven testing with pytest evolved to handle data engineering challenges in an ETL tool built on odo.
-
Data-driven Testing with 'pytest', Part One: Requirements
Exploring requirements for building a data-driven testing framework with pytest.
-
#todayilearned: Julian/Georgian calendar mismatches in 'pyspark'
Debugging Julian/Gregorian calendar mismatches encountered in PySpark date handling.
-
First Post
Hello World!