Monday, July 13, 2020

Recipe: Raspberry scones

Following my tartelettes aux framboises, I still had some wild raspberries in the refrigerator, so this morning I made scones with them.






Ingredients


  • 3 cups all-purpose flour
  • 1/2 cup white sugar
  • 5 teaspoons baking powder
  • 1/2 teaspoon salt
  • 3/4 cup butter
  • 1 egg, beaten
  • 1 cup milk
This recipe is super easy -- soften the butter, throw everything together, mix it up, plop it onto a some sort of a baking surface, and bake at 350°F for 15-20 minutes.

For this batch, I mixed the above ingredients then threw in a handful of our wild raspberries, and promptly mashed them into little more than a deep purple pigment.


The finished product, above, turned out well despite the scone dough looking pathetic. Four stars.

Sunday, July 12, 2020

Recipe: Tartelettes aux framboises



I made my tartelettes aux framboises this afternoon/evening for my family and some friends that came over. I used these 2.6" carbon steel tart molds I got on Amazon for $15 earlier this year, but the same recipe can be done with larger molds -- I have some ~5" molds for bigger tartes, but these are bite-sized and therefore more fun.

Butter Crust Pastry Dough

First is the butter crust pastry dough. The ingredients are:
  • 2 cups flour
  • 1/2 cup unsalted butter, frozen
  • 1 tbsp sugar
  • 1 tsp salt
  • 3 fl oz ice water
Directions:
  1. Pour one cup of flour in the food processor
  2. Cut in the frozen butter
  3. Cover with the rest of the flour and remaining ingredients
  4. Pulse the food processor a few times, then turn on until the dough becomes visibly crumbly (about 30 sec to 1 minute)
  5. Dump dough onto the counter and gently roll into a ball, gathering all crumbs.
  6. Enclose in saran wrap. Put into the refrigerator until you're ready to use it. This keeps the butter firm.
  7. Form into tarte molds and bake at around 300°F for ~20 minutes.
I'll note here that my actual recipe has no directions, so I played with temp and time a bit. The results from today's bake didn't really hit the Maillard reaction.

Raw crusts from a bake a couple years ago. The crusts are aligned to the mold edges with care. But it is not to be.

Tarte Sweet Cheese Mixture

Filling poured into larger tarte molds

While the crusts are baking, prepare the filling
  • 8 ounces cream cheese or fromage blanc
  • 2 tbsp crème fraîche or sour cream
  • 2 tbsp white sugar
  • 1 large egg yolk
  • 0.25 tsp salt
  • 0.25 tsp vanilla extract
  • 0.5 tsp lemon zest
 (I have just used cream cheese and sour cream since I don't readily have access to fromage blanc or crème fraîche.) Chuck all of these into a bowl and mix well (eg, with an electric hand mixer). Spoon into the baked tarte crusts and continue to bake at around 300°F until you no longer want to bake them anymore 🤷‍♂️.

C'est la vie.


My presentation definitely leaves something to be desired here. Notably, the crusts shrink when you bake them; I haven't tried using pie weights, and frankly, I don't care too much. I take a very utilitarian approach to my baking, so purists can go fly a kite.

To top off these tartelettes, garnish with a couple berries, or if you are really just looking for a way to eat some delicious raspberries, use your tartes as raspberry delivery devices.


The tartelettes at the top of this post are the ones I did today, and they used raspberries I picked from our back yard. All the other photos are from just after my trip to Chamonix and elsewhere France two years ago.

Monday, March 9, 2020

Code: Read an adl:// stream in Python

Edit: I'm now putting code snippets on my GitHub Pages site here.

I recently had the need to read in an adl:// file in some Python code I was working on. Dask has this capability, and most search results for reading ADL streams in Python point you to Dask itself. But I wanted to avoid using Dask for this.

I couldn't find anything that said how you can do this directly in Python, but it turns out Dask just wraps fsspec, and the code to do it using fsspec directly is pretty easy:

Tuesday, December 31, 2019

Two generations of Shirey boys in graph form

Growing up, my parents marked my brothers' and my heights on a 1x4" board they kept in the hallway closet. Generally around our birthdays, they would scratch a line in it with a pen and write the date. This seems pretty standard practice, as I know of several other families that do this.

When our boys were little, Andrea and I inherited the board that my parents started a generation ago. Since Jake and Reed's heights are tracked on the reverse from mine and my brothers', it's quite easy to compare how they stack up against us.

And for a moderate amount of effort, it's also easy to input these data into Excel* and draw some lines. I knew that both my boys were roughly tracking Nate's height (and are actually a little taller than he was at their ages). I hadn't realized that for the longest time, I lagged by that much:

For what it's worth, I about caught up to Nate's height, though it didn't occur until after my parents stopped marking our heights on the board. I also hadn't realized that Matt and I were tracking at about the same height.

*Yes, this graph is actually drawn in PowerBI - it turned out to be easier there using the appropriate dimensions than in Excel)

Sunday, September 29, 2019

Back to Stone Gardens

After a long time away, we finally made it back to Stone Gardens as a family. The boys outgrew the shoes we bought for them for Christmas a few years back, but no matter.

Most the afternoon was bouldering:


But Reed got back into the autobelay that he loves:



Both the boys even tried some top-roping with me belaying them -- a great occasion for me to teach them climbing commands. (No photos, of course, since we were on-belay at the time.)

