: 🐘 Django Migration Operations aka how to rename Models Renaming a table in Django seems more complex than it is. Last week, a client asked me how much pain …

: 🔥 Why I deleted Firefox from my machines this weekend I no longer trust or believe in Mozilla, so I deleted Firefox from my machines this weekend. ➜ brew …

: 🦆 DuckDB may be the tool you didn't know you were missing 🤔 I haven’t fully figured out DuckDB yet, but it’s worth trying out if you are a Python …

: 🚜 macOS Bartender app to Ice app I upgraded my Macs to macOS Sonoma a few weeks ago. While everything has been uneventful, the …

: 🎮 8BitDo Golden/Silver Limited Edition controllers My favorite third-party video game hardware company, 8BitDo, announced its 11th-anniversary limited …

: 📅 Office Hours for July 12th Office Hours returns this Friday, July 12th, 2024, from 2:30 pm to 4:30 pm Central Time. ℹ️ Anyone …

: 🔓 Sharing is Caring: How a Simple Sudo Question Led to Better Solutions One of the fun discoveries of blogging is finding your article in search results while trying to …

: 📓 Weeknotes for Week 27: July 1 to 7 The last week was a blur between the holiday, travel, and cramming a lot of work. My notes this week …

: 🧰 More fun with Django Extensions using `shell_plus` and `graph_models` Yesterday, I wrote about Django Extensions show_urls management command because it’s useful. I …

: Django Extensions is useful even if you only use show_urls Yes, Django Extensions package is worth installing, especially for its show_urls command, which can …

: 📅 No Office Hours on July 5th, but... No Office Hours this week (July 5th), but we will return next Friday, July 12th, 2024, 2:30 pm to …

: 🎆 🤖 Happy AIndependence Day To everyone in the United States, Happy Independence Day and Happy AIndependence Day to everyone …

: 🗳️ PSF Elections how I am voting This was written while driving to Chicago (technically from the passenger seat). Still, a few people …

: 💬 On the PSF Bylaw changes The Python Software Foundation has three bylaw changes up for a vote in this year’s election. …

: 📓 Weeknotes for Week 26: June 24 to 30 Family I took two days off for a funeral and some other family stuff. I saw cousins and other …

: 🐳 Using Just and Compose for interactive Django and Python debugging sessions When I wrote REST APIs, I spent weeks and months writing tests and debugging without looking at the …

: 🐘 Docker Postgres Autoupgrades Upgrading Postgres in Docker environments can be daunting, but keeping your database up-to-date is …

: 🐘 A Just recipe to backup and restore a Postgres database I have used this casey/just recipe to help backup and restore my Postgres databases from my Docker …

: 📅 Office Hours for June 28th It’s been a week, but I’m hosting Office Hours this Friday at 2:30 pm. I was on the …

: 🐳 Managing Docker Compose Profiles with Just: Switching Between Default and Celery Configurations For a recent client project, we wanted to toggle between various Docker Compose profiles to run the …

: 🚜 Mastodon Bookmark exporter to Markdown/Frontmatter I wrote a Mastodon Bookmark exporter tool over the weekend and decided to polish it up and release …

: Weeknotes for Week 25: June 17 to 23 Last week, my side of the family drove out to Colorado Springs, Colorado, and we rented a house for …

: 💜 Follow Black Python Devs on Juneteenth If you haven’t heard about Black Python Devs, Juneteenth is an excellent day to learn about …

: Djangonaut Space has begun This is my first time helping out with Djangonaut Space as a Navigator for the Django Packages …

: 🤖 AI companies are becoming bad neighbors This week, we learned that Perplexity AI Is Lying about Their User Agent. I have long suspected that …

: 🏔️ Colorado Springs This morning, we woke up and drove to Colorado Springs to meet with some of my …

: 🤖 More Blocking Bots with Django ❌ Tonight, I ran across Robb Knight’s Blocking Bots with Nginx, which fits well with two pieces …

