How I use the Apple Watch

I bought an Apple Watch a little while ago. I really like it and I find it useful, but I use it differently to most people and I almost didn’t buy one because I wasn’t sure that it could fit with my need. Here are a few of my “workarounds” and a few findings that someone might find useful.

A non-standard user?

  1. I don’t have an iPhone.
  2. I don’t want to charge the Apple Watch at night; I want to wear it to bed.

I’d love to report that the Apple Watch can connect to an iPad (I only have an iPad), but it doesn’t. You still need an iPhone to configure it, and to serve as a conduit for data and App installs, but you don’t need it to be with you all the time for the watch to be useful. In my case it doesn’t even matter that the watch is hooked into my wife’s Apple ID (she has the iPhone) because all the important data is still accessible1.

What I planned to use it for

  • silent alarms during the day, and to wake me up in the morning
  • the time
  • fitness tracker (mainly step count)

If you’re thinking that I could have used a Fitbit, you’d be right. I’ve had a few of them and the build quality on my bands was poor and the software gets in my way 2, so I wanted something else.

What I also use it for

  • checking the weather when dressing the kids for bed and when getting clothes out for the next day
  • countdown timers
  • driving directions when I’m out with my family

I don’t use it for anything else.

Battery Life

The big surprise is that battery life isn’t a problem, even though the standard usage pattern involves charging at night and I have it on my wrist at night.

My observations are that recording activity drains the battery a little, the attempts by the phone to connect to the iPhone drain the battery, and being in contact with the iPhone drains it quite a bit more.

Battery drain rates: * being a couch potato in aeroplane mode - 2% per hour * normal activity levels in aeroplane mode - 2.5% per hour * normal activity levels (not in aeroplane mode) when the iPhone is not around - 3.5% per hour * normal activity levels (not in aeroplane mode) when the iPhone is around - 5% per hour

I have a 42mm watch. Bluetooth is off, brightness is at the lowest setting and haptics are at the strongest setting). I have one third party complication Pocket Weather AU.

Charging

I’ve observed the watch charging at about 1% per minute, just like David Smith, whose great idea allowed me to even consider an Apple Watch.

I don’t really need the watch while I’m preparing for my day, so I put it on charge within a few minutes of getting up so it’s charging while I do my morning routine (shower, coffee, eat, read) so it has about 75 minutes to charge.

I have the watch out of aeroplane mode in the evening (~4 hours) i.e. 4 x 3% = 12% and the rest of the non-charge time in aeroplane mode (~19 hours) i.e. 19 x 2.5% = 47.5%. This means I need about an hour of charge time to be constantly topped off. That has always been enough and consequently I’m not worried about battery life.

So, it works for me

Initially, I thought the watch would be of limited use without connectivity but it’s not been a problem. Most of the features that require connectivity are for notifications and I’m happy to forgo them - I like not being interrupted, to be honest, and where connectivity is necessary for data updates, I’ve found a once-a-day refresh to be sufficient. So, I’m really happy with the watch. It’s been a step-up from the Fitbit in terms of functionality and quality so it’s been a good purchase and I’m looking forward to what’s coming in watchOS 3.


  1. iCloud shared calendars for the win 

  2. Why can’t I set an alarm when I’m not connected to the internet? Why can’t graphs render without an Internet connection? 

Making Ansible, Doas and OpenBSD play nicely

Update 11 Jan 2020: The behaviour of doas changed in OpenBSD 6.6 so the environment specification described below is unnecessary. As of 6.6, doas sets HOME and USER to reflect the target user, like sudo. For details see openbsd-tech

A little while ago, OpenBSD replaced sudo in the base system with doas. This transition follows a typical path in the OpenBSD community where a large, difficult to audit daemon or key application is replaced by an auditable and securable alternate implementation. At the same time, features are pruned if they add significant complexity. I don’t need all the features of sudo and I like the simplicity and security of doas so I wanted to switch. I use Ansible to provision and manage my small collection of servers and when version 2.0 added support for privilege escalation via doas (via the become keyword) I started to make my switch. The main use-case in my Ansible playbooks is where I run as root and become my non-admin user so that permissions are set correctly by default, and in this case doas behaves differently…

# /usr/bin/env | grep -E '^(HOME|USER)='
HOME=/root
USER=root
# sudo -u esteele /usr/bin/env | grep -E '^(HOME|USER)='
USER=esteele
HOME=/home/esteele
# doas -u esteele /usr/bin/env | grep -E '^(HOME|USER)=' 
HOME=/root
USER=root

