2023 Books

Here’s a list of books I read in 2023 (a year later!). The ones in bold I recommend.

  • All the Skills 1 by Honour Rae
  • All The Skills 2 by Honour Rae
  • (Alpha Physics, Book 1) Wagga by Alex Kozlowski
  • (Alpha Physics, Book 2) Delay by Mr Alex Kozlowski
  • (Alpha Physics, Book 3) Disquiet by Mr Alex Kozlowski
  • (Alpha Physics, Book 4) Albury by Alex Kozlowski
  • (Alpha Physics, Book 5) Dungeon by Alex Kozlowski
  • (Alpha Physics, Book 6) Home Bound by Alex Kozlowski
  • The Amber Project by J.N. Chaney
  • Amelia The Level Zero Hero 1 by V.A. Lewis, Melas Delta
  • Among Strangers by Robert Silverberg
  • (Arcane Ascension, Book 1) Sufficiently Advanced Magic by Andrew Rowe
  • (Arcane Ascension, Book 2) On the Shoulders of Titans by Andrew Rowe
  • (Arcane Ascension, Book 2) The Torch that Ignites the Stars by Andrew Rowe
  • (Arcane Awakening, Book 1) Imperial Wizard by J Parsons
  • (Arcane Awakening, Book 2) Imperial Wizard 2: Ambitions by J Parsons, Niki Prince
  • Armada by Ernest Cline
  • (Astra Academy, Book 1) Academy Arcanist by Shami Stovall
  • (Astra Academy, Book 2) Mimic Arcanist by Shami Stovall
  • The Atlantis Gene by A.G. Riddle
  • (Body Electric, Book 3) Hardware by Electra Shepherd
  • Bridge of Birds by Barry Hughart
  • (Brightest Shadow, Book 1) The Brightest Shadow by Sarah Lin
  • (Brightest Shadow, Book 3) The Unnecessary Victory by Sarah Lin
  • (Budding Scientist in a Fantasy World, Book 1) Small Town in Southern Illvaria by Acaswell
  • Brute Force by Scott Meyer
  • The Chemist By Stephanie Meyer
  • Clear (Comixology Originals) by Scott Snyder, Will Dennis, Francis Manapul, AndWorld Design
  • (Completionist Chronicles, Book 1) Ritualist by Dakota Krout
  • (Completionist Chronicles, Book 2) Regicide by Dakota Krout
  • (Completionist Chronicles, Book 3) Rexus, Side Quest by Dakota Krout
  • (Completionist Chronicles, Book 4) Raze by Dakota Krout
  • (Completionist Chronicles, Book 5) Ruthless by Dakota Krout
  • (Completionist Chronicles, Book 6) Inflame by Dakota Krout
  • (Completionist Chronicles, Book 7) Invent by Dakota Krout
  • (Completionist Chronicles, Book 8) Implode by Dakota Krout
  • (Completionist Chronicles, Book 9) Tenacity by Dakota Krout
  • (Completionist Chronicles, Book 10) Thesaurize by Dakota Krout
  • Conspiracy of Truths by Alexandra Rowland
  • (Cradle, Book 12) Waybound by Will Wight
  • Dawn of the Void 1 by Phil Tucker
  • Dawn of the Void 2 by Phil Tucker
  • Dawn of the Void 3 by Phil Tucker
  • Dead Tired 1 by RavensDagger
  • (Divine Dungeon, Book 1) Dungeon Born by Dakota Krout
  • (Dungeon Crawler Carl, Book 1) Dungeon Crawler Carl by Matt Dinniman
  • (Dungeon Crawler Carl, Book 2) Carl's Doomsday Scenario by Matt Dinniman
  • (Dungeon Crawler Carl, Book 3) The Dungeon Anarchist's Cookbook by Matt Dinniman
  • (Dungeon Crawler Carl, Book 4) The Butcher's Masquerade by Matt Dinniman
  • (Dungeon Crawler Carl, Book 4) The Gate of the Feral Gods by Matt Dinniman
  • (Dungeon Crawler Carl, Book 6) The Eye of the Bedlam Bride by Matt Dinniman
  • (Dungeon from the Void, Book 1) The Void Dungeon by Shane Purdy
  • (Dungeon from the Void, Book 2) The Dungeon Delve by Shane Purdy
  • (Dungeon from the Void, Book 3) The Dungeon Assault by Shane Purdy
  • (Dungeon from the Void, Book 4) The Neutral Nation by Shane Purdy
  • (Elemental Magic, Book 1) SORCERER by Michael Nowotny, Mark Woodhouse, Trent Landt
  • Ella Minnow Pea by Mark Dunn
  • Emergency Skin by N. K. Jemisin
  • Enter System (Natural Laws Apocalypse Book 1) by Tom Larcombe
  • (Evander Tailer, Book 1) The Enchanter by Tobias Begley
  • (Evander Tailer, Book 2) The Diviner by Tobias Begley
  • The Extractionist by Kimberly Unger
  • The Final Decree by Shami Stovall
  • First Contact by D. L. Harrison
  • (Galactogon, Book 1) Start the Game by Vasily Mahanenko
  • (Gild, Book 1) Gild by Raven Kennedy
  • (Gild, Book 2) Glint by Raven Kennedy
  • (Gild, Book 3) Gleam by Raven Kennedy
  • (Good Guys, Book 1) One More Last Time by Eric Ugland
  • The Good Samaritan by John Marrs
  • (Grand Game, Book 1) The Grand Game by Tom Elliot
  • (Grand Game, Book 2) Way of the Wolf by Tom Elliot
  • (Grand Game, Book 3) World Nexus by Tom Elliot
  • (Grand Game, Book 4) House Wolf by Tom Elliot
  • (Heavenly Throne, Book 1) Force Cultivation by Yuri Ajin
  • The Hedge Wizard by Alex Maher
  • The Housemaid by Freida McFadden
  • How Long Til Black Future Month by NK Jemisin
  • Hunter x Hunter by Yoshihiro Togashi
  • (Immortal Great Souls, Book 1) Bastion by Phil Tucker
  • (Immortal Great Souls, book 2) The Rascor Plains by Phil Tucker
  • (Iron Widow, Book 1) Iron Widow by Xiran Jay Zhao
  • The Killing Moon by NK Jemisin
  • The Last Conversation by Paul Tremblay
  • (Last Horizon, Book 1) The Captain by Will Wight
  • Ledge by Stacey McEwan
  • Machine of Death, edited by Matthew Bennardo and Ryan North
  • (Mage Errant, Book 1) Into the Labyrinth by John Bierce
  • Mage Stones: Part 1 by D.J. Dammeyer
  • (Magic 2.0, Book 1) Off to Be the Wizard by Scott Meyer, Liz Pulido
  • (Menocht Loop, Book 2) The False Ascendant by Lorne Ryburn, caerulex, Silas Sontag
  • (Menochy Loop, Book 1) The Menocht Loop by Lorne Ryburn, caerulex, Silas Sontag
  • Mickey 7 by Edward Ashton
  • (Millenial Mage, Book 1) Mageling by J.L. Mullins
  • (Millenial Mage, Book 2) Mage by J.L. Mullins
  • (Millenial Mage, Book 3) Binding by J.L. Mullins
  • (Millenial Mage, Book 5) Bound by J.L. Mullins
  • (Millenial Mage, Book 5) Fusing by J.L. Mullins
  • (Millenial Mage, Book 6) Fused by J.L. Mullins
  • (Monarch, Book 1) Monarch: A Prince Out of Time by J. McCoy, Eligos
  • (Murderbot, Book 1) All Systems Red by Martha Wells
  • (Naga Brides, Book 1) Viper by Naomi Lucas
  • Natural History of Hell by Jeffrey Ford
  • Nettle & Bone by T Kingfisher
  • Never Lie by Freida McFadden
  • (Nexus Games, Book 2) The Nexus Gamesby Shami Stovall
  • (Nexus Games, Book 2) The Nexus Knight by Shami Stovall
  • (Nexus Games, Book 3) The Nexus Challenge by Shami Stovall
  • (Nothing Mage, Book 1) The Nothing Mage by J. P. Valentine
  • (Nothing Mage, Book 2) Untolled by J. P. Valentine
  • The One by John Marrs
  • One Piece by Eiichiro Oda
  • Page Keeper 1 by Dante King
  • (Paranoid Mage, Book 1) Paranoid Mage 1 by Inadvisably Compelled
  • (Paranoid Mage, Book 2) Renegade Mage 2 by Inadvisably Compelled
  • (Paranoid Mage, Book 3) Heretic Mage 3 by Inadvisably Compelled
  • The Perfect Run by Maxime J. Durand
  • Poor Man's Fight by Elliott Kay
  • Quantum Radio by A.G. Riddle
  • Randomize by Andy Weir
  • (Reckoners, Book 1) Steelheart by Brandon Sanderson
  • (Reckoners, Book 2) Firefight by Brandon Sanderson
  • (Reckoners, Book 3) Calamity by Brandin Sanderson
  • (Resonance Cycle, Book 1) Divine Invasion by Aaron Renfroe
  • Rueberry Orchard by Michele Notaro
  • (Selection, Book 1) The Selection by Kiera Cass
  • (Selection, Book 2) The Elite by Kiera Cass
  • (Selection, Book 3) The One by Kiera Cass
  • The Silent Patient by Alex Michaelides
  • The Silver Queendom by Dan Koboldt
  • (Solar Clipper, Book 1) Quarter Share by Nathan Lowell
  • (Solar Clipper, Book 2) Half Share by Nathan Lowell
  • (Solar Clipper, Book 3) Full Share by Nathan Lowell
  • Spell Thief: A Deck Building LitRPG Adventure (Tower of Cards Book 1) by J Pal
  • Starter Villain by John Scalzi
  • (Sybil, Book 1) Primordial Ascension by Azrie
  • (System Universe, Book 1) System Change by SunriseCV
  • (System Universe, Book 2) Torith by SunriseCV
  • (System Universe, Book 3) Savannah by SunriseCV
  • Teleport by Joshua T. Calvert
  • The Thinking Machine by Jaques Futrelle
  • (This Trilogy is Broken, Book 1) This Quest is Bullshit! by J. P. Valentine
  • (This Trilogy is Broken, Book 2) This Class is Bonkers! by J. P. Valentine
  • (This Trilogy is Broken, Book 3) This Guild is Batty! by J. P. Valentine
  • (This Trilogy is Broken, Book 4) This Plot is Bananas! by J. P. Valentine
  • (Thomas Covenant, Book 1) Lord Foul's Bane by Stephen R. Donaldson
  • (Titan, Book 1) Nova Terra: Titan by Seth Ring
  • (Titan, Book 2) Nova Terra: Greymane by Seth Ring
  • (Undying Magician, Book 1) The Arcane Academy by Shane Purdy
  • (Undying Magician, Book 2) Kingdom of the Fallen by Shane Purdy
  • (Warformed, Book 1) Iron Prince by Bryce O'Connor, Luke Chmilenko
  • (Warformed, Book 2) Fire and Ice by ?
  • The Watchmaker of Filigree Street by Natasha Pulley
  • (Weirdest Noob, Book 1) The Weirdest Noob by Arthur Stone, Mark Berelekhis, Mikhail Yagupov
  • (Weirkey, Book 2) Rainhorn by Sarah Lin
  • (Weirkey, Book 3) Archcrafter by Sarah Lin
  • (Weirkey, Book 4) Chasmfall by Sarah Lin
  • (Weirkey, Book 5) Bondsfungi by Sarah Lin
  • (Weirkey, Book 6) Bloodcrete by Sarah Lin
  • (Whimbrel House, Book 1) Keeper of Enchanted Rooms by Charlie N. Holmberg
  • (Whimbrel House, Book 2) Heir of Uncertain Magic by Charlie N. Holmberg
  • The Wizard's Butler by Nathan Lowell
  • You Have Arrived at Your Destination by Amor Towles

