<![CDATA[Grumpy Learning]]> 2026-01-26T21:05:23+00:00 https://grumpy-learning.com/ Sculpin <![CDATA[Weeknotes -- January 26, 2026]]> 2026-01-26T00:00:00+00:00 https://grumpy-learning.com/blog/2026/01/26/weeknotes/ Current mood - 3/5

What I Did

Winter snow blower usage count up to 18. Ugh.

At work:

It's Annual Review Time at work so I spent the week going over my notes and GitHub commits to get a picture of what I was working on.

Also started working on some exploratory tickets to determine what is necessary for us to start using a new "rules engine" to process different types of transactions.

At home:

The Little 3D Printer That Could is working well after fixing some weirdness with it complaining about a fan that doesn't exist. Next steps are printing out some more upgrades for my other printer that is currently disassembled while two more upgrades for the little one: a new mount for a replacement touch screen upgrade and a carbon activated filter for inside the printer.

]]>
<![CDATA[Weeknotes -- January 17, 2026]]> 2026-01-17T00:00:00+00:00 https://grumpy-learning.com/blog/2026/01/17/weeknotes/ Current mood - 3/5

What I Did

This week I increased the winter 2025/2026 snowblower usage count to 15 since November 11, 2025. When you add in the other times where the driveway and path to the front door were cleared just with a shovel, we are up over 20.

Certainly feels like an endless winter around here.

At work:

My main focus was the work to port over a Python RabbitMQ-backed worker to use PHP with Laravel and instead get the data from Kafka.

I discovered a pattern that should be familiar to anyone who ends up doing work at an "enterprise" sized organization: people replacing data sources with new ones that do not contain the same information.

As an example, the queue worker was pulling the following information out of the queue:

  • merchant name
  • merchant description
  • merchant domain name
  • merchant affiliate network membership
  • "suppression" windows where we do not allow cashback offers to be redeemed

The new Kafka topic I am supposed to work doesn't have the affiliate network
details and the suppression window stuff looks a little different than what we had before.

Ticket asking for this work has been updated to ask where I am expected to get the other information from.

At home:

I did a hardware update to my small 3D printer where I added a chamber heater to it. The reason to do this is that some filaments require an enclosed printer or else they warp really easily and not adhere to the print bed. By adding a chamber heater, you can get a very consistent temperature inside the enclosure, which can lead to more consistent results.

I am not a handy person (I am getting better through practice) and was happy that the installation instructions where clear and straightforward. The chamber heater module was pre-assembled and ready to go. Here's what I did:

  • moved the printer bed down to it's lowest setting to give me room
  • remove the back panel of the printer
  • remove the acrylic safety cover for the power supply (power was off!)
  • thread the wiring harness through an opening inside the printer
  • connect the two power cables with fork connectors to the L and N power terminals (screw terminals)
  • connect two small cables with JST connectors to the printer's main control unit at specified locations
  • reassemble everything
  • modify a printer configuration file to include a chamber heating config file (already pre-existing)
  • restart
  • be happy I now have a working chamber heater

As I type this out I am doing a calibration print before moving on to some other more functional prints.

]]>
<![CDATA[Weeknotes -- January 11, 2026]]> 2026-01-11T00:00:00+00:00 https://grumpy-learning.com/blog/2026/01/11/weeknotes/ Current mood - 2/5

What I Did

Back at work after three weeks off of vacation. I am normally a "CHRISTMAS!!!!" person but the general state of things in 2025 made me feel pretty gloomy.

2026 isn't looking much better as I write this. I am feeling pretty angry about a lot of things to start the year, and the constant drive to smash AI down my throat has me feeling particularly biting.

Like I said on my social media account -- there are some high-profile folks in the PHP community who were AI boosters who are complaining about their businesses getting wrecked by it. I am always a fan of keeping receipts, so you will see no sympathy from me towards those two.

At work:

  • eased back into things with fixing another issue where imported records are being marked as synchronized with external services but were not
  • started a longer task of porting over a Python RabbitMQ-backed queue worker that update merchant records to be a PHP Kafka consumer instead

Being weak coming back from holidays, I decided to let CoPilot convert a bunch of stuff over. What a damn disaster. Never again. Thanks for the outline, bud, but I had to cross check everything anyway. Saved me zero time.

