Impossible Sliders: Try 'em!

My wife and I are road tripping around the country with our dog. I am so tired of driving and ready to be back home, but that's another story for another time.

Anyway, this week we find ourselves in Chicago. And what does Chicago have? White Castle! And what does White Castle have? Impossible Sliders!

So let's talk about Impossible Burger! I've been wanting to try these for a while now. A hotel near our home in Miami sells them, and my wife has had one. But I didn't get the chance -- whenever I've tried to go, we end up eating somewhere else because the weather won't cooperate or because the place is too busy.

I stopped into the nearest White Castle and picked up a sack of Impossible Sliders yesterday and brought them home. With cheese (smoked cheddar) for me, without for my wife. Verdict: These things are good! They don't taste like White Castles -- you're not going to have horrible onion burps after.

They sort of taste like meat. It's very close. I can taste the iron in it. It's almost a forward note flavor more so than in a real hamburger. Or maybe some people can taste that in a real hamburger and perhaps I just don't notice it.

They look very much like meat. They look perhaps a bit more dry than your average hamburger patty.

And the flavor verdict is: pretty darn good. It scratches the itch. It tastes less veggie than any other veggie burger I've had (and I've had many). We would definitely order these again.

I believe the meat is actually sold loose or in blobs, like ground beef, and that it's up to restaurants to form them into patties. So that makes me want to try an Impossible Burger at a fancier sit down restaurant, to see if any difference in preparation makes for a difference in flavor.

But if you're curious, and you want a try these out cheaply, White Castle is the way to go!

How to telnet from OS X

Why in the heck does Apple's High Sierra version of OS X lack a telnet client? It smells like they removed it for "security" reasons but without it, how am I supposed to poke at an SMTP server to manually test mail server things in my life as an email geek?

Thankfully, there's "nc" to the rescue. nc (or netcat) has a very fine man page that suggests it can do more than telnet does and that it's easily scriptable. I don't know if I care about that, but I do care about this:

$ nc 25
220 ESMTP Postfix (Ubuntu)
221 2.0.0 Bye

Smells like a good enough replacement for telnet as far as I'm concerned!

How do I use OpenDKIM with multiple domain names on a single postfix server?

There's this guide, but it's kind of a pain in the ass. Too much heavy lifting for my tastes.

Here's a hacker trick nobody seems to mention online: In your opendkim.conf file, where you specify the domain, you can include multiple domains here, separated by commas.

Instead of
Just put
In your opendkim.conf file.

Upside: Super easy.
Downside: All domains have to share the same DKIM key, because there's only one DKIM key setting in opendkim.conf.

It works fine. Though you specify the domain name when creating a DKIM key, there's nothing in the key that is actually domain-specific. At scale, this is insecure. At the hobbyist level, where I've got three domains running on my one server that send a grand total of 50 emails a day, it's not a concern.

You can also put an asterisk (*) to wildcard the domain setting in opendkim.conf. However, I don't recommend this, because it will try to sign all mail for any domain, without checking to see if a DKIM public key actually exists for that domain. So if you send or forward any mail at all for any other domain, that mail will end up with a broken DKIM signature attached to it. An example where this will happen and be very bad for you is mailing lists. Some mailing lists rewrite the from address to use their own domain to bypass DMARC concerns, but not all do, and some only do it sometimes. So I strongly recommend against using a wildcard here.

Amazon Prime: Is it worth it?

Amazon just announced that the price for a yearly subscription to Amazon Prime is being raised to $120. With that in mind, I decided to do some rough math to see if Prime was still worth it for my wife and I.

We do order quite a bit of stuff from Amazon, on things like "dog stuff" (food, treats, bedding, etc.), consumer electronics and accessories (iPhone/iPad cases, Chromebooks, headphones), clothes, and even coffee.

First consideration: I don't consider Prime Video much of a benefit. Maybe I should reconsider that, but that's where I am at today. A friend says she uses Prime Video in lieu of Netflix. But, Netflix has all the Marvel TV shows and I'm really into those. Amazon doesn't have those. In fact, all I've really been excited about on Amazon Prime video is Bosch, the cop show based on the books of Michael Connelly. It's quite good, but it alone might not be enough to make me pay $120/year.

