Category: tech

How To Remap Cmd-I To Avoid Opening the Mail App on a Mac

Something changed recently with respect to keyboard mappings on my Mac. A few days ago, I was writing a post, and hit the Cmd-I key to put my editor in italics mode. Instead, the Mail App opened up and a copy of what I had written had been pasted into a blank email message. That was odd. I closed the mail app, and tried again but the same thing happened. So I highlighted the text I wanted to italicize and clicked the Italics icon. That was a bit of a pain because I am a keyboard guy and have been using a form of Cmd (or CTRL)-I for decades to start and stop italics mode in editors.

I forgot about this until the next time I wanted to italicize text. The same thing happened. Instead of putting the editor into italics mode, the Mail App popped up again. Over the next several days, this continued to happen, and I eventually expressed mild frustration on Twitter:

Over the next five days, I’ve lost count of how many times this has happened. Clearly something has changed, either in a recent update of MacOS, or a recent update of Safari. In any case, I was frustrated enough to try to figure out how to stop this from happening this morning since the post I was writing (you’ll see it Saturday) had lots of italics. After some searching and trial and error, I figured out how to prevent this from happening. Here is what worked for me in case anyone is having the same problem. (Note: this applies to Safari):

  1. Open System Preferences
  2. Go to Keyboard preferences
  3. Go to the Shortcuts tab,
  4. Click App Shortcuts on the sidebar
  5. Add a new App Shortcut by clicking the + icon
  6. Give the shortcut the following name: “Email This Page”
  7. Assign the shortcut a keyboard command that you are unlikely to use in the future; I gave mine the following: Shift-CTRL-OPTION-CMD-I
  8. Restart Safari

After I did this, whenever I hit Cmd-I in my WordPress editor, it actually went into italics mode, instead of launching the Mail app. Somehow, something in Safari changed to use Cmd-I to open the Mail app. By remapping that function to another key combination, it eliminated the problem.

The article I found that pointed me in the right direction was for MacOS 10.15 (Catalina), but I swear this just began happening on my system in the last few weeks, and I think it was after I updated to 11.5.

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

My 3 Cyber Security Tools, July 2021 Edition

Back in May when I made a call for suggestions on what to write here, one of the good ones was from Steve, who wrote: “Any thoughts or concerns you might have related to cyber security. Potential tips/processes you employ to protect yourself.” Ten years ago, when I was writing my Going Paperless series, I wrote a piece on securing your digital filing cabinet (in Evernote). With Steve’s prodding, I’ll write about three ways I protect myself and my data–not just Evernote but all my data.

1. LastPass for password management

I began using LastPass as my password manager of choice in the spring of 2013 and I’ve been happily using it ever since. The service has gotten better as the years have gone by. It integrates seamless with browsers, and it also integrates seamlessly with iOS making it simple to access passwords when I need them. These days, I use LastPass’s Family Plan, so that I can share passwords with the family as needed.

It was no small effort to get set up initially. It took me a full weekend, back in 2013, to go through all my services, and change my password, giving each one a unique, strong password. But once that initial work was done, it has been easy to manage ever since.

Here is how I used LastPass today:

  1. I create a unique, strong password for each service or account that I have. I use LastPass to generate strong passwords. It integrates so well with browsers and with iOS these days that I rarely have to remember a password. Having a strong password means it is harder to crack. Ensuring I have a unique password for every service means that in the unlikely event a password is cracked, only one service will be breached.
  2. I always enable 2-factor authentication if it is available. Two-factor authentication (2FA) is a mechanism that forces a service to confirm your identify by a second method after a password has been entered. Typically, this will send a text message to your mobile device with a code number. That way, if someone does crack my strong password, the person will still need the code number sent to my phone in order to get the password. I also use LastPass’s Authenticator as another type of authentication. Two factor authentication adds a layer of security, so it takes a few seconds longer to access whatever service I am trying to get into, but it worth the added security.
  3. I always use random words for challenge questions. You know how some services will have you provide answers to 3 questions like “Your mother’s maiden name?” or “The model of your first car?” I never answer those questions with real information. Instead, I wrote a little shell script that gives me a random word, and I use that word as my answer to the question. I then go to the LastPass entry for the account, and in the Notes field, I jot down the challenge question and the random word answer so that I can refer to it when I need to. This adds one more layer of security so that if someone happens to know my mother’s maiden name, or the model of my first car, that information will be useless to them.

