May 14, 2020
| posted in:
The subtitle of this posting ought to be “1,726 Day Activity Streaked Ended by Syncing Failure.”
I bought an Apple Watch the day ordering opened, and received my watch in mid-May 2015.
Initially I didn’t do much with the Activity tracking. That changed in late 2015, when I
started closing all three activity rings every day.
The three rings are Move, Exercise, and Stand.
You set a calorie goal, the default is 400, and the ring is closed when you burn that many calories
above what you would burn if you were not active. You can adjust the goal number up or down. For me
a normal day, with 20 or minutes of active exercise, will easily reach the 400 calorie number.
This ring is closed when you have 30 or more minutes of exercise. Apple doesn’t say what parameters
have to be met to count as exercise. For myself it seems like any minute where my heart rate is
elevated to about 100 beats per minutes does the trick. You cannot adjust this number, it’s 30
minutes or bust.
In order to close the stand ring, you need to stand and move around at least one minute per hour,
at least 12 hours in a day. This ring is by far the easiest to close. The watch helpfully will
remind you to stand at :50 minutes past the hour, if you haven’t already done so. Like Exercise, you
cannot adjust this goal.
Starting in August 2015 I have closed all three rings, every day, one thousand, seven hundred, and
nineteen times, according to the activity record kept on my iPhone. I had minor knee surgery midway
through this streak, and, by taking my daily walk at 12:01 am the day of the surgery, and then
breaking my walk into three ten minute walks the day or two following, I was able to sustain my
streak. I walk in the rain, the cold, the heat, you name it. Day in and day out for four and a half
Last Wednesday, May 6th, my phone restarted itself and the watch somehow was never able to reconnect
after that. My watch continued to capture and record calories, stand minutes, and exercise, but it
was no longer syncing to my iPhone.
I didn’t discover this fact until Friday, May 9th. To say I was dismayed would be a massive
understatement. To see partially filled rings for Wednesday, and nothing at all on Thursday or
Friday gave me a horrible sinking feeling.
Why didn’t I notice the issue sooner? Exhaustion from a combination of from being quarantined, from
caring for an elderly cat, from worry about potential work furloughs—all combined to make checking
my ring progress every night something that didn’t happen. Had I discovered the break in syncing
last Wednesday, and early enough in the day, I might have been able to reset my watch and keep the
streak going. The window to (a) notice and recognize there was a problem, and (2) figure out the
solution, was only 5 hours long.
When I discovered that synchronizing between the watch and phone wasn’t working I immediately called
Apple Support. This was the first of what would eventually be six support sessions, that were
ultimately unsuccessful in recovering my data.
Friday, May 8
Over the course of about two hours on the phone with two different tech support people, a level-1
rep and then a senior rep, we only managed to capture some screen shots of the phone, and capture
and upload some log files for Apple Engineering to examine. The level-2 rep promised a call back on
Monday at 11 am. She assured me that she was determined to resolve my issue.
Over the weekend I tried several times to reconnect my watch by powering down either the phone or
the watch, or both, and then powering them on in different orders. I realized while doing this that
the phone could locate (Find My) watch, but that the watch could not find my phone.
Monday, May 11
The promised 11 am call never happened. About 11:30 am I contacted Apple Support and ended up
talking to a new support rep. He said that there was no response from engineering yet, and that it
could take several days. With people working from home, old iPhones and iPads were getting pressed
into service, which had increased call volumes. He said he would call me back at 6 pm on Tuesday.
The later time to hopefully allow a response from engineer.
Tuesday, May 12
Once again, the promised return call never happened. Once again I contacted Apple and introduced
myself and my issue to yet another support rep. He said there was an update from engineering. The
response was, “reset the watch.” This would wipe out any data that resided on the watch that hadn’t
been synced to the phone. He wanted to tell me that the data on the phone would be fine as it
was backed up to my computer. I had to explain to him that I needed the data from the watch. He
got it, and said he’d resubmit my case to engineering, and said he’d call Wednesday at 6 pm.
Wednesday, May 13
Guess what happened at 6 pm? Not a call back from Apple Support. I ignored the whole issue until
about 8pm, when I contacted Apple Support. This call started with a level-2 rep, who also wanted to
tell me that, as long as my phone was backed up, I wouldn’t lose any data. Once she understood my
reason for not wanting to reset my watch, she said there wasn’t any other way to fix things.
I asked what would happen if I backed up my phone, reset it, and then restored it: would the watch
have to be re-paired with the phone, or would the previous pairing work? She assured me it would
not need to be re-paired. I told her I’d try that course of action, and she said she’d call back
in 60 minutes to see what my status was.
I initiated a “Reset all Settings” activity on my phone at about 8:27 pm. Shortly after 10 pm the
phone had reset, and the synchronizing of the Apple Watch was done. Yay? It was the wrong watch.
In an effort to gather more information, first thing Wednesday morning, I dug out my original Apple Watch (now know as a Series 0) and had paired with my iPhone. I was trying to see if pairing still worked at all or not. It did work. And then I forgot to remove that watch from my phone before backing it up and restoring it. So it synced up with the Series 0 and ignored my Series 4 watch
I unpaired the Series 0, reset the watch again, and waited. Shortly after midnight the reset and
synchronization completed. It had found the Series 0 in the backup I restored from, and set it up
Thursday, May 14
This morning I realized that I had a back up from last Friday, May 8th, that did not have the
Series 0 attached to my phone. Since that backup had all the activity I’d ever collected it was a
good place to restore from.
Unsyncing the Series 0 from my iPhone again, I did a “Erase all Content and Setting” reset, and then
restored the iPhone from Friday’s backup. This took about 100 minutes, from 8:27 am until 10:11 am.
The watch still would not sync to the phone. In fact, when I opened the Apple Watch app on my iPhone
and selected the watch, it would show the detail screen for the watch and sit there with a spinner.
I had to force quit the app to regain control of the phone.
Clearly the reset and the erase had not accomplished anything.
At about 10:30 am I contacted Apple Support for the sixth time. Engineering was still saying that
reseting the watch was the only solution. Support says there is no other way to get data from the
watch to the phone. The only option is to reset the watch.
At 10:49 am I reset my Apple Watch Series 4 and lost the stored activity data it had for Wednesday
May 6th through today. After the reset the watch and phone were syncing again.
Having an entire week to prepare myself for the possibility that, through no fault of my own, I
might lose my activity data and therefore my 1700+ day streak helped. I’m not happy at all about
losing the data, or about no longer being able to see an ever increasing number in the Activity app
awards section. In my head I’ll know to add what ever number my new streak is at to the one that
should be there today (1,727), but it’ll be four and a half years, before I set a new daily streak as
far as the Activity app is concerned.
I am disappointed in Apple Support for making promises to recontact me and then not following
through. I understand the realities of working in a call center—their time is not theirs to budget
and schedule—but they should know that and either not promise to call, or tell the customer to use
the link in the “Your upcoming call with Apple Support” email to initiate contact themselves.
I am also disappointed that there is no way to capture data on a watch that is no longer syncing
properly with its iPhone. I get that there are privacy concerns, especially around health or health
related data, but surely there is some way to allow for recovering data.
Some of the shine of Apple is lost now. I don’t know when or if it will return to its former level.
I have spent probably close to $10,000 on Apple products and services in the past 20 years. I’m a
huge fan. I still want new shiny things from Apple, even today. But I won’t invest so much of my
heart into them now. I can’t deal with the potential emotional cost down the road. Especially in
these utterly unique times.
But Wait, There’s More
It is possible to edit some Activity data through the Health app.
To add a missing stand minute, for example:
- Open the Health app
- In the Highlights section tap on Workouts
- In the Workouts Summary tap on Add Data
- On the next dialog, change the Activity Type to other, the Kilocalories to 0 (zero), and
adjust the Starts and Ends date and time. Pick one minute.
- Tap Add
You can also edit Exercise data, using the same steps, substituting the actual type of workout, and
a calorie count. Unfortunately you can only do this for today and the previous day. I had read
several years ago about the stand hours trick, but didn’t know you could also edit exercise data.
It is a testament to how much cognitive drain trying to work from home during a pandemic, that I
didn’t remembered this until today. Had I remember last Wednesday or Thursday, I could have replaced
the missing data from Wednesday and Thursday, reset my watch and been fat, dumb, and happy.
As it stands now, I can (one minute at a time, twelve times per day for eight missing days) poke in
some zero kilo calorie minutes to fill out my stand rings for the missing eight days, which will keep at least that streak going.
Moral of the story
Pay attention to odd or out of place things that happen with your computers, which includes phones,
tablets, watches, in addition to laptops and desktops. When something out of the ordinary happens
try to step back from whatever “are you kidding me!?” emotion might have been stirred up, and check
for a ripple effect.
Or maybe not get trapped in a 1,727 day streak.
May 09, 2020
| posted in:
I ordered my first Apple Watch the day they went on sale, April 24, 2015. I was slow enough
completing the process that it didn’t ship for a couple of weeks, so I didn’t get the watch until
I’ve worn it, and later the Apple Watch 4 I bought to replace it, every day since. Initially I
closed some of the rings some days, but rarely all three rings in a day. Beginning in August 2015 I
started closing all three rings every day.
I’ve closed all three rings every day for 1,722 days. One thousand, seven hundred and twenty-two
That streak is not at an end, but the “official” record of it on my iPhone is in jeopardy. On
Wednesday, three days ago as I write this, my iPhone, a now five-year old iPhone 6S Plus, freaked
out and started asking me for my iCloud password repeatedly. After entering that password, I
discovered I had to re-enter my mail password, re-setup Authy, and sign back into other apps that
sit behind passwords.
At the time I found this annoying, but didn’t really think too much about it. Yesterday afternoon I
realized my Apple Watch was no longer syncing with my phone. Looking at the Activity app on th phone
I could see a partial day recorded for Wednesday, and nothing at all for Thursday or Friday. It felt
like I’d been punched in the stomach.
I immediately rebooted my phone and then my watch. Still no connection. I called Apple Support.
Within minutes I was talking to a very helpful woman who gathered some data and had me try
restarting my devices again. When that didn’t work she escalated the case to a higher level of
support. The next woman and I spent more than 90 minutes on the phone together. By the end of the
call she had opened a ticket with engineering, and had captured some log files from my phone. I also
sent her several screen shots from the phone and the watch. We also did a full back up of the phone
to my computer, using a password so that the health and activity data would be backed up too.
I’m now waiting for a return call on Monday, hopefully to set up a call with the engineering folks.
Since the end of yesterday’s phone call, I’ve discovered what I think is the problem: the iPhone’s
Bluetooth is not fully functional.
It is only paired with my Airpods. It shows an entry called “Apple Watch”, but there’s no “I” icon
to allow seeing more information about that connection. When I try to pair the iPhone and my iPad,
the iPad sees the phone, but cannot connect to it. The phone doesn’t see any nearby Bluetooth
From the phone I can “find my watch”, but the reverse is not true. From the watch I cannot ping the
phone to locate it.
Whatever happened Wednesday morning about 11 am has damage/crippled/borked the Bluetooth interface
on the phone. My hope is that engineering can somehow reset that interface in a way that doesn’t
lose my activity data.
I asked during the call how long the watch will store data without syncing to the phone. The answer
is: until it runs out of storage, usually about 7-10 days. My watch has 5 GB of used space and 7 GB
of free space. There is about 3 GB of music on the watch that I would instantly remove, however,
that requires that it be synced with my phone.
It is not possible to pair the watch to a new phone with out wipingg it clean—losing all the data it
has. If that were possible I’d go buy a new iPhone today, and restore the backup to the new phone
and then pair the watch.
On my iPhone the activity history shows 1,719 days with all three rings completed. The watch has
data showing 3 more days (Wednesday, Thursday, and Friday), bringing the (potential) total up to
1,722 days. By Monday that potential number will be 1,724 plus Monday.
I am on tenterhooks waiting for Monday’s call. Both tech people were impressed with the length of my
streak, and the second one in particular is determined to keep it if at all possible. I fervently
hope she can pull that off.
April 04, 2020
| posted in:
Gmail, or Google Mail, was famously announced on April 1, 2004. April Fool’s Day. Free email with
unlimited storage. Initially you had to be invited to get an account. I desperately wanted to have a
Gmail account and finally managed to cage an invitation through Matt Haughey, whom I knew of through
his web site A Whole Lotta Nothing. I got
my first Gmail address in June 2004, and I’ve been using it to one degree or another ever since.
There are email standards. One of those standards is that, while the local part of your address - the bit
preceding the at sign - can contain a dot (
.), the dot cannot be the first or last character, and
it cannot be repeated, e.g,
joe..email@example.com. The local part of the address needs to be
unique with in the domain. You can’t have two
firstname.lastname@example.org email addresses that go to two
Google breaks this rule in a subtle way. They allow any and all variations, involving dots, of your
local part to resolve as your account. An example will make this clearer. Joe User signs up with
Gmail. He picks
email@example.com as his address. He will get mail addressed to
firstname.lastname@example.org. He will also get the email addressed to any of these variations:
And so on. Google says “dots don’t matter in Gmail
If someone accidentally adds dots to your address when emailing you, you’ll still get that email.
On the surface, this is a nice idea, but in implementation it proves to be massively annoying.
Why Standards are Important
By not following the email standard for unique local parts to email addresses, Google has set a trap
for every other Internet business who allows email addresses to be used as user account names.
Unless the developers at Example Incorporated code their user on-boarding process to prevent any
variation of an established account, using Gmail as the username, where the variation involves
adding or subtracting dots within the local part of the address, then they will end up allowing
what appear to be two (or more) distinct accounts to be created on their site, the resolve to only
one Gmail address.
For example: Joe User signs up at PayPal using his
email@example.com email address for the
username. He adds his phone number and sets a password and he is good to go. Then one day he gets
an email stating, “You added your phone number to your account”, which lists a phone number poor Joe
has never seen before.
PayPal allowed another person named
Joseph User to create an account using
firstname.lastname@example.org as the
username. To PayPal the two accounts are unique.
joe.user is different than
Unfortunately, Google sees
joeuser as variations on the same email account.
User will now get emails from PayPal that are meant for
Joseph User. Joseph won’t understand why
he isn’t getting his PayPal emails.
Because additional information is needed to reset the password for the other account, and the prompts for that information obscure the alternate contact information for the other user (which is good), there is no way to reach out to the other user to let them know that their email address isn’t what they think it is - unless that other email address is Googlable enough to find out enough information to try to contact the other user via other means.
My Approach to this Mess
My name is not that uncommon. There are several other people in my town of 53,000 who share my first
and last name. I have no idea how many people nationwide are named
Mark Nichols. I do know that
there are enough that I get a continuous stream of emails using the dot-less variation of my Gmail
address. I get hotel reservation confirmations and bill folios. I get reminders of dental
appointments, and car service appointments. I get emailed copies of Lowe’s purchase receipts. I get
access to shared Google Docs, and invitations to weddings and other events. All because someone at
Google 16 years ago though it would be cool to “save people from typos” and decided to allow email
address local parts to be non-unique within the
Since there is no way every other business, organization, what have you, on the Internet is going to
carefully vet email addresses used as usernames to ensure that two seemingly unique Gmail addresses
aren’t in fact merely dot variations, then you should not use your Gmail address as a username.
You’ll still get emails sent to dot variations of your address, but if you know your account
username is NOT your Gmail address, then you won’t have momentary panic when you get an email
confirming your week long hotel stay in Miami.
I’m starting the tedious process of visiting each online account that uses my Gmail address for the
user name, and changing that user name (if possible) and changing the associated email address.
Fortunately I have all of my accounts stored in a password manager, so I should be able to
identify 99% of them.
I’m retiring my Gmail account as the email I use to sign up for things. I’ll create a new account on
my personal domain for that. Hopefully this will prevent 30 minutes of late night panic about an
email from PayPal announcing that I’ve added a phone number to my account that I’ve never seen
March 22, 2020
| posted in:
I’ve been using Let’s Encrypt to provide SSL certificates for all my domains and subdomains for a
couple of years now. Let’s Encrypt certificates are only good for 90 day, and with 17 certificates
to manage, renewing them all manually was a pain. So I put the commands into a cron job (actually
several cron jobs) that renewed each certificate once a month. The cron job mailed me when it was
done so I knew which certificates had been renewed.
Recently my web host, WebFaction, started offering built-in Let’s Encrypt certificates - ones that I
would not have to renew myself. At 40 days to go they automatically generate a new certificate to
replace the old one. This is great, but I’ve lost some visibility into the process.
I wanted a way to list all my SSL certificates, and their current date ranges. Each SSL certificate
has a date and time they become active, and a date and time when they expire. This command will
return those two pieces of information for the domain
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null |
openssl x509 -noout -dates
notBefore=Nov 28 00:00:00 2018 GMT
notAfter=Dec 2 12:00:00 2020 GMT
You could create a
bash shell script that was just 17 instances of that command and call it a day.
Inelegant, but functional. A better solution would be to have a file of domains to check, and a
script to do the checking.
Here’s part of my file.
And here’s the script.
set -o pipefail
# certcheck displays the good from and good until dates for SSL certificates.
# It expects a file (.certs) that contains a list of domains to query. Each
# entry in the file has two parts, the name to display, and the domain to
# query. The two entries are separated by a space.
# .certs file example:
# example example.com
# www www.example.com
echo -e "certcheck\n"
while read -r line; do
# Parse input into an array, using space as delimiter
# Get the name and the domain
# Get the certificate start and end dates
result=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -dates)
# Muck with internal field separator (IFS) to split $result on new line
# Print the results in columns
printf "%-15s %-30s %-30s\n" "$name" "$startdate" "$enddate"
done < "$filename"
echo -e "\nfinished"
The script is a simple loop. For each line in the file it does the following steps:
- It parses the line using space as the delimiter so that
$name contains the label to use, and
$domain has the domain to query.
- Using the value in
open_ssl command is run. The two lines of output are captured
$resutl. The key part here is that it is two lines of output.
- In order to put the two date time stamps into separate variables, the “internal field separator”
or IFS has to be set to the new line character,
\n. So that IFS can be returned to it’s original
value it is saved in
- With the start and end dates now in
$enddate respectively, a
can be used to create the output.
printf is used as it provides better control over formatting
That’s it. Loop through the file, use the domain to run the
open_ssl command and capture the
result. Split the result on the new line character. Print the results, one per line, neatly
formatted into columns.
Here is an example of the script’s output.
zanshin notBefore=Feb 2 19:30:06 2020 GMT notAfter=May 2 19:30:06 2020 GMT
books notBefore=Jan 24 11:13:48 2020 GMT notAfter=Apr 23 11:13:48 2020 GMT
geek notBefore=Jan 23 07:36:14 2020 GMT notAfter=Apr 22 07:36:14 2020 GMT
health notBefore=Jan 31 14:24:25 2020 GMT notAfter=Apr 30 14:24:25 2020 GMT
music notBefore=Mar 18 12:09:18 2020 GMT notAfter=Jun 16 12:09:18 2020 GMT
Any time I’m curious about the state of my SSL certificates I can run this script.
March 21, 2020
| posted in:
WFH. Work From Home. Or, as I think of it at times, What’s fucking happening?
10 days ago, as I write this, was the last day I worked at my office. The university where I am
employed scheduled a test work remote day on Thursday, March 12th. By the end of the day it had been
extended to include Friday. By the end of Friday we were all told to work remotely for the
foreseeable future, at least through the end of the semester.
As an IT professional my job is well suited to remote work. There are entire IT companies that are
100% distributed. Last autumn, due to some HACV work in my building, that uncovered asbestos, we all
worked from home for a week. That was fun actually. Going from a work-in-the-office with other
people setting, to working-at-home by yourself, as been an adjustment. Knowing that this is reality
for the next two, three, or more, months, puts an entirely different spin on it.
I’m an introvert, and I like things to be just so. Working from home appeals to those aspects of my
personality. I also appreciate some amount of what I call “social friction.” The act of interacting
with other people, in person, feeds some part of me. I miss that part of being “at” work. I don’t
miss the noise and interruptions, the smells, and wonky temperature from the HAVC system.
I am incredibly fortunate that my wife, Sibylle, has a very similar temperament. She is also an
introvert, and is someone content within herself. She is fortunate enough to have found a way to
make her piano studio work remotely. We have found a rhythm that works for us, here in our home.
I get up at my normal work day time. I shower and get dressed as if I were going to the office, and
then have breakfast. Then I come into my home office and start my day. At lunch time I leave work
and go out in the rest of the house for lunch. I have eaten lunch at home most days for over a
decade, so that part of my daily routine hasn’t changed. After lunch I return to work until the end
of the day when I come home. My wife has her morning routine and then goes to her piano studio on
the lower level of our house, and works on lessons and video critiques for her students. During the
day we exchange emails and texts, exactly like we did before COVID-19. Keeping as much normalcy as
possible has made this transition easier for us. It has helped to ground us at a time when
everything seems ungrounded and out of control.
The coming weeks and months will be interesting and challenging. I think Sibylle and I will be able
to navigate those challenges and find ways to care for ourselves. I hope the world at large can do
the same thing. I fear for many that the sudden upending of regular life, will prove devastating and
difficult to adjust to. Our society, the world’s society, will forever be different following this
For now, I’m, we are, working from home, wondering what’s fucking happening.
dig command is useful but can overwhelm with its output. This utility website simplifies the
process and the results.
February 03, 2020
| posted in:
Google’s shell style guide.
January 27, 2020
| posted in:
Last night, while reviewing the visitor logs for my site, I noticed several hits from
frame.bloglovin.com. I’m always curious to see where visitor to my site are coming from, so I
clicked on the link that had brought them to my site and saw this.
My initial reaction was WTF?
There’s no obvious way to dismiss that subscribe dialog, but when I clicked on the site behind it
the dialog went away. The page behind it had this as its header.
They aren’t scraping my content and claiming it as theirs, but they are presenting it through their
site, with their header. I was not pleased.
A quick search led me to a couple of articles about BlogLovin’. The verdict is that, while perhaps
not 100% sketchy, they are pushing it. It appears they add comments, through their site, to my
content. The Ultimate Guide to BlogLovin’ actually reversed their standing on the service. Over at BlogLovin’
is Now Stealing Your Posts there is evidence that BlogLovin’ is actively claiming content that isn’t
Toward the end of the second post there was reference to how to block BlogLovin’ on Nginx using
$http_user_agent and a link to a (now defunct) article about doing the same with Apache based
I did another search and learned how to block access to my site by testing the
in the request. Here’s a sample of the code to be placed in the
SetEnvIfNoCase User-Agent (bloglovin) bad_user_agents
Allow from all
Deny from env=bad_user_agents
This test is case insensitive, and since the matching string isn’t prefixed with a
^ the string
can occur anywhere in
There have only been five total visits to my domain through BlogLovin’, all within the past week.
Roughly a week ago I resurrected a long dormant subdomain, and the scraped content was all from that
site. I added the
htaccess directive to my main domain, and to the subdomain that was being
scraped. Now I’ll have to wait and see if any 403 errors are produced.
It’s self-entitled liberties like this that make the World Wide Web frustrating at times.
If you want to keep up with my publishing, click the RSS icon at the bottom of the page and add me
to your RSS feed.