Second consideration: Two-day shipping is nice, but if I could save money, I'd settle for slower shipping. Even without Prime, any purchase of $25+ gets you free shipping. Just not two-day shipping. (And sometimes the two day shipping really means three or four day shipping. And a number of smaller products are "add-ons" which means you can't buy them unless your order as a minimum of $25 in non-"add-on" things first. Both of these poke holes in the myth of "get anything delivered in two days.")

Third consideration: We've signed up for the Amazon Store Credit Card. Since we have Amazon Prime, that gets us 5% off all (or most?) purchases. So the question becomes, do we still end up net ahead even after it comes time for us to pay $120 for the next year of Amazon Prime?

I reviewed the last twelve months of Amazon store card statements to see how much we've spent. That totals up to about $4793. Let's assume that is after the 5% savings, so for calculation's sake, let's bump that up to $5046. Five percent back on that would be about $252. We've paid $100 for the year of Prime, so that means that we've saved about $152. If we had paid $120 for a year of Amazon Prime, that would have reduced our savings to $132. Either way, for now, that's still money ahead.

Verdict: We're keeping Amazon Prime. Even with the price hike, it's still advantageous for my wife and I to continue to pay for and utilize Amazon Prime, assuming our purchasing patterns stay the same, or if we increase our Amazon spend. If our Amazon spend is going to decrease, it may not be worth it. We would basically have to spend $2400 on Amazon in a year to make Prime "pay for itself" in this way, and we'd have to spend more than that to get more than $120 back in a year.

Assuming I got the math right. I could be off by a hair, if the Prime card doesn't get you 5% off of every single thing. I try not to buy from non-Amazon vendors through their platform, so that might minimize the chances of that.

Pay your bill: If you don't pay your Amazon Store Credit Card bill off in full every month, all bets are off. This card has a 27% Annual Percentage Rate (APR) which is crazy high. This would eat up any 5% savings you'd be getting. If you need to buy things on credit from Amazon, use your lowest interest rate regular credit card.

HOWTO: Play Roku TV Audio through Apple AirPods

We have a cheapo 55" 4K Roku TV that I think we bought for $398 at Wally World last year. It works well. I'm happy with it. It gets the job done. It is cheap enough, though, that the remote does not have a headphone jack, like other Roku TVs or streaming boxes have, nor does it seem to have Bluetooth support. But I found out that even without that, you can use an iPhone to stream sound from the TV to headphones connected to the iPhone. In my case, fancy new Apple AirPods that I just bought.

Here's how to stream audio from the TV to a headset:
  1. Connect (or pair) the headset to your iPhone.
  2. Make sure your iPhone and TV are both on the same wifi network.
  3. Install the "Roku" app on your iPhone.
  4. Launch the Roku app and use it to connect to your Roku TV.
  5. Click on the "private listening" button (it looks like a headset).
  6. The TV's audio will now play through your phone. Which will now play through the headset you connected in step one.
The audio might be a few milliseconds delayed, but I got over that after a few minutes. This came in very handy as a workaround for my Roku not having Bluetooth support!

It also worked much better than pairing my AirPods directly to my Apple TV. The audio dropped periodically when I tried watching TV that way. Not sure why -- my Apple TV might not be the latest model, or it's possibly just a hair too far away for the AirPods to stay connected reliably.

That's the only issue I've had with the Apple AirPods. They work great otherwise, and they are miles ahead of any other bluetooth headsets or earbuds I've tried. So much easier to pair, charge and use.

HOWTO: Cook shrimp in an air fryer

We recently got a cool new toy, something that I've wanted for a very long time: An air fryer!

What does an air fryer do? It doesn't actually fry. It is a convection oven that uses forced hot air to cook things quickly. These "air fryers" are meant to be used sort of like deep fryers; they're good for things like fries, potatoes, chicken wings, breaded shrimp, and other snacky things that you would cook in a deep fryer, if you had one. Well, I don't want a real deep fryer, because all that oil is bad for you, and it makes your home smell like a Burger King. So I've been wanting one of these things for a while. When I first started looking these up a couple years ago, I saw that that Philips was selling them for $200 -- just too expensive for me. I started looking again recently and saw that there are now some other well-reviewed ones from other brands for under $100. I ended up buying this GoWISE USA GW22639 3.7-Quart Programmable Air Fryer on Amazon for about $62. It was list price for somewhere around $70 or $80, so I ended up buying a used one (a returned one, I think) for $65, then I got an extra five percent off thanks to our Amazon card.

