I’m Not Saying It’s a Good Excuse

Paul Kafasis, at One Foot Tsunami:

If you’re a little heavier than you were before the start of the holiday season, you can blame it on the fact that there’s apparently an entirely new organ in your body. Scientists have just discovered the mesentery.

1Password Adds Support for Intel Secure Enclave

The great folks over at AgileBits are updating 1Password with support for Intel’s SGX Secure Enclave technology.

You might reasonably think that your data is encrypted directly by your Master Password (and your secret Account Key), but there are a number of technical reasons why that wouldn’t be a good idea. Instead, your Master Password is used to derive a key encryption key which is used to encrypt a master key. The details differ for our different data formats, but here is a little ditty from our description of the OPVault data format to be sung to the tune of Dry Bones.

Each item key’s encrypted with the master key And the master key’s encrypted with the derived key And the derived key comes from the MP Oh hear the word of the XOR Them keys, them keys, them random keys (3x) Oh hear the word of the XOR

And that is a simplification! But it is the appropriate simplification for what I want to talk about today: Some of our intrepid 1Password for Windows beta testers can start using a version of 1Password 6 for Windows that will have an extra protection on that “master key” described in that song. We have been working with Intel over the past few months to bring the protection of Intel’s Software Guard Extensions (SGX) to 1Password.

Soon (some time this month) 1Password for Windows customers running on systems that support Intel’s SGX will have another layer of protection around some of their secrets.

Having AgileBitskeep up to date on the latest security technologies is one of many reasons I use 1Password to store anything I need kept secure. If you aren’t already using a password manager, I can’t recommend 1Password enough.

The Price of Cable

Ever since I’ve lived on my own, I haven’t paid for cable. Instead, I’ve relied on internet services to provide the video content I desire1.

The other day, I was re-evaluating my subscriptions to see if there are any I should be cancelling. Note that for my budgeting purposes2, a subscription is, broadly speaking, any regularly occurring expense outside of utilities and rent, including online video services. Here are my current subscriptions (all converted to per month cost):

  • $9.00 - Amazon Prime
  • $7.92 - Backblaze online backup
  • $2.08 - Flickr
  • $15.00 - HBO Now
  • $3.75 - Hover (3 domain names)
  • $12.50 - Linode VPS
  • $6.00 - MotorTrend on Demand
  • $9.00 - Netflix
  • $3.33 - Plex Pass
  • $5.00 - PO Box (USPS)
  • $3.33 - Washington Trails Association
  • $13.00 - YouTube Red

Total subscription cost per month: $89.91.

Looking at that amount, I realized many people pay that much (or more) for cable alone. Taking just the services I’m subscribed to that provide streamed video content (marked with bold above), I’m paying $52.

Of course, it’s fuzzier than that. I originally subscribed to Amazon Prime for the savings on shipping; from my perspective, the video content is free. I pay for YouTube Red to get rid of the advertisements in front of otherwise free videos, not for original content produced by YouTube. Totaling up the services that I pay for actual video content - Netflix, MotorTrend on Demand and HBO Now - I’m only paying $30 per month.

Compared to cable, that seems like a pretty good deal to me. However, there are additional benefits. I can watch shows:

  • on my own schedule, without the hassle and restrictions of DVR.
  • without being interrupted by advertisements.
  • on any device I own.
  • offline with many of the services.

If you live in the United States, there isn’t a better time to drop cable and save some money. If you’re in another country, things are moving in the right direction, albeit at a slower rate. If you can’t switch now, give it some time and I expect things will continue to improve as many of the video services produce their own content, which they are making available around the world.


  1. Technically I paid for cable as part of a bundle with my internet for a while, but I disconnected my cable box shortly after setting it up. ↩︎

  2. One day I hope to blog about my budgeting system, but that’s for another time. ↩︎

We Shall Sail Together - Sea of Thieves Tavern Tune

It’s official, folks: Rare has posted the official version of We Shall Sail Together as a Tavern Tune on their YouTube channel. Listen to it below.

I mentioned in my previous post on We Shall Sail together that this was coming. Now that it’s here, please excuse me while I listen to this on repeat for a while.

Handling a Dying Router

My router is dying. How do I know? It keeps dropping my wireless connection. I’ll be away from my home server and, when my router goes down for a few minutes, it loses its wireless connection. Then a bug in OS X results in my server failing to reconnect to the network, leaving it offline until I can get to it.

This has been happening a few times a week for a couple of months. I was kind of hoping it would start happening so frequently it would give me an excuse to get a new router, but alas, the old router keeps hanging on.

To work around this issue, I wrote a script for my server that runs every 10 minutes, checking if there is an internet connection. If not, it logs it, then restarts my server’s wifi connection so it will re-connect. This has let my router live another day.

Logging the disconnects has allowed me to get a handle of just how frequently my network is dropping (on average once per day so far), and therefore properly evaluate when to get a new router.

Below I walk through the script; next time I’ll go over how I automated its execution.


Since my home server is a Mac, I wrote the script in AppleScript. View and download the full script here.

Lines 2-29 redundantly attempt to ping the OpenDNS servers, noting if there’s a connection. I grabbed this code from an answer on Stack Exchange.

set connected to false

-- Ping the primary OpenDNS server.
try
    set pingResult1 to do shell script "ping -c 1 208.67.222.222"
on error
    set pingResult1 to ""
end try

-- Check the results returned and return true or false.
set p to number of paragraphs in pingResult1
if p < 5 then
    -- Ping another Open DNS server for redundancy.
    try
        set pingResult2 to do shell script "ping -c 1 208.67.220.2220"
    on error
        set pingResult2 to ""
    end try
    
    set p to number of paragraphs in pingResult2
    if p < 5 then
        set connected to false
    else
        set connected to true
    end if
