🎵 Tonight I’m working overtime and listening to The Hold Steady, which almost makes it all right.

On Internet Trolls

DON’T FEED THE TROLLS, AND OTHER HIDEOUS LIES” is a great article by “Film Crit Hulk” on our collective failure to respond properly to internet trolling culture.

A Twitter follower reminded me of a line in the famous parable from Bion of Borysthenes: “Boys throw stones at frogs in fun, but the frogs do not die in fun, but in earnest.” Defenders of trolling insist it’s all just a joke, but if trolling is inherently designed to get a rise out of someone, then that’s what it really is. In many cases, it is designed to look and feel indistinguishable from a genuine attack. Whether you believe what you are saying or not is often immaterial because the impact is the same — and you are responsible for it, regardless of how funny you think it is.

I think that there is a fundamental misunderstanding of trolling. It isn’t a joke. It isn’t done for the lulz. “It’s just a joke” is an obvious cover for bad behavior.

It reminds me of an episode from my youth. In high school I had a friend who had a stash of Playboy magazines that he got (I think) from an older brother. Somehow we found out about them, demanded to see them, and teased him about them as we thumbed through them together. “Why do you have these” we would ask, teasingly, knowing full well why he had them. My friend’s face would grow bright red and we would stammer: “because they’re so funny”. When pressed, he would double down on it: he would swear, up and down, that he had them because they were hilarious. Sure they were.

It puzzles me, why we act as if it’s even possible that verbal abuse on the internet is “just a joke”. A decent response to “it was just a joke” is “it doesn’t matter”.

The biggest mistake we ever made with trolls was making the question of abuse about how to placate and fix them instead of how to empower the people they hurt or manage your own well-being in the face of them. Like so many abused people, we thought the solutions involved walking on eggshells and not provoking them back. But instead, we must acknowledge “that we are what we pretend to be, so we must be careful about who we pretend to be.” And that means acknowledging the awful, terrifying power of jokes and the immunity we seek in “not being serious.” This is exactly why people troll in the first place. Because deep down, they know it’s serious, and that’s exactly why it makes them feel powerful.

In the online world, people who violate community standards should be banned from those communities. Gathering spaces online are not public spaces: almost all of them are owned by private companies or individuals. Freedom of speech is up to the owner of the space; the level of discourse there directly reflect’s the owner as well. By law, they might not be legally responsible for the content of their site, but they are ethically and morally responsible for it, regardless. Owning and running a site where terrible things happen should be a black mark on a company’s or a person’s reputation—and that should matter.

It would be nice if people started to care about reputation again, and if bad reputations led to lower profits and lower stature in the global community. Sadly, we are in a time, right now, where that does not seem to be the case.

🎵 I’m back to my wired OPPO PM-3 & HA-2 SE headphones stack today, listening to Foreverland, by The Divine Comedy. It’s an album that slipped by me in 2016. I used to love The Divine Comedy in the late 1990s, and still take Casanova for a spin every six months or so.

Re-committing to Pinboard, after many months away

I’m re-committing to Pinboard, after a year or more away from it. I’m happy with what I am doing now, and thought I would document it in case anyone else wanted help understanding how to use the Pinboard effectively, especially if their usage lapsed, as mine did.

What is Pinboard?

Pinboard is an “antisocial” cloud bookmarking service. You can keep all your bookmarks there and use its barebones website or third party apps and browser extensions, all using an open API, to access them. It’s a paid service, run by a single person, with a clear and straightforward business model. When I signed up, I pre-paid for ten years of service. Part of my impetus for using it again now, after having abandoned it for, well, nothing, is the sunk-cost fallacy. The other, more important part of that impetus is that I really like the simplicity and speed of Pinboard, and I like the Pinboard iOS client I use, Pinner.

What do I use it for?

I use it for three things:

  1. To host my bookmarks in a cross-platform, always accessible way. I can get to the same bookmarks in Safari on my Mac and iOS, and in Chrome on Windows.
  2. For research and archival purposes, especially for programming projects I am working on. I can search these bookmarks on keywords, title, or description to review the best of the web pages I previously read on a topic of interest.
  3. As part of a homegrown “read it later” service. I can send article URLs to Pinboard from various apps, and read them later using Pinboard’s website, an app or browser extension on my Mac, and an app on iOS or Andriod.

Number 3 used to be the primary purpose of Pinboard to me. I had signed up as part of an effort to get replace Pocket with something more privacy focused. After many years of using Pocket (formerly “Read It Later”) to collect articles I was interested in from the huge stream of RSS feeds I parsed every day, I wanted a change. Primarily, this was because I became uncomfortable with Pocket’s business model: Why was it free? How did they really make money? What were they doing will all the data they collected on me?

