Lightning Talk Idea

I have an idea for a lightning talk for a conference that involves the use of datasette, git scrapping, and my love of the AHL. Specifically this project that I've been poking at for more than 2 years which uses git scraping to populate data into a sqlite database which is then served up by datasette on a server I run.

It's a silly little thing, but it lets me do some pretty cool things, like comparing how my beloved Coachella Valley Firebirds are doing year over year.

It also lets me see their point totals by day for a specific number of historic years1 to do some other neat comparisons.

I've also been trying to work at getting a Django app integrated into it so I can make new tables and populate them with information about franchises, and teams to get a better sense of the history of a franchise and how it relates to any team.

For example, the current Calgary Wranglers were the previous Stockton Heat. And if you go back far enough they were the Maine Mariners who were the first expansion team to win the Calder Cup back in 1978-79.

Being able to easily trace the history of a franchise, through its various incarnations, with data seems like a pretty cool thing, at least to a data nerd like me.

I have BIG plans for this, but right now it's just a small, hobby project.

  1. There are three parameters, years back, team name, and season name. See here for an example ↩︎

The Trouble with Karabiner

I woke up this morning and attempted to do some stuff on my mac. I have a docking station that I use for both my Mac Book Pro and my work Windows Laptop.

There is a Code Keyboard1 that is attached and is set to Windows mode (because I use this configuration for work for many more hours that I use it for non work, i.e. macOS stuff)

To help with this I use an app called Karabiner-Elements.

When I plugged my MBP in today none of the Karabiner remapped keys were working as expected (I map alt to command on the left and right side specificall). I tried many things, and eventually discovered that I need to have the following items enabled

Full Disk Access

  • karabiner_grabber
  • Karabiner-Elements

Something (probably an OS update) seems to have disabled the karabiner_grabber access as I had to switch it back on.

Suddenly everything is back to working as expected.

I would really like that 45 minutes back though. Not a great way to start your day

  1. R.I.P. Code Keyboards ↩︎

all-star-break-doldrums

Since the All-Star break the Firebirds entered what is arguably their softest part of their schedule with games against San Diego, Henderson, San Diego again, Bakersfield, and Tucson. These 4 teams are in the bottom of the Pacific division and in San Diego's case they are 20+ points behind the Firebirds.

I'm not sure what the hell is going on, but in their first game in San Diego they won in Over time in what should have been a blow out, in their second game in Henderson they lost by 1 goal.

In their first home game post All Star break they again played San Diego and lost 5-3 (the last goal being an empty netter so 🤷🏼) but they also gave up 2 goals in less than 40 seconds in the second period. That ended up really being the different.

That means 3 games into their 5 game 'soft' patch and they're 1-2. They play Bakersfield tomorrow night and I sure hope they find a way to get back into their winning ways because this has been some pretty shitty hockey to watch. The Firebirds are 2-3 against the Condors this season and have yet to beat the Condors at home this season.

To quote Han Solo, "I have a bad feeling about this"

Great Swimming

Today was one of my better swim times for the 2000 yards that I typically swim during the week. This was a bit surprising as it was the end of the week and I had, what I would consider, a pretty intense gym day yesterday. That being said, there was something about how I was able to seemingly, effortless, glide through the water.

I also didn't track my laps for which stroke I needed to do, which is a pretty good sing that I'm just listening to my body and switching up when I want to and not when I need to because it's time for a new stroke.

It was also a perfect morning for a swim. Slightly cool with no breeze and a beautiful sunrise hitting the left over storm clouds with a vibrant pink hue.

When it was all said and done I had a 2'37" 100yd lap time on average and more freestyle distance that breaststroke distance, which I hadn't done before.

Here's hoping to more improvement over the next few weeks in my swim time!

Creating Documentation from an XML file using Python

This will be one of those frustrating blog posts where I'll wave my hands about the code that I wrote but not actually be able to post it because I did it for work.

A very specific (to my department) challenge we have is that we use a tool called Crush FTP to automate several things. This automation is mostly around file movement, and file renaming. Because this tool has permissions which are higher than my team and I, we have to work with our IT team in order to set up various jobs. The IT team is always really responsive when we need to make a change, or check on something, but I really wanted to have an ability to be able to have my own documentation to be able to answer questions about the jobs.

I recently discovered that each job can be exported out as an XML file, and while XML has a very 'thar be dragons' vibe to it, these XML files were mostly fine. I say mostly because there is a node called that has all manner of problematic text in it that causes all sorts of parsing failures. To 'fix' this I simply remove the content from that node and replace it with placeholder text (for now).

The final product will output plain text with details about each job, each task in that job, and then a mermaid diagram of the flow at the bottom.

This is pretty much everything that my team and I need to have the documentation to answer questions.

