Use the power of your Terminal in 2021. Here is a list of our favorite resources.

If you have wondered what you can do with your terminal, the answer is “almost everything”. Here is a list of our favorite resouces for getting the most out of the command line.

{ Comments are closed }

Using Hazel to automatically convert an epub to mobi with Calibre.

HazelSometimes I want to convert a few ebooks from epub to mobi for reading on my kindle. I could add them, convert them, and email them to Amazon using Calibre, but wouldn’t it be cooler to just drop the epubs in a directory and not think about them anymore until you open your kindle to read. This can be done with a workflow I found on (r.i.p.) 7 years ago and it still works today. Using the command line tools embedded in Calbre, a “fire & forget” solution can be created for ebook conversion. The tool can be found here: /Applications/ and to use it with Hazel, follow these steps.

1. Create three directories, ebook, converted, and sent.

2. In Hazel, create the following rule for the directory ebook.

If all of the following conditions are met:

Extension is: epub

Do the following to the matched file:

Run Shell Script:

ORIG_FILE=$(basename "$FULL_PATH")
/Applications/ "$ORIG_FILE" "converted/$(basename "$FULL_PATH" .epub).mobi

Move to folder: converted

3. Now for the directory, converted, add this rule in Hazel.

If all of the following conditions are met:

Extension is: mobi

Do the following to the matched file:

Run AppleScript:

tell application "Mail"
	set newMessage to make new outgoing message with properties {subject:"Hazel to Kindle", content:""}
	tell newMessage
		set sender to "[your email address]"
		make new to recipient at end of to recipients with properties {address:"[your kindle email address]"}
		make new attachment with properties {file name:theFile} at after the last paragraph
	end tell
	delay 30
	send newMessage
end tell

Move to folder: Sent

4. Now just drop your epubs into the directory conver and watch the magic happen.

{ Comments are closed }

Yes, MarsEdit has a URL Scheme.

MarsEditMarsEdit has always been my favorite tool for maintaining blogs. After some time off, I started using it again but a feature I really like in all my apps seemed to be missing. I searched but I could not find anything written on the use of a URL Scheme with MarsEdit. I did find a nice Drafts action built with AppleScript, but no URL Scheme. I wrote to the awsome developer of MarsEdit, and he clarified that though it’s not really documented anywhere, there is a URL Scheme. Here it is:


{ Comments are closed }

TextExpander snippet for youtube-dl to download the audio from a video and save as mp3

For those times when you don’t need the video and just want to listen to the audio later, add this snippet to your toolbox. To use, copy the URL to your clipboard, then expand the snippet in your command line. Prerequisites: Homebrew, youtube-dl, and ffmpeg.

youtube-dl -f bestaudio [clipboard] --exec "ffmpeg -i {} -codec:a libmp3lame -qscale:a 0 {}.mp3 && rm {} "

{ Comments are closed }

The sad decline of TextExpander for iOS

TxSmile is one of my favorite companies. I have owned every version of every one of their products. I am glad to be a subscriber to TextExpander as I feel it’s worth it. It’s why I am saddened by the state of Textexpander for iOS. When it was introduced, it was called TextExpander touch to give it its own identity. Over the years, I watched it grow from a novelty to a necessary tool that was usually one of the first apps installed on any new iPhone. In 2013, TextExpander touch added Fill-In Snippets. This was the game changer. Suddenly, mobile users gained the fill-in snippet power that so many Mac users enjoyed. With the release of TextExpander touch SDK, the amount of apps that supported TextExpander swelled to over 150 in 2014. TextExpander touch support became ubiquitous. No app that handled text would dare release without supporting TextExpander. TextExpander touch was on top of the world.

What could go wrong?
Fast forward to 2016. Smile reintroduces TextExpander as a subscription service. It was a rough start but they seemed to handle the complaints by tweaking the subscrition levels to reward long time users. We heard the reasons for the subscription, “necessary to sustain the company”, “developers could deliver incremental updates instead of waiting a year for a big upgrade”. We accepted these reasons and begain paying the subscription.

Fast forward four years to 2020. On iOS devices, we have gone from version 4.0 to 4.6.4 with the overwhelming majority of updates being nothing but bug fixes. So if you are an iOS user exclusively, your subscription is paying for not much more than bug fixes. You have been paying to beta test TextExpander for over 4 years. There have been no awesome new features in the iOS app.

