2019 in Cooking

Without a doubt, the biggest story to tell about my cooking in 2019 is learning how to make, and no longer be intimidated by, breads. I made 15 different new breads and biscuits this year, including new family favorites like the Amish Friendship Bread and Brown Butter-Cardemom Banana bread. Also, there were the harder breads like the braided cinnamon bread and hot cross buns.

After spending years wanting to make my own bacon, I finally did!

this pork belly will become bacon!

I experimented with lots of new recipes and expanded my dessert repertoire, including blueberry cobbler. It was very, very fulfilling and I often wish I could just take a week off and make 3 meals a day to try lots of new recipes.

For 2020 my goals are to try more soups and stews (and I’ve already make good steps in that direction), braises, and breads. My family got me a lot of awesome cookbooks for Christmas and I’m anxious to go through them to add even more recipes to my list.

2019 New Dish posts:

Review: A Man On the Moon: The Voyages of the Apollo Astronauts

A Man On the Moon: The Voyages of the Apollo AstronautsA Man On the Moon: The Voyages of the Apollo Astronauts by Andrew Chaikin
My rating: 4 of 5 stars

The book that was used by Ron Howard, et al to make the Apollo 13 movie!

I got this book as part of a space-themed Humble Audiobook Bundle. As I was choosing the next audiobook I’d listen to whenever I ran out of podcast, I decided to go for non-fiction book. And so I started my journey through a couple decades of NASA history. Once things get going (ie the men are on their way to the moon), Chaikin does an excellent job of switching POVs throughout the mission to give us some insight into each man’s thoughts, challenges, and even prank ideas. Since hacks/hackers originate with the MIT train team and the Stanford/Caltech student pranks, it’s no surprise that NASA missions had the same kinds of Easter Eggs one finds in video games (especially in the more wild-west era of video game development before everything became AAA multi-million dollar games in the late 90s; of course with the re-emergence of indie games you’re seeing them again). As examples, there were jokes embedded in their instruction manuals, various parts of the spaceships, or in coded messages back and forth with NASA HQ.

As someone born a generation too late, with the much less exciting Hubble, Spacelab, MIR, etc in my lifetime, Chaikin did a great job of both putting me into the mindset of America at the time and humanizing the astronauts. (Like the best historians do for the Founding Fathers we always learn about from a distance in school). If you’re interested in NASA history, I think it’s harder to find a better recommendation than this book.

View all my reviews

Review: Clarkesworld Magazine, Issue 133

