Advertisement · 728 × 90

Posts by Miguel Grinberg

I don't know how to explain to the people who pop up when creatives complain about "AI" to say there are legit uses for it just how much they sound like someone saying "Well actually fire is used to make bread" when people are talking about an organized arson ring burning down their fucking houses

1 week ago 8568 2619 96 45

A Borges story about a guy who gets AI to summarize all the world’s information for him, and then summarize the summary, until the AI has the whole world summarized into a single word. He sits alone at his desk, staring at the word, repeating it endlessly, certain he is experiencing everything

9 months ago 7144 1977 145 192
How to Host your Own Email Server I recently started a new platform where I sell my books and courses, and in this website I needed to send account related emails to my users for things such as email address verification and password…

New blog post: How to Host your Own Email Server blog.miguelgrinberg.com/post/how-to-...

1 month ago 1 0 0 0
LLM Use in the Python Source Code There is a trick that is spreading through social media. If you block the claude user on GitHub, then each time you visit a GitHub repository that has commits by this user you get a banner at the top…

New blog post: LLM Use in the Python Source Code blog.miguelgrinberg.com/post/llm-use...

1 month ago 5 1 0 0
Preview
My Courses Site is Moving to a New Home This is a short blog post to announce that I'm migrating the site in which I host my paid courses to a new platform at https://learn.miguelgrinberg.com. If you have purchased a course or ebook…

If you have purchased any of my books or video courses, note that I am migrating my courses site to a new platform. Details in this blog post: blog.miguelgrinberg.com/post/my-cour...

2 months ago 1 0 0 0
Date Arithmetic in Bash Date and time management libraries in many programming languages are famously bad. Python's datetime module comes to mind as one of the best (worst?) examples, and so does JavaScript's Date class. It…

New blog post: Date Arithmetic in Bash blog.miguelgrinberg.com/post/date-ar...

2 months ago 3 0 0 0
Preview
How to Add a Quick Interactive Map to your Website In this article I want to share a technique that I recently learned to display an interactive map on a website. For this, you will need just a few lines of HTML and JavaScript. This solution does not…

New blog post: How to Add a Quick Interactive Map to your Website blog.miguelgrinberg.com/post/how-to-...

2 months ago 3 0 0 0
Preview
A Year In Review: Flask in 2025 Like I did last year, I reserved some time during my holiday break to prepare an independent report of the Flask ecosystem in 2025.Project activityBefore I start showing you numbers, I feel it is…

A Year In Review: Flask in 2025 blog.miguelgrinberg.com/post/a-year-...

3 months ago 4 1 0 0
Preview
CSRF Protection without Tokens or Hidden Form Fields A couple of months ago, I received a request from a random Internet user to add CSRF protection to my little web framework Microdot, and I thought it was a fantastic idea.When I set off to do this…

New blog post: CSRF Protection without Tokens or Hidden Form Fields blog.miguelgrinberg.com/post/csrf-pr...

3 months ago 3 1 0 0
Advertisement
Preview
How to Securely Store Secrets in Environment Variables You may have seen the recent reports of a malware that stole API keys, tokens and other secrets from a large number of developers. Where were these secrets stolen from? You guessed it, they were…

New blog post: How to Securely Store Secrets in Environment Variables blog.miguelgrinberg.com/post/how-to-...

4 months ago 3 2 1 0

The cons of generative AI for authors and artists are still there, even if you as a software developer don't experience them directly.

4 months ago 5 0 0 0
Post image

PyCon Ireland 2025 is next weekend and I will be speaking about Server Sent Events. I hope to see some of you there!

5 months ago 5 1 0 0
Preview
Episode #271: Benchmarking Python 3.14 & Enabling Asyncio to Scale – The Real Python Podcast How does Python 3.14 perform under a few hand-crafted benchmarks? Does the performance of asyncio scale on the free-threaded build? Christopher Trudeau is back on the show this week, bringing another…

On this week's episode, @digiglean.bsky.social and I talk about loads of PEPs, more 3.14 news, and discuss what it means to have good engineering taste.

