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.

Today I wrote a little game where you make food in a kitchen.

 can you make a sandwich?
can you make a sandwich?

You can play here. Source code is on github.

This was so-so. I didn't have a ton of fun making it, and it's not that fun to play either. I spent way too much time with things like trying to get sprites to load, and not as much on making the game fun. I think it could be much better with another day or two of work (as usual for hack-a-day).

Today I made a TODO list. It has whiteboard sections to write tasks in, an eraser, and a timer. You should be able to use it flat or on the wall, though it's a little bulky to use flat.

 the final whiteboard
the final whiteboard

The blue is mostly spray paint, with some hand acrylic painting near the tape. The various bits on top are held in place with magnets, which I epoxied.

The cost to make this was $17. $5 for the whiteboard marker, $5 for the MDF board, and $7 for the timer. The eraser I made for free. I already had paints, whiteboard tape, epoxy, and magnets.

 in-progress whiteboard. note some blue LEDs on the right
in-progress whiteboard. note some blue LEDs on the right

Originally I had planned to add a bunch of electronics (LEDs for which task is active, a built-in timer, a buzzer, etc), but I decided not to. I was way too ambitious, so I didn't think I'd have time. On top of that, I was having a rough time getting my microcontroller to work, or figuring out how to mount hardware cleanly on MDF. I don't think I would have been happy with the electronic version (even with enough time to do it well), and I am with this version. I'm glad I gave up on that part early. I don't think I'll attempt another physical electronics project during hack-a-day -- it's too hard with too little to show for it at my skill level.

Today's project was one I've been wanting for a while--a way for people to send me files.

upload.za3k.com
upload.za3k.com

There were two components -- a web form where you can upload things, and a server that you send the things to. Both were fairly easy.

You can now send me things at upload.za3k.com

Today's project was a "vibe piece". I've been obsessed with the idea of easy, relaxing games based on organization.

In this game, you sort squares into like colors.

You can play online here. Source code is on github.

 before sorting
before sorting
 after sorting
after sorting

There are 24 hours in a day. This shows you how many of those are daylight. You can use it as a calendar, or you can wistfully watch it, waiting for the sun to come back.

 A radial clock showing the fraction of the day which is sunlight

A demo is online. Source code is on github.

I added some temperature sensors around my house.

 Temperature sensor, $4/ea on aliexpress
Temperature sensor, $4/ea on aliexpress

The sensors run on AAA battery, and periodically transmit the temperature on zigbee, a radio protocol in similar frequencies as Wifi. The signals get received by a USB dongle designed to receive and transmit zigbee.

 A raspberry pi listens to zigbee using a USB dongle
A raspberry pi listens to zigbee using a USB dongle

This is connected to a raspberry pi running zigbee2mqtt. The messages get sent to an mqtt broker via wifi. mqtt is a pub/sub protocol that runs over the internet. Any computer on my LAN can then be notified of temperature updates, by asking the mqtt broker to send them updates.

I wrote a small server which stays on all the time, listening to updates and recording changes to a database. It also generates reports periodically.

I think my database format is mildly interesting, in that it's designed to use a fixed amount of space. Anyone who wants to see the technical details, can check the github repo, specifically this file.

Temperatures can be seen in celsius or fahrenheit online. An example in Fahrenheit is below.

    Current Temperature
    last updated: 2024-11-07 8:34pm

    Sensor                        Temperature  Humidity    Last update
    Outside - Front                51.51°F      69.86%     1 minutes ago
    Outside - Back                 64.26°F      99.99%     22 hours, 49 min ago
    Upstairs - Dining Room         69.67°F      53.24%     0 minutes ago
    Upstairs - Bedroom - Za3k      71.35°F      60.15%     21 minutes ago
    Upstairs - Bedroom - Master    68.90°F      58.11%     4 minutes ago
    Upstairs - Kitchen             71.20°F      50.50%     6 minutes ago
    Upstairs - Garage              65.55°F      60.65%     2 minutes ago
    Basement - HVAC/Server         68.02°F      51.27%     3 minutes ago
    Basement - Workshop            67.10°F      52.91%     14 minutes ago

    -------------

    Hourly Temperature
    last updated: 2024-11-07 8:34pm

                    outside    inside     
    2024-11-07  8am    54.49°F    69.44°F   
    2024-11-07  9am    53.81°F    69.04°F   
    [...]
    2024-11-07  6pm    56.11°F    69.86°F   
    2024-11-07  7pm    53.53°F    69.65°F   

    -------------

    Historical highs and lows
    last updated: 2024-11-07 8:34pm

                outside             inside              
    2024-11-07    51.51 -  64.15°F    67.06 -  81.54°F   
    2024-11-06    61.21 -  71.24°F    68.36 -  81.18°F   
    [...]
    2024-10-10    49.39 -  60.89°F    67.59 -  77.49°F   

    -------------

    Code: https://github.com/za3k/temp-monitor

Having tested out zigbee and mqtt, I felt ready for my actual use case -- curtains. I live across the street from a major parking lot, and they have floodlights on all night. To sleep, I need blackout curtains. The problem is, it's pretty hard to wake up with blackout curtains drawn.

My solution was to get some smart curtains, and have them automatically go down at the end of the day, and go up in the morning.

 Smart curtains from IKEA
Smart curtains from IKEA

This worked fine, after I got the curtains set up. I've completely forgotten about them, which is exactly how I like my home automation--I want to never think about it. For more about how to set up IKEA smart curtains, see my notes. It comes with 6 manuals.

blinds controls my blinds via the computer, and mqtt2mqtt allows my IKEA remote to control them too. cron and heliocron automatically open and close the curtains on a timer.


I worked on monitoring power usage via my circuit breaker with current transformers and the circuitsetup ESP32 energy meter but it's currently stalled. The main problem is that I can't fit the CTs into my circuit breaker. If I get it working, I'll post an update.

As on day 02, I tried to make a soma cube, this time milling it out of aluminium on a milling machine.

 The Soma Cube is a 3D, tetris-like puzzle -- picture credit 2ndlook.nl
The Soma Cube is a 3D, tetris-like puzzle -- picture credit 2ndlook.nl

I picked up some aluminium from a local supplier, and headed to Hive13, the local hackerspace, to use their milling machine.

 The Hive13 metal mill
The Hive13 metal mill

After about 7 hours, despite hard work, I had almost finished cutting the blanks, and that was it. Milling is no joke, especially for a beginner!

 correctly sized blanks to make the pieces
correctly sized blanks to make the pieces

And had to call it a night, both because I was tired and because the weekly meeting was starting. I was feeling pretty rough after this one -- three, nearly four failed projects in a row is not a great start to a hackathon.

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.

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.