Weeknotes 2025-02-17
,Pessimist: The glass is half full. Optometrist: That's the letter H --Tess
Managed to accomplish quite a bit outside of my regular work this week.
PySAML2 Updates
A while back, I wrote a tutorial on setting up Django with SSO login using PySAML2's test IdP. Recently, a reader pointed out that the tutorial stopped working with Python 3.13. I filed a bug report with PySAML2 about this issue, and last week I created a pull request to make the test IdP server compatible with Python 3.13.
The main challenges were:
- The old
cgi
module from the standard library was used, but it's been removed in 3.13 - The test server uses
shelve.open
to store data on disk, which now has complications:- The
dbm
module (used by shelve) has switched its default backend from berkeleydb to sqlite in Python 3.13+ - Cheroot (the HTTP server powering CherryPy) uses threads for concurrency but tries to access the same shelve database from all threads
- This causes sqlite to complain about reading from a database created in a different thread
- The
My solution is to use dbm.dumb
as the backend for Python 3.13+, since performance isn't critical for a test server.
django-cast Progress
I released a new version with support for Wagtail 6.4. I'm happy to report that test coverage is back to 100%! Also made some minor fixes related to uv and tox.
django-resume Improvements
Released a new version with several improvements:
- Better documentation (how to run the example project)
- CV links are now visible to unauthenticated users when no token is required
- Added preview images to the README and included a link to my FOSDEM talk
Articles
- Why Blog If Nobody Reads It? | You might have already guessed, but for this blog too, the main audience is simply: me 😁
- Smuggling arbitrary data through an emoji
- My FOSDEM'25 watchlist
- Frontend
- Beware the faux bold (and how to fix it)
- CSS Custom Functions are coming … and they are going to be a game changer!
- The European Accessibility Act for websites and apps | It's near!
- Accessibility Cheatsheet
- How to Favicon in 2025: Three files that fit most needs
- Replace your JavaScript Animation Library with View Transitions
- Python
- Upcoming Aftermath
Fediverse
- A fun CSS-only experimentation using modern features (anchor positioning, @property, :has(), and more!) | Bouncy radio buttons
- Your periodic #llm #llms #chatgpt programming rant.
- People above 40 in my timeline, how many hours of actual #sleep everyday do you need to feel normal in the day time?
- Django people who deploy to a VPS: What is your current setup?
- golf of what? | Argument settled.
- Lost | Webcomic
Software
- django-simple-deploy 1.0 is out | Hmm, should I move my deployment stuff to a plugin?
- Entity Mapping, Cloning, Disabling, and more | This Week in Bevy Engine
Videos
- Terence Tao on how we measure the cosmos | Distance ladder part 1 | Very cool, I had no idea how complicated this stuff is
- The Macroeconomics Of Privacy and Dignity - Mike Hoye | Framing Privacy as agency over your dignity is a strong move
- Neural networks (3Blue1Brown series) | Best visual explanation I've seen so far