Tag: software

Keyboard Maestro: An Almost Invisible Superhero of Productivity

a person typing on a keyboard
Photo by Florenz Mendoza on Pexels.com

There are some tools that I use that are so seamlessly integrated with my workflow that they are almost invisible. They work so well that I simply don’t think about them. That really isn’t fair since tools like these do far more than they get credit for. And since I had a particular tool in mind today, for reasons I will explain, I thought I’d write about one such invisible superhero of productivity: Keyboard Maestro.

Keyboard Maestro is made by Stairways Software and it is Mac-only. If you are a Windows users, you can read with envy. If you are a Linux users, you probably don’t need a tool like Keyboard Maestro in the first place.

I have been using Keyboard Maestro for just over 8 years1 and I’m not sure I can quantify how much time it has saved me. Keyboard Maestro is an automation tool that combines three useful functions in one:

  1. Text expander
  2. Clipboard manager
  3. Automation engine

I think I first began using Keyboard Mastro as a substitute for TextExpander in order to get the expansions that I wanted. Keyboard Maestro can do text expanding, but even there it is powerful. It can take a simple expansion like ;;email and expand it to my email address. Honestly, I can’t remember the last time I had to type out my email address. Quite possibly it has been years. Like many text expanders you can set one phrase and have it expand to another.

But it can do more. It can perform transformations on the data. I wrote about a fairly simple version of this when I described how I used Keyboard Mastro to automatically add the next entry number to my journal in Obsidian. I have all kinds of useful text expansions and they have become so innate that I don’t even notice them. It would be fascinating to know just how much typing Keyboard Maestro has saved me over the years (and how many typos it has prevented).

Keyboard Maestro also serves as my clipboard manager. I am constantly copying things to the clipboard and pasting them other places. Keyboard Maestro keeps a history of my copies and allows me to access that history when I paste. Here is a glimpse of what that clipboard history looks like at the moment:

an image of my clipboard history in keyboard maestro, showing the last 5 copies I made, all ready for pasting

In addition to containing text, the clipboard can contain images. And when I paste something from the clipboard, I have the option of transforming it as I paste. Examples of this transformations include:

  • changing the capitalization of the text (all caps, all lowercase, title case, etc.)
  • manipulating an image by flipping it, rotating it, changing its size

This takes a lot of manual effort out of routine and reptitive tasks.

It was this clipboard history functionality that got me thinking about writing this post. I occasionally made use of PasteBot for this, but recently decided to consolidate this functionality into one app–much as I did with TextExpander. And since Keyboard Maestro does this so well, that was what I went with.

Keyboard Maestro can also do all kinds of automation, something I have only experimented with lightly over the years2, but something I am interested in making more use of.

As I said, Keyboard Maestro works so well, it is virtually invisible. I often forget I am even using it when I am typing. So I wanted to call attention to it, because it really is a powerful, useful, time-saving tool.

Written on March 11, 20223.

Did you enjoy this post?
If so, consider subscribing to the blog using the form below or clicking on the button below to follow the blog. And consider telling a friend about it. Already a reader or subscriber to the blog? Thanks for reading!

Follow Jamie Todd Rubin on WordPress.com

  1. I just verified this, going back through my email to find the receipt from my first order, dated March 3, 2014.
  2. For an example, see how I used Keyboard Maestro, years ago, to automate pulling notes and highlights of my Kindle. I don’t use this automation anymore, but it is a good example of what is possible.
  3. Yes, even this dateline that you see at the end of each post is generated by a Keyboard Maestro macro that I created

Please Insert Disk 9: The Ease of Software Installations

Today is the 20th anniversary of the 9/11 attacks. I wanted to acknowledge this here. Each year, on the morning of 9/11, I pull out my diary from the days immediately before and after and read through it. I still can’t watch the footage on TV. I don’t have anything original to add to all that’s been written about 9/11 these last 20 years. I know that there will be many, many things written today. We all mourn 9/11 in our own ways, and for those who have mourned, and need a respite from what can be a traumatic day of 9/11 posts and news items, I wanted to have a post people could come read that isn’t about 9/11 at all. But I wanted to acknowledge it here. As I said at the end of my diary entry on 9/11/21, “I simply can’t believe this.” I still can’t.

