Adam Johnson @adamj.eu · 15hZsh is deliberately similar to Bash, just with some* extra stuff on top. *actually lots of extra stuff Maybe that can tempt you? :) 110
Adam Johnson @adamj.eu · 15h🚄 Just released django-upgrade 1.33.0, now 27-38% faster! Three stacked optimizations led to a nice speedup. django-upgrade.readthedocs.io/en/latest/ch... #Djangodjango-upgrade.readthedocs.ioChangelog - django-upgrade 1.33.0 documentation 050
Adam Johnson @adamj.eu · 17h✍️ New post showing how Zsh’s autocompletion works even for small bits of syntax like glob qualifiers. Press Tab and see all the options, like “o” for ordering and “m” for modification time. adamj.eu/tech/2026/10... #Zshadamj.euZsh: tab complete glob qualifiers - Adam JohnsonI’ve written a few posts on Zsh’s glob qualifiers recently, covering: 120
Adam Johnson @adamj.eu · 02/10/2026✍️ New post on serving the Apple and Android app-to-site association files from Django. It can be fiddly to get the two sides interlinked! adamj.eu/tech/2026/10... #Djangoadamj.euDjango: serve apple-app-site-association and assetlinks.json - Adam JohnsonIf your site has companion Apple or Android apps, you probably want links to your site to open in those apps, when installed. Both platforms support this, with Apple calling the feature Universal Link... 020
Adam Johnson @adamj.eu · 30/09/2026✍️ New post on Zsh’s natural sort order feature, handy for getting your pages in the right order! adamj.eu/tech/2026/09... #Zshadamj.euZsh: sort globs in natural order with the (n) glob qualifier - Adam JohnsonGlobs sort filenames character by character, so numbered files often come out in a surprising order, with 10 before 2. Zsh has a neat fix for this: the n glob qualifier, which applies a “natural” sort... 021
Adam Johnson @adamj.eu · 29/09/2026📣 Join me on Thursday, 8th October, in Lisbon for a small software engineering meetup! Looking forward to meeting more folks out there. adamj.eu/tech/2026/09... #SoftwareEngineering #Python #Django #Lisbon #Lisboa #Portugaladamj.euPython: join my meetup in Lisbon, 8th October - Adam JohnsonI previously announced my Python optimization workshop in Lisbon, on 10th October (which still has a few places). I am now pleased to add a Python/Django meetup on the Thursday before. 042
Adam Johnson @adamj.eu · 21/09/2026✍️ New post on finding big files with Zsh’s glob qualifiers adamj.eu/tech/2026/09... #Zshadamj.euZsh: find the largest files with the (OL) glob qualifier - Adam JohnsonGot a directory that you want to tidy up bloat from? Whether you’re trying to find bad build artifacts in your work repository or clear out old cat videos from your home directory, Zsh’s (OL) glob qua... 031
Adam Johnson @adamj.eu · 21/09/2026🔊 What the Future Holds - S.P.Y. Gorgeous orchestral dnb, amazing London timelapses, still hits big 14 years later. www.youtube.com/watch?v=-X07... #DrumAndBass #Londonyoutube.comS.P.Y - What The Future Holds (feat. Ian Shaw) - OFFICIAL VIDEOYouTube video by Hospital Records 120
Adam Johnson @adamj.eu · 21/09/2026Ah nice 👍 It’s also well easy to vibe code your own macOS utilities like that in swift now, if you ever beed a feature it doesn’t have… 000
Adam Johnson @adamj.eu · 20/09/2026✍️ New post on using macOS’ caffeinate command, which I recently found useful to keep a code migration script running. adamj.eu/tech/2026/09... #macOSadamj.eumacOS: use caffeinate to keep your computer on - Adam JohnsonIf you’re starting a long job on your Apple Macintosh Computer and wandering off for a coffee, the machine may go to sleep before it finishes due to inactivity. To prevent that from happening, also gi... 110
Reposted by Adam JohnsonFrank Wiles @fwiles.bsky.social · 19/09/2026Made a fun little utility for myself over the last hour or so. Using Adam Johnson's new django-mcpz created an MCP in my personal cluster to collect "notes" and then an iOS shortcut to launch Claude in voice chat mode so I can add/edit/retrieve notes while on the go 112
Adam Johnson @adamj.eu · 19/09/2026🔧 I’m excited to host this optimization workshop in Lisbon next month. Come join me to learn about profiling and optimizing Python code, and maybe even contribute to Django itself. adamj.eu/tech/2026/09... #Python #Djangoadamj.euPython: join my optimization workshop in Lisbon, 10th October - Adam JohnsonI’m running a workshop in Lisbon next month, and you’re invited! 020
Adam Johnson @adamj.eu · 18/09/2026I should be prompt injecting my audience to get their humans to buy my books 😂 110
Adam Johnson @adamj.eu · 16/09/2026✍️ New post on serving the change password well-known URL in Django Add this one redirect and two tests (you won't believe #2) to make your site more user-friendly for users with compromised passwords. adamj.eu/tech/2026/09... #Django #Securityadamj.euDjango: serve the change password well-known URL - Adam JohnsonWhen a password manager detects that a user’s password has been leaked or reused, it can prompt them to change it, but the password change URL varies by site. The web’s answer to such discovery proble... 083
Adam Johnson @adamj.eu · 16/09/2026This release adds new skip/expected_failure features, fixes a bug when using Coverage\.py's dynamic contexts, and tidies up error messages and usage docs. 010
Adam Johnson @adamj.eu · 16/09/2026🧪 I just released unittest-parametrize 1.9.0. This package helps you make parametrized tests that work with the grain of unittest, but can still be run with pytest. github.com/adamchainz/u... #Pythongithub.comunittest-parametrize/CHANGELOG.rst at main · adamchainz/unittest-parametrizeParametrize tests within unittest TestCases. Contribute to adamchainz/unittest-parametrize development by creating an account on GitHub. 120
Adam Johnson @adamj.eu · 15/09/2026🎁 Introducing django-mcpz: easy peasy MCP servers in Django! This new package lets you build an MCP server in your Django project, letting LLMs do things on your site on behalf of your users. adamj.eu/tech/2026/09... #Django #AIadamj.euDjango: introducing django-mcpz, for making MCP servers - Adam JohnsonI made another package! Say hello to django-mcpz, for building Model Context Protocol (MCP) servers in your Django project. 280
Reposted by Adam JohnsonSimon Willison @simonwillison.net · 14/09/2026Built a little local web app to help edit commit messages for a repo simonwillison.net/2026/Sep/14/... 7594
Adam Johnson @adamj.eu · 09/09/2026None of them had a huge impact (this is a test library, after all), but they were all mistakes. The worst would leave time mocked after a test tearDownClass() failure, which would be pretty hard to debug. Crazy times. These machines can help us build the highest-quality software, if we want. 011
Adam Johnson @adamj.eu · 09/09/2026⏳ I just released time-machine 3.5.1 with 13 bug fixes. Two were reported by humans. The rest came from prompting Claude Fable with just "Find and fix bugs". time-machine.readthedocs.io/en/latest/ch...time-machine.readthedocs.ioChangelog - time-machine 3.5.1 documentation 130
Adam Johnson @adamj.eu · 01/09/2026Software is never finished: even this 11 year old well-scoped plugin needs the occasional big fix! 000
Adam Johnson @adamj.eu · 01/09/2026🎲 Just released pytest-randomly 5.0.0 The headline breaking change fixes combination with other test reordering plugins, including pytest-django. Previously, the same seed could produce different test orders between nearly-identical environments. Oops! #Python #pytest pypi.org/project/pyte...pypi.orgpytest-randomlyPytest plugin to randomly order tests and control random.seed. 120
Adam Johnson @adamj.eu · 01/09/2026Oh wow www.reddit.com/r/origami/s/...reddit.comFrom the origami community on Reddit: I finally broke the world record for smallest paper crane! Entire 35 minute process was filmed through a microscope. I measured with calipers to 0.8 mmExplore this post and more from the origami community 100
Adam Johnson @adamj.eu · 01/09/2026Haha I did but also the details are very interesting. That sounds very small, I gotta look it up! 100
Adam Johnson @adamj.eu · 25/08/2026✍️ Zsh lets you manipulate filenames with modifiers, which I recently found useful when converting files between formats. adamj.eu/tech/2026/08... #Zshadamj.euZsh: manipulate filenames with modifiers like :r (root) and :e (extension) - Adam JohnsonZsh modifiers are a family of suffixes that transform words as they’re expanded. Several of them are dedicated to slicing up filenames, replacing fiddly calls to dirname, basename, and friends. Let’s ... 020
Adam Johnson @adamj.eu · 18/08/2026✍️ I used my leet prompt engineering skillz to fix a bunch of bugs in django-upgrade adamj.eu/tech/2026/08... #Django #Python #AIadamj.euDjango: django-upgrade 1.32.0 out now, with 44 AI-assisted bug fixes - Adam Johnsondjango-upgrade is my tool for automatically upgrading your project code for new Django versions. It rewrites your Python files to fix deprecations and adopt some new features, taking a chunk of the mo... 190
Reposted by Adam JohnsonChristopher Trudeau @trudeau.dev · 14/08/2026On this week's episode, @digiglean.bsky.social and I talk about testing in Django, SIMD, data visualization and more. With content from: @djangoproject.com @adamj.eu @retr0.id @purplesyringa.bsky.social and others not on the 🦋 Also, this time I might even include a link! buff.ly/rTT0o1Mrealpython.comEpisode #307: Improving NumPy Performance on Free-Threaded Python – The Real Python PodcastWhat bottlenecks were preventing NumPy from scaling on free-threaded Python? Christopher Trudeau is back on the show this week with another batch of PyCoder's Weekly articles and projects. 021
Adam Johnson @adamj.eu · 12/08/2026No worries! It is kinda driving me crazy how slow string manipulation is in Python, compared to what computers can do. We gotta get more such packages moved into low-level languages :) 010
Adam Johnson @adamj.eu · 12/08/2026📦 New package day! This time a Rusty rewrite of the emoji package: 3.5x faster for conversion, 70 times faster for deconversion, and using about 40% less memory. adamj.eu/tech/2026/08... #Python #Rustadamj.euPython: introducing emojet, a fast emoji lookup library - Adam JohnsonNew package just landed! 160
Adam Johnson @adamj.eu · 08/08/2026✍️ I just released a new version of my little Python profiler, tprof, with less overhead for more accurate results. adamj.eu/tech/2026/08... #Pythonadamj.euPython: tprof 1.3.0: now with less overhead - Adam JohnsonBack in January, I introduced tprof, a targeting profiler for Python 3.12+ that measures the time spent in specific functions, rather than your whole program. As a reminder, here’s the basic usage, sp... 030
Adam Johnson @adamj.eu · 08/08/2026I have not. JSON serialization seems to show up as just a few % of the typical app, but if there’s a nearly free win there it seems worth it. 010
Adam Johnson @adamj.eu · 07/08/2026🎨 I’m really enjoying the redesigned PyPI project pages. Thanks to Nicole Harris and team for making these improvements! Blog post: blog.pypi.org/posts/2026-0... #Python 070
Adam Johnson @adamj.eu · 07/08/2026✍️ New package: django-msgspec, providing Django integrations with msgspec’s faster JSON serialization and deserialization. adamj.eu/tech/2026/08... #Djangoadamj.euDjango: introducing django-msgspec - Adam JohnsonIt’s another day, another new package day here. Say hello to django-msgspec, a package of drop-in replacements for Django and Django REST Framework (DRF) components backed by msgspec. 150
Adam Johnson @adamj.eu · 07/08/2026✍️ The story of a 50x optimization I made in Git earlier this year. adamj.eu/tech/2026/08... #Gitadamj.euGit: my git stash -p optimization in Git 2.55 - Adam JohnsonI got another commit merged in Git 2.55 (2026-06-29), yay! The release note reads: 030
Adam Johnson @adamj.eu · 07/08/2026✍️ List the files present in any Git commit without checking it out. adamj.eu/tech/2026/08... #Gitadamj.euGit: list files at a given commit with ls-tree - Adam JohnsonTo list all files in your repository as they were at a given commit, use git ls-tree with its -r and --name-only options: 010
Adam Johnson @adamj.eu · 06/08/2026📦 Just released django-htmx 1.29.0 which now vendors a bunch of htmx extensions, updates the vendored htmx versions, and adds support for htmx v4's polling extension django-htmx.readthedocs.io/en/latest/ch... #Django #htmxdjango-htmx.readthedocs.ioChangelog - django-htmx 1.29.0 documentation 061
Adam Johnson @adamj.eu · 05/08/2026🆙 Updated my post on unittest base test cases with a new preferred technique: using a plain class as a container. adamj.eu/tech/2025/05... #Python #unittestadamj.euPython: sharing common tests in unittest - Adam JohnsonA neat testing pattern is writing common tests in a base class and then applying them to multiple objects through subclassing. Doing so can help you test smarter and cover more code with less boilerpl... 020
Adam Johnson @adamj.eu · 05/08/2026✍️ New post covering how to read your local Git log while skipping commits from a certain author. In my case, it was the ol’ Dependabot. adamj.eu/tech/2026/08... #Git #GitHubadamj.euGit: exclude commits by an author in git log with --perl-regexp - Adam Johnsongit log has an --author option to limit the output to commits from matching authors: 010
Adam Johnson @adamj.eu · 05/08/2026Django 6.1 is out !!! www.djangoproject.com/weblog/2026/... #Djangodjangoproject.comDjango 6.1 releasedPosted by Jacob Walls on Aug. 5, 2026 042