Welcome to the lab.

Web Excursions for March 13, 2018

[Tweet : nvALT]

Web excursions brought to you by MightyDeals.com, featuring great deals on software, training, and design resources.

A general date-picker script for any tag type - TaskPaper
I learned a lot about JSX and nibs playing with this one (from Rob Trew, of course).
Dictionary.com now offers definitions for emoji
It’s about time.
Devhints — TL;DR for developer documentation
A large collection of developer cheatsheets, created by @ricostacruz.
PSA: iOS Markup is not designed to be a redaction tool for sensitive information
Side note, don’t expect iOS Markup tools to cover your tracks.
Leonard Cohen - Peel Session 1968
For LC fans, the complete July 1968 session recorded with John Peel on BBC Radio 1.

Deckset 2.0 is more of a great thing

[Tweet : nvALT]

I first wrote about Deckset back in 2014. Since then I’ve continued to love it as an alternative to Keynote, using it whenever I can for presentations. At CMD-D last summer, I hadn’t expected to be speaking, but when Andy Ithnako had to call in sick, I wrote a full slide deck in Markdown on breaks between talks. I’m very excited to let you know that version 2.0 has been released, and it covers some of the requests I and other users have had over the years.

First, you can customize the themes. It comes with a wide selection of styles, but I’ve always longed to be able to change them just slightly for my needs. Now you can adjust colors, fonts, and general layout, and even export and share the theme with others.

You can also just use Markdown headers as slide dividers (as opposed to horizontal rules), making presentation creation that much faster. You can also add customization to a single slide using metadata headers to do such things as temporarily disable slide numbering or change a footer.

With the release of version 2, Deckset has announced they’re leaving the Mac App Store. The new version is available exclusively via direct purchase, which — as a side effect — gives them a lot more flexibility with coupons, pricing, and educational discounts.

Deckset is definitely the coolest, easiest tool I’ve found for creating slide decks quickly and beautifully. The current version runs $29 US, with site licenses available. If you bought Deckset after March 1st, 2017, you can receive a free upgrade. Check it out!

The OmniOutliner 3 winners!

[Tweet : nvALT]

Congratulations to the winners of the OmniOutliner 3 giveaway! It turned out to be one of the most popular giveaways I’ve ever run here.

There ended up being 6 instead of 5 because the Giveaway Robot made its first ever mistake1. Omni was very gracious and provided an extra code to remedy the snafu.

I’ve heard back from most of the winners already, but if you’re on the list and haven’t heard from me yet, let me know and I’ll re-send the email.

  • Guillaume Barrette
  • Mac
  • Vincent Oostindie
  • Abhishek Jain
  • Adam Hansen
  • Florent Costiou

Thanks again to everyone who entered, and if you didn’t win, you can grab the free trial and there’s still a little time to snag the intro price!

  1. Ok, fine, it was human error. I hit CTRL-c because I realized I’d made a typo in the email template, but the first random winner had already been sent. If the Killotron has any fault, it would be that it’s too good to be stopped.

RocketTab malware and the Tab Manager Chrome extension

[Tweet : nvALT]

Chrome slowed down for me this week. It’s always been a memory and CPU hog, but this got ridiculous. Like grind-my-system-to-a-halt ridiculous. Unable to determine the problem, I switched to Firefox. But I figured out the Chrome issue today.

Side note: I haven’t used Firefox for years but I’m pleased to report it’s become an amazing browser in the meantime. I’ll definitely be continuing to use it as more than just a testing browser for web development.

So the clue for me was that my DuckDuckGo search pages started coming up with ads injected at the top.

The perpetrator was kind enough to add a label, “RocketTab powered by Advertise,” at the top and bottom of the injected results, so it was easy enough to search for. Apparently the RocketTab ad/malware has been around for a long time, and the “powered by Advertise” mutation is only the most recent incarnation. Over its lifespan it’s been everything from a bundled application to browser extensions. It purportedly just injects ads across a bunch of different services with redirects and affiliate links to gather commissions. It also slows your entire computer down tremendously, which seems odd for something so supposedly innocuous.

