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!
You need to view this post on brettterpstra.com to enter.
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!
Like or share this post Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>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.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’ve created the initial round of merchandise for the Dimspirations Store. I know my sense of humor isn’t for everyone, which is why this whole project is on a different site.
I’ve started with some of my personal favorites as tees, mugs, and a 2024 calendar. The collection will grow over time (it’s print-on-demand, no cost to me to expand the selection). I’ll also adjust pricing based on feedback. I think the prices are pretty competitive based on what I’ve spent on merch myself.
I’m using Sellfy for the printing and delivery. I’ve used Spring in the past and checked out Printful and Cotton Bureau, but Sellfy seemed like the best solution with the most competitive pricing. I already paid for a 1-year package, so let’s hope it works out. If it does, I’ll probably relaunch the BrettTerpstra.com (Lab) merchandise there as well.
Please do check out the store, and if you like what you see, toss a couple bucks my way. And if you don’t see what you want, be sure to upvote your favorites Dimspirations by clicking the devil below each one. If you have special requests, of course let me know.
I’ll admit, this one is my favorite:
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The Black Ink giveaway has ended, and I have a winner 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 Black Ink is still worth checking out. You can save 20% on your purchase with the coupon IndieTerpstra
. Visit the Red Sweater store to grab your copy!
Next up is Things for Mac and iOS. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Web excursions brought to you in partnership with Backblaze. Back up everything.
Backblaze securely backs up your entire computer to the cloud, affordably and reliably. I trust it with all my data. Check it out today.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Effective communication is key in the workplace. With it, we can complete tasks on time and meet sales goals. Yet, essential messages can sometimes get lost in our busy inboxes.
This is where reminder emails come into play—they serve as gentle nudges to keep tasks on track without being overly intrusive. Crafting a reminder email that is polite, clear, and actionable requires finesse. Luckily, these best practices and examples can help you write an effective reminder email that helps you achieve your goals without sounding rude.
Start your reminder email with a courteous greeting to set a positive tone. Whether you’re addressing a colleague, client, or team member, a friendly salutation can go a long way in fostering goodwill.
Example
Subject: Friendly Reminder: Upcoming Team Meeting
Dear [Recipient’s Name],I hope this email finds you well. I wanted to gently remind you about our upcoming team meeting scheduled for [date and time]. Your presence and input are highly valued, so we look forward to you joining us.
Clearly state the purpose of your email and provide relevant context to jog the recipient’s memory. Be concise yet comprehensive, ensuring that the recipient understands why the reminder is necessary and what action is expected from them.
Example
As our project deadline is approaching, it’s crucial that we finalize the presentation slides by [deadline date]. Your expertise in [specific area] will be invaluable in ensuring the success of this project. Please review the attached draft and provide your feedback at your earliest convenience.
Specify the task or event that requires attention, including any pertinent details such as deadlines, locations, or action items. Avoid vague language that could lead to confusion or misunderstanding.
Example
Please submit the quarterly sales report by [deadline date]. This report is essential for our planning and decision-making processes. Please don’t hesitate to reach out if you require any assistance or additional information.
Clearly outline the steps the recipient needs to take and any deadlines associated with those actions. A call to action provides clarity and encourages prompt response or action.
Example
To confirm your attendance, please RSVP by clicking on the following link: [RSVP link]. If you cannot attend, kindly let us know so we can make the necessary arrangements.
If you are concerned your call to action may not be strong enough or elicit a timely response, you can always use the SaneReminders feature from SaneBox to help you follow up later on. Think of it like a timer: you specify the information with an @sanebox.com email in the To or CC line, and SaneBox takes care of the rest.
Express gratitude for the recipient’s cooperation and assistance. Acknowledging their efforts reinforces positive behavior and encourages continued collaboration.
Example
Thank you for your attention to this matter and for your continued dedication to our team’s success. Your contributions are truly valued and appreciated.
End your email with a polite closing that leaves a positive impression. A courteous farewell demonstrates professionalism and respect for the recipient’s time.
Example
Once again, thank you for your cooperation. We look forward to your prompt response. Please don’t hesitate to contact me with any questions or concerns.
Writing an effective reminder email requires a balance of politeness, clarity, and specificity. However, your workplace can avoid lost messages and overloaded inboxes altogether by utilizing a mailbox management app like SaneBox.
SaneBox is an incredible inbox management tool that can save you hours per week thanks to seamlessly organizing and filtering emails. Once you set up SaneBox, the email management tool will classify incoming messages into folders based on their importance. This way, you can quickly view essential messages that require a response and leave the rest for later.
Effective communication is the cornerstone of productivity and success in any endeavor. Don’t be the reason someone needs to send you reminder emails: gain control over your email with SaneBox. Check out SaneBox today and save $25!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>On a whim I’ve put the new Dimspire.me site up on Product Hunt. I’ve been putting a lot of love into it and even if I were to stop now, I think it’s a great collection of nihilist inspirations (and wallpapers), enough to last quite a while. I’d love it if you’d take a second and leave a review.
Thanks!
Like or share this post Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, a license ($29.95 value) for Black Ink. Red Sweater software is back again with Black Ink, Daniel’s app for crossword puzzle lovers. It can load any puzzle file designed for the Across Lite puzzle format, and offers a beautiful way to solve them on your Mac, with the option to print them out and solve them old-school with a pen(cil). I can solve the NYT Crossword more than twice as fast using Black Ink vs. the NYT Games app!
From the developer:
Puzzles have never looked so good. Finally, an app that cares as much about crosswords as you do. Live resizing, beautiful status markers, and a streamlined puzzle chooser make your puzzle solving experience a joy.
Check out the Black Ink site for more info.
Sign up below to enter. A winner will be randomly drawn on Friday, March 01, at 12pm Central. The drawing is for a license ($29.95 value) for Black Ink. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’ve added (well, fixed) the RSS feed for Dimspire.me. You can now subscribe via your favorite feed reader at Dimspirations RSS (or just enter https://dimspire.me
in your subscribe field, the feeds are discoverable). The feed is available in XML and JSON flavors, and each entry just contains a pithy description and one image.
You can also sign up to receive Dimspirations in your email, max one email per day, and only when there’s new stuff:
Thanks for supporting this little project. I’ve decided if I ever monetize it, it will be through merch (posters, calendars, coffee mugs, etc.). So the wallpapers and dismal inspirations will continue to be free online.
P.S. I’ve received some flack for occasionally going “political” with the Dimspirations. I don’t think things like being disgusted by a lack of gun control, being anti-genocide, or laughing at manufactured outrage are extreme political views, but I promise to keep those to a minimum. Sometimes I get a little fired up — don’t let it scare you away.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The TaskPaper giveaway has ended, and I have winners to announce! Sorry for the delay in getting the announcement out, I had a rough day yesterday. Thanks for your patience!
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 TaskPaper is still worth checking out. TaskPaper is the most flexible todo list format you can have, being based on plain text. You can still save 20% on your purchase with the coupon BRETT
. Use the Buy Now button on the TaskPaper site to grab your copy!
By the way, TaskPaper is also available on Setapp, along with hundreds of other amazing apps. You should probably get a subscription.
Next up is Black Ink. 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!
Like or share this post Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I couldn’t sleep last night. I’m not manic, I’m just going through this months-long bout of insomnia. At least I don’t think I’m manic. It doesn’t have any of the characteristics of my usual mania. And up until last night I wasn’t even getting out of bed when I couldn’t sleep. But last night I did, and I made you a website.
Introducing Dimspire.me. It’s built on Jekyll and has a bunch of automations. I can essentially create a “dimspiration” using an Affinity Photo template, and then RetroBatch will output wallpaper sizes (including iPhone) and square versions for posting and populating the gallery. Just running rake
will find new photos added to the assets folder and generate posts for them, which will then populate the index pages. It should be pretty simple to maintain. All documented in a Howzit notes file, of course.
The site is pretty simple: a homepage with description and the latest few posts, a “Dimspirations” page that’s essentially a blog post index but done in gallery fashion, and a random dimspiration page that will just throw single random dimspirations at you. Fun stuff.
When viewing a single Dimspiration (by clicking on any thumbnail), you get some cool UI showing edges of the previous and next Dimspiration. I like it, anyway. There’s still some work to do on certain breakpoints, but overall the styling should work on any device. And every Dimspiration page has a download button, where you can download all available versions of the current Dimspiration. This is accomplished by a Rake task that parses every post, extracts the YAML key that defines the image for the page, then zips up every file in the assets directory that matches it. It creates a manifest table that shows what’s in the zip file, with each individual file linked. So when there are wallpaper versions of a Dimspiration, you can download the set or follow a link to a specific version. Took a little thinking and tweaking, but I think it’s a good solution.
I hope you enjoy it. It’s cathartic for me to create these, and they’re getting better with time. I’m not going to try to monetize any of this at this point, but I’ve watermarked all the images so if you share them, they should trace back to me. Speaking of, I do still need to consider adding share buttons to these… but it always freaks me out how much data social sites collect when you include their button, so I’ll need to figure out ways around that. We’ll call that “next step.”
Love always,
Brett
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Keep It is a notebook and organizer, ideal for writing notes, keeping web links, storing documents, images or any kind of file, and finding them again. Available on Mac, iPhone and iPad, Keep It is the destination for all those things you need to put somewhere, confident you will find them again later.
Create notes with built-in styles that look good and read well on all your devices. Notes can contain checklists, bulleted and numbered lists, links, dividers, images and other attachments.
Or if you prefer writing in Markdown, Keep It includes an editor with syntax highlighting, word count, tools for formatting text, inserting links and images, and a customizable preview.
Keep It can edit its own notes, rich text, plain text and Markdown files, add highlights and notes to PDFs, and show previews for images, web pages and most other documents. Any kind of file can be added to Keep It and opened in its original app for editing.
Keep It integrates well with macOS and iOS. On Mac, you can save files to one of Keep It’s folders in the Finder or standard Open and Save panels. On iPad and iPhone, see Keep It’s files in the Files app, and the standard document browser used by most apps.
Save web links to Keep It in any app via its Share extension. Choose to save them as PDFs or web archives for offline reading, or convert them to editable notes.
Keep It has a number of ways to organize your files – tags hierarchical folders, mirrored in the Finder and Files app, color-coded labels, and bundles, where items can be in more than one bundle at a time. Other lists include the Recents list to see things you’ve added or viewed lately, with the latest shown at the top. Favorites provide quick access. Quick File lets you file things without taking your hands off the keyboard.
Keep It can search the content of most files, recognize text in scanned PDFs and images, and prominent features in images. While searching, suggestions appear as you type, allowing you to narrow down results to exactly what you need, and build complex searches with ease. Searches can be saved for later reuse. Quick Open lets you open anything just by typing its name.
Keep It’s Tag Filter makes finding things by tags easy, and works with search and the selected list. Choose a tag to see all the tagged items and any other relevant tags; choose another tag to drill down further.
Keep It can store everything in iCloud, so your notes and files will be available across all your Macs, and iOS devices. Keep It can also share top-level folders and individual items with other Keep It users via iCloud.
Tasks in Keep It can be automated with AppleScript, Automator and the Shortcuts app. Grab a free trial Mac, iPhone, or iPad and check it out today!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, 3 licenses ($24.99 value) for TaskPaper. TaskPaper is a task management solution based entirely on plain text. It offers a familiar interface to work with files in the TaskPaper format, with tagging, projects, due dates, and all the things you need for task management. Did I mention the files are still plain text, and are portable anywhere?
From the developer:
Text editor with outlining power. TaskPaper feels like a plain text editor, but it is backed by a powerful outliner.
Check out the TaskPaper site for more info.
Sign up below to enter. Winners will be randomly drawn on Friday, February 23, at 12pm Central. The drawing is for 3 licenses ($24.99 value) for TaskPaper, 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Note: I have 3 cats. I tried to clean the keyboard up as much as possible before I took photos, but if you have cats, you know how that can go. I did my best.
Here’s how the keys look sans backlighting:
I originally ordered the “Crazed” keycaps (pictured below), but after paying for them I was notified that there was an error between actual stock and what Shopify listed, so instead they sent me two sets, in Canal Blue and Water Blue. So I combined them, as seen above. The Q–R keys of the left half are Canal Blue, the right half is Water Blue.
I really like the crackled look of the Crazed keys, so I might order those in the future when they’re back in stock:
One nice thing about ceramic keycaps isthe way they glow when backlit. If you don’t have a backlit keyboard, you’ll only be concerned with the sound and weight, which I’ll detail below. But if you have backlighting:
Unlike shine-through keycaps, the legends are actually harder to read when backlit. I’m a touch typist and never look at my keys, so it’s kind of a moot point for me. The only time I need to look at the keyboard is when I’m typing a number without my fingers on the home row (e.g. 2FA auth code when I’m also holding my phone). If you hunt and peck and have a backlit keyboard, you might want to think twice.
Seriously, the overall aesthetic of backlit ceramics is (to me) the coolest I’ve seen. This will depend on personal preference, and there are plenty of backlighting setups I’ve never tried, but:
The keys have a shine to them. They look like a polished plastic. I guess they look like what you’d expect a laquered ceramic surface to look like. I find it pleasing, but again, it’s going to depend on personal preference.
If you like multi-colored keyboards, you’re going to drop some cash as Cerakey only sells full sets in one color. I would love it if you could combine colors to create a custom layout. I would also appreciate being able to get single custom keys, as the UHK has a very unique layout that no standard keycap set will cover. While I was customizing, I went ahead and ordered the 1.75U space bars that the UHK uses from Asymplex (h/t @BrokenFlows).
My box white switches with ceramic keys have less click. At first blush, this is a con to me. I picked the box white switches for my UHK because they had what I found to be the perfect amount of clickiness with PBT keycaps. The ceramic keys remove most of the click, and replace it with a pretty bassy thock. I’m currently deciding whether that’s a compromise I’m willing to make, or whether I’m going to swap them out for blue switches (or go back to PBT keycaps).
To be fair, hit softly and one-at-a-time, they still click just fine. It’s just the thunder of rapid-fire typing that lacks the click I find so satisfying on my mechanical keyboards.
Here’s how the ceramic keycaps sound on my UHK with Box White switches:
Here’s how the original PBT keycaps sound:
Next to each other for comparison:
And just for reference, here’s the Cerakey on a Cherry Blue switch:
And for comparison, PBT on Cherry Blue:
I would consider the loss of click a con, but that’s an entirely personal opinion. As described above, Cherry Blue switches actually sound pretty good. Basically like Box White switches with PBT keycaps.
The one thing that does bug me is there’s no discernible bump on the F and J keys, so I do have to look down to find the home row. I’m going to fix this with a home brew solution, eventually. Maybe a little epoxy and some Sugru. Most glues and resins won’t stick to the ceramic surface, so this is going to take a little work. I don’t have feeling in the tips of my fingers on my right hand (I don’t know why, this only happened in the last 10 years), so I need a big bump to be able to feel it. This is probably less of a problem for others, but in recent years it’s taken a little customization for me, even when there are ridges on the F and J.
The harder-to-read legends on backlit ceramic keys is a little bit of a bummer. As I said above, it doesn’t really affect me, but it might be something to note.
The keys are slippery. This is kind of a non-issue, it turns out. I thought the slick surface of the keys would affect my typing speed and error rate, but it really doesn’t. If anything I actually type a little faster on these, but it’s a negligible difference.
I’m going to use these for a couple months and see if I miss the PBT keys at all. So far I don’t, and I love the look. I would like to get the Crazed version eventually, but I’ve spent enough money on keycaps for a while. I’ll eventually want to replace the modifier keys, but will have to find a custom solution for those.
I have to decide how important the click I was used to is. I’m finding the overall sound of these pretty pleasing after a few days with them. But my modifier keys and space bars are still PBT, so I hear the click after every word. This makes the difference obvious, but also gives me a certain amount of satisfaction that might tide me over.
I hope this helps answer some questions. I take no responsibility for your purchase, but now you have the benefit of my experience.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The FastScripts giveaway has ended, and I have a winner 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 FastScripts is still worth checking out. Nobody who uses scripting on their Mac should be without this. You can still save 20% on your purchase with the coupon IndieTerpstra
. Visit the Red Sweater store to grab your copy!
Next up is TaskPaper. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’ve started creating Dimspirations again, my depressing-but-actually-realistic collection of “inspirational” posters. You can follow the hashtag #dimspirations on Twitter, Facebook, Mastodon, or Instagram for new posts. I’ve also automated the process of creating wallpaper-formatted version of them which get uploaded to Flickr and are also available as a zip (containing 5120x3200 and 2048x1366 versions). I should probably add an iPhone ratio to the automation, but they get harder to resize vertically from one image. Anyway, if you’re in the mood to be “dimspired,” check them out.
By the way, if you’ve never checked it out, the “Other Stuff” section (where my wallpapers are located) has some fun projects in it. Fun for me, anyway.
Side tangent: I own the domain dimspire.me, and have always meant to find a way to make an easy-to-maintain gallery out of these. Probably a blog-style thing with daily or weekly dimspirations, with basic comments functionality and links to download the square or wallpaper versions. The index page would just be a thumbnail gallery with the main image from each post. It might actually be nice to do a paywall and have the wallpaper versions supported by Patreon or something. I don’t know if anyone would actually pay for these. I’ve seen similar projects sold as books, and I feel like the designs are actually pretty good for print, so maybe someday. Anyway, my inclination is to do this site in Jekyll (which I’m very adept at), but would be open to any suggestions as to what the best way to accomplish this would be. I’m not even opposed to WordPress with some custom plugins (which I’m also surprisingly adept at), which would be pretty easy to automate and then I could use MarsEdit to maintain it. Still pondering.
In the meantime, please share your feedback (and any suggestions, should the dimspiration strike)!
Like or share this post Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Web excursions brought to you in partnership with MindMeister, the best collaborative mind mapping software out there.
defaults
commands in Terminal. Free!Check out MindMeister and start brainstorming, collaborating, and boosting productivity.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, a license ($39.95 value) for FastScripts. FastScripts puts all of your scripts in your menu bar, accessible with keyboard shortcuts and instant search. It even improves the efficiency of scripts by executing them in their own processes in parallel. It’s a tool no aspiring productivity enthusiast should be without.
From the developer:
Most people don’t know that they need FastScripts until, well, they need it. Whether you’re an experienced Mac scripter or just have one “script that somebody wrote for you once” that you’d like to assign a hotkey to, FastScripts could be right tool for you.
Check out the FastScripts site for more info.
Sign up below to enter. A winner will be randomly drawn on Friday, February 16, at 12pm Central. The drawing is for a license ($39.95 value) for FastScripts. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The HoudahSpot 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 HoudahSpot is still worth checking out. If you use a Mac, you can make great use of HoudahSpot. Stop searching for your files the old fashioned way… you can still save 20% using the code HSTERPSTRA24
, so grab your copy today!
By the way, HoudahSpot is also available on Setapp, along with hundreds of other amazing apps. You should probably get a subscription.
Next up is FastScripts. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>A big thanks to those on the forum and some help from Mastodon, especially @atnbueno and @jackwellborn, for helping me get a grasp on some more advanced Shortcuts implementations. The following solution should work with zero extra dependencies, i.e. you don’t have to install Pandoc or anything like that.
To use the Shortcut, just download below, double click to unzip, and then double click the resulting .shortcut
file to add it to the Shortcuts app. Then just run it from the main screen (click the Play icon). It will first ask you for a source folder, at which point you’ll select the folder containing all of the RTF files. You may be presented with some permissions dialogs as it parses and converts the files, mostly around allowing access to web domains. Don’t worry, the Shortcut isn’t actually accessing those domains or sending any information to them. Once the conversion has run, you’ll get another file dialog at which point you’ll create or select an output folder for the Markdown files.
I’ve tested this on a collection of about 500 notes and it works pretty well. There are some things that don’t convert quite right, especially when lists are created in RTF using individual bullet markers. Those aren’t recognized as lists and will not be converted to Markdown lists. They still look correct in the output, though.
Download nvALT RTF to Markdown Shortcut v1.0.0
A Shortcut to convert a folder of RTF files into Markdown for use in apps like Obsidian or nvUltra.
Published 02/08/24.
Updated 02/08/24. Changelog
Give it a shot. If you’re a Shortcuts pro and have suggestions for improving it, let me know. If you’re new to this stuff (like I am) and run into problems, leave a comment or join the forum and let me know. We’ll figure it out together.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, 5 licenses ($34 value each) for HoudahSpot. HoudahSpot is basically Spotlight on steroids. All of the power of Spotlight file searching, plus some tricks that Spotlight can’t even do. Results are presented in a fully-fledged file management window, plus file previews, result filtering and saved searches.
From the developer:
HoudahSpot takes all the tedium out of file search. Use HoudahSpot to locate hard-to-find files and keep frequently used files within reach.
Check out the HoudahSpot site for more info.
Sign up below to enter. Winners will be randomly drawn on Friday, February 09, at 12pm Central. The drawing is for 5 licenses ($34 value each) for HoudahSpot, 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The MarsEdit giveaway has ended, and I have a winner 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 MarsEdit is still worth checking out. If you’re a blogger, especially one who uses WordPress, you won’t be sorry. You can still save 20% on your purchase with the coupon IndieTerpstra
. Visit the Red Sweater store to grab your copy!
By the way, MarsEdit is also available on Setapp, along with hundreds of other amazing apps. You should probably get a subscription.
Next up is HoudahSpot. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The command is scutil
, used for managing (s)ystem (c)onfiguration parameters. The command scutil --nc list
will show your available VPN devices and their state, either Connected
or Disconnected
. By doing a case-sensitive grep for Connected
we can determine if one or more is connected.
So now the script to perform an action when the VPN is disconnected looks like:
#!/bin/bash
while true; do
RES=`scutil --nc list | grep -c Connected`
[[ $RES == 0 ]] && break
sleep 1
done
say "VPN disconnected"
The scutil --nc list | grep -c Connected
should return 0 if no VPN is connected, which you can then use to light up a button, integrate into launch/quit scripts, etc. Just a cleaner way to do what I showed yesterday.
Trevor Manternach has an interesting post using this trick with Wirecast and Bartender.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Update: after publishing this I found a better way to do it, see the next post.
I think the easiest, most universal way to determine if a VPN is connected is by searching for a specific interface that changes when connected. When I connect Nord, for example, I get a new network interface called utun4
. I don’t know how universal this is, but you can figure out what changes happen in interfaces by comparing the output of ifconfig
when the VPN is connected vs. disconnected.
The following instructions are Mac-specific, using the tools pbcopy
and pbpaste
to access the system clipboard rather than creating multiple files. In fact, I’m not even positive ifconfig
is available on all systems, so if anyone wants to contribute instructions for other platforms, please do.
Caveat: I do not understand the
ifconfig
command at all and have never used it for anything but listing network interfaces. There may be a far more succinct way to do the following.
To determine the interface changes on a Mac:
In Bash:
# Disconnect VPN
$ ifconfig -a | pbcopy
# Connect VPN
$ diff <(ifconfig -a) <(pbpaste)
In Zsh:
# Disconnect VPN
$ ifconfig -a | pbcopy
# Connect VPN
$ diff =(ifconfig -a) =(pbpaste)
In Fish:
# Disconnect VPN
$ ifconfig -a | pbcopy
# Connect VPN
$ diff (ifconfig -a|psub) (pbpaste|psub)
The result should look something like:
142a143,146
> utun4: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1420
> options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
> inet 10.5.0.2 --> 10.5.0.2 netmask 0xffff0000
> nd6 options=201<PERFORMNUD,DAD>
Now you have an interface name (utun4
above) that you can grep for to test whether the VPN is active. A simple loop in a Bash script will allow you to take action when the connection is disconnected. This little script assumes the VPN is connected when it starts, loops until the network interface we’re looking for disappears (grep --count
returns 0), then executes the command after the loop.
#!/bin/bash
while true; do
RES=`ifconfig -a | grep -c utun4`
[[ $RES == 0 ]] && break
sleep 1
done
say "VPN disconnected"
Perfect if you wanted to, say, stop a torrent client if the VPN wasn’t active. You could embelish it into a launch script that checked for the VPN first, launching an app when the VPN is connected, then polled for the VPN to be disconnected, terminating the app if it is.
Of course, the simple ifconfig -a | grep -c utun4
line could be used as part of a BetterTouchTool widget to display an alert on your Stream Deck when the VPN was connected, or to run any kind of automations on a polling basis. If I had more complex applications for this, I’d switch over to using BetterTouchTool.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, a license ($59.95 value) for MarsEdit. Using web-based editors for blogging is frustrating in so many ways. MarsEdit makes writing for the web easy and elegant, like any good Mac app should. Plus, great Markdown support (it even works with Marked). Developer Daniel Jalkut is a legend among indie devs, and he creates stable, reliable, native Mac apps that everyone should be using.
From the developer:
Browser-based interfaces are slow, clumsy, and require you to be online just to use them. Web browsers are wonderful for reading articles, but not for creating them. If you’re writing for the web, you need a desktop blog editor. And if you’re lucky enough to have a Mac, nothing is more powerful, or more elegant than MarsEdit.
Check out the MarsEdit site for more info.
Sign up below to enter. A winner will be randomly drawn on Friday, February 02, at 12pm Central. The drawing is for a license ($59.95 value) for MarsEdit. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The OmniFocus giveaway has ended, and I have winners to announce! There were a record number of entries this time, so the winners are extra lucky with 1:330 odds!
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 OmniFocus is still worth checking out. If you’re serious about productivity on Mac and/or iOS, you need OmniFocus.
Next up is MarsEdit. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Hi, my name’s Matthias, I’m the developer of Yoink, Transloader, and Tameno, among others.
Allow me to introduce another one of my apps to you: ScreenFloat. Over eleven years after its initial v1 release, and after more than a year and a half of development, ScreenFloat 2 is finally here — rebuilt from the ground up, based on the core functionality that made it so beloved, but improving it in numerous, incredibly useful ways.
Capture screenshots, record your screen, or take timed screenshots. Re-capture shots without painstakingly reframing them. Import from your clipboard, other apps, your Desktop, or your iOS devices.
Float screenshots and recordings above all your other windows, apps and spaces, so information or reference material is always visible, no matter what you do. It’s like picture-in-picture, but for your captures.
Texts, faces and barcodes are detected in every shot you take and can effortlessly be extracted/copied and non-destructively redacted with a simple right-click.
Mark up and annotate your screenshots with lines, arrows, checkmarks, highlights, smart bullet points, redactions and more. All non-destructively, so you can always go back and make changes or restore the original capture.
Pick colors from any floating shot. Crop, “fold”, resize, rotate, “de-retinize”, trim, and mute your shots.
Sharing floating shots is just a file drag away, with on-the-fly changing of file format and sizing options, whether or not annotations should be included, and more.
Set up double-click workflows for repetitive tasks, like de-retinize the shot, resize it to 75% and then attach it to an email.
Your captures are stored in ScreenFloat’s Shots Browser, where you can name, tag, favorite and rate them, and organize them with folders and smart folders. They can also (optionally) be synchronized across your Macs over iCloud.
Find all your shots system-wide or in the Shots Browser by their metadata — including detected text and barcode content.
And more!
A screenshot is just a screenshot. Until you use ScreenFloat. Check it out today.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, three Standard licenses for all platforms ($74.99 value) for OmniFocus 4. If you’ve played around with productivity apps on Mac or iOS, you’ve seen OmniFocus. It’s the most complete task management system available on macOS and iOS. Tagging, projects, quick entry, easy search, extensive automation… there’s nothing it can’t do. Among many other improvements, the latest version streamlines the interface, makes keyboard usage on iOS compatible with macOS, and doesn’t give up any power tools in the process. This giveaway covers you for both Mac and iOS (and even your Watch!).
From the developer:
OmniFocus is powerful task management software for busy professionals. With tools to help tame the chaos, you can focus on the right tasks at the right time. The new design in OmniFocus 4 spotlights task content, making it easier than ever for new users to get started, while providing all of the powerful features and a commanding level of customization that satisfies the most demanding power user. Sync included; privacy respected.
Check out the OmniFocus site for more info.
Sign up below to enter. Winners will be randomly drawn on Friday, January 26, at 12pm Central. The drawing is for 3 Standard licenses for all platforms ($74.99 value) for OmniFocus 4, 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The Bartender 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 Bartender is still worth checking out. If you run enough utilities on your Mac that your menu bar gets cluttered, this is a no-brainer. You can still save 10% on your purchase with the code BRETTTERPSTRA-BARTENDER
.
By the way, Bartender is also available on Setapp, along with hundreds of other amazing apps. You should probably get a subscription.
Next up is OmniFocus. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Web excursions brought to you in partnership with Backblaze. Back up everything.
DefaultKeyBinding.dict
file, and this app makes it easy to peruse what key combinations are doing what. The biggest shortfall is that it doesn’t handle nested bindings (multi-keystroke), but it does successfully ignore those and show you everything else.Backblaze securely backs up your entire computer to the cloud, affordably and reliably. I trust it with all my data. Check it out today.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’ve been putting a little more time into CurlyQ this week, as I’m able.
First thing to note is a breaking change: it will always return an array now, even if there’s only one result. I had waffled on this a little, but for predictability in scripting it really always needs to be a consistent format. So even a single-string result, e.g. a command that targets a single element with --search
and then uses .source
in the query (which previously would have just returned the source string for the matched tag) will now return an array containing a single string.
Secondly, I’ve put a considerable amount of effort into the --query
feature. You can now use jq
-like syntax to query multiple items in an array, use dot-syntax for attribute comparisons, and use comparisons (like ^=
) on hashes, returning true if any value in the hash matches the query. Still, if you want the full power of something like jq
or yq
, you can just pipe the output to either and work with more familiar tools.
But on to a cool thing. I mentioned CurlyQ’s screenshot capability in the intro post, but it’s received some improvements, and I thought it deserved a little more detail.
I incorporated Selenium to allow scraping of dynamic web pages. One of the features Selenium provides is screenshots saved from the browser of choice. Thus CurlyQ has a screenshot feature:
curlyq screenshot -b 'firefox' -t 'full' -o 'screenshot_name' URL
The --browser
flag (-b
) determines whether it uses Chrome or Firefox, and the selected browser must be installed on your system. The full-page capture (-t full
) is only available with Firefox. Chrome can only output visible
(the visible part of the page on first load) and print
, a print version of the page with @media print
styling applied. Firefox can output all types.
The --type
flag (-t
) accepts full
, visible
, and print
. With -t full
and -b firefox
, you get a full-length version of the rendered page, including offscreen elements. All of these can be abbreviated to their first letter, e.g. -t f
or -b c
.
The --output
flag (-o
) is required and determines the path/name of the output file. Providing just a name will save the file to the current directory. Extensions can be provided but will be changed depending on output type, .png
for full
and visible
, .pdf
for print
. So you can just provide a name without extension and CurlyQ will apply the appropriate extension.
As a side note, saving a screenshot with -t print
will output a PDF with actual text that can be searched by Spotlight (and other tools). So you could ostensibly use CurlyQ to crawl an entire site (by parsing the links
subcommand output and spidering) and save every page to a searchable PDF. I don’t know offhand why you’d do that, but it’s possible.
CurlyQ is still being refined and your input is welcome. Join me on the Forum, or just message me on Mastodon with suggestions and bug reports.
See the project page for full details.
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, 10 licenses ($16 value each) for Bartender. Bartender tames your Mac menu bar. You can move all the stuff you don’t always need to see into a secondary menu bar, navigate the menu bar(s) with shortcuts, and even control menu bar items like Time Machine, Battery, and Wi-fi.
From the developer:
Bartender is an award-winning app for macOS that superpowers your menu bar, giving you total control over your menu bar items, what’s displayed, and when, with menu bar items only showing when you need them. Bartender improves your workflow with quick reveal, search, custom hotkeys and triggers, and lots more.
Check out the Bartender site for more info.
Sign up below to enter. Winners will be randomly drawn on Friday, January 19, at 12pm Central. The drawing is for 10 licenses ($16 value each) for Bartender, 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The Keyboard Maestro giveaway has ended, and I have a winner 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 Keyboard Maestro is still worth checking out. You can still save 20% off of Keyboard Maestro with the coupon TERPSTRA
! The automation possibilities are endless.
Next up is Bartender. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>Today I’m releasing an initial version of my latest tool, CurlyQ. It’s a work in progress, though should be immediately useful to those who need it. I need your input on where it goes next, what’s missing, and what you’d like to do with it that it can’t handle yet. Join me in the forum to discuss1!
CurlyQ is a helper for the curl command, with some extra functionality. Sure, it can grab the contents of a web page, but it can also provide a breakdown of all of the metadata, page images, page links, and can work with dynamic pages (where the page is loaded by a JavaScript call and the raw source is empty except for script tags). It will even do screenshots. It’s designed to alleviate some of the chores when scraping web pages or getting JSON responses.
CurlyQ is designed to be part of a scripting pipeline, making it as simple as possible to do something like get a page’s title, find the largest image on the page, or examine and validate all the links on a page. You can query the results based on any attribute of the returned tag, showing, for example, only links with a rel=me
attribute or a paragraph with a certain class. The tags
subcommand can output a hierarchy of all tags on the page, with each parent tag containing a tags
key with its immediate children, on down the line. This can be queried and filtered using command line flags.
This tool has multiple User Agent strings configured and can accept custom headers. If a request fails, it will try again with various User Agent strings. This is because some sites block pages with certain (or missing) User Agents, and some don’t, so it has a built-in retry. It can also handle pages that respond with gzipped data using --compressed
on the command line. If you don’t use --compressed
and it detects gzipped data, it will quietly fail and notify you that you need to add the flag. I may make this an automatic fallback in the future. You can also specify a browser as a fallback (Chrome or Firefox), so if regular curling fails or is blocked, it can actually load the page in a web browser and retrieve/process the source from the window.
CurlyQ also incorporates Nokogiri, allowing it to perform element selection using CSS selectors or XPaths. For example, the html
command accepts --search 'article header h3'
to return an array of all h3s contained in a header tag inside an article tag on the page. It can output as JSON or YAML, and for queries that target a specific element or key in the response, you can output raw strings.
There are also tools for extracting content between two strings, returning an array of all matches on the page. The idea is that in cases where you need to extract content that might not be easily located with tags, you can provide before/after strings to extract the necessary information.
CurlyQ can take several types of screenshots: full page (one long PNG), visible page (just the part of the page initially visible in the browser), or the print output, applying @media print
stylesheets. It doesn’t currently offer any type of image manipulation, but it might someday at least be able to create miniature versions (thumbnails) automatically.
The screenshot capability works best with Firefox. You can shoot the visible part of pages using Chrome, but to get full-page screenshots, Firefox is required. CurlyQ uses Selenium to load up an instance of the selected browser and grab the rendered source or take a screenshot. The source is fed through the same processor as a regular curl call, so most aspects remain the same. The result is missing response header info, though. CurlyQ does not aim to be a full web automation tool, for that you’ll want to get accustomed to using a headless browser in your scripting language of choice.
There’s very limited support for handling JSON responses. It currently only handles GET requests and allows you to specify request headers, returning response headers as well as the pretty-printed (optional) results of parsing the JSON, all as one JSON or YAML blob. It’s assumed that you’ll do any handling of the results using something like jq or yq. It can cycle through User Agent strings to find one that works and elegantly return a response code and headers on errors.
One major area that’s missing right now is the ability to make requests other than GET. I would like to add POST capabilities, accepting data from command line flags or just passing it a JSON blob on STDIN or from a file. That’s for the next version, though.
I would greatly appreciate feedback on this tool. If you have a use for something like it, but it doesn’t do quite what you need, please list your use cases and expectations in the Issues on GitHub. I’d love to flesh this out into an all-purpose web scraping tool.
See the CurlyQ project page for more details on installation and usage. I look forward to your feedback (in the forum or on GitHub), positive or negative!
Leaving a comment on this page will automatically create a new forum topic if there isn’t one, or add to an existing topic. ↩
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>I’m excited to offer the next giveaway, a license ($36 value) for Keyboard Maestro. Keyboard Maestro is an insanely powerful app for automation on your Mac that no power user should be without. It can automate literally everything. Power users will love it, but everyday users can greatly benefit from the shortcuts and triggers that Keyboard Maestro offers with a simple drag-and-drop configuration.
From the developer:
Whether you are a power user or just getting started, your time is precious. So don’t waste it. You can quickly benefit from Keyboard Maestro. Let Keyboard Maestro help make your Mac life more pleasant and efficient. With so many possible actions that you can combine together, including flow control, conditions and looping actions, you can automate almost any task, from the trivial to very complex multi-application reporting systems.
Check out the Keyboard Maestro site for more info.
Sign up below to enter. A winner will be randomly drawn on Friday, January 12, at 12pm Central. The drawing is for a license ($36 value) for Keyboard Maestro. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>The App Tamer 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 App Tamer is still worth checking out. If you want your apps to run faster, it’s a no-brainer. You can still save 20% using the coupon BRETT-ATM-2023
at checkout.
By the way, App Tamer is also available on Setapp, along with hundreds of other amazing apps. You should probably get a subscription.
Next up is Keyboard Maestro. 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!
Like or share this post on Mastodon or Twitter.
BrettTerpstra.com is supported by readers like you. Click here if you'd like to help out.
All materials ©2024 Brett Terpstra
Twitter | Mastodon | GitHub | Privacy Policy
]]>