Photo by Pixabay on Pexels.com

I had a problem with my work laptop late last week. I use a MacBook Pro, and I run Parallels for Windows and database development. This has worked well for me for years, and I’ve never had a problem before, but on Thursday evening, Parallels crashes and the image corrupted. While my laptop is backed up, the Parallels image is not. I didn’t lose any data because data is not stored locally, but I needed to bring my laptop into the office to have the image reinstalled. When I got my laptop back, I had a clean Windows install, which meant going through the process of installing Visual Studio, Microsoft SQL Server Management Studio, and RedGate. This has been a time-consuming procedure in the past.

I chose to perform the installations in the evening with the thought that by morning, everything would be ready. After all, it was several gigabytes of installation files. I got the installers for the latest stable release of Visual Studio Enterprise, and SSMS, and began the installation process. It turned out to be far quicker and easier than the last time I had to do a full installation. After an hour or so, all of the software was installed.

Next, I had to configure SSMS to connect to the servers I wanted, but I thought instead that I’d give Azure Data Studio a try instead. This, too, seemed surprisingly easy to setup. Within a short period of time, I was able to connect to the servers I wanted; I was able to connect to git repos from directly in ADS, something I’d had to use RedGate for with SSMS; and I had access to Jupyter notebooks, which was an added bonus.

During this process, I noticed that both Visual Studio and Azure Data Studio now have native Mac versions. So I installed those on my Mac. Those installations were even easier (The architecture of a Mac piece of software is entirely self-contained within a “package” file that represents the application.) I then pulled the git repo for the big software project my team is working and to see if it would compile cleanly on my Mac. It did! It is now looking like I need to rely less and less on the Parallels instance.

Later, reflecting on how easy the installation was, I realized just how far software installations had come in the years I’ve been working with computers. The first install I did, when I was 11 years old, was for my Commodore VIC-20. I installed a Hangman program from the tape drive that was attached to my computer. Tape drives, in my experience, are notoriously unreliable. It often took several frustrating attempts to get the program loaded, and once it was loaded, I no longer felt like playing.

In the early years of college, I remember installing WordPerfect from 5-1/2 inch floppy disks. By my senior year in college, I’d moved to the far superior (in my opinion) Word 5.5 for DOS, which took a small stack of 3-1/2 inch floppy disks to install.

When I first started at my job, Visual Basic 3.0 required 3 installation disks. You had to put one in the drive, wait until that part of the installation had completed, then switch to the next. By the time the late 1990s rolled around, Visual Basic 6.0 came on a CD-ROM.

I can remember installations of Microsoft Office that took 12 or more disks–in some instances 20 disks, if memory serves. You couldn’t start the installer and walk away because you had to change each disk as it finished loading. Anyone who used computers in that era remembers the frequent messages “Please insert disk 9.” And heaven help you if one of the disks failed to work halfway through the installation.

It is possible that I imagined, back in 1995 or 1996, how wonderful it would be to simply be able to install the software you wanted without need of a disk. Just answer a few brief questions and BAM! the software was there on your machine, ready to use. This was just the kind of daydream I could see having, while sitting in someone’s office, waiting for Disk 9 to finish so that I could put in Disk 10, and wondering if the installation would be finished by lunchtime.

Today, my daydream is the standard. Want a piece of software? In most cases, click or tap the Install button from an App Store and it loads on your device within seconds. In some cases, as in installing Visual Studio, you have to download the software directly from the website. But the process is still far easier than it was 25 years ago. You rarely have to worry about configuration files, or which type of processor you are using; the installers figure this all out for you. If you are missing a critical system component, the installers know that, too, and will grab and install the necessary software. Then, too, the software will keep itself updated, which saves a ton of time in the long run.