I started by searching through all of my recently-installed apps. I’m not careless about installing untrusted apps, so that wasn’t likely, but I deleted some cruft. No change.

I ran MalwareBytes, which specifically lists RocketTab as one it detects (and which is, by the way, a very good anti-malware app), but no results there.

So I jumped into the web inspector and started tracing the XHR calls that were made when the ads were injected, then searching for the strings in my Chrome extensions folder. I turned up nothing. Convinced it had to be an extension — and I run a lot of them1 — I disabled all of them. Ads went away. Enabled them one by one, repeatedly refreshing the DuckDuckGo search page to see when they came back. Boom: Tab Manager.

I’m not going to link it here, but see the image above if you need to confirm which one I’m talking about. You’ll immediately note on the Reviews tab that it’s reported as malware. Repeatedly. Many, many times. I reported abuse, as I assume many of the dozens of commenters have, so it’s unfathomable to me that the Chrome Web Store has continued to allow its presence. This apparently only happened with the latest update to the extension published this month (February, 2018).

Long story short, if you see “RocketTab powered by [anything],” figure it out, fast. I read reports that “YouTube Video Downloader” also had the same PUP, and I’m sure there are a dozen others. Disable all your extensions and re-enable them until you find it.

Deleting the offending extension fixed the problem and all of the issues I was having. I’m adding adware (and malware) creators to the list.

  1. I know, I know, “and then you wonder why Chrome gets so slow.”

Web Excursions for February 26, 2018

[Tweet : nvALT]

Web excursions brought to you by MightyDeals.com, featuring great deals on software, training, and design resources.

The app formerly known as MacID has been renamed to Unlox and updated to work with Face ID on the iPhone X. If you fancy unlocking your Mac with your face, here you go.
Omoshiro Block
Not my usual type of link, but this is beautiful. The Omoshiro Block utilizes laser-cutting to reveal objects as the pages are used. Go see the pictures.
ShotBox on the Mac App Store
A handy little (free) utility that adds markup capability to screenshots taken with macOS system tools. No organizer, no built in screenshot tools, just a handy augmentation to default screenshots. If apps like Capto, Monosnap, Pixa, and others are overkill for you, this might be a great solution.
Another warning: Don’t convert your Time Machine volume from HFS+ to APFS
A warning from Macworld about APFS (macOS High Sierra) and Time Machine. Basically, don’t convert your Time Machine disk to APFS, but the details are worth understanding.
ARKit+CoreLocation is an open source library that allows items to be placed within an AR world using real-world coordinates and, by using CoreLocation, improves accuracy to a point where things like Point-of-Interest AR get easier. I’m not currently working on any AR, but it’s exciting to watch the apps and the tools grow.

OmniOutliner 3 (+giveaway!)

[Tweet : nvALT]

OmniOutliner 3 for iOS is out and it’s a big update. See the bottom of the post for a chance to win a Pro license.

This iOS release brings parity with OmniOutliner 5 on Mac, and adds iPhone X and iOS 11 support. It also includes support for printing, new drag & drop features, PDF export, document encryption, and interface updates, including inspectors and new focus and filtering options.

OmniOutliner is now split into two versions: Essentials, and Pro (like the Mac version is now, too). Essentials is a limited in features, but also less expensive ($9.99 US), and easily serves the needs of many people just looking for a solid outliner app. It can print, add notes, export multiple formats, and sync via OmniPresence. It also features “Open In Place,” which allows you to open a file from Dropbox or the Files app, edit in OmniOutliner, and save changes in its original location. Man, I always hated that old sandbox dance.

