
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.
Thanks to Backblaze for sponsoring BrettTerpstra.com this week! I’ve been a user for years and it’s saved my hide many times. It’s so easy to set up, and just as importantly, easy to restore files whenever needed. Everybody should have a good cloud backup, and Backblaze is the best I’ve found.
Backblaze Computer Backup offers unlimited and automatic backup for individuals and businesses for just $9/month.
With Backblaze, you can back up documents, photos, music, movies, and more to the cloud. Available for both Macs and PCs, it’s easy and automatic—all you have to do is create an account and your files will start backing up. You can even back up external drives! Backblaze has over three exabytes of data under storage and has restored 55+ billion files for customers.
In the event of hardware failure, accidents, or ransomware, Backblaze offers multiple restore options—you can access your data from anywhere in the world with our web and mobile apps for iOS and Android. You can download files from the web or receive a USB hard drive with all your data shipped to your door. If you return the hard drive within 30 days, you get a full refund!
Protect business data and manage backups for your organization through a centrally-managed admin. Deploying Backblaze on thousands of workstations across your organization is easy!
We offer 30 days of Version History by default and one-year file retention for free so you don’t have to worry about accidentally deleting your data or keeping old file versions. For extra protection, you can upgrade to Forever Version History for just $0.006/GB per month.
Backblaze takes security seriously. All data is stored in our secure data centers with 24-hour staff, biometric security, and redundant power. Here are a few of our security measures:
Backblaze is recommended by The New York Times, Inc. Magazine, MacWorld, PCWorld, Lifewire, Wired, Tom’s Guide, 9to5Mac, and more. Recently listed on the NASDAQ Stock Exchange under BLZE, Backblaze is committed more than ever to bringing easy and affordable data storage that you can trust.
Backblaze Computer Backup starts at $9/month. You can save $9 annually by signing up for an annual license, or save $27 when you sign up for a two year license.
Get started with a 15-day no credit card required free trial by going to backblaze.com/terpstra.
The latest version of mdless, my most recent coding obsession, now includes MultiMarkdown document transclusion.
File transclusion is the ability to tell MultiMarkdown to insert the contents of another file inside the current file being processed.
You can include a document by inserting a relative path between two pairs of curly brackets:
{{myfile.md}}
The path is relative to the current document, which won’t work if you’re piping text to mdless. In that case it would need to be an absolute path, or have transclude base
specified in the metadata.
To provide a base for transclusion paths, just add transclude base
to your document’s metadata, either as MultiMarkdown metadata, or as a YAML header:
transclude base: ~/Documents/myproject/chapters
It’s probably not a super useful feature to 90% of mdless users, but should be handy for some.
Well, the SaneBox drawing has happened I have winners to announce! The following readers have won a 1-year subscription to the handiest email service out there!
Congrats to the winners! If you didn’t win, I’d still recommend checking out SaneBox. Use this link to save $25 on your subscription. It will bring a sanity to your email that you’ve only imagined was possible.
Don’t forget to sign up for the Soulver giveaway that’s happening Friday!
I’m excited to offer the next giveaway, 4 licenses ($34.95 value each) for Soulver. Ever wish you could type out a math problem in words and have the answers handed to you? Soulver combines a notepad with a calculator and gives you instant answers.
From the developer:
Soulver is a smart replacement for your calculator app. Use it to work things out, explore different scenarios and play around with numbers. You can use words alongside numbers and almost never encounter an error. And all your work is automatically saved for you so you can reference it later.
Check out the Soulver site for more info.
Sign up below to enter. Winners will be randomly drawn on Friday, December 08, at 12pm Central. The drawing is for 4 licenses ($34.95 value each) for Soulver, 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...
Stay tuned for more giveaways every week through August, 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 Tower 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 Tower is still worth checking out. If you use Git for anything, Tower can make your life easier. Until Dec 5th you can get 50% off for new users on any plan. Just visit git-tower.com to purchase.
Next up is Soulver. Check back every Monday through August, 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 just pushed v2.1.6 of mdless. Once all these 2.0 changes are confirmed to be stable, I’ll let this project go for a while, but right now there’s lots to improve on and I’m enjoying it as a way to blow off steam.
The biggest change in 2.1.6 is the ability to use hex codes when theming. If you didn’t know, the first time mdless
is run, it saves a theme file to ~/.config/mdless/mdless.theme
. You can edit this file to change what colors different elements display as. You can also create additional NAME.theme
files and trigger them with --theme NAME
, or set the :theme:
setting in your ~/.config/mdless/config.yml
.
With the latest version, you can use 3 or 6-digit RGB codes in addition to color names. Where previously you were limited to the default ANSI colors like red, blue, magenta, cyan, etc., you can now insert something like eccc87
where a color name would usually go. You can affect background colors by prefixing with bg
or on_
, e.g. bgeccc87
. The depth of color that can be displayed depends on your terminal, but at minimum this opens up 256 colors for theming, a 32x increase in options.
I also fixed a couple of issues where span elements in list items would cause the coloration to change. And when there’s a space between list items, they get rendered as paragraphs within list items (standard for most Markdown parsers), causing the coloring to be unexpectedly the same as regular paragraphs. Now mdless
strips out regular paragraph coloring on paragraphs contained in list items, so every paragraph within a list gets the list item coloring.
In TaskPaper rendering, documents will now respond to --list
to list projects, and --section
to list just certain project(s) contents. These no longer have to be numeric (for Markdown or TaskPaper); fuzzy text matching can pick a section (or multiple sections) for you. I also improved the TaskPaper auto-detection by adding a routine that removes all lines that match project or task regular expressions, and if there’s nothing left, it assumes it’s a TaskPaper document. Let me know how this works in the real world.
Lastly, I added a --changes
flag that will display the changelog (using mdless for readability), so when you update you can see what changed just by running mdless --changes
.
Check out the project page for the full changelog and more details!
Thanks to SaneBox for sponsoring BrettTerpstra.com this week! Instead of a monthly sponsored post this month, the good folks at SaneBox have decided to join my giveaway series and offer 5 free 1-year subscriptions to SaneBox to BrettTerpstra.com readers. Just sign up below for a chance to win.
If you somehow haven’t heard of SaneBox yet, it’s a service that keeps your email inbox clean. You can train certain types of emails to go to your @SaneLater folder, or any custom folder, just by moving an email once. Future emails like it will automatically go to that folder. Forget setting up complicated filters and rules, a week of training and you’ll have a clean inbox that contains only the messages you actually need to see. I especially love the @SaneBlackHole feature which lets me banish certain senders to a, well, black hole, where their messages disappear and I don’t have to go through any hassle of unsubscribing or requesting data removal to stop the incoming messages.
Sign up below for a chance at one of 5 1-year subscriptions, a $299 value. Winners will be drawn next Wednesday, December 6th.
Sorry, this giveaway has ended.
I’m excited to offer the next giveaway, 2 1-year licenses ($99 value each) for Tower. Tower is the absolute best Git GUI out there. If you use Git for work or personal projects, its in-depth integration with the entire Git toolset makes life easier, even if you’re already well-versed in the command line. It includes great GitHub integration for pull requests and issues.
From the developer:
All of Git’s Power (And None of the Pain). Pull Requests, Single-line staging, Interactive Rebase, Submodules, Git LFS, Git-Flow, File History, Blame, Cherry-Pick.
Check out the Tower site for more info.
Sign up below to enter. Winners will be randomly drawn on Friday, December 01, at 12pm Central. The drawing is for 2 1-year licenses ($99 value each) for Tower, 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 August, 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 made a few major updates to mdless 2.0 (first announced a couple days ago) over the holiday weekend. Note that you can make all of the new options permanent in the config file (see Easily Update Config). Options specified on the command line will always override anything in the config file, so you can disable options permanently but enable them on a per-run basis using command line flags.
The first problem I ran into was that if a link, emphasis, or other inline element came in the middle of a line, everything after that element would fail to be styled. So I added in a routine that I created for Doing that can take the text preceding an element and determine what the escape sequence would be at the end of that text, right before the new element. Then I can restore that sequence after the new element.
Second, and this was a real pain, nested lists weren’t working. Like at all. I didn’t notice it at first because my test files had very basic lists in them, but lists were being flattened, ordered list sequencing was completely out of whack, and nested paragraphs and code blocks within lists were getting totally borked. Fixing this was a pain. Redcarpet only provides “text” and “type” to the list rendering functions, so you have no idea if it’s nested, at what level, etc. You can start a class variable counter and increment it with each ordered item, but as soon as it nests or starts a new list, you’re in trouble, and lists aren’t rendered in sequence anyway, so an array structure to keep track of them is impossible. They’re rendered inside out, so any kind of basic counter will be off as soon as you have a nested ordered list. Fixing this took me three days, and I went through a dozen solutions before one worked. I think the current solution is pretty solid, seems to handle all of the aforementioned issues and maintain accurate numbering with multiple nested, ordered lists. Also indents paragraphs and code blocks within lists.
The Default Folder X 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 Default Folder X is still worth checking out. Trust me, you need this. You might not realize how limited your standard open and save dialogs are until you’ve experienced Default Folder X. You can still save 20% by using the coupon BRETT-DFX-2023
at checkout.
By the way, Default Folder X is also available on Setapp, along with hundreds of other amazing apps. You should probably get a subscription.
Next up is Tower. Check back every Monday through August, 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!