Installing software used to be a real headache, but it has become so easy these days that I hardly even notice it. It is one of those things about technology that I simply take for granted, forgetting how different it used to be when I was starting out. Twenty years ago, software was still fairly difficult and time-consuming to install. Installations have come a long way. It makes me wonder, what will software installations look like twenty year from now?

Did you enjoy this post?
If so, consider subscribing to the blog using the form below or clicking on the button below to follow the blog. And consider telling a friend about it. Already a reader or subscriber to the blog? Thanks for reading!

Follow Jamie Todd Rubin on WordPress.com

Plotting Software, Pantsing Stories

A screenshot of some code I've been writing
Some code I’ve been writing

I just completed a demo1 for software that me and my team have been working on for nearly a year. It isn’t quite done yet—we still have a few months of work left, but it feels good to get to the point where you have something to show. Indeed, it’s not that different from getting a story out into the world.

When it comes to writing (when I can even manage to write these days) I am “pantser” as opposed to a plotter. That is, I don’t plan out my stories in detail. I have an idea of where the story is going, and I figure out how to get there as I write. Sometimes, I end up somewhere else entirely.

With software, I am the complete opposite. Over the decades I’ve worked on increasingly more complex software and I’ve found that my brain doesn’t have the capacity to build it without plotting it out first. I hadn’t really considered it much until now, but I suppose that designing software is a lot like outlining a story. You start with the high level goals and requirements; you identify the tools you can use to meet those requirements; and then you figure out how everything will fit together to make a cohesive and self-consistent thing.

The day-to-day work is writing code, small fragments, akin to scenes in a story or novel. Often you write something that gets the job done but isn’t particularly elegant, so you rewrite it and rewrite until it purrs. The world fades around me when I get into this mode, my focus is completely on the task at hand, and an 8- or 9-hour day can fly by in what seems like the blink of an eye. This happens when writing, too, but I can’t consistently write for 8- or 9-hours the way I can work on code.

I often had the impression (from comments I’ve heard in various places and times) that non-writers think that writing is easy. I find it difficult, and I’m fairly worn out if I manage to writer for more than 2 hours. Writing code is equally difficult, but I come away from these long stretches in what I call a “code-coma.” It’s hard to re-engage with the world around me, and I have to ease back in.

When I have something on the page that works, I’ll review it, often out of context of the rest of the piece (often because “the rest of the piece” doesn’t exist yet). I’ll find typos here and there, little misspellings, or autocorrects that don’t work. Same thing when writing code. Punctuation is just as important and I can stare at a small piece of code for an hour wondering why isn’t working, only to realize I was missing a semi-colon somewhere.

Sometimes, you get pretty far along in a story only to realize that you’ve uncovered a major hole in the plot. This happens with software, too, but it happens less frequently for me these days because I “outline” the software and try to eliminate plot holes in the design before we actually start building the thing. Still, other things may trigger major changes forcing rework.

When I think a story is ready (always after the second draft, never after the first) I’ll send it out for critique by fellow writers. It’s no different with code. We sit down for code reviews where it becomes our job to ask each other (and ourselves) tough questions about the choices we made. These are both incredibly useful and incredibly disheartening. Code is always improved in these reviews, but I find it disheartening that I couldn’t think of some of the elegant ways my colleagues suggested for improvement in the first place.

(In the movie business, I think the information that comes out code reviews would be akin to “notes.”)

The draft of a story that goes to the editor might be considered a beta (or a golden master) in the software world. It is almost good enough for the world, but subject matter experts (editors, copy editors, publicity people) will look at it and offer some final polishing suggestions.

Finally, the book or story is out in the world! Hurray! And of course, the first slew of reader comments, and reviews start coming in. They are all pointing out the typo on page 5. How did anyone miss that?

It’s really no different than the day the software you’ve been working on for a year or two goes live. You’ve run millions of unit tests. You’ve demo it, you’ve made it as easy to use as possible. And 2 hours after it goes out, someone finds a bug that should have been caught 6 months ago.