We've had lots of success with our GoWISE USA GW22639 3.7-Quart Programmable Air Fryer! Timing (and temps) on different foods can take some trial and error; the manual isn't very detailed, and online instructions vary greatly. But still, our first attempts at cooking food in this thing have gone very well. We did a "test case" of frozen french fries (that happened to be Dollar Tree) and they came out perfectly on the "chips" (fries) setting. We've since cooked chickpeas, chicken wings, shrimp and more in it.

Here's a short video I made showing how easy it is to make frozen shrimp.

All you do is take the frozen breaded shrimp and throw it in the pot. Make sure it evenly covers the bottom, and try to have only one layer of shrimp, if possible. The "shrimp" preset setting cooked the shrimp for 15 minutes at 330 degrees. I've also done it on the "fish" setting, which is 20 minutes at 400. That was a bit too long, and yet when done on the shrimp setting, they could have perhaps gone for a minute longer. So next time, I'll go somewhere in between.

Also, now I know how to use iMovie.

Note: The air fryer is likely not suitable for cooking either crab claws or cocaine. You have been warned.

Guns are too easy to get, thanks to the modern NRA

Karl Frederick, NRA President in 1934, during congressional hearings on the National Firearms Act (which the NRA supported) testified "I have never believed in the general practice of carrying weapons. I seldom carry one. [...] I do not believe in the general promiscuous toting of guns. I think it should be sharply restricted and only under licenses."

The NRA also supported the Gun Control Act of 1968 (GCA), which together created a system to federally license gun dealers and established restrictions on particular categories and classes of firearms.

Something changed in the 1970s. From Politico in 2014:
From 1888, when law review articles first were indexed, through 1959, every single one on the Second Amendment concluded it did not guarantee an individual right to a gun. The first to argue otherwise, written by a William and Mary law student named Stuart R. Hays, appeared in 1960. He began by citing an article in the NRA’s American Rifleman magazine and argued that the amendment enforced a “right of revolution,” of which the Southern states availed themselves during what the author called “The War Between the States.”
At first, only a few articles echoed that view. Then, starting in the late 1970s, a squad of attorneys and professors began to churn out law review submissions, dozens of them, at a prodigious rate. Funds — much of them from the NRA — flowed freely. An essay contest, grants to write book reviews, the creation of “Academics for the Second Amendment,” all followed. In 2003, the NRA Foundation provided $1 million to endow the Patrick Henry professorship in constitutional law and the Second Amendment at George Mason University Law School.
This fusillade of scholarship and pseudo-scholarship insisted that the traditional view — shared by courts and historians — was wrong. There had been a colossal constitutional mistake. Two centuries of legal consensus, they argued, must be overturned.
It's time for something to change.

Chicago highlights why gun control doesn't work? No.

I lived in Chicago for just under ten years. I love the city, and I consider it my adoptive home town. One thing I heard over and over, usually from people that didn't live there, was that Chicago was the perfect example of how gun control doesn't work. Guns are banned, but gun crime happens. Often. What it actually tells us is that gun control requires a comprehensive, nationwide policy or it will not work. This pro-gun blogger points out data that says that the majority of traceable guns used in crime in Chicago came from straw purchases. He's right that we do need to prosecute straw purchases better -- but we also need to better prevent those purchases to begin with. The process is just too easy today, and there are too many idiots who will buy guns and give them to other idiots. Including my now-deceased father, who wanted me to buy a particular gun for him, after he was denied its purchase due to having a restraining order against him (if I recall correctly).

Indiana and Wisconsin are an easy drive from Chicago. Friends today in Chicago drive to Indiana just to buy cheaper cigarettes. Of course people are going to do the same to avoid a localized attempt at gun control. It's too easy to get around the rules.

No, the real problem with Chicago and guns is "all those young urban thugs."

False. All the mass school shootings and mass workplace shootings that I know about seem to have been perpetrated by white people, not people of color.

The real problem for somebody in Texas who complains about "urban thuggery in Chicago" isn't worth unpacking here. Let's instead focus on the problem of crime in the poor inner city. This is driven by poverty in the inner cities caused by racism and inequality of opportunity and inequality of infrastructure. Bad schools and no other options. Born into poverty means you're likely to live your life in poverty. Here's one example of how providing access to better schooling and social programs can help to break that cycle.