One nice side-effect of all of this is that it provides a ready database of all of the services I have, all of the subscriptions, etc. I often use the Notes field for a service or subscription to record how much I paid for it and when it expires or if it auto-renews. So if I ever need to cancel a service, I have all of the information at hand to do it.

With the family plan, it makes it easy to share passwords for services. You can ever share the password so that it can be used but not viewed. And anyone else in the family can use LastPass for their own accounts and services as well.

I think LastPass Family costs me about $48/year, and for me, it has been well-worth the price.

2. CrashPlan Pro for data backups

CrashPlan running on my Mac Mini
CrashPlan running on my Mac Mini

I began using computers in the 1980s when it was much easier to lose data than it is today. That manifested itself in many ways, but most common was the proliferation of backups to floppy disks. Years of working in I.T. has taught me the important of backups, especially backups that are immediately available.

I have been using CrashPlan for my backups since 2013. At some point, CrashPlan did away with their family plan, but I liked their service so much that I continued with their business plan. The plan gives you unlimited backups for as many devices as you need. You pay per device. These days, we three computers on our plan that our backed up. CrashPlan is one of those tools that just works seamlessly–or, at least, it does for me. You don’t even know it is there. It does realtime backups in the background as files are changed. But it also does incremental backups so that the backup sets are always up-to-date.

I think of backups as a kind of insurance policy for our data. If a disk goes bad, or a folder gets deleted by accident, it takes only a few mouse clicks to have it restored. No panicked moments, no stress about losing work. I’ve probably restored one-off files dozens of times using CrashPlan. But CrashPlan has also been great for bigger disaster recovery, like when a whole machine died unexpectedly. For instance, early this year, I was upgrading the OS on Kelly’s laptop and something went wrong with the upgrade. I couldn’t get the machine to boot and had to do a clean install. CrashPlan came to the rescue and all of her data was restored shortly after the clean install had been completed.

CrashPlan pro costs me about $10/device/month, which comes to around $360/year. But like any insurance policy, it provides peace of mind that our data is safe. And when we’ve had to actually restore data, CrashPlan has never failed us.

3. Express VPN for secure connections

Last, but not least, I try to maintain secure connections when I am not on my home network. For this I’ve been using Express VPN for several years now. When I leave the house, I enabled Express VPN so that my devices connections (phone, iPad, laptop) go through a secure virtual private network. The data is encrypted at the source and can’t even be read by whatever service provider I happen to be using. This is particularly uses when in airports and hotels where the WiFi connections are usually not secured.

Using a VPN adds a layer of security that, like strong passwords, 2-factor authentication, and backups, gives me peace of mind that I am using best practices to protect myself and my data.

Express VPN costs about $100/year.


Do you have suggestions for cyber security tools? Let me know about them in the comments.

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

How I Capture Reading Notes in Obsidian

In addition to automating my daily notes with Obsidian, it quickly became clear to me that Obsidian‘s note-linking capabilities would allow me to capture my reading notes in Obsidian in a really useful way. Moreover, because of Obsidian’s powerful linking capability, it occurred to me that my Obsidian vault could serve as a database for my reading. To describe how I managed to do this (so far) in a step-by-step manner will required a little history first.

A Brief History of My Reading List

I began keeping a list of every book I finished reading back on January 1, 1996. Although I am no longer certain of why I started keeping the list (was it part of a New Year’s resolution?) I am fairly certain that I was influenced by an early reading list I found on the Internet, Eric W. Leuliette’s “What I Have Read Since 1974“.

As a developer (even back then), I decided I would build an elaborate relational database to store my reading list. Over the years, it went through many iterations, and forms. When time became short, I moved the list out of the database and into Excel, or Google Sheets. Finally, several years ago, I settled on a plain text file using Markdown format, and that is how I’ve kept my list ever since.

But I’ve been bothered by shortcomings on this list. There are redundancies I don’t like about it. I have no easy way of referring to books or authors separate from the list. There are things I’d like to automate about it but that the format makes tricky.

A Brief History of My Reading Notes