Smoke and Mirrors.
It’s easy to say “It’s Apple’s fault. Sandboxing in iOS makes it difficult for TextExpander to do the things we can do on the Mac”. However, I am afraid that Smile shoulders most of the blame. Their SDK for iOS TextExpander support languished for a couple of years with no updates until last year. During that time, thousands of apps were released that could benefit from TextExpander support but due to an apparently unsupported SDK, the developers forewent adding TE support in their app. Other developers saw the TextExpander keyboard and shrugged, “meh, it’s good enough”. Good enough until you want to use an external keyboard, then not so much. So when Smile proudly points us to the TextExpander-Enahnced Apps page of their website, which once listed 150 apps, now states “74 and counting…”. What that means however is “74 and counting…backward”. If you take the time to count the apps on the page, there are only 50. If you dig down into the apps, you will find some that are no longer even in the AppStore like Dispatch. Others like Note-ify Notes has not been updated in 3 years, Call Notes has not been updated for 6 years, SnapWriter has not been updated for 4 years, etc. Do you see where I am going here? Last month, Day One, one of the top-tier apps that supported TextExpander for years, announced that they were dropping TextExpander suppport.

Unintended Deception?
For the longest time I have been looking at this statement on Smile’s website.


The wording of it is very specific. Notice they are not using the verbage, “on an external keyboard”. They are saying “in the keyboard”. This leads one to believe that they have found some way to implement fill-in snippets using the TextExpander keyboard. Yet when support is asked directly, they state “no it’s not possible to do it due to Apple limitations on sofware keyboards. Is it possible they are talking about this awkward workflow below? If so, why even have that question on the website?


The Bright Side and Conclusion.
Ever the optimist, I can still happily say that other top-tier apps like Omnifocus 3, Fantastical 3, Drafts 5, and GV Connect still have native TextExpander support (including fill-in snippets). So all is not lost…yet. I would hope that in the future, Smile would reach out and encourage developers to include native TextExpander support in their apps. It’s possble Smile is content with corporate subscriptions on the Mac side and Textexpander for iOS is nothing but an afterthought. This would be unfortunate as it may be easy to replace TextExpander on the Mac with Alfred, Keyboard Maestro, Espanso, Typinator, etc, we have no such luxury on iOS. We depend on Smile for TextExpander and pay monthly or yearly to ensure it survives. We just want a little more than survival. We want “thrival”.

{ Comments are closed }

BBC makes 16,000 sound effects available for free.

These 16,000 BBC Sound Effects are made available by the BBC in WAV format to download for use under the terms of the RemArc Licence. The Sound Effects are BBC copyright, but they may be used for personal, educational or research purposes, as detailed in the license.

You can find them here.

{ Comments are closed }

OpenSource is up to volume 13 of their ongoing series about creating video games in Python 3 using the Pygame module

Programming keyboard coding OpenSource is up to volume 13 of their ongoing series about creating video games in Python 3 using the Pygame module. Python is an all-purpose programming language that can be used to create desktop applications, 3D graphics, video games, and even websites. It’s a great first programming language because it can be easy to learn and it’s simpler than complex languages like C, C++, or Java. Even so, Python is powerful and robust enough to create advanced applications, and it’s used in just about every industry that uses computers. This makes Python a good language for young and old, with or without any programming experience. Check out their entire series of Python & Pygame tutorials here.

{ Comments are closed }

Shortening a URL with with TextExpander and YOURLS

If you would like to shorten a URL by having TextExpander on macOS grab the URL from your clipboard and replace it with your personal YOURLS shortener using a TE snippet, here you go:

Copy your signature token from the Admin Tools page in your install of YOURLS.

In TextExpander create a shell script snippet by clicking on the Content drop down menu at the top where it says Plain Text, and choose Shell Script.

Add the following script for the body of the snippet, replacing the necessary parts with your own information of course.

curl --silent -o - "http://YOURLS_URL_HERE/yourls-api.php?signature=$id&action=shorturl&format=simply&url=%clipboard" |
awk -F# '{gsub(/ /,"");print ($1) }'

Then add your label and abbreviation. You are all set.

{ Comments are closed }

Faster sharing from Firefox to Omnifocus in MacOS

If using the share sheet slows you down, add this bookmarklet to Firefox. The bookmarklet will save the title as the action name and the url as a note. Omnifocus sets a due date of tomorrow to remind you to take it out of your inbox and process it and it autosaves to eliminate any need to interact with Omnifocus. Hit it and keep on going. The bookmark can be edited to share to specific projects and change the due date.


{ Comments are closed }