Intro to Djangonaut Space
During my first session with Team Venus today I went through some orientation (for lack of a better term) items with my awesome new Djangonauts. I'm writing it down here because I'm sure I've gone through this same write up before, but darned if I couldn't find it!
There are several ways to contribute to open source, and not all of them are code. Some items I like to call out are:
- Code
- Docs
- Pull Request Review
Many people might think that the only way to contribute is via code, but the other aspects are also super important!
Things I like the Djangonauts (and myself) to keep in mind during the program:
- Contributions aren't a 'race'. Go at your own pace.
- This is a volunteer thing. Life will come up. That's OK. If you have to miss a meeting just let me know.
- Expect to spend about 1 hour per week day (i.e. about 5 hours) per week working on your tickets.
- Fill our your workbooks at the end of each week Sunday; this will help me with getting help for you at these meetings
- Post your wins in Discord!
- Keep in mind the Showcase at the end of the program where you'll have an opportunity to show off what you've been able to do
- Other opportunities:
- Pair programming with other Djangonauts
- If you haven't started a blog, this might be a good time to. Writing up what you've learned can help to make that learning more concrete and can help others in the future (that might include your future self!)
- Writing the Weekly
Updates to Django
section of the Django News Newsletter - Connect and network with other Djangonauts
The most important thing, I think, is to have fun during this program. This is a unique experience and it should be one that you look back on fondly because you learned some stuff, met some awesome people, and most of all had fun.
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.
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
- 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
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:
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:
- Ticket 29177 with this comment in particular
- Ticket 27775 with this PR
- Ticket 18887 with this comment in particular
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.
Page 2 / 3