Integrate Things with Focus

I use the Things task manager to keep track of what I need to do. I use the Focus pomodoro timer to help myself focus on a task that I’m actively working on.

Focus integrates well with another task manager, OmniFocus: you can drag an action from OmniFocus into Focus to create a task to work on, and that task will have a button that links back to the original OmniFocus action. Super convenient! It doesn’t play well with Things, though. If you try the same process, you’ll end up with multiple separate actions for each of the Things to-do’s various properties.

For example, this to-do has the title, note, checklist, tags, when, and deadline options filled in:

A Things to-do with lots of options set

Dragging it to Focus creates a whole mess of random tasks:

Focus with 8 unrelated tasks

That’s not helpful. We can do better.

First, I wrote a shortcut using Things’s shiny new Shortcuts actions. For each to-do currently selected in Things, it uses Focus’s URL scheme to create a Focus task with the item’s title, notes, and due date, and a link back to the item in Things.

Second, I made a Keyboard Maestro hot key macro, available only in Things, that executes my shortcut. When I select the to-do item above and press “option-F”, I get one single task with all the details set:

Focus with 1 well-configured task

If I click the link icon next to the task’s title, Things opens with that to-do selected.

Ta-da! The workflow is slightly different than with OmniFocus, but only a little bit, and the result is just as useful.

Apple won't totally block unwanted emails

Apple’s email apps and services don’t allow users to completely block senders. If someone is sending you messages you don’t want to receive, tough. You’re going to get them.

The iCloud.com website’s Mail app doesn’t have a sender block mechanism. Instead, it offers a way to create rules based on each message’s attributes, such as its sender. Rules support these actions:

  • Move to Folder
  • Move to Trash
  • Forward to
  • Mark as Read
  • Move to Folder and Mark as Read
  • Move to Trash and Mark as Read
  • Forward to an Email Address and Mark as Read

None of those actions are the same as bouncing or silently discarding an email. At most, you can have the email sent to your Trash folder.

Mail.app on a Mac allows you to mark senders as “blocked”. You can configure Mail.app’s junk mail filters to either “Mark [their message] as blocked mail, but leave it in my Inbox” or “Move it to the Trash”. Again, you can’t bounce or discard it.

I tried to be clever and write an AppleScript program to delete messages from my Mac’s Trash folder. That was a dead end because AppleScript’s idea of deleting an email is moving it to Trash, even if it’s already in there. Neither does it offer a way to automatically empty the trash.

Apple, this is disappointing. If I’m blocking someone, I don’t want to hear from them at all, ever. It’s not enough to send their messages to the Trash folder. I don’t want them to be in my email account at all.

A Boston Terrier Married a Cat

I prompted ChatGPT: “Write a Shakespearean sonnet about a Boston terrier marrying a cat.”

It replied:

“Oh, wondrous sight! A terrier and cat
In love, declaring bonds that none can break
Though some may scoff, and others may bark flat
Their love is true, not just a mere mistake

The terrier, bold and loyal as can be
Protects his feline bride with all his might
And she, with purrs and nuzzles, shows with glee
That this odd couple won’t give up the fight

They nap together, groom each other’s fur
And playfully chase one another around
To some, their pairing might seem quite absurd
But their love for each other knows no bound

So let them wed, and let their love be strong
For true love, no matter who, can’t be wrong”

Our inevitable robot overlords can write delightful poetry. We’re in trouble.

Easily copy file contents with ForkLift

I use the ForkLift 3 file manager on my Mac. Part of my job involves copying-and-pasting the contents of various files into web forms. I made a trivial little shell script so ForkLift can help me:

#!/bin/sh