I think the biggest difference between creating software and creating stories is that with a story, more often than not, you have something to hold in your hands, the product of your long hours of labor. It might be a printed manuscript. It might be a copy of the magazine the story appeared in. It might be a book. It always gratifying, on those rare occasions when it’s happened to me, when someone hands me one of these things and asks for an autograph.

With software, there’s nothing to hold, nothing you can grasp in your hands that represent all the blood, sweat and tears that went into its creation. It’s probably for the best. In thirty years of making software, no one, not a single person, has ever asked me for an autograph. If they did, I’d be a loss: there’s nothing on which to sign my name.

  1. Which explains why this post is coming out at nearly 7pm instead of much earlier in the day


Earlier this week, I completed a work project that I had been managing for more than two years. 937 days from my first meeting to rollout to be precise. Any software project like this has a tail, but it felt good to actually have the thing completed and out in the world. The good feeling came more from the former than the latter, I think.

Whenever I finish a big project, I go through a list of things that I have accumulated over that period of time–personal projects and other things that I have put off doing for a lack of time. This inevitably leads to a period in which I flutter randomly between items on my list, wanting to do all of them at once, and not making progress on any of them. Alvin Toffler called this “overchoice.” I’ve also heard it referred to as “analysis paralysis” but I think I like overchoice better because it accurately describes the feelings it raises in me.

Software projects tend to have crunch periods as you get closer to rollout. It’s hard to describe what’s involved in these intense periods of work to people not involved in software rollout. I often think of these periods as the loathsome part of moving where all of the big stuff–furniture, televisions, books, etc.–is packed away and ready to move and all that’s left is the stuff in the kitchen drawers, the top shelves of closets, and the attic. It always seems to take longer to deal with that stuff than everything else put together. It makes for long hours and over the last month or so, 60 hours weeks were not unheard of. (My peak was 68-1/2 hours in one week.)

It meant that no only was this weekend a 3-day holiday weekend, but it was my first days with no work (weekends included) since sometime in May. I would have an entire 3 days off–what would I do with my time?

More often than not, we are on vacation this week. We’ve spent many Fourth of July weekends in small town coastal Maine. Two years ago, we spent our Fourth in Nashville, Tennessee as part of a 10-day road trip we took. This year, things are different. We are home for the weekend and while Virginia is doing alright compared with many states, people are still appropriately cautious and so things are a little subdued. I thought this would be a perfect time to flip through my list of personal projects and figure out what I wanted to work on. I took care of a few of the smaller ones (WD-40 the sliding glass door, replace a few lightbulbs around the house) and then looked at the two big projects I have been ignoring for some time–in many cases–years.

  1. A unified way for capturing notes and annotations from my reading. You’d think that by now, we’d have a standardized system that allowed us to highlight and annotate any text we find in electronic form, whether a Kindle book, a magazine , newspaper, website, etc. No such standard exists and, indeed, some tools, like Kindle, make it particularly difficult to programmatically extract your notes and highlights. I’ve thought about ways of building a system for myself that would do that–a kind of standardized digital commonplace book.
  2. A personal digital archive of all of my papers (digital and actual). A lot of this is in Evernote and I haven’t ruled out building a curated archive in Evernote. But I’m not fond of the way Evernote currently presents this data, so I thought I’d investigate what it would take to build a local searchable archive myself.

I got to thinking about both these projects this week. The ideas began to fly, and I began messing around with some of the technology I planned to use to implement these systems. I spent hours testing out little concepts here and there. At the end of the day, however, I’d made no real progress and I was worn out and frustrated. Two things occurred to me:

  1. I had a serious case of overchoice. In addition to the two projects above, I am teaching myself some new technology required to implement these projects the way I want, which itself spawns off many little sub-projects. And there were other smaller things on my list that I was ignoring.
  2. There was one project I was avoiding. Steven Pressfield would call this losing out to resistance. I was focusing on other things in order to avoid the one thing I should be doing: writing.

