Welcome to the lab.

EagleFiler giveaway!

I’m excited to offer the next giveaway, 2 licenses ($59.99 value each) for EagleFiler. EagleFiler is an amazing tool for cataloging and searching all of your information, from web pages to emails and every kind of file you need to keep track of. It gives you a Mail-like interface for viewing all of your data, supports tagging and notes, and offers AES encryption.

From the developer:

Organize files, archive e-mails, save Web pages and notes, search everything. The live search is faster than Spotlight, and you can also set up smart folders and smart folder actions. Search all your files and e-mail attachments, and see the matches highlighted.

Check out the EagleFiler site for more info.

Sign up below to enter. Winners will be randomly drawn on Friday, March 29, at 12pm Central. The drawing is for 2 licenses ($59.99 value each) for EagleFiler, one per winner. Note that if you’re reading this via RSS, you’ll need to visit this post on brettterpstra.com to enter!

New rule: All signups must have a first and last name in order to be eligible. Entries with only a first name will be skipped by the giveaway robot. A lot of the vendors in this series require first and last names for generating license codes, and your cooperation is appreciated!

Giveaway ends in...

One entry per person, a full name and valid email required to win. Giveaway ends on 03/29/24 at 12:00 PM. I will never sell or misuse your email address.

Stay tuned for more giveaways every week through September, 2024 (and maybe beyond).

If you have an app you’d love to see featured in this series of giveaways, let me know. Also be sure to sign up for the mailing list or follow me on Mastodon so you can be (among) the first to know about these!

The Flexibits Premium giveaway winners!

The Flexibits Premium giveaway has ended, and I have winners to announce!

The winners!

Congratulations to:

  • Simon Clemmensen
  • Derek Lucas
  • Knut Focke
  • Norman Hawker
  • Will Goring
  • Ashish Bhateja
  • Johan Romin
  • Pedro Silva
  • Joško Oršulić
  • Alex Lubberts

You should have received an email with details, please let me know if you didn’t hear anything!

But I didn’t win!

If you didn’t win, sorry, but Flexibits Premium is still worth checking out. Get all of Flexibits apps for one low monthly fee. That’s the excellent Fantastical calendar, the uber-handy Scheduling, and the indispensable Cardhop. Check it out!

Next up is EagleFiler. Check back every Monday through September, 2024 for more giveaways. The next giveaways include:

See the full list of upcoming giveaways!

If you want to suggest an app you’d like to see in this series, let me know on Twitter or Mastodon, and join the email list for notifications!

Revisiting TagFiler and Vitag

I haven’t mentioned this setup for a while and thought I’d remind everyone, especially newer readers, about a rabbit hole they might choose to go down. I haven’t updated or changed any of these scripts since posting, and they’re all still working well.

Part 1: TagFiler

Hazel screenshot

First up, I’ll mention TagFiler. This is a single script that runs via Hazel, sorting files into a shallow filesystem using Finder tags. You set up “context” folders which are tagged with =Context, e.g. =Work or =Personal. Then you create a shallow system of subfolders tagged with relevant keywords, preceded with @, e.g. @nvultra or @dimspirations. You can nest those @ folders as deep as you like, but the idea is to make it easy to target them. Then you tag individual files with #Context :subtopic, and subtopics can be nested like #Projects :nvultra:marketing:source to file in ~/Projects/nvultra/marketing/source files.

Finder window showing tags

The nice thing about these tags with punctuation is they create something like nested tagging, which Finder lacks. When searching with Spotlight (or HoudahSpot), you can search any part of a colon-separated tag (this works for any punctuation, TagFiler just uses colons). So with the above example, I can search for tag:nvultra tag:source and get the tagged file as a result. Then, when tagging files in Finder (or, again, HoudahSpot as it has great autocompletion for tagging), the tags will autocomplete as if they were nested, and just typing nvultra will bring up all of the colon-separated versions of the tag.

This tagging system has been working perfectly for me for years now. I collect all my files throughout the day on my Desktop and in my Downloads folder. Hazel tags new files with Purple, and then at the end of the day (or the beginning of the next one) I open up a saved search in HoudahSpot that shows me all Purple files in my main “inbox” folders. I can then use HoudahSpot’s autocompletion to tag the files appropriately, and Hazel just whisks them off to their target folder. This saved search could also just be a Smart Folder in Finder, but Smart Folders can’t narrow down to multiple specific directories. In HoudahSpot this can be accomplished using saved searches and filtering.