At least there is an existing test suite for me to convert over and THAT has been way more useful than anything LLM tooling has done for me.

Self-loathing is not a good way to start off a year.

At home:

Continued tweaking my little 3D printer to make it a small printing beast. Along the way discovered a cool calibration print to verify all the basic calibration steps (temperature, pressure advance, retraction length, flow ratio, and shrinkage] have been confirmed to work.

Played board games this weekend with my usual monthly crew. We continues our Apocalypse World game where we started out in what used to be Las Vegas and are headed to The Magic Kingdom to try and rescue a teenaged girl who was kidnapped to be used as breeding stock. I play Thor Thorson, crazy cult leader who runs around covered in tattoos, wearing no shirt and tight leather pants. He is absolutely convinced his gods will protect him, and I play him that way. So much fun.

We also got in a game of Nuclear War with every single expansion IN EXISTENCE as part of it. Great fun.

We than finished things off with a surprisingly chaotic game of Cosmic Encounter where I completely messed up the board setup so we had to wing it. One of the downsides of meeting 9-10 times a year and maybe playing a game once or twice a year -- you keep messing up the same setup steps unless you write your own (which the other person in our group who owns a tons of games often does).

]]>
<![CDATA[I Ran A Pretend Baseball Team For 28 Years And All I Got Was This Blog Post]]> 2025-11-04T00:00:00+00:00 https://grumpy-learning.com/blog/2025/11/04/pretend-team/ For 28 years I ran a pretend baseball team in a simulation baseball league that used a tabletop baseball game (charts, cards, and dice) and all I have to show for an effort that spanned more than half my life is this blog post.

The Internet Baseball League was a hobby that consumed my life for almost three decades. I find it very hard to explain to people who are not competitive by nature why I did this for so long. I wanted to win. I wanted to prove I was smart about baseball, smart about building a team, smart about playing. This part of my personality has caused multiple blowouts in my personal life, and has come up when playing Magic: The Gathering as well. I eventually had to stop doing any kind of "competitive play" with Magic too because it was turning me into a raging lunatic.

In this post I wanted to take a deep dive into this particular hobby, and show you how a person who thought they were good at something turned out to not really be good at it all. I got stuck in a loop I was only starting to break out of but decided to stop doing it because I was miserable.

At the highest level to look at this hobby, you are running a baseball team through an entire season. You are competing against 23 other people in a scenario where only one person wins the very last game of the season.

If you zoom in a little bit, it really is a simulation revolving around long-term resource acquisition and resource management. Can you identify players who can help your team? Once you have those players, can you use the rules of the game (and rules surrounding who you can and cannot keep on your team) to win more games than you lose in pursuit of a league championship season?

As I write this, I finished the last games of our 2025 regular season. I ended up going 87-75, but likely finishing 4th and last in what is the hardest division in the league. With the end of this season, I missed the playoffs in 10 of my last eleven seasons (last made it in 2020).

In 2009 I made it all the way to our World Series. I lost in 6 games. Since that time, I made the playoffs an additional 4 times. I only won one playoff series in that time. 16 years of being incredibly mad at the end of every season. I would print out the cards we use for the game every years and when the season was over, I would angrily dump them in the garbage and tear up the rules. I wanted to win. I could not accept the constant lack of positive results.

For many years my wife asked me why I did not just quit if the experience was making me unhappy. I never had a good answer other than "I want to win". Which is what it really was. It was a selfish answer.

So where did it all go wrong? Why was I never able to get the results that I wanted? I'm sure there is enough here to make a therapist wealthy but I will attempt to explain what I think happened.

I believe I failed at the resource allocation stage which caused any opportunities to have successful resource management to be few and far between.

One strategy for roster construction is that if your team is not already a "playoff contender", you are better off focusing on "resource acquisition" than "resource management". In the league it means acquiring players who have a "bad card" in the year you play but will have a "good card".

After losing the division title in the last week of 2016 I decided to try and "build a better team" by committing to a plan as described above. If the team wasn't already a contender going into the season, spend that year trying to improve the roster and focus on the next season.

That culminated in a series of 3rd and 4th (out of 4) finishes in the division and a wild card playoff spot in 2020 where I went 94-68. 4 years to make it back. My team had multiple players drop from being good to being mediocre, and we were back in the "resource collection" phase.

