I recently reinstalled my Ubuntu server (16.04 LTS) and wanted to set up the customary unix mail handing stuff so that my cron, temperature monitoring, and hard drive monitor scripts could automatically email me of anything went wrong. In the past I’ve used mandrill and sparkpost for this, but free services like these keep getting more and more difficult and persnickety to use, most-recently demanding things like opt-out/unsubscribe links in the emails and adding a privacy policy to the website (despite there not actually _being_ any website). So I wanted to see if it was easy to send email via Gmail’s SMTP interface.

I followed two nearly-identical guides:

  • http://www.havetheknowhow.com/Configure-the-server/Install-ssmtp.html
  • https://help.ubuntu.com/community/EmailAlerts

Basically, you need to install the ssmtp package, then edit the ssmtp.conf configuration file:

sudo apt-get install ssmtp

# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#root=postmaster
root=MyEmailAddress@gmail.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
#mailhub=mail
mailhub=smtp.gmail.com:587

AuthUser=MyEmailAddress@gmail.com
AuthPass=MyPassword
UseTLS=YES
UseSTARTTLS=YES

# Where will the mail seem to come from?
#rewriteDomain=
rewriteDomain=gmail.com

# The full hostname
#hostname=MyMediaServer.home
hostname=MyEmailAddress@gmail.com

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES

If you have two-factor (2FA) authentication set up for your Google account, you need to create an "app password" for this "device". Visit this page to create an app password that doesn't use 2FA auth: https://myaccount.google.com/apppasswords

However, there is a problem with those two guides, specifically in the hostname= line. If you put your actual email address as the hostname entry, then google will complain when you try to connect. You can use this test command to see what is going on:

$ echo "Hello 1" | sudo ssmtp -vvv someone@example.org
[< -] 220 smtp.gmail.com ESMTP j76sm1853421ioi.14 - gsmtp
[->] EHLO MyEmailAddress@gmail.com
[< -] 501 5.5.4  https://support.google.com/mail/?p=helo j76sm1853421ioi.14 - gsmtp
ssmtp: Cannot open smtp.gmail.com:587

What you need to do is to set hostname=localhost in the ssmtp.conf file. Then it should work fine.

