The Curious Engineer

All blogs / Python

Tall, Snarky Canadian

snarky.ca

Python core developer. Tall, snarky Canadian.

PythonDev tools / editors / IDEs

Posts
173 from 21 Jun 2013 to 16 Aug 2026
Posting
monthly (9 in the last year)
Kind
personal blog
Feed
https://snarky.ca/rss/

2026 7

  1. What's missing to have reproducible builds on PyPI
  2. My nomination statement for the 2026 Python packaging council
  3. How to publish to PyPI using GitHub Actions securely
  4. Why I wrote PEP 832 -- virtual environment discovery
  5. Why pylock.toml includes digital attestations
  6. State of WASI support for CPython: March 2026
  7. CLI subcommands with lazy imports

2025 6

  1. Should I rewrite the Python Launcher for Unix in Python?
  2. The varying strictness of TypedDict
  3. Why it took 4 years to get a lock files specification
  4. Unravelling t-strings
  5. Why I won't be attending PyCon US this year
  6. My impressions of Gleam

2024 6

  1. What the PSF Conduct WG does
  2. Don't return named tuples in new APIs
  3. My impressions of ReScript
  4. Saying thanks to open source maintainers
  5. State of WASI support for CPython: March 2024
  6. An experimental pip subcommand for the Python Launcher for Unix

2023 18

  1. My proof-of-concept record type
  2. State of standardized lock files: December 2023
  3. Introducing basicenum
  4. Announcing microvenv 2023.5
  5. Why I put in some effort to lower my carbon footprint
  6. State of standardized lock files for Python: August 2023
  7. Differentiating between writing down dependencies to use packages and for packages themselves
  8. State of WASI support for CPython: June 2023
  9. Proposing a struct syntax for Python
  10. In response to the Changelog #526
  11. MVPy: Minimum Viable Python
  12. Unravelling `del`
  13. Unravelling `global`
  14. How virtual environments work
  15. Use TOML for `.env` files?
  16. Testing a Python project using the WASI build of CPython with pytest
  17. The many shapes and sizes of keyboards
  18. Classifying Python virtual environment workflows

2022 9

  1. WebAssembly and its platform targets
  2. Unravelling `lambda` expressions
  3. Unravelling assignment expressions
  4. Unravelling `if` statements
  5. Unravelling Python's classes
  6. Unravelling ellipsis
  7. Unravelling literals
  8. Unravelling subscriptions in Python
  9. Unravelling `from` for `raise` statements

2021 21

  1. Unravelling `finally` and `else` from `try` statements
  2. Unravelling `elif`/`else` from `if` statements
  3. Unravelling `break` and `continue`
  4. A reverse chronology of some Python features
  5. Selecting a programming language can be a form of premature optimization
  6. Unravelling decorators
  7. Unravelling data structure displays
  8. Unravelling comprehensions
  9. Unravelling generator expressions
  10. Unravelling the `async with` statement
  11. Unravelling `async for` loops
  12. Introducing the Python Launcher for Unix
  13. What to do when you botch a release on PyPI
  14. How I rate films
  15. Unravelling `async` and `await`
  16. Unravelling the `with` statement
  17. Unravelling the `pass` statement
  18. The social contract of open source
  19. Unravelling `for` statements
  20. Unravelling assertions
  21. Unravelling the import statement

2020 15

  1. Unravelling boolean operations
  2. Unravelling membership testing
  3. Unravelling `not` in Python
  4. Unravelling `is` and `is not`
  5. Unravelling rich comparison operators
  6. Unravelling unary arithmetic operators
  7. Unravelling augmented arithmetic assignment
  8. Unravelling binary arithmetic operations in Python
  9. Unravelling attribute access in Python
  10. What is the core of the Python programming language?
  11. Why I don't like SemVer anymore
  12. The many ways to pass code to Python from the terminal
  13. Thoughts on where tools fit into a workflow
  14. What the heck is pyproject.toml?
  15. A quick-and-dirty guide on how to install packages for Python