Given how talent enters the league, for your team to remain good you can only have a few holes on your roster every year. Need a new CF? You can probably get one via our "first card and guys teams could not keep" draft. Or maybe you trade some excess talent you have for something you don't have.

My issue became that, for a variety of reasons, I always had more holes to fill than I could replace via the draft. When you draft players, you are getting prospects (for the most part) and it can take several years to see if who you picked becomes a positive contributor. In my case, I had several picks turn out to be duds. Pitchers who did not develop. Position players who turned out to not have what it took to be positive contributors in the optimized player pool that exists when you have 30 teams worth of players but only 24 rosters to fill. When core players on your team become bad, replacing them while also keeping the talent level going becomes difficult.

Trading is another way to fill those holes but I never had enough "extra" to trade to fix things and because my teams were bad, I would be giving away draft picks to another team that could be used to draft building blocks.

I got stuck in a loop.

So, every year became "oh well, I guess next year is the year to try" from 2021 onwards. But I never got to the point where it was time to shove hard, trade away some future, and make a run to be a playoff team. In both 2023 and 2024 I thought I had teams that were on the fringes of being a playoff team so I felt I would play the games and see what happened. "Your team looks pretty good" was something I heard a lot. Instead I finished 73-89 and 81-81.

I'd finally had enough of my own inability to generate good results despite what I had been told by other people was the "correct process". Being results-driven is hard, but in a league where we are counting wins and losses, I just could not avoid being angry at the outcomes.

So at the beginning of the year I decided this was going to be my last year. I felt I had a team that was close to being a playoff team. I used my best draft pick on one of the best prospects in the game at a position where I needed help but their current card in the game would be terrible.

"Let's play it out and see where we are after the first third of the season" is what I said. If I felt I was still in it, then I would shovel some resources into improving the team and make a run for the playoffs.

After week 8 of 25 of our season, I was still in it. I traded away my two best prospects to try and patch holes. I grabbed a great starting pitcher, two outfielders, and some bullpen help.

The chase was on. Then the team stumbled hard. I had a stretch where I lost 13 of 18 games and that was it. I got as close as 2 games out of a wild card spot. I had one of the league's best offenses for most of the year. In the end, variance and inexplicably bad luck with my pitching pushed me out of contention. 13-22 in games decided by 1 run is how I ended up missing the playoffs as well.

It was a terrible end to a long participation in the hobby. I spent the first 14 years trying to figure out how to win in the league. I spent the next 14 years chasing that and failing to develop pitching good enough to contend while always having too many holes to fill on an ever-changing roster. There are people in this league who are really good at this. In the end I was not good at it.

I ended up managing 4600 games in this league. I went 2141-2455 in them. Roughly half the time I finished .500 or better. The times I didn't my teams were very bad. I could never figure out how to win consistently in this league and it stopped being fun a long time ago. I hung in there in a misguided attempt to "make it work".

It didn't work. I'm very sad that a core part of what I did for so long turned out to be such a misery-inducing failure for me.

When I announced to the rest of the league I was leaving (just after our trade deadline so any deals I made would not be suspect) I got some nice emails from people telling me they understood why I was leaving and thanked me for helping them over the years.

That was nice but there is a big hollow part of me now. I clearly cannot fill it with other competitive hobbies because it will lead to the same outcomes from where I sit now.

Thanks for reading all the way to the bottom of this post. Learn the lesson that took me too long -- a hobby that you no longer enjoy is now a job. Your hobbies need to have positive outcomes to them, or else they are just a job. Something you resent doing. Something your loved ones have to hear you angrily complain about.

I am mad at myself for subjecting my friends (and league members) to my unhappy rants about my team. I wanted to win. I couldn't figure it out. Leaving is the only way for me to break that loop and try and pour the energy into wanting to succeed into other hobbies where I can have a much healthier relationship with them.

Failure at something you really want to succeed at hurts. It is never eased by being reminded "it's just a game". It wasn't just a game. I ran the league for a decade. I build the league web site. I even helped build the game we use.