I also wasn’t crazy about some of the UI changes made to Pocket over the years. I wanted more control over the reading experience, too, which is something that using a web service with an open API would give me. It helps that, at the time, Safari’s Reader View debuted, and I thought it was fantastic.

I was pretty obsessive about channeling all the articles I read through Pinboard, so I had a one-way workflow from discovery to reading to marking read. I never deleted anything from Pinboard, either. I thought I wanted a history of all the articles I ever read, in case I wanted to search through that history later. (Of course, I never did that.)

Why did I stop using it?

I stopped using Pinboard for three main reasons:

  1. I started reading Twitter more than actual articles linked to from it. The constantly updating timeline was incredibly addictive, and less mentally taxing to follow than reading complex articles from actual publications. (I have since given up Twitter because it was too addictive for me to handle responsibly.)
  2. My wife and I had kids, meaning that I no longer had a bunch of downtime after dinner to catch up on all the articles I had bookmarked to read later. I would still send stuff to Pinboard to read later, but I would never actually read the articles.
  3. My wife and I subscribed to The New Yorker, The New York Times, and The Washington Post. I started reading from those publications, from their apps, a lot more than scouring RSS feeds for articles from a dozen sources. Reading from their apps did not fit very well with my Pinboard workflow.

Overall, Pinboard became a graveyard for links I didn’t actually want to read. Instead of a useful resource, it was a junk pile full of stale content.

Digging out of a mess

I took the following steps to return Pinboard to a useful utility for me:

  1. I deleted everything I had in Pinboard—over 3,000 bookmarks that were doing me no good. Most of these were articles I imported from my RSS reader (Reeder) or Twitter (via Tweetbot), read once, and then just left in Pinboard.
  • I installed Shiori on my MacBook Pro. Shiori is a Pinboard bookmark launcher and editor. It's like QuickSilver for Pinboard—hidden until you need it, only a keypress away, and accessible from anywhere. I set it up so that Control+Option+Command+P brings up the bookmark search window (from anywhere), and Control+Option+Command+B brings up the bookmark editor.
  • I set up Pinner on iOS. Pinner is a full-featured Pinboard client. It will open Pinboard bookmarks in Safari or within Pinner, via Safari View Controller. It has two app extensions for creating bookmarks. The first extension, “Quick Pin”, has no UI, and is for quickly adding bookmarks to read later. The second extension lets you edit, interactively, all the metadata associated with the bookmark prior to saving it.

My workflow

I developed a new workflow to work with Pinboard, so I don’t end up with a mess of useless bookmarks again. Honestly, though, calling it a workflow is an exaggeration. I basically decided to manage Pinboard with a simple set of rules.

I will continue to use Pinboard both for permanent bookmarks, which mostly involve specific technical documentation about Swift and iOS development, and for a read-it-later service, which are bookmarks I want to keep around temporarily, some of which I plan to keep long term.

  1. Bookmarks I would keep in Safari, for sites I would log into (banking websites, personal websites, blogs, GitHub, BitBucket, etc.), are stored as private bookmarks with tags. All of these bookmarks are also tagged “Safari” so I can pull them all, as a group, with a Pinboard search.
  2. Bookmarks for articles to read later, and everything else, are saved with the “read later” flag set to “true”, primarily by using Pinner’s “Quick Pin” extension or the “send to Pinboard” command within Reeder (my RSS reader app of choice).
  3. I regularly use Pinner or Shiori to browse my “read later” list. Basically, I had to kick the Twitter habit.
  4. After I read articles marked “read later”, I delete the bookmark, or choose to save it. I am pretty ruthless about deleting bookmarks now, which is the opposite of how I used to be. If I don’t read something after a few days, I will just delete it.
  5. Rarely, I will choose to save the bookmark. If I do so, I edit the bookmark’s metadata to remove the “read later” flag and to add keywords and a description. I open copy the first paragraph of the article to the bookmark’s description field, so it’s clear to me later on why I saved it.

So far this workflow has been working well for me. I collect “read later” bookmarks throughout the day, read through them in the evening, and delete almost all of them at the end of the day. My Pinboard bookmarks list is much smaller than before, but contains only good stuff that I want to act on, either now or later.

A git commit somehow disappeared, eradicating all my app code and obliterating at least one evening’s worth of work. I cracked open a Guinness, restored a backup from Arq, recovered about 80% of my work, and re-did the rest. I’m happy I didn’t lose my cool.

