<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title><![CDATA[Grumpy Learning]]></title>
    <link href="https://grumpy-learning.com/atom.xml" rel="self"/>
    <link href="https://grumpy-learning.com/"/>
    <updated>2026-01-26T21:05:23+00:00</updated>
    <id>https://grumpy-learning.com/</id>
    <generator uri="http://sculpin.io/">Sculpin</generator>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- January 26, 2026]]></title>
            <link href="https://grumpy-learning.com/blog/2026/01/26/weeknotes/"/>
            <updated>2026-01-26T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2026/01/26/weeknotes/</id>
            <content type="html"><![CDATA[<p>Current mood - 3/5</p>

<h2 id="what-i-did">What I Did</h2>

<p>Winter snow blower usage count up to 18. Ugh.</p>

<p>At work:</p>

<p>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.</p>

<p>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.</p>

<p>At home:</p>

<p>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 <a href="https://github.com/nevermore3d/Nevermore_Micro/">carbon activated filter for inside the printer</a>.</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- January 17, 2026]]></title>
            <link href="https://grumpy-learning.com/blog/2026/01/17/weeknotes/"/>
            <updated>2026-01-17T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2026/01/17/weeknotes/</id>
            <content type="html"><![CDATA[<p>Current mood - 3/5</p>

<h2 id="what-i-did">What I Did</h2>

<p>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.</p>

<p>Certainly feels like an endless winter around here.</p>

<p>At work:</p>

<p>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.</p>

<p>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.</p>

<p>As an example, the queue worker was pulling the following information 
out of the queue:</p>

<ul>
<li>merchant name</li>
<li>merchant description</li>
<li>merchant domain name</li>
<li>merchant affiliate network membership</li>
<li>"suppression" windows where we do not allow cashback offers to be redeemed</li>
</ul>

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

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

<p>At home:</p>

<p>I did a hardware update to my <a href="https://www.sovol3d.com/products/sovol-zero-3d-printer">small 3D printer</a>
where I added a <a href="https://www.sovol3d.com/products/zero-chamber-heater">chamber heater</a>
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.</p>

<p>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:</p>

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

<p>As I type this out I am doing a <a href="https://www.printables.com/model/1252907-cali-cat-the-calibration-cat">calibration print</a>
before moving on to some other more functional prints.</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- January 11, 2026]]></title>
            <link href="https://grumpy-learning.com/blog/2026/01/11/weeknotes/"/>
            <updated>2026-01-11T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2026/01/11/weeknotes/</id>
            <content type="html"><![CDATA[<p>Current mood - 2/5</p>

<h2 id="what-i-did">What I Did</h2>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>At work:</p>

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

<p>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.</p>

<p>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.</p>

<p>Self-loathing is not a good way to start off a year.</p>

<p>At home:</p>

<p>Continued tweaking my <a href="[https://www.sovol3d.com/products/sovol-zero-3d-printer">little 3D printer</a>
to make it a small printing beast. Along the way discovered a cool 
<a href="https://www.printables.com/model/1252907-cali-cat-the-calibration-cat/files">calibration print</a> to 
verify all the basic calibration steps (temperature, pressure advance, retraction length,
flow ratio, and shrinkage] have been confirmed to work.</p>

<p>Played board games this weekend with my usual monthly crew. We 
continues our <a href="http://apocalypse-world.com">Apocalypse World</a> 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.</p>

<p>We also got in a game of <a href="https://boardgamegeek.com/boardgame/713/nuclear-war">Nuclear War</a>
with every single expansion IN EXISTENCE as part of it. Great fun.</p>

<p>We than finished things off with a surprisingly chaotic game of 
<a href="https://boardgamegeek.com/boardgame/39463/cosmic-encounter">Cosmic Encounter</a> 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).</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[I Ran A Pretend Baseball Team For 28 Years And All I Got Was This Blog Post]]></title>
            <link href="https://grumpy-learning.com/blog/2025/11/04/pretend-team/"/>
            <updated>2025-11-04T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/11/04/pretend-team/</id>
            <content type="html"><![CDATA[<p>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.</p>

<p>The <a href="https://www.ibl.org">Internet Baseball League</a> 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.</p>

<p>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.</p>

<p>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.</p>

<p>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?</p>

<p>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).</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

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

<p>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".</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>I got stuck in a loop.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>"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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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".</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>In the end, all I have is this blog post.</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- October 6, 2025]]></title>
            <link href="https://grumpy-learning.com/blog/2025/10/06/weeknotes/"/>
            <updated>2025-10-06T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/10/06/weeknotes/</id>
            <content type="html"><![CDATA[<p>Sometimes we need a break.</p>

<h2 id="what-i-did">What I Did</h2>

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

<h2 id="longer-threads">Longer Threads</h2>

<p>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.</p>

<p>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.</p>

<p>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).</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>Current mood: 3/5</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- September 1, 2025]]></title>
            <link href="https://grumpy-learning.com/blog/2025/09/01/weeknotes/"/>
            <updated>2025-09-01T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/09/01/weeknotes/</id>
            <content type="html"><![CDATA[<p>My most frustrating week at ZiffDavis since I started.</p>

<h2 id="what-i-did">What I Did</h2>

<ul>
<li>Helped our team update some systems to work with a new authentication platform</li>
<li>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</li>
<li>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</li>
</ul>

<h2 id="longer-threads">Longer Threads</h2>

<p>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.</p>

<p>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.</p>

<p>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.</p>

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

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>Current mood: 1/5</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- August 26, 2025]]></title>
            <link href="https://grumpy-learning.com/blog/2025/08/26/weeknotes/"/>
            <updated>2025-08-26T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/08/26/weeknotes/</id>
            <content type="html"><![CDATA[<p>A day late but not a dollar short.</p>

<h2 id="what-i-did">What I Did</h2>

<ul>
<li>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</li>
<li>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</li>
<li>Has a great week with my pretend baseball team, going 6-0 and making up ground in our playoff structure</li>
<li>Finished all the filament calibration prints on my small printer, now can start building parts for the larger printer again</li>
</ul>

<h2 id="longer-threads">Longer Threads</h2>

<p>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.</p>

<p>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.</p>

<p>So the plan with the bigger printer is:</p>

<ul>
<li>replace the sheet metal bottom cover over the electronics with a 3d printed one that uses  better fans. I have the fans already</li>
<li>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</li>
</ul>

<p>Current mood: 3/5</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- August 18, 2025]]></title>
            <link href="https://grumpy-learning.com/blog/2025/08/18/weeknotes/"/>
            <updated>2025-08-18T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/08/18/weeknotes/</id>
            <content type="html"><![CDATA[<p>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.</p>

<p>I miss my in-ground pool when it's hot like this.</p>

<h2 id="what-i-did">What I Did</h2>

<ul>
<li>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...</li>
<li>My <a href="https://www.ibl.org">pretend baseball</a> team went 3-0 so far this week with 3 games to go, my playoff odds script has me up to 25%</li>
<li>The replacement <a href="https://printingit3d.com/how-does-a-3d-printer-hotend-work/">hotend</a> for my <a href="https://www.sovol3d.com/products/sovol-zero-3d-printer">Sovol Zero</a> showed up. I installed it and got it printing again, this time with a <a href="https://www.obico.io/blog/temperature-tower-test-orcaslicer-comprehensive-guide/">temperature tower</a> test print</li>
</ul>

<h2 id="longer-threads">Longer Threads</h2>

<p>The 3D printing hobby has been a frustrating one for sure. My <a href="https://www.sovol3d.com/products/sovol-sv08-3d-printer">large printer</a>
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 <a href="https://www.vorondesign.com/voron2.4">same category</a>. I've already made some upgrades:</p>

<ul>
<li>replaced the <a href="https://cartographer3d.com">print bed probe</a>, which tells the printer how far the nozzle is from the printer bed</li>
<li>upgraded the hot-end to a <a href="https://store.micro-swiss.com/collections/sovol-sv08/products/microswiss-flowtech-hotend-for-sovol-sv08">FlowTech</a> one that leaks way less and can handle a higher flow rate of filament for faster printing</li>
<li>assembled an upgrade for the <a href="https://www.funssorlab.com/products/sovol-sv08-3d-printer-upgrade-hotbed-complete-kit-with-3d-printed-parts-design-by-nadircn3d-10mm-riser-heated-bed-upgrade-kit-120-240v-silicone-heater-01mm-flat-aluminum-bed">heated bed</a> but having to do some wiring work on it makes me nervous</li>
</ul>

<p>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 <a href="https://all3dp.com/2/3d-printer-g-code-commands-list-tutorial/">industry standard</a> into commands
for hardware to melt plastic filament and deposit it via a tiny nozzle.</p>

<p>Current mood: 3/5</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Weeknotes -- August 10, 2025]]></title>
            <link href="https://grumpy-learning.com/blog/2025/08/10/weekenotes/"/>
            <updated>2025-08-10T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/08/10/weekenotes/</id>
            <content type="html"><![CDATA[<p>Back on my bullshit again</p>

<h2 id="what-i-did">What I Did</h2>

<ul>
<li>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</li>
<li>my <a href="https://www.ibl.org">pretend baseball</a> team went 2-4, 4 back of a wild card spot and needing to pass 3 teams</li>
<li>my board game weekend was a lot of fun, played <a href="https://boardgamegeek.com/boardgame/422850/bat-flip-dynasty">Bat Flip Dynasty</a> and <a href="https://boardgamegeek.com/boardgame/422850/bat-flip-dynasty">Cosmic Encounter</a></li>
<li>still waiting for parts to show up to get my two broken 3d printers working</li>
</ul>

<h2 id="longer-threads">Longer Threads</h2>

<p>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.</p>

<p>Current mood: 2/5</p>
]]></content>
        </entry>
            <entry>
                    <author>
                <name><![CDATA[Chris Hartjes]]></name>                            </author>
                    <title type="html"><![CDATA[Another Spin Around The Sun]]></title>
            <link href="https://grumpy-learning.com/blog/2025/03/24/another-spin-around-the-sun/"/>
            <updated>2025-03-24T00:00:00+00:00</updated>
            <id>https://grumpy-learning.com/blog/2025/03/24/another-spin-around-the-sun/</id>
            <content type="html"><![CDATA[<p>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.</p>

<p>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".</p>

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

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>I still prefer the official documentation for projects I am using.</p>

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

<p>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.</p>

<p>I continue to make use of the same sets of tools:</p>

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

<p>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.</p>

<p>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 <a href="https://frame.work">Framework</a> (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 <a href="https://www.crowdsupply.com/mnt/mnt-reform-next">MNT Reform</a>
 (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!</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p>One last change is that I am now writing a column for 
<a href="https://phparch.com">PHP Architect</a> 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.</p>

<p>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.</p>

<p>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.</p>
]]></content>
        </entry>
    </feed>