The key difference is which environment variables are propagated from the original session. I find doas to be a little unintuitive in this respect, particularly the inability in the new session to write to the directory specified by $HOME and this behaviour causes problems with the Ansible git and the pip tasks. The git task expects $USER to correspond to the effective user id and the pip task expects $HOME to be the home directory of the effective user id. The unexpected doas environment meant the tasks were trying to write files, as my non-admin user, under /root which was unsurprisingly unsuccessful. Fortunately Ansible has a way to specify environment variables for a task and even though it’d be preferable for the become mechanism to take care of this, it’s an effective workaround (albeit a slightly dirty one).

The example below, from my web host playbook, ties the environment specification and the doas become in a block

# doas preserves USER and HOME, which is different to sudo, however by                                                                                                    
#  specifying them as environment variables we can proceed.                                                                                                               
# USER is required for git, and HOME is required for pip                                                                                                                  
- block:                                                                                                                                                                  
  - name: Checkout wordspeak repo                                                                                                                                         
    git: repo=ssh://git@github.com/edwinsteele/wordspeak.org.git                                                                                                          
         dest=/home/esteele/Code/wordspeak.org                                                                                                                            

  - name: Setup nikola virtualenv                                                                                                                                         
    pip: requirements=/home/esteele/Code/wordspeak.org/requirements.txt                                                                                                   
         virtualenv_command=/usr/local/bin/virtualenv                                                                                                                     
         virtualenv=/home/esteele/.virtualenvs/wordspeak_n7                                                                                                               

  become: True                                                                                                                                                            
  become_method: doas                                                                                                                                                     
  become_user: esteele                                                                                                                                                    
  environment:                                                                                                                                                            
    USER: esteele                                                                                                                                                         
    HOME: /home/esteele           

And having tied this together, I can remove the sudo package!

    - name: Remove sudo
      openbsd_pkg: name=sudo-- state=absent

A week with the 9-inch iPad Pro

I’ve been using the new 9-inch iPad Pro for about a week and I thought I’d share a few impressions:

  • The screen glare is significantly reduced. I often read under fluorescent lights and this is a significant improvement over the Air 2.
  • The pencil is great fun, is lovely to use and fits nicely into my ad hoc note taking workflow. It replaces my pen and notebook setup and the ability to move and delete tasks and notes from the page, as I process them, is fantastic (thanks Notability).
  • There’s nowhere to store or attach the pencil. A nicely placed strong magnet would have been a nice touch.
  • The camera takes great stills and wonderful movies (4K is worth it). The camera bulge really isn’t an issue (even when writing on the screen on a hard surface)
  • My old Logitech Ultrathin keyboard cover won’t stay attached to the iPad Pro when I’m carrying it around because the magnets are placed differently from the Air 2. The keyboard is still fine when the iPad is in the keyboard slot but carrying it around is so awkward that it would have been replaced anyway, even if I hadn’t got the Smart Keyboard.
  • The Smart Keyboard is easy to type on, and lighter than the Logitech that replaced it and seems steady enough even when it’s not on a hard surface.
  • The speakers are a huge step up. I drive an old and noisy car that doesn’t have a working stereo so I listen to podcasts and music through the iPad speakers. The iPad pro easily pumps out enough volume for me to hear over the engine roar and tire noise.
  • 128Gb is overkill, but 32Gb is insufficient. I’d have preferred a 64Gb option but hey…

This is been a really good upgrade, even though it’s a bit pricey. Sometimes the features on a new version of a device are nice but not of significant interest but in this case the upgrade from an Air 2 to a 9-inch Pro really made a difference.

Exporting DayOne Entries

I keep a journal, and for a while I’ve written and kept the journal entries in DayOne. It’s a nice App that has encouraged me to write, to the point where journalling has become an indispensable part of how I do life. While DayOne gave me features to start me writing, I now want to write entries in my standard editor, with all its niceties. DayOne uses Markdown and the App can be told to store its data in iCloud or Dropbox, so it wasn’t hard to find the entries on disk, but the Markdown is embedded in a file along with other information. There’s a little bit of work involved in exporting the entries as regular Markdown files, so I’ve put my export script on GitHub in case someone finds it useful.

export_dayone_entries.py

Favourite reading of 2014

While cleaning up a few old Evernote folders I came across a few partly written posts, including this one with some of my favourite articles from 2014. I know… 2014 is so last year, but the articles are still good.