Eric Matthes's Avatar

Eric Matthes

@ehmatthes

Programmer, writer, teacher... I also like the outdoors. :) I write a weekly Python newsletter, at www.mostlypython.com. I'm also the author of Python Crash Course, from No Starch Press.

1,344
Followers
187
Following
152
Posts
16.11.2024
Joined
Posts Following

Latest posts by Eric Matthes @ehmatthes

Can anyone recommend a ~15" monitor that works with a macbook using just a USB-C cable? I don't need particularly high resolution.

I looked a couple years ago, but it seemed like most would require a caldigit hub or something like that.

06.02.2026 16:52 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

That is a great feature! I'm considering this for work at conferences and other trips. I tried using an iPad air, but that's not enough extra screen space to make it worth using.

06.02.2026 16:42 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Can you just plug this into a macbook and it gives you an extended desktop? I looked at this about two years ago, and could not figure out which ones would work without something like a caldigit hub.

06.02.2026 16:31 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
Announcing Djangonaut Space Session 6 Applications Open! Are you ready to embark on a celestial journey through the Django universe? We’re elated to open the doors for …

Are you interested in contributing to Django? Consider applying to join @djangonaut.space for their upcoming session. Applications close on February 2nd.

✍🏾 Apply here: djangonaut.space/sessions/20...
πŸ“š Read more here: djangonaut.space/comms/2026/...

22.01.2026 12:16 πŸ‘ 1 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

That doesn't sound quite so bad either!

06.11.2025 20:43 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
38 things Python developers should learn in 2025 Python in 2025 is different. Threads really are about to run in parallel, installs finish before your coffee cools, and containers are the default. In this episode, we count down 38 things to learn th...

New episode with @wang.social , @calvinhp.com, and host @mkennedy.codes

#524: 38 things Python developers should learn in 2025

talkpython.fm/episodes/sho...

20.10.2025 15:31 πŸ‘ 5 πŸ” 3 πŸ’¬ 0 πŸ“Œ 0
Preview
Time deltas are not intuitive MP 152: But the timedelta implementation in Python is correct. In many projects, timestamps are just a bit of metadata you might look at once in a while when troubleshooting. But sometimes, timestamp...

There's always something new to learn about managing time in software. I've been working a lot with timestamps recently, and wrote up some surprising-to-me things from that work.

#Python

www.mostlypython.com/time-deltas-...

20.10.2025 12:26 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
$ python manage.py deploy --vm-size shared-cpu-2x --automate-all

$ python manage.py deploy --vm-size shared-cpu-2x --automate-all

The 1.2.1 release of django-simple-deploy allows plugins to extend the core CLI.

For example, the dsd-flyio plugin now supports a `--vm-size` option.

This is what was needed to make plugins much more powerful than simply "give me the smallest possible working deployment".

#Python #Django

15.09.2025 21:05 πŸ‘ 4 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0

I've definitely been stuck at the `uv venv .venv` and `uv pip install <package>` level of adoption. This is a great writeup of how to really simplify your workflow with uv.

28.08.2025 12:36 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I like that approach because you can add a `--url` flag to your test suite, and run those same tests against a deployed version of the project.

27.08.2025 16:13 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

For projects that aren't going to see a lot of active development, I've definitely taken the shortcut of just spinning up a development server and running a basic set of tests on the final rendered pages.

27.08.2025 16:13 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I'm going to clarify the cost of a basic Fly.io deployment, but I have to wait until next week to do that.

I've been on the legacy free tier for years now, and I finally "downgraded" my account to the pay as you go plan. Kudos to Fly for honoring their free tier for years after it was deprecated!

27.08.2025 16:02 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Choosing a platform - django-simple-deploy

I'm jumping back into django-simple-deploy work this week. The focus will be on the dsd-vps plugin, but first up is a refresh of the page that compares a core set of PAAS hosts:

#Python #Django

django-simple-deploy.readthedocs.io/en/latest/ge...

27.08.2025 16:01 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
$ git clone https://github.com/ehmatthes/wagtail_demo.git  
$ cd wagtail_demo
$ uv venv .venv && act
$ uv pip install -r requirements.txt

$ pip install -e ~/projects/django-simple-deploy
$ uv pip install -e ~/projects/dsd-platformsh
$ python manage.py deploy --automate-all

$ platform ssh
> python manage.py createsuperuser

$ git clone https://github.com/ehmatthes/wagtail_demo.git $ cd wagtail_demo $ uv venv .venv && act $ uv pip install -r requirements.txt $ pip install -e ~/projects/django-simple-deploy $ uv pip install -e ~/projects/dsd-platformsh $ python manage.py deploy --automate-all $ platform ssh > python manage.py createsuperuser

Wagtail admin page with logged in user

Wagtail admin page with logged in user

Fun news! I just deployed a demo Wagtail site to Platform.sh using django-simple-deploy. Here's the steps, and a screenshot of a logged-in admin user.

#Django

14.08.2025 21:45 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
9. Trust Is the New Currency
Amidst an ever-growing wave of AI slop on the internet, actual humans and trust have never been more valuable. When you can’t trust search engines, especially not videos, and certainly not AI/LLMs, finding a human with real expertise who is willing to share it has never been more valuable.

I suspect we will find a few people in different domains who become the β€œthought leaders” as most content turns into garbage. This is good for them and good for quality content, but bad for the larger ecosystem of people sharing their expertise. If someone already has 1m followers on YouTube for a topic, it will be much easier for them to scale to 2m than for a newcomer to somehow stand out and gain enough traction to generate enough views to make the economics work.