2019 8

  1. Why you should use `python -m pip`
  2. What it's like to be on the Python steering council
  3. A Primer on the Stellar Network
  4. How do you verify that PyPI can be trusted?
  5. Podcast interviews where I talk about Python's governance
  6. The challenges in designing a library for PEP 425 (aka wheel tags)
  7. Deconstructing xkcd.com/1987/
  8. An update on Python's governance

2018 1

  1. Setting expectations for open source participation

2017 8

  1. Becoming an OSS project maintainer is about trust
  2. Clarifying PEP 518 (a.k.a. pyproject.toml)
  3. Designing an async API, from sans-I/O on up
  4. Customizing class creation in Python
  5. How to use your project & Travis to help test Python itself
  6. Don't just open the door, welcome people through it
  7. My experience with type hints and mypy
  8. Looking for commonality among HTTP request APIs

2016 14

  1. My impressions of Elm
  2. Adding syntax highlighting to Ghost's default theme
  3. Why I changed my blogging platform to Ghost(Pro)
  4. Why I took October off from OSS volunteering
  5. What to look for in a new TV
  6. Introducing Which Film
  7. Network protocols, sans I/O
  8. (Attempting) practical password management
  9. Why pathlib.Path doesn't inherit from str in Python
  10. How to pitch Python 3 to management
  11. How the heck does async/await work in Python 3.5?
  12. The history behind the decision to move Python to GitHub
  13. My New Years programming resolutions
  14. Why `print` became a function in Python 3

2015 16

  1. Where are we in the Python 3 transition?
  2. Stop using Python 2.6 please
  3. Why Python 3 exists
  4. If I were designing Python's import from scratch
  5. Comparing Twitter & Google+ engagement
  6. How I stay happy making open source software
  7. Why I bought a Google OnHub router
  8. Try to not use the Python C API directly
  9. Trying out Jupyter Notebooks
  10. Python 3 support on PyPI
  11. Looking at Python 3 usage in the astronomy community
  12. Porting to Python 3 is like "eating your vegetables"
  13. Going all-in on the mobile web
  14. Alternative voting systems for Canada
  15. Why WhatsApp made its web app use your phone as a server
  16. How to get your parents off of Skype using WebRTC

2014 26

  1. Commentary on getting your code to run on Python 2/3
  2. The long-term view of Python 2.7
  3. The game mechanics of Destiny
  4. What I would buy my family for Xmas
  5. Setting up a Raspberry Pi for XBMC and automatic torrenting by RSS feed
  6. Comprehending the different levels of the cloud
  7. Bringing someone into the modern age of technology
  8. Telephony in the modern age
  9. Trying out the fish shell
  10. How to argue for Python's use
  11. Why I don't worry about Python losing users
  12. How to keep Python 3 moving forward
  13. My impressions of Dart
  14. Security of cash vs. bank accounts vs. Bitcoin
  15. Should my family get tablets or laptops?
  16. What phones my family should use
  17. Radical idea: make the CBC web-only and use their spectrum for internet access
  18. The shift towards telecoms becoming just a dumb pipe
  19. caniusepython3 1.1.0
  20. My experience creating caniusepython3
  21. My guess as to why tablets have not taken off
  22. Using Chrome Mobile Apps to make Oplop an Android/iOS app
  23. What security precautions my family should use
  24. What computers my family should use
  25. Some ideas on cleaning up the Senate
  26. My impressions of Scala

2013 10

  1. The key challenges in designing a programming language
  2. My thoughts on Go (again)
  3. Taking the Time to Re-evaluate Assumptions
  4. Offline JavaScript Testing
  5. What Would it Take to Stay in the 1% of Earners Perpetually?
  6. Trying to choose a soundbar
  7. Why I will never fit in among C++ programmers
  8. Writing a Zip File Importer: The Loader (Part 3)
  9. Writing a Zip File Importer: The Finder (Part 2)
  10. Writing a Zip File Importer: The Path Hook (Part 1)

Undated 8

  1. What will it take for physical media to go away
  2. What uhd tvs means maybe
  3. How can i fight climate change in my day to day life
  4. How i manage package version numbers
  5. Why competitive marketplaces arent always the best solution
  6. A tutorial on python package building
  7. What are the popular docker images for python
  8. Lazy importing in python 3 7