With all of the reading I do, I have trouble remembering important details of what I read about. So I started keeping notes on my reading. This evolved out of how I kept notes on my reading back in college, and has continued to evolve over the decades since. It was in college that I first decided it was okay for me to write in my books. After all, if I was spending so much money on them, I might as well make them my own, right?

These days, I highlight books, writing margins, and with e-books, I highlight and make short notes on my Kindle devices and apps. But I still have no good way of aggregating these notes into useful groups, categories, and certainly no way of readily searching them.

As I started using Obsidian, and began to see how I could better organize my books and reading lists in its vault structure, I began to get a hint of ways that I might start to link my reading notes back to the books they are associated with, my reading, and other notes.

Enter Zettelkasten

I’d never heard of Zettelkasten before I started using Obsidian. Zettelkasten was originally invented as a way to link paper notes together to be able to easily create connections (links) between then. While it was workable on paper, such a process could be greatly improved with hypertext tools, and it so happens that Obsidian’s note-linking capability is idea for this.

One important idea from Zettelkasten is that a note should contain a single thought or piece of information (say, a passage highlighted in a book). That note is given a unique identifier. In addition to the passage, one would add their own thoughts to the note, and perhaps further link that note to other notes and ideas that are related to it. Zettelkasten has its own unique numbering system for “naming” the notes. Obsidian has a plug-in for creating a “Zettelkasten number” for this purpose that is based on the date/time the note is created. I wasn’t particularly fond of that identifier because it duplicates information already contained in the note itself. After all, the note is just a file in the file system, and has its own create and modified date/times as part of the file. A good identifier does’t embed real data. It’s just an identifier.

I also struggled a bit to figure out how this would work for my reading notes. I originally imagined that if I had a note for each book I read, I could simply add my highlights and annotations to that note. Zettelkasten, however, suggested that rather than adding that highlight to the book note, I’d create a separate note for just the highlight or annotation, and then link it to the book note–as well any other notes it might make sense to link it to. This took a while for me to process, and I thought about it a lot as I built out my reading library in Obsidian.

My Obsidian Library

So how did I decided to structure my reading notes in Obsidian? I’ll try to go through the step-by-step process I have for putting this all together, in case someone is interested in reproducing this.

Step 1: Establishing the structure

I decided that because of Obsidian’s great linking capability, I could use the file system itself as a relational database. In deciding this, I further decided that there were 3 main “objects” I wanted to be able to capture at a kind of atomic level. That is, three things that make up the structure of my reading library:

  1. Things I read, e.g., books, articles, stories, etc.
  2. Authors: the people who write the things in #1.
  3. My notes as they relate to #1 and #2.

From this, I established the following structure of folders in within my Obsidian vault:

My folder structure for Reading notes in Obsidian.
  • Commonplace Book contains all of my reading notes.
  • Library contains all of the “atomic” notes that make up my reading library:
    • Authors: a single note for each unique author in my library
    • Articles: a single note for each unique article (often not tied to a book) in my library.
    • Book: a single note for each unique book in my library
    • Essays: a single note for each unique essay in my library; these are often related to books.
    • Stories: a single note for each unique story in my library.

Step 2: Deciding what goes into a note

Once I had my structure, I had to decide what goes into a note of each type. What is it I want to know about authors, books, stories, etc.? This was fairly easy for me as I’ve been thinking about it for a long time (years, actually). I had in mind an idea that I could write an API that uses these files as a database to query them and produce results. With that in mind, I decided to start by keeping things simple, knowing that I could add detail as needed going forward.

For authors, I wanted just some basic information. Here is a typical author note, in this case, for Alan Lightman, whose new book I read earlier this week:

A sample author note for Alan Lightman.

The backlinks section is generated automatically by a script that I have that runs nightly. I know that I could just click on the “Linked mentions” in Obsidian to see all of the backlinks, but I wanted the related books on the note as a reference in case I access the file outside of Obsidian.

For books (or essays, stories, articles), I also kept things simple. A typical book (or essay, or article, or story) looks like this:

A sample title note for In Praise of Wasting Time

Note that in both authors and books there are links back and forth between the files. The book file refers to the author. The author file has link references back to the books. Moreover, you’ll note that in the book, there is an “Annotations” section with a list of links. These are auto-generated links to my notes and highlights for the book. I’ll have more to say on these shortly, but the important thing is that each note and highlight is a separate file (in the Zettelkasten vain) and is included with the book as a “transclusion” link, meaning that when I view the note in preview mode, it “includes” the links files as part of the note, like this:

Title note in preview mode with transcluded annotations visible.

Step 3. Populating the database

Once I had the structure I wanted, I needed to populate my database. I was fortunate in this regard on 2 counts: (1) I happened to recently create a SQLite database of my books, and (2) I can write code relatively easily. I wrote a script that crawled my book database, and from it, creating the notes for books and authors in Obsidian. This turned out to be a surprisingly simple exercise. (The Python script was 130 lines.)

My digital commonplace book

I first learned of commonplace books reading a biography of Thomas Jefferson (in this case, it was Williard Sterne Randall’s Thomas Jefferson: A Life.) Jefferson (and others in his time) would copy passages from their reading into a book. This helped with memorization, but it also provided a resource where they could add notes and observations. I’ve always liked this concept, and I decided that Obsidian would finally allow me to put it into action in a way I’d envisioned.

It is trivial to create a note and add it to the note containing the book to which it is related. But what if the note ultimately relates to more than one thing? Reading about Zettelkaten provided me with insights into how I might handle this. The naming convention in Zettelkasten (and the way it is implemented in Obsidian) bothered me. Neither made much sense. How do you search for things with essentially coded filenames?

I was in the shower when I finally had a breakthrough insight on this. I’m not searching for a filename, I’m searching for file content. If each annotation and highlight I can link it to as many notes as makes sense. Furthermore, I can add tags to each note. The name of the file doesn’t matter. What matter is how it links to other notes, and that all files are searchable.

I still didn’t like the file-naming scheme for Zettelkasten in Obsidian, which essentially uses a datetime stamp down to the current second. So a file might be named: 20210215084456. Given that one is not likely to create two of these notes within the same second, it guarantees uniqueness. But from a database perspective, identifiers like these are not supposed to embed any information. They should be strictly identifiers. Moreover, the with the date embedded in the note title, I would be duplicating information that already exists in the file properties.

I decided instead to use a Guid, or what is sometimes called a UUID. This is another form of a unique identifier that doesn’t embed information, just produces a unique code. (For those tech-savvy folks reading this, I used Python’s UUID4 which doesn’t use the MAC address as part of the identifier.)

When I have a new note or highlight for a book, it goes into my Commonplace Book folder in Obsidian. These notes also have a specific structure. A typical one looks like this:

A typical note, Zettelkasten style.

Each annotation begins with a Source that links back to the source for that annotation. It may or may not have tags associated with it. That is followed by the body of the annotation, which may be a highlighted passage. Finally, there are my own notes related to the specific passage. In the above example, my notes also link to another book, making this particular annotation related to more than one note. That is, a link has been created between Creativity, Inc by Ed Catmull and Amy Wallace, and On Writing by Stephen King.

Automating my annotations

Over the weekend, I got a start on automating these annotations. I wrote a Python script that reads a CSV files exported from Kindle, and creates a unique note for each annotation in the file, relating it back to the source book in my Library. My process is roughly this (I say roughly because this is still new):

  1. When I finish reading a book, I export the annotations from my Kindle, which sends me an email. That email has a CSV attachment which I save in a folder.
  2. A script runs, and processes and CSV files I have in the folder, creating the notes and links.
  3. The script, outputs a list resulting annotations for each file. I copy this and paste it into the “Annotations” section of the source book or article. That makes it easy to view the annotations inline when previewing the note. An example of the output from the script looks like this:
Output from my annotation import script.

Toward an API for my books and annotations

I am able to do the above automation because I have a standardized structure to my books and author notes. That standardization allowed me to write an API for my book library. From this API I can, for instance, check to see if a title exists in my library already. I can grab information about a book or author and then use it in some way. The API typically returns data in JSON format. For instance, if I call the function biblio.search_by_title("Beyond"), I get a JSON formatted return containing the following:

[
   {
      "title":"_Beyond Band of Brothers: The War Memoirs of Major Dick Winters_",
      "link":"[[Beyond Band of Brothers (334)]]",
      "type":"book",
      "authors":[
         {
            "author":"Winters, Richard",
            "authorFirstLast":"Richard Winters",
            "authorLink":"[[Winters, Richard]]",
            "gender":"None"
         }
      ],
      "source":"",
      "date":""
   },
   {
      "title":"_Beyond Apollo_",
      "link":"[[Beyond Apollo (58)]]",
      "type":"book",
      "authors":[
         {
            "author":"Malzberg, Barry N",
            "authorFirstLast":"Barry N Malzberg",
            "authorLink":"[[Malzberg, Barry N]]",
            "gender":"m",
            "alternateNames":[
               {
                  "name":"Barry, Mike",
                  "nameLink":"[[Barry, Mike]]"
               }
            ]
         }
      ],
      "source":"",
      "date":""
   },
   {
      "title":"_Beyond the Blue Event Horizon_",
      "link":"[[Beyond the Blue Event Horizon (259)]]",
      "type":"book",
      "authors":[
         {
            "author":"Pohl, Frederik",
            "authorFirstLast":"Frederik Pohl",
            "authorLink":"[[Pohl, Frederik]]",
            "gender":"None"
         }
      ],
      "source":"",
      "date":""
   }
]

The results so far

I’ve linked all of this together using my master reading list note. This note contains a list of everything I have read since 1996 and serves as a kind of index to my reading:

A sample from my reading list index note.

A big part of the way Obsidian works is that it can show you the relationships between your notes. While I am still working on importing all of the notes I have in my Kindle, I can already see a a network of relationships when I view the graph of my Obsidian vault:

A graph of the relationships between all of my notes.

Most of my notes are book and reading-related at this point. That big dot in the center is the master reading list illustrated above. If I highlight it, this is what I see:

Sample of a highlighted node on the graph.

From there, you can see other nodes and relationships that have started to form. For instance, if I hover over one of the Alan Lightman books I finished yesterday, In Praise of Wasting Time, you can see a little network of links coming off that book:

Some of those links point to annotation files. Another points back to the note for Alan Lightman. And a few of the annotation links point to seemingly unrelated notes.

Here is another example. One of the big nodes is for John W. Campbell, editor of Astounding Science Fiction in the late 1930s through his head in the early 1970s. I read many of those old issue when I was taking my Vacation in the Golden Age of Science Fiction. So Campbell shows up a lot on my master reading list:

Highlighting an author node on the graph.

You can see that Campbell is linked to all of the issues of Astounding that I have read. I have started to bring my notes in for those issues. If we look at the July 1939 issue, for instance, you can see this is related to all of the stories and articles and authors in that issue:

Currently, the notes for each story are part of the story note, but I plan on breaking those out into their own Zettelkasten-style notes as I’ve done for my other notes and annotations.

Conclusions

Keep in mind, that this is all being done with plain text files, something that I like because the format is compatible virtually anywhere. This could be done as easily on a Windows machine as a Mac. It could be done easily on a Linux machine. The openness and longevity of plain text (which has been around for fifty years now) is a big part of what I like about this system.

The linking that Obsidian provides from within its application makes all of this useful. But once established, those links are just as useful outside Obsidian with a little coding–as I’ve done with my API for books and authors. And this API is extensible. This week, I plan to add capability for the API to return any annotations when returning a “book” object. So in addition to what is returned by the JSON format illustrated above, that will soon contain a node for annotations related to that book.

Mostly, I am satisfied that I now have a simple way of keeping my reading notes in a useful form. These are easily searchable, they are easily linked. I can continue to capture highlights and brief notes as a I read. The import function allows a nice step to expand on my annotations as I review them after they’ve been pulled into Obsidian.

It did take me some time to get the infrastructure in place, but now that it is there, I am able to focus on reading, notes, and let the system organize them for me.

One More Note on (Obsidian) Notes

Okay, okay, you’ve convinced me. I’ve been playing around with Obsidian (h/t to Matt Banks for initially bringing it to my attention) for a couple of days now. I think it is the notes system that I have been looking for all my life!

I’m still getting used to some of the ins-and-outs, but I really like what I see so far, and I’ve started converting my Apple Notes (the ones that are not throw-aways) to Obsidian. I am also experimenting with using it as a digital bullet journal, similar to how I use OneNote in my day job for the same purpose. Indeed, I’m using my work to test out the bullet journal aspects of using Obsidian.