Some future improvements I'd like to implement are:

  1. Automation of the XML file generation from the Crush FTP application
  2. Automatic writing of the documentation to our Knowledge Management System1
  3. Write the data to a SQLite database so I can leverage datasette to help clean up names, and various attributes of the tasks and jobs
  1. We use YouTrack which is a really good Jira / Confluence replacement if you're looking for one ↩︎

Picking a Ticket

One of the hardest things about contributing to Django is picking a ticket. Sarah Boyce has a great short video on a method that she recommends and it's a great bit of advice. As part of the Djangonaut program I work to help my Djangonauts find a ticket to work on.

A few queries I recommend are * Sarah's Vulture * Needs Documentation

Using the Needs Documentation I was able to filter down to just this and identify three tickets that seemed interesting:

Picking a ticket can be challenging, but using the filters can really help get you down to a smaller list of things to try and work on.

Djangonaut Space - Session 4

Next week starts session 4 of Djangonaut Space and I've been selected to be the Navigator for Team Venus with an amazing group of people. As has happened before I go into this with an impossible amount of imposter syndrome lurking over me. While this will be my third time doing this it still feels all new to me and I'm constantly worried that I'm going to "do it wrong".

I have the start of a plan to help with my navigator duties, and I need to get that all written down so that I don't forget what needs to be done and when it needs to be done by! I'm hoping that I'll be able to pick up a ticket and work alongside my Djangonauts as I have done before, but the seasons of life can, and do, have a way of changing quickly.

Perhaps I can just try and focus on getting my one current In Progress ticket wrapped up before diving into a new one 🤔

Anyway, I'm super excited about the prospect of Session 4 and can't wait to "meet" my Djangonauts on our first call next week.

Here's to hoping my imposter syndrome doesn't get the better of me 🚀

How to Make a Hard Decision

Life is full of decisions. Some of them are easy, like what will I have for breakfast on a weekday? The answer is peanut butter toast with blueberry preserves, obviously!

Some of them less so. When faced with a decision that is hard there a lots of strategies to help in making it. You can make pros and cons lists. You can do worst case scenarios. You can do any one of a number of things to help to get you to the decision, which is helpful. But what these tricks can never do is tell you if you're making the right decision.

When faced with a difficult decision, the reason that it's difficult is that the choice you make isn't clearly going to the right one or the wrong one. It's just going to be a decision you made. Only time will help you find out if it was the right one or not.

I'm really focusing on making hard choices recently. Lots of things in life right now are putting choices in front of me. The choices are hard to make, and the goodness of the decisions may not be known for weeks, or months. All I know is that a decision needs to be made, because not making a decision is a decision in and of itself.

Here's to the tough choices and the decisions that come along with them.

PyCascades 2025 - Postlude

I'm back home from PyCascades. I'm glad to be back home, but I sure did have a great time in Portland. Seeing old friends, and meeting new ones. I'm also really happy that my talk seemed to resonate with at least a few people. It's always nice to hear someone come up to you after a talk and hear them say that they liked it. I don't know that I did enough of that this weekend, because there were a lot of really great talks.

The flight back home was a bit of an adventure. My initial gate was at the very end of C terminal at PDX. It was then moved to B terminal so there was a little more walking than I was thinking there would be. Normally this wouldn't be such an issue, but my daughter Abby decided that she wanted to buy about 8 books and I was lucky enough to carry her bag.

Once we got to our new gate the plane was delayed about an hour. I still made it home at a decent enough hour, but it was a longer day than I was really expecting it to be.

Going to conferences can be hard, but they are a hard thing that is worth doing because of the new people you get to meet, and the old friends that you get to see. Ten out of ten, would recommend.

PyCascades 2025

I spoke at PyCascades today giving a talk I gave at DjangoCon US 2024 in Durham last September. The title of the talk was Error Culture and I got some really good feedback from several people in attendance about it. During the talk I saw a lot of head nods, and even got a few laughs (which feels very good as a speaker!)

The one thing that was 'missing' from this talk was the 'nerves'. Before I gave the talk at DjangoCon US I was pretty nervous, but this time I was really calm and I'm not sure why ... or if I was glad that I wasn't nervous.

Maybe I wasn't nervous because I had given the talk before ... or maybe it was because of the amount of time I had practiced. Or maybe it was something else. I'm just not sure.

I'm also not sure if I prefer the lack of nerves before a talk or not. There is something about being nervous before getting on stage that makes you feel a bit more alive, so I did miss the nerves. But that being said, I was happy that I wasn't nervous all day. My talk was at 5pm so if I had been nervous I would have had that feeling ALL DAY!

All that being said, I'm really happy to have been able to give the talk at PyCascades this year. It's been a great conference so far, and I'm really looking forward to tomorrow.


Page 3 / 24