In the end, all I have is this blog post.

]]>
<![CDATA[Weeknotes -- October 6, 2025]]> 2025-10-06T00:00:00+00:00 https://grumpy-learning.com/blog/2025/10/06/weeknotes/ Sometimes we need a break.

What I Did

  • while my teammates work on transaction processing I am picking up bug fixes
  • let the rest of my simulation baseball league know that I am quitting when this season ends
  • watched the Toronto Blue Jays dominate the Yankees in the MLB playoffs for the first two games

Longer Threads

One of the reasons I stopped doing the baseball hobby after 28 years (I was in this league before I even met my wife) was that I no longer found the struggle to try and build a successful pretend baseball team to be enjoyable.

Perhaps I am wrong to be results-oriented, but after missing the playoffs for 10 of the past 11 years I'd had enough. Hobbies are supposed to be fun, and this was no longer fun. In fact, I had grown resentful of this team I had built and that the failure to create a team that could be a playoff contender was making me angry and frustrated.

I had gone through this before with other hobbies, and it took me a very long time to stop feeling that way and come to terms with my other hobbies and make them enjoyable. Mostly by dropping the competitive part and find a way to participate that makes me happy and not a raging lunatic (the bad behaviour is all on me, not other people).

For Magic it was easy -- switch to multi-player, resist attempts to make it competitive, and run a weekly event encouraging others to do so. For my simulation baseball hobby, well, there is no casual outlet. We are playing games against each other where this a winner and loser, and the results are there to be shared with everyone else. The team you built is yours -- your choices and your successes and your mistakes.

In the end, I could not figure out how to create a team that had, as the floor, being a playoff team. Clearly I was doing something wrong. Could never quite figure out which metaphorical levers to pull. Does the team I built have some talented players? Yes. I just could never figure out the complementary pieces to make it work.

It was very disappointing and it went on for years. I used to rip up all the cards for the game after each season in a rage -- April to October spent trying to beat 23 other people and, from my perspective, failing miserably at it.

I will miss some parts of being in the league -- I will not miss the blinding rage that came with failure, or the obsessive behaviour where I would try and figure out where it went wrong.

One of my good friends who has helped me out a lot over the years has basically stopped talking to me once I told him I was leaving at the end of the year. This is someone who I have visited for 20 years to watch baseball games in Detroit. It's a shame, but I can't really blame them -- they are even more invested in the league than I am.

I build the web site and some other administrative tools that are used to run the league. I am going to transfer ownership of those projects to him and that will be the end of my involvement.

It will be very strange to change the hobby to just be trying to enjoy watching the Blue Jays on TV and not get upset when I player I have on my pretend team not do well.

Hobbies should be fun. I want to have the ones I participate in to be fun. The Monrovia Madness, the team I "owned" for 28 years, was no longer fun. Don't let your hobbies become obsessions. Take it from me.

Current mood: 3/5

]]>
<![CDATA[Weeknotes -- September 1, 2025]]> 2025-09-01T00:00:00+00:00 https://grumpy-learning.com/blog/2025/09/01/weeknotes/ My most frustrating week at ZiffDavis since I started.

What I Did

  • Helped our team update some systems to work with a new authentication platform
  • Not-so good week for my pretend baseball team as we got swept in 3 games by the best team in the league with 3 more games to go
  • Continued printing updates for my bigger printer with my smaller printer, with a long print (90 minutes) failing when I couldn't break off support structures correctly

Longer Threads

At work there has been a poorly-planned migration from one authentication service to one that we have built internally. Our team was tasked with helping to try and push this over the finish line. My task? Update a React application and change all the internal calls to the authentication service to use the one built in-house.

Setting aside that my React and JavaScript skills suck, I quickly realized that this was going to be a task I was not going to be able to finish on my own.

Simply put, the state of the application is such that I was unable to get it running locally. Which means it would be impossible for me to test my changes. Sure, we have instructions but when I followed them, I got error after error and was so frustrated I eventually started asking Gemini and CoPilot for help.

They were absolutely useless, just helping to confirm my own biases against these tools being useful.

There are other people on my team and in the org who have a working version of the application so eventually I handed it over to them. I, once again, reiterated to my manager that any application we have to work with must be in a state that anyone can install it locally with approved tools.

It was madness doing it the way I was -- make a change, push it, see if the build in CI failed, repeat until I gave up.

