Month: November 2021

Foodsaver Expandable Bags — Usage Trick

I ordered the Foodsaver expandable bags to freeze our turkey. They’re serious about the extra space at the end of the bag so you can get the pleats back together; but, even following their instructions, this is almost a three person operation!

I came up with a trick — once you get a side pleated, use binder clips to hold the side together (I used two clips). Then get the other side tucked and use binder clips to hold it in place. Now that it’s all held together, slide the clips to ensure you have enough plastic to fit into the vacuum sealer. Seal it up. And again. I moved the plastic out a bit and double-sealed another line. And a third … because it would really suck to ruin a huge bag of food like this!

Turkey Injection Sauce

I got this injection sauce from a Bearded Butcher video — it’s a maple/butter based sauce that we used with a smoked turkey. Delicious!

Ingredients

  • 1 cup unsalted butter
  • 1 cup maple syrup
  • 1-2 tbsp … well, they use their seasoning. I used this Magic Dust that looked good

Melt the butter, whisk in the maple syrup, then whisk in the powdered seasoning. Inject it, baste it on, etc. It thickens up as it sits, and I needed to toss the container in the microwave for 30 seconds a couple of times while I used it.

We soaked the fresh turkey in brine (about 2 lbs of salt in 2 gal of cold water) after butchering it — 3AM on Thursday through about 4PM on Saturday — injected it with the butter/maple sauce, then smoked it for hours until it was cooked.

Magic Dust BBQ Seasoning

This is based on a recipe from Mike Mills — who owned a BBQ joint in Illinois — that I used with the turkey injection sauce.

Ingredients:

  • 1/2 cup paprika
  • 1/4 cup salt
  • 1/4 cup maple sugar
  • 2 tbsp ground mustard seed
  • 1/4 c chili powder
  • 2 tbsp ground black pepper
  • ground hot pepper flakes to taste — about 1 Tbsp for me

I ground the mustard seed and black peppers in the mortar. My maple sugar had some hard lumps, so I tossed the mustard, pepper, and maple sugar into the mortar and broke up the chunks. Then I threw everything else in and ground it around a bit.

To ensure the whole spices were well ground, I passed the mixture through a flour sieve and returned anything that didn’t pass through the screen to the mortar to be ground again.

In the end, I had a nice powder (although it’s kind of salty!)

Another Pumpkin Pie

We grew a lot of pumpkins this year, so I was able to use fresh, homegrown pumpkin for the pie!

Ingredients:

  • 2 cups pumpkin puree (really, really smooth — blender it a lot, push it through a screen to pull out fibers. I also let it sit in the fridge for a few days and dumped off the water that separated out)
  • 3 eggs
  • 1/3 cup maple sugar
  • 1 Tbsp cornstarch
  • 1/2 tsp salt
  • 2 tsp ground cinnamon
  • 1/2+ tsp ginger
  • 1/4+ tsp nutmeg
  • 1/8 tsp cloves
  • 1/8 tsp black pepper
  • 1 cup heavy whipping cream
  • 1/4 cup almond milk

Stir all of the stuff together — it should form a smooth custard. Bake at 375F for about an hour. I used my walnut pie crust (but with almonds instead of walnuts), so I had the crust covered for the entire baking time.

Maple Cream Cheese Frosting

I didn’t use this recipe for Thanksgiving this year, but it’s another one I keep meaning to write down online so I’m not digging out an old e-mail to myself!

Ingredients:

  • 3 Tbsp unsalted butter (room temp)
  • 1 c cream cheese (room temp)
  • 1/4 c maple syrup
  • 1 tsp vanilla extract
  • 1/4 tsp salt
  • 1 tsp lemon juice

Using the stand mixer and whipping attachment — beat butter and cream cheese together until smooth and creamy.

Add in maple, vanilla, salt, and lemon. Beat for about 5 more minutes.

Walnut Cookie Crust

  • 1.5 cup pulverized walnut pieces (also works well with almonds)
  • 1 cup whole wheat flour
  • 1/4t sea salt
  • 1/4 cup butter
  • 2T sugar
  • 2 egg whites (or one whole egg)

Preheat oven to 350 degrees F.

Put walnuts into a food processor and pulverize – not just powdered, some 1/8″ pieces should remain.

Measure 1.5 cups of pulverized walnuts. Combine with flour, salt, and sugar.

Melt butter. Using a fork, cut the melted butter into the dry ingredients. Add egg whites and cut together until evenly moist.

Press dough to the bottom of a pie or tart plate (can be lined with parchment – makes removing the pie a LOT easier). Cook for 15 minutes. Crust should be crunchy and brown.

