It's a hot one

Submitted by John on Sat, 06/19/2021 - 07:19

It's been so hot for the past couple of weeks. But even worse than the hot, it's absolutely refused to rain for quite some time.

We got a hose to water the decorative grass and it's too short, and the water pressure at the front of the house doesn't allow for a decent sprinkler (still have to figure out why that is, the easy answers are not the answers), so the plants by the front of the house are working fine and the plants on the edge of the yard are looking rather bedraggled.



Submitted by John on Sun, 12/27/2020 - 00:00

We're moving in a few months, and as soon as we made the decision, my stress level went through the roof. So to cope with it, I decided to make a plan and map everything out. I have a few different areas of the house that I'm responsible for, so I listed them all out. Got pretty granular, and divided the garage and basement into zones, and everything.

Based on the number of zones (20) I allocated around two hours a day, and two days worth of work to each zone. Spread all of the work out over the course of two months, and leave 20 days of "just work on the rest of the house" days.

Based on how much I got done today, I think I'm already behind. Ugh.

Gravy Theory

Submitted by John on Mon, 08/24/2020 - 13:27

I made some emergency gravy earlier this week and posted about it on Twitter. That got me thinking of writing down my "theory of gravy" and how I make it. This is not going to be a traditional recipe, as much as it's going to be a series of guidelines on how I make gravy. Hope you enjoy it.

What equipment do you need to make gravy? You need a pan of some sort. And a whisk. 

Gravy is a combination of four things:

  • An oil
  • A liquid
  • A thickening starch
  • Spices / flavorings / possible other additions (little bits of mushroom, for example)

Let's discuss the most flavorless gravy of all time:

  • Use flavorless vegetable oil
  • Use water
  • Use white flour
  • No spices

You will get bland goop. Some recipes call for bland goop, and I've been told some folks love it, but I am not a fan. Let's replace these flavorless ingredients with flavorful ingredients and see where we get.

Good oils to use:

  • Butter
  • Bacon grease
  • Roast meat drippings