To make matters more complicated, the system in question is one that we are trying to replace with the system we are now building. My manager did not want to invest any time into fixing things so I could make it work. "We're replacing it, why would we fix it" he said. Which is true, but I remain unconvinced that this is the last time we will have to go into the codebase and make changes. Which means if it does need fixes I won't be the one doing them.

Current mood: 1/5

]]>
<![CDATA[Weeknotes -- August 26, 2025]]> 2025-08-26T00:00:00+00:00 https://grumpy-learning.com/blog/2025/08/26/weeknotes/ A day late but not a dollar short.

What I Did

  • Built first pass an our audit logging scheme -- first attempt is dumping JSON of the objects into the database along with the date and what kind of action was stored
  • Continue to not be able to figure out how to bend NeoVim to my wishes and have it run our Pest tests inside the development containers like I can do in PhpStorm
  • Has a great week with my pretend baseball team, going 6-0 and making up ground in our playoff structure
  • Finished all the filament calibration prints on my small printer, now can start building parts for the larger printer again

Longer Threads

As someone who suffers from a tendency to pick tasks that exceed my current skill level, it has been a lot of growth that I have slowed down with all the 3d printer upgrades and keep the pace slow but steady. My Sovol Zero prints fine now, which is good. My Sovol SV08 has not printed anything in over a month as I wait for a replacement fan to show up.

Ironically, the shipment of the first fan didn't happen as Ali Express silently refunded the order when the vendor "could not provide tracking data". Not to worry, I have ordered from Amazon instead. It's okay to hate Amazon for a lot of what they have done, but they make returning things that do not work or fit your needs super easy.

So the plan with the bigger printer is:

  • replace the sheet metal bottom cover over the electronics with a 3d printed one that uses better fans. I have the fans already
  • swap out the current toolhead with the one that comes with the Sovol Zero. I have the toolhead and all the parts. Minor wiring and crimping seems ok

Current mood: 3/5

]]>
<![CDATA[Weeknotes -- August 18, 2025]]> 2025-08-18T00:00:00+00:00 https://grumpy-learning.com/blog/2025/08/18/weeknotes/ An uneventful week but the heat wave continues to oppress Southwestern Ontario. I know it's really a "first world problem" but our outdoor hot-tub is basically unusable when the outside temperature matches the water temperature.

I miss my in-ground pool when it's hot like this.

What I Did

  • Still thinking about the audit log implementation at work. Part of the issue is me wondering if there is actually any value in being able to replay events...
  • My pretend baseball team went 3-0 so far this week with 3 games to go, my playoff odds script has me up to 25%
  • The replacement hotend for my Sovol Zero showed up. I installed it and got it printing again, this time with a temperature tower test print

Longer Threads

The 3D printing hobby has been a frustrating one for sure. My large printer is essentially a kit printer. Even though assembly is straightforward, their choices for a lot of the hardware is suboptimal when compared to other printers in the same category. I've already made some upgrades:

  • replaced the print bed probe, which tells the printer how far the nozzle is from the printer bed
  • upgraded the hot-end to a FlowTech one that leaks way less and can handle a higher flow rate of filament for faster printing
  • assembled an upgrade for the heated bed but having to do some wiring work on it makes me nervous

Part of me thinks I should've went with something a little more beginner-friendly, but I really wouldn't be learning much. The options for upgrading and modifying this printer appears endless. It is a very interesting intersection of hardware and software, as these things are essentially computers that know how to take instructions done with an industry standard into commands for hardware to melt plastic filament and deposit it via a tiny nozzle.

Current mood: 3/5

]]>
<![CDATA[Weeknotes -- August 10, 2025]]> 2025-08-10T00:00:00+00:00 https://grumpy-learning.com/blog/2025/08/10/weekenotes/ Back on my bullshit again

What I Did

  • Trying to figure out a good audit logging scheme for ZiffDavis work, want to do event sourcing but I think it is not a fit
  • my pretend baseball team went 2-4, 4 back of a wild card spot and needing to pass 3 teams
  • my board game weekend was a lot of fun, played Bat Flip Dynasty and Cosmic Encounter
  • still waiting for parts to show up to get my two broken 3d printers working

Longer Threads

