atlas news
Death and Gravity
26 april
18h00
reader 3.23 released - OPML, hosted reader intro
Even if you haven’t heard of Raymond Hettinger, you’ve definitely used his work, bangers such as sorted(), collections, and many others. His talks...
14 april
18h00
Learn Python object-oriented programming with Raymond Hettinger
This is part two of a series covering core DynamoDB concepts, from philosophy all the way to single-table design. The goal is to get you to...
02 april
18h00
reader 3.22 released - new web app
This is part one of a series covering core DynamoDB concepts and patterns, all the way up to single-table design; the goal is to get you to...
10 february
10h35
DynamoDB crash course: part 2 - data model
Back in 2023, we made a thing for running async code from sync code. I’m happy to announce that it is now available on PyPI as asyncio-thread-runner.
23 january
08h40
DynamoDB crash course: part 1 - philosophy
Last time, we built a hybrid concurrent.futures executor using inheritance. Today, we’re building it again (twice ) using composition and functions...
28 november
18h00
reader 3.20 released - we’re so back
in which we build a hybrid concurrent.futures executor that runs I O bound tasks on all available CPUs, thus evading the limitations imposed by the...
22 august
12h00
Announcing asyncio-thread-runner: you can have a little async (as a treat)
Today we’re implementing a least recently used cache with priorities and expiry, using only the Python standard library. This is a bIG TEch CoDINg...
15 july
07h00
Inheritance over composition, sometimes
Having trouble figuring out when to use classes? In this article, we look at another heuristic for using classes in Python, with examples from real...
18 april
18h00
Process Thread Pool Executor: when I O becomes CPU-bound
So, you’re doing some sync stuff. But you also need to do some async stuff, without making everything async. Hint: asyncio.Runner will get you at...
09 december
18h00
reader 3.16 released - Archived feed
Do you feel you’re fighting your tools? Do you feel you’re relying too much on autocomplete and inline documentation? tl;dr: Most good documentation...
11 november
11h11
reader 3.15 released - Retry-After
Java is notoriously verbose, especially when used in a serious Enterprise Projectâ ...so naturally, I made linesieve, a Python text munging tool to...
21 june
17h00
reader 3.13 released - scheduled updates
So, you’re doing some async stuff, repeatedly, hundreds of thousands of times. How do you not do it all at once? Hint: asyncio.Semaphore is not...
07 march
07h00
reader 3.12 released - split search index
in which you’ll find out what while constructing a mapping found unhashable key PyYAML errors mean, why do they happen, and what you can do about it.
20 january
12h00
This is not interview advice: a priority-expiry LRU cache in Python without heaps or trees
in which you’ll learn how to cache a lot of methods in Python, even for objects created by someone else. Did you know that, contrary to popular...
12 november
18h00
reader 3.10 released - storage internal API
reader, my Python feed reader library, is 5 years old; since this is a special occasion, I thought I’d share a few thoughts on the journey so far.
11 september
21h00
When to use classes in Python? When you repeat similar sets of functions
in which we check if your password has been compromised in many inconvenient ways, in a tale of destruction, obsession, and self-discovery.
28 august
20h00
reader 3.9 released - update hook error handling
in which we look at one or two ways to make life easier when working with Python regular expressions.
29 july
18h00
Running async code from sync code in Python
in which you’ll find out what could not determine a constructor for the tag PyYAML errors mean, why do they happen, and what you can do about it.
15 july
18h00
reader 3.7 released - contributor docs
in which we use PyYAML to safely read and write YAML with any tags, in a way that’s as straightforward as interacting with built-in types.
16 may
10h00
Why you should still read the docs
This is the fourth article in a series about writing my own SQL query builder. Today, we’ll rewrite it from scratch, explore API design, learn when...
25 april
18h00
Announcing linesieve: an unholy blend of grep, sed, awk, and Python, born out of spite
namedtuple has been around since forever, and over time, its convenience saw it used far outside its originally intended purpose. With dataclasses...
27 march
18h00
Limiting concurrency in Python asyncio: the story of async imap unordered()
This is the third article in a series about writing an SQL query builder in 150 lines of Python. Here, I talk about why I decided to write my own,...
21 february
23h02
yaml: while constructing a mapping found unhashable key
In this article, we look at a few real-world examples where functions taking the same arguments don’t necessarily make a class, as counter-examples...
13 february
20h00
Caching a lot of methods in Python
PEP 661 proposes adding a utility for defining sentinel values in the Python standard library. In this article, you’ll get a PEP 661 summary, learn...
23 january
18h00
reader 3.4 released - 5 years, 2000 commits
In this article, we look at a heuristic for using classes in Python, with examples from real-world code, and some things to keep in mind.
13 december
11h20
Has your password been pwned? Or, how I almost failed to search a 37 GB text file in under 1 millisecond (in Python)
This is the second article in a series about writing an SQL query builder in 150 lines of Python, why I wrote it, how I thought about it, and the...
16 september
18h00
reader 3.0 released - multithreading
In this series, we examine an SQL query builder I wrote in 150 lines of Python, why I wrote it, how I thought about it, and the decisions I had to...
01 july
18h18
reader 2.14 released - Twitter, read time
in which we look at an interesting alternative to Makefiles with .PHONY-only targets, and why I think it’s cool.
18 may
22h24
The unreasonable effectiveness of f - strings and re.VERBOSE
In this article, you’ll find out what Python hashlib object supporting the buffer API required TypeErrors mean, why do they happen, and what you can...
18 march
18h35
reader 2.11 released - metadata is tags
On your Python learning journey, you may have heard that a great way to get better is to read code written by other people. That’s true, but finding...
22 february
22h02
yaml: could not determine a constructor for the tag
in which we talk about the many ways of using Python dataclasses without type annotations (or even variable annotations ), and what this says about...
23 january
10h53
Dealing with YAML with arbitrary tags in Python
In this article, you’ll learn how to calculate deterministic hashes for arbitrary Python data objects, stable across interpreter versions and...
29 october
12h55
reader 2.5 released - usage statistics
Are you having trouble making the modules work together in a larger project? Have you tried looking at popular projects as models, but were put off...
20 august
16h42
Write an SQL query builder in 150 lines of Python
in which we optimize our Advent of Code 2020 day 17 (Conway Cubes) solution, focusing on profiling and optimizing existing code, in a way that helps...
21 july
07h55
namedtuple in a post-dataclasses world
in which we solve the day 17 problem from Advent of Code 2020, Conway Cubes, in a generic way, focusing on testing, refactoring, and idiomatic Python...
18 july
16h10
reader 2.0 released
28 june
11h35
Why I wrote my own SQL query builder (in Python)
18 june
12h05
When your functions take the same arguments, consider using a class: counter-examples
10 june
07h50
Python sentinel objects, type hints, and PEP 661
27 may
09h55
When to use classes in Python? When your functions take the same arguments
18 may
15h20
Why use an SQL query builder in the first place?
11 may
07h50
SQL query builder in 150 lines of Python
28 april
15h40
Using a Makefile with .PHONY-only targets? Use a run.sh script instead
20 april
12h44
hashlib: object supporting the buffer API required
12 april
14h55
Learn by reading code: Python standard library design decisions explained
23 march
15h18
Dataclasses without type annotations
19 march
17h25
Deterministic hashing of Python data objects
10 march
12h00
Struggling to structure code in larger programs? Great resources a beginner might not find so easily
08 february
16h20
Optimizing Advent of Code 2020 day 17
22 january
15h10
Solving Advent of Code 2020 day 17 by not solving it