From a new page on my non-blog website (https://www.mbeckler.org/textures/):

Around 2010 my backup hard drive started to fail. The filesystem became corrupted and unrecoverable. I used a tool called PhotoRec that would search through the raw blocks of a hard drive, looking for the “magic numbers” at the start of common media files like JPG files. Those files, without their filesystem information such as original filename and directory structure, were randomly named and placed into a single folder. Fortunately I could use the EXIF data stored in most JPG files to extract the date and time when the photo was taken, and write a little script to sort the folders by year and month.

As part of the process of recovering my photos, I found several thousand small texture images. I have no idea where they came from, or why they were on my failing backup hard drive. That drive had contained a decade’s worth of computer backups from our computers and the computers of friends and family, so maybe there was some application that used all these textures? It’s a mystery. Anyway, I thought I’d post them here in case they might be useful for someone.

See these mysterious textures here: https://www.mbeckler.org/textures/

I recently started uploading photos to google photos, and it’s seemed to be pretty solid so far. However, when I’m trying to organize photos into albums by date (like wedding photos or vacation photos), the photo search seems to be a total failure!

Here are two photos taken in the same minute of the same day during our vacation to Hawaii:

It looks like Google Photos properly parsed the photo metadata (EXIF tags) and recognizes that both photos were taken on October 7, 2012 (which they were). However, when I search in Google Photos for “October 7, 2012” or “October 2012”, one of those photos does not show up anywhere!?!

Even weirder, is when I search for the original filenames, only one of these photos shows up!

Any ideas? My only thought is that since I uploaded all these photos the system is still trying to process all the images in the background and the search indices haven’t been updated?

A few weeks ago we packed up a bunch of meals to be frozen, then thawed and dumped into the slow cooker to simmer all day while we’re at work, ready to eat when we return. Today’s meal was a delicious Split Pea Soup.

This recipe is relatively simple to prepare. In a gallon freezer zip bag, freeze the following:

  • 1 pound dry split peas
  • 2 cups bacon, cooked and diced
  • 1 onion, diced
  • 1 cup celery, diced
  • 2 cups carrots, chopped
  • 3 cloves garlic, diced
  • 1/2 teaspoon cloves
  • 2 bay leaves

When the big day arrives, thaw the frozen bag overnight in the refrigerator.

In the morning, add the thawed contents to the slow cooker, plus four cups of chicken or vegetable broth.

Cook on low for 7-8 hours.

(side note: every time I hear the term “pea soup” I always think of this scene from The Rescuers Down Under… what a great movie!)

Really delicious soup for the winter. I think we got this recipe from our CSA one year.

Servings: 8
Prep: 15 mins
Cook: 35 mins
Total: 50 mins

Ingredients:
1/4 cup unsalted butter
2 sweet dumpling squash, peeled, seeded, chopped
1/2 cup onion, cleaned and chopped
1 pound carrot, chopped
1 teaspoon dried thyme
1 teaspoon dried sage
4 cups chicken or vegetable Stock
1 1/2 cup apple cider, divided use
6 tablespoons whipping cream
Salt
1/2 cup sour cream
Chive, chopped for garnish, optional

Directions:
Melt butter in heavy large sauce pan.
Add onion, squash, carrot and saute until softened.
Stir in thyme, sage, stock and 1 cup of cider.
Bring to boil.
Reduce heat to medium low, cover and simmer until veggies are tender, about 30 minutes.
Puree.
Mix in cream.
Season to taste with salt.

Meanwhile, in a separate saucepan, reduce remaining cider to 1/4 cup.
Cool.
Mix together cider and sour cream.

Serve soup, adding a drizzle of cider cream and a sprinkling of chopped chives on top of each bowl.

From our friend MegD

Ingredients:
1 can shopeg corn
1 can pinto beans (drain)
2 cans black eyed peas (drain)
1 each: red, yellow, green pepper
1/4 onion
1 1/3 c sugar
3/4 c vinegar
1/4 c vegetable oil

Directions:
Dice vegetables into 1/4″ cubes.
Mix corn, beans, pepper, and onion. Add oil, mix.
Mix-in sugar and vinegar, be sure to evenly distribute.
Eat with chips. Keep refrigerated. Enjoy.

Fantastic tomato soup for using up all those CSA tomatoes… I usually scale-up the recipe by 2, 3, 4, or even 6x. We always freeze some to save for those cold dreary January days when a fresh blast of summer veggies tastes just super delicious. My mom loves this recipe too, and recently said that she can’t eat the canned soup anymore since this is just so much better.

Prep: 20 min
Cook: 20 min
Cool: 10 min
Makes: 4 side-dish servings

Ingredients:
3 medium tomatoes, peeled and quartered (it’s a huge pain to peel them, so I don’t)
1.5 cups water
0.5 cup chopped onion (1 medium)
0.5 cup chopped celery (1 stalk)
1/2 of a 6oz can of tomato paste
2 Tbsp snipped fresh cilantro or basil
2 tsp instant chicken bouillon granules (I guessed that 1 cube is about 1 tsp)
1 tsp sugar
A few dashes of hot pepper sauce like Franks (I skipped this when I made it)
Snipped fresh cilantro or basil (for garnish when serving, optional)

Directions:
Seed the tomatoes if you want.
In a big pot combine tomato, water, onion, celery, paste, cilantro/basil, bouillon, sugar, and hot pepper sauce.
Bring to boiling; reduce heat.
Simmer, covered, for about 20 minutes or until celery and onion are tender.
Remove from heat, cool 10 minutes.
Blend the soup in the blender or food processor.

From my friend Jake.

Waffle Cookies
Makes: 12
Difficulty: Easy

Ingredients:
1/2 cup butter
1 cup sugar
2 eggs
1 tsp vanilla extract
1 1/4 cup flour
1/4 cup unsweetened cocoa powder
1 tsp baking powder
1/2 tsp salt
1/2 tsp ground cinnamon

Directions:

Combine using the creaming method.

Bake using waffle iron.

(Recipe from http://buddingbaketress.blogspot.com/2011/12/gingerdoodles-or-snickersnaps.html)

Snickerdoodle Dough
1/2 cup shortening
3/4 cup granulated sugar
1 egg
1 tablespoon vanilla
1 1/2 cups all-purpose flour
1/2 teaspoon baking soda
1/4 teaspoon salt
1 teaspoon cream of tartar
1 tablespoon cinnamon + 3 tablespoons granulated sugar for rolling cookies in

Cream together shortening and sugar. Add egg and vanilla and mix well, until creamy. Add flour, baking soda, salt, and cream of tartar and mix until combined. Dough will be a little of crumbly, but it’ll come together when you roll it into balls.

Combine cinnamon and 3 tablespoons of sugar in a small bowl and set aside for rolling dough in.

Gingersnap Dough
3/4 cup shortening
1 cup granulated sugar
1/4 cup molasses
1 egg
2 cups all-purpose flour
2 teaspoons baking soda
1/4 teaspoon salt
1 teaspoon cinnamon
1 teaspoon cloves
1 teaspoon ginger
1/4 cup granulated sugar for rolling cookies in

Cream together shortening and sugar. Add molasses and egg and continue beating. Add flour, baking soda, salt, cinnamon, cloves, and ginger and mix until combined, scraping down the sides of the bowl as needed.

Put 1/4 cup sugar in a small bowl and set aside for rolling dough in.

Preheat oven to 350°F. Lightly grease baking sheets with no-stick cooking spray and set aside.

Roll a small amount of gingersnap dough into a ball and toss in granulated sugar. Roll a small amount of snickerdoodle dough in a ball and toss in cinnamon-sugar.

Place both doughs together and gently roll or squeeze together (it worked best if I kneaded the snickerdoodle dough in my hand a few times before rolling both doughs together since it’s a thicker consistency).

Place on baking sheets and bake for 9-11 minutes. Remove from oven and allow to cool on baking sheets for 2 minutes before moving to cooling racks.

This is one of my favorite passages from Cryptonomicon, which I think about every time I see a machine struggling with its task.

Now when Bobby Shaftoe had gone through high school, he’d been slotted into a vocational track and ended up taking a lot of shop classes. A certain amount of his time was therefore, naturally, devoted to sawing large pieces of wood or metal into smaller pieces. Numerous saws were available in the shop for that purpose, some better than others. A sawing job that would be just ridiculously hard and lengthy using a hand saw would be accomplished with a power saw. Likewise, certain cuts and materials would cause the smaller power saws to overheat or seize up altogether and therefore called for larger power saws. But even with the biggest power saw in the shop, Bobby Shaftoe always got the sense that he was imposing some kind of stress on the machine. It would slow down when the blade contacted the material, it would vibrate, it would heat up, and if you pushed the material through too fast it would threaten to jam. But then one summer he worked in a mill where they had a bandsaw. The bandsaw, its supply of blades, its spare parts, maintenance supplies, special tools and manuals occupied a whole room. It was the only tool he had ever seen with infrastructure. It was the size of a car. The two wheels that drove the blade were giant eight-spoked things that looked to have been salvaged from steam locomotives. Its blades had to be manufactured from long rolls of blade-stuff by unreeling about half a mile of toothed ribbon, cutting it off, and carefully welding the cut ends together into a loop. When you hit the power switch, nothing would happen for a little while except that a subsonic vibration would slowly rise up out of the earth, as if a freight train were approaching from far away, and finally the blade would begin to move, building speed slowly but inexorably until the teeth disappeared and it became a bolt of pure hellish energy stretched taut between the table and the machinery above it. Anecdotes about accidents involving the bandsaw were told in hushed voices and not usually commingled with other industrial-accident anecdotes. Anyway, the most noteworthy thing about the bandsaw was that you could cut anything with it and not only did it do the job quickly and coolly but it didn’t seem to notice that it was doing anything. It wasn’t even aware that a human being was sliding a great big chunk of stuff through it. It never slowed down. Never heated up.

In Shaftoe’s post-high-school experience he had found that guns had much in common with saws. Guns could fire bullets all right, but they kicked back and heated up, got dirty, and jammed eventually. They could fire bullets in other words, but it was a big deal for them, it placed a certain amount of stress on them, and they could not take that stress forever. But the Vickers in the back of this truck was to other guns as the bandsaw was to other saws. The Vickers was water-cooled. It actually had a fucking radiator on it. It had infrastructure, just like the bandsaw, and a whole crew of technicians to fuss over it. But once the damn thing was up and running, it could fire continuously for days as long as people kept scurrying up to it with more belts of ammunition. After Private Mikulski opened fire with the Vickers, some of the other Detachment 2702 men, eager to pitch in and do their bit, took potshots at those Germans with their rifles, but doing so made them feel so small and pathetic that they soon gave up and just took cover in the ditch and lit up cigarettes and watched the slow progress of the Vickers’ bullet-stream across the roadblock. Mikulski hosed down all of the German vehicles for a while, yawing the Vickers back and forth like a man playing a fire extinguisher against the base of a fire. Then he picked out a few bits of the roadblock that he suspected people might be standing behind and concentrated on them for a while, boring tunnels through the wreckage of the vehicles until he could see what was on the other side, sawing through their frames and breaking them in half. He cut down half a dozen or so roadside trees behind which he suspected Germans were hiding, and then mowed about half an acre of grass.