It is going to take me a few days to get my thoughts together, as I need time to play with it more. But I was convinced enough not only to try it, but to become a supporter as well.

Thanks again to all who mentioned it. I’ll have more to say about it soon. In the meantime, I’ll leave you with this preview of an Obsidian note for reading notes from a book I recently finished.

A sample Obsidian note

CrashPlan to the Rescue

We have been using CrashPlan for our home computer backups for nearly 8 years. During that time, it has come in handy on a couple of occasions when I needed to restore a file, or was transferring data to a new computer. Mostly, it sits in the background unnoticed. Backup software is like that. It’s like homeowners insurance for data. You have it and you hope that you don’t have to use it.

This weekend, I was making my way through a bunch of tasks that I’d been meaning to take care of for a while. I was getting my new Mac Mini setup the way I wanted it. I also knew that Kelly’s MacBook Air was behind on its system updates. So on Saturday evening, I set about running an update on her laptop.

By Sunday morning, I knew something had gone wrong. The OS upgrade to BigSur kept getting stuck at the “Less than a minute remaining” mark, and would sit there for hours. Everything I found online said this had happened to many people. Of course it would happen when I was upgrading Kelly’s laptop instead of my own. The only solution was a clean install.

I already had a bootable thumb drive with Big Sur, so I booted from the thumb drive and did the clean installation. It finished smoothly. I keep a set of “bootstrapping” notes in Apple’s Notes1 app and the first thing I did after the installation completed was go to my bootstrapping checklist. The first thing on my list after completing a clean install is to install CrashPlan and restore data, if necessary. I got CrashPlan installed, and started a restore of data, and a couple of hours later, all Kelly’s data was back, she had Big Sur running on her laptop and was ready to go.

And I breathed a sigh of relief.

Back in 2017, CrashPlan did away with their individual plans. If you stuck with them, you moved to CrashPlan Pro. At the time, I decided to stick with CrashPlan for a several reasons, and this weekend proved out the value of that decision. We currently have 3 computers that are backing up to CrashPlan2 and I feel good that the data is there if I need it, or if something goes wrong. CrashPlan has always been easy to use, easy to restore data when I need it, and once again, it came to the rescue for me this weekend when I needed to do a clean install and full data-recovery. It also helps to have a fast fiber optics Internet connection so that it doesn’t take long to restore all that data.

So, nearly 8 years after first starting with CrashPlan, it is still proving its value. I’m glad I stuck with it, and I still recommend it to others looking for cloud backup solutions.


  1. Why Apple Notes and not Evernote? Apple Notes is part of a clean system install, and once my iCloud account is connected, the notes are there. I don’t need to install any other software at this point, so I have access to what I need to finish bootstrapping the rest of the installation.
  2. As my new Mac Mini acts as a kind of home server, in addition to backing up to CrashPlan, I have an external drive on the machine that is setup with Time Machine backups so that I can restore locally, if needed. That external drive is not backed up to CrashPlan, but the rest of the system is, so is provides a level of redundancy in data protection.

Experimenting with Ulysses

If there is a modern equivalent to a writer collecting typewriters, it is a writer collecting writing software. I have played around with lots of different writing software over the years. Among my favorites are tools like the versatile Scrivener, and the cloud-based Google Docs.

This week, I have added a new tool to my collection: Ulysses. Ulysses is a Mac and iOS-based writing tool that manages to do many of the things that I think are key to a good writing tool:

  1. It separates the content from the presentation layer. This allows me to focus on writing, and not worry about how it will look. Ulysses has all kinds of styles to which it can export a finished document. Scrivener does this very well, too, allowing you to focus on the content, and then “compiling” the finished document into the desired format.
  2. It eliminates distractions. I am not overwhelmed by icons or menus or UI elements that I will never use. It also has a nice full-screen mode. Here is what this post looked like on my 27” iMac screen as I composed it in Ulysses:

    Ulysses Full Screen

  3. It keeps things simple. Besides not having a WYSIWYG interface, the entire application is small and seems to focus only on those features that are absolutely necessary for writing. The files themselves are plain text with markup. They are stored within the application library, which abstracts even the file management to make it easy. It syncs with iCloud so that I can move from this machine to my laptop or iPad and continue my work.
  4. It has a simple theme system that makes it easy to customize the look and feel of the UI. This last point might seem like a small thing, but it is one of the main reasons that I am giving Ulysses a try. I have written elsewhere about how my favorite word process is Microsoft Word 5.5 for DOS. I found a theme in Ulysses that made it easy to emulate what the screen in Word 5.5 for DOS looked like. (For those wondering, the theme I am using is a slightly customized version of Blue Screen.)