Good liquids to use:

  • Again, roast meat drippings
  • Broth
  • Milk
  • Sometimes wine, or wine for a portion of the gravy (be careful of cooking wine, which might have too much salt in it. Don't add more than a small splash of salted wine to your gravy.)

Good spices / additions (pick some of these from this list):

  • Thyme
  • Rosemary
  • Pepper
  • Garlic or onion powder
  • Chopped shallots
  • Tiny bits of mushrooms
  • MSG
  • Small amounts of vinegar (like, a capful)

Good starches:

White flour (I use this 99 percent of the time)
Freshly ground whole wheat flour (also works well)
Corn starch (I have very little experience with this)

How much of each ingredient?

In general I aim for a 50 percent water 50 percent oil situation, with just enough starch to thicken it to the right consistency.

NEVER add salt. Salt will intensify and concentrate, many of the ingredients (salted butter, broth) will already have salt in them.

Secret knowledge

Lets talk about food. You heat it up, and different parts of the food will turn into flavors. Some flavor components dissolve and become accessible in water. Some flavor components dissolve and become flavorful in acid, like vinegar or lemon juice. And some flavor components will only dissolve and open up in the presence of alcohol. If you really want to go all out, add a tiny splash of vinegar, and a tiny splash of white or red wine to your gravy when you add in the main liquid.

How do I get rid of lumps?

I have no idea because I don't give a shit about lumps. "Lumps in gravy" looks to me like some shit that someone made up to make other people feel guilty or inferior about their cooking. But hey, maybe you have a hangup about lumps. So if you really care about gravy lumps, my advice is to figure out how to make it taste good first, then google someone else who can give you instructions about avoiding gravy lumps.

Emergency Gravy

This is gravy from scratch, without any roast meat drippings.

  • Butter (or bacon grease)
  • Chicken Broth (or beef broth, or vegetable broth)
  • Flour
  • Dried thyme or cracked rosemary
  • Freshly ground black pepper

Get chicken broth ready ahead of time in a cup near the stove. At least one cup worth. Once you run out of broth you can use a little milk. Or wine if you have it. (If you run out of broth and need to thin the gravy you can use water, but you'll have watery gravy.)

Melt your butter but don't burn it. I usually have the stove on the lower side of medium.

Dump in a fair amount of flour, and start mixing right away with the whisk. If I have 4 tbsp of butter, maybe 1-2 heaping tablespoons of flour. I just eyeball it, I dunno.

Anyway, just start whisking and it will form a thick paste. Now quickly and smoothly add a small bit of broth. Do not stop whisking. The water will loosen up the paste. It will feel loose, then it will thicken up again. Add a small bit of broth again, it will loosen, and thicken. Do not stop whisking. Keep adding liquid, a small bit at a time, until the gravy is at the desired consistency.

At any point in the above process, add some dried thyme, cracked rosemary, and/or ground pepper. Putting it in with the melted butter is best but often I forget and it usually winds up fine anyway.

Roast chicken or turkey gravy

Okay, so you have roasted your bird. And you have some leftover drippings, and you don't want them to go to waste. What next?

This is what I do. I usually make the gravy with all of the drippings, but maybe you have a massive amount of drippings and only want to use some. Whatever. Maybe you don't have enough drippings because you just know you don't from eyeballing it, that's fine.

Assemble butter, flour, and broth. Again, any fresh or dried herbs, and also have your pepper grinder at hand.

Either decant drippings into a medium sized saucepan, or, depending on how you roasted your bird or meat, you can make gravy right in the pan you roasted the meat in.

Get those drippings lightly simmering over a medium low heat. Taste. This is a good time to add herbs, ground pepper, and/or a capful of vinegar and a splash of wine.

Are the drippings very very heavy on the fat? Then you'll roughly proceed as with emergency gravy above.

But maybe they are more watery than oily. In this case, whisk and slowly add flour to thicken. With emergency gravy, make paste with all flour and oil, then add water to consistency. But with most drippings, you'll be adding flour to thicken it.

Now, this is usually where I get the lumps in. I'm terrible at evenly sprinkling the flour so I don't get lumps. I just keep whisking and don't bother with the lumps, personally.

If you accidentally add too much flour and it gets too thick, cut off a few pats of butter, and add a little chicken broth or milk to the gravy in progress, and get it back to the right consistency.

I cooked meat in a pan and it has all of these wonderful browned bits and now I want mushroom gravy

Remove pan from heat. Be honest: are those wonderful browned bits, or did they get a little blackened? If you cooked your meat at too high of a temp and the browned bits have verged on burned bits, don't make gravy with it.

Those browned bits are called "fond" by the way.

Anyway your pan is off the heat, right?

Chop up your shallots, and your mushrooms. Figure out what oil you will use for the gravy. This is a case where you could use a neutral vegetable oil if you don't want a very buttery gravy, because the fond will be providing so much flavor. Also you can use water here, because you will be making a broth out of the fond. But also be ready with some chicken or beef broth (or light white wine) for adjustments as you go. Get your flour out.

Heat up your pan again. Pour in a bit of oil, and the mushrooms and shallots. Let them sit in the oil a moment, then quickly, before the fond starts to brown any further, add a half a cup or so of water (or wine, or broth if you want). The goal is to dissolve all of that stuff crusted on the bottom of your pan.

Taste what you have going on. It should be watery, and you are going to simmer off some of that moisture and concentrate it. This is also the time to add any additional herbs or additional flavorings here. Add a tiny splash of vinegar as well.

If you are going for a very mushroom forward gravy, then brown the mushroom bits in some oil in a separate pan for additional flavor.

Add oil if needed. Taste, see how it's coming together. When you like it, start slowly adding flour to thicken, whisking continually.

Okay, now what?

Go find some gravy recipes. Pick an interesting one and try it. The more times you make it, the better you'll get at it. You can add more liquid or less to change up the consistency. You know the basics, so you understand what's going on.

Maruchan Tomato Flavored Ramen

Submitted by John on Sat, 08/22/2020 - 22:08

Maruchan discontinued their tomato flavored ramen in 2003. It was one of my favorite flavors, and every few years I think of it fondly. 

Last year I had an idea on how I could recreate the flavor. It involved tomato powder, but I had to buy a whole mess of tomato powder and I wasn't sure about doing that for a single test.

A few months ago, I got a dehydrator. So I dehydrated some tomatoes. I blended them, but the seeds didn't really powder, so I sifted the seeds out so I had some fine powder. The powder I made was very fresh and tomato-ey. 

My plan for a first draft was to mix some tomato powder with a chicken ramen seasoning packet. One teaspoon powder gave a vague tomato flavor. Two teaspoons were not enough. Three teaspoons was pretty close!

I think the chicken flavor was competing with the tomato though. Next step will be to recreate the actual tomato flavor packet -- going to start with a bit of MSG, a little salt, the tomato powder, and maybe some powdered oregano, powdered basil, and a smidge of citric acid perhaps?

Common film processing problems

Submitted by John on Sat, 08/08/2020 - 08:54

I found this overview of common film processing problems helpful. It's by Ilford, and it's got pictures of negatives and what they will look like for a whole host of common film development issues.

A picture of two photographic negatives side by side. The left hand one shows an under-exposed negative, the right hand one shows an under-developed negative.

This is super helpful as I attempt to come up with a new developer recipe for my 4x5 experiments. I am using caffenol, but I haven't seen much information on using caffenol with continuous agitation systems. Stock caffenol formulas are pretty well characterized for intermittent development, or even stand development, but my 4x5 setup is a rotary one.

VCDO update: delay tables

Submitted by John on Mon, 06/29/2020 - 20:27

This weekend I spent quite a bit of time working on re-writing my delay table generator. 

The 8 bit VCDO generates an audio signal by spitting out each sample of a waveform, one at a time. I do not use a timer on the chip to achieve this (maybe I should have). Instead, I manually track how many processor cycles take place every time I go through the main loop. Depending on what pitch I am trying to achieve, I delay a specified number of processor cycles (fetched from a lookup table) before moving on with the loop. 

Since the VCDO has a range of 5 octaves, and the base waveform has 256 samples, as the pitch goes up, there are physically not enough processor cycles to be able to continue to do this. At this point, instead of using every single sample in the table, I start skipping one sample in the table per run through the main loop, then skipping three, four, five, six, etc. 

Today's post is focused on the delay table.

Very early on in this process (uh, back in the mists of time), I wrote a delay table generator program. Given the number of octaves, the number of sample steps, etc, it would spit out a delay table (and a step table, remember that at the right points I have to start skipping steps so I need a lookup for those as well).

Because there are only 256 possible voltages for the full 5 volts of input range, I had to do some massaging around semitones, I wanted semitones to be in tune, but the stuff inbetween was fine if it was not. Well then there's this whole mess around do you have 4 steps between semitones or 5, because 60 semitones (5 octaves, 1 volt per octave) is not a divisor of 256. The delay table generator takes all of this into account. I wrote it in a furious fit of staying up super late in an 8-9 hour binge and by the time it was done, it was quite the mess. "But there, that's settled" I thought to myself and happily moved on. 

Well now it's a decade later. My ancient version of Visual Studio no longer runs happily in Windows 10. The community version of Visual Studio refuses to load programs off of clay tablets unless I pay Microsoft some money for a full license. I am hazy on the licensing details because I started trying to modify the delay table last September, but the full story is I said "screw it" and I started porting it to Python. I made some progress but it was rather tedious because the code was rather.... unique in terms of structure and naming conventions, as one would expect if one knew that it was completed at 3;30am in quite a state of sleep deprivation. 

The Python port started back in September.

I dusted it off again in April and started poking away at it. First step was to try to figure out what the heck was going on. In September I was taking a rather literal approach to the translation, and I was still relatively new to Python. So I wasn't even trying to understand what I wrote in C#, just trying to take each line one at a time and move it over. 

Now I know a bit more about Python.  I quickly translated the rest of the C# to python, and started trying to understand what was going on. It was slow going, and it quickly this turned into debugging, because I found quite a few bugs. Based on the print statements I put in, I don't know if these are existing bugs from the beginning of time or if they are new bugs that I put in when I did the translation to Python. 

In April, I had a vague idea of what is going on. I identified many of the bugs. I wrote (but did not finish) this blog post.

Over two months later, over this past weekend, at the end of June, I looked at it again and despaired. Because I had totally forgotten about this blog post. I also didn't leave myself any documentation about where I was at with it, or what I was in the middle of doing in any way. All I could remember is I did a bunch of refactoring right before I stopped working on it.

After much peering and poking and prodding, I determined that I had indeed finished it, and fixed all known bugs. All I had left to do was take the results and iterate through them to put them in a format that I can easily input into my assembly language source file. I got that finished.

Then, I found this nearly finished post in my drafts folder! Sure would have been easier if I would have finished the post at the time and uploaded it... ah well. I did some light editing of the text above so it all hopefully makes a bit more sense, and here we are.

Next step is a source code audit for the whole synth engine to ensure that the cycle counts are accurate. This is 98 percent complete, in terms of lines, and 75 percent complete, in terms of difficulty. (That is to say, the pieces remaining are not straightforward and there are many branches. If I can trim a few cycles off this one bit, I may be able to trim a few cycles off the main loop, which will be nice. (The fewer cycles the main loop runs at, the smoother it is in the upper registers.)

Once I have accurate cycle counts for the whole shebang, I can plug those into the delay table generator so I have accurate delay information. Then finally, I can do an end-to-end test, where I plug in the delay table, and then test the waveforms coming out of the synthesizer engine to verify that they are accurate and I didn't mess anything up.


Justice for George Floyd

Submitted by John on Tue, 06/02/2020 - 20:38

A few things on my mind.

The first is, all of this is hard to talk about. Because, I mean, who am I, right? Just some white guy. Do I really have anything to say?

I used to live in the Longfellow neighborhood and would drive by the third precinct a few times a week. But I feel like my connection to the neighborhood was more of a geographical connection, than a connection with the community. I made friends with some of my neighbors, of course, but none of the friends that I made when I lived in Longfellow were part of the black community. (I regret that, and maybe I can tell that story of how my racism has impacted my life (and made it poorer) some other time.)

Also, hello friends. I should have started with the greeting, my apologies. I hope you are doing... as well as possible under the circumstances.

I don't know what you are thinking right now. But yes I have seen the video. I've seen that video too. And the other one, and those five that were posted yesterday evening. The video of George Floyd. Videos of protestors getting beaten by cops. Videos of cops getting bricks thrown at them.

And not just the videos, but the photos. And not just the photos, but the memes. (There's a lot of it out there, maybe you've noticed.)

Again, I keep coming back to, what do I have to say? What am I bringing to the table?

Most of you know but my wife is expecting a baby, literally any day now. We are officially in overtime. So I haven't been down to Lake Street since any of this happened. As much as my heart longs to go, my truck is kinda acting up and all through the weekend my wife was having light contractions, so, no. I haven't made it to Lake Street. I haven't made it over to Cup Foods. (I haven't even made it to Cub Foods because they boarded up my Cub here in Roseville.)

But I have so many friends, acquaintances, and coworkers impacted by this. I realized earlier this evening that I have friends who live just off Lake Street. I have friends who own, and who work in businesses along Lake Street. I have friends who are protesting. I have friends who are current police officers (and former police officers). I have friends in the National Guard.

And when I am looking at all of the memes and tweets and videos the only thing I can say is...

I gotta work on me. I gotta work on ME.

I see a video of a police officer shooting a canister of tear gas directly in the face of a journalist. I am not a police officer. I do not have a tear gas cannon.

I see a video of someone setting a fire or throwing some rocks through some windows. I am not going to pick up a rock and throw it through a window. I am not going to light a fire.

So what am I doing?

I'm getting down to basics, and going through a series of YouTube videos about structural racism. I hear people talking about structural (or systemic) racism. I don't understand it.

So far the only things I think I know about structural racism, I have gleaned from watching clips of talking heads and a handful of memes. This is not enough. So I am trying to learn, and I'm specifically trying to learn from college classes streamed online. I'm trying to learn from the folks defining the terms, because I think if I'm going to be part of the conversation I need to understand the words that are being used in context.

I'm also getting down to basics. I'm seeking out sermons and articles and books by Dr. Martin Luther King Jr. I see a lot of memes of MLK, and images of MLK, and quotes from MLK. But when I started getting interested in Dr. Martin Luther King Jr. about a decade ago, I primarily listened to his sermons. And they impacted me and my faith in a way that I am grateful for. So I am working on opening up my heart and learning from one of the greats.

I'm getting down to basics. I want to do something. I'd love to drive down and help out somehow but, you know, the baby (and the other six kids) make that difficult to figure out how to make that happen. I have a friend on Twitter, every day he goes out with his two kids and some brooms and helps sweep up the glass, and I'm kind of envious and wish I lived closer, so it would be easier to leave my home and help in a concrete way. But alas. So I am doing some research into charities, local charities and national ones. And I'm going to give, as I am able, without any expectations. 

I see in my head a vision for what it means for a police officer to have peace with the community he is policing in. From where we stand here today? That peace, that peace seems so hard, so far away, it feels like it is almost going to have to be a peace that comes from God, that surpasses all understanding.

But that's the direction we gotta keep moving toward. Thanks for sticking with me and reading this whole thing.