Non-Fiction

  • Be Slightly Evil by Venkatesh Rao (of Ribbonfarm)
  • Toki Pona: The Language of Good by Sonja Lang
  • The Ultimate Micro-RPG Book edited by James D'Amato
Tagged , , ,
leave comment

Question #2: Verifiably Random Numbers

We want to generate some random numbers. For simplicity, we'll assume we want a random number between 1 and 100. We want our random-number generator to be:

  • Public (everyone knows the same random numbers, at roughly the same time)
  • Fair (every number has the same odds of coming up)
  • Trustable (everyone knows it's fair--it should be above doubt)
  • Fast (we want to generate as many numbers as possible, as often as possible)
  • Unpredictable (you shouldn't be able to guess the result before it's revealed)

Some security experts suggest that a trustable system should also be:

  • Decentralized (no single person, organization, or computer picking the numbers). This is because a central trusted group requires faith in that group and its security.

One for this in the real world was the "Numbers Game", a popular illegal lottery in the 1800s, in the USA. The winning numbers were selected at random each day, like most lotteries--by the mob. After complaints about rigged lotteries, the winning numbers started to be picked more transparently. For example, it might be the closing price of the New York Stock Exchange--just the cents value. For a hundred dollar lottery, you would be crazy to worry about someone messing with the New York Stock Exchange. (But if it became a billion- or trillion-dollar lottery, you should worry again.)

The biggest problem with using a stock exchange that it's slow. You only get one set of numbers a day.

Can you come up with a better random-number generator?

Tagged
leave comment

Whiteboard Calendar

Using electrical tape, I split a whiteboard into sections. Voila, whiteboard calendar.

A teacher friend of mine already knew exactly how to do this--apparently it's common knowledge among teachers.

I did look if there were either large, disposable calendars (no) or existing whiteboard calendars (they're laminated posters that don't actually erase). A 3ft x 2ft (1m x 0.6m) whiteboard costs $30, and you can get electrical tape for $1.

The stickers look bad--I half-assed them. I need tons of big stickers or none at all. This was way too tentative. I do want some kind of decoration, though.

Tagged ,
leave comment

Hack-a-Day 2024

In 2022, 2023, and 2024, I did "Hack-a-Day", a challenge to myself to do one project a day for all of November. It's vaguely modelled off NaNoWriMo, a challenge to write a book in November.

This year, I completed 21 projects in 30 days. On average, I worked 7.5 hours per project. My expenses for the month were $130, divided over only three projects--ingredients for Project L.E.M.B.A.S. ($85), aluminium to mill for soma cubes ($28), and missing parts for my TODO whiteboard ($19).

 a calendar listing projects from 2024

To see a list of all projects from this year and previous ones, check out my hack-a-day website.

Tagged
leave comment

Hack-a-Day, Day 27: Minecraft Mod

Today I made a minecraft mod, using Fabric. Modding sure has changed a lot since I last tried it in Forge, maybe ten years ago! Java's changed a little too, even.

My mod adds a dirt slab, that's it. I didn't really have time to get past the basics, but I think the occasional hack that's just a learning experience is okay.

Code and mod download are both on github this time.

Fabric is well-documented and friendly. The main downside is that there's no "abstraction later" between Minecraft and the mod. This means your mod will work with exactly one minecraft version on release. Additionally, when a new version of minecraft is released, you need to update and re-release your mod (and there are usually actual changes to be made).

Tutorials used:

Tagged ,
leave comment

Hack-a-Day, Day 25: Go Screensaver

Today I made a Go "screensaver".

  go game in progress
go game in progress

You can see it online here. The source code is on github.

Games are taken from OGS, and played real-time. Provided are a selection of 1000 random games from OGS, a popular Go server. Games play in real time, the same as when they were originally played.

I made this to have a screensaver for my mantel.

 go games play above my fireplace
go games play above my fireplace

Hope you enjoy.

Tagged , ,
leave comment

Hack-a-Day, Day 16: Go

 a 9x9 game of go
a 9x9 game of go

Today I hacked together a simple but servicable Go game. It uses chinese scoring, and you have to manually mark dead stones at the end of the game. You can play a demo here. Source code is on github.

Right now you have to sit down with someone else to play. I plan to spend a day adding multiplayer to a few games, if I have time.

Tagged , , ,
leave comment

Hack-a-Day, Day 14: Can't Stop

 can't stop won't stop
can't stop won't stop

Can't Stop is a push-your-luck style dice game designed by Sid Sackson in 1980. I've found it to be fun on BoardGameArena.

I wrote my own version for hack-a-day. You can play online. The source code is on github.

I'm pretty happy with this one. I didn't get to online play or even AI opponents, but you can play on your own or against friends in the room.

Tagged , ,
leave comment

Hack-a-Day, Day 04: Project L.E.M.B.A.S. (FAILED)

Today's project was to make a healthy, shelf-stable food that I could eat every day, and take care of meals for the rest of the month. In the process, I realized my initial goals didn't quite make sense, and I also (again!) ran out of time. But I made a little progress.

First, I spent a couple hours researching foods like what I wanted to make. I started with "survival" foods -- hard tack, military rations, disaster food, pemmican and wasna. Commons themes I saw were:

  • The foods lasted a long time
  • They were cheap to make (then, not now)
  • They were dense (physically compact) and could stand being thrown around
  • They were high-calorie.
  • They didn't need cooking, and often you could get by with no heat or utensils if needed.
  • They were something people would eat (and often, the bare minimum standard)
  • They contained some reasonable macronutrient balance, although usually not an ideal one
  • They were often meat-heavy

Then I branched out a little to other calorie-dense foods:

  • Trail mix
  • Fudge
  • Energy bars, meal squares, and granola bars
  • Biscotti

I started realizing my goals didn't quite align with what I was seeing. I didn't really need my food to last years -- one month outside a fridge would be fine. I cared a lot more about taste. And eating calorie dense food was not really a great idea, as someone mostly sitting in a chair rather than than hauling gear cross-country all day.

I did a circuit of local stores -- a grocery store, a restaurant supply store, an indian grocer's. I also picked up enough frozen food at Trader Joe's to last me most of the month, rather defeating the point. Oops!

I came home with a lot of flours and flour-adjacent things. Very carb-heavy. I had several flours: corn, chickpea, and wheat. I ground up a few more.

 grinding dried peas into flour
grinding dried peas into flour
 one jar of peas makes one jar of flour
one jar of peas makes one jar of flour
 completed flours. quinoa, chickpea, corn, green pea, oats, lentil, pigeon pea
completed flours. quinoa, chickpea, corn, green pea, oats, lentil, pigeon pea
 chocolate chips, coconut, cheese, sausage, flax, sunflower seeds, sugar, shortening, and boullion
chocolate chips, coconut, cheese, sausage, flax, sunflower seeds, sugar, shortening, and boullion

At this point, I had a wide variety of cheap ingredients. I went to the USDA food database and wrote some notes about macronutrient balance, and did the math on how much things cost.

Then, I started experimenting. I had previously made hard tack, which I found kept forever and I liked pretty well. So I started by experimenting with hard tack, using non-wheat flour recipes. I was worried (rightly so) that non-wheat flours would not hold together as well.

 experimenting with non-wheat flour ratios
experimenting with non-wheat flour ratios

I tried ratios of quinoa and wheat flour, and also tried adding a few ingredients. I found that 1 part in 3 of wheat flour was plenty to hold things together--it just wouldn't be puffy any more. That seemed fine. I also discovered that it was really important to aim for a consistent thickness, because some of the pieces ended up soft and some hard or burnt. Luckily, non-wheat flours are a lot springier, so this was easier in the second batch.

 experimenting with ingredients -- 23 tests total
experimenting with ingredients -- 23 tests total

In the second batch, I kept the same 1:2 ratio, but tried a wide variety of flours, as well as the rest of the additives.

My findings, and my ending point for the night:

  • A 1:2 ratio of wheat flour to another flour seems to consistently hold together well. The amount of water needed varies just a little. The squares cook with 20 minutes per side.
  • Quinoa, green pea, oat, and chickpea flours are neutral to good. Corn and wheat flours are excellent. Lentil flour smells too strongly. I forgot to test pigeon pea or make rice flour.
  • Coconut (un-powdered) is also excellent. I like the smell and a little fat. Shortening was not as good, and I didn't test other fats.
  • Adding extra salt didn't change the flavor.
  • Adding fat (via coconut or shortening) makes the wafers a little messier.
  • Sugar is great. Whether a dusting on top, a little added, or chocolate chips, it's a definite winner. Sugar mixed in should improve shelf life.

I was originally trying to invent a single food I could eat every day, which if you know me was a very stupid mistake. Instead, I'm going to have the final version be something more like my experiments--a wide variety to pick from.

If I continue another day (and I likely will), I'm going to further optimize taste. The most compelling result of all is that I didn't eat the leftovers--I went for frozen food instead.

Tagged ,
leave comment