Having not used mutt regularly for some time now, I’ve had to relearn its built-in keyboard commands as well as some of the macros that I created.
I currently have four separate email accounts setup in mutt. I’m actually using neomutt which has the sidebar already baked in. I have the sidebar setup to list each account with the folders I’m interested in: INBOX, Drafts, Sent, Junk, and Archive.
I have two sets of macros that let me jump to the inbox of any account directly. I can key .1 or
.2 or .3 or .4 to access the accounts by their relative position in the list. I can also use a
letter designation: m, r, n, c, preceded by a dot to accomplish the same thing. I set the
letter shortcuts up first, and later added the numbers.
I also have a shortcut, .s to save an email to that account’s Archive folder. And a shortcut to
move mail to the junk folder, .j. Both of these work in conjunction with to built-in tag, t
command to operate on multiple emails.
I can also move up and down the list of mailboxes using the arrow keys. Once a mailbox has focus, pressing the right-arrow key refreshes the contents of that box.
Finally I have some filter defined as macros, allowing me to view unread mail only, .u, to see
only today’s email (read or unread), t, to see this week’s mail, .w. .a removes any filter
allow all mail to be viewed again.
Being able to customize the possible interactions with mutt is one of its most compelling features.
Mutt is attractive to me for several reasons. And there are some things about it that detract from it as a everyday email solution.
Nearly every facet of mutt can be customized to your liking. Colors, layout, key bindings, even the tools used to receive or send emails can be selected. Setting up mutt and getting everything just the way you want is no minor task. I dare say your understanding of how email is sent, received, and stored will improve as a result of installing mutt.
Email encryption ought to be included in every email client. It should be dead simple to use. Unfortunately it is neither wide spread nor easy to use. However, once you put in a little effort to add encryption to mutt, using for emails is very simple. While it may not be a true first class citizen, as a feature, it is very close to that. Too many other email clients ignore encryption altogether, or only provide it through 3rd-party add-on libraries.
My mutt install is on a single computer. I have my home network setup to allow me to access this computer from anywhere. Mutt (and weechat for that matter) are always running on this computer. By running them inside a [tmux[(https://github.com/tmux/tmux “tmux”) session I can remotely access the computer, attach to tmux and get to my mail. I can be attached to that tmux session from multiple computers at the same time. All are seeing the exact same running process. Instead of having my mail synced to every computer, it is synced to one computer, where I can access it.
Finally I like mutt since it is nerdy. Getting it up and running is a bit of a hurdle. Learning the ins and outs and adapting to it are another hurdle. As with anything difficult, there is satisfaction is mastering it.
On the minus side of the equation, mutt does require more effort and more dedication than using Gmail, say. My mutt setup consists of mutt, mbsync, msmtp, GnuPG, and urlview. This doesn’t include the Ubuntu OS it’s running or, or some ancillary tools like tmux and Neovim. I guess you could say mutt is like a kit car. One that requires an effort to construct, and that will require on-going maintenance to keep in good running condition.
Reading emails that are basically web pages is cumbersome at best. Some HTML emails are surprisingly easy to view and read. Others expose horridly complex, obfuscating HTML, wrapped around very little actual content.
If there is going to be one reason I don’t keep mutt as my email, it will be the difficulties around HTML email,
Yesterday, when I was unable to send email from mutt using msmtp, I solved the issue by replacing
the symbolic link to the .msmtprc file with the actual file itself.
In searching for an answer I had posed a question on the mutt IRC channel about the problem, and overnight I got an answer and an explanation.
“Permission denied” errors are most likely due to AppArmor and a profile that interfere with msmtp. msmtp permission errors: disable apparmor! explains that by running this command:
sudo aa-disable /etc/apparmor.d/usr.bin.msmtp
The offending profile can be disabled. I had to install the apparmor-utils package before I was
able to run the aa-disable command.
After running the command, I deleted the .msmtprc file from my home directory and replaced it with
a symlink to the file in my dotfiles repository. Emails are once again sending.
Nearly all email today has some formatting beyond basic bold or italics. Either they are rich text format or they have HTML embedded. Some emails might as well be web pages. Besides bloating the size of the email compared to its meaningful content, HTML emails can be “abused” to provide tracking information about the recipient. Using images with unique URLs it is possible to know when an email was opened and by whom. This practice isn’t going away, and neither are HTML formatted emails.
Reading HTML emails in a text-based tool in a terminal emulator is a problem. For my mutt setup I have tried two different text-based web browsers to display these formatted emails: Lynx and w3m. Neither is 100% successful and making a meaningful display out of the mess of HTML wrapped around the actual content. They make it possible to read the mail, but interacting with any URLs in the email is problematic.
For example, I received an appointment confirmation email yesterday. It has, a large “Confirm Appointment” button you are supposed to click on to say that, “Yes, I’ll be at my appointment.” In both Lynx and w3m I could see the image of the button in the source, but not the link itself. I had to resort to opening the email in the Gmail web interface in order to click the button.
My hope is that I can discovered in the documentation for either of these text browsers a way to better interact with these web pages masquerading as emails.
I have installed urlview and a key binding to activate it. This utility displays all the links in
an email as a list, so that you can select one and click on it. Unfortunately, most of the emails
have links that are made up of random letters and numbers - machine generated rather than human
readable.
If I am still unsatisfied with how mutt and HTML emails work (or don’t work) together at the end of the 30 days, that could well be the reason I don’t continue using mutt as my email client.
I have often tinkered with mutt but I’ve never really used it beyond occasionally checking mail with it. I want to see if it will really work for me as my primary email client. Therefore I’ve dusted off my mutt configuration, and starting today, January 14, I plan on using it for all my personal email for the next 30 days.
I keep all my “dot files” in a Git repository on GitHub. It’s very cleverly called dotfiles. On each of my machines I clone this repository and then I use symlinks to wire configuration files into the places their respective applications expect to find them.
Under the mutt directory in my dotfiles repository one of the files is the configuration for
msmtp, which is an SMTP client. I use this to send mail
from mutt out into the ether. msmtp expects to find its configuration file, msmtprc in your home
directory, or under .config/msmtp/ as config. When I set mutt up, I put .msmtprc in my home
directory.
Actually I put a symlink to the file in my home directory:
cd ~
ln -s ~/.dotfiles/mutt/msmtprc .msmtprc
I haven’t used mutt for a little while, and when I tried to send an email this morning I got an
error message saying, “configuration file not found”. After some experimenting I discovered that
everything works if the file itself in in my $HOME, but it fails if there is a symlink to the
file.
On the mutt IRC channel I was able to get a confirmation from another person that a symlinked
.msmtprc file does not work. I have no idea why.
Since I haven’t used mutt in sometime, I’ve forgotten some keyboard commands. By reading through my
muttrc file I refreshed my memory on some of my personalizations, but I still need to brush up on
things like tagging emails so I can archive them in mass.
It will take some time to adjust to reading HTML heavy emails in lynx. It works, but it’s a bit like reading the actual Matrix code rather than seeing the woman in the red dress.
I’m calling it a success. I got sending email working again, and I’ve read my incoming email.
I am by no means an Apple pundit, nor I am privy to any inside information. I’m just a long time Apple fan with a wish list.
I think Apple should take the Pro Display XDR chassis and use it as the new form-factor for the iMac (and its big sister, the iMac Pro). It’d be a sealed enclosure, i.e., not user upgradeable. With at least 4 USB-C sized ports on the back.
It’ll need a stand, probably a fixed stand version of the XDR stand.
Same thing as with the iMac, only make a portion of the back hinged to allow access to one or maybe two expansion slots. Pro users without the means to acquire a Mac Pro, would flock to an iMac Pro that had an expansion slot or two.
There’s a huge hole in display offerings from Apple. There is one display option that will run you $6000 for the base model and $7000 for a nano texture display. There is nothing else. The PC market caters to business buyers (cheap desktop monitors) or to gamers (less cheap, higher DPI (dots per inch)) offerings. There is only one 3rd party manufacturer making a retina density display - LG. Compared to Apple’s fit and finish standards, the LG is unfortunately lacking.
Apple should make a Retina Display using the XDR chassis, and the 5K screen in the iMacs. Even at 1200 or 1500 dollars, I suspect they’d be back ordered by all the people with shiny new M1 laptops or M1 Mac Minis.
It would make for a sexy combination with either of the iMacs described above.
Updating the iMac form factor (long over due), and releasing a matching monitor would nicely refresh Apple’s line up, and would provide a monitor worthy of being used with Apple computers.
I would throw money at a Mac Mini and an Apple Retina Display.
In an effort to improve my understanding of the Go programming language, I’ve start working the problems described on the Project Euler website. Over the past weekend I was able to complete problems 1 through 4.
Solving these kind of problems programmatically has been good challenge for me. It has been a long time since I exercised that part of my brain that makes me a good programmer.
So far I have solved these problems:
The first 100 problems are considered easy and there are over 700 in total. I won’t be running out of coding problems any time soon.
I have been wanting a new Apple laptop for some time now. My current machine is a 15" Retina MacBook Pro–the Late 2013 model. Apple classifies their hardware as vintage once it has not been sold for 5 years and less than 7 years. Beyond 7 years since sales were discontinued and the product is considered obsolete. This Apple support page explains about Vintage and Obsolete Products.
My MacBook Pro was bought in June 2014, so I’ve had it for 6 years. I don’t know when sales of the Late 2013 model ended. I expect my computer to be considered obsolete sometime in the next 12 months. It’s still a very capable computer. With a 2.3 GHz Quad Core i7 processor, 16 GB of RAM, and a 1 TB SSD, it is still respectable. My biggest complaint is the size of the hard drive. The combination of photos, movies, music, and audio books, along with all my other data, overwhelmed the storage capacity several years ago. I’ve offloaded all my movies, music, and audio books to my previous laptop, a 2009 MacBook Pro, and a 1 TB external drive.
When Apple announced that they were making their own CPUs for Mac computers, I couldn’t wait to get one. All summer and fall I’ve been anxiously awaiting the announcement of new Apple Silicone powered laptops. However…
My iPhone is 5 years old. It’s an iPhone 6s Plus bought in November 2015. I want a new phone too. I’ve only got so many dollars to spend on Apple, and getting both a $1000 phone AND what would likely be a $2200-2400 computer in the same year, isn’t fiscally responsible.
After thinking about it for quite a while I decided that I would wait and see how the new Apple laptops performed, how they held up mechanically, and to see if there were any major issues, before getting one for myself.
What I dreamed of getting was a 14" MacBook Pro in the same form-factor as the 13"—much like what happened with the new 16" replacing the 15". Today’s announcement, while very exciting, doesn’t include that dream machine. They did announce a new M1 powered versions of the MacBook Air, the Mac Mini, and the 13" MacBook Pro.
Both the MacBook Air and the 13" MacBook Pro have up to 16 GB of “integrated memory”. Previously you could get up to 32 GB of RAM. I am curious to see how 16 GB of integrated memory performs compared to 32 GB of plain RAM. Of the three, I think I’d get the Mini first, the Air second, and the MacBook third. The idea of a Mac Mini desktop, with the largest internal SSD possible (2 TB) and a couple always attached external drives, combined with a MacBook Air is very intriguing.
The desktop computer would hold all my media, all my data, everything in one place. The ultra portable MacBook Air would be for times when I was away from my desk. Hmmm…
This year, by delaying the acquisition of a new MacBook Pro, I was able to order an iPhone 12 Pro, which will arrive here on Friday. Not getting a shiny new computer this year, and only getting a shiny new iPhone, is a first world problem that I can live with.
For some time I’ve been interested in Ansible, which is Red Hat’s lightweight, infrastructure automation tool. I found an Ansible tutorial on YouTube from LearnLinuxTV. Jay, the host, uses several VirtualBox VMs as his test lab for Ansible. I decided to go a slightly different route.
I used Vagrant to create and minimally provision a lab environment that I could use for the tutorial. After some trial and error, the Vagrantfile below is my result.
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagranyfile API/syntax version
VAGRANTFILE_API_VERSION = "2"
Vagrant.require_version ">= 2.2.0"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
servers=[
{
:hostname => "lab01",
:box => "generic/ubuntu1804",
:boxurl => "generic/ubuntu1804",
:ip => "10.1.1.11"
},
{
:hostname => "lab02",
:box => "generic/ubuntu1804",
:boxurl => "generic/ubuntu1804",
:ip => "10.1.1.12"
},
{
:hostname => "lab03",
:box => "generic/ubuntu1804",
:boxurl => "generic/ubuntu1804",
:ip => "10.1.1.13"
},
{
:hostname => "lab04",
:box => "generic/centos7",
:boxurl => "generic/centos7",
:ip => "10.1.1.14"
}
]
servers.each do |machine|
config.vm.define machine[:hostname] do |node|
node.vm.hostname = machine[:hostname]
node.vm.box = machine[:box]
node.vm.box_url = machine[:boxurl]
node.vm.network :private_network, ip: machine[:ip]
node.vm.provider :libvirt do |libvirt|
libvirt.memory = 512
libvirt.cpus = 1
end
end
end
ansible_pub = File.read(File.join(Dir.home, ".ssh", "ansible.pub"))
config.vm.provision :shell,
:inline => "echo 'appending SSH public key to ~vagrant/.ssh/authorized_keys' && echo '#{ansible_pub }' >> /home/vagrant/.ssh/authorized_keys && chmod 600 /home/vagrant/.ssh/authorized_keys"
config.ssh.insert_key = false
end
The servers array has entries for each lab machine to be created. Each machine has its own
hostname, its own IP address, and a Vagrant box image and URL. I’m using a private network for the
IP addresses, and I matched the IP address with the host name. lab01 has IP address 10.1.1.11,
lab02 is .12, and so on.
The servers.each loop creates each VM, giving it 512MB of RAM and a single CPU. I’m using QEMU/KVM
as my virtualization layer, so I added the vagrant-libvirt plugin.
After the VMs are created, I’m using an inline shell provisioner to add an ssh key to the VM. I
generated a new key pair just for Ansible, and this inline script puts the public half of that key
pair on the VM.
In Ansible, I added a line to the ansible.cfg to specify vagrant as the ssh user.
With this setup I can quickly and painlessly create 4 VMs, using two different operating systems, ready for use in my tutorial. I’m enjoying learning about Ansible, but I had fun creating this lab environment using Vagrant too.
The GitHub repository for my lab environment is called lab is has an MIT license. Help yourself.
In my day job I use a VPN, specifically GlobalProtect from Palo Alto. In our installation it is setup to be “full duplex” — all the traffic from your local machine is routed through the VPN. Previous we had a half duplex setup, where only the private network traffic was routed through the VPN.
GlobalProtect has a client, which was setup by our security staff. It’s dead simple to use and annoying to work with. Between the DNS jiggery-pokey that GP does, and my own DNS settings, I’ve had problems with some non-work sites not working.
The alternative to using the official client is to use OpenConnect. This requires installing it and using it on the command line, but doesn’t mess with IP traffic as badly as GP wants to. The problem is that OpenConnect doesn’t setup routes for the private network, and therefore some work-related sites don’t work.
My choices, then, are: (1) Use the official GP client and live with all my traffic being routed through the VPN, and have some sites not work, or (B) use OpenConnect and have some other things not work.
There is a third choice. Write a script to figure out the routing rules that need to be added to the routing table, and use that, along with OpenConnect, to establish your VPN connection. One of my co-workers created a script and shared it with me. His was able to work on either Linux or macOS. I only use macOS for work, so I didn’t need the Linux specific stuff. Therefore my script is a bit more compact and straight-forward than his.
As will all scripts you find on the Internet, use caution before blindly putting them to use. This script works for me, in my situation, with my edge cases. Your mileage will almost certainly vary.
#!/bin/bash
set -e
set -o pipefail
# Dependencies
# brew install iproute2mac - gets ip command for macOS
if ! [[ -x $(command -v ip) ]] ; then
echo "ip command not found"
echo "Run brew install iproute2mac to install it"
echo "Then run $0 again"
exit
fi
# Colors
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
# This script works on macOS. It futzes with the routing table
# to only route 10.* and 129.130.* traffic over the Global Protect
# VPN, if that VPN is active.
# Detemine what gateway traffic is flowing through
GATEWAY=$(netstat -nr | grep -v "::" | grep default | awk '{print $2}')
echo -e "Gateway: ${BLUE}$GATEWAY${NC}"
# Determine which network interface the host is using
LOCAL_IFACE=$(ip route show | grep default | awk '{print $5}')
echo -e "Local interface in use: ${BLUE}$LOCAL_IFACE${NC}"
# GP VPN IP range and prefix - macOS strips the `.0` in the netmask
GPVPN_RANGE="10.130.48.0/20"
GPVPN_PREFIX="^10.130.48"
echo -e "Global Protect range: ${BLUE}$GPVPN_RANGE${NC}"
echo -e "Global Protect prefix: ${BLUE}$GPVPN_PREFIX${NC}"
# Protect local IP from being routed
if [[ "$(netstat -nr | grep -E "192\.168\.4\.1")" ]] ; then
VERB="replace"
else
VERB="add"
fi
echo
echo "Setting a route for the local network"
echo -e " ${RED}ip route $VERB 192.168.0.0/2 dev $LOCAL_IFACE ${NC}"
sudo ip route "$VERB" 192.168.0.0/16 dev "$LOCAL_IFACE"
if [[ "$(netstat -nr | grep -E $GPVPN_PREFIX)" ]] ; then
VERB="change"
else
VERB="add"
fi
echo
echo "Setting a route for the GP VPN"
echo -e " ${RED}route $VERB $GPVPN_RANGE $GATEWAY ${NC}"
sudo route "$VERB" "$GPVPN_RANGE" "$GATEWAY"
# Start the VPN...
sudo openconnect --user=mhn --protocol=gp --script "$HOME/src/openconnect/vpnc-script" gpvpn.ksu.edu
exit 0
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.
Move: 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.
Exercise: 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.
Stand: 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 years.
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.
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.
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.
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.
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 altogether.
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 again.
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.
It is possible to edit some Activity data through the Health app.
To add a missing stand minute, for example:
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.
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.