: 🍩 Office Hours Update As promised, I will be hosting Office Hours this week. I didn’t know until today that …

: 📦 Amazon delivery: A true story Amazon: Buy now and have it by 4 am, or pay $1.99 for garage delivery, which you don’t have, …

: 📅 Office Hours Summer Schedule We have a few family trips scheduled over the next month, so I am posting my summer office hours …

: 🦙 Exploring Ollama: An Open-Source LLM (my notes) I have meant to do a proper write-up on the Ollama project for a while. Instead of putting it off …

: 🏗️ Slash pages and recent website changes As part of my recent Echofeed discovery, I updated my now page to list the most recent video games …

: ✨ Enhancing My Digital Workflow with Echofeed I dove into Echofeed this weekend, and I set up three new Echos that consume RSS feeds of various …

: 🧱 Django ModelForm Template starting point Recently, I have been doing a lot of Django formwork. I start with a basic template like form.as_div …

: 🎮 Planet of Lana My son and I started playing Planet of Lana, a sci-fi adventure/platform/puzzle game about a young …

: 🧊 Bartender Update I wrote a Bartender Mac App PSA a day before Ben Surtees, the original developer of Bartender wrote …

: 2024-06-05 📅 Office Hours 📅 Office Hours returns this Friday, June 7th, 2024, from 2:30 PM to 4:30 PM Central Time (US and …

: 👤 Bartender Mac App PSA Update: Ben Surtees, the original developer of Bartender wrote the sale and state of the app: A New …

: 🍿 On the Google leak Last week, Google leaked 2,500 pages of internal documentation by accidentally pushing these docs to …

: 📓 Weeknotes for Week 22: May 27 to June 2 It’s been a while since I posted weeknotes. So, I will include some previous entries and merge …

: 🎨 Slash Pages I have had this Slash Pages link up on several devices for the last week. Slash pages are common …

: 📺 Godzilla Minus One - Outside of seeing clips of re-runs on cable, I am not sure if I have ever sat …

: 📝 On EchoFeed EchoFeed is a cheap ($20 to $25 a year) and simple service that takes an RSS, Atom, or JSON feed and …

: Thirty-four to zero I’m shocked. I’m not shocked that he is guilty. I’m shocked …

: 🙅 No Office Hours this week No Office Hours this week. While I avoided ConFlu at PyCon US, I returned to a sick household and …

: Allergies or whatever my family had while I was at PyCon US finally knocked me over. COVID-free but …

: 🏡 This old house, Monday edition 🏡 Today, in this old house… I swapped out a first-gen Wyze Floodlight with the latest …

: 🔋 My django-startproject project updates This morning, I updated my django-startproject to keep up with the latest Django, Docker Compose, …

: 📚 Universal Principles of Typography book review Based on a few recommendations, I recently picked up the Universal Principles of Typography book. …

: ⌨️ My writing workflow or what works for me Reading about other people’s writing process is fascinating and entertaining. There are no …

: 🎮 RetroArch on iPhone and iPad My favorite emulator, RetroArch, is now available on iOS, so I can play my favorite retro console …

: 🎮 Dave the Diver: Godzilla is out! 🦖 www.backloggd.com/games/dav…

: ✨ What's new in Django 5.1 With today’s Django 5.1 alpha 1 release, picking just one favorite feature is hard. Django 5.1 …

: 📆 Office Hours Returns 📅 Office Hours returns this Friday, May 24th, 2024, from 2 PM to 4 PM Central Time (US and Canada). …

: 💼 Packing and unpacking I’m exhausted after an excellent PyCon US, but I had packing and unpacking on my mind. I …

: 👋 Let's meet at #PyConUS Good morning, #PyConUS friends. I leave early Monday morning, and if you are attending this year and …

: 📱 Waking up to a blank iPhone 14 screen I am in Pittsburgh for PyCon US, and three of my last four mornings have begun with a blank iPhone …

: 🥟 PierogiCon was a success.

: Two Django developers, the Flask lead maintainer, and the Pydantic author walk into a bar… #PyConUS

: 🍔 PyCon US, have it your way (you rule!) Here is my PyCon US advice based on Trey Hunner’s Mastodon post: What are some of your …

: PyCon US Bound 🏡 LFK 🚗 MCI 🛫 MDW 🛬 PIT 🏨 Two years in a row, in 2022 and 2023, I had to cancel my plans to attend …

: 📝 On Hashtag Accessibility I’m calling myself out for this because until about a month ago, I used hashtags all wrong on …

: ✨ How to rearrange #Vivaldi extensions in the the extension panel. ✨ One #Vivaldi gripe is that I can never remember how to rearrange the icons in my extension panel. …

: 💡 TIL that Vivaldi supported Philips Hue lights while I was adding a new profile. Hue lamp will …

: 📓 Weeknotes for Week 19: May 6 to May 12 What a week. Family My youngest was home most of the week with a virus, which changed everything …

: 📭 On vacation autoresponders and deleting email I’ve activated my email vacation autoresponder ahead of PyCon US next week to inform anyone who …

: 🐍 TIL build-and-inspect-python-package GitHub Action workflow plus some bonus Nox + Tox TIL: via @joshthomas via @treyhunner via @hynek about the hynek/build-and-inspect-python-package …

: 📚 African tech book drive at PyCon US My friend Abigail, is organizing a tech book drive for developers in Africa and is collecting them …

: 👥 Office Hours on May 10th 📅 I’m hosting Office Hours this Friday, May 10th, 2024, from 2 PM to 4 PM Central Time (US and …

: 🎸 Jason Isbell and the 400 Unit at Liberty Hall We had a rare outing tonight to see Jason Isbell and the 400 Unit play at Liberty Hall. You are …

: 🌪️ Tornado Watch tonight We have been under a Tornado Watch since I left work today until about 11 PM tonight. My youngest …

: 🎙️ Randy Travis and Ethical AI Eleven years ago, country music legend Randy Travis lost his voice to a stroke despite keeping 100% …

: 🎸 On Pearl Jam's Dark Matter interviews My favorite band, Pearl Jam, recently released a new album called Dark Matter, which has led to a …

: 🚜 De-googling update 📉 After my 🔥 Drop Google Chrome and try out Vivaldi for a week, I dare youarticle, I have heard from a …

: 😬 This week was a grind This week, and especially today, has felt like a grind. Code ebbs and flows better and worse. Some …

: 📅 Office Hours on May 3rd 📅 I’m hosting Office Hours this Friday, May 3rd, 2024, from 2:00 PM to 4:30 PM Central Time …

: 🎒 Everyone struggles with Django's static files Josh Thomas did a great job documenting and walking us through how he prefers to set up static files …

: 💸 Alphabet has never been more profitable This Hacker News comment is quite the deep cut about Google’s recent layoff/firing of the …

: 💚 DjangoCon US Talks I'd Like to See 2024 Edition Continuing in my tradition of 2023, 2022, 2018, 2017, and 2016 “DjangoCon US Talks I’d …

: 🔥 Drop Google Chrome and try out Vivaldi for a week, I dare you Last year, I switched to the Vivaldi web browser because I read a few peer reviews that pointed out …

: 🖱️ On Trackballs. I need one. 🪤 At night, when I’m couch computing after everyone goes to bed, I use one of these XL …

: 🖖 On Open Sourcing DOS 4 My first PC as a kid ran MS-DOS 4, so seeing today’s news on Open Sourcing DOS 4 takes me …

: 📅 Office Hours on April 26th Please note: I moved the time up 30 minutes. 📅 I’m hosting Office Hours this Friday, April …

: 🐳 GitHub Actions Cleaning up old Docker container images If you use GitHub Actions to build and deploy Docker container images, you quickly learn that …

: 📰 Quick Django News #228/#229 update tonight Quick update tonight since I’m tired, but I had to re-do/re-send Django News #228 because our …

: 🎮 TIL Nintendo Switch Game KVM The Nintendo Switch is very popular in my household. My six-year-old is at the right age to play a …

: 📺 Glass - I watched Unbreakable when it came out in the movie theater back in 2000. It’s one …

: 📺 Split - I noticed that Glass just came out on Netflix, which led to my discovery that Split was …

: ❤️ Untitled Friday post Hug your loved ones. Everyone should take time and appreciate where we are and those around us on …

: 🤖 Super Bot Fight 🥊 In March, I wrote about my robots.txt research and how I started proactively and defensively …

: 🚀 Starship is the shell prompt you have been looking for 🐚 I spent a lot of time in my shell (terminal, iTerm, bash, whatever you prefer), and by and large, my …

: 🧰 Rustywind and pre-commit take the edge off of Tailwind CSS Last year, I wrote this TIL: Creating a Rustywind pre-commit hook, which illustrates how to use the …

: 📓 Weeknotes for Week 15: April 8 to April 14 Family The mowing season has officially kicked off. I mowed our yard for the first time this year on …

: 🧱 Dear Tech Companies: Two-year-old edition Dear Tech Companies, There is never a good time to interrupt a two-year-old to ask her for a one to …

: 🙋 How often do you use Django's startproject and startapp? I saw this Mastodon post last week and thought it worth sharing. Weekend #django question/poll How …

: 📅 Office Hours on April 19th 📅 Next week, I’m hosting Office Hours on Friday, April 19th, 2024, from 2 PM to 4:30 PM …

: 📺 Fallout - Everybody Else Is Doing It, So Why Can’t We? ☢️ trakt.tv/shows/fal…

: 📌 On leaving Pinboard, aka Raindrop, is better 🤷 A friend asked me which bookmarking service I switched to after I moved on from the Pinboard …

: 📺 X-Men ‘97 - Watching the first episode to wind down. trakt.tv/shows/x-m…

: 🐛 Production bugs happen to everyone I have noticed a GitHub bug for a few weeks, but I kept forgetting to ask publicly about it. Today, …

: 📋 Copy All Urls browser extension If you are like me and have a habit of opening links in new tabs for days, weeks, and sometimes …

: 🐳 Docker and OrbStack disk cleanup notes Docker is one of my daily drivers, and here are my notes for reclaiming disk space and a bonus tip …

: 📖 Weeknotes for Week 14: April 1 to April 7 Family I skipped last week’s update because we spent Easter weekend with my family and ~6 …

: 🚜 Refactoring and fiddling with Django migrations for pending pull requests 🐘 One of Django’s most powerful features is the ORM, which includes a robust migration …

: ⛳ Syncing Django Waffle feature flags The django-waffle feature flag library is helpful for projects where we want to release and test new …

: ⬆️ The Upgrade Django project Upgrade Django is a REVSYS project we created six years ago and launched three years ago. The goal …

: 🚀 Mise is really fast A month or two ago, I stumbled on justpath, which is worth installing to help clean up any PATH …

: TIL: Brandolini’s law 💬 The amount of energy needed to refute bullshit is an order of …

: 🔥 An update on OpenSSF's XZ fumble OpenSSF’s Scorecards is Going Just Great 🔥 While I’m happy that OpenSSF updated their …

: 6️⃣0️⃣ Sixty days of blogging ✍️ Sixty days ago, I started blogging daily with my Wiggle Work friends. Our goal was to blog every day …

: xz update: Don't do this Don’t do this. Compromised packages because of burned-out maintainers aren’t a time to …

: ⬆️ Update and upgrade Homebrew and `xz` versions After I left work today, I noticed a flood of messages about a vulnerability in the xz package that …

: 🚨 No office hours this week due to the holiday 🚨 👋 Hi friends, 🚨 Sorry to cancel this late, but no office hours this week. 🚨 Something had to give …

: On backups and building a portable backup drive solution According to ChatGPT, the 3-2-1 backup rule is a simple yet effective strategy for ensuring data …

: On Syncthing and multiple devices When my son started kindergarten last year, I started experiencing a bit of “carrying things …

: Django Chat recording today I was on the Django Chat podcast today, but since the episode will not come out for a few more …

: Things I can never remember how to do: Django Signals edition I am several weeks into working on a project with my colleague, Lacey Henschel. Today, while …

: 2024-W12 - Weeknotes for Week 12: March 18 to March 24 Family Spring Break is over for my kids, and they both returned to school. Both kids seemed healthy …

: On scratching itches with Python Python is such a fantastic glue language. Last night, while watching March Madness basketball games, …

: Automated Python and Django upgrades Recently, I have been maintaining forks for several projects that are no longer maintained. Usually, …

: Fixing a CSS layout issue 2024-03 Fixing a CSS layout issue I noticed a layout issue for one of my website projects while …

: 🤖 On Robots.txt I have spent a lot of mental energy thinking about how to be more defensive with the robots.txt …

: Justfile Alfred Plugin A few years back, I had a productivity conversation with Jay Miller about Alfred plugins, which led …

: 📺 The Gentlemen - I just started episode five, and it has no business being this good. …

: Weeknotes for Week 11: March 11 to March 17 Family This week was Spring Break for both of my kids. My son had all week off, while my daughter …

: 🍕 On tortilla pizza The algorithm kept telling me to make tortilla pizza, so today, over lunch, I caved and made two …

: 🏡 On Gardening It’s springtime in the Midwest, and I took my car to get it washed earlier today. I had my …

: Five for Friyay It’s been too long since I posted my five favorite links of the week. Continuing that theme …

: Python's UV tool is even better Last month, I wrote Python’s UV tool is actually pretty good about Astral’s new Python …

: On environment variables and dotenv files Brett Cannon recently vented some frustrations about .env files. I still hate .env files and their …

: Completed, finished, or done Completed means to have all the necessary parts or elements and lack nothing. Finished means …

: My Python Roots Last week, during office hours, I shared the two libraries that were my gateways to learning Python. …

: Weeknotes 2024 W10 We were reminded that Winter is still here this week, starting with warmer weather and ending with …

: Bootstrap to Tailwind CSS I spent a few hours tonight weighing my options to port a few websites from Bootstrap to Tailwind …

: 🎮 Dave the Diver Dave the Diver is a fun game for such a random, quirky, and so many game-styles / mini-games all …

: How to test with Django, parametrize, and lazy fixtures This article is a follow-up to my post on How to test with Django and pytest fixtures. Here are some …

: Importing data with Django Ninja's ModelSchema I have recently been playing with Django Ninja for small APIs and for leveraging Schema. …

: Upgrading Python from 3.11 to 3.12 notes Recently, I have been slowly moving several of my side projects and client projects from various …

: On pip isolation I saw this post by Trey Hunner about pip isolation, and I wanted to share a third method. …

: The Weekend Woodworker 🪚 It’s that time of year when I dust off my copy of “Equip Your Woodworking Shop For …

: New `django-startproject` update I updated my django-startproject project today to support the latest versions of Django, Python, …

: 📺 Spaceman - I am walking into this with ZERO expectations, and yet my gut is telling me that even …

: We did it, and what's next My February goal was to publish an article every day for the entire month, and I’m happy to …

: Python's UV tool is actually pretty good I carved out some time recently to start playing with the new Python package installer and resolver, …

: The definition of digital chaos A few months ago, PayPal reached out to me via my backup email address to let me know that my …

: Using Django Q2 I’m long overdue to write about how Django Q2 has become part of my development toolkit. As …

: Things I do every time I start a Django project In the spirit of Brenton Cleeland’s Six things I do every time I start a Django project, my …

: Weeknotes 2024 W08 It warmed up this week, and we started our mornings out in the 30s and ended them in the 60s and …

: Fetch the contents of a URL with Django service For the last few months, I have been using the cooked.wiki recipe-saving website, which initially …

: Three years later, email is less of a pain Disclaimer: Forward Email did not pay me to write this. I wrote about my side projects and how email …

: Scratching Itches with Python and ChatGPT A few times a week over the last several months, I have paired with ChatGPT to work on Python …

: Using Chamber with Django and managing environment variables One of my favorite hosting setups is getting a cheap slice from Digital Ocean or your favorite …

: Transferred - django-rq-email-backend found a new home A decade ago, I created django-rq-email-backend for a few projects to queue emails to send without …

: 🥷 Django Ninja I have heard good things about Django Ninja, and I was looking for an excuse to try it out. One pain …

: My 2024 Development Setup I have wanted to document my development setup for a while to revisit it from time to time to see …

: Office Hours Please note: Just so you know, Grammarly told me my writing is fine. So please blame Grammarly and …

: More funding and less shaming Note: I deleted >1000 words and decided to post a summary instead. Jacob Kaplan Moss slacked me …

: The DACO Stack For the last few months, I have used the Django + Adam Johnson + Carlton Gibson + Oliver Andrich …

: Unrestricted Content warning: Kansas City mass shooting. Today, I worked on a post to keep up my February streak …

: Over lunch I caught up on a few videos over lunch while working on a few drafts for the week and wanted to …

: Year in review 2023 I write one of these posts every year, and I manage never to publish them. Since I’m trying to …

: Let's Talk About Paying for Open Source Disclosure: I wrote this quickly, proofed it via Grammarly, applied a few suggestions from ChatGPT, …

: Python Development on macOS Notes: pyenv and pyenv-virtualenvwrapper Here are my notes for using pyenv and pyenv-virtualenvwrapper on macOS. I use pyenv to install and …

: Emphasis mine. I had no free time, and it was another situation where most members were so …

: 📺 Fargo Season 5 - I just started the new season this week, and it’s already one of my …

: My Daily Routine 2024 It’s been a while since I wrote about my daily (previously morning) routine, which is fun to …

: Semi-Automate Copy-to-Clipboard Case Study A “copy-to-clipboard” automation is a web page with many formatted text and links that …

: Semi-Automate Copy-to-Clipboard Case Study A “copy-to-clipboard” automation is a web page with many formatted text and links that …

: The Power of Semi-Automation: Why Less Can Be More According to the ninety-ninety rule, the final 10 percent of code needed to automate a task …

: Django Queryset to Markdown Table Today, I asked on Mastodon if anyone knew of a good solution for generating a Markdown table from a …

: How to test with Django and pytest fixtures Here are some notes on how I like to write tests for a Django app that tests a model down to a view. …

: The Django apps I actually use (rough cut) This is an updated version of my response to the Top 5 3rd party packages from the Django Forum. I …

: What’s Your Go-to Comfort Media? [rough cut] Everyone has unique ways of unwinding and finding comfort after a long day. My comfort media spans a …

: My First Mac I saw Jon Gruber’s 40th Anniversary of the Macintosh topic list last week, and I decided to …

: Choosing the Right Python and Django Versions for Your Projects When deciding when to adopt a new major or minor Python or Django version, I prefer to wait until …

: 📫 For my email sanity, I just ran “label:inbox before:2024/01/01” and archived …

: For anyone who is not prepared for our upcoming USB-C standardization, I had to pick up one of these …

: 📺 Barbie - I had no idea what this movie was about and yet it’s been a total surprise at every …

: ✏️ This morning, I updated my Rustywind pre-commit hook to use the latest tag. 🙏 Thank you to …

: 📺 Rebel Moon - Part One: A Child of Fire - Ya, this is pretty bad, but not 23% Tomatometer bad, but …

: 📺 The Last of Us - I finished Season 1 tonight, and I was expecting that. I will admit to being a …

: Testing out my new micro-blog: webology.micro.blog, which I’m planning on using to cross-post …

: Commander Mark taught me how to draw with perspective to create 3d drawings as a kid. I used to …

: 🤔 I’m unsure if or how long I will keep this up in 2024, but I thought I’d end my …