The current merger at the day job has been very unfulfilling. Lack of direction, developer-related metrics that don't make any sense, and a personal frustration that some of the solutions I've wanted to implement are now feeling like pounding a square peg into a round hole.

Current mood: 2/5

]]>
<![CDATA[Another Spin Around The Sun]]> 2025-03-24T00:00:00+00:00 https://grumpy-learning.com/blog/2025/03/24/another-spin-around-the-sun/ Today is my 54th birthday. Although age is very much a number I find the number of my similarly-aged peers who are still doing coding as their main job to be dwindling.

This is fine -- I discovered a long time ago that being a manager was not for me. Mozilla showed me that there still a path forward for folks who enjoyed solving problems with code -- they called it being an "Individual Contributor".

So, here I am, 28 years into being in the industry, and still going.

I don't think I've ever felt such a strong inflection point as I do today with the panic-driven push being made by many folks to adopt Large Language Model tools to either supplement or outright replace people who do the type of work I do.

I have no idea how any of this is going to shake out. Neither do you. I do know that as I write this I see a bunch of things that lead me to believe that things might not be as bad as many have feared.

I have been using LLM's (mostly Microsoft Copilot) because my employer gives me access for free. I treat them as a code-generation tool to give me the skeleton for things.

Given how crappy search results are, I have not seen any noticeable difference between what Copilot tells me and what I find on various web pages.

I still prefer the official documentation for projects I am using.

I then backfill the code guided by tests. I also use them as a replacement for searching on how to solve coding problems.

This should not come as a surprise to anyone. 20 years spent telling people that writing tests is the path towards faster deployments was totally worth it. Vibe-based coding has definite limits and people who have no previous coding experience literally lack the skills to debug and fix the many, many issues that LLM's will introduce into your code.

I continue to make use of the same sets of tools:

  • MacOS (always upgrading to the latest stable releases)
  • Homebrew for package management
  • PhpStorm for my PHP needs
  • PyCharm for Python
  • NeoVim for everything else (including writing blog posts)
  • KinesisAdvantage2 LF keyboard
  • Ploopy Trackball
  • Apple Studio Display

My day job remains the same in 2025 so far as in 2024 -- working for Ziff Davis Shopping helping to build out their loyalty platform. Lots of honest-to-goodness translating business requirements into code. The team is now 40% of the size it was when I started working there, so the scope of what we are doing has drastically changed.

This hasn't changed in several years. They all work well together for now. I am starting to make some alternate plans to leave the MacOS platform and switch to running some kind of "open hardware" whether it's Framework (I hesitate because they are are American-based and being Canadian in the early part of 2025, I have no desire to give American companies any more money than I have to) or MNT Reform (which appeals to me more because they are not American). I think the biggest issue I have is my beautiful monitor doesn't work well with either of those options. I could be wrong. Let me know!

Getting the rest of my family out of the Apple ecosystem does not seem like a viable path forward. They need consumer-grade devices (phones and tablets) that Just Work. I don't know, could I get us all into the Android ecosystem (replacing iPhones and iPads) and not be constantly supporting them? If you read have some suggestions, let me know.

On a personal level, my health has been a little better in that past 6 months. I have all my stomach issues under control (chronic acid reflux mostly fixed through diet changes and some minor weight loss) with the extra added bonus of enough hearing loss to require hearing aids. I just got them. It has been a very weird experience so far. I am fortunate to have the financial resources to afford them.

My wife commented "it is nice to not have to yell at you in the grocery store". I wasn't ignoring you! I could not actually hear you.

One last change is that I am now writing a column for PHP Architect magazine called "Yelling at Clouds" where I get to (within reason) get to talk about whatever I want. Cranking out a monthly column does not currently feel like a challenge, so I look forward to sharing my thoughts on whatever is bugging me when I sit down in front of my computer to write.

I am, at the time of writing, 1/3 of the way through a new book about testing patterns. At some point in early April I will open up pre-ordering the book on LeanPub and see what I write as I go. I have some new hobbies that I want to pay for and this book will be a big help.

Thanks for taking the time to get this far into the post . Being a non-tech-bro programmer is really hard in 2025. I could've made so much more money with less ethics and a willingness to exploit others. Got to be able to look at myself in the mirror with no regrets.

]]>