• ๐Ÿ’œ Follow Black Python Devs on Juneteenth

    If you haven’t heard about Black Python Devs, Juneteenth is an excellent day to learn about this organization and how to support it.

    If you haven’t heard about Black Python Devs, here is a quick overview:

    Black Python Devs was created by its founder Jay Miller after seeing a trend of the same handful of Black developers speaking at major conferences, taking leadership positions, and dealing with the same challenges towards burnout.


    I also want to share the goals of Black Python Devs:

    Our goal is to become the largest community of Black Python Developers in the world and establish our community as a source for diverse leaders in the greater Python community.

    We aim to:

    • Establish guidance, mentorship, and career support for Black Pythonistas around the world.
    • Create opportunities for the Python community to invest in local communities of Black Python Devs members
    • Increase participation of Black Python Devs members in existing Python community programs, events, and initiatives.

    Follow them today

    Juneteenth is also a wonderful day to follow them on Mastodon (248 followers) or on Xwitter (606 followers).

    I would love to check these numbers tomorrow and see a non-zero increase in followers.

    You can also financially support Black Python Devs through the GNOME Foundation by scrolling down to the Support Black Python Devs section of the website.


    I am a Black Python Devs Leadership Advisor who has watched and supported this organization grow even before I was asked to join. This team is near and dear to my heart, and I invite you to follow them and help spread the message.

    Wednesday June 19, 2024
  • Djangonaut Space

    Djangonaut Space has begun

    This is my first time helping out with Djangonaut Space as a Navigator for the Django Packages project.

    Last week was week zero, making this week one and the first week my team gets to meet as a group.

    Coordinating meeting times is always hard when everyone is from a different timezone, and this was no exception. Thankfully, we found a 30-minute block that works for everyone.

    Everyone on my team contributed something positive immediately after the meeting invite, including a few project contributions. All in week zero!

    Overall, I’m looking forward to it. I feel under and over-prepared, but I keep getting reassured to take it slow. So, I have some new issues to tag and fill in details before we meet on Wednesday, but we have started, and that’s exciting.

    Monday June 17, 2024
  • ๐Ÿค– AI companies are becoming bad neighbors

    This week, we learned that Perplexity AI Is Lying about Their User Agent. I have long suspected that many AI crawlers ignore Robots.txt, which has led me to write a block by User-Agent middleware. This has also led services like omg.lol to start Blocking Bad Bots by default.

    We can’t even trust that User Agents are respected, so we might need to double down on prompt injections as a possible workaround, since AI services are particularly vulnerable. Perplexity AI is susceptible to prompt injection

    Ethics be damned; this is another example of tech asking forgiveness, not permission.

    Until proven otherwise, AI companies are becoming the bad neighbors of the Internet. They block your driveway, let their dogs poop in our yard without picking it up, use your trashcans without asking, and ask you to get faster Internet after you discover they were still using your guest network after that one time they asked to use it because of an emergency.

    Sunday June 16, 2024
  • ๐Ÿ”๏ธ Colorado Springs

    This morning, we woke up and drove to Colorado Springs to meet with some of my family.

    If I know anyone who wants to meet up or if anyone has tips on family-friendly places to go, please reach out because we will be here for a week.

    Saturday June 15, 2024
  • Django

    ๐Ÿค– More Blocking Bots with Django โŒ

    Tonight, I ran across Robbย Knight’s Blocking Bots with Nginx, which fits well with two pieces I have already written about.

    Check out my ๐Ÿค– Super Bot Fight ๐ŸฅŠ article, which develops a Django-friendly middleware for blocking AI UserAgents so they never get to your content.

    My ๐Ÿค– On Robots.txt article shared more of my research on the robots.txt standard.

    I forgot I wrote the middleware, so I rewrote it tonight before rediscovering it while looking for both articles to share. That was fun, so I’m not writing more tonight. ๐Ÿ˜ฌ

    Friday June 14, 2024
  • Office Hours

    ๐Ÿฉ Office Hours Update

    As promised, I will be hosting Office Hours this week.

    I didn’t know until today that I’m leaving 30 minutes in to meet my daughter at pre-school to have a doughnut ๐Ÿฉ for Father’s Day. She’s two and a half and excited about it.

    So I’m going to leave for 45 minutes to an hour, and then I’ll be back for a while. I can assign other moderators, and we have a core group that is big enough to be okay if I’m not there.

    So I hope to see regular and new faces tomorrow, but I will be gone for a bit.

    Thursday June 13, 2024
  • ๐Ÿ“ฆ 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, or in a week.

    The next day: Arriving sometime today by 3 pm.

    3 pm: Still arriving by 3 pm.

    4 pm: Arriving between 3 pm and 10 pm.

    ~7 pm: Arriving tonight by 10 pm.

    The next day: Arriving today.

    After it doesn’t arrive: Arriving tomorrow by 10 pm.

    If you made it this far, it’s never showing up, and you should cancel because it’s lost, and they will repeat this for a week until they cancel it.

    Wednesday June 12, 2024
  • Office Hours

    ๐Ÿ“… Office Hours Summer Schedule

    We have a few family trips scheduled over the next month, so I am posting my summer office hours schedule.

    High-level details

    โ„น๏ธ Anyone can join office hours. Many join because they work remotely, miss seeing faces, and miss the random conversations when a small group hangs out.

    โ„น๏ธ Our office hours are a collaborative space where we can discuss our ongoing projects, catch up, and work together to wrap up our week on a productive note.

    ๐Ÿ™ As always, everyone is welcome to join, whether youโ€™re a regular attendee or joining for the first time. If you are curious, reach out.

    โœ… If you need any additional details, feel free to send me a message or check out the gist from our previous sessions, where youโ€™ll always find the most recent Zoom link โš ๏ธ

    Wednesday June 12, 2024
  • ๐Ÿฆ™ 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 any longer, I decided to publish my outline and notes, hoping that someone might find it helpful if you wanted to run your own local, offline LLM.

    Why Ollama?

    • Open-source LLM server
    • Runs over two dozen models, with new ones released every week
    • My personal favorite: Ollama

    My Journey with Ollama

    • Discovered Ollama a year ago
    • One of the first accessible projects for M-series Mac
    • User-friendly and performed well.

    Ollama’s Growing Compatibility

    • Expanded to support Windows and Linux
    • Became AMD-friendly
    • More accessible to users with various hardware setups

    The Llama3 model changes everything

    • Llama3 70b model introduction
    • 70b model runs on Mac Studio with 64 GB of RAM
    • Enables running a powerful LLM locally
    • Benefits: privacy, customization, offline access

    Making Life Easier with the LLM Python Project

    • Installed llm-ollama plugin into LLM Python project
    • Simplifies switching between different LLMs
    • Quicker and easier testing of new models compared to Ollama’s CLI

    Ollama’s Library and APIs

    • ollama-python library for integrating Ollama models into Python projects
    • Ollama’s built-in OpenAI compatible API for seamless use with existing OpenAI-based applications

    Final Thoughts

    • Ollama: a top choice for open-source, locally-run LLM
    • Expanding compatibility
    • Impressive Llama3 model
    • Easy integration with LLM Python project
    • Handy libraries and APIs
    • Recommended for researchers, developers, and curious individuals
    Tuesday June 11, 2024
  • Changeslog

    ๐Ÿ—๏ธ 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 I’m playing and movies and series I’m watching. These are all data streams that Echofeed collects and publishes for me.

    Now that I have this data, it inspired me to create stand-alone pages for my games, movies, and series pages, which I will slowly backfill over time.

    This process is 90% automated and 10% of the time, I copy cover images from various sources. When I switch from RSS feeds to a few API calls, I can fully automate this process, but for now, this is fine.

    I also created a slashes page, which was inspired by the slash pages project. This page lists all of my existing slash pages and some I plan to make as my website grows. As I build the page, I will start linking back to them.

    One example of a slash page is my defaults page, which started as one of my first micro.blog posts. As my defaults change over time, I plan to update this new defaults page, and if enough changes, I’ll publish my notes and updates via a new micro.blog post.

    Overall, I like both of these workflows for my media consumption and my slashes pages. It feels maintainable and gives me an excuse to write more.

    Monday June 10, 2024
  • โœจ 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 services.

    Every time I publish a new blog post on my micro.blog, a new blog post gets published on my main website. My website is currently hosted on GitHub Pages via Jekyll, and Echofeed does the heavy lifting to create a new frontmatter + markdown file for every post.

    I also added two more Echos, which consume my Trakt RSS feeds to track every movie and series I watch into their collections.

    I plan to list both data points on my now page, which I always intended to capture what I’m currently consuming and doing.

    I also use Echofeed to publish these microblog posts to my Mastodon account. I prefer this over micro.blog’s built-in cross-posting features because Echofeed lets me create a custom post template, which is more flexible. I’m using the same workflow for Django News and Django Packages.

    Overall, I’m impressed with Echofeed, and I’m happy to pay $25 a year for the value I’m getting from it. Please let me know what you think if you try it out and find some value in it.

    Sunday June 9, 2024
  • Django

    ๐Ÿงฑ 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 or form|crispy until it grows uncomfortable.

    Today, I was bouncing between two projects, and I noticed I was working on the tasks that had grown uncomfortable to the point that I dreaded working on the templates.

    While I enjoy working with Django’s template system, I was putting off these tasks, and all they had in common was finishing some of the form and template work.

    I couldn’t quite understand why this was such a mental blocker, so I stopped working, disconnected, and mowed my yard. Thankfully, that did the trick.

    As I finished mowing, I realized that I was struggling to complete these tasks because I was overwhelmed by needing to dump all the form fields into a template.

    Once I realized why I was feeling this resistance, I realized I needed to focus on solving this issue to move on.

    I remembered Daniel Roy Greenfeld’s Rapidly creating smoke tests for Django views from a few weeks ago, where he made a management command to print out a bunch of smoke tests.

    I decided to try the same technique by passing a string path to a Django ModelForm and printing out my form template.

    Edit: micro.blog did not like the templates in templates from my Python script, so I had to swap out the inline example with a gist. Sorry about that.

    This template could be better, but it was good enough. I tested it on a few of the forms I’m using on Django News Jobs, and it’s an improvement over what I started with.

    Something was in the water because when I checked our company Slack, Frank Wiles showed me his new make-management-command project, which takes a similar approach to creating the folders and files needed to create a new management command.

    Saturday June 8, 2024
  • Gaming

    ๐ŸŽฎ Planet of Lana

    My son and I started playing Planet of Lana, a sci-fi adventure/platform/puzzle game about a young girl and her cat. They are on a mission to rescue her sister, who was abducted by an invasion of hostile alien machines. It’s fun; we have worked together to solve the puzzles.

    We are playing on the Switch, and the game is 20% off in the Nintendo Store.

    Friday June 7, 2024
  • ๐ŸงŠ Bartender Update

    I wrote a Bartender Mac App PSA a day before Ben Surtees, the original developer of Bartender wrote about the sale and state of the app: A New Chapter for Bartender

    While I’m less concerned despite the fumbled app handoff, I found an open-source Bartender alternative called Ice that is worth bringing up.

    Ice is a powerful menu bar management tool. While its primary function is hiding and showing menu bar items, it aims to cover various additional features to make it one of the most versatile menu bar tools available.

    Ice’s source code is available on GitHub and is actively developed.

    Ice seems like a more than reasonable alternative if you have lost faith in Bartender or are tired of the drama. As a bonus, it’s also in Homebrew.

    Thursday June 6, 2024
  • Office Hours

    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 Canada).

    โ„น๏ธ Anyone can join office hours. Many join because they work remotely, miss seeing faces, and miss the random conversations when a small group hangs out.

    โ„น๏ธ Our office hours are a collaborative space where we can discuss our ongoing projects, catch up, and work together to wrap up our week on a productive note.

    ๐Ÿ’ผ I will be working on some Djangonaut Space prep and one DjangoCon US Automation bug unless I get to them sooner.

    ๐Ÿ™ As always, everyone is welcome to join, whether youโ€™re a regular attendee or joining for the first time.

    โœ… If you need any additional details, feel free to send me a message or check out the gist from our previous sessions, where youโ€™ll find the Zoom link โš ๏ธ

    I look forward to seeing everyone.

    Wednesday June 5, 2024
  • ๐Ÿ‘ค Bartender Mac App PSA

    Update: Ben Surtees, the original developer of Bartender wrote the sale and state of the app: A New Chapter for Bartender

    Bartender, one of my all-time favorite macOS applications, recently sold without giving existing customers a heads-up.

    Popular Mac app Bartender appears to have been quietly sold approximately two months ago, with neither the prior owner nor the current owner providing customers or potential customers with information on the sale.


    I’m running Bartender 4 because I am still running macOS Ventura. Bartender 5 runs on macOS Sonoma and was mentioned as being impacted.

    I turned off “Check for Updates Automatically” under the Advanced tab to be safe until we know more about the new owners.

    Tuesday June 4, 2024
  • ๐Ÿฟ On the Google leak

    Last week, Google leaked 2,500 pages of internal documentation by accidentally pushing these docs to their GoogleAPI GitHub repo.

    A collection of 2,500 leaked internal documents from Google filled with details about data the company collects is authentic, the company confirmed today. Until now, Google had refused to comment on the materials.

    These documents were also leaked Apache 2.0 “irrevocable copyright license” when released under normal circumstances.

    The fun thing about accidentally publishing to the GoogleAPI GitHub is that, while these are sensitive internal documents, Google technically released them under an Apache 2.0 license. That means anyone who stumbled across the documents was granted a “perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license” to them, so these are freely available online now, like here.


    Several SEO experts have proven that Google has lied to web developers for over a decade. While I don’t have any remorse for the SEO industry, knowing “best practices” is good for anyone who builds a website and wants a chance to reasonably rank.

    So, while Google has been called out for years for misleading the general public, now a trove of documents prove it.

    Both Fishkin and King accuse Google of “lying” to SEO experts in the past. One of the revelations in the documents is that the click-through rate of a search result listing affects its ranking, something Google has denied goes into the results “stew” on several occasions. The click tracking system is called “Navboost,” in other words, boosting websites users navigate to. Naturally, a lot of this click data comes from Chrome, even when you leave search. For instance, some results can show a small set of “sitemap” results below the main listing, and apparently a part of what powers this is the most-popular subpages as determined by Chrome’s click tracking. arstechnica.com/gadgets/2…

    As a web developer, what’s frustrating is how obvious spammy some of the top websites are that mirror websites like python.org’s content and add spammy ads and content and somehow outrank the biggest programming language on the planet’s docs.

    None of this is new. I have seen the same spammy websites for years, which led me to drop Google Search for Kagi so I could stop seeing them.

    Behavior never lies.

    Monday June 3, 2024
  • Weeknotes

    ๐Ÿ““ 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 them all together.


    This week, I caught whatever flu/bug/virus my family had while I was at PyCon US. It was not fun, and even as of Sunday, I feel weaker than I care to admit or write. I’m COVID-negative, but my energy levels have gone from OK to drained.

    We are in summer mode, so my son is enrolled in various summer camps. I used to have both kids dropped off by 8 am, and camp starts at 9 am next week. This changes our routine and my working schedule week-by-week.


    We are wrapping up a three-month project, which I hope to have done before we take our family trip in a few weeks. I also have some projects for another client that I need to get worked on. It’ll be a busy few weeks.


    I reviewed 136 DjangoCon US Opportunity Grants over the weekend.

    I worked on some Djangonaut Spaces material for the week. We have a few intro meetings this next week. I have several small projects for which I need to finish creating issues.

    Side projects

    I transferred a dozen domains from Dynadot to Cloudflare over the weekend. Since not all TLDs are supported yet, I had to leave several domains on Dynadot, but most of my domains are now on Cloudflare, which saves a little bit of money and is easier to manage.

    Several projects gained EchoFeed support, making publishing an RSS/ATOM feed to Mastodon easier.

    Django News Newsletter: We shipped issue #235.

    Django Packages: Small updates, and I shipped RSS/ATOM feeds for our Changelog.

    Upgrade Django: We had four updates this week, which is rare.

    I wrote a GitHub Issues sync tool that takes the open issues in a repo and saves them locally to markdown + front matter. The tool can also sync changes back.

    I wrote a sitemap research tool.


    I swapped out my micro blog’s theme for something bigger and easier to read.

    2024-06-01:ย ๐ŸŽจ Slash Pagesย 

    2024-05-31:ย ๐Ÿ“ On EchoFeedย 

    2024-05-30:ย Another day that will forever live in infamy for the United States.

    2024-05-29:ย ๐Ÿ™… No Office Hours this weekย 

    2024-05-28:ย I’m sick update.

    2024-05-27:ย ๐Ÿก This old house, Monday edition


    ๐Ÿ“บ Blood of Zeus: Season 2

    ๐Ÿ“บ Godzilla Minus One I haven’t seen many Godzilla movies, but I liked this one.

    ๐Ÿ“บ Madame Web - This movie was very different than the other Marvel movies and fell flat at the end.

    ๐ŸŽฎ Double Dragon Gaiden: Rise of the Dragons - My son and I enjoy occasionally revisiting this game to play from start to finish.

    ๐ŸŽฎ Dave the Diver: Godzilla - This DLC came out a week ago, and we had fun sprinting through it. Dave the Diver is one of my favorite games, and any excuse to return and explore a new storyline is a winner in my book.

    ๐Ÿ“บ Killing Eve - It took me years to finish this series.

    Slightly older

    ๐Ÿ“บ Space Jam: A New Legacy: My oldest has gotten into basketball and this was a fun family movie.

    ๐Ÿ“บ Dead Boy Detectives: I didn’t expect this series, but watching two ghosts solve mysteries was fun.

    ๐ŸŽฎ Teenage Mutant Ninja Turtles: Shredder’s Revenge: We hadn’t played this one in a while, so we primarily focused on leveling up the two new characters from the expansion.


    You’re a Blogger, Not an Essayist

    How I Set Up My Travel Router with Tailscale’s Mullvad Exit Nodes

    If A.I. Can Do Your Job, Maybe It Can Also Replace Your C.E.O.

    These $350 XR glasses gave me three virtual MacBook screens to work with - If I were buying a pair of XR gasses, these are what I’d buy for the three MacBook screens. I’d love to use these from my couch at night and on trips.

    I Replaced My Computer Monitor With AR Glasses, Here’s How It Went

    Slash Pages

    I Sold TinyPilot, My First Successful Business

    DuckDB Doesn’t Need Data To Be a Database

    Epic Gardening

    Next week

    More client work. I also have a much later work start all week, so I’ll shift my whole day back an hour and work later.

    Sunday June 2, 2024
  • ๐ŸŽจ Slash Pages

    I have had this Slash Pages link up on several devices for the last week.

    Slash pages are common pages you can add to your website, usually with a standard, root-level slug like /now, /about, or /uses. They tend to describe the individual behind the site and are distinguishing characteristics of the IndieWeb.

    For years, I have had several of these on my primary website, but I love having ideas for new ones. I add some of these to various projects I work on, even if they never fully link up. They are like fun easter eggs for anyone who is looking.

    Here are a few that I already had pages for:

    Shortly, I plan to merge my blog and micro.blog together, but these splash pages give me some new ideas for topics to write about and may inspire you, too.

    Saturday June 1, 2024
  • Movies

    ๐Ÿ“บ Godzilla Minus One - Outside of seeing clips of re-runs on cable, I am not sure if I have ever sat down to watch one of these movies.


    Saturday June 1, 2024
  • ๐Ÿ“ On EchoFeed

    EchoFeed is a cheap ($20 to $25 a year) and simple service that takes an RSS, Atom, or JSON feed and posts it to a half dozen services like Mastodon, Micro.blog, Bluesky, and even Discord.

    The service also supports GitHub, Webmentions, and Webhooks, opening up many exciting possibilities.

    What makes the service interesting is its support of variables, making creating a template for your posts possible.

    I found this feature helpful for templating job listings for Django News Jobs updates to include hashtags and for weekly Django News Newsletter release posts.

    EchoFeed is a useful service to help wire up static projects and a nice stopgap until more apps support the Fediverse.

    Friday May 31, 2024
  • Thirty-four to zero

    I’m shocked. I’m not shocked that he is guilty. I’m shocked that today is the day he is finally held accountable. I’m shocked that we made it.

    But I will take it.


    Thursday May 30, 2024
  • Office Hours

    ๐Ÿ™… No Office Hours this week

    No Office Hours this week.

    While I avoided ConFlu at PyCon US, I returned to a sick household and made it just over a week before it knocked me over yesterday and today. I’ve had three negative COVID tests since returning home and testing again today, so it’s a mix of allergies and the flu that cycled through my household while I was gone.

    It’s a short week, but we will try again next Friday, June 7th.

    Wednesday May 29, 2024
  • Allergies or whatever my family had while I was at PyCon US finally knocked me over. COVID-free but will retest tomorrow but posting to keep a streak going.

    Tuesday May 28, 2024
  • ๐Ÿก This old house, Monday edition

    ๐Ÿก Today, in this old house…

    I swapped out a first-gen Wyze Floodlight with the latest Floodlight Pro model and adjusted it. Their first-generation floodlight worked great, but we decided to upgrade after some of our neighbors started having random break-ins and random car damage. The latest model’s camera has better granularity to read license plates and other details, which is a good peace of mind if there’s another hit and run.

    Since I already had the ladder out putting up the new floodlight, I removed a limb and many branches that had accumulated on our roof over the winter.

    I attempted to recover our garage Orbi satellite, which went offline while in Pittsburgh and refused to reconnect. I chased my tail for a good hour and reset it a few times before giving up. I checked a few hours later, and everything was back in sync.

    I recharged our Wyze doorbell camera, which went through a similar loop. It must use lower-power Bluetooth because it only slowly started to charge once I moved the physical doorbell closer to where I was trying to charge it.

    I primed our front entryway’s rails and support beams, which I had planned on getting to for over a month. I plan to paint it next week.

    All on a Monday afternoon.

    I have dozens of home maintenance and improvement projects this summer, from gates to stairs to replacing wood rot to painting and staining.

    Monday May 27, 2024