NYRR Manhattan 10k Feb 2022

Sunday, 6 February 2022, was my first race of 2022. I’d been looking forward to the Fred Lebow Half Marathon to both be my first race of 2022 and first half marathon race. Unfortunately, I got really sick with something not-COVID and couldn’t attend. So I was extra excited about getting to this race. Last year’s COVID winter surge and summer Delta wave meant that I didn’t get to any in-person races until the fall when I FINALLY got to do the CUCB Cherry Blossom race. This year it seems, so far, that in-person races are here to stay with various COVID mitigations in place. NYRR is requiring racers to be fully vaccinated and mask wearing until runners leave the corrals. Folks seem to be mostly complying with the latter, although it’s inevitable that some folks slip through the cracks. 

The race started at 0800 and it was a one hour train from my in-laws to Lexington and 63rd, the closest station near the start of the race. I got up at 0500 with a goal of leaving at 0530. I got dressed, ate a handful of raisins, and headed out. 

Lots and lots of kudos to Tracksmith. I’ve moved 100% to using their clothing for all seasons other than summer. They’re based out of New England and so they are pros at making clothing that works amazingly in cooler weather. (This isn’t to say anything against their warm weather clothes, I’ve just had OK results from pretty much any brand when all you need to do is keep me from getting a sunburn) I was wearing the Brighton base layer, the quarter zip mid-layer, and their $300 jacket for my tops. For my pants, I had their Bislett pants. I also had their gaiter to protect my face and their fuzzy gloves for my hands. Along with my generic socks and NB shoes, I actually kept pretty darned warm as along as I kept moving. That is, for the walk from the subway stop to the park I was warm. During my warmup 10 minute easy run I was warm. By the end of the 10k I was sweating! It was only during the 30 minutes in the corral that I started to get cold. I was shivering when the gun went off, but about 2-3 minutes in, I was already warm again. So their clothes are pretty awesome and worth the premium, in my opinion. (This isn’t a paid sponsorship, even if it sounds like one. I just like how well the clothes work!) Also, when speaking to a runner friend at work, I learned about triathlon belts that hold your bibs. That was way better to use than trying to pierce holds into my new, $300 jacket. I loved it and will never pierce my running clothes again. (Unless I happen to forget the belt)

This was my first in-person NYRR event. Of all the racing organizations I’ve registered with, this one has the most comprehensive and useful site. Most racing event organizers have a good way to find their upcoming events and register. But NYRR has a great ability to keep track of and manage the races you’ve registered for. The only bug I’ve come up against in both Firefox and Vivaldi (which is based on Google Chrome’s code) is when choosing a time to pick up my number and event shirt (or hat or whatever), after I pick one, it doesn’t show what I’ve picked right away. It looks like the system didn’t take my choice. I have to come in the next day for it to show the selection I’ve made. At the event itself, things were incredibly well organized. This tends to be my experience in general with things that happen in NYC. You have to be well organized in a city of 8-9 million people. This was a relatively small race – cheap registration price and no medal – just a shirt and yet there were over 4,000 participants! NYRR had folks throughout the general race area in Central Park to answer questions and direct folks towards the bib pickup, bag check, and toilets. The corrals were well organized and well run. Lots of volunteers were available at the food section at the end to hand out bagels, apples, and water. Overall, it was one of the better run races that I’ve been a part of. It makes me excited to continue to participate in their races this year.

I’m more of a long distance runner (and swimmer as well) and I’m currently training for a 10 mile race. So I wanted to try for a personal record, but I also haven’t been training to run fast. Additionally, I was scared there might be ice or snow on the course. Luckily there was neither ice nor snow even though it had snowed quite a bit the week before and it was perfectly safe. I was able to keep a nice average pace of 7:28 and did indeed get a new personal record, beating my previous 10k time.

race statistics
Race Statistics

I was really happy with how I did. Running in Central Park was incredible. While the original intent for the park was for the poor to observe the rich and learn “how to act”, the modern purpose of the park is to serve as an oasis on Manhattan. The skyscrapers truly did fade into the background as we ran the park’s perimeter. It was also great to hear the pounding of so many feet around me as we all worked towards our goal and putting our training to the test. The reason I race is to give myself a goal to work towards, a reason to train so hard.

I’m looking forward to lots more in-person races this year and can’t wait to share my thoughts with you!

2021 Video Games and 2021 Game of the Year

This year I played a LOT less; partly because I wasn’t home as much as I was in 2020 due to the COVID mitigations. Also, it was partly because I focused on programming with older Advent of Code challenges. Last year I wanted to make a list of games and go in order, but that fell apart when I got stuck on The Witcher 2 and stopped following the list. First up, a video of the games I played this year. Second, the text version of what I said in the video. Right before my Game of the Year selection, a graph of this year’s gameplay.

