The time I was able to hand deliver a karma package

Submitted by John on Tue, 10/05/2021 - 21:04

This story takes place in a Target parking lot. This particular Target is always busy (at least it was back then), and the parking lot, well I was going to try to draw what the parking lot looked like but then I realized I could just take a screenshot from Google Maps: 

An aerial view of a large parking lot near a target store, with only a few very long rows for cars

So as you can see, the parking lot is shaped like a large oval, with the short end tucking between the Target on one side and the J.C. Penney's on the other side. 

Look at those long, long aisles of parking spaces! If you didn't compromise quick and get in at the back of the lot, you could be slowly driving through a massive line of cars with no hope of a parking spot, only to turn around at the top and do it all over again. 

Usually I compromised quick because I don't mind the walk, but one day I was in kind of a hurry and I was hoping for a spot nearer the door, because I was picking up some medicine for my pregnant wife and was trying to hurry home. And the clouds parted and a shaft of light pierced down from heaven and for the most part the aisle I was in was packed with cars, but not busy, so I got in quick and then got the first or second spot, right next to the handicap spots! I mean, I literally could not believe my luck. It's the closest I've ever parked to the entrance of any big box store, ever. I went in to pick up the medicine and some chocolate. 

On my way out, the parking lot had only gotten even more busy. The whole lot was now gridlock as cars were just plonking themselves in the aisle to wait for someone to unload their stuff and get in and go, and the aisles are narrow besides and people have giant SUVs they are trying to cram into all of these little spots. It was a massive mess.

So I'm coming out of the store, and I need to cross the lane in front of the store to get to my car. 

As I am waiting for a safe moment to cross, I take in the situation. There's some folks who are loading up their bright green car and getting ready to leave. And there is a woman in a red car coming up around from the top, getting ready to go back down to try to find a spot. She's eyeing the green car spot. The green car starts backing out. The red car lady sees me trying to cross, and she waves me over to cross, but clearly that spot held by the green car was going to be hers. But, because she waited for me, another car ZOOMED up and AROUND the green car and squeezed in before she could get a chance to get that parking spot!

I looked over at her and she was so indignant, not at me, she was just gesturing at the other car that stole her spot like she couldn't believe it. It was truly a dick move because of how the other car sped up and around the green car. Instantly, I knew what needed to be done.

I walked back in front of her car for just a little bit and waved to get her attention. She gave me a quizzical look. And I made a "come follow me" gesture and I did the most ridiculous prancing dance 15 feet over to my car and pointed at it with both hands! She immediately caught on, got a huge grin, and then stopped exactly where she was at. I got in my car and backed up, making sure to block the ability of any other car to get into that space or get around me in any fashion. (Believe me, the folks coming up the aisle the other way started inching up, but I wasn't having it!)

It was a flawless execution! I backed out, blocking everything, and she turned in front of me and got my space (which was even slightly closer than the one she missed out on), and I drove off ecstatic that we pulled it off!

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.