How to Watch a Hockey Game - Game Play
Game Structure
Hockey has some stuff in common with live theater. No ... really! 😁
They both have dressing rooms and they both have intermission ... but that is probably where the similarities end.
Each hockey game is split into three 20 minute periods. There is an intermission between each period that lasts 18 minutes. During the intermission the players go back to the dressing room to regroup and chat about the previous period a strategize for the upcoming period.
Out in the arena there are chances for you to get overpriced refreshments, stand in long lines to use the facilities, or just stay in your seat and watch the silly intermission games.
Some examples I've seen of silly intermission games are Fuego Pong (like quarters, but with soccer balls and large 5 gallon buckets), ice bowling where a player is put into a giant slingshot on the ice and hudled towards inflatable bowling pins, and the dress up game.
It's also during this time that the ice is resurfaced by a Zamboni to make it nice and clean for the next period.
If at the end of the third period the game is tied then you're in luck because you get free hockey, also known as Overtime. One thing to keep in mind is that the overtime rules during a regular season game are different than a postseason game.
Regular Season Overtime Rules
At the end of the third period there is a 1 minute 'intermission' and then a 5 minute overtime period starts. The overtime period will feature 3 skaters from each team as well as their goalie.
If a penalty occurs in Overtime (or is carried over from the third period) the period starts with four players on the power play team and 3 on the short handed team.1
Each team tries to score a goal first. If they do, then they win in overtime. If, at the end of 5 minutes of play, the score is still tied then a shootout happens.
In the shootout each team has 3 chances to score a penalty shot. Essentially a skater from each team has the opportunity to try and score a goal with only the goalie trying to prevent it. If at the end of the three rounds we're still tied, we keep sending out skaters to try and get that penalty shot until one team is victorious. The record for most rounds of a shoot out is 20 rounds in the NHL, and 16 rounds in the AHL.
Postseason Overtime Rules
Postseason overtime rules are a bit different. Basically you just keep adding 20 minute periods until someone scores. Once a team scores they have won that game. The longest overtime in NHL Postseason history went into the 6th overtime and was played in 1936 between the Detroit Red Wings and the Montreal Maroons. The longest AHL overtime was between the Charlotte Checkers and the Lehigh Valley Phantoms which went into a 5th overtime period. This game started at 7:03 pm local and didn't finish until almost 3:00 am local the next day!
In general most hockey games don't get past the first OT period. From The 2006 playoffs through to the 2024 playoffs there have only been 52 games that have gone into a second overtime period (out of 1312).
OK, you've got a few basics 'under your belt'. In the next part I'll try and answer the question, 'What should I watch?'.
- essentially it would be a short Overtime period and probably pretty boring ↩︎
How to Watch a Hockey Game - Three Rules
I've written a few times before about hockey. I love watching my local sports puck team1 and really wish more people watched it. So, I'm going to write a beginners guide to watching hockey so that you too, dear reader, can become an avid fan.
Hockey is a pretty fast paced game at the professional level. In the 90s Fox Sports had broadcast rights to hockey in the US and to help its viewers they had a glowing halo on the puck called FoxTrax which allowed fans to more easily find it. This practice was discontinued at some point, and I honestly think it was one of the better innovations that Fox Sports did and really wish that it would make a come back.
The Rules
As a beginner hockey observer there's only three rules that you really need to know to be able to follow the game.
- Offside2
- Icing
- Power Play / Penalty Kill
The Set up
The ice rink can be broken into 3 sections from the perspective of 1 team. Let's assume we have two teams, A and B. Let's root for team A.
- The Defending zone - This is where team A's Goal is located. It starts right behind team A's goal and goes to the right toward the blue line
- Neutral Zone - This is the center of the ice between the two blue lines; it also contains a red line that is called 'Center Ice'
- The Attacking Zone - This is where team A are trying to score. It starts at the OTHER blue line and goes back behind Team B's goal
Offside
Offside is defined as ... actually that's not important. What is important to understand is that a player on the offense cannot enter their Attacking zone before the puck does. If they do, then that player is called Offside. When an Offside happens a face off takes place outside of the Attacking zone (i.e. in the Neutral Zone) where each team will try and gain control of the puck.
Icing
Icing, or icing the puck, is when a player in their half of the ice and shots the puck down the ice towards their Attacking zone and it is NOT touched by anyone before it passes the face off circles in the Attacking zone. When an icing occurs the puck is returned to the defending zone for a face off3. When an icing occurs the team that the icing is called on have to keep all of their players on the ice, that is, they can not send in any substitutions.
Power Play / Penalty Kill
The two rules above, when broken, result in a stoppage of play and a new face off for each team to try to gain control of the puck. Other rules, when broken, will result in a penalty4 which sees one, or more, players sent to the Penalty Box5. Penalties can either be minor, which result in a two minute penalty, or major, which typically result in a 5 minute penalty6.
When a team is on the Power Play they will have 1 or more extra skaters than the other team. The other team's 'missing' players will be in the Penalty Box. The Power Play team, with the advantage, will remain on that advantage until either they score OR the penalty expires. If a team scores while on the Power Play, they are said to have scored a Power Play Goal.
The team that has penalized players is said to be on the Penalty Kill. They are trying to 'kill' the advantage that the Power Play brings to the other team. If the team on the Penalty Kill scores a goal, it is called a Short-handed goal ... because they were short a person, i.e. short handed, when the goal was scored. In the National Hockey League (NHL), American Hockey League (AHL), and most other leagues when a short handed goal is scored the Penalty keeps going until time is over OR a goal is scored by the team on the Power Play. The Professional Women's Hockey Leagure (PWHL) has a rule (which I think is genius) which states that IF a team scores a short handed goal, the Power Play is over.7
In the next post I'll talk a bit more about game play.
- The Coachella Valley Firebirds ↩︎
- in hockey it is not pluralized like in American Football ... even though in American Football it's not pluralized either! ↩︎
- This does NOT apply when your team is on a Penalty Kill ↩︎
- I'll talk more about various penalties in future a post ↩︎
- it's a small room where players are sent to think about what they did ↩︎
- There are a few caveats here about game misconduct, but they're not important for an introductory primer ↩︎
- Now, there are lots of Nuances to the PP/PK write up above, but you don't need to understand them initially to enjoy hockey. ↩︎
Remember the Colosseum!
The Roman Colosseum
After the fall of the Western Roman Empire in 497 CE the Colosseum fell into disrepair. Rightfully so! Who can worry about keeping up a giant megalith made by people centuries ago while you're just trying to figure out where your next meal may come from, or the ranging hordes of barbarians showing up and taking the food you did find!
However, during the medieval period, while Rome's population declined dramatically and many ancient structures fell into disrepair or were repurposed, the Colosseum remained a prominent landmark. There are stories that as the centuries progressed, the inhabitants of Rome forgot who built it. While some fantastical legends did develop around it, the basic historical facts of its construction by the Flavian emperors and its original purpose remained part of common knowledge among educated Romans. For the non-educated Roman's there were lots of misconceptions about the colosseum.
The non-education Romans would have created stories1 about the large building. It was haunted. It was used for pagan rituals and no good Christian would go in. Folklore would rise up around it. As many of us have seen or experienced, in the absence of information, people will make it up.2
The Story of the Legacy System
OK, but why is this important from a technology perspective?
Imagine if you will a large system, built 10 years ago, by a group of developers, that have all left the organization.
No one left knows how it works, or how to make changes to it. Most people don't even really know WHY it's there in the first place.
There isn't any documentation that can be referred to. Either because it wasn't ever created OR it was destroyed by Barbarians, I mean well meaning IT processes that 'clean up' unused files.
So what happens? The people remaining create stories about the system. Stories like the long timer 'Bob' that once caused the entire system to Crash and then an old copy backup copy had to be restored, and months worth of work was lost.
No one ever saw Bob after that. Now we're all afraid to touch any part of it. We mostly leave it alone, and it leaves us alone.
There are stories about another gray beard that actually built the system, but everyone assumes these are just fairy tales.
The stories tell of this Gray Beard busting out the entire system in a weekend, using nothing but a pin to move the electrons into the proper places to get all of the logic to work as expected.
Of course, no one really believes that story, but it encourages people to never want to have to make and changes to it.
The problem here is that it's running on a server with an OS that hasn't been supported for 7 years and there is security mandate to upgrade 'everything' to be on current software
No one wants to be in charge of this project, but someone is going to have to be in charge of it.
What do you do?
The story above isn't real, at least not for me. But it could be.
How many times have you gotten to a system that is old, no one around has any idea how it was built and people mostly just avoid it? Probably more than once.
But how can we avoid this fate? Do we just keep the old timers on until they (or the system) die?
There are options, and they are some of the easiest things to do, but many people don't like to do them.
What is the answer?
Documentation
Documentation. No really, Documentation. Just write it down. For a new project especially. For an old project? Most definitely.
For new projects it's best to just get into the habit of writing good docs3 as you go. If that's doc strings in a method, or a full fledged Knowledge Management System using a documentation framework like diataxis, then so be it.
But write it down. Write down the why's whenever you can. Use something like an Architectural Decision Dsocument to understand WHY you made a technical decision you made. Maybe it's not the best decision, but it's the best decision given a set of constraints.
For existing projects, it can be more challenging. It's possible that NO ONE that created the system is at the organization. It could be that NO ONE that asked for the system to be created is at the organization.
This leads to a bunch of problems to try to solve, but the journey of 1000 miles starts with a single step.
How do you solve it?
Use the helpful Awareness-Understanding Matrix4
Aware | Unaware | |
---|---|---|
Understand | Known Knowns | Unknowns Known |
Don't Understand | Known Unknowns | Unknown Unknowns |
That is,
- Known Knowns: Things we are aware of and understand
- Known Unknowns: Things we are aware of but don't understand
- Unknown Knowns: Things we are not aware of but do understand or know implicitly
- Unknown Unknowns: Things we are neither aware of nor understand
The Known Knowns may be very small, but it won't be empty.
The Unknown Unknowns might (will probably) be the largest.
The lack of knowledge here represents Risk5. Risk to your team, or to your organization. This Risk needs to be handled as much as possible.
Looking at a system with the Awareness-Understanding Matrix can help to risk it properly. Once you've properly risked the system, then you can start writing documentation.
The documentation can take the form of Architectural Review of System X (DRAFT)
The system does these things
- Thing 1
- Thing 2
- Many other things that are still unknown
Sometimes just the act of writing these things out will help you in finding out what you know and what you don't know.
If you're using a documentation framework like diataxis for this, you will want to keep your documentation parts separated (How To, Tutorials, Reference, Explanation). You may start righting a Reference article on the system and realize that you also need to have some, yet to be discovered, Explanation. The issue is that the Explanation still needs to be researched and written.
That's OK! One strategy I've encouraged, and use, is if I'm writing a Reference Article and need to link to a yet to be written Explanation article, is that I'll simply create the yet to be written Explanation article and tag it with Explanation
and Stub
. This frees me to come back to it later and fill in the details.
The other thing that will need to be done is to figure out who uses the system. Sometimes that's super easy, and sometimes, it's not.
Once you're able to determine who uses the system, you can talk with them about the system and then work to fill in the gaps from above.
Occasionally, you find out who everyone thinks is using the system, and discover that actually, it hasn't been used for 5 years because reasons, and they didn't know who to tell.
Now you can just retire the system using a decommissioning process. You have a technology decommissioning process, right? If you don't, it may be time to look into one!
Back to the colosseum
The inhabitants of Rome never got to a spot where none of them knew why it was built, or who built it. Or even why. But what did happen is that the people with the knowledge may have been parts of groups that were marginalized and therefore their knowledge was discounted or ignored. Because the knowledge was a verbal knowledge and not written down. It was, to use a loaded term, tribal knowledge. EVERYONE just knows the obvious thing.
But the thing is ... obvious things are only obvious in the context they were created. It's obvious what Python is. I mean, why would someone use a snake to write code to get a computer to do a thing. EVERYONE knows I'm talking about the programming language Python ... until they don't.
Just write this shit down. Make sure everyone gets into the habit of documenting. Make the documentation public. And if it's not possible to make all of the documentation public, make as much public as possible.
For the parts that aren't public, make sure they are accessible by the people that will need access to it.
Really, documentation is a means to an end. Sometimes you won't need the documentation. You'll know how the thing works, and it has an obvious API or UI and people just "get it". This can lead to people not writing the documentation because we don't need it.
This is kind of like saying, I've used a seatbelt every day for 30 years and I've never needed it. I don't see why I need to wear it any more.
This might be fine until you're in an accident.
Not writing documentation is fine, until it's needed. And that's the worst time to discover that you need it.
Better to have it and not need it, than to need it and not have it.
Looking Back at the Half Marathon Streak
Looking Back at the Half Marathon Streak
How It Started
In February 2012, a half marathon was being held in Palm Springs, and one of my walking friends asked if I wanted to do it... about 5 days before it was set to happen. I said I wasn't interested, and she said "Where is your sense of adventure?" ... though it was in slightly more colorful language. Six days later, I was participating in my first half marathon.
Now, I hadn't really run too much up to that point. A 5K here and there, and for the most part, I wasn't running much during those "runs".
At the start of the half marathon, I looked at my friend that had persuaded me to participate and said something like, "We're just going to walk, right?" She said we had to run at least some of it.
Eight miles later, I was still running and enjoying it. She wanted to walk a bit. So we did, and then she encouraged me to start running again, so I did.
The First Taste of Success
I finished that first half marathon in something like 2h30m, but I was suddenly hooked. I thought, "I bet if I actually trained for a half marathon, I could do better." So I set out to train for a half marathon. I started a training schedule using this plan and was able to complete the San Diego Rock 'n Roll half in a little more than 2 hours. I continued to run medium distances (up to 12 miles on weekends) and really enjoyed it.
I got to a point where I was in the best shape of my life. I had a resting heart rate of something like 50 with blood pressure that was pretty low (almost low enough that my doctor was concerned!) but my labs were good, and I felt GREAT!
The Birth of the Streak
I was looking at half marathons in 2014 and saw the Palm Springs one again, but also saw one in a local city called Desert Hot Springs in December 2013. Then there was the Carlsbad half in January 2014. Another one looked interesting in Zion National Park (sort of) in March of 2014. And then I saw that there was the La Jolla half in April.
It also turns out that if you run the Carlsbad, La Jolla, and America's Finest City (AFC) half marathons, you get a nice triple crown medal. Well, the AFC was in August. I was looking at the calendar and thought, "Holy shit, I might be able to schedule half marathons each month for an entire year!"
The Journey Begins
In November of 2013, I signed up for a couple of the half marathons that were further out (essentially the ones for the Triple Crown medal) and the Palm Springs half.
I wanted to do the Zion run, but it's a 10-12 hour drive to Zion from where I live. I casually mentioned this to an acquaintance who said, "I'd run that with you."
The next thing I knew, I had a pretty good string of runs set up: (1) Carlsbad, (2) Palm Springs, (3) Zion, (4) La Jolla, (5) America's Finest City ... but I still hadn't told anyone, other than my wife, about my crazy idea to run a half marathon each month.
Making the Commitment
One day while on a walk with a friend, I mentioned that I was thinking about doing it and he said, "That's an awesome idea... you should totally do it." We spent most of the walk with me talking about the idea and wavering until I finally just said, "I'm going to do it."
And that was it. I had made a commitment, publicly, about this thing I was going to do.
The Year of Running
All that was left was to finalize each of the runs, and then train. And by train, I mean run. A lot. So much running.
I ended up running 13 half marathons in 364 days, bookending the feat with the Half Marathon in Desert Hot Springs in December of 2013 and 2014.
In all, I ran in the following cities (some still have my results online!):
- Desert Hot Springs (twice!) in December (2013, 2014)
- Carlsbad in January
- Palm Springs in February
- Zion in March
- La Jolla in April
- Menifee in May
- Rock n Roll in San Diego in June
- Oceanside in July
- San Diego (AFC) in August
- Ventura in September
- San Luis Obispo (SLO) in October
- Santa Barbara in November
During that year I ran roughly 1000 miles training, and 170.3 miles for the actual runs.
The Reality of the Challenge
I have never been so tired in all of my life as I was that year, but I look back on it and it was really fun.
At the beginning of the year, I had an idea that I would get better and faster at running. That didn't happen1 for a variety of reasons, but mostly because it wasn't fun. What was fun was going to different places with my family where the races were being held and hanging out with them. I still have fond memories of being in Ventura and going to a thrift store with my wife and daughter and finding a pair of roller skates that fit my daughter perfectly.
The Memorable Moments
I remember the kitschy B&B in Santa Barbara where my wife and I stayed and walking around Santa Barbara and finding this cool co-op style building with lots of vendors for getting food, drinks, or artisanal handcrafted stuff.
I also remember running the La Jolla half with a low-grade fever and realizing exactly how bad of an idea that was. Also, that hill at mile five on that course was absolutely brutal!
The Why of It All
In looking back on this, I don't really know why I did it other than the hubris of thinking I could, and then telling someone I was going to.
The hardest stretch was the runs in the second quarter. The first one (La Jolla) was the last weekend in April, the Menifee one was in the middle of May, and the Rock n Roll in San Diego was the first week of June. I ran three half marathons in five weeks. I still look back on that and think it was the point that broke me.
The Challenges
I really did want to give up more times than I can remember, but because I had said I was going to do a thing, I was going to do it no matter what.
There was the nerve-wracking part where I was also going to do a run-a-mile every day between Thanksgiving and New Year's, and then on the first run, I twisted my ankle so my adventure almost didn't even start at all!
The Lessons Learned
I look back on this experience and remember that yes, I can do hard things. Yes, they are worth it, but not always for the reasons that you think they will be.
Telling someone you're going to do something hard can help push you forward and keep you accountable, even just to yourself.
Looking Forward
Would I ever do something like this again? Maybe if I was 10 years younger! In all seriousness, I think I would IF I went into it with a bit of a different headspace. When I started this challenge in 2013, it was with the piss and vinegar of a young person who was sure they could conquer the world.
If I did it this time, I would be more mindful. I would try to enjoy the practice of running. I would enjoy the destinations I was going to get to run in. I would share these joys more with my family.
The Support System
Doing things like this are never done alone. I think that was the thing I learned most about this. During that year, there were some sacrifices made that I didn't realize at all. My wife and daughter did a really good job of supporting me and my decision, but it did put some strain on family life.
Work-Life Balance
Something else it taught me, ironically, was a bit of work-life balance. I was the manager for a technical team at the time. We had an upgrade that was set to happen the weekend before my Menifee run in May. Due to an issue with a third-party vendor for that application, we had to push back the upgrade... I had to decide to push back the upgrade which meant it would happen the weekend of my run.
As I was working towards making the decision, my boss and my team all knew what I was trying to do, and they supported not only the decision to push back the upgrade but also encouraged me to go do the run. They told me that they could handle the upgrade without me, and they did.
The Hard Lessons
That Menifee run was also where I discovered, for the first time, exactly how bad dehydration can make you feel. Not an experience I recommend, and not one I ever hope to repeat. There are still parts of Old Town Temecula that make me feel a bit queasy when I visit them!
The Final Reflection
Overall, this was a great experience, and I learned a lot about myself. But I also learned a lot about my friends, family, and coworkers as well.
Would I do it again ... maybe. Would I like to run at least one of those half marathons again? Absolutely. I just need to get back into running shape!
- just take a look at my available results above via the links! ↩︎
Year in Review 2024
I did my first Year in Review last year and have decided to carry on the tradition to make sure I know what I did!
I've written about themes before, so I won't go over it again here. Below is a high level of what my 2024 themes were
- Winter of Learning
- Spring of Transition
- Summer of Writing
- Fall of Mindfulness
Overall my themes were pretty successful. I do wish I had been a bit more mindful, and am now left to wonder if I shouldn't have gone with Autumn of Mindfulness instead of Fall of Mindfulness, because I seem to have taken a step back on some of my hopes for mindfulness 😄
Professional
Last year I said
In the moment it can feel like I don't really get anything done at work
I've felt this way pretty much every year for probably since I first became a manager, but I'm starting to embrace it a bit more as I get older I guess.
For some context, in 2024 I worked 2235 hours with the following breakdown:
Category | Hours | Percentage |
---|---|---|
Administration | 1193.5 | 53.4 |
Meetings | 838.1 | 37.5 |
Coding | 93.5 | 4.2 |
Conference | 55.5 | 2.39 |
Commuting | 54 | 2.42 |
There were a couple of highlights from work this year though that I wanted to call out
I celebrated 16 years with my current employer which means that my career is now old enough to drive in the US!
My team finally was able to migrate our SQL Database version control from Subversion to Git. I wrote about the migration to git last year in my year in review and this was the last project that needed to be migrated over.
There are still some things to do to help with the migration to make it easier for the teams that work with this project, but the first couple of steps have been completed which is nice.
One of the big things I wanted to focus on was the validation issues that my company had with transmissions of claims data.
Working with a couple of smart and dedicated people we were able to do some pretty amazing things.
One thing to keep in mind with the validation errors is that they have to be corrected, by a person, in order to allow the claims to be transmitted to the Health Plans (which is a major goal of my company)
At the start of the year, the validation error rate for Institutional Claims was 13.7% while the rate for Professional Claims was 8.7%
By the end of the year those rates were down to 1.1% for Institutional Claims and 0.3% for Professional Claims. This represents decreases for 89% and 96.4% respectively.
I'm really proud of what the team was able to accomplish.
Personal
Health
I usually like to run or walk to keep my cardio health up, but I seemed to keep running into one injury or another with my knees, feet, ankles ... whatever. In July I decided to give swimming a try.
Since July 15 I've swum 83,650 yards / 76489.56 meters ... which is 47.5 miles. This absolutely blows my mind because my first swim was only 200 yards, lasted about 10 minutes and I thought I was going to die.
I'm now consistently swimming 3 days a week for about 55 minutes and 2000 yards / 1828.8 meters.
At about the same time I really doubled down on starting a meditation practice. I tend to do about 20 minutes of meditation each day. In 2024 I had 54 hours of meditation.
I wish I could split up my walking and running statistics, but Apple doesn't think these are different and so they are combined in all of the health apps! My combined Walking+Running stats came in at 1015 miles which looks like a lot, but is down significantly from my high in 2019 of nearly 2000 miles. It's also the lowest annual total by far since 2015 (my first full year of tracking)
I think I know what I'll need to focus on in 2025!
Writing
In June I started a writing group with Mario Munuz and Trey Hunner and that helped to keep me motivated and accountable for writing. I didn't write nearly as much as I hoped, but I was able to get out 18 articles. This is the most since 2021 when I wrote 23, but about 1/3 of my high mark in 2018 when I somehow was able to write 44 articles!
Open Source
This year I expanded the role I had in the Django community and I'm really pleased with that.
I started the year off as a Navigator for the amazing Djangonaut.Space program in Session 1, and was able to fill that same role in Session 2.
I joined the Django Commons admin group with Daniel, Lacey, Storm, and Tim. We've been able to onboard 6 libraries!
I also gave a talk at Django Con US in Durham titled Error Culture. As always, my time at DjangoCon US was a blast and I'm looking forward to seeing everyone in 2025 in Chicago!
I also ran for the Django Steering Council. I wasn't successful in making it into the Steering Council, but the five folks that did are all amazing humans and I'm looking forward to the work that they'll do over the course of the 6.x series.
I've also really enjoyed Jeff Triplett's Office Hours. I don't do nearly enough open source work during those office hours, but it's nice to see people and listen in on, and participate in, some great conversations. I'm looking forward to doing this again in 2025
I've also been trying to attend the DSF Office hours hosted by Jacob Kaplan-Moss and Thibaud Colas. These calls are really interesting and allow a bit of a peek into the DSF Board and what's being worked on. Again, I'm excited about attending these in 2025 as well.
Sports Fandom
I post on social media a lot about Hockey. Specifically the local team near my home, the Coachella Valley Firebirds.
They made it to the Calder Cup Finals again this year. And again they played the Hershey Bears. I wrote about the 2022-23 season, and the Calder Cup finals and the heart break associated with losing in Overtime in Game 7 of a championship. I wish I could say that they were able to redeem themselves, but the outcome was the same ... but losing in 6 games instead of 7. That being said, it wasn't nearly as painful this time around.
In all, I went to nearly 50 Firbirds Hockey games (a few on the road, but most at home) and can't really believe it. Watching Hockey live is a lot of fun!
One of the highlights of the off season was running into a few of the players at a local sandwich shop and getting to chat with the captain Max McCormick. I tried to 'be cool', and I think I might have mostly succeeded, but it was a pretty surreal experience.
I also had the luck to get tickets to a game at Crypto.com arena to see the LA Kings play the Seattle Kraken (which is the NHL affiliate of the Firebirds). It was an awesome game to watch due to many of the players for the Kraken being former Firebirds.
The Kraken ended up losing the game 3-2 but it was still a great time.
Finally, the BIG sports win this year was the Dodgers winning their first Full Season World Series since 1988. Because of life I didn't get to watch as many games of the World Series as I would have liked, but I did get to watch game 5 and that made up the missing game 1 ... I think.
Miscellaneous
Music
I got to see a few Concerts in the Park which is always fun. It's free, and typically a pretty nice evening on some cool grass with a stunning view of the sunset over Mt San Jacinto.
I also got to see Weezer and had a good time hanging out with my daughter.
Finally I rediscovered the amazing music of The Tragically Hip from a toot by Greg Wilson and it's brought me a lot of joy to listen to them again. Phantom Power is my favorite album of theirs with so many good songs. Bobcaygeon is probably my favorite on the album, but it can change depending on my mood.
Empty Nesting
As I wrote about here my daughter graduated from High School and started College in the fall. This has been a big change for my wife, Emily, and I. Our daughter is pretty close by so we can visit easily, but we've tried to give her the space she needs to adjust to college life. It's been pretty successful, but it's still a weird experience to walk past her room and not see her.
Home Garden
I've been posting pictures of my lemon tree on Mastodon over the last year. In November I was finally able to harvest about 30 or 35 lemons. The great thing about a lemon tree is obviously all of the lemons. But the hard thing about all of the lemons is trying to figure out what to do with them.
Emily found a great recipe for Lemon & Chili infused Olive Oil so we used that recipe to make about 12 bottles of our own custom olive oil and about 15 cups of Lemonade. These made some pretty amazing Christmas gifts.
Reading
Looking back at my reading for 2024 and I didn't do nearly as much as I would have liked, or think that I should have.
I was able to make it about 8 Chapters into Software Design by Example. It's a great book, but it's definitely not something you just breeze through.
I was able to finish up Practices of the Python Pro. I found it to be a pretty comprehensive book. I'm not much of a book reviewer so I won't bother writing one here. I got value out of reading it, and I think others will as well.
What I am really missing from my reading list for 2024 is fiction. Like any fiction at all. It doesn't look like I read anything that wasn't technical so I'll be trying to focus on fixing that in 2025
Wrap up
Overall 2024 was a pretty good year for me. There were some things that I wasn't and am still not excited about, but I have decided to try and make things better where I can, stand up for what I believe is right, and just keep on trying to be kind and make the world a better place in the ways that I can.
Weezer Live
I started college in 1996. In 1997 one of the most influential albums of my early adulthood was introduced to me ... Weezer's Pinkerton.
I hated it.
I wanted the Blue Album again but different somehow, and Pinkerton was NOT it.
However, a weird thing happened. Once I moved into my Sophomore apartment with a roommate that I can only describe as 'hard to live with' I retreeated into two things:
- Final Fantasy VII
- Music
Final Fantasy VII is a whole blog post on it's own, so I won't try to cover it here, but music ... and specifically Weezer were instrumental to me surviving my 'hard to live with' roommate.
Listening to too much Weezer
I probably listened to Pinkerton 1000 times (no exaggeration) over my time in college (this was not so hard because it's only a 35 minute album!)
I loved that album, and listening to it STILL brings me back to living in a small, shitty apartment in San Luis Obispo with a 'hard to live with' roommate.
I saw Weezer live in March of 2001 at RIMAC in La Jolla at UCSD1. I still remember the show. Lots of hipster Weezer fans in their skinny jeans, nerd glasses, and a lot of earnestly trying really hard trying to not try to be 'cool'. I was (still am) a bigger guy that can't fit into Skinny jeans to save my life, so this wasn't really my scene, but I really wanted to see Weezer and I didn't want to care about the hipsters.
I also remember needing to be back in San Luis Obispo the next day for work or school or something. So after the show was done at midnight I got in my car and drove the roughly 4 hours back to San Luis Obsipo so I can do whatever I needed to do the 'next' day. It was a long day, but it was awesome. I got to see Weezer.
And for me, that's kind of where Weezer stopped making music. A few months later Weezer released the Green Album and I tried really hard to like it. I did that with Maladroit as well, but meh. Once Matt Sharp left it wasn't Weezer to me anymore2.
Life has a way of happening while you're making other plans
After that life got in the way and my musical tastes changed ... but I still really liked the "real" Weezer.
One of the things I really liked doing with my daughter was driving her to her Dance class. We'd each pick an album we thought (hoped) the other would like and listen to it on the drive out.
Of course, I picked Pinkerton at one point and the Blue Album and she thought they were fine. Ugh, I guess fine is better than I don't like it, but still.
Fast forward to October 10th 2024 and Weezer is playing live, in an arena, not even 15 minutes from my house. I bought tickets for me and my daughter and it was pretty surreal. If you would have told me in 2001 at the Weezer concert that I'd see them again in 2024 with my adult daughter I wouldn't have believed you, but I would have thought it was a pretty cool dream to have 😄
The openers were Dinosaur Jr. and The Flaming Lips. I don't have much to say about Dinosaur Jr, but the Flaming Lips put on a great show. Lots of visual interest and excitement.
Then Weezer came on. And the show was amazing. Again, lots of great visuals and set design. One of my favorite was 'Island in the Sun' which had a Giant star in the background of a tropical looking island with a palm tree on it.
Again, the set design and visual aspects of the show were on point.
The only thing that wasn't great was the sound. If I listed to Pinkerton 1000 times, I listened to the Blue album at least 500 times. And the concert was meant to be a 30th anniversary of the Blue Album where they played it in order. And I have to say, for the first 5 - 10 seconds of each song I wasn't sure what song was being played ... it was a bit disappointing.
That being said, getting to see Weezer, with my daughter, was a pretty epic parenting level unlocked style achievement. I'm glad I got to go with her, even if the sounds was a bit muffled for my tastes.
Looking forward to the next concert!
- now called Liontree Arena ↩︎
- Yes, I've seen the SNL skit. Yes, I totally identify with Matt Damon's character! ↩︎
uv and pip
On Sunday November 3 I posted this to Mastodon:
I've somehow managed to get Python on my macbook to not install packages into the virtual environment I've activated and I'm honestly not sure how to fix this.
Has anyone else ever run into this problem? If so, any pointers on how to fix it?
I got lots of helpful replies and with those replies I was able to determine what the issue was and 'fix' it.
A timeline of events
I was working on updating a library of mine and because it had been a while since it had been worked on, I had to git clone it locally. When I did that I then set out to try uv
for the virtual environment management.
This worked well (and was lightning FAST) and I was hacking away at the update I wanted to do.
Then I had a call with my daughter to review her upcoming schedule for the spring semester. When I got back to working on my library I kind of dove right in and started to get an error messages about the library not being installed
zsh: command not found: the-well-maintained-test
So I tried to install it (though I was 100% sure it was already there) and got this message
ERROR: Could not find an activated virtualenv (required).
I deleted the venv directory and started over again (using uv
still) and ran into the same issue.
I restarted my Mac (at my day job I use Windows computers and this is just a natural reaction to do when something doesn't work the way I think it should1)
That didn't fix the issue 😢
I spent the next little while certain that in some way pipx
or pyenv
had jacked up my system, so I uninstalled them ... now you might ask why I thought this, and dear reader, I have no f$%&ing clue.
With those pesky helpers out of the way, pip
still wasn't working the way I expected it to!
I then took to Mastodon and with this one response I saw what I needed
@ryancheley Are you running python -m pip install... Or just pip install...? If that's a venv created by uv, pip isn't installed I think, so 'pip install' might resolve to a pip in a different python installation
I went back to my terminal, and sure enough that was the issue. I haven't used uv
enough to get a real sense of it, and when I was done talking with my daughter, my brain switched to Python programming, but it forgot that I had used uv
to set everything up.
Lessons learned
This was a good lesson but I'm still unsure about a few things:
- How do I develop a cli using
uv
? - Why did it seem that my cli testing worked fine right up until the call with my daughter, and now it seems that I can't develop cli's with
uv
?
I did write a TIL for this but I discovered that
uv venv venv
is not a full replacement for
python -m venv venv
Specifically uv
does not include pip
, which is what contributed to my issues. You can include pip
by running this command though
uv venv venv --seed
Needless to say, with the help of some great people on the internet I got my issue resolved, but I did spend a good portion of Monday evening un-f$%&ing my MacBook Pro by reinstalling pyenv, and pipx2 ... and cleaning up my system Python for 3.12 and 3.13 ... turns out Homebrew REALLY doesn't want you to do anything with the system Python, even if you accidentally installed a bunch of cruft in there accidentally.
- Yes this is dumb, and yes I hate it ↩︎
- As of this writing I've uninstalled pipx because
uv
can replace it too. See Jeff Triplett's post uv does everything ↩︎
Migrating django-tailwind-cli to Django Commons
On Tuesday October 29 I worked with Oliver Andrich, Daniel Moran and Storm Heg to migrate Oliver's project django-tailwind-cli from Oliver's GitHub project to Django Commons.
This was the 5th library that has been migrated over, but the first one that I 'lead'. I was a bit nervous. The Django Commons docs are great and super helpful, but the first time you do something, it can be nerve wracking.
One thing that was super helpful was knowing that Daniel and Storm were there to help me out when any issues came up.
The first set up steps are pretty straight forward and we were able to get through them pretty quickly. Then we ran into an issue that none of us had seen previously.
django-tailwind-cli
had initially set up GitHub Pages set up for the docs, but migrated to use Read the Docs. However, the GitHub pages were still set in the repo so when we tried to migrate them over we ran into an error. Apparently you can't remove GitHub pages using Terraform (the process that we use to manage the organization).
We spent a few minutes trying to parse the error, make some changes, and try again (and again) and we were able to finally successfully get the migration completed 🎉
Some other things that came up during the migration was a maintainer that was set in the front end, but not in the terraform file. Also, while I was making changes to the Terraform file locally I ran into an issue with an update that had been done in the GitHub UI on my branch which caused a conflict for me locally.
I've had to deal with this kind of thing before, but ... never with an audience! Trying to work through the issue was a bit stressful to say the least 😅
But, with the help of Daniel and Storm I was able to resolve the conflicts and get the code pushed up.
As of this writing we have 6 libraries that are part of the Django Commons organization and am really excited for the next time that I get to lead a migration. Who knows, at some point I might actually be able to do one on my own ... although our hope is that this can be automated much more ... so maybe that's what I can work on next
Working on a project like this has been really great. There are such great opportunities to learn various technologies (terraform, GitHub Actions, git) and getting to work with great collaborators.
What I'm hoping to be able to work on this coming weekend is1:
- Get a better understanding of Terraform and how to use it with GitHub
- Use Terraform to do something with GitHub Actions
- Try and create a merge conflict and then use the git cli, or Git Tower, or VS Code to resolve the merge conflict
For number 3 in particular I want to have more comfort for fixing those kinds of issues so that if / when they come up again I can resolve them.
- Now will I actually be able to 🤷🏻 ↩︎
DjangoCon US 2024
DjangoCon US 2024
I was able to attend DCUS 2024 this year in Durham from September 22 - September 27, and just like in 2023, it was an amazing experience.
I gave another talk (hooray!) and got to hang out with some truly amazing people, many of whom I call my friends.
I was fortunate in that my talk was on Monday morning, so as soon as my talk was done, I could focus on the conference and less on being nervous about my talk!
One thing I took advantage of this year, that I didn't in previous years, was the 'Hallway Track'. I really enjoyed that time on Monday afternoon to decompress with some of the other speakers in the lobby.
One of the talks that I was able to watch since the conference was Troubleshooting is a Lifestyle 😎 which had this great note: Asking for help is not a sign of failure - it's a strategy.
I am bummed that I missed a few talks live (Product 101 for Techies and Tech Teams, Passkeys: Your password-free future, and Django: the web framework that changed my life) but I will go back and watch them in the next several days and I'm really looking forward to that.
There is a great playlist of ALL of the talks from this year (and previous years) that I highly recommend you search through and watch!
A few others have written about their experiences (Mario Munoz and Will Vincent) and you should totally read those. Some of the
The Food
DCUS via the culinary experience!
Durham has some of the best food and I would go back again JUST for the food. Some of my highlights were
- Cheeni
- Thaiangle of Durham
- Queeny's
- Ponysaurus
- Cocoa Cinnamon
- Pizza Torro
- The conference venue food - fried chicken and peach cobbler were my favorite
The Sprints
During the sprints I was able to work on a few tickets for DjangoPackages12 and get some clarification on a Django doc3 ticket that's I've been wanting to work on for a while now.
The after party in Palm Springs
I left Durham very early on Saturday morning to head back home to Southern California. Leaving a great conference like DjangoCon US can be hard as Kojo has written about.
One upside for me was knowing that a few people from the conference were road tripping out to California and they were going to stop and visit! The following week I had a great dinner with Thibaud, Sage, and Storm at Tac/Quila
Here's a toot on Mastodon with a picture of the 4 of us after dinner
Looking Forward
I just feel so much more clam after the conference, and am super happy.
I'm looking forward to my involvement in the Django Community until the next DjangoCon I'm able to attend4. Some things specifically are:
- Working on Django tickets
- Admin work with Django Commons with Tim, Lacey, Daniel, and Storm
- Working on Django Packages with Jeff and Maksudul
- Djangonaut Space (if and when they need a navigator but just hanging out in the discord is pretty awesome too!)
I'm so grateful for the friends and community that Django has given to me. I'm really hoping to be able to pay it forward with my involvement over the next year until I have a chance to see all of these amazing people in person again
Django Commons
First, what are "the commons"? The concept of "the commons" refers to resources that are shared and managed collectively by a community, rather than being owned privately or by the state. This idea has been applied to natural resources like air, water, and grazing land, but it has also expanded to include digital and cultural resources, such as open-source software, knowledge databases, and creative works.
As Organization Administrators of Django Commons, we're focusing on sustainability and stewardship as key aspects.
Asking for help is hard, but it can be done more easily in a safe environment. As we saw with the xz utils backdoor attack, maintainer burnout is real. And while there are several arguments about being part of a 'supply chain' if we can, as a community, offer up a place where maintainers can work together for the sustainability and support of their packages, Django community will be better off!
From the README of the membership repo in Django Commons
Django Commons is an organization dedicated to supporting the community's efforts to maintain packages. It seeks to improve the maintenance experience for all contributors; reducing the barrier to entry for new contributors and reducing overhead for existing maintainers.
OK, but what does this new organization get me as a maintainer? The (stretch) goal is that we'll be able to provide support to maintainers. Whether that's helping to identify best practices for packages (like requiring tests), or normalize the idea that maintainers can take a step back from their project and know that there will be others to help keep the project going. Being able to accomplish these two goals would be amazing ... but we want to do more!
In the long term we're hoping that we're able to do something to help provide compensation to maintainers, but as I said, that's a long term goal.
The project was spearheaded by Tim Schilling and he was able to get lots of interest from various folks in the Django Community. But I think one of the great aspects of this community project is the transparency that we're striving for. You can see here an example of a discussion, out in the open, as we try to define what we're doing, together. Also, while Tim spearheaded this effort, we're really all working as equals towards a common goal.
What we're building here is a sustainable infrastructure and community. This community will allow packages to have a good home, to allow people to be as active as they want to be, and also allow people to take a step back when they need to.
Too often in tech, and especially in OSS, maintainers / developers will work and work and work because the work they do is generally interesting, and has interesting problems to try and solve.
But this can have a downside that we've all seen .. burnout.
By providing a platform for maintainers to 'park' their projects, along with the necessary infrastructure to keep them active, the goal is to allow maintainers the opportunity to take a break if, or when, they need to. When they're ready to return, they can do so with renewed interest, with new contributors and maintainers who have helped create a more sustainable environment for the open-source project.
The idea for this project is very similar to, but different from, Jazz Band. Again, from the README
Django Commons and Jazzband have similar goals, to support community-maintained projects. There are two main differences. The first is that Django Commons leans into the GitHub paradigm and centers the organization as a whole within GitHub. This is a risk, given there's some vendor lock-in. However, the repositories are still cloned to several people's machines and the organization controls the keys to PyPI, not GitHub. If something were to occur, it's manageable.
The second is that Django Commons is built from the beginning to have more than one administrator. Jazzband has been working for a while to add additional roadies (administrators), but there hasn't been visible progress. Given the importance of several of these projects it's a major risk to the community at large to have a single point of failure in managing the projects. By being designed from the start to spread the responsibility, it becomes easier to allow people to step back and others to step up, making Django more sustainable and the community stronger.
One of the goals for Django Commons is to be very public about what's going on. We actively encourage use of the Discussions feature in GitHub and have several active conversations happening there now1 2 3
So far we've been able to migrate ~3~ 4 libraries4 5 6 7into Django Commons. Each one has been a great learning experience, not only for the library maintainers, but also for the Django Commons admins.
We're working to automate as much of the work as possible. Daniel Moran has done an amazing job of writing Terraform scripts to help in the automation process.
While there are still several manual steps, with each new library, we discover new opportunities for automation.
This is an exciting project to be a part of. If you're interested in joining us you have a couple of options
- Transfer your project into Django Commons
- Join as member and help contribute to one of the projects that's already in Django Commons
I'm looking forward to seeing you be part of this amazing community!
Page 5 / 24