My 2021 Video Games Video
  1. Spelunky 2 (1 day, 4:19:14):  Lots of time playing with both Dan and Dave. Oh man, so much fun! And brought me back to my childhood playing with them. Also so much multiplayer with the kids; mostly arena mode. (Last year 35 hours 15 minutes
  2. Civilization VI (1 day, 3:34:37):  Started off getting back to the multiplayer games with Dan and Dave. Then that was supercharged while I was figuring out my webhook app that I made, first in Flask and then in FastAPI. Eventually that got me interested in resuming my single-player game as Gilgamesh – last played on Extra Life day. That game quickly went bust as I kept getting attacked for focusing on science to the detriment of my military. So I did a second game and tried to focus early on scouts to get the free city-state bonuses. That led to a stunted empire and I fell behind to Ghandi and eventually lost. Finally, I tried for a third time, using all my lessons learned to finally get the Gilgamesh win. 
    In multiplayer games, in the one where I was India and embroiled in a war with Dan, my turns finally ended with my defeat.The other multiplayer games continue. (Last year 23 hours 28 minutes)
  3. Dicey Dungeons (19:56:11): Midway through the year Dan told me about card-based rogue-alike games like Monster Train and Slay the Spire. I didn’t remember the titles he’d told me about so when this one was on sale on GOG, I bought it thinking this was one of the ones he’d told me about. It turned out to be a fortunate mistake since I really enjoyed the heck out of Dicey Dungeons. The sense of humor and gameplay were right up my alley. I could not get enough of this game for a few weeks. (Did not play in 2020)
  4. Cities Skylines (11:53:14): I spent the first half of 2021 obsessed with this game, starting new cities where I could use all of my DLC from the beginning rather than trying to bolt it onto my older city that I started without the DLC. Like the Civilization series, these city builders seem to be perennial favorites of mine, so I expect I’ll play some more in 2022. Right now I’m on the fence about whether I’ll get the Airport DLC. It’s going to depend on what it adds to the gameplay. (Last Year: 14 hours 19 minutes
  5. Slay the Spire (11:46:38): Given how late in the year I got this game, the fact that it appears in such a high position on the list is indicative of how addictive I found it. Runs usually took me way longer than Dicey Dungeon runs (whether I was winning or losing) so that also contributed to the time. But once I got started I just wanted to play all the time, even breaking my rule of not getting up to play once I’ve gone to bed. I still have to beat it with The Watcher, so I intend to play some more in 2022. (Did not play in 2020)
  6. Darkest Dungeon (7:03:47):  I started off the year with the kids requesting to watch me play, just like the year before. Their requests petered off as they got old enough to play more games on their own. I’d still like to beat at least one run through the final dungeon before getting Darkest Dungeon 2, but that may be years out at my current pace. (Last year: 36 hours 20 minutes)
  7. Super Mario 3D World (6:07:28):  Started off 2021 playing SM3DW with the kids and trying to get enough stars for the star world Bowser level. Eventually we finished all the levels. The twins continued to improve and be less of a hindrance most of the time. It was a lot of fun to finish the last “impossible without white tanuki” bosses. My assessment from last year stands – this game is the perfect synthesis of modern 2D and 3D Mario games. In fact, mid-year we got the Switch version (which comes with Bowser’s Fury) and I am not a fan at all of the Bowser’s Fury part. And, as is always the case in the 3D Mario games, the kids find it hard to figure out what they’re supposed to be doing because it’s so open ended. (Last year: 15 hours 58 minutes)
  8. Stardew Valley (5:44:57): I finally finished the Community Center and got to see the final cut-scene. I’m not sure at this point if I’m going to keep playing to beautify the farm, start a new farm, or just let Stardew Valley go. I’ve certainly gotten tons of hours from its initial $15 price tag. (Last year: 28 hours 12 minutes)
  9. Moving Out (4:33:23): Another game by the same studio that created Overcooked. Sometimes I find it easier than Overcooked (you’re not trying to assemble a specific food item) and other times I find it harder (trying to fit everything onto the truck) Just like Overcooked it is a game that often left everyone yelling at everyone else when things were going wrong. On the other side, when we finally got a truck packed it felt SO awesome. (Did not play in 2020)
  10. Chrono Trigger (3:54:58): Now that Scarlett’s got the idea of RPGs from Pokemon, I wanted to share my favorite jRPG with her. She enjoyed it, but we didn’t keep up with it. She did ask me about it recently, so perhaps we’ll continue in 2022. (Did not play in 2020)
  11. Hades (2:30:56): Lots of folks had been saying lots of positive things about this game, but the game’s nomination for the 2021 Hugos got me to check it out this year. It’s definitely one of the most innovative rogue-lites I’ve played and one of the few that actually has a story to it. I’ve added it into the rotation for 2022, so expect to see it again.  (Did not play in 2020)
  12. Sonic and All-Stars Racing Transformed (2:29:06):  The kids had tons of fun playing the original Sonic and All-Stars game, so I decided to try this one. The twins find the flying aspect to be a little too hard. I think the game adds some good innovations, but I think it’s a little lacking with the reduction in the percentage of all-star power-ups compared to the previous game. (Did not play in 2020)
  13. Contraption Maker (2:09:29):  The twins saw a video of Scarlett playing and wanted to play. Early on in 2021 they were a little uneven in the puzzle solving aspect, but they had fun with the game. When I showed them the maker part, they enjoyed that (they’ve been enjoying the heck out of Mario Maker), but so far they only created silly scenarios. (Did not play in 2020)
  14. Puyo Puyo Tetris (2:05:53): Tetris is one of the oldest games I’ve played, starting with the Gameboy version when I was a kid. This one was on sale and I figured I could play with the family. Boy was I right! I played about double this amount with the kids on the big screen TV and the family played about 24 or more hours on their own without me. (Did not play in 2020)
  15. Worms: Reloaded (1:52:42): I played some more with the kids. (Last year: 14 hours 45 minutes)
  16. Outer Wilds (1:50:03):  Dan really enjoyed playing Outer Wilds and he gave it to me as a present. I had no idea what the story was going to entail as I started it, but it unfolded in such a wonderful way. The world slowly revealed itself and I found myself intrigued by it. The biggest obstacle to my continuation of the game was the fact that I got stuck and, like a point and click adventure game, I wasn’t sure what to do without consulting an FAQ. (Did not play in 2020)
  17. Rocket League (1:49:39):  This was the first game we played in 2021. The kids wanted to play after they saw my 2020 wrapup. They are slowly getting better at understanding where the ball is and what they have to do, strategically, to win. After an initial bout of sessions, we didn’t play again until the kids caught a past video of us playing Rocket League on YouTube. (Last year: 2 hours 17 minutes)
  18. Vertical Drop Heroes HD (1:49:18): I played a bit more with the kids and we got pretty far. (Last year: 5 hours 38 minutes)
  19. Planet Coaster (1:18:45): I got this game on sale, thinking Scarlett would like it since she really enjoys decorating and organizing her farm in Stardew Valley. Unfortunately, it turned out to be just a tad too hard. Perhaps we can revisit it in a year or two. (Did not play in 2020)
  20. Scribblenauts Unlimited (1:00:19):  This was another game that we started playing because the kids saw an old video of us playing and asked to do some more levels. We came very close to finishing the game and I think we can easily finish it if we play a bit more this year. (Last year: 3 hours 45 minutes)
  21. Worms: Clan Wars (0:49:48): Sam requested playing this game a little more and so we did. (Last year: 1 hour 40 minutes)
  22. Beckett (0:49:12):  Finished the game. The ending was somewhat underwhelming, but that’s not surprising considering how I was feeling about the game from about halfway through. (Last year: 1 hour 50 minutes)
  23. Road Not Taken (0:37:30):  Done with this game (Last year: 1 hour 30 minutes)
  24. Among Us (0:33:49): Near the end of 2021 the kids became obsessed with Among Us videos. When Steam had their winter sale, it was very cheap, so we got copies for everyone. The kids needed me to play so that we could have a quorum to play together. I found the game to be OK, but would need some more time with it to see if I’d enjoy playing it again. (Did not play in 2020)
  25. Sonic and Sega All-Star Racing (0:33:10): Before we started playing Transformed, one of the kids had asked me if we could play a few rounds of this one. (Last year: 17 hours 14 minutes)
  26. Team Fortress 2 (0:32:34): As is my current habit, I launched the game on Halloween to play the Halloween maps and content. Each time I do I think I should play more TF2, but there are just too many games to play! (Last year: 2 hours 13 minutes)
  27. FTL (0:29:33): Early on in 2021 I made a play for some achievements in my one FTL session. Needless to say, thing did not go well for Eric, Daniel, and Dave on The Torus. (Last year: 1 hour 45 minutes)
  28. Spiritfarer (0:28:12): I got this game for Scarlett because (like many games that people were talking about during the pandemic) it was described as Stardew Valley plus something; on a boat in this case. The kids have put a lot of hours into their various Spiritfarer games. I played a half hour to evaluate it for the Hugos. It’s another game in the category of games that would probably be very interesting to me if I didn’t have so many others to play. (Did not play in 2020)
  29. The Witcher 2 (0:26:19): I tried to make a little more forward progress in this game. Ended up watching a couple cutscenes and then being sent on a fetch quest. This is what derailed me from my organized progression through my video game list. The next game to play is The Witcher 2 and I just don’t want to. (Last Year: 8 hours 33 minutes)
  30. All You Can Eat (0:25:36): This was an interesting comic strip interface over a point and click adventure. The dialogue was interesting and it seemed as though the developers came up with an unusual story. But it just wasn’t enough to hook me when I got stuck and couldn’t figure out what to do next. (Did not play in 2020)
  31. Gwent (0:23:59): I returned to Gwent in 2021, but was almost immediately turned off from casual play. It seems the developers have gone all-in on the campaign-style play where you have a few months to get to the end of the campaign – earning the keys, barrels, and cosmetic items. Perfectly fine if this is your main game and you’re playing somewhere between once a day and once every couple days. If, like me, you might hit the game once a month, it serves as a bit of a discouragement. Additionally, it makes me less likely to pay for the campaign since I won’t get my money’s worth. (Last year: 73 hours 24 minutes)

Total Time for 2021: 6 days, 8:00:19 aka 152 hours. (Last year: 370 hours 50 minutes)

Graph of 2021 Video Game Play times
Graph of 2021 Video Game Play times

It’s nice to see a power law curve here as should be the case. A few games that I played a ton (even in a year in which I played half as much as the year before) then a bunch of games that have nearly the same time, much lower.

2021 Game of the Year

This year was full of a LOT of fun games. I really, really enjoyed playing a lot of them. Unsurprisingly, my 2021 game of the year is in the rogue family. That genre has rapidly become one of my favorites. It’s a good mix of challenge, reward, and (usually) the gameplay sessions aren’t too long. After thinking about it a lot and going back and forth in my head, Slay the Spire is my 2021 Game of the Year. As I said before, even though I got it almost at the end of the year, it ended up being my fifth most-played game.

Runner Up

The runners up were Dicey Dungeons, Hades, and (somewhat out of left field) Puyo Puyo Tetris. Dicey Dungeons had humor and challenge just right. Hades combined a Zelda-like experience with a rogue-lite. And Puyo Puyo just brought me tons of joy with all of my family. Slightly further behind is Cities: Skylines which I am often finding myself itching to play, especially after visiting its subreddit.

Surprise Loss

Based on what I’d read about the game, the beautiful artwork, and how much time my kids have spent playing it, I’m somewhat surprised I didn’t like Spiritfarer more. I may just need to give it more time, but it didn’t hook me like I thought it would. I will say that one thing in its favor is that it really seems to give off peaceful vibes. It could be a nice game to throw on after a rough day.

Best thing I’ve ever learned from @PythonBytes

I’ve learned a lot of great tips and about a lot of awesome packages (hello, rich), but the best thing I’ve ever learned isn’t even Python specific. The most recent episode mentioned https://regex101.com and I don’t think I’ll ever again find myself banging my head against the wall when my regex isn’t working! Thanks @mkennedy !

Software I used for Programming in 2021

Overall, there was a continuation of trends from last year with just a few changes.

Python

Pycharm

PyCharm has continued to be my IDE of choice for Python programming. The devs haven’t been resting on their laurels, either. Recently they added some extra features to support FastAPI. And they also added some features that I don’t 100% understand that make it easier to test against fake HTTP endpoints. It’s really awesome and definitely worth the price if you program primarily in Python. As I predicted last year, its git features ended up making GitQlient and Git Kraken (on Linux) more or less obsolete for me.

PyCharm Semantic highlighting

Mu

As I stated last year, this is the IDE that works perfectly with CircuitPython. It has the built-in ability to access the board’s console and it saves files in the right way. I wouldn’t ever go to Mu for one of my Python projects, but that’s because I prefer PyCharm or Kate.

mu editor
mu editor

Unity/C#

MS Visual Studio

Although I didn’t do too much Unity game development last year, when I did, I used MS Visual Studio. The tutorial I was following used VS Code, but they didn’t show how to set it up, so I just stuck with Visual Studio.

Visual Studio
Visual Studio

Unity

On Windows, I just used Unity as usual. The Linux story was a little more involved.

As soon as I wrote my 2020 EOY blog post about how Unity doesn’t work for me on Fedora 32, it started working with the GameDev.Tv second section where I was doing the tank game. So I tried to start up Rider as the IDE, but it wouldn’t start. I installed MS Visual Studio Code via Flatpak. It flashed a warning about being in a container and so it might not work right. So I added the Visual Studio repo and installed it via DNF.   While I was working on it, it Unity from Flatpak couldn’t access my DNF-installed Visual Studio code. So I decided to try again with Flatpak. Of course, after that Unity refused to launch again. Turns out the secret was quitting out of Unity hub all the way; then it would launch my program again. This time it was able to launch Visual Studio from the Flatpak. I get the message “dotnet and mono6 SDK extensions are required for Unity debugger to work. Please install it form Flathub”. I couldn’t find it on Flathub, but a little googling led me to try: flatpak install org.freedesktop.Sdk.Extension.dotnet and also flatpak install org.freedesktop.Sdk.Extension.mono6. After that, no more errors. Unfortunately, scrolling didn’t work in Unity and that made things very annoying so I went back to doing it in Windows. To prevent a situation like this where it suddenly starts working after I blog about it from happening again, I went and loaded up Unity on my Fedora 34 desktop. Mouse scrolling still does not work (essentially making programming in Unity so painful it may as well not be possible on Fedora)

Go

GoLand

Using GoLand (another Jetbrains IDE) to program Go is just a joy. It takes a lot of what I would have found annoying about Go (the formatting, setting the path, etc) and abstracts it all away. Plus if you already know how to use any JetBrains IDE, you basically know how to use all of them.

Ruby

RubyMine

You can almost copy/paste what I wrote about GoLand and put it here for RubyMine. Although, at the level at which I program Ruby, I don’t need as many of the IDE features as I do with Go and/or Ruby.

Language-Independent Editors

Kate

I mostly used Kate for Perl and Haskell this year while working on Advent of Code. However, I did get the LSP working for Python, meaning I can get some automated PEP8 corrections and a few of the other little features that PyCharm provides. They added much better support for git within Kate, bringing it closer to what you can do in an editor like VS Code. This meant I had much less need to go to the command line to type git commands.

Kate
Kate

Vim/NeoVim

I kept getting issues when launching NeoVim and my efforts to debug it (with help from someone on reddit) didn’t work. So I stopped using NeoVim and just used Vim. Both of them were mostly used on servers or when it just wasn’t worth launching a GUI to do a quick bit of editing.

vim
vim

Git

gh

I used gh, Github’s commandline tool, a bit more this year. Mostly I used it to quickly view issues without having to load the website. I believe that JetBrains either already has or is planning to integrate this into their IDEs, so it may mean I stop really using gh only a year after starting to use it.

GitQlient

As I mentioned above, I basically stopped using GitQlient since the JetBrains IDEs contain many of its features built-in.

Git Kraken

I used Git Kraken on Windows. I installed and played with it on Linux during their virtual conference, but I haven’t really launched it since.

GitKraken
GitKraken

Gitea

I still use Gitea quite a bit for some git repositories that are for private use and don’t need to be on Github.

gitea
gitea

Drone

I think I used Drone maybe once this year for CI on one of my internal projects. But I tend not to use it since Github Actions works so well.

Drone-CI
Drone-CI

GitHub Actions

This was my CI of choice. I really need to get better with some more advanced features so I can have it compose large chunks of my release for me and make things involve a lot less copy and paste.

My Programming Projects and Progress in 2021

As I did last year, I’d like to take a look at how well my predictions matched up to what ended up happening:

  • Working on my Extra Life Donation Tracker: Yes! I made a bunch of releases last year to fix various bugs for my users. I also finally broke out the Donor Drive Code into its own project so that my code could be used as the basis of non-Extra Life Projects
  • Moving Prophecy Practicum to Django: Yes! I did this and my colleague has been using it for about 6 months now. I have some quality of life issues to fix that will help me get better at Django and maybe CSS.
  • Redoing flickr views project: Nope. Completely forgot about this.
  • Progress on my Unity Game – Eric’s Comet Cleaners – None.
  • Learning new programming languages: Yes! Haskell and Go, through Advent of Code problem solving. Also got better at Ruby and Perl.
  • Electronics: Some Adaboxes, but no work on my BBQ ThermostatKids: A little more Scratch with the twins. No “real” programming languages with Scarlett.

Compared to last year I had 10 more commits to Github. Pretty consistent!

contributions to Github

Python

Extra Life Donation Tracker

Extra Life Donation Tracker may be a long-running program that has reached maturity, but in 2021 there were still a few more features I wanted to add. In January came the 5.3 release which gave users the ability to download their avatar image if they want to use that for their overlay. By the end of February I’d done the 6.0 release in which I moved each class out into its own file. It’s now a lot easier to maintain or understand if coming to it from outside. I had a break from the program for a while before making releases v6.1, 6.2, 6.2.1, and 6.2.2 in response to user bug reports. As I always say, the nice thing about bug reports is that it lets you know both that you have users and that they care enough to make a bug report in an attempt to get their issues fixed. Then the biggest change came with the next section.

Extra Life Donation Tracker main GUI window
Extra Life Donation Tracker main GUI window

DonorDrivePython

In September and October, I finally fulfilled a goal I’d had for about a year. From Extra Life Donation Tracker I broke out the code that deals with the Donor Drive API so that if another Python programmer wishes to make another program dealing with Donor Drive (that doesn’t relate to Extra Life) they can use my API code and not have to re-implement it. If you wish to work with the Donor Drive API in Python just use pip install donodrivepython to install it from pypi or grab it from github.

NASA Background Downloader

As I told someone at work last week, I’m a programmer in the same vein as Larry Wall (the creator of Perl) – if I have a task I have to do routinely, I will write a program to handle it for me. Sure, it’s a bit more work up front, but it tends to save a lot of work in the long run. I’d been downloading NASA’s images for my desktop backgrounds. It was just annoying enough that I would end up saving a bunch of URLs until the list got too long and then download them all. Not only did I automate the downloading process, I also wrote the program to tell if the image was tall, wide, or square and put it in the appropriate folder. 

Civ VI Webhook with Flask

Dan, Dave, and I had been using Play Your Damn Turn to play Civilization VI games using the hot seat mode for years. As part of the 2020 updates to Civilization VI, the developers at Firaxis finally came up with a built-in solution – Play by Cloud. Using (I assume) Steam Cloud as the storage location for the necessary save files, there was no longer a need for a third party app to play multiplayer games. However, there wasn’t a good way to notify users other than a notification in Steam. Luckily, the Firaxis developers know that the Civ players can be a pretty technical bunch and they provided a webhook functionality. Basically, you give a URL to Civilization VI and it contacts that URL with some JSON about the turn that just ended. In January I came up with the Flask code to handle the webhook and push notification to my Matrix server.

Civ VI Webhook with FastAPI

A couple months after creating the webhook site with Flask, someone on reddit suggested I should use FastAPI instead. I took a look at the way it worked and what it gained over Flask with Pydantic. I thought it was worth switching over, especially since switching a simple site from Flask to FastAPI is pretty minimal. (The code for a simple site looks very similar). I created the new site in March and then added some unit tests in September and October.

Prophecy Practicum

As I mentioned last year, Flask was the wrong technology for this web app that my friend and colleague needed. I was going nuts trying to reinvent the Django admin interface (although I didn’t know it at the time) In 2021 I worked on the Django version and it reached the 1.0 milestone (Minimally Viable Product, or MVP) in May.Throughout the summer I worked on quality of life improvements and released version 4.0 by the end of the summer. It’s meeting his needs and he’s filed a few issues that I intend to resolve in 2022.

Harry Potter Word Frequency Script

In May I was trying to explain word frequency to Scarlett, so I created this program to parse through her favorite book series at the time, Harry Potter, to show her that the most frequent words did indeed appear most frequently.

Dreamhost Dynamic DNS Code

For some services that I like to host for myself, but which require lots of hard drive space (eg Funkwhale), I use a script to update the Dreamhost DNS servers to point to my house. I had been using a script that Dreamhost pointed to from their documentation, but it wasn’t well-maintained and wasn’t very Pythonic. So I forked it and made it more Pythonic, maintainable, and able to update all my subdomains instead of having to launch it a bunch of times. It’s a very useful utility that I’m very proud of improving.

Video Game Time Measurements

Every year I compile various end of year blog posts (such as this one that you’re reading right now). I used to use a service called Raptr to keep track of how much I’d played throughout the year, but they closed the service a few years ago. (Raptr was like last.fm, but for video games) So for the past few years I’ve been going to my Let’s Play videos on YouTube and manually summing the durations. This year I had the idea to use a Python media library to go through my video files and sum up the times. Just like the last.fm script I wrote last year, I’m surprised it took me this long to even think of the idea. 

CircuitPython

CircuitPython Playdough Piano

It is really neat that in their weekly CircuitPython newsletter AdaFruit highlights various projects from around the web that are using CircuitPython. Sometime around March I saw a post where someone used the capacitive touch inputs on the QTPy to create a Playdough Piano in Scratch. Well, I thought that would give me something to do with my QTPy and the kids would enjoy seeing Playdough take on a new role. You can see my code here.

QTPy Streamdeck

I don’t need a slick Streamdeck, just the ability to be able to take a few actions while in-game.

Creating the Playdough Piano above unlocked something in my head. I’d been struggling to find a use for my QTPy since it didn’t have any internet connectivity. After that project I started thinking and realized that I could use the HID code to create a Streamdeck. This is something I’d been thinking of making with a PyPortal to make it touch screen, but that was going to put me out $50ish and I didn’t have a 3D printer to make a case for it. So I decided to make a simple Streamdeck to start and stop OBS. This can be quite helpful for older games made before streaming was a consideration on developers’ minds because sometimes alt-tabbing out of a game too many times can destabilize the game.

CircuitPython Macropad

In July and August the Adabox was the Macropad. I was able to use this to replace the QTPy Streamdeck with much more functionality. I haven’t really taken full advantage of its ability to work on a multitude of programs. I mostly just use it with OBS, but it’s been really useful there. 

Unity/C#

RTS Unity Game

From January to March I worked on GameDev.TV’s online multiplayer RTS class. I wanted to learn the skills to be able to create a multiplayer game for my Comet Busters game. Not too much to report here, but it was fun to create infinite tanks and have them try to navigate a tiny space. 

Scratch Jr.

In 2020 I did a bunch of Scratch tutorials with the kids and they really enjoyed it, so in January I worked on a Scratch Jr book with Stella. I found that I preferred Scratch to Scratch Jr for the same reason that I almost universally prefer a computer or laptop to a tablet – it’s a lot easier to be fast and precise.

MS Makecode

Circuit Playground Chair Ride

Since the kids did so well with Scratch and MS Makecode in 2020, I decided to make the Fair Chair Ride with Stella in January. I had her cut out the characters while I did the hot glue gun parts. After that I worked together with Stella to do the actual programming. She had a great time and the project stayed up for a while for her to play with.

Sam’s and Stella’s Cars with MS Makecode

In March I made a CuteBot with Sam. I had him put together to code in MS Makecode since he was used to Scratch. In April I started working on a car with Stella using a Circuit Playground Express and Adafruit Cricket. We haven’t finished it yet because I was having some trouble getting the “eyes” working.

Advent of Code

This year I started with a new strategy for learning new programming languages. Just like spoken languages, you cement your new knowledge better if you actually use your new language. Previously I’d been thinking of porting one of my Python projects over to another language or maybe picking a new problem and solving it in a new language. But all of those were a bit too daunting and prevented me from actually getting started. So, after enjoying Advent of Code in 2020, I decided I would use it to learn new languages. In April I started solving the 2015 problem set in Python, Ruby, and Perl. Python was there to make sure that any issues I had were due to not understanding the problem, not issues with the programming language. I finished in September and had a pretty decent idea of idiomatic Ruby by then. I then moved on to the 2016 problem set and added Go and Haskell to the languages. I found Go not to be too hard, although it did require a different way of thinking since arrays and maps can only hold objects of the same type. Haskell, on the other hand, was a very different way of thinking. I didn’t get too far before we reached December and it was time to do the 2021 problem set live with Python. (Although I did a few of the early days in additional languages). Overall, I enjoyed this way of learning new languages and reinforcing the ones I’ve already learned. It will take a lot more to truly say I am fluent in the non-Pythonic languages, but I am at least more able to understand the code others have written and learned to think about programming problems in new ways. One thing I learned that I will apply in 2022 is that I would prefer to go as far as I can in Python, then loop back around to the other languages when I get stuck. This way it doesn’t seem like I’m not making forward motion with the problems. 

DragonRuby

Because of my dalliances in Ruby, I found out about DragonRuby in 2021. It’s a game engine (like Unity except extremely barebones) for programming a video game in Ruby. I played with it for a weekend in May. It looks interesting, but I’m just barely doing any video game programming with Unity, so I’m definitely not going to use a barebones engine (at least at this stage in my programming knowledge)

Looking Ahead to 2022

What I love about these roundups is a reminder of just how prolific I was. I didn’t think I’d done nearly this much programming in 2021. I don’t have any comprehensive plans for 2022. From writing these things up, I’ve learned that, when it comes to programming, the phrase “best laid plans” definitely describes what happens to me. I’m not doing it for pay so I just go where the winds blow me. Sometimes new ideas come out of nowhere. But here are some things I’m considering for the upcoming year:

  • Wordle solver – just like everyone else (in the USA, at least), we’re playing Wordle. I don’t want a solver to actually solve the puzzle for me – that would kill all the fun. What I’d like to do is write a solver like this one that uses frequency analysis and see if it consistently beats me. I’d like to see if there’s anything to human intuition/familiarity with words that can beat a purely statistical approach
  • Flickr views program in QT/Pyside – this is still something I’m somewhat interested in pursuing. I’m a little less gung ho about it than I was when I was hit with the idea last year, but I still think I could get enjoyment out of it. If nothing else, I’d like to do a clean room implementation based on what I currently know about Python and, after it’s done, compare that with what I wrote back when I was first starting out with Python. 
  • Github/gitea issues – across all my projects I’ve written up issues for myself for enhancements I’d like to make to my already extant projects. I’d like to make some time to work on those. Although I have all kinds of issues to work on, there are two main thrusts to a lot of the enhancements I’ve tagged myself to make:
    • Learn some kind of framework – Javascript or HTMX, for example, and beautify the interface to one of my web apps. Off the top of my head there’s the Star Wars Spoiler Generator which could be made responsive. Or I could create a main page for my Civ VI Webhook app.
    • Move from just printing everything out to using the logging module, especially for creating log files for Python scripts that I run in cron
  • User issues: Almost certainly I will work on user-generated issues on Extra Life Donation Tracker or Prophecy Practicum Django app.
  • Advent of Code – I had a lot of fun in 2021 using Advent of Code to learn new languages. I am almost certain to try and finish the 2016 problem set and maybe start trying to learn a couple new languages. 
  • Last.fm interactive page – I didn’t get through the Data Visualization book in time to create the interactive page that would be a companion to my annual last.fm blog posts. I’d really like to get to it in 2022.

Moving onto what I currently think is very unlikely (the above list is long and there is only so much time to dedicate to programming when I also want to work on other things like cooking):

  • Eric’s Comet Cleaners – get back to my Unity video game. Will definitely have to remind myself of how to do this.
  • Electronics projects – outside of Adaboxes, do I get inspired to work on electronics projects again?
  • Minecraft (including learning basic Lua) – the kids are currently semi-obsessed with Minecraft. How long will this last? I have no idea, but if they do – I may play with getting programming APIs to work with the server I’m hosting for them. I have one book I got from a Humble Bundle and Al Sweigart’s book is available for free.
  • Perhaps I would contribute to Funkwhale. I love using it and I now have a better idea of how Django apps work.
  • Containerizing – I may try to make containers out of some of my apps like Civ VI Webhook to make it easier to run and share and to make it more portable.
  • PAAS – Perhaps take a look at creating instructions for running some of my programs, like Civ VI webhook on a PAAS like Heroku or the Digital Ocean PAAS.

Are Rap Lyrics a Confession?

Rap lyrics as a confession isn’t a new topic or question. I remember hearing about this a few years ago with someone who had rap lyrics on their Facebook page that was arguing it should be inadmissible in court. Just Googling “rap lyric confession” gave me these examples:

and more. But today my wife was watching the latest episode of The Daily Show, which contained this clip:

In case that clip eventually goes away, Trevor Noah discusses this news story in which a bunch of rappers, including Jay-Z, are trying to get the law changed in New York so that rap lyrics are inadmissible in court. Frankly, I always thought it was BS that rappers could have it both ways – boast about crimes for street cred, but argue it was just art, not a confession. (Kind of like those assholes who pretend to be reporters covering the news on actual news channels until they get in trouble and then it’s all supposed to be parody or not taken seriously) But I immediately thought of this great Key and Peele sketch:

Examining Web Browsers: Microsoft Edge on Windows; Linux Browser Update

This post continues a series on exploring new browsers:

Quite a bit has changed since I first started this series about 18 months ago. Back then I was sure I would only be trying Microsoft Edge on Windows and that I would be sticking with Firefox on Linux. Yet Microsoft Edge is now available for Linux, Mac, and Android. On my laptops I continue to prefer non-Firefox browsers. Things continue to be interesting in this realm.

Linux Update

It’s been almost a year since my last update. Since then I have continued to use Vivaldi on my main laptops and Qutebrowser on my netbook. I am still using Firefox on my main computer, but I’m starting to see more and more signs that we’re moving back to a browser mono-culture as we had in the 1990s. I will attempt to go to some website in Firefox and it won’t load correctly. It’s not a Linux vs Windows thing because using any Chromium-based browser gets things working again. I think this is slightly worrisome since it’s been quite a few years since Google (and/or parent company Alphabet) have been guided by the ethos “Don’t Be Evil”. That is to say, they are consistently acting like the large company they are and that rarely means putting the needs of users first. I haven’t yet started checking out Vivaldi, Brave, or others on my main computer, but I think that may be coming this year.

Windows

In most ways, my Windows browser of choice means less than it ever has. Because I now edit my Let’s Play videos on YouTube to correct the audio, I almost never need to use the browser for anything. But, I still wanted to finish off the Windows part of this series and check out Microsoft Edge. However, boy have things become complicated since the last blog post! Multiple articles have been written about how Microsoft seems to be trying to party like it’s 1999 (well, technically 1998) and force usage of Edge in Windows 11. Then there was also the scandal of Microsoft bundling in a Buy Now, Pay Later feature in into Edge (ie Layaway for Young Millenials and Gen Z – this old Millenial remembers mom using Layaway for Christmas presents back while my parents were still in college and not making lots of money) In a (maybe?) less controversial feature, they’re making RSS feeds cool again? All I can say about this is that I hate the stupid, cyclical nature of the tech world. Everyone decided that blogs were definitely dumb and then we’re back to them (but for $$) with Substack and email newsletters. We were loving RSS and using Google Reader and then someone decided that RSS was too hard for the non-techies (those of us with the tech chops never stopped using RSS). But now both Google and Microsoft are re-surfacing RSS to their browser users. Well, let’s take a look at Edge.

Microsoft Edge upon startup - default, inspirational setting
What it looks like to start Microsoft Edge on my computer for the first time with its default settings.

Let’s spend some time with this page, as first impressions are important. First of all, compared to all the other browsers, Microsoft Edge did not offer to import any settings. It may be the case that it’s been on there so long that it asked me about it back when Edge replaced IE years ago. Or it may be the case that Microsoft considers itself to be the default and not require an import. It’s also interesting that it didn’t ask me to make Edge the default. Give then way they’ve been acting with Windows 11, I wouldn’t be surprised if opening Edge was consent to making Edge the default.

The top left has the app 3×3 menu, a winter advisory (it’s supposed to snow here tomorrow), and the current temperature. Although I have a half dozen places to check the weather nowadays (including my smartwatch and my phone), I think there is definitely room for having it on the page that will open up with my browser. Whether I’m starting up my browser to start my day (I don’t know if anyone does that on their computer or laptop nowadays compared to a smartphone) or just bringing it up to do some work on the web (which is most work for most people, right?) I think it’s nice to be reminded of the weather. Especially if you live somewhere with pronounced seasons. On the right is something to join Microsoft rewards to get compensated for using Bing (seems desperate if you ask me) and then news alerts and a settings button. The page looks like the front page of Bing with its image of the day. Below is a never-ending series of squares that will take you to various news stories. Seemed a bit busy and not quite my style. By clicking on the settings buttons and then selecting focused, I ended up with:

Microsoft Edge focused front page theme
Microsoft Edge focused front page theme

Much better! It still has the things I like (eg the weather), still lets you search right away (although I hate Bing – recently wife wanted to do Wordle and while the right website was the top result in Google, it was 8 results from the top in Bing). Then I presume those sites below would change if I actually used Bing. And if I needed to procrastinate and SOMEHOW finished all the news stories in my RSS feed reader, the news topics are still at the bottom and I could use those to browse the news rather than be assaulted by the news squares. If I used Edge, this would be my preferred start page.

After this I looked around to see what differentiated Edge from the competition. In its current incarnation I could only find one thing (that is one thing apart from its ability to be integrated with MS Office): collections.

Microsoft Edge - collections 01
Microsoft Edge – collections introduction
Microsoft Edge - collections 02
Microsoft Edge – collections more explanations

I decided to just try it out a bit:

Trying out the Collections feature in Microsoft Edge
Trying out the Collections feature in Microsoft Edge

Basically, I could see this being very interesting for the Pinterest crowd. (In fact, it also has Pinterest integration) If you’re collecting ideas or doing research on a particular subject, you could collect the pages together and even add notes. I think most browsers have some similar feature – or at the very worst you could hack something together using bookmark folders (wonder how many non-techies even know that’s a thing?). It’s OK.

And that’s my overall feeling of Microsoft Edge. It’s OK. I don’t see a compelling reason to change. It’s competent. To be clear, I wouldn’t see a reason to change to Chrome, either. (Other than the aforementioned websites that don’t work in Firefox) They’re not exciting and they need to be in a world where everyone except Firefox is a Chromium browser. This is where Vivaldi wins (for me and for any power users) – by providing a reason to change away from whatever is default or whatever the techie in your life set up as your default browser.

I can definitively say that we can close out the Windows portion of the browser competition. Vivaldi wins. It has the features I need and want (whenever I actually use the web on Windows). Until/unless Vivaldi stops being developed or gets bought out like Opera did (or starts doing “evil” things to make money), I think I’ve found my browser home on Windows.

Now it’s time to see who can win the competition for the browser wars on my main Linux computer.

2021 in Books

In Calibre, I now have 2529 ebooks and e-magazines, 2026 unread. To be fair, I get a free book from Tor.com and Amazon.com every month. This also counts any ebooks I’ve bought for the kids, many of which I will not end up reading. (I also have some number of physical books and audiobooks I do not wish to count)

I started off the year continuing previous trends – reading sequels and programming books. Speaking of sequels, I finally finished The Expanse (well, there’s one more short story or novella coming, but the main series is done)  I added in the Discworld series as a series I can read while waiting for the microwave at work or other places where I usually don’t have my phone with me. I’d intended to read the Tor.com blog posts on the Discworld read-along, but never got around to it in 2021. Then, sometime around the summer, the 2021 WorldCon Hugo nominations voting copies were made available so I scrambled to try and read as many of those as I could before voting time in order to make an informed voting choice. Programming books fel by the wayside. I didn’t really make any kind of significant dent in my cookbooks, either. 

Before getting to my favorite book and Goodreads stats, a few things I wanted to highlight some things from this year’s books. The Parable of the Sower and Parable of the Talents were the most depressing books I’ve ever read. This year they were just about matched by Riot Baby. However, what made the parable books even more depressing is that they were written in the 1990s and yet they seemed even more likely to happen now than ever. There are definitely days where I’m legitimately scared for the future that we’re leaving our kids. 

The Interdependency Trilogy shows why Tor pays Scalzi the big bucks. It was an incredibly fun series with memorable characters and, if it hadn’t been for the Murderbot Diaries, it would have been my top vote for the series category in the Hugos. I listened to just about all of the first book on a car trip with my dad and it was a very fun time sharing that with him. The Poppy War trilogy also had a very awesome first entry and I can’t wait to get to part 2 later in 2022. 

My favorite book of the year was not a book, but the Murderbot Diaries. It’s very rare for a book or series of books to live up to the hype – especially the hype that these books have garnered among the SF world. But I found that Martha Wells managed to strike the perfect balance of humor (including mixing workplace humor with military workplace humor), emotion, and drama. The world continued to unfold with each novella and book and each new reveal was an amazing delight. At the Hugos I heard Ms. Wells do a reading of her next book (a fantasy book – I’m pretty sure she was more well-known for fantasy before the Murderbot Diaries) and it sounds like something I’m definitely going to need to put on my To Read List. (No matter how ridiculously long that is)

Honorable mentions to Ancillary Mercy (the final book in that trilogy) for ending it exactly perfectly, given what Leckie had set up in the previous two books. Also Project Harmony for hitting me so hard for a book I had no idea was going to be so great.

GoodReads Stats:

  • 20,444 pages read over 65 books (18,189 pages last year)
  • Shorted book was The Most Dangerous Game at 48 pages
  • Longest book was: Progrmaming Perl at 1174 pages
  • Average book length: 314 pages (279 last year)
  • Most Popular Book: The Ballad of Songbirds and Snakes
  • Average rating 3.6 (3.8 last year)
  1. The Light Fantastic
  2. Equal Rites
  3. Mort
  4. Sourcery
  5. The Official Scratch Book
  6. A Wizard’s Guide to Defensive Baking
  7. The Great Hunt
  8. Wyrd Sisters
  9. Third Daughter
  10. Parable of the Sower
  11. Cook’s Illustrated 2019
  12. Pyramids
  13. Parable of the Talents
  14. Princess Academy
  15. Investigators Off the Hook
  16. Guards! Guards!
  17. Eric
  18. Wayward Stars
  19. The Boys, Vol 1
  20. Palpitations
  21. The Gryphon’s Skull
  22. Legion: Lies of the Beholder
  23. After the Fall Before the Fall During the Fall
  24. Introducing Go
  25. Moving Pictures
  26. Programming Perl
  27. Generation Xbox
  28. Lightspeed Magazine: April 2014
  29. Death Masks
  30. Auberon
  31. Final Fantasy VI
  32. The Most Dangerous Game
  33. Reaper Man
  34. Crimson Son
  35. Black Powder War
  36. Necessity
  37. All Systems Red
  38. Artificial Condition
  39. Rogue Protocol
  40. Exit Strategy
  41. The Collapsing Empire
  42. The Ballad of Songbirds and Snakes
  43. Witches Abroad
  44. The Consuming Fire
  45. Lightspeed Magazine: Women Destroy Science Fiction
  46. Small Gods
  47. Network Effect
  48. Django 2 By Example
  49. The Last Emperox
  50. Lords and Ladies
  51. Axiom’s End
  52. Riot Baby
  53. Hackers
  54. Cook’s Illustrated 2020
  55. The Ruin of Kings
  56. Learn You a Haskell for Great Good!
  57. Men at Arms
  58. The Poppy War
  59. Head First Go
  60. Koreatown
  61. Wild Cards: Aces Abroad
  62. Ancillary Mercy
  63. Harmony
  64. Rave Master Vol 10
  65. Rave Master Vol 11

Review: Rave Master Vol 10

Rave Master, Vol. 10 by Hiro Mashima
My rating: 3 of 5 stars

At the end of Volume 9 I had no idea where Mashima could take the story. It seemed he had painted himself into a corner, perhaps not knowing if he’d get to go past volume 9. He expands the story by making all the smaller gangs that were held in check by Demon Card now vie for position at the top. Our main characters also have to finish finding the Rave in order to get all the answers to all their questions. It continues to be a silly and weird ride.

View all my reviews

Review: Harmony

Harmony by Project Itoh
My rating: 5 of 5 stars

This book is clearly a reaction to Japanese society, but it’s also prescient (given when it was written) about our current situation where no one wants to experience anything that could bother them. It’s incredible that he saw this coming 11 years ago. This is not to say that I’m one of those people who rails against “cancel culture” and so forth. I think it’s a positive thing, in general, that folks who traditionally did not have a voice in the world now can speak out against injustice. But there is definitely a vocal minority who refuses to deal with anything that might unnerve or challenge them. Of course this thin line (which I imagine myself to be on the correct side of) is why I originally considered starting off this review with the sentence “This book is dangerous.” I could definitely see some people taking this book as an example of why everyone should be able to say and do anything; who cares what others think?

As to the Japanese part (I am, admittedly, speaking second-hand), there has been a growing sentiment (certainly extant when Project Itoh was writing this book) that the society has become polite to a fault. That those who express their discomfort or issues with others are committing a faux pas against the greater society. And so Harmony conceives of a Utopia that is also a dystopia for some. The suicides mentioned in the book mirror the increasing numbers of Japanese men checking out and/or committing suicide. (And we see some evidence of the same happening in China and maybe among Gen Z here in America)

The other brilliant aspect of this book is the way it shifts between parts. Originally you think the story is going a certain way and then with each part, it shifts and now you’re in a different story than you thought it was going to be.

I think the fact that I liked it so much and had such a hard time truly explaining it to others, means it’ll probably be incredibly divisive. Still, I recommend it to folks as more relevant now in 2021 than it was when it came out in 2010.

View all my reviews

Review: Ancillary Mercy

Ancillary Mercy by Ann Leckie
My rating: 4 of 5 stars

This book was the perfect ending to the Imperial Radch trilogy. It continues in the same vein as the previous two books: deeply introspective within the context of Anander Miaanai’s war with herself. The final chapter (which, of course, would have been an epilogue in any other book) comments on what turns out to be the thesis of the entire trilogy: sometimes you’re just a cog in the machine (no pun intended). You’re not the chosen one. The entire fate of the universe doesn’t hinge on you. In fact, it’s entirely possible that there’s absolutely no effect of the events of the trilogy. (At least in the present timeline) Most likely, of course, is that eventually Anaander decides to eliminate Breq for daring to stand against her, no matter which Anaander we’re talking about. But for now that doesn’t matter.

It’s so great to have a series that would be a side trilogy in any other circumstance. (Kind of like The Mandalorian TV show compared to the movies – at least at this point. I don’t know if eventually Disney/Lucasfilm tie it back into the movies in a significant way) It’s a lot more realistic this way. I love all subgenres within SFF, including the Chosen One. But it’s also nice, now and again, to have a regular Joe story. We follow her around for a while and she has some sort of narrative arc, but the world doesn’t depend on it. (Essentially the opposite of most Sanderson Cosmere novels/novellas)

I know this series isn’t for everyone. Some folks really need a lot of action. Someone I recommended it to couldn’t get past the first book. But if you would like to have something a little different and more introspective in your science fiction – definitely get through this trilogy.

View all my reviews

Review: Aces Abroad

Aces Abroad by George R.R. Martin
My rating: 3 of 5 stars

Up until now, we’ve been very America-centric with the Wild Cards series. In fact, except for the first book, it sometimes seemed as if there were only cases in New York City. With this book, things are expanded out. Sometimes it’s because some of the spores dispersed over other countries (of course, not as strongly as they did in the USA). Other times, it’s because of births or other forms of generational transmission.

I’ve yet to come to full terms with the implications, but it’s interesting that this book seems to make the retcon that the expressions of the virus have something to do with the cultures of the victims and/or their self-conceptualization. I’m pretty sure (but maybe I’m wrong) that in the first three books it was presented as more or less random. It does allow the authors to have some very interesting Aces and Jokers around the world even if the possibility for caricature is there. I didn’t see anything egregious, but maybe because none of the countries were my country of origin?

The other interesting line that Wild Cards walks as it gets further along is that it’s KIND OF our world, but kind of NOT. Obviously the Wild Card virus changed some things – like JFK Airport being called Tomlin Airport. But Reagan still ends up president in the 80s and the Iran-Contra thing seems to be mentioned at one point. Yet we seem to have the success of the Guatemalen socialist revolution that failed in our timeline. (I think? I’m a little hazy on that part of history, even if the USA did have a hand in it) The last book presented that AIDS is still an issue. So it’s walking this interesting line where, for example, I don’t know whether or not to expect Greg Hartmann to actually run for president or not.

As to Hartmann (aka Puppetmaster) this is, in most ways, his book. Or, as we know from the future, his quartet. The plot that links all the short stories is that the WHO has sent a bunch of American Aces, Jokers, and political folks around the world to see how Jokers are treated around the world. This allows Puppetmaster to collect (or attempt to collect) puppets around the world. We get many glimpses into his mind and his battle with his alter-ego.

I will confess that my favorite parts were the excerpts from Xavier Desmond’s Journal. We’d seen him here and there in Jokertown before, but his chunks of the story were the glue that kept things together and kept me caring about the folks due to my sympathy for his plight. He provided a different perspective on the others, Aces and Jokers alike. Of course, his trust in Hartmann was heart-breaking.

Overall, I enjoyed the book and it was neat to see how the Wild Cards Braintrust decided to conceptualize how the virus would have changed things around the world. I am curious to see how this quartet resolves and how the world continues to evolve away from its origins. (Especially if it starts to move further from the 80s. I was quite young then and don’t relate to a lot of the references – even the Cold War barely registered to me as a youth). If you’ve been enjoying Wild Cars so far, I think you’d like it. It’s actually also not a bad jumping on point. Most of what you’d need to know is explained as background info or in flashbacks. You might miss a couple things like Golden Boy’s situation, but otherwise I think you could just jump in here and be caught up to what’s going on.

View all my reviews

Review: Koreatown: A Cookbook

Koreatown: A Cookbook by Deuki Hong
My rating: 3 of 5 stars

Let me start with the good:
– The photography in this book is beautiful
– The interviews with various celebrities and chefs are great
– The narrative style of the recipe intros work well
– the section on the the Korean pantry is important and well-written

The neutral:
– Even my wife, who has been cooking for our family (and previously, her family) for somewhere around 35 years (mostly off the top of her head without a recipe) found that once you’ve experienced America’s Test Kitchen recipes, everything else is substandard. We tried to make the Pajeon (seafood pancakes) for dinner and there were lots of assumptions that made it come out less than ideal.

The less good:
– The few recipes we’ve made have left us somewhat underwhelmed compared to the Korean restaurants nearby. For contrast, most (although not all) America’s Test Kitchen or Meathead recipes I’ve made have been better than anything I’ve eaten at any but the most expensive (like #150/person or more) restaurant.

Your mileage may vary, but I found it to be a “Just OK” resource for cooking Korean recipes.

View all my reviews

Review: Head First Go

Head First Go by Jay McGavren
My rating: 4 of 5 stars

I will admit that I just skimmed over the web server part. I barely write web backend stuff in Python, I’m not about to do it in Go any time soon. My main goal with this book was to finally learn Go after having heard about it for 2-3 years now. This book turns out to be a very good resource for that. I have no idea how well it would work for someone who’s never programmed before, but for me it’s my 4th or 5th programming language and for most languages the basics are all the same (just like most languages have nouns, verbs, articles, etc) and it’s all about learning the details. I’ve been able to use what I’ve learned here to solve some problems for Advent of Code (a December programming set of puzzles) although I did have to go out to the official documentation a little to figure out things not covered in this book (like regular expressions).

If you need a jumpstart on Go, I heartily recommend this book. It’s written like a hip textbook with with little silly pictures and stuff, but each chapter has a mini project in it to give you a good understanding of how it fits together. This type of learning is best for me when I’m first learning a language vs the programming language books that are more like a reference book. Your mileage may vary based on your learning style.

View all my reviews