With content from: @brianokken.bsky.social @miguelgrinberg.com @changs.co.uk @davepeck.org and others not on the 🦋

5 months ago 5 3 0 0

@nader.mx hi, I'll try to find out what's going on. The people who used your gifts are still members as far as I can see.

5 months ago 1 0 1 0
Preview
Python 3.14 Is Here. How Fast Is It? In November of 2024 I wrote a blog post titled "Is Python Really That Slow?", in which I tested several versions of Python and noted the steady progress the language has been making in terms of…

Python 3.14 Is Here. How Fast Is It? blog.miguelgrinberg.com/post/python-...

6 months ago 3 0 0 0

A true professional is measured by the quality of their work, not by the tools they choose to use or not use.

6 months ago 4 0 0 0
A Python screenshot that shows that str.split() breaks a string and groups multiple spaces into a single break, while str.split(" ") breaks at every single space, creating additional empty elements in the split list.

A Python screenshot that shows that str.split() breaks a string and groups multiple spaces into a single break, while str.split(" ") breaks at every single space, creating additional empty elements in the split list.

Python tip: the str.split() method does something completely different when called without arguments vs. passing a separator character. I spent more time than I'm willing to admit today debugging a string parser, and this was the main issue!

8 months ago 4 1 1 0
Preview
Benchmarking MicroPython In the Q&A session following my EuroPython 2025 presentation about the Microdot web framework, a member of the audience asked me what the performance of MicroPython running on a microcontroller…

New blog post: Benchmarking MicroPython blog.miguelgrinberg.com/post/benchma...

8 months ago 3 0 0 0
Advertisement

This means a lot coming from you @daniel.feldroy.com, thanks!

8 months ago 4 0 0 0

Certainly! github.com/miguelgrinbe...

8 months ago 1 0 0 0
Post image Post image

And here is the list of Microdot features, both for the core part (just 765 lines of code!) and the optional features. I am really proud of having been able to pack so much stuff in so few lines of code!

8 months ago 2 0 1 0
Post image

This is the slide of my #EuroPython presentation about my Microdot web framework for Python and MicroPython in which I compare its size against well known frameworks.

8 months ago 7 2 1 0

However, Generative AI as a topic crept pretty much into every hallway conversation at #EuroPython. Even though I'm tired of hearing about GenAI and being asked what I think of it, I was surprised to find much more people than I expected aligned with my views and sharing my concerns.

8 months ago 1 0 0 0

I'm back from #EuroPython. I have to congratulate the organizers for including a well balanced selection of topics in the program, with a lot of options for those of us who are tired of hearing about Generative AI.

8 months ago 7 0 1 0
Miguel Grinberg and me

Miguel Grinberg and me

The man, the myth 🇦🇷 @miguelgrinberg.com

9 months ago 8 1 1 0
Advertisement

And I'm off to #EuroPython. I hope to meet some of you in Prague this week!

9 months ago 2 0 0 0
Preview
Why Generative AI Coding Tools and Agents Do Not Work For Me People keep asking me If I use Generative AI tools for coding and what I think of them, so this is my effort to put my thoughts in writing, so that I can send people here instead of having to repeat…

Why Generative AI Coding Tools and Agents Do Not Work For Me blog.miguelgrinberg.com/post/why-gen...

10 months ago 11 3 1 1

So you let Claude loose on the code, let it try and fail a few times (we don't know how many/for how long) and led it to find you which flag can be used here. Still impressive that it found you a solution, but it would be useful to see the entire context for this session and not just the last bit.

10 months ago 0 0 0 0

I feel you are underselling yourself here. A person of your experience doesn't just "copy paste". You must have realized that adding an option with such a vague name as "--all-features" could be trouble, correct? Even before seeing the build still failing you must have known this option had to go.

10 months ago 0 0 2 0

The bug that was addressed by Claude in this example was introduced in a previous commit in that same PR, when the --all-features flag was added to the wasm build. Was this flag added by you, or by Claude in a previous attempt? In other words, is Claude here fixing your mistake or its own?

10 months ago 1 0 1 0