Once I realized what I was doing, I felt better. I’d make my focus writing. It’s not that I don’t want to do the other projects, but that I want to write and have been avoiding it because it sometimes is hard to do. It is certainly harder (for me at least) than managing a complicated software project. But it is also much more satisfying. I have worried about my writing lately: the stories that I have been writing or want to write are not the kind of stories I used to write. I no longer think of the science fiction magazines as the right market for me–but I don’t know what the right market is. I worry about the lack of writing I’ve done here on the blog, and whether or not what I do write is of interest to anyone but me. Recent comments and emails have perked me up on this concern and that makes me happy.

Knowing that my big rollout would happen at the end of June, I told myself that beginning on July 1, I’d beginning writing in earnest again. I’d try to write every day and see what I could manage to produce over the second half of the year. July 1st and 2nd drifted by without a word from my at the keyboard. Finally, on July 3, this post is my return to the world of writing. I’m pretty sure I have the capacity and energy to be prolific over the next 6 months. The question is: will what I write be any good?

For that we’ll have to wait and see.



I am beginning to play around with Evernote as a tool to store all of my notes and to-do lists in the cloud and have everything easily searchable and at my fingertips no matter where I am. So far, I’m pretty impressed, and it’s no surprise, since Evernote was one of the 25 best applications in MacWorld this year.  (Scrivener 2.0 was another.) A while back I mentioned how I have gone paperless at work and in 2011, I plan on doing the same at home. Evernote Premium (which is what I am using) goes a long way to making this possible. I can upload PDFs and their content is searchable, even if the notes in them are handwritten. I can tag notes and provide all kinds of meta-data to improve the searching. I can clip articles from the web and store them. There are lots of nice features and plug-ins. I’m still in the early experimental stages but once I get going with this, I’ll let you know how it turns out.

Why Microsoft is brilliant

I have a ton of documents to work on today in preparation for a design review this afternoon. Most of the documents are Visio documents (for those not familiar with Visio, it’s a Microsoft tool for creating specific types of drawings, database diagrams, flowcharts, UML, etc.). Several documents are in Word and a few are in Excel. Whenever I open these documents, I feel dismally antiquated. I feel like one of those fellows still using a TV remote control that’s connected to the TV by a wire. Why?

Because each time I open Word or Excel or Visio, I see the following flash on my screen:

Visio 2003
Word 2003
Excel 2003

Yes, I am using a product that is nearly 5 years old to develop plans for cutting-edge software. Sure, it’s just a naming convention, but it’s a brilliant naming convention on Microsoft’s part. Each time I see that 2003 flash on the screen, I am reminded just how far behind the curve I really am. It’s like making fun of an ad for Cialis while knowing full well that you take the drug every day. It reminds you of the technological impotency with which you are forced to live because the company is slow to upgrade to Office 2007.

But why do I feel I have to be on the latest and greatest? Because Microsoft was genius enough to label their software the same way model year cars are labeled, so that I would feel compelled to have the newest model the moment it arrived on the showroom floor.

That I don’t have the latest and greatest makes me feel like I’m not keeping up with the Jones’, that I’m not with it, that I’m a dinosaur.

God bless Microsoft and their brilliant marketing scheme!

Extra line breaks removed

Microsoft Outlook has had, for several versions now, a feature whereby it will remove “extra” line breaks when displaying messages. I have no idea why it does this. It seems to serve no purpose. Here we are at a point in the history of our planet when forests are disappearing, when ice caps are shrinking, when animals like tigers are on the verge of extinction. And Microsoft Outlook is doing its part by “conserving” extra line breaks.

Microsoft programmers: line breaks are digital. You can make as many of them as you want without harming the environment (directly). There is no need to conserve them. Be free with them. Be generous. Stop trying to reformat my email messages!!

Thank you.

(Ha! I’ve just “wasted” three line breaks. So there!)


For several years, I have managed my book collection using Booxter for the Macintosh. It has been a great program, but there were also a few limitations that bothered me: (1) a lack of more advanced but common fields (such as awards); (2) no custom fields for tracking information not captured by the system; (3) no good way to maintain data integrity; (4) limited export to web features.