The Pro version is a $39.99 in-app purchase (both versions are free downloads with 14-day trials). It has everything that Essentials has, plus the ability to “focus” on sections of your outline (including support for multiple selections), and filters with saved searches (including searches set up on your Mac). It can also encrypt your documents on disk (so on the server as well) with AES-256 encryption. If you’re brainstorming in OmniOutliner, encryption means trust and peace of mind, so this is great news (I refer you to Joel Anderson on Systematic).

Perhaps the most exciting thing to me is the inclusion of Omni’s new scripting tool, Omni Automation. Sal Soghoian talked about it a bit on (another great episode of) Systematic, and focused heavily on it in talks at the CMD-D conference (where I was lucky enough to get to speak alongside a bunch of automation heroes). It’s a JavaScript-based scripting language that provides cross-platform automation. If it works on iOS, it works on Mac without alteration. You can see some of the things people have already done with it in OmniGraffle via Omni’s Discourse section.

Omni has kindly offered five Pro version codes ($39.99 US value) for BrettTerpstra.com readers. Enter below with your name (full please) and an email address (as always, only for contacting winners, lists are discarded after the drawing). Five winners will be drawn on Tuesday, February 27 at 12pm CST.

Also check out the free trial of OmniOutliner 3 in the meantime!

Sorry, this giveaway has ended.

More TaskPaper fun with Keyboard Maestro

[Tweet : nvALT]

I’ve put together a few of my Keyboard Maestro macros for TaskPaper 3 that I think might have general appeal. I have to thank Rob Trew at the very top of this post, he’s saved me a significant amount of time in figuring out how to automate these apps1.

You can read on to see how they work, or download the bunch as a Macro Library below.

Natural language dates

First, an update to my Natural Language macro specifically for TaskPaper 3. Rather than bundling Sugar.js or relying on other tools, it now just uses TaskPaper’s own DateTime API. A much shorter (and self-contained) script. The macro is set up to trigger via regular expression any time you type a tag with a value, e.g. @due(tomorrow). When you close the parenthesis, it will scan the entire task for tag values that will translate to dates and convert them. You can specify which tags it will consider using the “dateTags” variable in the macro, a space separated list of tag names (e.g. due start done).

You can use language like “tomorrow,” “next tuesday,” “2 weeks” or just “3” to set the date to three days from now. If a string isn’t recognized, it won’t change.

It can also be triggered by a keyboard shortcut, customizable in the macro editor.

The JavaScript it runs is available in a gist, in case you want to pick it apart.

Note, if you’re looking for an update to my scripts for incrementing and decrementing dates, you can take a look at Jesse Grossjean’s JSA version.

Increment/Decrement tags

The increment/decrement macros are used for cycling numeric values in tags like @priority(5). You can define the tag and the increment (value to add or subtract) in the macro variables, and create additional macros on different hotkeys to add new tags (and unique values). The library I’ve created for download includes “priority” (1-5) and “completed” (10-100%) macros.

For the @priority macros, the minVal is 1, maxVal is 5, and the increment is +1 or -1.

For @completed, the minVal is 10, maxVal is 100, and the increment is +10 or -10.

When triggered, it will look for the defined tag and add/subtract the defined increment (incValue). You can set the minValue and maxValue variables to define the scale.

If the tag doesn’t exist on the task when the macro runs, it will be added with the minValue (or maxValue if decrementing). If it’s at the top of the scale when you increment (or at the bottom when you decrement), it will be removed entirely. Triggering the macro again starts the cycle over from either direction. Otherwise it just adds/subtracts the defined increment from the current value.

Again, here’s the gist if you’d like just the code.


Keyboard Maestro macros for TaskPaper 3 v1.0.0

A collection of Keyboard Maestro macros for cycling numeric tags, natural language dates, and probably more to come.

Updated Mon Feb 19 2018.

DonateMore info…

  1. I’m still clumsy with JavaScript for Automation. As annoying as I’ve found AppleScript over the years, I’m just not loving JSA much more.