The last point might seem silly. Yet for me it is no different than a writer who pines for the old Olivetti typewriter they used to work on, and for which they can no longer find ribbon. Call it nostalgia, but something about the way Microsoft Word 5.5 for DOS looked and behaved appeals to my sense of happiness in the days that I started out writing.

This is post is the very first thing I have written using Ulysses. I’ll need some time to experiment before I decide if it will work for me in the long run, but I’ve got to say I love the UI so far. If it turns out that it works for me, I’ll begin looking for ways to automate it into my other writing-related processes.

For now, if there’s anyone else out there who uses Ulysses, I’d be interested in the feedback you have. Drop your thought in the comments.

Tracking the Things I Make with GitHub

I spend my days writing. In my day job, I write emails, I write code, I write requirements documents. Outside my day job I write stories, and articles, and blog posts. Whether I am writing code, or writing a blog post, the result is something to which I can point and say, “Hey, I made that!”

For a few months now, I have been fascinated by the idea of tracking the lifecycle of my work products. I can do this because all of my work products are essentially digital, and essentially plain text. When I write code, the files containing the code are just text files. When I write blog posts, stories, or articles, the files that containing the posts, stories, and articles are, at their heart, text files. This means that at the most basic level, all of the things I make are the same format. The text within the files may include markup, like HTML, or RTF, but they are all readable with simple text editors.

I have frequently used Git to track the things I make at the day job, but for a long time, my Git checkins were limited to just code. Recently, I have started to use Git to track other things I made, like requirements documents, and specifications. In my writing, I used Google Docs for a long time. When my 825 consecutive day writing streak came to an end, I decided I wanted a change, and moved back to Scrivener. At its heart, the text I write in Scrivener is stored as RTF files. I have been using GitHub to track my work on these things.

I like GitHub because it provides a single place to track everything I make. Like most revision control systems, GitHub captures just the changes between checkins, which is efficient. It also makes it easy to see how the things I write evolve over time. I can look at an initial draft of blog post and easily compare it to the final draft by running a command. I can see any intermediary steps. I can see what text I decided to delete or what words I decided to change, or add at the last minute.

Using GitHub with Scrivener

Experimenting, I decided to see how well GitHub would work with Scrivener. At its core, the main writing files within a Scrivener package (a .scriv file) are rich-text format files. I created a Scrivener project for my blog. Each post I write is a new file within the Scrivener project

Scrivener_GitHub1

When I complete a draft, I check it in to GitHub. I am a command-line person and so I use Git commands to perform the check-in, but there are GUI tools available for this as well. For instance, for this post:

Git Checkin

The short comment lets me know what I was working on. If I want to see what I worked on in a particular day, I can look at the Git log for the project. If I want to see what I’d done since yesterday, for instance:

Git Log History

By default, all GitHub repositories are public. In order to keep these things private until I am ready to publish them, I have a paid GitHub account which gives me access to private repositories. Private repositories are not necessary for everyone, but as someone who writes fiction and nonfiction for other markets, it is important that my work has not been previously published elsewhere. That includes previously published on the web. Private repos ensure that my writing is not published until I am ready to publish it.

All of my “work products” are now captured the same way, and that makes it easy to track what I make. And because all I really care about are the text files that Scrivener produces, I have created a .gitignore file that ignores other types of files in a Scrivener project. You can find a gist of my .gitignore file for Scrivener here.

One nice thing about my Google Docs Writing Tracker was that it automated the process of tracking my daily word counts, streaks and other statistics about my writing. I am working on a similar tool that does for Scrivener what my Google Docs Writing Tracker does for Google Docs—except it uses my GitHub repos as the source of data. I’m still in the early stages of this, but I’ll post more when I have something that works consistently.

I am hoping that by the end of 2016, I’ll have an automated report that I can point people to that will summarize everything I made in 2016, along with all of the interesting stats. I can do this because everything related to my writing now goes into GitHub.