Today, I found a great Mac-based book collection software called Bookpedia. I spent 10 minutes reading through it’s feature list and bought the $18 license on the spot. It’s got everything that Booxter has, plus everything that I want that Booxter is missing. You can built customized export templates. It’s even got a feature to assign a book in your collection a unique ID, something very useful if exporting the data and manipulating it programmatically. It’s also got lots of great visual stats. It even has a template for exporting your lists to an iPhone.

Overall, I’m very impressed with it. I’ve imported my Booxter library (which is several months out of date, which is one of the reasons I was looking into this to begin with) and I really like the features.


I came across this cool writing program called Scrivner, which I am trying for 30 days to see how well it really works. I was interested in it because it has the index card “story-boarding” feature built in. (I use index cards extensively for my stories.) It focuses on content and it exports to various manuscript formats easily.

I’ve got two stories that I’m working on which I am going to try and finish within the next 30 days and I am going to use Scrivner for both. If it works out well, then I’ll license a copy.

Geeks I admire

Working in the computer world, as I have for the last 13 years, and specifically within the world of software development, one becomes familiar with a subculture of people whose notoriety is limited to hardened geeks. These people have affected (usually for the better) the world of computer science in positive ways, sometimes revolutionizing entire technologies or industries. At heart, they are geeks, and I thought it would be interested to list those geeks I admire.

Read the list

BBEdit upgrade

I finally got around to buying the upgrade to BBEdit 8.5.1 this afternoon. For owners of BBEdit 8.2.x, the upgrade was only $30. I’ve skimmed it since downloading it and I have to say that it is the best upgrade I’ve seen since I’ve owned BBEdit. In fact…

It is now at the point where I would consider moving all of my writing to BBEdit, and in fact, use BBEdit for everything that I can, except email (I like Mail.app). The new interface is nice and clean, and they’ve added two key features which will make the switch easier:

  1. Soft line wraps can be turned on in the preferences now
  2. It’s got “check spelling as you type” which is very useful to me

Some background on word processing:

I’ve always been a fan of text editors over word processors. If you don’t know the difference, don’t worry too much about it. In high school I used WordPerfect and in college, I switched to Microsoft Word 5.5 for DOS, which is to this day my favorite all-time word processor. When I started my job, I learned vi and emacs, and I came to really appreciate emacs (it’s an acquired taste–and another great thing about BBEdit is it’s emacs emulation mode so I don’t have to learn new keystrokes). I’ve never been fully comfortable with more recent versions of Word or other word processors because the emphasis seems much more on format than on content and managing text.

I like text editors because the data is stored as plain text and can be manipulated by various other programs easily. I also like editing raw HTML and editors like BBEdit make this very easy. BBEdit integrates seamlessly with CVS revision control software. And with its new capabilities, I think it has everything I need to make the switch. Back when I used Word 5.5, it has a simple macro language which I made extensive use of. I had macros for lecture notes, for stories, for just about everything. BBEdit is scriptable, but also supplies tons of Automator functions, which means I can automate a lot of my text manipulation.

I would even use it for taking notes in meetings, because my “meta” note-taking markups are easily readable by a script that could, say, capture action items. Unfortunately, BBEdit is only made for the Macintosh and I don’t use my Mac at work. It seems strange that there appears to be nothing that compares on the PC. (I use Visual SlickEdit at work, but that lacks many useful features that BBEdit has.)

The toughest thing will be formatting stories. There are very specific manuscript formats and this is where Microsoft Word is useful. I can see two options. If I really want to move away from Word, I can write a script that converts my text manuscript to LaTeX and generate PDFs in manuscript format. Or I can do some automator stuff, combined with Word macros to have Word format my text file in manuscript format.

I’m looking forward to skimming the new user guide to see what other new features are available.

The Model

I don’t use Quicken or Microsoft Money for keeping track of my finances. Since 1997, I use some software that I developed myself and which I call “The Model” for doing this and it has worked very well for me in all of that time.

I am about to start down the road of doing the first major revision to this software in several years, adding in some new features and making some efficiency enhancments.

Details on the history of this software