The nice thing about this system is that I can also find any TagFiler-tagged file using Spotlight without digging through the folders. But if anything ever happened to my tags (a metadata disaster…), I’d still have a reasonable folder structure for finding all of my files. It’s also nice when archiving projects to a NAS or other storage system that doesn’t have Spotlight searching.

Side Note: cdt

I have a little Bash function called cdt (with a fish companion function) for navigating TagFiler-tagged directories from Terminal. I don’t actually use it much as I have fuzzy_cd in my Fish setup and it’s a bit smarter in general. I can’t vouch that it still works as is, but if you wanted to dig in, let me know if you find issues.

Part 2: Vitag

So I do a majority of my tagging in Finder or HoudahSpot. But when I’m faced with a large number of files and want to tag them quickly and easily, I use vitag.

By the way, if you do your tagging in Finder, you can add a keyboard shortcut to make popping up the tag dialog keyboard-accessible.

Vitag loads up a list of files for the current directory (and optionally subdirectories) with bracketed tags after each filename in your editor of choice. I usually use Sublime Text with -e 'subl -w', but you can use Vim, NeoVim, BBEdit, VS Code, or any editor that has a CLI tool and the ability to wait on the command for the window to close (usually -w, but see the --help for your tool). You just edit the tags as plain text and when you save and close the file, all of the tags are changed on the files.

Vitag screenshot

There’s no autocomplete by default, although I have written a Sublime package (which I haven’t shared because it’s very custom) which helps me out with syntax highlighting, snippets, and autocomplete. For the most part, though, I rely on TextExpander snippets for contexts and common sub-tags.

Then I can just copy/paste as needed to fill out the whole batch, along with the search tools in the editor (at the end of a day most of my files in my inboxes will relate to just a couple of projects, so I can copy and paste many of the tags, sometimes modifying just the last element of a colon-separated tag).

For example, the first thing I do on a batch of “inbox” files is search for Purple and G through the results to add my tags. You could also remove any line that didn’t contain a tag like Purple — as long as the filename remains unchanged, deleting a line will have no effect in Vitag. Unlike tools like Vidir, Vitag only deals with tags.

You’ll notice a couple of files tagged with #x#. This is a special tag that I search for with Hazel, which deletes any file containing it. It’s my solution for deleting unneeded files when doing my cleanup. It actually moves to Trash rather than outright deleting as you’d get in Vidir, which provides the option for undoing.

So, to wrap up, there’s nothing new here. I’ve been using these tools for years. I just thought I’d share them again in case I first talked about them before you started reading. Let me know what innovations you have with your own tagging systems!

Web Excursions for March 19, 2024

Web excursions brought to you in partnership with CleanShot X, the absolute, hands-down best app for Mac screenshots. Get one of my all-time favorite apps here.

Deckset on the App Store
Just when I thought Deckset was dead, an iOS version is announced. Create presentations using Markdown, now on your iPhone/iPad.
iA Presenter
A newer option for Markdown-based presentations (from the creators of iA Writer and based on the same engine) that I think this might be even better than Deckset. Going to give it a test run for a while, but off the bat it looks really slick.
freedmand/textra
macOS 13+ only, a simple command line interface to the OS’s built-in OCR and transcription frameworks. The OCR works really well. Really, really well (I’m using it to add automatic ALT tags to Dimspirations and it deals with text in crazy fonts on crazy backgrounds). I haven’t gone far with testing the audio transcription, but I have high expectations.
Ground News
This is advertised on almost every YouTube channel I subscribe to, so I decided to check it out. It’s really good. If you want to break out of your news bubble and understand what the other side is hearing and thinking, Ground News provides all kinds of tools for doing so. Highly recommended. I’m trying to get my parents to use it, but even if they don’t, it helps me see the headlines that are going to affect them in their bubble so I’m not shocked when topics come up that I’ve seen no trace of previously.

I do all of my screenshots and screen recordings with CleanShot X. I love it to pieces. You should get it.

Flexibits Premium giveaway!

I’m excited to offer the next giveaway, 10 1-year subscriptions ($57 value each) for Flexibits Premium from Flexibits. Flexibits makes some incredibly useful apps. Fantastical is an awesome Calendar replacement, Scheduling makes organizing calls and meetings a breeze, and Cardhop is the perfect way to manage and access your contacts. The Flexibits Premium subscription gets you access to all three, on all your devices.