Distraction-Free iPhone

At some point, I realized that my iPhone had become a distraction, and I decided to take some drastic measures to cut down on the distractions. Here are a few things I did to help make my phone distraction-free.

1. Switched to a blank home screen

Most of the apps I used most frequently were on my main home screen. There is plenty of room on the home screen to fit lots of apps. On the one hand, having my frequently used apps on the home screen made it easy to start one. On the other, seeing the other apps was distracting. If I wanted to look at my email, I might also see Facebook, and that would lead me to browsing what my friends were up to when I should have been checking my email.

I solved this by moving all but 4 of my apps off the home screen, and into a single “Apps” container on the second screen. I made my home screen entirely blank, except of the four apps I regularly use which sit on the bar at the bottom.

My new iPhone home screen

This was a paradigm shift for me. I now only saw the most basic apps: my email, calendar, and LastPass. Everything else was gone from view. I began to note a marked decrease in distractions.

2. Use the built-in search or task switcher to start an app

When I need an app that isn’t on the home screen, I use the built-in search feature of the iPhone. I swipe down to pull up a search window, and begin typing. I might type “Maps” to pull up Google Maps for instance.

iPhone search

Although this is a 2-step process (swipe down and start typing), it turns out to be faster for me than the more traditional model. My Google Maps app was buried on a second or third screen, and I had to go hunting for it. It take me about two seconds to swipe down, type “maps” and tap the Google Maps icon. This also helps keep distractions to a minimum because I only see those apps that match the search criteria.

There is one drawback I have noticed. If I type “Face” in the search window, I get both Facebook and FaceTime. The load speed of the search varies, so when I think I am clicking on Facebook, I occasionally click on FaceTime.

3. Eliminated all but 3 audio/vibrate notifications

I turned off audio and vibrate notifications for everything except my calendar, and text messages, and phone calls. Before this change, my phone beeped or buzzed for Twitter updates, email messages, Instagram updates, FitBit updates, and pretty much everything else you can think of. It sometimes seemed as if my phone was constantly pestering me with updates.

I no longer get alerts for email. Or anything else except for calendar appointments, text messages, and phone calls. Instead, most of the notifications are set to banners and badges. If I happen to look at my phone—something I am trying to do less frequently—I’ll see things like Twitter updates, Instagram updates, email, etc. But I’m not notified of these anymore.

What a relief this has been. My phone has stopped pestering me. I am less distracted by it. And I think I am using it more effectively than ever before.

The Demise of Mailbox

Dropbox recently announced the demise of the Mailbox app. I was an early adopter of this app for the iPhone, and I am sad to see it go. I don’t send a lot of email from my mobile device, but I do manage my email from it from time-to-time, and Mailbox allowed me to manage my mail with similar functionality I use with Boomerang for Gmail. It allowed me to move messages out of my inbox until a specified time, after which they would return. This kept my inbox clutter-free, and provided a nice reminder when I needed to take an action.

Dropbox decided to ax the app because,

…We realized there’s only so much an email app can do to fundamentally fix email. We’ve come to believe that the best way for us to improve people’s productivity going forward is to streamline the workflows that generate so much email in the first place.

I can understand this. Exploring improvements to an underlying (and potentially broken) process is better than enabling those broken processes through small fixes. But I grew to really like the Mailbox app and am sad to see it go.

So far as I can tell, this is only the second app I have used that has been sunsetted1, and that is pretty good considering how many apps I’ve used over the years. This kind of weeding is probably a good thing. It makes me aware that I need a backup plan for those apps and services I use most-frequently, just in case they go away as well.

I am not waiting for the February 26 deadline to transition to another app for my email. I have already started to use Google’s Inbox app for the iPhone. It is quite a bit different from both Mailbox and Boomerang, but is does appear to have the functionality I am looking for to manage my email on my phone when I have to.

Inbox by Gmail

In the long run, Dropbox may be right. Changing the process may be the best course. Boomerang works very well for managing my inbox from within the Gmail web client. Perhaps I shouldn’t worry about trying to manage my inbox from my mobile device and do it all when I am sitting at my computer, with Gmail open. That might be the best process change I can achieve for keeping my in shape.


  1. The first was Google Reader—remember that, kids?