Sign in

Miguel Grinberg

@miguelgrinberg.com
471 followers 52 following 49 posts

I write software. And from time to time, I write or speak about writing software.

PostsRepliesMedia
Miguel Grinberg @miguelgrinberg.com · 12/06/2026
New blog post: I Am Not A Reverse Centaur blog.miguelgrinberg.com/post/i-am-no...
blog.miguelgrinberg.com
I Am Not a Reverse Centaur
About a year ago I wrote on this blog about how coding with LLMs would not work for me, even if there were no ethical or environmental concerns preventing me to use them. I'm not going to repeat the…
062
Reposted by Miguel Grinberg
John Scalzi @scalzi.com · 11/04/2026
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
138137304416
Reposted by Miguel Grinberg
Marcus @marcusjmerritt.com · 14/07/2025
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
14471041961
Miguel Grinberg @miguelgrinberg.com · 06/03/2026
New blog post: How to Host your Own Email Server blog.miguelgrinberg.com/post/how-to-...
blog.miguelgrinberg.com
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…
010
Miguel Grinberg @miguelgrinberg.com · 28/02/2026
New blog post: LLM Use in the Python Source Code blog.miguelgrinberg.com/post/llm-use...
blog.miguelgrinberg.com
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…
061
Miguel Grinberg @miguelgrinberg.com · 15/02/2026
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...
blog.miguelgrinberg.com
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…
010
Miguel Grinberg @miguelgrinberg.com · 04/02/2026
New blog post: Date Arithmetic in Bash blog.miguelgrinberg.com/post/date-ar...
blog.miguelgrinberg.com
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…
030
Miguel Grinberg @miguelgrinberg.com · 29/01/2026
New blog post: How to Add a Quick Interactive Map to your Website blog.miguelgrinberg.com/post/how-to-...
blog.miguelgrinberg.com
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…
030
Miguel Grinberg @miguelgrinberg.com · 01/01/2026
A Year In Review: Flask in 2025 blog.miguelgrinberg.com/post/a-year-...
blog.miguelgrinberg.com
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…
041
Miguel Grinberg @miguelgrinberg.com · 21/12/2025
New blog post: CSRF Protection without Tokens or Hidden Form Fields blog.miguelgrinberg.com/post/csrf-pr...
blog.miguelgrinberg.com
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…
021
Miguel Grinberg @miguelgrinberg.com · 14/12/2025
New blog post: How to Securely Store Secrets in Environment Variables blog.miguelgrinberg.com/post/how-to-...
blog.miguelgrinberg.com
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…
132
Miguel Grinberg @miguelgrinberg.com · 26/11/2025
The cons of generative AI for authors and artists are still there, even if you as a software developer don't experience them directly.
050
Miguel Grinberg @miguelgrinberg.com · 09/11/2025
PyCon Ireland 2025 is next weekend and I will be speaking about Server Sent Events. I hope to see some of you there!
051
Reposted by Miguel Grinberg
Christopher Trudeau @trudeau.dev · 24/10/2025
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 🦋
buff.ly
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…
053
Miguel Grinberg @miguelgrinberg.com · 24/10/2025
@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.
100
Miguel Grinberg @miguelgrinberg.com · 08/10/2025
Python 3.14 Is Here. How Fast Is It? blog.miguelgrinberg.com/post/python-...
blog.miguelgrinberg.com
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…
030
Miguel Grinberg @miguelgrinberg.com · 01/08/2025
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!
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.
141
Miguel Grinberg @miguelgrinberg.com · 31/07/2025
New blog post: Benchmarking MicroPython blog.miguelgrinberg.com/post/benchma...
blog.miguelgrinberg.com
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…
030
Miguel Grinberg @miguelgrinberg.com · 27/07/2025
This means a lot coming from you @daniel.feldroy.com, thanks!
040
Miguel Grinberg @miguelgrinberg.com · 21/07/2025
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.
172
Miguel Grinberg @miguelgrinberg.com · 21/07/2025
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.
170
Reposted by Miguel Grinberg
marcorichetta.bsky.social @marcorichetta.bsky.social · 19/07/2025
The man, the myth 🇦🇷 @miguelgrinberg.com
Miguel Grinberg and me
181
Miguel Grinberg @miguelgrinberg.com · 15/07/2025
And I'm off to #EuroPython. I hope to meet some of you in Prague this week!
020
Miguel Grinberg @miguelgrinberg.com · 14/06/2025
Why Generative AI Coding Tools and Agents Do Not Work For Me blog.miguelgrinberg.com/post/why-gen...
blog.miguelgrinberg.com
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…
1113
Reposted by Miguel Grinberg
Glyph @glyph.im · 05/06/2025
I kinda hated writing this but I needed to do it. Maybe now, finally, I can stop writing it in little fragments here and there, and just let it go and do something else. blog.glyph.im/2025/06/i-think-im-do…
blog.glyph.im
Deciphering Glyph :: I Think I’m Done Thinking About genAI For Now
Deciphering Glyph, the blog of Glyph Lefkowitz.
82059
Reposted by Miguel Grinberg
EuroPython 2026, Kraków @europython.eu · 03/06/2025
Join Miguel Grinberg @miguelgrinberg.com at EuroPython for "Microdot, the impossibly small web framework for Python and MicroPython.". Talk: ep2025.europython.eu/SVTXGC
Miguel Grinberg
021
Miguel Grinberg @miguelgrinberg.com · 31/05/2025
Here is how I create a React + Flask project in 2025: blog.miguelgrinberg.com/post/create-...
blog.miguelgrinberg.com
Create a React + Flask Project in 2025
My article on creating a React + Flask project is one of the most visited on this blog. Can you believe that I wrote it over 5 years ago?In this article and video I'm going to share how I'm building…
010
Reposted by Miguel Grinberg
The Pragmatic Bookshelf ✅ @pragprog.com · 02/05/2025
Spring Best Sellers Sale Week 4 The Pragmatic Polyglot 40% Off – This Week Only! Code: 2025POLYGLOT at checkout Titles on sale this week include - - The New and Improved Flask Mega-Tutorial by @miguelgrinberg.com pragprog.com/titles/...
001
Miguel Grinberg @miguelgrinberg.com · 30/04/2025
In case you haven't heard, The Pragmatic Bookshelf is offering my Flask Mega-Tutorial ebook on sale at 40% off between today and May 7th. Use promo code "2025POLYGLOT" at checkout to receive the discount! pragprog.com/titles/d-mgf...
pragprog.com
The New and Improved Flask Mega-Tutorial
Overarching tutorial for Python beginner and intermediate developers that teaches web development with the Flask framework.
040
Miguel Grinberg @miguelgrinberg.com · 30/03/2025
Just received confirmation that my talk on Microdot has been accepted at #EuroPython2025 in Prague. I look forward to seeing some of you in July and sharing an update on this project!
030
Miguel Grinberg @miguelgrinberg.com · 13/03/2025
The new blog post on font ligatures is published! blog.miguelgrinberg.com/post/font-li...
blog.miguelgrinberg.com
Font Ligatures for your Code Editor and Terminal
The other day I shared my code editor window during a video call with a client, and he immediately did a double take. "How did you make your code look like that?", he wanted to know. Have a look at…
001
Miguel Grinberg @miguelgrinberg.com · 11/03/2025
I'm working on a blog article about implementing font ligatures in code. Keep an eye out for it in a day or two if you are interested in sprucing up your code editor!
030
Miguel Grinberg @miguelgrinberg.com · 28/02/2025
A review of The Quick Python Book, 4th Edition blog.miguelgrinberg.com/post/a-revie...
blog.miguelgrinberg.com
A Review of The Quick Python Book, Fourth Edition
I've been given a review copy of The Quick Python Book, Fourth Edition by Naomi Ceder, published by Manning. Since I often get asked for Python book recommendations, I thought it would be a good idea…
010
Reposted by Miguel Grinberg
The Pragmatic Bookshelf ✅ @pragprog.com · 21/02/2025
Sometimes, we find outstanding self-published titles we 'd truly feel proud to distribute. It's wonderful when our audience agrees. Right now, 3 of those distribution titles are on our bestsellers list! pragprog.com/best_se... @miguelgrinberg.com Minh Quang Tran @staffannoteberg.bsky.social
053
Reposted by Miguel Grinberg
The Pragmatic Bookshelf ✅ @pragprog.com · 07/02/2025
New at PragProg: Python / Flask Framework Journey through a realistic web development project using Python and the Flask framework, taking incremental steps from start to finish. New and improved 2024 edition pragprog.com/titles/d-mgf... @miguelgrinberg.com #Python #FlaskFramework #Flask
042
Miguel Grinberg @miguelgrinberg.com · 05/02/2025
My Flask Mega-Tutorial ebook is now also available from The Pragmatic Bookshelf store, without DRM! I'm super excited to offer this additional channel for those who do not want to be locked in to Kindle. pragprog.com/titles/d-mgf...
pragprog.com
The New and Improved Flask Mega-Tutorial
Overarching tutorial for Python beginner and intermediate developers that teaches web development with the Flask framework.
052
Miguel Grinberg @miguelgrinberg.com · 29/01/2025
New blog post: Dynamic Forms with Flask blog.miguelgrinberg.com/post/dynamic...
blog.miguelgrinberg.com
061
Miguel Grinberg @miguelgrinberg.com · 27/01/2025
I'm currently working on a Flask tutorial for my blog about forms that have dynamically growing lists of items. It is surprisingly tricky, but a lot of fun!
021
Miguel Grinberg @miguelgrinberg.com · 25/01/2025
Dublin appears to have grown a bunch of digital skyscrapers on this movie trailer.
000
Miguel Grinberg @miguelgrinberg.com · 19/01/2025
Do you need to store sensitive data in SQLAlchemy? Here is how to work with encrypted columns. blog.miguelgrinberg.com/post/encrypt...
blog.miguelgrinberg.com
Encryption at Rest with SQLAlchemy
In this tutorial I'm going to show you how to extend SQLAlchemy so that you can define database columns that are stored encrypted. In the solution I'm going to share, the columns that are designated…
021
Miguel Grinberg @miguelgrinberg.com · 13/01/2025
I recently had to install an SSL certificate again after having done my previous one a few years back. I recorded the updated steps and documented the process in a blog post! blog.miguelgrinberg.com/post/using-f...
blog.miguelgrinberg.com
Using Free Let's Encrypt SSL Certificates in 2025
In this article I'm going to review the steps you need to take to obtain an A+ SSL security rating for your website, as mine has.This tutorial applies to any hosting solution that uses Nginx as web…
110
Miguel Grinberg @miguelgrinberg.com · 02/01/2025
A Year In Review: Flask in 2024 blog.miguelgrinberg.com/post/a-year-...
blog.miguelgrinberg.com
A Year In Review: Flask in 2024
I'm seeing a stream of "year in review" blog posts about all sorts of topics pop up to coincide with the start of 2025. I'm not sure if this is going to be a new tradition for me, but to follow this…
020
Reposted by Miguel Grinberg
Studious @studiousb.bsky.social · 02/01/2025
@miguelgrinberg.bsky.social I have tried close to 10 times to sit down and truly get flask and databases in general, until your flask tutorial made it all click. Literally everything down to the source files. Did it take a while to digest? Yes. But will I know it forever now? Absolutely. Thanks!
021
Miguel Grinberg @miguelgrinberg.com · 18/12/2024
It's great that I have a long holiday break from work, as that allows me to give my full attention to my open source projects. In the last few days I have released new versions of my Socket.IO packages for Python, with several improvements and bug fixes, so be sure to upgrade if you use them!
020
Miguel Grinberg @miguelgrinberg.com · 23/11/2024
Someone asked me if GitHub Copilot and other GenAI tools help me make more money in my work. The answer is no. Despite the hype, these tools are very primitive and cannot write production level code. How do you make money with AI then? A sure way is to sell AI as the product itself!
230
Miguel Grinberg @miguelgrinberg.com · 18/11/2024
Is Python Really That Slow? blog.miguelgrinberg.com/post/is-pyth...
blog.miguelgrinberg.com
Is Python Really That Slow?
My standard response when someone asks me how I deal with Python being such a slow language is that Python is by far the fastest to write, cleanest, more maintainable programming language I know, and…
072
Miguel Grinberg @miguelgrinberg.com · 13/11/2024
One more social media app that may or may not take off. Oh well.
020