I also discussed with the boys that, back in college, we had to mark our gear in some way to discriminate between your gear and mine. We used cheap nail polish to identify our gear. Turns out I still have gear from my college days -- yellow and green was me.


This morning, we were all sore according to the climbing we did. And we're all looking forward to the next go.

Monday, July 15, 2019

Internet of things air conditioning

The last few summers have gotten warm enough here in the Pacific Northwest that we got ourselves a free-standing AC unit, but even it can't really keep up for me. Most summer nights, it's cool enough outside, but the house retains enough heat that we have to ventilate. While Andrea and the boys were in Minnesota these last two weeks, I decided to get around to a project I'd been rolling around for a while: automate the monitoring of inside and outside temperatures, and when it's cool enough outside, kick on one fan for intake and one for exhaust.

Bill of materials

Making the temperature sensor

The first step was, compared to my kegerator project, significantly simpler. My DHT11 sensor already has its pull-up resistor built-in, so wiring this up was little more than connecting ground-to-ground, voltage-to-voltage, and one-pin to a somewhat arbitrary GPIO. Had the microcontroller not come with header pins, I probably could have done away with the PCB.

I played around with getting this working on a breadboard before soldering it up, but this whole process was the least interesting of the whole project, so I'm omitting this info. At the end, I had a component that looks like so:


I had planned to flash the NodeMCU to use MicroPython, but it ended up being a fairly significant pain in the ass to do, and it turns out you can make wifi, temperature readings, and MQTT messages work in just under 60 lines of C code (and C is far from my strong suit). The DHT11 can apparently read at 0.5 Hz (one reading per two seconds), but this is far faster than I need, so I configured it to take a reading every minute.

I already had Home Assistant running on one of my laptops with an MQTT broker, so plugging this sensor into the wall and letting it sit for a while gives me the temperature over time inside our house:


I put this sensor in the boys' room because that's the place I want to make sure is properly climate-controlled.

Next, I debated how to deal with a second temperature sensor outside. Our backyard is on the south side of the house, and it can get a lot of sun. A sensor sitting out there could bake in the sun and get ruined. The front of the house would be protected from that, but there's only one outlet, and it's in a rather inconvenient place.

I decided instead to make an API call to OpenWeatherMap. Their data are updated every ten minutes or so. Having lower time granularity is no big deal to me, and they provide a lot more data than I'd get with a DHT11 and at no cost, to boot. So I setup a cron job to run every ten minutes, publishing the temperature to my MQTT topic. Another 40 lines of code, this time in Python.

Again with the data, but this time, I'm doing a ten minute average of my own sensor with the external data overlaid:


While I've had Home Assistant installed, I haven't been doing much with it, and I've found their nomenclature and configuration to be pretty wonky, and the UI is jarring as well, making it pretty hard to figure out. It took some time, but I was able to get two of my smart switches setup thanks to a contributed VeSync component for Home Assistant. There are certainly some kinks to work out, though I'm not sure if it's with VeSync or with Home Assistant's Lovelace UI. I renamed my switches for this project, yet they're still showing up with some default values:


 

 No matter. I'm not using the UI for this, anyway. I added a new automation in my automations.yaml to, kick on both smart switches when HomeAssistant receives an MQTT message to the "ventilate" topic with payload "on". Similar for turning it off. From a console, I could turn on and off the fans with a simple command:
$ mosquitto_pub -h localhost -t ventilate -m "on"
$ mosquitto_pub -h localhost -t ventilate -m "off"
The final piece was to automatically send this message under the right circumstances. There's more code to my script, as it's handling both DHT11 and OpenWeatherMap MQTT messages, but the relevant code for comparing recent inside/outside temps is here. Basically, if it's at least five degrees cooler outside than inside, it'll start ventilating. If it's the same temp or warmer outside as inside, it stops. I also added some time bounds so we're not running a rather loud fan in the morning when we're enjoying each others' company.

Voilà ! I have yet to measure how effective this setup is for actually cooling the house, but for a paltry $25 or so and a few hours of time, I'm rather excited by what I find.

Tuesday, May 28, 2019

Intergenerational height comparisons of Shirey men

Today is Reed's 10th birthday, and we started off with a little treasure hunt for him to find his gifts. Here, he discovers the clue on Felicia, the flamingo in our flower garden:


As often as we remember and feel like it, we measure our boys' height on a 4x1 board – the very same board, in fact, that my parents used to track our growth over an 11-year period. So we took measurements, and I decided to track how the boys are doing compared with me and my brothers. I took two photos of the board and did a quick edit in Paint.NET to put the front and back next to each other. Jake wanted to pose in there as well:

Not the birthday boy, but just as awesome.

In the photo, you'll see five superimposed colored lines marking the heights for each of five Shireys at approximately ten years old (some measurements when we grew up weren't on the birthdays). The vertical tranches are, from left to right: Nate, me, Matt, Jake, and Reed. Three points to make:
  1. Jake and Reed are, controlled for time, pretty darn close to each other in height. (Not sure about weight, as we haven't compared.)
  2. Both of them are a good inch taller than Nate was.
  3. I'm the shortest of the whole lot at this age.
I'm suddenly very interested in seeing these data in a single graph to see when each of us really hit our strides. I'm just about the same height now as Nate (maybe just a bit shorter?), so I apparently hit my growth spurt later.

Anyway, Reed's come a long way. Not just in height, though that's a nice, observable metric, isn't it?