Brett Terpstra
Brett is a writer and developer living in Minnesota, USA. You can follow him as ttscoff on Twitter, GitHub, and Mastodon. Sign up for the email newsletter, and keep up with this blog by adding it to your favorite news reader.
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!
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 has ended, and I have winners to announce!
Congratulations to:
You should have received an email with details, please let me know if you didn’t hear anything!
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!
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.
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
.
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.
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.
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.
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 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.
I do all of my screenshots and screen recordings with CleanShot X. I love it to pieces. You should get it.
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!
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:
format=qr
and size=XXX
to create QR codes for shortened urlscurl
callsAll 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 afrom.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 has ended, and I have winners to announce!
Congratulations to:
You should have received an email with details, please let me know if you didn’t hear anything!
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!
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 has ended, and I have winners to announce!
Congratulations to:
You should have received an email with details, please let me know if you didn’t hear anything!
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!
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!