Maple Whipped Cream

I’m saving a few recipes we used this Thanksgiving

Ingredients:

  • 1 cup heavy whipping cream
  • 2 T maple syrup
  • 1 tsp vanilla extract

Put the whipping bowl into the freezer a few hours ahead of time so it’s really cold. When ready to whip, combine cream, maple, and vanilla. Whip — Anya likes to shake it in a jar or use the old-school hand-cranked spinny beater. I prefer a firm peak — when you see peaks and valleys formed as the beater moves through the cream & picking up the beaters leaves behind a little mountain of whipped cream.

Python List Joining

I’ve seen lists joined with a delimiter like this before:

strDelimiter = “\n”
strDelimiter.join(listOfStuff)

But it seems silly to allocate memory just for the delimiter … not a big deal from a resource perspective, and probably using the delimiter variable is more comprehensible in the future … but I’ve always wondered if you couldn’t just use a static string with the join method. Turns out you can —

msgContent.attach(MIMEText(“\n”.join(listOfStuff), ‘plain’))

 

Reducing Customer Service Calls Wait Time

As we finally managed to get through the Chase IVR only to be told that the expected wait time is ten minutes … in addition to the eight minutes we’ve already spent trying to convince their IVR that we didn’t need to pay our bill or check out balance, I wonder how feasible it would be to drop the caller into the CS rep queue when the call is first answered, let them spend some of their hold time telling the IVR what exactly they need (possibly moving their placeholder to another queue if, say, they seem to want tech support and not general CS), and either deleting the placeholder because the caller’s problem actually got resolved by the computer or adding a “ready to talk” attribute to the placeholder so the call is ready to transfer out to the next available agent. Bummer that I haven’t done IVR call route development in decades because I’d love to prototype that logic and see if it actually works (it’s possible we’d just end up with hundreds of pointers to people who are still navigating the IVR instead of actually reducing wait times).

Exporting Microsoft Stream Transcripts with Timecode URLs

I’d created a couple of quick code snippets to export Microsoft Stream transcripts & someone asked if you could include a way for users to click on a hyperlink and pop into the video at the right spot for the line in the transcript they clicked. Seemed like a good idea — I’ve searched though my meeting transcript & now I want to see/hear that important part in the original video.

The method I’m using to grab the transcript text actually grabs a LOT of information that’s thrown into an object being called ‘t”:

I was only using t.eventData.text to build my transcript. What do you need in order to create a jump-to-this-timecode URL for a Stream video? I had no idea! Luckily, MS supplied an easy answer — if you share a video, one of the options is to start the video at a specific time. If you pass in “st” (which I assume stands for ‘start time’) and the number of seconds ( (17 * 60) + 39 = 1059, so the 17:39 from my video matches up with 1059 seconds in the st)

We still need the unique ID assigned to the video, but … I’m exporting the transcript from MS’s Stream site, which includes the ID in the URL. So I’m able to use window.location.href to get the URL, then strip everything past the ? … now I’ve got a way to create timecoded links to video content. I just need to glom that into the code I am using to export the transcript.

Question is … how to display it to the user? Clicking on a link for 1059 seconds doesn’t really mean anything. If I were doing this at work, I might pass the number of seconds through a “pretty time” function to convert that number of seconds back into hour:minute:second format so the user clicks on 17:39 … but, as a quick example, this builds hyperlinks with the integer number of seconds as text:

var strURL = window.location.href;
strURLBase = strURL.substring(0, strURL.indexOf('?'));

var arrayTranscriptionLines = window.angular.element(window.document.querySelectorAll('.transcript-list')).scope().$ctrl.transcriptLines.map((t) => { 
	var strTimecodeURL = '<a href="' + strURLBase + '?st=' + t.startSeconds + '">' + t.startSeconds + '</a>'
	return strTimecodeURL + "&nbps;&nbps;&nbps;&nbps;" + t.eventData.text;
});
console.log(arrayTranscriptionLines);

I might also just link the transcript text to the appropriate URL. Then clicking on the text “I want you to remember this” would jump you to the right place in the video where that line occurs:

var strURL = window.location.href;
strURLBase = strURL.substring(0, strURL.indexOf('?'));

var arrayTranscriptionLines = window.angular.element(window.document.querySelectorAll('.transcript-list')).scope().$ctrl.transcriptLines.map((t) => { 
	var strResult = '<a href="' + strURLBase + '?st=' + t.startSeconds + '">' + t.eventData.text + '</a>'
	return strResult;
});
console.log(arrayTranscriptionLines);

And we’ve got hyperlinked text that jumps to the right spot: