• I Built a Lightweight Scratchpad for Harper

    On my Mac, I wanted to stop running LanguageTool in the background. In Vivaldi, Harper1 works well as a Chrome extension.

    I felt like I had to use something in my other apps, and ran LanguageTool for a while. (I never tried Grammarly.)

    Thinking about the speed comparison on Harper’s home page, I started a conversation with Claude. I wanted to see if I can expand my use of Harper elsewhere to enjoy the speed and privacy benefits.

    ✨️ The end result: I created a single HTML file that you can download from GitHub and use offline. ✨️

    The text area mimics the one on the Harper home page, and is not intended for active writing. (It doesn’t save anything. Refresh, and the text disappears.) The two differences that matter to me are:

    • It doesn’t make any network requests; and
    • The memory footprint is about ten times smaller than the Harper home page.

    If you can install the Harper extension in your browser (Chromium-based or Firefox), feel free to try it!

    1. I’m glad that Elijah Potter created Harper and joined Automattic! ↩︎
  • Tip: Contact-Management and Two-Factor Codes

    I was listening to Accidental Tech Podcast (ATP) 672, and heard John Siracusa mention a tip that’s new to me:

    Add numbers dedicated to sending two-factor codes to a single contact. (e.g. Two-Factor.)

    Why? To combine them into a single message thread. 💡

    You can hear it starting at 11:13.

    Google Voice does not combine these into a single message thread. But, I’ll still do it for the consistent contact name for notifications.

  • Happy New Year!

    Hi! It feels like a good time for a new post…to brag. Maybe I’ll get into a groove! 🤣

    1️⃣ Copy Unobfuscated URLs for Zendesk — Right before January 1st, I released v2.0.0 of this Tampermonkey script after spending about four hours across December 27th, 29th, and 31st (last night).

    Want to manually update the script? Open the Tampermonkey Dashboard, then click the time or date in the Last Updated column.

    For reference, here’s a copy of the commit note (generated by Claude):

    v2.0.0: Single ticket subject support, debug mode, performance improvements

    What’s New

    Single Ticket Subject Line

    • Clipboard emoji now appears in the subject field when viewing an individual ticket.
    • Catches the rare case where obfuscated URL is only in the subject, not the body.

    Debug Mode

    • Add ?debug=copy-urls to URL to enable console logging.
    • Silent in production (zero console output).
    • Eliminates 500K+ console statements in large ticket views.

    Performance & Code Quality

    • Consolidated icon styling into single function.
    • Removed duplicate CSS definitions.
    • Cleaner, more maintainable codebase (-25 net lines).

    2️⃣ This afternoon, I changed the theme of this blog from Twenty Fifteen to Twenty Twenty-Five.

    Basically, I asked Claude to:

    • “Encourage” me; and
    • Create a project and to-dos (which I imported into Things).1

    After that, I worked through the to-dos in the span of about one hour.

    It makes me laugh thinking about procrastinating on this project all these years. I wanted to switch from a classic theme to a block theme, and I’m glad I finally did it!

    Also, yay for footnotes! 🤓

    1. Claude created a one-off HTML file with a clickable Things URL. I shared support pages like “Things URL Scheme” and “Importing Data From Other Apps.” ↩︎
  • I Found Myself Staring at a Defanged URL. Something Had to Be Done.

    I created another Tampermonkey script:

    I’ll quote the current opening README in my GitHub repo:

    Security folks obfuscate URLs to prevent accidental clicks. You know the ones: hxxps://example[.]comexample dot com. I finally got tired of manually rewriting parts of these obfuscated URLs in Zendesk tickets before investigating and replying to complainants. That’s friction.

    Using Claude, I built a Tampermonkey userscript that spots these obfuscated URLs within Zendesk, then adds a clickable clipboard (📋) emoji to the left of them. One click, and the clean URL gets copied to your clipboard. Done.

    If you have ideas for this script, please let me know! It would also be cool to confirm that this works other help desk platforms. You have multiple ways to contact me (in alphabetical order, no preference):

    Enjoy!

  • Double Negative Replacer: Me, Claude, and a Tampermonkey userscript

    Hi! 👋 I know it’s been a while. I’m happy to share that I finally shipped this thing by uploading it to GitHub! 🤓

    I prompted Claude a lot, especially because I don’t know JavaScript, and am thankful for the help! 🤖

    According to the multiple files I saved in Finder, I worked on it in four times in mid October. Each time, until I reached my usage limit in Claude (on the free plan), and stopped. Last night, I randomly got inspired. Opened Claude, reached my usage limit, upgraded to Pro, and am happy enough to share this script with others!

    Was supposed to be 1.0. After I uploaded it to GitHub, I added two excludes, so it’s 1.0.1 (at the time of this post).

    If you have ideas for the script, or the list of double negatives, you have multiple ways to contact me (in alphabetical order, no preference):


    P.S. The mention of “WordPress.com intralink content” acknowledges a quirk I experienced when testing the script, and viewing some internal Automattic P2s.

  • One year heart attack anniversary

    One year ago today, I had a heart attack, and figured I should reflect and share some updates here.

    • Since my second Automattic sabbatical (May 2 – August 2), I walk an average of 20–25 minutes per day.
    • I’m not as strict on diet as I was a few months after the heart attack, but I still avoid beef and pork. (If I have chicken, it’s in the form of eggs.)
    • From early last month (September), results from blood tests are within range. My total and LDL (bad) cholesterol levels are low. Relieved.
    • For tracking medication, I switched to Apple’s Health app.
    • I got COVID-19 vaccine boosters in February and September; the latter was the bivalent vaccine. With both boosters, I experienced side effects like fever, chills, and elevated heart rate. After the first, I went to Urgent Care — and later, the Emergency Department — as a precaution because my Apple Watch warned me of an elevated heart rate while I was inactive. A doctor confirmed it was only side effects, and I should use acetaminophen.
    • I had a CT angiogram, and there is “no aortic aneurism or dissection“. Thankful.

    As of now, the cardiologists still don’t know why I had a heart attack, but I’m pleased we’ve prevented another one.

  • Lunar eclipse

    Took this photo on a tripod with an iPhone 12 Pro. 📱 Used Halide in manual mode (ISO 25, exposure 1.0 sec at f/2.0), chose ProRAW as the image format, then quickly processed the image in Lightroom Classic.

  • Hyper key via Karabiner-Elements

    I installed Karabiner-Elements to use Caps Lock as a Hyper key (Shift-Control-Option-Command) on my Mac, and figured I’d share my setup here.

    My hotkeys

    With Caps Lock mapped to Hyper key (Caps Lock if used by itself), I can do some stuff more easily, with less keypresses.

    I created an Alfred workflow (Powerpack required) to open the following apps:

    Hotkeys set within their apps

    To open Alfred’s Clipboard History Viewer, the hotkey is Hyper-C. Before, it was Option-Command-C.

    My hotkey to activate Moom is Hyper-M. Before, it was Control-Option-Command-M.

    I’ve had PopClip installed for years, and a friend/colleague (Clicky Steve) made an Alfred workflow to trigger the menu as needed. I set the hotkey in the Alfred workflow to Hyper-P. Before, it was Control-Option-Command-P.

    I use Itsycal — “a tiny menu bar calendar” — to glance at the next few days in my selected calendars with Hyper-I. Before, it was Shift-Option-Command-I.

    I use Hidden Bar, an open source Mac app to hide/show menu bar icons with Hyper-B. Before, it was Option-Command-B.

    Within Vivaldi Settings → Keyboard:

    • Hyper-←: Close Tabs to the Left (or above, if the tab bar position is to the left)
    • Hyper-→: Close Tabs to the Right (or above, if the tab bar position is to the left)
    • Hyper-↑: Move Active Tab Backward
    • Hyper-↓: Move Active Tab Forward
    • Hyper-G: Filter Grayscale (helpful for content review)
    • Hyper-O: Open Saved Session

    I probably don’t need the “Move Active Tab” ones, but those can help if I want to temporarily reorder tabs without using the trackpad.

    Quirks

    I made three adjustments for Karabiner-Elements to work with the following devices:

    My current work setup is a 13-inch M1 MacBook Pro (2020) connected to the LG display and very old Apple Wireless Keyboard.

    On the Apple Wireless Keyboard, the brightness_down and brightness_up keys would adjust the built-in display, not the LG display (desired). The Launchpad key didn’t do anything.

    In Karabiner-Elements → Function keys, with the Apple keyboard selected (not internal), I made changes to these physical keys:

    • f1: apple_display_brightness_decrement
    • f2: apple_display_brightness
    • f4: launchpad

    Ending thoughts

    I’ve been using the Hyper key for one week, and dig it. The adjustment period felt small. If you use a lot of keyboard shortcuts and want to reduce the number of keypresses, I recommend it.

  • Experience with Citi Extended Warranty program

    In June 2020, I purchased a Samsung 43″ Class 7 Series LED 4K UHD Smart TV (model UN43TU7000FXZA) from Best Buy with a Costco Anywhere Visa Card by Citi, and it included a 12-month warranty. About 18 months later, the TV wouldn’t power on, and an authorized service shop said the repair would cost more than a new TV.

    I thought we were out of luck. Then, I remembered this 2018 article from Consumer Reports (“Why You Should Steer Clear of Extended Warranties“), and that my credit card has an extended warranty:

    Get an extra 24 months added to your warranty when you purchase items at least in part with your Citi card and/or your Costco credit card reward certificate. In the event of a covered failure, the item will be repaired or you will be reimbursed up to the amount charged on your Citi card (including Costco credit card reward certificate) or the cost to replace the item, whichever is less, up to $10,000.

    After about eight days, Citi Card Benefits replied:

    Your claim under the Extended Warranty program has been approved.

    A payment in the amount of [redacted], which represents the full amount payable for this claim, will be credited to your card account within 1 to 2 billing cycles.

    The amount didn’t include the cost of shipping (understandable), and they credited the card one day later.

    If you’re about to buy a TV, keep this in mind!

  • I had a heart attack

    Sunday, October 17th started as a normal workday. On my lunch break, I noticed that my chest felt uncomfortable, and I was sweating (even though the air conditioner was on). My wife also noticed that I kept stretching intermittently.

    I decided to go to Urgent Care (Kaiser Permanente), so my wife drove me there.

    After a nurse took my vitals, the physician assistant took an EKG. Things escalated quickly because the reading was abnormal, which meant I was having a heart attack. 😓

    I did not expect to reach that milestone months before turning 40.

    Paramedics arrived, then took me to Arcadia Methodist Hospital in an ambulance (with sirens blaring). After being prepped in the emergency department, I was wheeled into their cardiac cath lab. One of the things they did was insert a stent.

    I was discharged two days later, then was off work through November 8th (about 22 days).

    Before the heart attack, I was taking two medications (for blood pressure). Now, I’m on six medications (including blood thinners).

    On November 8th, I had a follow up with my new cardiologist. 👩‍⚕️ At the moment, we don’t know the reason I had a heart attack, especially since my “bad” cholesterol isn’t super high. For now, all we can do is try to prevent another one. (Also, I’m supposed to wait until next year to get a booster shot.)

    Today, I’d say I’m doing well, and am feeling less anxious as more time passes after having a heart attack. 😌

    • Since October 26th, I walk almost every day. 🚶 According to the Apple Fitness app, I missed maybe two or three days. I started slow with ten minutes, and am now up to 25–30 minutes. (Before, I didn’t walk regularly.)
    • I eat out 1–3 times per calendar week, but choose plant-based food. Before, I’m ashamed to write that there were definitely instances when I ate out two or three times in one day. The horror. (In Day One, I have a dedicated food log journal, and have been tracking what I eat since December 18th, 2018.)
    • Since the heart attack, the only meat-based products I’ve eaten are fish (usually for lunch), chicken (twice), and cheese (once).
    • I haven’t had a breakfast burrito since October 14th. 😄 My regular breakfast is instant oatmeal (organic), shelled hemp seeds, and unsalted peanut butter.

    In addition to all the medical professionals, I’m extremely thankful for the support of my wife, friends, teammates and colleagues at Automattic, and Automattic for fantastic benefits.

    Lastly, if you’ve read this far and think it can’t happen to you, please review and consider the following:

    Thank you for reading. Be well!