This post at The Visual Exegesis was entertaining, but it’s the video embedded half way down that really stuck with me.1 I wouldn’t consider myself a comic book fan. I like them well enough and I have my own personal preferences, but I am no Andy Ihnatko. That also means I don’t really know anything about Neal Adams who is the artist in the video.
I watch that video and I see someone making hundreds of directed mistakes. He has many false starts and ideas flow out onto the page while he works through his process. He doesn’t seem to filter out his ideas, but rather builds upon each one and abandons what he doesn’t like. Part way through he obliterates almost the entire work except for the skeleton left by all of those mistakes. His art is made from continuing to move forward beyond the individual faults and failures. His art is a product of many mistakes he makes on purpose in pursuit of the greater perfection.2
Sorry, I don’t remember where I first heard about this. I have some strange sources in my RSS feeds. ↩
I’m not a philosopher, this is just something I thought was “magical”. I know it made me pause and think about how I make things. Before anyone comments, I also know a purposeful-mistake is an oxymoron. Some people take all the fun out of the internet. This footnote is for you. Dicks. ↩
This post at The Visual Exegesis was entertaining, but it’s the video embedded half way down that really stuck with me.1 I wouldn’t consider myself a comic book fan. I like them well enough and I have my own personal preferences, but I am no Andy Ihnatko. That also means I don’t really know anything about Neal Adams who is the artist in the video.
I watch that video and I see someone making hundreds of directed mistakes. He has many false starts and ideas flow out onto the page while he works through his process. He doesn’t seem to filter out his ideas, but rather builds upon each one and abandons what he doesn’t like. Part way through he obliterates almost the entire work except for the skeleton left by all of those mistakes. His art is made from continuing to move forward beyond the individual faults and failures. His art is a product of many mistakes he makes on purpose in pursuit of the greater perfection.2
Sorry, I don’t remember where I first heard about this. I have some strange sources in my RSS feeds. ↩
I’m not a philosopher, this is just something I thought was “magical”. I know it made me pause and think about how I make things. Before anyone comments, I also know a purposeful-mistake is an oxymoron. Some people take all the fun out of the internet. This footnote is for you. Dicks. ↩
MindMeister is having a sale for the next five days. The iPad app is free for five days and a MindMeister account is 25% off their normal pricing. A MindMeister account is required to use the app.
I still greatly prefer iThoughts HD but MindMeister provides web access to mind maps which is very convenient.
This latest Dr. Bunsen post by Seth Brown is a good introduction to his site as it links to some of his best posts. But it also stands on its own as a thoughtful discussion of managing information input and processing. It also has one of the best opening lines I’ve read in a long time.
The human brain has a capacity to store an estimated 2.5 petabytes of data and execute 6.418 nerve impulses per second.
It’s a good read and should not be judged by the beard alone.
Remember this post and the followup post here for creating cheat sheets? Well, Brett has done an amazing job taking a hack solution and turning it into something gorgeous. Please, go download it and revel in it’s perfection.
For the record, I don’t consider it a “ripoff” as Brett describes. It’s an evolution by someone better than me. That’s awesome.
There are only a couple dozen people in the world doing truly original work. I’m guessing most of them are mathematicians.
Here’s something to consider. What would you do if your entire email archive (work and personal) was blown away overnight? That’s becoming a reality for many people at large corporations.1 It’s also a real possibility for anyone using email in general. GMail provides no guarantees. iCloud provides no guarantees. Even my own SMTP server does not provide a guarantee. That’s the single best reason I can think of to process email as often as possible and to get every bit of valuable information our of email and into something more permanent. Email is a crappy filing system.
Litigation and E-Discovery makes historic email dangerous goods. Perpetual storage also is not very cost effective. ↩
I’ve learned enough about Agile Programming to know that it is not a work practice I would like. Then again, I program for fun and not profit, so I don’t have a good position to argue from.
Agile does have good ideas though. This post from Pete Sergeant at WriteMoreTests.com does an excellent job framing the reasons behind some Agile techniques. The valuable bit for the layperson is that he shows how they are relevant to any kind of work that involves estimating tasks and projects, which is pretty much all time constrained work.
For example, why Fibonacci numbers (1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377…) are used to bucket time estimates for tasks and projects.
the more complex a task is, the less chance you have of accurately estimating it, and you should account for that. When torn between two numbers, go for the larger – you’ll usually be right.
The more complex the task or project, the less accurate your estimate can be. The Fibonacci sequence just helps to choose an appropriately large and inaccurate number.
This is not a review. I’ve been relying on Moom for many months and these are examples of how I use it. If you’re not using Moom then you probably spend a lot of time moving and tweaking windows on your Mac. Stop it. Just go get Moom and play along.
Snap Shots
One of my favorite uses of Moom is to create work environments and save them as Moom Snap Shots. I adjust visible applications and move windows to preferred configurations. When I like the setup, I create a new Window Layout Snapshot. This action can be performed from the Moom menu bar list.
It can also be performed as a new window action in the Moom preferences. Snapshots include all displayed windows on primary and secondary monitors. With the “Ignore obstructed windows” option checked, only top level windows will be recorded as part of the snap shot. This is convenient for taking snapshots without having to completely cleanup all other windows.
Snap shots can be triggered with a keyboard shortcut. When I’m ready to work through my tasks, I hit ctrl-opt-cmd-T and OmniFocus, Mail, and BusyCal are all laid out on my screen ready to process.
Move and Resize
Moom provides several options for dynamically resizing windows. The Grow and Shrink actions are the most generic. These actions adjust the current window by a predefined amount but only on one edge at a time.
Unfortunately, there’s no way to shrink or grow a window from all sides in one action, which can be frustrating. There is also no way to tie multiple actions to the same keyboard shortcut in Moom. Keyboard Maestro also fails to trigger multiple Moom actions in sequence. This is better accomplished with a pure Keyboard Maestro macro.
Multiple Displays
Moom provides several options for users with multiple displays.
Trigger When Switching
I don’t use this option very often. It’s helpful when connecting or disconnecting an external display. If I have my Macbook connected to an external display, this option will automatically rearrange and resize the windows when I disconnect the external display. But the setting also monitors display resolution. If I rotate my external monitor from portrait to landscape, change the resolution or switch display priorities Moom will automatically switch to the defined layout.
To use this action effectively, setup the display configuration and the preferred window layout. Next, click the “Save Snapshot” button.
Move to Other Display
Checking the “Resize Proportionally” button means that if the window takes up the left half on Display 1 then it will be moved to Display 2 and resized to take up the left half as well. Without that option the window will be kept at the same pixel dimensions.
The “Loop through displays” option means that the window will cycle through displays. That means I don’t need to worry about which display the window is currently on. The ctrl-option-rightArrow will cause the window to jump to the next display.
Undo
The “Revert to Original Dimensions” action is like an undo function. If I accidentally resize or move a window with Moom, this action will undo the last change.
Keyboard Control Pop-Over
After enabling the Trigger Control, Moom will present a screen overlay. I’ve turned on the cheat sheet display as well. While in this mode, windows can be manipulated with otherwise excluded shortcuts, like number keys.
As the name implies, windows can be manipulated entirely by keyboard maneuvering as well. By repeating the window activation key combo Moom provides a grid view overlay. The arrow keys can then adjust the window position on the grid. Holding shift and using the arrow keys allows for resizing the window.
I actually do not find this functionality all that useful. I may just need some time to adjust to it but it feels a bit awkward still. I prefer to use keyboard shortcuts with specified window locations and size.
The rest of Moom is great though. Moom is kind of like LaunchBar, but for window management. I don’t realize how much I use it until I sit down at my wife’s mac and curse myself for not installing it earlier.
UPDATE: I did not know it when I wrote this post, but Don McAllister just recently did a screencast about Moom. Sorry about that Don.
Hi. My name is Gabe and I have a problem with planning.
Now that I’ve gotten that off of my chest, the healing can begin. I use OmniFocus to manage tasks. Well, to be honest I use OmniFocus, Outlook Exchange, Simplenote, post-it notes, lipstick on mirrors and full body tattoos.
One major issue with tracking tasks, as I have lamented many times before, is that I work on Windows all day. That means there is no OmniFocus clipper or quick entry box. I’ve rigged my email to add tasks to OmniFocus and I still love Spootnik, but both methods have just enough friction that I’ve relaxed into adding tasks in Outlook and relying on iOS sync and reminders. This is not a good system. It’s low friction getting things in, but it feels like a third degree rug-burn getting them out.
Carrot and Stick
So what’s my motivation for this self-intervention? I have just embarked on a large multi-year, big-dollar project at work. Perhaps the biggest project I have ever managed. There will be dozens of people, thousands of tasks, hundreds of goals, and dozens of milestones. The challenging part is that there is only one deadline and one successful end-point. So I’m left with two major motivating factors.
Carrot: Make my work easier so I can unplug when I’m at home.
Stick: Keep my job.
The Do Over
I cleared my OmniFocus inbox. I deleted old projects. I removed tasks that were postponed. I stopped lying to myself. Now for the hard part. I have to stick with a new system.
The Plan
While I may be stuck with Outlook and MS Project during the day, I have the gang at Omni Group to back me up. OmniPlan can import and export MS Project files and OmniFocus has the best iOS apps available. What I really need is the quick clipper functionailty available on the Mac but on Windows. I have something I’ve made but it’s still in the testing phase. I’ll post more on it later.
I’ve made a sizeable bet on the future of OmniPlan for iPad. The Omni Group are estimating a Q2 delivery for OP on iPad so I went ahead and spent the $200 for OmniPlan on Mac. I wanted a head start to get going with OmniPlan learn the system and limitations on my Mac before trying to rule the world from my iPad.
I want to rework both of these mechanisms to support attachments and inserted images. I also want to try making an Evernote to OmniFocus script. I’m not sure why, but it sure sounds fun.
Unfortunately, Spootnik has not received an update in a long time. It is still quite good, but it’s no replacement for sitting in front of my Mac. That means I need to do more with OmniFocus on my iPad and my server at home. Hopefully, before the stick mentioned above is truly a threat.
Just a friendly reminder for tax time if you use TurboTax or another downloaded tax application.1 I always save a copy of the installer disk image along with that years tax documents. This has absolutely saved me a headache in the past. There’s no way to be sure that next years version of TurboTax will open this years data file, let alone the data file from 3 years ago.
I keep all of my tax documents in a single encrypted sparseimage file that is redundantly backed up.
I’m not an accountant or tax attorney. I’m just some jerk on the Internet. ↩
There are plenty of good reasons to be eagerly awaiting a stable release of Textmate 2 but there are also equally valid reasons to avoid it. I’ve used both but I’ve never been an expert at either. I’ve used them for small personal projects but nothing that would exercise all of the features. For web development, I use Coda, for python scripts, I use BBEdit and now CodeRunner. Most of my writing for this site is done between Simplenote, NVAlt and MultiMarkdown Composer. Recently I decided to invest myself in BBEdit so I could leverage some of the power it provides.[1]
What I’ve discovered is that BBEdit is an incredibly complicated and simple tool. It’s a plain text editor on the surface, but it’s highly customizable (like Textmate or even Vim). I’ve been documenting some of my experience and this post describes some of what I like about BBEdit 10.
Customizations
Most BBEdit customizations are available by dropping a plain text or AppleScript file in the application support directory. BBEdit makes it easy to access these locations and there are no secret “default writes” voodoo to add new features to BBEdit. It’s all readable text.
Text Clippings
Text clippings are like TextExpander snippets or Keyboard Maestro hotkeys, but more powerful. They are more like Keybindings in their ability to manipulate and select text.
Text clippings in BBEdit have their own vocabulary for performing text substitution and selection, very much like TextExpander insertions. You’ll want to read the manual for this one, but one important term is the #SELECTIONORINSERTION# keyword. This keyword grabs the current selection. If there is not one then the insertion point will be placed here after expanding the clipping. This is very handy for creating custom text wrapping functions. For example auto-wrapping a selection in braces or parentheses.
Wrapping Text
The markdown wrapping I’ve grown accustomed to in NVAlt is great. Select some text and hit the bracket key to surround the text. Or just auto-pairing brackets and parentheses as I type is a time saver. BBEdit provides options for this and much more.
Here is a basic text clipping for bracketing a selection. If there is text selected already, then the text will be enclosed and the insertion point placed to the right of the last bracket. However, if no text is selected then paired brackets are inserted and the insertion point is placed between the brackets.
Here are some not so fancy clippings for markdown:
Surround with hash Marks (##SELECTIONORINSERTION##)
Surround with spaces ( #SELECTIONORINSERTION# )
I can combine these two clippings to quickly make markdown headers by hitting “#” three times and then hitting shift-space to get “### ###” with the insertion mark waiting in the middle. This is a lightning fast way to create MD headers.
Beyond that, I’ve created several clippings for wrapping text in parentheses, braces brackets, asterisks, quotes and literals.
The real power of these clippings are realized when they are associated with keyboard shortcuts. For example, using the “[” key for wrapping selected text just like in NVAlt or MultiMarkdown Composer. But BBEdit will not allow standard system keys to be overriden for clippings.
Keyboard Maestro Overrides
BBEdit will not allow a text clipping to be set to a hotkey that is used by the system.[2] For example, if I want to wrap a selection in brackets, I can not set the clipping to use the “[” key as default. One trick to override this behavior is to [use a Keyboard Maestro group][gruber inetercept] that is only active in BBEdit. That group then contains macros with hotkeys mapped to their BBEdit counter part. Here’s an example. This macro simulates the difficult to remember BBEdit hotkey of ctrl-opt-[ but the macro is triggered by the “[” key.
Scripts
BBEdit is probably the most scriptable application I have ever worked with. Nearly every aspect of BBEdit can be controlled through AppleScript. But what’s more important, BBEdit provides a mechanism for tying scripts into text clippings[3] and menus. There’s a nice tutorial over at MacTech.
Selection Control
There are plenty of options in BBEdit for moving around a document and selecting text. BBEdit brings a lot to the table right out of the box. But if that’s not enough, just about everything can be customized with AppleScripts.
BBEdit already hase built in support for hopping through text, stoping at CamelCase characters (ctrl-right arrow). But this too could have been done with an AppleScript.
Mr. Gruber has one of the earliest examples I could find of selecting the word that the insertion point is in.
There’s a script to select the current paragraph text, excluding the leading indent and newline characters.
Scripts are made even more powerful when combined with BBEdit’s Grep searching, also accessible through AppleScript. There’s a short tutorial (albeit rather old) at Anybrowser.org.
Menu Control
Sure, BBEdit is scriptable. So are a lot of applications. I was impressed but not surprised about the scripting support. But then I discovered the menu scripting support. Menu scripting provides the ability to add-to and override the BBEdit menus with custom scripts. For example, instead of using the built-in FTP service, there’s a script to override the menu and launch Transmit instead.
Markdown
It’s only natural that BBEdit is one of the premier Markdown environments, given Gruber’s affinity for BBEdit. BBEdit comes with a number of features that support Markdown, but I also installed the Markdown Extensions by Watts Martin. These additional options for getting MD in and out of BBEdit, as well as adding support for MultiMarkdown.
The Markdown language module provides syntax highlighting for links, headings, block quotes, code and lists. There is support for MultiMarkdown through add-ons but the built-in syntax highlighting does not extend to any other MMD features. Fortunately, I use Marked for MMD preview so very little has changed for my writing workflow. I do miss the MMD highlighting though.
Search
Huge win here for BBEdit. If the text exists, BBEdit will find it. BBEdit supports standard Find and Replace, but as mentioned previously, it also supports grep search and replace. If you’re not familiar with grep, check out this short tutorial. Grep is an advanced search function built into UNIX and BBEdit takes full advantage of it. Grep patterns can be saved and recalled at any time. Let’s say you want to match any pattern that looks like a phone number. Grep’s your solution[4]:
[[:digit:]]{3}[-]\?[[:digit:]]{4}
BBEdit also supports grep searching through AppleScript. Which means a common search can also be tied to a hotkey trigger. For example, a hotkey to automatically select the current word.
Sure, there are good tools for Textmate, like AckMate, but grep is part of BBEdit’s DNA.
BBEdit also supports a beefed up version of good ’ol “Find”, called “Live Search”. when using Live Search, BBEdit begins highlighting matches in the text, as the search term is entered. It’s impressive to see, partly because it is so darn fast. It’s instantaneous on a 1000 paragraphs of text.
Markers
BBEdit provides quick access to functions through a dropdown document menu. When working in Markdown, the menu displays all of the headings with an integer to indicate the heading level. This is nothing ground breaking but it’s nice.
But BBEdit takes quick access one step further with document markers. Markers are like bookmarks within a document. They are invisible in the document text but BBEdit tracks and displays a list of markers when needed. It’s subtle, but very handy. For example, if I’m not happy with a specific piece of text, I can mark it to review later. Another way I’ve been using this feature is to take a break from one section and work on something else. Before I start a new paragraph, I mark the text that I want to revisit. Later, I browse my list of markers to refresh my memory.
The Bad
So it’s not all milk and honey with BBEdit. While I’ve been able to move to BBEdit full time[5] there are still some rough spots.
AppleScript
AppleScript support in BBEdit is both the best and worst things. Almost every function of BBEdit can be accessed through AS. That seems to come at a price though. Unlike Textmate bundles or Sublime Text[6] which can be written in any language, BBEdit is weighed down by AppleScript, which is not versatile or mature enough to do real work. AppleScript is awkward and poorly defined in comparison to other scripting languages. There are too many non-obvious limitations and options. I never know when I should “Tell text of front text window” or more generally “tell front text window”. These are apparently two different things that are only discovered through trial and error.[7]
There’s a lot of AppleScript legacy with BBEdit and it’s likely to remain part of the application until Apple kills it off. I’d like to see BBEdit support additional scripting languages to work on documents.
Color Schemes
BBEdit supports several text coloring options through their Codeless Language Model and their BBColor color schemes. These are nice, but fairly limited. Since BBEdit supports such great grep processing, it seems like that could be leveraged to provide syntax highlighting that is not bounded by a programming language model. For example, why is the Markdown highlighting defined by keywords, numeric constants, string constants and other terms more appropriate for a programming language? I’d like to see a syntax highlighter based on pattern matches that are more general. I’ve found a number of color schemes around the internet but there is no good single source. The closest to a single source I have found is on Github.
Scripting Documentation
The documentation for scripting BBEdit is just “good enough”. Most of what I learned was through extensive Google searching. Many of the examples are very old. There does not appear to be a single repository of AppleScripts to pull from. For an application with such extensive AppleScripting support, it’s frustrating to not have a single repository of examples. However, the Google group for BBEdit is very good and the responses are quick and helpful.
Conclusion
It was worth the investment. I don’t mean just monetarily. I invested many hours into BBEdit and I’m sure there are many more to come. But it was worth it. I have an environment that I feel productive in. I’ve customized it to my exact needs but I’m still producing plain text and working with my other favorite applications like Marked, Simplenote, Dropbox and NVAlt. For the most part, the environment is portable to another Mac, by copying my BBEdit support directory to the new machine.
Advice
I’ll try to avoid the holy wars of text editors and skip the preaching that is abundantly available on the Internet. But if you came here for some advice, I’m happy to share what I think. BBEdit works for me right now. I trust the developers and the product to stick around and keep up support. BBEdit is not the cool new editor on the block, but it is comfortable, dependable and powerful. It has some nice styling and some thoughtful features. In the end, it’s just a damn text editor, albeit a very good one.
Yes, I know. Just like TextExpander. I think this is more powerful than TE’s implementation though. In BBEdit, the script is embedded inside the snippet. ↩
Here’s a bit of a BBEdit hack for a very specific problem. There are a number of words I either confuse or overuse when I write hastily. I’m not talking about misspelling of words, but rather using one word in the place of another.[1] For example, using “peak” when I meant “pique” or “your” when I meant “you’re”. I wanted a custom grammar checker to let me know when I might have a problem with a document. After some reading and tinkering I came upon a use of BBEdit for proofreading that involves a codeless language module.
I don’t really want or need a full-blown grammar checker. Just look at the grammar tools built into most word processors. They’re made for high school creative writing and they are far too verbose to be of much use. What I needed was a highly customized grammar checker tailored to my specific weaknesses. I also wanted the ability to add to the rules as I identify additional weaknesses.
Codeless Language Modules
BBEdit is highly customizable. If someone is willing to download and learn the SDK, there’s almost no limit to what can be done with it. But there’s also a no-code method of defining a custom language format. This really got my interest so I did some reading about the “CLM” and came up with my own plist file to define my “language”. My goal was to have BBEdit highlight my problem words. Some words I overuse or use improperly.
It’s pretty basic. It is made up of a bunch of keywords for BBEdit to highlight. It also defines a pretty inclusive Identifier and Keyword Character Class so that commas and apostrophes can be included in the keywords.
Once this is defined, the plist file is placed in the ~/Library/Application Support/BBEdit/Language Modules/ folder and BBEdit is restarted. Now I have an additional language I can use for editing. I also wanted to use a color scheme that would really stand out when i am reviewing. Solarized is one of the best. So I downloaded and installed the BBEdit color scheme from the solarized site and associated it with my new language. I also changed the function highlight color slightly so that it would be a bit more obvious. I think the results are quite fetching.
Like any useful text editor, BBEdit also has a search tool. Unlike most editors though, there is an option to use grep regular expressions rather than simple substring matching. Furthermore, the BBEdit search is more than the typical “Find Next” functionality. It’s a document review system.
Bringing up the BBEdit “Find” window provides several options for entering a regex for grep searching. I hacked together one that looks for some misused words as well as miss uses of “a” and “an” which is something I do often. The regex can then be saved as a custom pattern and recalled from a shortcut.
After executing the search, BBEdit displays a review window. Stepping through the review, selectively highlights the matched substrings.
It seems like a lot of hacking around, but once I understood a bit more about BBEdit, it was actually very easy. The BBEdit documentation isn’t very good for this stuff, so web searches were crucial to figuring it out. Now I know a bit more about my text editor too. This is an early experiment so I’ll see how it goes. It seems to fit in my workflow. I use plaintext. I use BBEdit. I make a lot of mistakes.
Update: After reading the BBEdit documentation a bit more extensively, I have to admit that I was wrong. This functionality is quite well documented in version 10.1. RTFM!
This is a specific case where TextExpander just doesn’t help me. The words are correctly spelled, they just exist in the wrong context. Maybe TextEpander v.20 will understand context. ↩
The Escapers (makers of Flux, Stuf and more) have an interesting new task management service called Instruktion. Or maybe it’s called “New York Minute”, it’s not clear to me. It is cross platform and the apps are free. It requires a $20/year membership which sounds like a good price.
It looks very nice on all of the application platforms and works offline too. I’m an OmniFocus user but I’ll keep an eye on how this evolves.
This post at NPR is interesting on so many different levels. It’s about Leonardo da Vinci’s todo list. It has left me a sense of being normal. Here’s a few thoughts I had during and after reading this.
Many Todo’s are to learn something new from an expert
Text and doodles are always better than just one alone
He didn’t segregate subjects. He just kept a list of how he wanted to get better or things to make
Amazingly, he was successful without strict adherence to GTD1
Given enough time and research money a standardized test can be created to measure creativity2
I just noticed that ResophNotes, the Simplenote client for Windows, has been updated recently. I had thought it was abandoned-ware after a long delay in patches and feature enhancements. I was wrong. ResophNotes now supports pinned notes and syncs much faster. This is the definitive Simplenote client for those of us suffering on Windows.