This is not really a new challenge, but tech constantly amplifies already-existing dynamics into another stratosphere.

9. Trust Is the New Currency Amidst an ever-growing wave of AI slop on the internet, actual humans and trust have never been more valuable. When you can’t trust search engines, especially not videos, and certainly not AI/LLMs, finding a human with real expertise who is willing to share it has never been more valuable. I suspect we will find a few people in different domains who become the β€œthought leaders” as most content turns into garbage. This is good for them and good for quality content, but bad for the larger ecosystem of people sharing their expertise. If someone already has 1m followers on YouTube for a topic, it will be much easier for them to scale to 2m than for a newcomer to somehow stand out and gain enough traction to generate enough views to make the economics work. This is not really a new challenge, but tech constantly amplifies already-existing dynamics into another stratosphere.

My favorite section focuses on trust. I fully agree with this take, and this mindset is changing how I build software.

People hyping AI for profit are spilling a bunch of s**t that the rest of us have to deal with. I'm enjoying building things that center trust, explicitly against all this AI slop.

14.08.2025 13:53 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
AI For the Rest of Us - Will Vincent What LLMs and ever-improving frontier models like ChatGPT, Claude, and others portend.

@wsvincent.bsky.social shared a really grounded take on the state of AI this week. If you're trying to make sense of where we're at and where we're headed, I highly recommend reading his take. It's a quick read.

wsvincent.com/ai-for-the-r...

14.08.2025 13:48 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Is the volume of emails changing with the availability of ChatGPT? I'm wondering if it's absorbing some of that communication, or just encouraging people to keep going with their "theories".

11.08.2025 11:06 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

OpenAI has absolutely fostered this kind of environment.

There's a whole lot of people taking all their hype at face value, who don't have the background to critically evaluate their claims.

08.08.2025 19:21 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

This makes me *way* more likely to be on the latest point release, for every version, as soon as any new point release comes out.

08.08.2025 14:29 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Big takeaways: I have a bunch of interpreters (python3.14, python3.13, python3.12...python3.9) available as fast as I can type any of those aliases.

And I can update *all* of them with one command:

$ uv python upgrade

08.08.2025 14:29 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Updating Python MP 147: How do you clean up when you have too many Pythons lying around? About a year and a half ago, I wrote a post about how to update the version of Python you're using locally. I was hoping that ...

Like many others, I've been loving uv and it's changed my workflows for the better.

I cleaned up my system recently, removing pyenv in favor of an all-uv approach. I wrote up the process here:

#Python #uv

www.mostlypython.com/updating-pyt...

08.08.2025 13:44 πŸ‘ 6 πŸ” 1 πŸ’¬ 2 πŸ“Œ 0
Introduction - py-bugger

Recent releases also include a number of bug fixes. Docs are here:

py-bugger.readthedocs.io/en/latest/

14.07.2025 14:12 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
$ py-bugger --target-file dog.py --target-lines 15-20

$ py-bugger --target-file dog.py --target-lines 15-20

$ py-bugger --target-file .venv/lib/python3.12/site-packages/PIL/Image.py --target-lines 3068-3117

$ py-bugger --target-file .venv/lib/python3.12/site-packages/PIL/Image.py --target-lines 3068-3117

py-bugger is up to 0.5.2 now.

Latest feature: you can introduce a bug into a specific block of lines, or even a single line in the target file.

It works for small teaching files, and you can target large files in library code as well.

#Python

14.07.2025 14:11 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

This will be even more true as the project continues to evolve, and becomes capable of introducing a wider range of bugs.

25.06.2025 18:53 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The `--exception-type` argument is really helpful for teaching and learning. But in the real world, we don't know what kinds of bugs are going to appear.

Letting py-bugger randomly choose the bug that gets introduced makes your debugging practice closer to real-world debugging experiences.

25.06.2025 18:53 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
$ py-bugger
Added bug.
All requested bugs inserted.

$ py-bugger Added bug. All requested bugs inserted.

$ py-bugger -e IndentationErrorr
You specified IndentationErrorr for --exception-type.  
  Did you mean IndentationError?

$ py-bugger -e IndentationErrorr You specified IndentationErrorr for --exception-type. Did you mean IndentationError?

In the 0.4.1 release of py-bugger, the `-e` argument is optional. If you leave it off, it will randomly select what kind of bug to introduce in the target project.

It also suggests valid arguments for `-e` if you make a typo.

#Python

25.06.2025 18:52 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I think if you're writing a technical book/post/documentation, you have to stick to this principle:

If the code isn't directly loaded from a tested source file, or copy-pasted from one, it doesn't go in the document.

"I just need to make a little edit to the code in the post, it'll be fine"

No

21.06.2025 12:11 πŸ‘ 127 πŸ” 15 πŸ’¬ 9 πŸ“Œ 4

The next bit of work is to make the `--exception-type` argument optional. A bare call will randomly choose the kind of error to insert. That will open up implementation of a much wider range of bugs that can be introduced.

11.06.2025 13:21 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Introduction - py-bugger

py-bugger 0.4.0 is out! A few bugs have been addressed, and it now looks for a clean Git status before introducing bugs in a project or file. You can override that behavior with the `--ignore-git-status` flag.

py-bugger.readthedocs.io/en/latest/

#Python

11.06.2025 13:21 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I would love to hear more about the serious side of this. It feels like a y2k-fixing gig that never ends.

06.06.2025 17:06 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0