if [ ${#@} -ne 1 ]; then
    echo "Expected exactly 1 filename."
    exit -1
fi   

pbcopy < $1

Then I created a new “Tool” called “Contents to Clipboard” that calls the script with the name of the selected file.

/Users/me/bin/copy_contents.sh $SOURCE_SELECTION_PATHS

Now I can select a file, select the Commands > Contents to Clipboard menu, and voila! The file’s contents are ready to be pasted into another app.

Recovering a Raspberry Pi password on an M1 Mac

I would never accidentally change my Raspberry Pi’s account password before clicking “save” in my password manager, therefore locking myself out. But let’s say, hypothetically, that I did. How would I get back into my account?

The process would look like:

  • Power off the Raspberry Pi.
  • Eject its SD card.
  • Put the SD card in my M1 Mac.
  • Magically replace the Pi’s /etc/shadow file with the previous /etc/shadow- version, undoing the password change.
  • Put the SD card back in my Pi.
  • Power up, log in, and pat myself on the back.

Hypothetically, that magic bit could be a pain in the neck.

False start #1: ext4fuse

The relevant part of the Pi’s SD card is formatted with the ext4 filesystem. macOS doesn’t natively support ext4, and I’d need to install software so that I could access and edit the files on the card.

First, I’d install the open source ext4fuse program and navigate to the Pi’s /etc directory. Only then would I realize that ext4fuse is a read-only filesystem and doesn’t support writing at all.

False start #2: extFS for Mac

If the open source option didn’t work, I’d try the paid extFS for Mac filesystem and use its trial offer to do the work.

After installation, I’d discover that something in the way that the Pi formats its SD card prevents extFS from mounting it.

False start #3: run Debian in a VirtualBox VM

I bet by then I’d give up on mounting the filesystem inside macOS, and accept that it’d be easier to do the work inside a Linux VM. I’d likely hold my nose and download Oracle’s VirtualBox. Bummer that it doesn’t work well on M1 Macs yet, which I’d learn would cause the Debian installer to reboot every couple of minutes.

Success at last: Parallels Desktop

After trying and ruling out everything else, I’d probably try the trial version of Parallels Desktop. I’d use it to install Debian, then go to the Devices > USB & Bluetooth > Apple SDXC Reader Media (disk6) menu to mount the Pi’s SD card inside the VM. Then I’d open the VM’s Terminal app and run:

cd /media/parallels/root/etc
sudo mv shadow shadow.bak
sudo cp shadow- shadow

Finally, I’d go into the VM’s Files app and unmount the “boot”, “root”, and “SETTINGS” disks.

Crossing my fingers

After all that, I’d pop the card out, stick it back in the Raspberry Pi, boot it, log in via SSH, and run sudo -s. At the password prompt, I’d type my original password (as stored in my password manager), then exhale in relief as I was once again able to log in.

That is, if I were to lock myself out in the first place. Which I never would. Because I’m a professional.

I watched the Tyre Nichols video

I watched the Tyre Nichols video. I didn’t want to because I knew what it was going to contain and dreaded the idea of seeing it, but I felt obligated to. A man died at the hands of the authorities, and as a citizen, I should witness what our government is doing. Even if — especially if — that government is accused of committing horrible acts.

I’m not glad I saw it. I wish I could un-see it. I don’t resent anyone else who doesn’t want to see it. There’s no lesser way to describe it: Demetrius Haley, Tadarrius Bean, Emmitt Martin III, Desmond Mills Jr., and Justin Smith murdered Nichols. Yes, he initially ran from the traffic stop. He should not have done that. But running from a traffic stop is not and should not be a capital offense that warrants the death penalty. After the officers had him safely detained, they proceeded to tase, pepper spray, kick, punch, and use a baton to beat him to death while he called for his mom. Anyone who claims to have seen that video and says that he deserved it or defends the officers’ actions in any way is either lying about seeing it, an irredeemable bootlicker, or a sociopath.

I grew up with the privilege of not fearing the police. Sure, I didn’t want them around if I was getting up to mischief, but I believed the worst that could happen was that they’d catch me and a court would punish me for it. Nichols didn’t have that privilege. He was right to be afraid of his police, and although it’s easy for me to say that he shouldn’t have run from them, it turned out that his fears were justified.

My travel project template

In an older post, I talked about making a project template for trip planning. The goal is to build a comprehensive list of everything I might want to prepare, pack, or do before, during, or after a business or vacation trip. Before I made this template, I was more anxious: Did I forget to do anything? Do I have everything I need? What am I missing? Now I can relax and concentrate on the fun times ahead.

Friends have asked me for my list to use as a starting point for their own, and this is that lightly annotated list. Regrets from past adventures inspired every item. The moment I’ve booked a trip, I copy this template into my to-do app, then delete everything that doesn’t apply this time. For instance, if I’m going to visit family, I can use their pillow instead of packing my own. If I’m going to Chicago in winter, I don’t need swimming trunks. If I’m traveling for personal reasons, I may not take my work laptop. It’s much easier to remove items I don’t need than to scramble to remember the things I do need.

As always, the “update the travel template” action near the bottom is the critical feedback loop that makes this all work. Every time I’ve wished I’d done or packed something, I made a reminder to add it to the list for the next time. If I were to start over with a new template having that as the only item, after a few trips that template would look a lot like this one.

As soon as travel is planned

  • Schedule time off at work 1
  • Call the vet to make pet boarding arrangements

Three weeks before travel

  • Ensure airline has TSA Pre✓ info

One week before travel

  • Notify the bank about travel 2
  • Buy travel toothpaste
  • Buy disposable razors
  • Buy travel shaving cream

Two days before travel

  • Get passports from safe
  • Check in to flight
  • Get $40 from an ATM 3
  • Download reading material 4
  • Stop eating spicy food 5

Day before travel

  • Charge the USB battery 6
  • Pack pants
  • Pack shirts
  • Pack undershirts
  • Pack underwear
  • Pack socks
  • Pack shoes
  • Pack jacket
  • Pack sandals
  • Pack shorts
  • Pack belts
  • Pack a wearing-around hat 7
  • Pack swim trunks
  • Pack a sun hat
  • Pack a sun shirt
  • Pack gaffers tape 8
  • Pack water bottle
  • Download podcasts and meditations 9
  • Pack dopp kit 10
    • $20 bill
    • Brush/comb
    • Hair gel
    • Deodorant
    • Bottle of shampoo
    • Bar of soap
    • Razor
    • Shaving cream
    • Toothbrush
    • Toothpaste
    • Floss
    • Lip balm
    • Nail clippers
    • Sewing kit
    • Safety pins
    • Curtain clips 11
    • Eye lotion
    • Meds and vitamins
    • Q-tips
    • Eye drops
    • Gold Bond powder 12
  • Pack first aid kit
    • Band-aids
    • Blister bandages 13
    • Ibuprofen
    • Melatonin 14
    • Allergy meds
    • Indigestion medicine

Night before travel

  • Put passport card in bag
  • Put backup credit card in bag 15
  • Set wake-up alarm
  • Charge laptop
  • Charge iPhone
  • Charge iPad
  • Charge Apple Watch
  • Charge AirPods
  • Charge Switch
  • Remove TSA-unfriendly stuff from bag 16
  • Pack USB battery
  • Pack passport book in suitcase 15
  • Pack handkerchief
  • Pack food bar
  • Pack AirPods
  • Pack Switch
  • Pack magazine for plane 4
  • Pack boarding passes
  • Pack sunglasses
  • Pack journal

Day of travel

  • Wear my Apple Watch
  • Turn on Fog of World 17
  • Set the thermostat to vacation mode 18
  • Pack laptop charger
  • Pack iPhone charging cable
  • Pack iPad charging cable
  • Pack Apple Watch charging cable
  • Pack USB charger’s charging cable
  • Pack AirPods charging cable
  • Pack multi-device charger
  • Pack laptop
  • Pack iPhone
  • Pack iPad
  • Pack pillow
  • Buy airport stickers 19

The day before return

  • Check in to return flight

The day of return

  • Buy airport stickers
  • Set the thermostat to normal mode
  • Put away passports
  • Update the travel template 20

After return

  • Submit travel reimbursement request 21
  • Look for travel reimbursement check 22

  1. This seems obvious but I always forget. ↩︎

  2. If you don’t do this, your bank may see transactions from an unusual location and freeze your debit or credit card. ↩︎

  3. I’ve never regretted having walking around money while traveling. ↩︎

  4. If I didn’t have something to read on a flight, I’d lose my mind. ↩︎ ↩︎

  5. Yes, the Thai curry native-extra-hot is delicious. Do you really want to be trapped in a plane while your stomach tries to digest it? ↩︎

  6. I take a plug-in charging block and a portable USB battery. If my phone is running low in the middle of a long flight, I can still charge it with the battery. ↩︎

  7. It’s vacation. I want to throw on a hat to step out for coffee or breakfast. ↩︎

  8. Ideal for covering obnoxiously bright power LEDs in hotel rooms, blocking light under the door, etc. ↩︎

  9. If it’s too bumpy to read, it’s nice to have something fun or relaxing to listen to. ↩︎

  10. See “Building the Perfect Dopp Kit”. ↩︎

  11. Hotel curtains never seem to close all the way. Bend them to your will. ↩︎

  12. Ever been rained on, had to walk around a lot in wet pants, and gotten chafed from it? Yeah, me neither. ↩︎

  13. “Ow, these new shoes are killing my feet and I’m walking way more than usual.” ↩︎

  14. Jet lag. Strange hotel. Travel excitement. These add up to difficulty sleeping. ↩︎

  15. Carry at least 2 forms of ID and 2 forms of payment in 2 separate places. If 1 set gets stolen, you still have the other to get home. ↩︎ ↩︎

  16. I have a tiny multi-tool in my EDC bag, and I don’t want the TSA to confiscate it. ↩︎

  17. This is a fun little app that records everywhere you’ve been. ↩︎

  18. Save money not heating or cooling your house as much while you’re away from it. ↩︎

  19. I collect them for my carryon suitcase. This is in here twice in case I have a different layover on the way home. ↩︎

  20. I take notes of things I wish I’d done or packed. When I get home I immediately update the list so that I won’t forget next time. ↩︎

  21. Do it while you still have all the receipts in one place. ↩︎

  22. Once the office has reimbursed me, the trip is officially done. ↩︎

Muradin wallet doesn't block RFID

My wife bought me a cool Muradin RFID-blocking wallet for Christmas. I like it a lot, except for the fact that it doesn’t actually block RFID if you use it as advertised.

The wallet has a roomy inside “cage” for storing cards, and an external pocket for storing your “frequently used card”:

The wallet with a credit card in the outside pocket.

That’s not just my interpretation of the photo. The site goes on to explicitly say that the outside pocket is for your card:

A credit card in the "FUC (frequently used card) exterior pocket"

But what does our handy dandy Flipper Zero think of the wallet’s claim? Not much. It had no trouble reading the numbers off my debit card in the “FUC exterior pocket”:

A Flipper Zero showing redacted credit card info.

To see if orientation mattered, I rotated my card 180º and tried again. It didn’t matter:

A Flipper Zero showing more redacted credit card info.

I went on to test with single cards inside the inner compartment. If the card was against the back of the wallet, as far as possible from the protective flap, the Flipper Zero couldn’t detect it.

If the card was on top of some non-RFID contents, like a few folded dollar bills, so that it was about halfway down inside the inner compartment, I could tell with about 90% reliability whether the card was a Visa or American Express:

A Visa card is inside the wallet. Now an American Express card is inside the wallet.

If the card was on top of several pieces of non-RFID content, and pushed up to the top of the inner compartment, I could scan its number through the “RFID-blocking” wallet about 50% of the time, depending on the card.

This wallet doesn’t work. Its RFID-blocking claim is somewhere between misleading and an outright lie. Don’t buy it.

Happy 2023!

2022 was a whirlwind of disasters, plagues, wars, elections, recession, inflation, and other stressors. It was a challenging year. If it had a theme, it would be “oh, now what?” However, we survived it, even if bruised and scarred.

This year is going to be better. I know it.

Happy 2023!