Thomas Finch’s iOS 7+ Icon Generator is a nice, little utility. It takes a square app icon and masks it to match the rounded corner shape of modern iOS icons.

I have been wrestling all day with an Access query with a ton of parameters that causes a crash when run via VBA, but works fine when run manually, which no one would ever do.

A Hardware Keyboard Shortcuts Tip for Drafts 5

Drafts 5 is a great app for capturing thoughts, drafting notes, and capturing tasks, and quickly sending them, via Actions, to other apps or services for further processing. The typical workflow is:

  1. Launch Drafts
  2. Type a draft
  3. Launch an Action to process the draft
On iPhone, swiping left from anywhere to pick an Action is right at your fingertips, since you are typing on screen. On iPad, if you type with an external keyboard (which I highly recommend), launching an Action is a little more cumbersome. By default, you have to move your fingers off the keyboard and reach up to the screen to get to your Actions list. There is another way to launch Actions, however, that doesn't require you to move your fingers off the keyboard.

Custom hardware keyboard shortcuts

Drafts 5 lets you assign custom hardware keyboard shortcuts to any Action. This is an extremely rare, and extremely powerful, feature. You can configure hardware keyboard shortcuts for text formatting commands and to insert text snippets (such as today's date) into your draft. You can also define a set of hardware keyboard shortcuts to use to complete your drafts.

I use Drafts 5 throughout the day to write microblog posts, notes, and tasks and send them to where they need to go: Dropbox, Ulysses, my to-do app SwiftoDo, and so on. For all my most-used Actions that process drafts, I use an easy-to-mash but hard to accidentally type accelerator, Control+Option+Command, plus one letter, when I complete my draft and want to send it on its way.

I use the Control+Option+Command accelerator only for Actions that complete drafts, so it’s always clear to me when I type it that I am ending my draft and sending it somewhere else.

Here is my list of hardware keyboard shortcuts, each of which I find incredibly useful:

  • Control+Option+Command+D: save draft to a Dropbox folder
  • Control+Option+Command+U: save draft to a Ulysses Inbox folder
  • Control+Option+Command+T: send tasks in draft to my todo.txt file via SwiftoDo
  • Control+Option+Command+M: post draft directly to Micro.blog
  • Control+Option+Command+G: search for draft text in Google
  • Control+Option+Command+A: search for draft text in App Store
Each shortcut is easily mapped to its Action via the "Edit Action" dialog. (See the photo that accompanies this blog post.) If you forget what custom shortcuts you created, hold down Command while editing your draft, and all the custom shortcuts you defined will appear in the standard iOS hardware keyboard shortcut pop-up display.

These hardware keyboard shortcuts don’t necessarily save me a lot of time and trouble, but they make my Drafts workflow on iOS feel fast and comfortable. I highly recommend setting some up for your own iPad Drafts workflow.

What would make me upgrade my Series 1 Apple Watch

I love the Apple Watch. I didn’t always, though. When I first tried on a Series 0, a couple weeks before it was released, I quickly made the decision not to buy one. I thought it was too expensive and that it was not immersive enough. I had been expecting an iPhone for the wrist; what it was instead was a wristwatch with some extras. Six months later, however, I relented and bought one, mostly because Target was offering the Space Gray Sport model at a deep discount, and I wanted to pick a holiday gift for myself that my family members could chip in for.

I quickly grew to love the Apple Watch, despite its slow speed and lack of viable third-party applications. The first-party Apple Watch applications alone—such as Messages, Workouts, and Weather—pleased me very much. Caller ID on my watch was great for avoiding telemarketing calls at dinner. Something as simple as having the temperature always available on my watch face far more useful than I had anticipated.

I have a Series 1 now because my Series 0’s screen popped off due to battery swelling after almost two years. Apple covered it under an extended warranty and sent me a Series 1 for free. The Series 1 is much faster than the Series 0, and is not going to be obsoleted by Watch OS 5 in the fall. Still, it isn’t as fast, and consequently as useful, as the Series 3. I fully expect a new Apple Watch model to be released later this year, which will be even faster.

If I still had the Series 0, I had planned to upgrade this year, for increased performance alone. Now that I have the Series 1, I am not so sure. My Series 1 has great battery life, but is starting to show performance problems. Workouts, for example, take a long time to start. Third party apps are still, largely, useless for me, for the same reason. Despite these problems, most of the features of the Apple Watch are still working just fine for me.

The main feature that would tempt me to upgrade, at this point, would be new or better health monitoring features. The idea that the watch could save my life, by monitoring for irregular heartbeats, is very compelling to me. I would welcome and pay for any additional features in that area. If they are confined to newer hardware, I would definitely upgrade to get them. I care more about that sort of thing than I do about increased speed, cellular or GPS connectivity, or (if the rumors are true) a larger display area.

Here is a wrapper class to hide implementation details in Microsoft Access VBA projects: DAOQueryRunner.cls. DAOTemporaryTableController.cls relies on this.

This VBA class helps you work with temporary tables in Access VBA projects: DAOTemporaryTableController.cls. You may need to do so if you want to join using a subquery as criteria, which Access does not allow.

I decided to make use of GitHub Gists again. My first gist in several years is LoggedInUserName.bas: a VBA module to get logged in user name from the Windows API.

🎙 I am a sucker for an Upgrade draft episode: The WWDC keynote Draft 2018

All weekends should be 3 days long…if not 5! 😀

📺 I’m enjoying the “remix” version of “Arrested Development” season 4 a lot better than the original version. I’m sure time passing and my expectations being lowered helped, but I prefer to see all (most) of the characters in the same episodes.

🎵 First listen: Mean Girls (Original Broadway Cast)

Mean Girls (Original Broadway Cast) is up for the Tony for best musical this year, and I think it has a legitimate shot. While this is a weak year for the American musical, the music of “Mean Girls” is fun and catchy, and the lyrics are funny and full of wordplay. The singing and production of the cast album are top notch, too.

I like it. The high school setting and girl-centric plot, though not the music, remind me a lot of “Bring It On”, which is another musical that has a fantastic cast album and works a lot better than you would think. I don’t know if this show will be a hit on Broadway, but I predict a long life on high school drama club stages in the future.

🎧 Headphones review: Sony MDR-1AM2/B.

“Recess” and “Good Bones”, or selling the world to my children

There’s more beauty in this world than you can guess

Recently, with the help of someone on Micro.blog and Apple Music, I have turned my family on to the music of Justin Roberts. His band plays children’s music in a power pop style. His music is really catchy, and his lyrics are wry, funny, very kid-friendly (my daughter sings them all the time), and sometimes also play to the parents on emotional level as well.

My favorite Justin Roberts song, by far, is “Recess”. Like the best power pop songs, this song has more hooks and ideas in it than most albums do. The lyrics are cleverly and consistently written from the point of view of a bored kid stuck in a classroom, waiting for the recess bell to ring:

Can’t you hear the blacktop callin’? Classroom clock is stuck or stallin’ There is nothing that will pass the test Unless it’s recess

In the second and third pre-chorus endings, the lyrics expand out beyond the tedium of the elementary school classroom to the wonder of the outside world:

One more dotted I One more crossed T Then we’ll be runnin’ free There is more beauty in this world than you can guess

That last line resonates powerfully with me. Seeing the beauty in this world is something children do naturally. I think we forget how to, as we get older, and our knowledge of history and current events expands, and our experience of life evolves from dreaming of what our lives might be to actually living them day-to-day. Our dreams get smaller and more finite as time passes. As we get older still, we relearn to see the beauty, in a different way—with a wonder that is tinged with sadness. As an adult, I see that the splendor and joy of the world is counterbalanced by its disappointments and horrors.

The world is at least fifty percent terrible, and that’s a conservative estimate, though I keep this from my children

The line “There is more beauty in this world than you can guess” always makes me think of the contrasting sentiment expressed in the poem “Good Bones” by Maggie Smith:

Good Bones BY MAGGIE SMITH

Life is short, though I keep this from my children. Life is short, and I’ve shortened mine in a thousand delicious, ill-advised ways, a thousand deliciously ill-advised ways I’ll keep from my children. The world is at least fifty percent terrible, and that’s a conservative estimate, though I keep this from my children. For every bird there is a stone thrown at a bird. For every loved child, a child broken, bagged, sunk in a lake. Life is short and the world is at least half terrible, and for every kind stranger, there is one who would break you, though I keep this from my children. I am trying to sell them the world. Any decent realtor, walking you through a real shithole, chirps on about good bones: This place could be beautiful, right? You could make this place beautiful.

This is a profoundly powerful poem that I read in college and have never forgotten. As an adult and a parent, I return to it often. It has always made me feel, in some way, like a teenager who concludes, upon first entering the adult world, that I have been sold a bill of goods: nothing is as nice or easy or fair as my parents and mentors (and, let’s face it, TV and movies) told me it would be. This poem distills all the disappointment and disillusionment that experience and maturity bring into seventeen simple and somewhat humorous lines. I love how it ends on a note that is somehow both cynical and hopeful: “You could make this place beautiful.”

Selling the world to my children

It’s my job, as a parent, to sell the world to my children. I want to tell them the good—now, while they are young—and the bad—later, when they are older. In both times, now and later, I have to remember that Justin Roberts and Maggie Smith are both right about the world. It contains all the beauty that has any meaning. It also contains all the horrors that have ever befell anyone. The most important thing I have to teach my children is that they can make it better—they just have to try, even after the veil of childhood innocence has fallen, and they see the world for what it really is.

I’m still testing and fixing things in my dev build of SwiftoDo 2.12.0. It feels weird to have gone so long without issuing a release. I hope to get everything done next week. I have a very full weekend of family activities ahead of me, though, so I can’t do much till Monday.

🎵 Carry On

On this bad and sad news day, remember:

If you’re lost and alone
Or you’re sinking like a stone
Carry on
May your past be the sound
Of your feed upon the ground and
Carry on

‘Cause we are, we are shining stars
We are invincible
We are who we are
On our darkest day
When we’re miles away
So we’ll come, we will find our way home

Fun.’s “Carry On” works well, and feels quite different, in this cover version by the cast of “Rise”.

🎵 Frozen: The Broadway Musical

Listening to the cast recording of “Frozen: The Broadway Musical” for the first time is a bit surreal for me. Compared to the movie, there are new songs, lyrics changes in existing songs, and, of course, different singers. I don’t think any of the changes are for the better. It’s hard to say for sure, though, because, as a parent of a little girl, I’ve heard the movie and the movie soundtrack about 1,000 times already, and it’s burned into my brain.

While I think I want a Nintendo Switch, I’m trying to make due for now with what I already have—an iPad Pro and a SteelSeries Nimbus controller. I’m not sure I even want to commit the time to gaming, but I am curious about the latest Mario and Zelda games.

The calm before the WWDC storm

WWDC is in a little more than two weeks. As a hobbyist developer, I don’t go to big, expensive conferences 3,000 miles from my home. But I do eagerly await it each year. Last year I was so excited about it that I went as far as calling it “nerd Christmas”. This year, though, I’m not looking forward to the keynote, the new APIs, the betas, and so on.

There have been no substantive leaks about what will be announced, and no one’s predictions so far have been that compelling. That’s in stark contrast to last year, when I practically knew what iOS 11 would bring to the iPad, based on rumors and speculation. This year, the most exciting leak we got is that a cross-platform macOS/iOS development framework will not be announced this year.

As a user and a fan, I basically want Apple to announce a rebuilding year. iOS 12 should be a maintenance release. They can make their software faster and more stable. They can make Siri a lot better. They can fix bugs. Other than that, I don’t want a radical UI overhauls of any of their operating systems (as if the latter would ever happen). On the hardware side, I’d love to see them refresh the MacBook Pro and iPhone SE sometime this year, but my expectations for an announcement at WWDC are very low.

As a developer, I don’t really want to worry about having to support new frameworks or features. Just upgrading from one iOS framework to the next one can sometimes take days of work before all the kinks are worked out. Even upgrading Xcode to a new major version is, as a Swift developer at least, a little scary. New versions of Xcode have not been stable or bug-free for me since Xcode 8 was released. The recently released Xcode 9.3.1 has been working really well for me, though, and I’m loath to give it up anytime soon. I’d love WWDC to be about Apple fixing the numerous, relatively minor, UIKit bugs that I’ve had to work around, but past history leads me to believe that iOS 12 will just have another set of odd bugs to work around.

The cast of Solo certainly is appealing, even if the movie itself may be largely inconsequential. To think, I used to care more about the director than the cast. 🎬

🎵 Frightened Rabbit singer commits suicide 😥

(My original title was just an expletive.)

Body confirmed as missing Frightened Rabbit singer - BBC News:

“Depression is a horrendous illness that does not give you any alert or indication as to when it will take hold of you”, it added.

“Scott battled bravely with his own issues for many years and we are immensely proud of him for being so open with his struggles.

“His willingness to discuss these matters in the public domain undoubtedly raised awareness of mental health issues and gave others confidence and belief to discuss their own issues.”

I’m so upset. I love Frightened Rabbit. It was no secret that Scott Hutchison suffered from depression, anxiety, and who knows what else—it’s all over his arch, wry lyrics. Go listen to “Keep Yourself Warm” to get an idea of what a great singer/songwriter he was.