From the developer:

A single subscription unlocks all premium features in Fantastical and Cardhop across all your devices. Your calendars, tasks, and contacts will be more powerful, more productive, and more fun.

Check out the Flexibits site for more info.

Sign up below to enter. Winners will be randomly drawn on Friday, March 22, at 12pm Central. The drawing is for 10 1-year subscriptions ($57 value each) for Flexibits Premium, one per winner. Note that if you’re reading this via RSS, you’ll need to visit this post on brettterpstra.com to enter!

New rule: All signups must have a first and last name in order to be eligible. Entries with only a first name will be skipped by the giveaway robot. A lot of the vendors in this series require first and last names for generating license codes, and your cooperation is appreciated!

Sorry, this giveaway has ended.

Stay tuned for more giveaways every week through September, 2024 (and maybe beyond).

If you have an app you’d love to see featured in this series of giveaways, let me know. Also be sure to sign up for the mailing list or follow me on Mastodon so you can be (among) the first to know about these!

Build a custom URL shortener

I wanted short urls for Dimspirations, and I wanted a custom domain name (dim.moi), but didn’t want to pay the somewhat exorbitant prices to do so with something like Bit.ly. So I set out to build my own URL shortener.

PHP/mySQL seemed like the path of least resistance on my current server setup, so I went looking for existing tools that met my needs without too much complication. I found Shorty by Mike Cao, a decade-old project that still worked just fine. I forked it and built a tool called Shortly on top of it. It uses all of the base code of Shorty with my own additions, so full credit for this goes to Mike, but it has enough changes specific to my needs that I’m not pushing my fork upstream.

Shortly is a basic URL shortener. You just have to register your short domain, set up basic PHP/mySQL hosting for it, and then install the files. So the total cost is one domain registration, plus whatever hosting you use for it. It requires very few resources, so a simple $5 shared hosting plan will work fine. I have multiple servers where adding new domains doesn’t cost me anything, so I went with a Dreamhost server for this and built it for just the cost of a .moi TLD ($30/yr, if I recall correctly).

The install instructions are detailed in the README and on the project page. It’s pretty simple, just creating a mySQL database and importing an SQL file to set up the simple database. In about 15 minutes you can have a custom URL shortener that outputs urls like dim.moi/eQ and passes them through to the full url on the target site. All of my Dimspirations now have short urls, and I can generate new ones with a simple curl call from my build system.

Here’s what I added to the script:

  • Allow limiting shortening to one domain
  • Allow forwarding of paths containing hyphens or which are not found in the database to be forwarded to a root url
  • Allow appending query strings to urls before shortening or forwarding
  • Accept format=qr and size=XXX to create QR codes for shortened urls
  • Add longURL keys to JSON and XML output
  • Default to plain text output format, perfect for curl calls

All of these settings are detailed in the README and commented in the config file.

For my particular needs, my shortener will only shorten URLs from dimspire.me, will forward unknown urls like dim.moi/ether-bunny to https://dimspire.me/dimspiration/ether-bunny/, and will append some UTM parameters to any url it shortens so I can track usage.

Part of the impetus for this was I wanted to include UTM parameters in the links I offered for sharing, but didn’t want to make ungainly URLs. With Shortly, I can add any query parameters I like to a url and end up with a simple https://dim.moi/fR url to share. And I can shorten https://dimspire.me/dimspiration/optimal-anxiety-level/ to https://dim.moi/optimal-anxiety-level/ without even using the API (as the unrecognized slug automatically gets forwarded to the base url dimspire.me/dimspiration/SLUG).

Hopefully this inspires some fun projects of your own, and revives a great little project that Mike Cao started. It’s such a simple concept that I’m sure there are dozens, if not hundreds, of permutations of it. This is just the one I found the easiest to hack away at and get running with minimal fuss. Check out the project page or the GitHub repo to get started.

As an aside that’s not worth it’s own post, I also set up a CloudFront instance that forwards from.ttscoff.me/(filename) from an S3 bucket, and added a Dropzone destination so I can just drag any file to Dropzone and get back a from.ttscoff.me URL with which I can share any file. It lacks all of the niceties of other file-sharing tools, but I’m running it for less than a dollar a month. Subdomain was free, and it doesn’t use enough bandwidth to really register as an expense in my Amazon plan. If you want any details on how to do this, just let me know.