Let's stop school shootings by arming teachers!

There are a million reasons why this is a dumb, but here's one reason I've rarely heard anything about: Some of those teachers will be people of color, and cops today aren't necessarily all that kind to people of color who carry firearms legally. Just ask Philando Castile. Teachers who are people of color would be scared shitless (and rightly so) if they ever got pulled over for anything at all by the police, while traveling to and from school with their (legal or perhaps even legally mandated) guns. What could go wrong?

Why not call out the car manufacturers for making these killing machines?

Inevitably the argument turns to cars and how they kill more than guns. Even though the numbers are roughly equal, people say that it's fair to pull out numbers for suicide-by-gun, "and it would appear that traffic fatalities, in sheer number, are a much greater blight upon America than non-suicide gun deaths."

Except that we, as a nation, have vastly improved automobile safety over the last fifty years. This article shows some of the highlights. We've tried very hard to make cars safer, and we require training and licensing (and re-licensing!) for anyone who wants to drive a car. We restrict car usage, making it illegal to use without a license or while under the influence of alcohol.

OK, we've called out cars to try to make them safer. Now let's do the same with guns.

Drinking on a budget: Dollar Tree martini glasses!

We had a very nice set of (I think) six martini glasses, some well-known brand, that we bought as a set perhaps somewhere around five years ago. Every year or so, I accidentally break one of the glasses by dropping it, or the dishwasher decides it's time to crack one of them. So now I'm down to one and it was time to restock. But, I'm on a budget here in Miami. The solution: Dollar Tree!

What could be simpler? They look great. They hold as much as our previous martini glasses, though they look a tiny bit smaller. They also seem a bit sturdier as far as glass and stem thickness. They clean up very nice in the dishwasher. And they're only a dollar each. I'm sold!

I think we're not the only ones sold on Dollar Tree martini glasses. We went to a very famous local restaurant recently, one known for crab claws, and they served us a round of cocktails in glasses that looked suspiciously like these ones. Can't say that I blame them, especially if these are sturdier than average.

Linux: Redirecting or Silencing Script Output

I've been writing shell scripts on *nix systems for more than twenty years. You'd think that by now I'd have this memorized, but I don't. Since I'm tired of looking it up every time, I'll post this here so that it can help jog my memory next time around.

Repeat after me: redirecting stderr and stdout is easy.

To run your script while silencing any and all possible output, execute it like this:
./ > /dev/null 2>&1

To silence it only when it runs via cron, to make it not send you an email after it runs, put it in your crontab like this:
0 5 * * 1 /home/aiverson/ > /dev/null 2>&1
(all on one line)

If you're running a command inside a script and you want to capture both possible errors and standard  output in the same way, so that you can parse it easily, do this:
OUTPUT=`lynx -dump "http://website" 2>&1`
If you don't add the 2>&1, any error message returned by lynx is sent to the active window running your script, instead of into the $OUTPUT variable.

Linux: Scraping web output with wget

This is probably a tip that smarter folks than me know already, but I just ran into this today and decided I'd write it down for future reference.

I'm writing a simple unix shell script that scans the web interfaces of a bunch of internal servers, looking for a specific error message. Very light touch, fairly simple stuff.

Lots of simple stuff like this:
lynx -source "" | \
grep "error code"

It turns out that the server I need to install this on doesn't have lynx installed. It does have wget, however. But wget defaults to dumping the output into a file instead of to standard output, which is annoying when you don't actually care about saving the output.

Unless you do it like this:
wget -qO - "" | \
grep "error code"

That makes these two bits of sample code (one with lynx, the other with wget) work exactly the same way. The "q" flag is to quiet wget's normally verbose output, and the "O -" flag is telling wget to dump the output to stdout ("-") instead of to a file.

Which one is faster? In my entirely non-scientific testing, lynx seems to be faster. My suggestion is that if you can, test. Or just use lynx if your system has it installed (or if it can be installed), and use wget as a backup only. (And I didn't even really get a chance to test curl. Sorry!)

For now, I've got a solid workaround to get my script to work on a server that doesn't have lynx and where I'm not an administrator.

Thus ends today's lesson in stupid shell script tricks.