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

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.

Tagged ,

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 , ,

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 , ,

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 ,

Meal Squares 1.0 Recipe

I like a meal substitute called Meal Squares. The company recently switched from version 1.0 to version 2.0. They're basically different products in terms of taste and texture, although they're both trying to be complete, whole-food squares.

 Meal Squares 1.0 on the left, and 2.0 on the right
Meal Squares 1.0 on the left, and 2.0 on the right

1.0 are bready, don't keep as well, and aren't as appetizing. 2.0 has more of a snacky, fruit-leather feel more typical of meal replacement bars. Personally, I prefer the 1.0 version (snackable is a negative for me).

The CEO, Romeo Stevens mentioned during the new product launch:

We'll be open sourcing the 1.0 recipe for those who want to bake them at home.

After emailing him a reminder that it wasn't posted anywhere, he kindly emailed me the recipe back. I'm posting it online for anyone else that wants it in the meantime. Thanks, Romeo!

Meal Squares 1.0 Recipe (.txt version)

Makes: 24 squares ( 4-square silicone mold available from Michael's )

Date syrup

  • 225g Date paste
  • 120g Vegetable glycerin
  • Small amount of water if needed for consistency

Liquid:

  • 5 eggs
  • 1.5oz Orange juice concentrate
  • 2 cups Evaporated milk
  • 100g Applesauce (unsweetened)
  • 100g Pumpkin puree
  • 135g Coconut oil
  • 77g Olive oil

Dry:

  • 500g Oat flour
  • 300g Whey protein concentrate (unflavored)
  • 200g Chocolate chips
  • 160g Sunflower seeds
  • 135g Rice bran
  • 85g Carrot powder
  • 20g Garbanzo bean flour
  • 25g Iodized salt
  • 5g Sunflower lecithin
  • 5g Pumpkin spice
  • 2g Baking soda or 8g Baking powder (warning! Baking sodas vary quite a bit by brand and whether it includes aluminum, we used the less potent aluminum free baking soda for mealsquares, experimentation needed for small batches.)

Optional:

  • 15g Potassium citrate (can be omitted for small hit to potassium content)
  • D3+K2 drops (varies by brand, add enough for ~500% your DRI since this is about 5 days of Mealsquares)
  • Liquid calcium folinate (same as above)
  • Niacinamide (same as above)
  • Lactase (added to condensed milk if lactose intolerant)
  1. Over low heat, combine date syrup ingredients. Stir until homogenous.
  2. Mix liquid ingredients, including date syrup.
  3. Mix dry ingredients.
  4. Combine wet and dry ingredients. Consistency should be like peanut butter or slightly thicker. Add (small amounts) liquid water if too thick.
  5. Bake at 350, time varies wildly by oven design, and edges may overcook while centers undercook. You will likely need to pull them out of the oven at the 2/3 baking point and flip the molds around to avoid this and get even results.
  6. Packaging: remove as much air as possible to avoid them going stale in the fridge.

Notes:

This recipe could likely be optimized with the substitutions of some milk protein powder for condensed milk and some tapioca syrup for vegetable glycerin. These optimizations were only discovered as we were moving towards production of Mealsquares 2.0 so were never implemented in 1.0. Would require experimentation for water content and baking times etc.

Tagged

Hack-a-Day, Day 01: #ircpuzzles player

I wrote a player for #ircpuzzles, a yearly puzzle hunt hosted on IRC. Many people who might like to try the puzzles don't know how to use IRC. So, now you can replay past years online.

I didn't have time to finish this one. It only has one year, and is missing a little polish. I'd call it about 80% done. It worked as a warmup for hack-a-day, my yearly project to complete one project a day in November.

Demo is here. Source is on github.

Tagged ,