The Bike giveaway winners!

The Bike giveaway has ended, and I have winners to announce!

The winners!

Congratulations to:

  • Christoph Schneider
  • Albert Willis
  • Nicholas Foley

You should have received an email with details, please let me know if you didn’t hear anything!

But I didn’t win!

If you didn’t win, sorry, but Bike is still worth checking out. You can still save 20% with the coupon code BRETT at checkout. Get the simple yet powerful outliner today!

Next up is Flexibits Premium. Check back every Monday through September, 2024 for more giveaways. The next giveaways include:

See the full list of upcoming giveaways!

If you want to suggest an app you’d like to see in this series, let me know on Twitter or Mastodon, and join the email list for notifications!

Bike giveaway!

I’m excited to offer the next giveaway, 3 licenses ($29.99 value each) for Bike. Bike is a deceptively simple outliner. It uses plain text files (HTML, but also supports OPML and text) to store structured data that maintain simplicity while offering a ton of functionality. Add row types like headings, ordered lists, task lists, and more. Create deep-links into your outline (works great with Hookmark).

From the developer:

Bike’s nimble. Use it as the main app for a big project or as a supporting app for notes and ideas. Standard file formats, shortcuts support, and scripting allow Bike to integrate with your existing workflows.

Check out the Bike site for more info.

Sign up below to enter. Winners will be randomly drawn on Friday, March 15, at 12pm Central. The drawing is for 3 licenses ($29.99 value each) for Bike, one per winner. Note that if you’re reading this via RSS, you’ll need to visit this post on brettterpstra.com to enter!

New rule: All signups must have a first and last name in order to be eligible. Entries with only a first name will be skipped by the giveaway robot. A lot of the vendors in this series require first and last names for generating license codes, and your cooperation is appreciated!

Sorry, this giveaway has ended.

Stay tuned for more giveaways every week through September, 2024 (and maybe beyond).

If you have an app you’d love to see featured in this series of giveaways, let me know. Also be sure to sign up for the mailing list or follow me on Mastodon so you can be (among) the first to know about these!

The Things for Mac and iOS giveaway winners!

The Things for Mac and iOS giveaway has ended, and I have winners to announce!

The winners!

Congratulations to:

  • Ada Panzier
  • Aaron Ferkenstad
  • Bart van der Pot
  • Daniel Doron
  • Nathan D Myers

You should have received an email with details, please let me know if you didn’t hear anything!

But I didn’t win!

If you didn’t win, sorry, but Things for Mac and iOS is still worth checking out. Things will help you get organized, and get your stuff done.

Next up is Bike. Check back every Monday through September, 2024 for more giveaways. The next giveaways include:

See the full list of upcoming giveaways!

If you want to suggest an app you’d like to see in this series, let me know on Twitter or Mastodon, and join the email list for notifications!

Things for Mac and iOS giveaway!

I’m excited to offer the next giveaway, 5 (sets of) licenses for Mac, iPhone, and iPad ($80 combined values) for Things. Things is a task management solution that I love for its elegance. Display your todos alongside calendar events, see exactly what you have to do today, see upcoming tasks, and break large projects down into manageable pieces.

From the developer:

Things makes it easy. Within the hour, you’ll have everything off your mind and neatly organized – from routine tasks to your biggest life goals – and you can start focusing on what matters today.

Check out the Things site for more info.

Sign up below to enter. Winners will be randomly drawn on Friday, March 08, at 12pm Central. The drawing is for 5 licenses for Mac and iOS ($80 value each). for Things for Mac and iOS, one per winner. Note that if you’re reading this via RSS, you’ll need to visit this post on brettterpstra.com to enter!

New rule: All signups must have a first and last name in order to be eligible. Entries with only a first name will be skipped by the giveaway robot. A lot of the vendors in this series require first and last names for generating license codes, and your cooperation is appreciated!

Sorry, this giveaway has ended.

Stay tuned for more giveaways every week through September, 2024 (and maybe beyond).

If you have an app you’d love to see featured in this series of giveaways, let me know. Also be sure to sign up for the mailing list or follow me on Mastodon so you can be (among) the first to know about these!