Clarkesworld Magazine, Issue 133 (Clarkesworld Magazine, #133)Clarkesworld Magazine, Issue 133 by Neil Clarke
My rating: 4 of 5 stars

As usual, the per-story reviews are below this section. But first, a ranking of said stories.

The stories I REALLY liked: The Sum of Her Expectations, The Last Boast-Builder in Ballyvoloon, Intro to Prom, Shiomah’s Land

Great: Red Lights, And Rain

Good: The Psychology Game

Not a fan: The Nightingales in Platres

The per-story reviews:

The Sum of Her Expectations: First of all, I love what the title is a reference to within this story. I like the idea of the aliens and I also love the possible metaphor of what happens with the contruction bots in the planet they’ve left behind. In the end, the story is a metaphor for dealing with trauma and I really like how it came together.

The Nightingales in Platres: An alternate future story in which some Greeks get on a generation ship to try and emigrate to a new planet. I’m not a fan of how the story went, but they can’t all be something I love.

The Last Boat-Builder in Ballyvoloon: A future in which we created an AI “organism” to remove plastics from the sea and things got out of hand. I think more of the public needs to read stories like this before we try some hare-brained idea to deal with climate change or pollution.

The Psychology Game (translated): A future (except it takes place in 2020 😉 ) in which there’s a reality TV show where people get psychological help. The twist is that the psychologist might be an AI and neither the patient nor the audience knows. Turns out to almost be in the structure of some of the non-fiction in Clarkesworld where it’s exploring a non-fiction subject with some fictional examples. Also, never thought of this before:
“And to be honest, human therapists have feelings too. If you keep on unloading your emotional garbage onto them, wouldn’t they suffer too? Sometimes I think using human therapists is kind of inhumane.”

Intro to Prom: Oh, man – what an incredible story. A perfect tale of corporate greed and how it affects the little folks. I can 100% see something like this actually happening (which is sad and scary). WOW.

Shiomah’s Land: I correctly guessed what’s the twist would be in terms of the origins of this world. But that did not take away from how well-written it was and how it made me feel the emotions of the main character. I’d love to read another story in the same universe.

Red Lights, And Rain: The fallout from a time war. It takes a lot of good twists and turns and I was not expecting the ending.

Non-Fiction:

An optimist and Pessimist tackle the Fermi paradox: Exactly as the title suggests – looking at both positive and negative reasons for why we haven’t found life out there.

Automatons, Wyrms, and Dead Men: A Conversation with Elizabeth Bear: A discussion about Elizabeth Bear’s book (A Sword in the Skull), her writing process, how her anthropology backgrounnd affects her writing, and advice for writers.

Another Word: Grains of Salt, Lumps of Gold: A contemplation on advice-giving, followed by some advice on how to move from short story authorship to novel-writing.

Editor’s Desk: About a new issue 5 years after Neil’s heart attack.

View all my reviews

Getting rid of some old Java textbooks

I had been hanging on to these books in case I ever found myself wanting to do some Java programming. But as I’ve come to learn (mostly because of Python, but also through following the Perl 6 saga), languages change and evolve and so a couple books from nearly 20 years ago probably won’t be more useful than a newer book or a good Google search.

Walter Savitch second edition of Java: An Introduction to Computer Science and Programming
Cornell’s CS101 class textbook back when I was a freshman
I don’t remember what class this was for, but Cornell sure loved Java back then.

New Dishes I cooked Dec 2019

December had a relatively low number of new dishes. I made a pasta bolognese from a new cookbook that I found rich and delicious. I had an OK attempt at flat bread. I needed to roll out the bread a bit thinner because it didn’t really fulfill the “flat” part of flat bread. The Spanish garlic soup was pretty good, except they didn’t mention how much Sherry vinegar to use and I guessed a little too high. The coffee cake was pretty good, and the first time I’d made one.

But the winner was the corn bread pudding. It was SO FREAKIN’ GOOD that I could have eaten the entire thing myself if I wasn’t trying to keep my over-eating at bay.

Not a bad end to 2019’s cooking journey. I got a LOT of cookbooks for Christmas, so 2020 is going to contain even more experimentation.

2019 Annual Self-Portrait

I thought last year’s description was perfect, so I’m going to repurpose it here. Yeah, yeah – even before Instagram was a thing my family was already making fun of me for taking self-portraits or for my 365 project of self-portraits 8 or so years ago. But for me this is part of my most primal photographic urge; even stronger than the urge to create art. It’s the urge to document my life and the life of those around me. And so I take these self-portraits at roughly the same time every year to be able to view them as a series documenting my aging. And so here is the one I took in 2019.

This was my favorite:

Annual Self-Portrait

But this was Scarlett’s (my oldest) favorite:

Annual Self-Portrait

2019 in Books

While I continued to read lots of cookbooks in 2019, this was the year of Sequels, Sanderson, and Science Fiction Magazines. On the sequels front, I finished The Cosmere (except for White Sands Vol 3), continued The Expanse, The Asylum Tales, Red Rising, The Dresden Files, The Mogoliad, Wild Cards, and the Illumination Paradox. For Sanderson, I not only finished the Cosmere, but I also started The Reckoners and read from his mentor (Robert Jordan – Wheel of Time) and his protege (Brian McClellan – Powder Mage Trilogy). As for magazines, it was all Clarkesworld, but I wanted to keep the alliteration in that sentence.

I read lots of books on robotics and embedded programming (which I started messing around with in 2019), taking note of projects I’d like to try in my “copious free time.” I read one book along with the Sword and Laser book club: The Calculating Stars. I also started a few series that I’m looking forward to continuing in 2020: Thesaly, Temeraire, Imperial Radch, and the Powder Mage Trilogy. My biggest surprise was how freakin’ weird Skipped Parts was, and surprise that it was made into a movie.

At the time I write this (5 Jan), I have 1454 books and magazines, an increase of 469 books and magazines. Of course, remember that I get ~12 free books from Amazon (of their choosing) and ~12 free books from Tor.com (of their choosing). In addition to that, this year I discovered the magazines that are published by the same company that makes the Raspberry Pi, and added their entire back catalogue (it was free) so that makes up for maybe close to 100 of those. The rest…well, that’s why I’m trying to reign in my Humble Bundle / Storybundle spending. Of those books and magazines, 1112 are unread.

Some Goodreads stats:

  • 19,942 pages across 74 books
  • Shortest book: 4 pages – The Eyes have it
  • Longest book: 814 pages – The Eye of the World (funny they both have “eye” in the title!)
  • Most popular: my re-read of Harry Potter and the Sorcerer’s Stone. (read by >6 million people)
  • Least popular: Cook’s Country 2018 (read by 3 people)
  • My average rating was 3.8 (last year 3.7)

My favorite book was: Clarkesworld Issue 130

In 2019 I read:

  1. What is Obscenity?
  2. Arcanum Unbounded
  3. Python3 Object-Oriented Programming
  4. South’s Best Butts (a cookbook)
  5. The Eye With Which the Universe Beholds Itself
  6. White Sands Vol 2
  7. Then Will the great ocean Wash Deep Above
  8. Churrasco
  9. Riley Parra Season 1
  10. Skipped Parts
  11. All That Outer Space Allows
  12. Strange Dogs
  13. Cook’s Country 2018
  14. Project Fire
  15. Vegetables on Fire
  16. Deadly Class book 1
  17. bowls!
  18. Bread Illustrated
  19. Perseopolis Rising
  20. The Just City
  21. Rachel Khoo’s Kitchen Notebook
  22. Grilled Cheese
  23. The Calculating Stars
  24. Huckleberry
  25. His Majesty’s Dragon
  26. Wild Cards: Aces High
  27. Kingdom Hearts II
  28. Dead Man’s Deal
  29. Sirena
  30. Ancillary Justice
  31. The Eyes Have It
  32. Mr. Spaceship
  33. Childhood’s End
  34. The Mongoliad Book 2
  35. Promise of Blood
  36. Terris
  37. One Night in Sixes
  38. A Mind Forever Voyaging
  39. Clarkesworld 125
  40. Astrophysics for people in a Hurry
  41. Drive
  42. Clarkesworld 126
  43. Deadly Class Book 2
  44. The Circlet Treasury of Erotic Steampunk
  45. Geekomancy
  46. Double Life
  47. Harry Potter and the Philosopher’s Stone
  48. Love, Fishie
  49. Korean Home Cooking
  50. Getting Started with Arduino
  51. Getting Started with Adafruit Flora
  52. Qt5 Python GUI Programming
  53. Getting Started with Raspberry Pi
  54. The Eye of the World
  55. A Raspberry Pi controlled Robot
  56. Morning Star
  57. Working Stiff
  58. Fool Moon
  59. Make: Bluetooth
  60. Clarkesworld 127
  61. Breasts
  62. Clarkesworld 128
  63. Clarkesworld 129
  64. Cook it in Your Dutch Oven
  65. NBA Jam
  66. Noir
  67. Clarkesworld 130
  68. Grave Peril
  69. Clarkesworld 131
  70. Make: Lego and Arduino Projects
  71. Clarkesworld 132
  72. breakfast: the most important meal of the day
  73. Steelheart
  74. Getting Started with Adafruit Trinket

A reminder that you can find reviews for these books by searching here on this blog.

What I want in #CircuitPython2020

Over on Adafruit they asked the community, “What do you want from CircuitPython in 2020?” What’s CircuitPython? It’s a subset of Python that’s meant to run on embedded processors. Essentially I could use it (on compatible boards) in place of Arduino’s subset of C++ or TinyGo. As you know if you read my 2019 in Programming post, I love programming in Python and I love making GUIs with Qt. With Adafruit’s PyPortal, I was looking at making a GUI interface for some usecases here, but from what I can find on Adafruit’s tutorials THIS is how you make GUIs. Ugh! I mean, it’s kind of in the whole DIY spirit to make your GUI out of basic elements like circles, squares, and triangles. But, since Qt is available for embedded devices, I’d love to be able to use Qt5 Designer and pyuic5 just as I do with regular Python to create awesome GUIs for my CircuitPython projects (when they have a fully-featured screen, of course).

Last.fm 2019 Listening Trends

In 2019 I went to 5 concerts, starting with Neon Trees and Fitz & The Tantrums in May. Then I saw a bunch of my favorite smaller bands like The MiSbehavin’ Maidens, The Doubleclicks, Lionize, and The PDX Broadsides. Anberlin came out of retirement and so it was great to go see them in concert again for the first time in years.

I also got a LOT of albums in 2019. Some were Kickstarted and others were freely available. Others still were purchased for family members. Here is a mostly complete list of all the albums I added to my collection in 2019:

  • Juan Luis Guerra – AsonDeGuerra
  • Steve Martin – The Long Awaited Album
  • Ted Rosenthal Trio – Rhapsody in Gershwin
  • Frank Ocean – Blonde
  • I Fight Dragons – Adventure #1 Pre-Mix Roughs, “Canon Eyes”
  • Bad Rabbits – Live at the Paradise, American Nightmare, American Love
  • Karen O & Danger Mouse – Lux Prima
  • Sasami Ashworth – Articles of Interest
  • Handel – Rise of the Masters 100 Masterpieces
  • Philharmonic – Puppet March aka Hitchcock theme song
  • Grimes – Flesh without Blood from Art Angels album
  • Chuck None – Lost Woods single
  • 2 Mello – Late Afternoon single
  • Yung Bae – “Japanese Disco Edits”, “B4E”, basically the entire discography
  • The Doubleclicks – “The Book was Better”
  • dj-Jo – “Katamari Dance with Me”
  • The PDX Broadsides – “Relatable Content”
  • Bird Boy – “Widgeon”
  • Misbehavin’ Maidens – “Slytherins”, Swearing is caring
  • Lana Del Rey – Doin’ Time
  • Paul Simon – Kodachrome
  • DJ Cutman – Flight Club
  • Taylor Swift – Lover
  • Beny More – Lo Mejor de Cuba (Vol 2)
  • Lana Del Rey – NFR
  • Al Green – Greatest Hits
  • Angelique – Celia
  • Game of Thrones S1
  • Paprika

I also started listening to music while running on Saturdays as part of my running training. I mostly listened to the same ones over and over so they may be more highly represented in this year’s stats:

  • Lionize (particularly Nuclear Soul)
  • Yung Bae – all the albums
  • Bad Rabbits (particularly American Love)
  • Y2K: Beat the Clock

Here are the stats for 2019:

Artists

Based on the new albums I bought this year, these are mostly to be expected. The only real surprise is Chance the Rapper. But I just had a few weeks where I wanted to listen to the middle two albums.

Artists Scrobbled: 2,799

  1. YUNG BAE – (594 listens)
  2. The PDX Broadsides – (555 listens)
  3. I Fight Dragons – (550 listens)
  4. Bad Rabbits – (461 listens)
  5. Five Iron Frenzy – (356 listens)
  6. Jonathan Coulton – (330 listens)
  7. The Beatles – (327 listens)
  8. Lana Del Rey – (311 listens)
  9. Juan Luis Guerra 4.40 – (290 listens)
  10. Ramin Djawadi – (271 listens)
  11. Dj CUTMAN – (260 listens)
  12. Lionize – (255 listens)
  13. Frank Ocean – (244 listens)
  14. MiSbehavin’ MaIDENS – (240 listens)
  15. The Doubleclicks – (238 listens)
  16. Taylor Swift – (236 listens)
  17. Beny Moré – (191 listens)
  18. Chance the Rapper- (163 listens)
  19. “Weird Al” Yankovic – (157 listens)
  20. Anberlin – (152 listens)

Albums

Given when I bought this year, the surprises were The Ides, Solid State, and Kaladin. I don’t know why, but in the second half of 2019, I just really wanted to listen to The Ides a lot. I don’t like every song, but I like a lot of them quite a bit. Solid State is a bit of a surprise on its own, but I did listen to Coulton quite a bit and he also comes up a lot in random play due to having a large discography. As for Kaladin, that was just something nice to listen to at work when I needed to focus.

Albums Scrobbled: 3,747

  1. Canon Eyes – I Fight Dragons – (294 listens)
  2. AsondeGuerra – Juan Luis Guerra 4.40 – (290 listens)
  3. Relatable Content – The PDX Broadsides – (266 listens)
  4. Blonde [Explicit] – Frank Ocean – (214 listens)
  5. Swearing is Caring – MiSbehavin’ MaIDENS – (203 listens)
  6. Game Of Thrones (Music From The HBO Series) – Ramin Djawadi – (203 listens)
  7. Lo Mejor de Cuba, Vol. 2 – Beny Moré – (191 listens)
  8. Nuclear Soul – Lionize – (179 listens)
  9. American Love [Explicit] – Bad Rabbits – (175 listens)
  10. The Book was Better – The Doubleclicks – (174 listens)
  11. American Nightmare [Explicit] – Bad Rabbits – (170 listens)
  12. The Ides – Me Like Bees – (147 listens)
  13. Lover – Taylor Swift – (147 listens)
  14. Lux Prima – Karen O & Danger Mouse – (135 listens)
  15. GameChops Vol. 1 – Dj CUTMAN – (129 listens)
  16. Live at The Paradise – Bad Rabbits – (116 listens)
  17. Norman Fucking Rockwell! [Explicit] – Lana Del Rey – (114 listens)
  18. Solid State – Jonathan Coulton – (108 listens)
  19. Kaladin – The Black Piper – (107 listens)
  20. BAE 5 – YUNG BAE – (99 listens)

Songs

No surprises here, but I’ll comment on some of the tracks.

Tracks Scrobbled: 9,658

  1. No Aparecen – Juan Luis Guerra 4.40 – (40 listens)
  2. We Can Roll – Bad Rabbits – (37 listens)
  3. Artifact – I Fight Dragons – (36 listens)
  4. Not Done Yet – I Fight Dragons – (33 listens) – this was my favorite track off the new album. It really speaks to me as I come up towards middle age, but still have so much to do and still enjoy going to concerts and rocking out.
  5. Let The Wild Rumpus Start – The PDX Broadsides – (32 listens)
  6. Punch Drunk Destiny – I Fight Dragons – (31 listens)
  7. La Calle (feat. Juanes) – Juan Luis Guerra 4.40 – (30 listens) – my favorite song on the album I got this year
  8. Mi Bendición – Juan Luis Guerra 4.40 – (29 listens)
  9. Buffalo – The PDX Broadsides – (29 listens) – my kids, particularly the 4 year olds love the heck out of this song and always giggle at the lyrics.
  10. Oh Vida – Beny Moré – (28 listens)
  11. Oh The Places You’ll Go – I Fight Dragons – (28 listens)
  12. La Guagua – Juan Luis Guerra 4.40 – (28 listens)
  13. Stalker [Explicit] – Bad Rabbits – (27 listens) – my favorite of all the Bad Rabbits tracks. I love where the lyrics go (so playful) and I love how the music changes pace halfway through. (I think, based on their concert, this was originally two tracks)
  14. Lost Woods – Chuck None – (27 listens) – I LOVE this song. So great to cheer me up at work.
  15. Apaga Y Vámonos – Juan Luis Guerra 4.40 – (27 listens)
  16. Ain’t It A Shame – Lionize – (27 listens)
  17. Dance Moves – Bad Rabbits – (26 listens)
  18. While We’re Still Young – I Fight Dragons – (26 listens)
  19. “Son Al Rey” – Juan Luis Guerra 4.40 – (26 listens)
  20. Arregla Los Papeles – Juan Luis Guerra 4.40 – (26 listens)

All-Time Artists

Some big shakeups here after a few static years.

Artists Scrobbled: 6,858

  1. Fantastic Plastic Machine – (3,699 listens) (remains my #1 artist despite only getting 49 listens this year)
  2. Five Iron Frenzy – (3,213 listens) – (skipped over Anberlin from #3. They were really close last year, but have jumped way ahead)
  3. Anberlin – (3,026 listens) – (dropped from #2)
  4. The Beatles – (2,842 listens) (no change)
  5. Relient K – (2,147 listens) (no change, despite >100 listens)
  6. I Fight Dragons – (1,806 listens) (large rise from #8 thanks to new album coming out in 2019. They’ve got a long ways to go, but could end up over-taking Relient K as I don’t listen to them as much nowadays)
  7. “Weird Al” Yankovic – (1,791 listens) (drops 1 spot)
  8. Fall Out Boy – (1,502 listens) (drops 1 spot)
  9. Jonathan Coulton – (1,351 listens) (up 1 spot, switching with Gnarls Barkley. Could see him being even closer to Fall Out Boy next year)
  10. Gnarls Barkley – (1,173 listens) (swaps with JoCo. Surprised to see them hanging on so strong)
  11. The PDX Broadsides – (1,082 listens) – (jumps out of nowhere straight to #11! Could see them easily moving up 1-2 spots next year)
  12. DC Talk – (978 listens) (drops one spot. Only ~50 listens)
  13. Gwen Stefani – (973 listens) (drops one spot)
  14. Chance the Rapper – (959 listens) (Comes out from beyond the 15. Strong potential for him to get to at least #12, particularly if I get his new album that came out in 2019)
  15. Tom Lehrer – (955 listens) (drops 2 spots)

All-Time Songs

Tracks Scrobbled: 23,704

  1. The Princess Who Saved Herself – Jonathan Coulton – (119 listens) (goes from #2 to #1)
  2. Upon This Tidal Wave of Young Blood – Clap Your Hands Say Yeah – (118 listens) (drops 1 spot)
  3. Steppin’ Out – Fantastic Plastic Machine – (107 listens) (up one spot, swaps with the one below it)
  4. Take Me To The Disco [Malibu Mix] – Fantastic Plastic Machine – (104 listens) (swapped with #3)
  5. Who Cares – Gnarls Barkley – (102 listens) (no change)
  6. Just a Thought – Gnarls Barkley – (99 listens) (no change)
  7. Cut it Out – 4minute – (92 listens) (no change)
  8. Audrey, Start The Revolution! – Anberlin – (90 listens) (no change)
  9. St. Elsewhere – Gnarls Barkley – (88 listens) (up two spots)
  10. The Last Time – Gnarls Barkley – (88 listens) (lost one spot)
  11. Quedate – Andrea Echeverri – (86 listens) (dropped one spot)
  12. Crazy – Gnarls Barkley – (85 listens) (up one spot)
  13. Smiley Faces – Gnarls Barkley – (85 listens) (up one spot)
  14. Love Is Psychedelic – Fantastic Plastic Machine – (84 listens) (drops 2 spots)
  15. Amortiguador – Andrea Echeverri – (81 listens) (no change)

Scrobbles at end of 2019: 136,682

Scrobbes IN 2019: 20,578 (almost 3 times more than last year)

2019 In Programming

This was a VERY busy year for my coding. This year I had over 769 commits to GitHub; my previous best was 58 in 2014. The commits were very unevenly distributed. If you look at the graph of my commits, outside of a busy week in January and another in May, I didn’t really start coding until August.

GitHub activity graph

But perhaps commits to GithHub isn’t the best metric. If you look at what I accomplished in the second half of 2019, I worked on an incredible number of projects.

Extra Life Donation Tracker

Let’s start with my most ambitious and most used project, the Extra Life Donation Tracker. I’ve got people that want it to work and so file bug reports on GitHub for the code. Out of 20 releases on GitHub, 18 were done this year. GitHub’s CI system, GitHub Actions was releases, allowing me to use that to run a linter and tests against my code and create Windows and Linux binaries automatically from every release. I also finally reached the goal I set out with for this code years ago – to have a working GUI. Once I had the GUI setup, I started a major refactoring to make the code more maintainable and less error-prone. It is my programming magnum opus, and I’m very proud with where it has ended up.

Impractical Python

I got Impractical Python via a Humble Bundle after having avoided skipped it on a few other Python bundles and experienced some serious FOMO. Having really seriously begun coding in earnest this year, I decided to go ahead and grab it. (Yeah, yeah – any individual Humble Bundle is an awesome deal with tons of books for $15-20, but some months I’ve spent $100 on these great deals to get more books than I can likely ever read) In the first chapter I learned about pylint and pydocstyle. It’s not an exaggeration to say that learning these tools changed my programming for the better. Having been mostly self-taught, I don’t usually have the best style. By applying pylint to both my Extra Life Donation Tracker and my Amortization project (more about that next), I ended up with WAY better code. How? Making my variable names more Pythonic forced me to do away with any “i” and “count” variables that made going back to my code a LOT harder. Adhering closely to the column count helped me make the code more readable by controlling where it wraps around. And a measure of complexity helped me realize where I was being a little too complex with my amortization code. At the end of 2019 I also did chapter 2 and learned about profiling with cProfile. I’ve been tracking my progress and solutions to the book’s problem sets on GitHub.

Amortization Table

A little over 7 years ago, I started work on a program to calculate the amortization table for mortgages (also works for car payments) when the debtor is paying extra, but not the same amount every month. Then I wanted to make a GUI to make it easier for my wife to choose. At the time, the only way I knew how to make GUI was with QML. The result can be found here. Time passed and I learned QT via a book I got on Python GUIs with QT using QT Designer. So, on an 8-hour car trip with my dad, I set about to update the code and add a GUI. When I looked at the code, it was screaming with the need for refactoring – I was repeating the same thing twice – once for printing to the commandline and once for exporting to CSV. This made twice the work when I discovered any bugs. So, armed with pylint, pydoctstyle, and QT Designer, I set about updating the code, fixing bugs, and making a nice GUI. The result is here.

Amortization GUI with Plasma-style button
Old Amortization GUI written in QML
The new, QT GUI I created this year

Math Generator

We wanted to be able to have a randomly generated problem set for our oldest to ensure she was learning math and not just memorizing answer order. So, with some help from redditors, I created this program to make LaTeX formatted worksheets. My wife was happy that, for once, my programming hobby was useful.

Star Wars Spoiler Generator

When I saw this XKCD comic, I saw something that was ripe for easily making into a program. So I made this webpage, with this code. It was quick and easy and a lot of fun.

MQTT2DB

Rounding out my Python programming for 2019 was this utility I wrote to take MQTT data (commonly used by IOT devices to communicate data) and format it for a time-series database, like InnoDB. This is going to end up being a key backbone of my IOT journey into home automation.

DrawBot

After not having touched embedded programming since undergrad, some 15 years ago, everything changed for me when I saw the Humble Bundle with the Arduino and Lego Mindstorms book. I figured it was something I could do with my oldest, who’s into Lego and would probably enjoy turning those legos into robots. So I ordered my first Arduino (Uno R3) and shield (Mindstorms shield created by the authors of the book) and we set to work. We created this:

The Drawbot in Action

It was a lot of fun and it reignited my passion for working with embedded programming.

BBQ Thermostat & Bathroom Home Automation

With my knowledge that programming for embedded processors was now easier than it was 15 years ago and had a thriving ecosystem behind it, I decided to use it to develop a BBQ Thermostat for my smoker. There are many commercial solutions out there, but most of them rely on proprietary apps and servers that, if they go down, would loveleave my $300ish purchase useless. With even Best Buy shutting down their Insignia IOT services recently, what hope do I have of these smaller companies to stick around? Since I had experience with Arduino from the Lego project, I took a look through their product line first. The MKR 1010 looked pretty awesome because it was smaller than an Uno, had WiFi built in, and a k-couple temp probe shield that was easy to interface with. So, by the end of 2019, I had this code in this repo and had done a live test of the temperature measuring part. Although I still have some kinks to work out and still have the fan portion of the thermostat to figure out, the relative ease of the programming spurred me on to use a MKR 1010 and their ENV board to design a temperature and humidity measuring system that will be the basis of some home automation surrounding my bathroom. I also built on my knowledge of MQTT and have hooked it all up to Home Assistant.

Unity 2D Games

Finally, there was the GameDev.tv Udemy class I took to learn how to create 2D games with Unity. Many websites day y that programmers slid try and learn one new language each year. They each give different reasons for doing so, but I think there are two good reasons. First of all, it helps your brain in the same way that learning a new spoken language helps. It gives you better understanding of your language to see how the new one does things differently or the same. Second, it helps you learn about language that are better in different situations. Each was written to solve a different problem and so what might take 100 lines in one language might be so key to another that it only takes one line. Obviously that’s extreme, there are many niches where certain languages excel like math or AI. This article contains information about a few different “new” languages and what problems they were developed to solve.

This year my two new languages were C++ and C#.  Well, to be perfectly honest, they were not 100% new to me (not like the languages I’d *like* to learn in 2020 – Ruby, Rust, and Go), but I hadn’t touched C# since doing some Mono tutorials a decade ago, when people thought it was going to revolutionize cross-platform development across both Windows and Linux. I have even less experience with C++, but the C++ in the Arduino projects was pretty basic (which goes to prove what I always say – if you can program in one language, you can program in nearly any other).

C# was the language chosen by GameDev.Tv for their Unity 2D development course. It also introduced me to Visual Studio (which I hadn’t looked at for decades) and how much easier it makes programming on Windows. Here are the games I developed this year:

Text101 and Number Wizard: blog post; code for Text101; code for NumberWizard.

Block Destroyer: blog post; code

Laser Defender: blog post; code

Glitch Garden: blog post; code

Tilevania: blog post; code

2020

What will next year hold for me in the programming realm? Well, I’ll definitely be working on my long-running Python projects, like my Extra Life Donation Tracker software. I’ll also be continuing my journey with embedded programming, increasing the amount of C++ I write (and maybe some Circuit Python). I’d like to write my own 2D game in Unity so I’ll continue to work in C# as well. Depending on how much free time that leaves me, I’d like to learn Ruby this year. Yeah, it doesn’t *seem* to be as hot as it has been in the past – I don’t hear as much about Ruby on Rails as I used to. Mostly I hear about Django and Flask and cloud computing projects written in Go. But that might just be an echo chamber I find myself in. From GameDev.Tv, I have both their Unity and Unreal 3D game development courses. *IF* I do any 3D game development courses this year I’ll probably stick to Unity so that I’m only learning one thing (3D game dev instead of 2 things – 3D game dev and another programming language), but if I do get to Unreal – that’s in C++ and I think it would do a lot more for my C++ education than Arduino. Finally, if there’s time (and I’m not sure if there will be), I’d like to take some first steps with Rust and Go. Rust because it seems to be taking over for C in app development since it gives a lot of the same benefits while removing a lot of the attack vectors used by malware. Go because it seems to be becoming the COBOL of the 2010s/2020s.

Github stats

To close things out, some stats from Github for the past year (I wrote this post on Christmas Day, so it’s possible I did some more coding on the weekend between Christmas and New Year’s Day):

  • 769 contributions (contributions are issues, pull requests, and commits in a standalone repo to master branch)
  • 91% of contributions were commits; 5% issues; 4% pull requests

A small update on the transition to Miniflux

First of all, I was wrong about needing to trigger it to update. The default configuration is to update the feeds every hour, 10 at a time. This is configurable, but I think that arrangement works fine to me. Having been using it on my phone for a few days now, I’m really liking the formatting and how nice it looks. If there’s one negative thing, it’s that the links can be a bit tiny for my fingers to click on. Otherwise, it’s looking like I’m going to stick with Miniflux.

Review: Steelheart (The Reckoners, #1)

Steelheart (The Reckoners, #1)Steelheart by Brandon Sanderson
My rating: 5 of 5 stars

Can Sanderson write a great non-Cosmere book? The answer is a resounding ‘yes!’

I’ve read quite a few superhero decontructions and reconstructions (most famous being Watchmen and Irredeemable), but Sanderson brings something new to the genre, partially by focusing on the folks affected by gods walking among men. (Which, I just realized, brings the idea of superheros being our version of the Greek gods full circle) This is also what I loved about A Song of Ice and Fire that got swept away for the Game of Thrones adaptation. When the powerful bicker, it’s the powerless that suffer. This book is also a bit of a mystery as we are missing a lot of information and while David, the main character, knows a lot more than we do when the novel starts, he still is missing a lot of information. Sanderson does a good job of planting lots of little clues so that the plot twists are well-earned. Even though I guessed one of the plot twists, I was thrown off by the way in which it manifested. (view spoiler) The ending really hits hard and works quite well.

If there’s one negative, it’s not that bad because it comes with the YA genre – David has a LOT of plot armor. That’s not to say that he makes it to the end of story, but he definitely gets lucky with a lot of gambles.

A few tropes from The Cosmere make an appearance:
– Appearance of the Epics similar to Elantrians in Elantris (view spoiler)
– Authoritarian/Dictator government and Rebel-terrorists protagonists – similar to Mistborn Era 1. And there is perhaps there may be some other connections between The Lord Ruler and Steelheart, but we’ll have to see when I get to the next book in the series.

Overall, I HIGHLY recommend to anyone who’s a super hero fan who wants to experience it as prose rather than comics or movies. (I also recommend A Once Crowded Sky) Also a good recommendation to your YA reader. There isn’t anything bad (especially compared to other YA), but if you’re SUPER prudish and have advanced young readers who can read at the YA-level – know there’s some male gaze prose.

View all my reviews

Review: Breakfast: The Most Important Book About the Best Meal of the Day

Breakfast: The Most Important Book About the Best Meal of the DayBreakfast: The Most Important Book About the Best Meal of the Day by The Editors of Extra Crispy
My rating: 2 of 5 stars

Received this as a gift.

I guess I’m spoiled by Milk Street, Meathead Goldwyn, and America’s Test Kitchen, but reading a collection of blog posts put into a book with a bunch of vague recipes (although some seem to be better written) was just kind of meh.

Many of the essays were enjoyable, but some of them were just trying a little to hard to be funny (or maybe they were being serious and just see the world THAT differently from me). This was probably conceived of as a bathroom reader or coffee table book or something you’d just look at here and there. Reading it from front to back (which I do with all my cookbooks – which is why I love when there’s a story before each recipe) it just becomes a bit trying. Again, since it comes from a blog (or blog posts on a site), it probably worked better as something the reader would spend 5-15 minutes on a day.

I did earmark about 3 recipes from the book to try.

View all my reviews

Considering moving from Tiny Tiny RSS to Miniflux

For the past six years, since Google Reader closed in 2013, I’ve been self-hosting my RSS feeds via Tiny Tiny RSS. Overall it’s been OK, except for a few years I missed that the update method had been changed and I hadn’t updated. Then I learned the new method was to clone the git repo. I did it and kept up with it. There was something I didn’t set up way back when with my MySQL so it’s got a weird miscount between the app and the tab header. But otherwise it was working just fine enough.

Then I came across this post on the self-hosted subreddit. There were others that agreed with him that perhaps the code wasn’t as well-written as it could be. Also, he wanted to get back to a sane update mechanism. In one of the comments, someone mentioned Miniflux. At first I wasn’t sure if I wanted a minimalist OR opinionated feed reader. But it kept gnawing at me and so I decided to give it a shot.

First off, let’s compare when first logging in. Here’s TTRSS:

Tiny Tiny RSS on first login

It’s easy to get a quick overview of the new articles since you last logged in or last refreshed the “fresh articles”. You can click on any of the feeds, categories, or items quickly. It’s more of a dense view, but with the advantage of one-click to many different views.

Here’s the initial login of Miniflux:

Initial login to Miniflux

There’s a lot of great information available here, including the ability to mark it read without loading it, the ability to go to the original post, and to star it. At the very least, you can potentially do more without loading the posts, because TTRSS requires you to load a post to go to the original page or to star it.

Marking items as read without going into the items

To Minflux’s detriment, though, it’s a lot more tedious to get a quick view of the articles available via categories or feeds. At least, on the plus side, it did import the categories from the exported OPML:

Miniflux did import the categories

As I’ll show in a video at the end here, it is a bit more tedious to get around. Miniflux is helped by being written in Go and therefore EXTREMELY fast! Let’s compare how an article looks in each:

Tiny Tiny RSS opening an article
Miniflux opening the same aricle

There is definitely a certain elegance and cleanliness to Miniflux that comes from a more modern design, but overall it doesn’t seem to show any benefits outright.

A few other points before I show a video that illustrates some of my points when it comes to how many clicks are needed and how quickly things load. Tiny tiny RSS is always loading the newest articles if you have the page open (or have configured the cron job) while Miniflux needs one to click a link to load in the background. To be fair, I haven’t finished reading the Miniflux manual AND it’s very fast to load in the background. Finally, TTRSS requires a paid app to be useful on mobile while Miniflux has a responsive design. I have had some issues with TTRSS and the app and not syncing up correctly with the web page, so I’m looking forward to seeing how I like Miniflux on mobile.

I’m not 100% convinced that I should leave TTRSS, but I’m going to try Miniflux for a week to see how I like it. Here’s a video that also contains some of my first impressions that are easier to capture on video:

BBQ Thermostat Project: First Live Test

This is copied over from my Hackaday.io page.

BBQ Thermostat: Arduino MKR 1010 and Therm Shield measuring temperature during a smoke

Today I was smoking a turkey so I figured it was a good time to do a live test of my project. There was good news and bad news. I think it’s illustrated quite well by the following graph:

Grafana graph of my BBQ Thermostat while measuring the smoker temp

On the good news front:

  • While I didn’t do a minute-by-minute comparison (because I was busy making some side dishes), the temperatures it measured seemed to be fairly accurate and reasonable.
  • The temperature was able to travel via MQTT to the InfluxDB and Grafana Docker containers.

On the bad news front:

  • I kind of already knew this from experience with my cell phone, but WiFi reception is garbage on the BBQ patio. The 45° line from 15:45ish to 16:28ish is because the device wasn’t reporting back. I went out with my laptop to see what was happening and it wasn’t able to connect to the wifi. I lifted it up in the air (connected to my laptop) and it was able to connect. Then I rigged it to an extension cord in the tree (rather than near the ground as in the opening picture) and I guess it was able to do a bunch of data connections. But I wasn’t done smoking at 1700, yet that’s when I have the final data point.

So it seems like I’ve at least got a WiFi problem to solve. But when I’ve left it going in the computer room in the past I’ve seemed to have seen it conk out sooner than I’d prefer for a smoker application. (Conk out as in refuse to continue sending data or losing the connection to the SSID, not turn off or something.

I’ve added in a timestamp to the MQTT to influx Python script so that I can truly see when the final message came through. While testing at my desk I may also need to temporarily lift the restriction I made for not sending bogus temps in order to know for sure whether it’s lost the WiFi or whether it’s just not finding legit values to send.

So I’m pretty encouraged, even if things aren’t right where I want them to be yet.