else
    set connected to true
end if

Line 31 simply sets the path to the log file. I’m keeping it on my desktop and have named it reconnectLog.txt.

set logFile to (path to desktop as text) & "reconnectLog.txt"

If there isn’t a network connection, line 34 logs the date and time the disconnected state was encountered, using the appendToDisk function defined at the bottom of the script.

if not connected then
    appendToDisk from ((current date) as text) & " Disconnected
" into logFile

Lines 38-40 attempt to reconnect by restarting AirPort, OS X’s WiFi service. To do this, commands must be run in the shell using the do shell script syntax. I inserted a delay of 3 seconds between turning AirPort off and turning it back on to improve reliability. Sometimes it wouldn’t turn back on if the call was made too quickly. I grabbed this code from a StackOverflow question.

    do shell script "networksetup -setairportpower AirPort off"
    delay 3
    do shell script "networksetup -setairportpower AirPort on"

If there was a connection, line 42 logs the date and time the check was performed.

else
    appendToDisk from ((current date) as text) & " Connected
" into logFile
end if

Lastly, the function appendToDisk is defined on lines 47-57. This takes theText and appends it to the file located at thePath, while handling errors. I grabbed this code from an answer on Stack Overflow.

on appendToDisk from theText into thePath
    try
        set fileDescriptor to open for access file thePath with write permission
        write theText to fileDescriptor starting at eof
        close access fileDescriptor
    on error
        try
            close access file thePath
        end try
    end try
end appendToDisk

Star Shield 6

A previous coworker has moved into independent game development and has released a new game: Star Shield 6.

I’ve had it on my phone for over a month now and it’s a lot of fun. It requires more thought than first meets the eye, yet games are fast enough to play on the go. It’s even free!

Go get it on your phone.

Plex Ships Version 1.0

Huge congratulations to the Plex team for shipping version 1.0 of the Plex Media Server:

One could argue (quite successfully, I think), that the Plex Media Server should have reached v1.0 a long time ago. Millions of people are using it, it’s generally stable, and we release regular updates. We’ve improved our QA process, increased the size of our team, and done lots of growing up in general around our software processes. So without further ado, I’ll skip to the end and let you all know that—with an extreme sense of pride and just a hint of a tear in my eye—we’re incredibly happy to be releasing v1.0 of the Plex Media Server to you today.

I personally use Plex for hosting my music, photos and various videos. In fact, I’m streaming music from Plex as I type this post. Keep up the outstanding work, Plex team; I look forward to seeing what the path to version 2.0 brings!

Sex with a Snake

Reviews and answers on Amazon are often helpful, sometimes funny and periodically bizarre. This one falls under the last category. I don’t want to know what Jason uses other things around his house for.

Amazon product question and answer. Q: Does anyone know the working load limit (wll) of the 20k and 30k straps? i'm just not sure I need the extra load. A: Yes it is good to go. Excellent for having sex with a snake

Things I've Learned About Strangers

I have learned some things about the strangers I encounter in my day to day life:

  1. Few have malicious intentions.
  2. Most have good intentions.
  3. Many are distracted.

When a stranger does something wrong, even if it’s something small, it’s easy to assume malicious intent. This assumption generally leads to anger or frustration.

If I catch myself doing this, I stop and instead assume they were distracted by something else happening in their life, or see if I can find the good intention in their action. Not only are scenarios two and three much more likely, but it makes my day a little brighter and the interactions with those around me easier regardless of their actual motive.

The next time a stranger makes a mistake around you, try to find the good in it. It might surprise you how good it feels.

Get Your Cyanide Kernels

As noted by this Tumblr post, self-labelled Super Foods retailer *Sun Foods *is selling apricot cyanide kernels (apparently they can also be found at Whole Foods) claiming wonderful health benefits; however, the warning listed on both the website and the bag itself is cause for concern:

WARNING: Sweet apricot kernels contain amygdalin (Vitamin B17) which can cause symptoms of cyanide poisoning when eaten in excess. DO NOT EAT MORE THAN 8 SEEDS PER DAY. See a doctor immediately if you experience symptoms like nausea, fever, headache, or low blood pressure. Do not eat if you are pregnant or nursing. Not intended for children.

Yes, folks, the warning does indeed say “symptoms of cyanide poisoning”. I recommend reading the hilarious Tumblr post breaking down why recommending and selling apricot kernels is so absurd. Just a taste:

Amygdalin is not, in fact, particularly rare; as the wiki page states, it’s found in “many plants” “particularly the Prunus genus, Poaceae (grasses), Fabaceae (legumes), and in other food plants, including linseed and manioc.” The only people who refer to amygdalin as a vitamin are those trying to make money from it. It is absolutely NOT a vitamin in any way, shape, or form. The definition of the word “vitamin” is “a compound which is required by the body in small amounts, which it cannot make on its own and thus must be obtained from the diet.” Your body does not *require* amygdalin in the least. In fact, if you consume too much of it, you will LITERALLY DIE OF CYANIDE POISONING. It is NOT an “important nutrient.” It has not “disappeared from Western diets” because it was never a part of any culture’s diet. Any group of people who ate too much of it probably died.

I verified that the Wikipedia quotes by the poster were accurate and performed an independent search of Google Scholar for amygdalin to validate the Wikipedia content. Multiple papers come up within the first page of search results showing that amygdalin (vitamin B17) does, in fact, break down to cyanide in the human digestive system.

The lesson here: if it causes symptoms of cyanide poisoning, it probably is cyanide poisoning and you should stop eating whatever it is you’re eating. Also, don’t forget to read warning labels.