Safari is one of the finest update we can receive in Mavericks. It’s packaged with the WebKit2 engine that has been rewritten to handle multiple tabs better, similar to Google’s Chrome process-per-tab architecture. No longer we have to restart Safari when one of the tab crashes.
What makes Safari appealing is not the underlying technology; it’s the tight integration with OS X sporting consistent interface built on AppKit Framework.
Two years since my last post on Safari extensions; things have changed a lot. It’s difficult to find new Safari extensions made these days. Although not as much like it used to, I still have many extensions installed. Here are the seven most useful extension that everyone will find useful.
Sometimes you need to work on a certain project or researching a certain topic that ends up with many open tabs. You can’t always finish the task in one session; you might wish to save all the open tabs together so it can be revisited later. Sessions lets you save them in single click. It also allows you to restore the previous browsing session on Safari launch. I’ve been using Sessions to save all the open tabs before Pinboard add tabs feature.
HoverZoom allows you to load the actual image size within web page. This extension is useful because you don’t need to open the image in new tab. Press Shift can make the image to fit inside browser. This is one of the most useful extension for you who browse photography sites.
Do you want to track and limit the time you spend on the websites you visit? You can have this feature built into Safari easily with WasteNoTime. By enabling this extension, you can decide how much time is allowed to spend on certain websites. You can also decide when the extensions are active — by adjusting allocated time effectively on weekdays and weekends.
By default, all new tabs will be created at the end of the tab bar. If you often use Select Next Tab and Select Previous Tab, having the new tab created right beside the active tab is preferable. With Tab Options, you can choose the the behavior how each new tab is handled. You can also put it in the beginning of tab bar, the left or the right of the active tab.
Shortcuts are available if you wish to control the tab positioning behavior. But I mainly use it to set the new tab to open in the right side of active tab.
Shortcat for browsers. I use it to navigate within website. With Type-To-Navigate installed, I can visit the URL inside a webpage by typing. Install this and try to visit archive by simply typing “archive”, then press return.
If Tab Options controls how the new tab is created, LinkThing controls how the link within webpage are handled. This extension is great at dealing with websites that enforce link behavior onto user. Instead of letting them to decide how the links should be opened, we choose our own preferences.
My default preferences is to have all the offsite links1 opened in new tab and all the onsite links in current tab. You can also choose where the new tab should be created when a link is clicked — similar to Tab Options. If you dislike the complex URL made by Google, this extension can also rewrite them into direct URL.
Alfred’s fallback searches is one of the most underutilized feature. The free version doesn’t allow users to set their own custom searches; Powerpack owners can configure it easily. This feature is especially useful for people who search regularly.
Although you can have several fallback searches in Alfred, I only need two fallback searches. The first fallback search is “I’m Feeling Lucky”.1
“I’m Feeling Lucky” turns Google into a bookmark directory. Instead of skimming the list of search results, or typing URL into address bar, I can just type the keywords to visit a webpage. In fact, Google is smart enough to detect your typo and show you the correct webpage.
Alfred has “I’m Feeling Lucky” custom search built in by default. You can set it as your fallback search under the Default Results preferences.
If you hate the built in Google search icon, you might consider making your own custom searches. Open Alfred Preferences and choose Web Search. You can create a new custom search by clicking the Add Custom Search at the bottom right. Use the URL below for your custom search:
You can also just visit this link to import the custom search into Alfred. I use the Chrome icon designed by Chris Masterson for all the Google related searches.
There is no need to create separate custom searches for App Store, Amazon, or Wikipedia. By adjusting your keywords, you can get desired results from all mentioned websites. Here are some example to get you started:
Type “[author] + [post title/content]” like “shawn blanc pinboard”
Type “wiki + [topic]“ like “wiki Pokemon X”
Type “app store + [app name]” like “houdini app store”
Type “store name + [book name]“ like “barnes elements of style”
That’s it. Single custom search for all websites. It works great when you know which page you want to visit. I still use the default Google search when I’m researching certain topic — typically when I need several resources. That’s my second fallback search in Alfred.
Changing the way you use search engine can be uncomfortable in the beginning. Since we’ve grown accustomed to see the search results first, we might find not knowing where you’re going to end up insecure. But with enough practice in choosing keywords, you can visit most of the pages accurately skipping the search results altogether.
I hope using this feature doesn’t suck up all my luck.↩
Compared to few years ago when I just started out using Twitter, the frequency of my tweets have hit rock bottom. What it used to be at least five tweets a day becomes one tweet a week.
Twitter remains as my favorite channel to find out what the people I follow are up to. It’s just that I often discard my tweets.
I always ask myself these questions before pressing the tweet button. Is it useful? Can I explain it more clearly? Will I have the same thought tomorrow? As the result, my notes are filled with many broken sentences, waiting for me to complete it one day.
Those broken sentences look like a junk in the sea of my notes. I even considered to trash them all. But, after a while, looking back at my past notes usually yield to another discovery, the wonderful feeling of connecting the dot from the past with the present dot.
By realizing not tweeting might lead to another review, tutorial, or tips. I take a deep breath, press the cancel button, and once again turn a tweet into a post.
TextExpander has saved me a lot of time. Rather than copy pasting, or arranging the rich text format, I can turn them into snippets. You can assign variable and input field for each snippet to make it more useful.
This post won’t address what TextExpander can do nor showing you which snippets to use. You can learn what it does by visiting official TextExpander’s site. For snippets recommendations, David Sparks and Brett Terpstra have shared their snippets which you can use as references.
The most challenging part using TextExpander is not creating snippets. Snippets are called, but in order to trigger the call, we need abbreviations. Without memorable and unique abbreviations, you’ll waste more time trying to remember which abbreviations to use.
You can hardly get them all right. If the abbreviation is too short, conflict happens often. If the abbreviation is not unique, it’ll get triggered unexpectedly. If the abbreviation is too complicated, it’ll be forgotten easily. So what exactly is the method to create a unique and memorable abbreviation?
There are two ways to make the abbreviations unique.
Duplicating an abbreviation’s first character (ddate, ssig, zzip) is one way of creating abbreviations that meet these criteria. Another way is to use a period or other punctuation mark as the first character of your abbreviation (;date, ‘sig, /zip).
Don’t duplicate the first character. I’ve tried that method and instead of making each of them unique, more conflicts arise. Using punctuation mark as unique character is recommended. John Gruber uses semicolon, Brett Terpstra uses double comma. Personally, I use dot as the the unique character abbreviation. It’s a matter of preferences. My suggestion is to only pick one character. Either comma, semicolon, or dot is a nice choice.
Prepending unique character itself alone is not enough. Let’s say I use .img as an abbreviation. It’s used to expand a Markdown snippet by taking image URL from clipboard. It also asks for the alternative text and title for the image.
What if I want to have a different version snippet where the image is inside the hyperlink? I can’t use the .imga or .img2 because it’ll get triggered before I complete the abbreviation1. I also can’t use .iimg because it increases the complexity of the abbreviations.
What is the solution? Add group abbreviation right after the unique character.
Group abbreviation is another way to ensure all the abbreviations are unique. It can also help you remember snippets with similar content. Instead of using .img, you can use .mdimg to make the abbreviations specific for Markdown.
The structure of your abbreviations should be like this:
If you’re a developer, you should be familiar with Git. From the rules above, your structure would be:
Unique character: dot
Group abbreviation: git
Snippet abbreviation: command
You can come up with the list of abbreviations such as .gitlog, .gitbran, .gitpush, and .gitstat. The optimal group abbreviation character length is three, while you can just truncate the snippet abbreviation to four characters.
The structure above works because we only need to remember the group abbreviations. The snippet abbreviations itself is the truncated version, in other word, you don’t need to memorize them. For git branch command, I don’t use .gitbrnc, I just use .gitbran.
You’ll also find this useful when writing CSS. By prepending .css to all your abbreviations, the group itself will be unique. You can also use your company alias or the blog you’re working by prepending matching abbreviations like the one I do for MakeMac.
Take Apart The Structure
The structure is made to help you organize abbreviations. Sometimes you might want to take apart the structure for different snippets. If you’ve read Plain Text Primer by Michael Schechter, you should know that simple abbreviations like .nx and .bx is better than prepending group abbreviations.
Frequently used snippets don’t need to use group abbreviations. You can use .date to show current date, or even .time to show current time.
Try using different unique character for different type of snippets. If you need to remember file path, using ~ as the unique character works better than dot or other characters. Use it to store all the most common used file path like assigning ~log to access your server log.
By combining what you’ve learned, you can differentiate between snippets with group abbreviations. If you need to access your remote server, use the server name or company name as prefix. That way you can access the same path, but only need to remember the different group abbreviations, eg. ~yhlog, ~wdlog, ~msnlog.
Update 2013-10-01: One of the readers, Johnny Knittle, has shown me a similar approach, but with more flexibility to group abbreviations based on functions and objects. By using the unique character as separator, you can create multiple level abbreviations for your personal contacts.
If you group them according to objects, the snippets will be like the one in the list:
me.e = your email address
me.addr = your home address
me.cell = cell phone
The main benefit with this method is you can have different set of first level abbreviations. You can use one character as the abbreviation like r.ok for replies and still use run.abbreviations, re.abbreviations, and roam.abbreviation without conflicts.
The main point of this structure is to lessen the number of abbreviations we need to remember. Similar snippet functions, like the one with accessing log files, share the same snippet abbreviation. With the help of group abbreviation, we can make them unique, avoiding conflicting abbreviations altogether.
You can enable delimiter to decide when abbreviations should be expanded. With the delimiter enabled (the default one are space, tab, return, and enter), the abbreviation will expand only when one of the delimiter is typed.↩
Everyone loves to share what they’re watching, reading, or listening. Twitter have tweeting, Last.fm have scroblling, Facebook have stalking1. This is just one of the way to give other people a chance to say “me too”, and thus starting a conversation.
Scrobbling a song means that when you listen to it, the name of the song is sent to Last.fm and added to your music profile. It’s an activity to record your play history, while in the process, you can learn how your music tastes has changed over the time.
The most significant update in iTunes 11.1 is the addition of iTunes Radio, a main feature of the new released iOS 7 for iPhone and iPad. With iTunes Radio, you can create your personalized radio station by using the music available in iTunes Store. You can even adjust the song recommendation by including the song you like and excluding the song you hate.
Last.fm users might wonder, “Can I scrobble songs from iTunes Radio to Last.fm?”. Well, you can. iTunes treats the songs played from iTunes Radio exactly the same way as the songs played from library. Perhaps the better question is which application makes scroblling more pleasant.
While there are many applications available out there for scrobbling, I find that Bowtie, despite the lack of updates, is the best one. It’s lightweight and unobtrusive. It also supports Growl so you can stay notified when the track has changed in iTunes.
This is important.
Usually I don’t know the title of the current playing song. That’s why having the notification to display track title and artist is useful to me. Of course I can enable Notification Center for this task, but, the shortcoming of Notification Center is the lack of cover art. This is something you can only get by using Bowtie.
Last but not least, Bowtie allows us to apply custom theme. Compared to application like GeekTool, Bowtie’s implementation is more straightforward and less CPU consuming. If you’re not sure which theme to get, I’ve shared my picked Bowtie themes before, not just once, but twice.