<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Brett Terpstra</title>
	
	<link>http://brettterpstra.com</link>
	<description>The digital shenanigans of coder and web developer Brett Terpstra, exploring OS X, Cocoa, Ruby, Bash, PHP, WordPress and more…</description>
	<lastBuildDate>Mon, 21 May 2012 12:01:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BrettTerpstra" /><feedburner:info uri="brettterpstra" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:emailServiceId>BrettTerpstra</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>LinkSmasher updated, works once again</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/sitkdE_QYr0/</link>
		<comments>http://brettterpstra.com/linksmasher-updated-works-once-again/#comments</comments>
		<pubDate>Sat, 19 May 2012 13:00:49 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[dropzone]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=4062</guid>
		<description><![CDATA[<p>If you’re using Dropzone (and why wouldn’t you be?), I updated my LinkSmasher destination recently. You can drop text on it (or just click it to use the clipboard) and it will scan for any links in the text, compile them and create a single link for the group using linkbun.ch. It’s a handy way to share a list of&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/linksmasher-updated-works-once-again/">LinkSmasher updated, works once again</a></p>]]></description>
			<content:encoded><![CDATA[<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/05/geeky-cufflinks.jpg?9d7bd4" width="260" height="172" class="alignright shadow" alt="Geeky cufflinks" title="geeky-cufflinks.jpg" />If you’re using <a href="http://aptonic.com/dropzone2/">Dropzone</a> (and why wouldn’t you be?), I updated my <a href="https://github.com/aptonic/dropzone-user-scripts/blob/master/LinkSmasher.dropzone">LinkSmasher</a> destination recently.</p>

<p>You can drop text on it (or just click it to use the clipboard) and it will scan for any links in the text, compile them and create a single link for the group using <a href="http://linkbun.ch">linkbun.ch</a>. It’s a handy way to share a list of urls and allow the recipient to open them all at once (and works really well with <a href="http://brettterpstra.com/tablinks-2-0/">TabLinks</a> for sharing an entire browsing session). If there’s only one URL in the text, it will just shorten it with bit.ly and return the result in your clipboard.</p>

<p>I’d really like to get this working with bit.ly collections, but I haven’t checked lately to see if they’ve added that to the API. If I get around to it, and they did, that will be next up for this little project.</p>

<p>You can find all contributed <a href="https://github.com/aptonic/dropzone-user-scripts">Dropzone Destinations on Github</a> (<a href="https://github.com/aptonic/dropzone-user-scripts/blob/master/LinkSmasher.dropzone">direct link to LinkSmasher</a>). Install Destinations by saving the script to a file in <code>~/Library/Application Support/Dropzone/Destination Scripts</code> with a <code>.dropzone</code> extension, then add a new destination in Dropzone preferences and it will be an option.</p>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/open-urls-dropzone-destination/' rel='bookmark' title='“Open URLs” Dropzone Destination'>“Open URLs” Dropzone Destination</a></li>
<li><a href='http://brettterpstra.com/app-review-dropzone/' rel='bookmark' title='App Review: Dropzone'>App Review: Dropzone</a></li>
<li><a href='http://brettterpstra.com/app-giveaway-dropzone/' rel='bookmark' title='Mac App Giveaway: Dropzone'>Mac App Giveaway: Dropzone</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/linksmasher-updated-works-once-again/">LinkSmasher updated, works once again</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=sitkdE_QYr0:kee39EJ_8lc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=sitkdE_QYr0:kee39EJ_8lc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=sitkdE_QYr0:kee39EJ_8lc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=sitkdE_QYr0:kee39EJ_8lc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=sitkdE_QYr0:kee39EJ_8lc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=sitkdE_QYr0:kee39EJ_8lc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=sitkdE_QYr0:kee39EJ_8lc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=sitkdE_QYr0:kee39EJ_8lc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=sitkdE_QYr0:kee39EJ_8lc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=sitkdE_QYr0:kee39EJ_8lc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/sitkdE_QYr0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/linksmasher-updated-works-once-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/linksmasher-updated-works-once-again/</feedburner:origLink></item>
		<item>
		<title>Marked 1.5 Sneak Peek</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/pq4s0MF5KCo/</link>
		<comments>http://brettterpstra.com/marked-1-5-sneak-peek/#comments</comments>
		<pubDate>Fri, 18 May 2012 14:00:01 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[marked]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=4049</guid>
		<description><![CDATA[<p>I’ve been spending way too much time documenting the new features in Marked 1.5. I thought I’d share some screenshots, though. No explanations, but if you watch closely you might see something you like. Feel free to hum along. Update: Oh, what the heck. Here’s the current changelog. These Marked features are complete, but some may not make it into&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/marked-1-5-sneak-peek/">Marked 1.5 Sneak Peek</a></p>]]></description>
			<content:encoded><![CDATA[<p>I’ve been spending way too much time documenting the new features in Marked 1.5. I thought I’d share some screenshots, though. No explanations, but if you watch closely you might see something you like. Feel free to hum along.</p>


	<!-- Begin Video.js -->
	<video id="example_video_id_788607108" class="video-js vjs-default-skin" width="600" height="338" poster="/share/video/Marked15SneakPeak/Marked15SneakPeakPoster.jpg" controls preload="true" data-setup="{}">
		<source src="/share/video/Marked15SneakPeak/Marked15SneakPeak.mp4" type='video/mp4' />
		<source src="/share/video/Marked15SneakPeak/Marked15SneakPeak.webm" type='video/webm; codecs="vp8, vorbis"' />
		<source src="/share/video/Marked15SneakPeak/Marked15SneakPeak.ogv" type='video/ogg; codecs="theora, vorbis"' />
	</video>
	<!-- End Video.js -->


<p><span id="more-4049"></span></p>

<hr />

<p><strong>Update:</strong> Oh, what the heck. Here’s the current changelog. These <a href="http://markedapp.com">Marked</a> features are complete, but some may not make it into the final release, primarily depending on how sandboxing goes in the next week or two.</p>

<h3>New</h3>

<ul>
<li>Proofreading mode, stops updates, allows annotation

<ul>
<li>Spell checking</li>
<li>Guess panel/grammar checking</li>
<li>Highlights/Annotations, exportable</li>
</ul></li>
<li>Keyword highlighting

<ul>
<li>Live highlight common/overused phrases</li>
<li>regex/wildcard search for key phrase highlighting</li>
<li>Keyword drawer to easily add temporary keywords for highlighting while previewing</li>
</ul></li>
<li>Advanced text stats with reading time</li>
<li>Option to quit after last window closes</li>
<li>Discount parser option</li>
<li>HTML preview improvements

<ul>
<li>Detect images in Markdown and HTML and watch for changes</li>
<li>Detect php include(‘file’)s and watch for changes</li>
<li>Detect JS and CSS in HTML files and add them to the watch list</li>
</ul></li>
<li>More 3rd-Party app support

<ul>
<li>MarsEdit</li>
<li>VoodooPad preview current page</li>
<li>Preview clipboard</li>
<li>Watch any folder and preview the most recently changed file in that folder</li>
</ul></li>
<li>Field to add additional arguments to custom processor</li>
<li>Export palette/Export additional file types

<ul>
<li>export DOCX or ODT</li>
<li>Improved RTF/RTFD export</li>
<li>Paginated PDF export option</li>
</ul></li>
</ul>

<h3>FIXED</h3>

<ul>
<li>Don’t add page break before first h1 when printing</li>
<li>CSS not being monitored</li>
<li>Recursion level limit for included files</li>
<li>Allow HTML comments around “Marked Style:” meta to prevent showing up on Github</li>
<li>BBEdit compatibility for Markup-&gt;Preview (“open location”)</li>
<li>Only reload preview on preference save/close instead of every time you change an option</li>
<li>Don’t interpret colons in the first line as metadata, even when there’s a line break</li>
<li><code>...</code> Terminator for removing YAML headers</li>
<li>Don’t download files to check headers when validating links</li>
<li>UI feedback for custom processor script usability</li>
<li>Vastly improved processing time on fenced code blocks</li>
<li>Ignore “Process as HTML” pref when using custom processor</li>
<li>Spitting out base-header-level and quote-style when using custom processor</li>
<li>brighten links in Upstanding inverse mode</li>
<li>Handle DOS newlines</li>
</ul>

<p>The beta list is pretty much full, but if you <em>really</em> think you’d be a great beta tester, <a href="http://brettterpstra.com/contact">let me know</a>.</p>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/marked-1-4-teaser/' rel='bookmark' title='Marked 1.4 Teaser'>Marked 1.4 Teaser</a></li>
<li><a href='http://brettterpstra.com/marked-is-on-the-mac-app-store/' rel='bookmark' title='Marked is on the Mac App Store'>Marked is on the Mac App Store</a></li>
<li><a href='http://brettterpstra.com/marked-bonus-pack-fix-and-marked-1-3-progress/' rel='bookmark' title='Marked Bonus Pack fix and Marked 1.3 progress'>Marked Bonus Pack fix and Marked 1.3 progress</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/marked-1-5-sneak-peek/">Marked 1.5 Sneak Peek</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pq4s0MF5KCo:PbGJWqgkNiw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pq4s0MF5KCo:PbGJWqgkNiw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pq4s0MF5KCo:PbGJWqgkNiw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pq4s0MF5KCo:PbGJWqgkNiw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pq4s0MF5KCo:PbGJWqgkNiw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pq4s0MF5KCo:PbGJWqgkNiw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pq4s0MF5KCo:PbGJWqgkNiw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pq4s0MF5KCo:PbGJWqgkNiw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pq4s0MF5KCo:PbGJWqgkNiw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pq4s0MF5KCo:PbGJWqgkNiw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/pq4s0MF5KCo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/marked-1-5-sneak-peek/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/marked-1-5-sneak-peek/</feedburner:origLink></item>
		<item>
		<title>Markdown Editing for Sublime Text 2: humble beginnings</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/3rEbDxYZIVE/</link>
		<comments>http://brettterpstra.com/markdown-editing-for-sublime-text-2-humble-beginnings/#comments</comments>
		<pubDate>Thu, 17 May 2012 22:30:37 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[multimarkdown]]></category>
		<category><![CDATA[sublimetext]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=4035</guid>
		<description><![CDATA[<p>I was disappointed to find that there weren’t any good packages available for Sublime Text 2 that added decent Markdown editing features. I figured it was time to learn my way around. I still haven’t dug into Python, so my script-fu in there is weak right now. I got a few things working, though, and this will evolve as I&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/markdown-editing-for-sublime-text-2-humble-beginnings/">Markdown Editing for Sublime Text 2: humble beginnings</a></p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/05/sublime_markdown_editor_shot.jpg?9d7bd4" alt="Sublime Markdown Editor Shot" height="235" width="650" class="aligncenter" style="border: solid 1px #aaa;  display: block; margin-right: auto; margin-left: auto;" ></p>

<p>I was disappointed to find that there weren’t any good packages available for <a href="http://www.sublimetext.com/2">Sublime Text 2</a> that added decent Markdown editing features. I figured it was time to learn my way around. I still haven’t dug into Python, so my script-fu in there is weak right now. I got a few things working, though, and this will evolve as I learn new things. I’ll probably look back at this first version with embarrassment, but I’ll just overwrite it with better stuff as it progresses.</p>

<p>From the README on the <a href="https://github.com/ttscoff/MarkdownEditing">Github repo</a>:</p>

<p>This package will make MarkdownEditor your default theme for Markdown/MultiMarkdown files. Adjust it to your liking or remove the line from the .sublime-settings files</p>

<ul>
<li>Asterisks and underscores are autopaired and will wrap selected text</li>
<li>If you start an empty pair and hit backspace, both elements are deleted</li>
<li>If you start an empty pair and hit space, the right element is deleted</li>
<li>backticks are paired</li>
<li>Left bracket pairing is modified to eliminate the selection and leave the cursor at a point where you can insert a <code>[]</code> or <code>()</code> pair for a link</li>
<li>⌘⌥V will paste the contents of the clipboard as an inline link on selected text</li>
<li>⌘⌥R will paste the contents of the clipboard as a reference link</li>
<li>⌘K inserts a standard inline link, ⌘⇧K inserts an inline image</li>
<li>⌘B and ⌘I are bound to bold and italics (Markdown). <em>If you don’t like losing your default shortcut for “Build”, modify the sublime-keymap file. This only overrides while editing Markdown files.</em></li>
</ul>

<p>There’s a long way to go and I have a lot of Python to learn.</p>

<p>The theme pays some homage to <a href="http://bywordapp.com">Byword</a>, but I make no pretense that it’s anywhere as pretty.</p>

<h3>Installation</h3>

<p>Just download or clone the <a href="https://github.com/ttscoff/MarkdownEditing">MarkdownEditing repo</a> into a MarkdownEditing folder within your <code>~/Library/Application Support/Sublime Text 2/Packages</code> folder. You may have to restart Sublime to get it working, but once it’s installed (if all goes well), you should be able to open a Markdown file and see my custom theme. If you do, then the features listed above should also be available.</p>

<p>Right now, this is designed to be tweaked. I can’t guess what you’re preferred editing environment is like, so I went with mine. I’d love to see any permutations you come up with.</p>

<p>Oh, and by the way, if you’re doing any theming for Sublime Text, here’s a handy little plugin I whipped up to copy the scope of the character after the cursor to the clipboard for easily adding keys to a .tmtheme XML file:</p>

<script src="http://gist.github.com/2721811.js"></script>

<p>Also check out Philip Belesky’s <a href="https://github.com/philipbelesky/Byworded">Byworded themes</a> for TextMate and Sublime Text 2.</p>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/auto-link-text-service-updated/' rel='bookmark' title='Auto-link text service updated'>Auto-link text service updated</a></li>
<li><a href='http://brettterpstra.com/markdown-service-tools-1-3/' rel='bookmark' title='Markdown Service Tools 1.3'>Markdown Service Tools 1.3</a></li>
<li><a href='http://brettterpstra.com/markdown-quicktags-wordpress-plugin/' rel='bookmark' title='Markdown QuickTags: WordPress plugin for Markdown lovers'>Markdown QuickTags: WordPress plugin for Markdown lovers</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/markdown-editing-for-sublime-text-2-humble-beginnings/">Markdown Editing for Sublime Text 2: humble beginnings</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3rEbDxYZIVE:y4MNhUGwRYI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3rEbDxYZIVE:y4MNhUGwRYI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3rEbDxYZIVE:y4MNhUGwRYI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3rEbDxYZIVE:y4MNhUGwRYI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3rEbDxYZIVE:y4MNhUGwRYI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3rEbDxYZIVE:y4MNhUGwRYI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3rEbDxYZIVE:y4MNhUGwRYI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3rEbDxYZIVE:y4MNhUGwRYI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3rEbDxYZIVE:y4MNhUGwRYI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3rEbDxYZIVE:y4MNhUGwRYI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/3rEbDxYZIVE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/markdown-editing-for-sublime-text-2-humble-beginnings/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/markdown-editing-for-sublime-text-2-humble-beginnings/</feedburner:origLink></item>
		<item>
		<title>Web excursions: May 9, 2012 — May 14, 2012</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/phg5EVfdKsc/</link>
		<comments>http://brettterpstra.com/web-excursions-may-9-2012-may-14-2012/#comments</comments>
		<pubDate>Mon, 14 May 2012 22:01:16 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[bookmarks]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=4014</guid>
		<description><![CDATA[<p>Links of interest from May 9, 2012 through May 14, 2012: git playbackCool idea for visualizing git commits that I’d love to see developed further. Experimental Page Layout Inspired by FlipboardVery nice. Why Nikola Tesla was the greatest geek who ever livedThe title kind of says it all, but if you’ve ever thought that Thomas Edison invented anything, have a&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-may-9-2012-may-14-2012/">Web excursions: May 9, 2012 — May 14, 2012</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Links of interest from <em>May 9, 2012 through May 14, 2012</em>:</strong></p>

<ul>
<li><strong><a href="http://codingfearlessly.com/2012/05/14/git-playback/">git playback</a></strong><br />Cool idea for visualizing git commits that I’d love to see developed further.</li>
<li><strong><a href="http://tympanus.net/Development/FlipboardPageLayout/?page=0">Experimental Page Layout Inspired by Flipboard</a></strong><br />Very nice.</li>
<li><strong><a href="http://theoatmeal.com/comics/tesla">Why Nikola Tesla was the greatest geek who ever lived</a></strong><br />The title kind of says it all, but if you’ve ever thought that Thomas Edison invented <em>anything</em>, have a read.</li>
<li><strong><a href="http://www.macdrifter.com/2012/05/evernote-acquisitions/">Evernote Acquisitions</a></strong><br />I’m on the same path as Gabe on this one. My breaking point was export, and realizing I had a couple thousand notes that were really never going to be much good elsewhere. Here’s hoping that Evernote starts focusing on things like that instead of half-baked integrations with acquired applications.</li>
<li><strong><a href="http://dpeck.net/blog/?q=node/964">Safari Add-on — Pinboard.in: Better Keyboard <em>updated link</em></a></strong><br />I started working on something like this a while ago, but <a href="http://dpeck.net">Danny Peck</a> beat me to it and created this awesome Safari extension for adding keyboard shortcuts to the <a href="http://pinboard.in">Pinboard</a> web interface. Check it out.</li>
<li><strong><a href="http://www.macworld.com/article/1166699/how_to_delete_the_dock_delay.html#lsrc.rss_weblogs_macosxhints">How to delete the Dock delay</a></strong><br />Make a hidden dock appear instantly when your cursor hits the bottom of the screen. <strong>Bonus:</strong> This also removes the need for the double drag in Lion fullscreen.</li>
</ul>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/clippable-to-evernote-snow-leopard-service/' rel='bookmark' title='Clippable to Evernote Snow Leopard Service'>Clippable to Evernote Snow Leopard Service</a></li>
<li><a href='http://brettterpstra.com/antique-safari-reader-hack-update-with-evernote-goodness/' rel='bookmark' title='Antique Safari Reader hack update with Evernote goodness'>Antique Safari Reader hack update with Evernote goodness</a></li>
<li><a href='http://brettterpstra.com/taking-the-markdown-to-evernote-service-further/' rel='bookmark' title='Taking the Markdown to Evernote service further'>Taking the Markdown to Evernote service further</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-may-9-2012-may-14-2012/">Web excursions: May 9, 2012 — May 14, 2012</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=phg5EVfdKsc:-M1aGtpj8F0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=phg5EVfdKsc:-M1aGtpj8F0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=phg5EVfdKsc:-M1aGtpj8F0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=phg5EVfdKsc:-M1aGtpj8F0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=phg5EVfdKsc:-M1aGtpj8F0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=phg5EVfdKsc:-M1aGtpj8F0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=phg5EVfdKsc:-M1aGtpj8F0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=phg5EVfdKsc:-M1aGtpj8F0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=phg5EVfdKsc:-M1aGtpj8F0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=phg5EVfdKsc:-M1aGtpj8F0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/phg5EVfdKsc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/web-excursions-may-9-2012-may-14-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/web-excursions-may-9-2012-may-14-2012/</feedburner:origLink></item>
		<item>
		<title>Regarding my dream Markdown editor</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/ipjieHQySWE/</link>
		<comments>http://brettterpstra.com/regarding-my-dream-markdown-editor/#comments</comments>
		<pubDate>Thu, 10 May 2012 01:06:30 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Write]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[markdown]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=4015</guid>
		<description><![CDATA[<p>While there was some excitement and hearty agreement with the list of my ideal Markdown text editor features, there was also some criticism. There were some valid points in all of the critiques, and I’d like to address them. I’ll do so by rambling a bit. First, I think that some critics felt the list was overwhelming, and didn’t really&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/regarding-my-dream-markdown-editor/">Regarding my dream Markdown editor</a></p>]]></description>
			<content:encoded><![CDATA[<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/05/markdowncloud.jpg?9d7bd4" alt="Markdown Editor Word Cloud" title="markdowncloud" width="231" height="380" class="alignright size-full wp-image-4025" />While there was some excitement and hearty agreement with the <a href="http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/">list of my ideal Markdown text editor features</a>, there was also some criticism. There were some valid points in all of the critiques, and I’d like to address them. I’ll do so by rambling a bit.</p>

<p>First, I think that some critics felt the list was overwhelming, and didn’t really dive in and consider the ramifications (or lack) of the features mentioned. I think the length and detail of the text was misleading when skimmed. The feature set is not as intrusive as it looks at first glance.</p>

<p>There was also a healthy portion of “Markdown is plain text, I want to edit it as plain text.” And that’s fine. If you don’t need anything more than TextEdit or your favorite code editor, then a Markdown editor isn’t really your market anyway. The list–and any debate surrounding it–is for people who use Markdown-specific editors and want to expand on them.</p>

<p>There’s room for those who fall in between, of course, and I understand that anything that makes Markdown editing into a word processor is counterproductive. Markdown is also, however, about convenience. Increasing productivity while writing is my goal, not adding buttons, bloat or new markup features.</p>

<p>My initial list was formulated over several years, but written in about 20 minutes. It was loosely organized and quickly typed. I’ll attempt here to sort things a little better as I expound on my requests. This probably won’t be brief. Apologies in advance<sup id="fnref:post"><a href="#fn:post" rel="footnote">1</a></sup>.</p>

<p><span id="more-4015"></span></p>

<h3>Invisible and unobtrusive</h3>

<p>My dream editor’s features are transparent. <a href="http://bywordapp.com/">Byword</a> is a great example of this. You can just edit text in it with nothing standing in your way. However, it has a <a href="http://brettterpstra.com/byword-for-keyboard-nerds/">lot of handy tricks</a> under the surface if you learn how to access them. They’re not blatant; you have to seek them out. Many of the items on my list fall into this category. They’re not attached to standard keyboard motions, so you’d never know they were there.</p>

<p>This is the basis for all of my requests. They are features that should flow with you, not jump out at you.</p>

<h3>Keyboard shortcuts.</h3>

<p>Having more advanced features assigned to key combinations that you’d never type accidentally does not add friction to standard text editing. It adds power for those who want to use them. There’s no reason, in my mind, not to have non-standard editing features available if they don’t interfere with standard Cocoa text field features.</p>

<p>Many of the items in my list mentioned an unspecified “hotkey” or “keyboard shortcut.” I didn’t assign anything because that isn’t really important at this phase. Developers will eventually work out what’s best, and a standard will evolve. I generally subscribe to the <a href="http://manual.macromates.com/en/key_bindings#conventions">conventions</a> that Allan Odgaard laid out for shortcuts in TextMate bundles. The key combinations I <em>did</em> specify were fairly standard for their behavior in this regard.</p>

<p>Take ⌘↩ for example. I don’t believe there’s any reason in the regular text system to hit Command-Return while typing text. Most people don’t have that in their muscle memory and generally wouldn’t think to hit it, so it’s an easy-to-remember but out-of-the-way shortcut. TextMate users, on the other hand, generally adore the fact that in TextMate this jumps out of the paragraph and starts a new line without breaking the line at your cursor (it’s ⎋o in Vim). This is useful, and you don’t have to avoid it if it’s unwelcome; unless you have a valid reason to be hitting ⌘↩, it’s a feature you’ll never notice.</p>

<p>On my own system (using <a href="http://brettterpstra.com/keybinding-madness/">Cocoa keybindings</a>), ^⌘←/→ indents and outdents lines, and ^⌘↑/↓ moves lines up and down, swapping places with lines above and below. This is another convention borrowed from several places, and I believe it to be relatively standard for this action. I’m completely open to developers making arguments for something else, but again, this is a key combination that is easy to use but not something you’d accidentally trigger. ⌘[/] are also commonly used for indent/outdent. I’m open to anything that meets the criteria.</p>

<h3>Automatically inserted text</h3>

<p>Some features involve text being inserted as you type, which I think are the features that scare people the most. Rightly so; improperly implemented they’re an annoyance that <em>adds</em> friction to an otherwise very simple process. Properly done, they transparently remove friction and save time.</p>

<p>Features such as list continuation (an asterisk and a space being inserted on a new line when you press return at the end of an existing list item) are already becoming par for the course. List continuation has been around in some editors since I started writing Markdown some years ago. Many implementations of it, though, do annoying things like making you backspace the last list item before pressing Return. That’s a hindrance. I shouldn’t have to remove text I didn’t insert.</p>

<p>The same goes for auto-pairing. A poor implementation of it ends up with me spending more time deleting characters I didn’t want than it saves. It has to be smart enough to know when I actually want a right bracket inserted, and gracious enough to delete the extra character automatically when it’s apparent I didn’t want it. If it can’t do that, I’d rather not have it (selection wrapping, though, I don’t want to be without). Specifications for this behavior were in the original list, but I think that some readers glazed over that part (understandable, but you really should finish reading the post before firing off a Tweet).</p>

<h3>Text manipulation</h3>

<p>Along the same lines as ⌘↩, using tab to indent a block of text is very useful in Markdown, especially for creating “verbatim” blocks (code/poetry with line breaks respected). It also doesn’t tread all over any standard behavior. If you’d never used such a feature, why would you select text before hitting tab? It’s not a normal method of deleting text and inserting an indent, even though that’s what the default behavior for that action is. I’d bet that not many people have ever done that intentionally.</p>

<p>Wrapping and auto-pairing are usually mentioned together, but really are separate in my mind. As I said before, I’d rather not have auto-pairing if it’s not done right. Wrapping is hard to screw up, though, beyond how you handle the selection after the surrounding characters are inserted. In a normal situation you’d rarely select text and type a quote character. It would delete the selected text and leave you with a quote. To actually quote a section, you’d likely option-arrow to the beginning of the sentence, type your quote, option arrow to the end of the quoted section and insert another quote<sup id="fnref:vim"><a href="#fn:vim" rel="footnote">2</a></sup>. Wrapping means you can hold shift and option-arrow from one end of the quoted section to the other, type quote once and be done, cursor ready to go at the end of the quote.</p>

<h3>Service features</h3>

<p>These features don’t even need keyboard shortcuts; they do just fine as menu items. Out of the way, but great tools to have available. Converting a selected block of lines into a list and batch reference link pasting from the clipboard are good examples. They are in no way interfering with your normal writing tasks. Learn to use them when you want to, and once you do you’ll be that much happier.</p>

<p>Other features such as footnote insertion and connection are advanced tools that should be connected to non-standard shortcuts, but ones that are easy to work into your habits if you choose to.</p>

<p>Link pasting behavior and reference title auto-completion should happen automatically but intelligently. Reference title completion is a huge timesaver if you have a group of reference links at the very top or bottom of your document and not visible on your screen from the current location. If your document is long enough for that to happen, you’ve probably forgotten the exact title you used for each reference. Get it wrong and you’ll have broken output. Type-ahead autocompletion prevents you from having to scroll to a document boundary, check the list, jump back and type in what’s probably only 5–10 characters.</p>

<p>Link pasting behavior is a little sketchier. I believe that <a href="elasticthreads.tumblr.com/post/18472570712/nvalt22#markdownlinkpasting">Elastic Thread’s innovations</a> are headed in a very positive direction. Selecting text and pasting a link <em>should</em> link that text. I’m willing to concede that–as we implemented in nvALT–the behavior might be best with a modifier key on ⌘V, rather than replacing the standard behavior for the “paste” key combination. Same with pasting a standalone link and having it automatically surrounded with angle brackets to create a self link, or preceded by “[]: ” if it’s at the beginning of a line. ⌘⌥V works nicely in both situations, with different behaviors based on context and selection.</p>

<h3>Regarding syntax highlighting in text editors</h3>

<p>I’m a big fan of the subtle highlighting that Byword does. Markdown text is designed to be readable, and dimming the markup and emphasizing marked up text appropriately just makes it that much more readable for me. iA Writer’s ability to pull the leaders on <code>###</code> style headlines outside of the left margin also has this effect. I <em>don’t</em> like color changes or size changes. I do <em>not</em> want my plain text changing scale and hue while I type. Keep it simple, make it beneficial and unobtrusive.</p>

<h3>Moving forward</h3>

<p>I’ve already implemented almost every one of these features in one form or another across my own projects. <a href="http://brettterpstra.com/project/markdown-quicktags/">Markdown QuickTags</a>, for example, does about 80% of what I’ve mentioned, but it does it in a web  browser textarea. Javascript doesn’t allow for the clean implementation that the Cocoa Text System does, and editing in a web view is not my first choice (or even my third or fourth). The <a href="http://bundle.weblogzinc.com/docs/index.php">Blogsmith Bundle</a> for TextMate also has many of these features, as well as a somewhat dizzying array of additional writing tools, providing an enhanced environment for web writers. It was a playground for my ideas, and a way for me to weed out what was actually useful and what was a hindrance. Now I just want the fruits of that research brought to bear in an elegant, dedicated Markdown editor.</p>

<p>The tools I’ve built in <a href="http://brettterpstra.com/project/markdown-service-tools/">System Services</a> are handy because they’re application-agnostic and allow keyboard shortcuts and behavior to be consistent across editing environments. They’re slow, though. Having their functionality built in to my primary writing space would be much more ideal. Based on downloads and traffic, I think a few people agree that they’re useful tools. Elegantly implemented within an app, I think they’d be dynamite.</p>

<p>That’s enough of a rambling response for now. I’ll end by once again saying that this is fodder for critique among the plain-text faithful. These are my personal desires, but they’ll never come into being without being passed through a gauntlet of thoughtful debate. If I haven’t lost your attention, I’d enjoy hearing more responses. Then let’s make the best damn Markdown editor ever.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:post">
<p>Yeah, that got ridiculously long. I called in sick to work but I can write 2000 words for a blog post? <a href="#fnref:post" rev="footnote">↩</a></p>
</li>

<li id="fn:vim">
<p>Unless you’re a vim user, in which case you do that in a much more efficient–though somewhat unintuitive–manner. <a href="#fnref:vim" rev="footnote">↩</a></p>
</li>

</ol>
</div>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/' rel='bookmark' title='My ultimate Markdown editor wishlist'>My ultimate Markdown editor wishlist</a></li>
<li><a href='http://brettterpstra.com/crowdsourcing-ios-text-editor-comparisons/' rel='bookmark' title='Crowdsourcing iOS Text Editor comparisons'>Crowdsourcing iOS Text Editor comparisons</a></li>
<li><a href='http://brettterpstra.com/markdown-quicktags-0-7/' rel='bookmark' title='Markdown QuickTags 0.7'>Markdown QuickTags 0.7</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/regarding-my-dream-markdown-editor/">Regarding my dream Markdown editor</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=ipjieHQySWE:9bndm35GYvI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=ipjieHQySWE:9bndm35GYvI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=ipjieHQySWE:9bndm35GYvI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=ipjieHQySWE:9bndm35GYvI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=ipjieHQySWE:9bndm35GYvI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=ipjieHQySWE:9bndm35GYvI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=ipjieHQySWE:9bndm35GYvI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=ipjieHQySWE:9bndm35GYvI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=ipjieHQySWE:9bndm35GYvI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=ipjieHQySWE:9bndm35GYvI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/ipjieHQySWE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/regarding-my-dream-markdown-editor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/regarding-my-dream-markdown-editor/</feedburner:origLink></item>
		<item>
		<title>Web excursions: May 9, 2012</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/o8lg5kkWCyg/</link>
		<comments>http://brettterpstra.com/web-excursions-may-9-2012/#comments</comments>
		<pubDate>Wed, 09 May 2012 17:59:43 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[bookmarks]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=4009</guid>
		<description><![CDATA[<p>Links of interest for May 9, 2012: The Best Markdown Editor Is Any EditorDr. Drang’s response to my Markdown editor wishlist post. I’ll save commentary until I have time to expound, but here’s the other side. Open 1Password Logins from LaunchBar or QuickSilverHandy script to extract your 1Password logins to a bookmarks file that Launchbar can index. One-click logins for&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-may-9-2012/">Web excursions: May 9, 2012</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Links of interest for <em>May 9, 2012</em>:</strong></p>

<ul>
<li><strong><a href="http://www.leancrew.com/all-this/2012/05/the-best-markdown-editor-is-any-editor/">The Best Markdown Editor Is Any Editor</a></strong><br />Dr. Drang’s response to my <a href="http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/">Markdown editor wishlist</a> post. I’ll save commentary until I have time to expound, but here’s the other side.</li>
<li><strong><a href="http://nik.me/crappysoftware/open-1password-logins-launchbar-or-quicksilver">Open 1Password Logins from LaunchBar or QuickSilver</a></strong><br />Handy script to extract your 1Password logins to a bookmarks file that Launchbar can index. One-click logins for Launchbar! (That’ll show those Alfred users…)</li>
<li><strong><a href="http://duckduckhack.com/">DuckDuckHack</a></strong><br />Sweet.</li>
<li><strong><a href="http://www.macsparky.com/blog/2012/5/9/my-new-book-the-macsparky-paperless-field-guide.html">The MacSparky Paperless Field Guide</a></strong><br />iPad only iBook. I “beta” tested for Mr. Sparks and can tell you that it’s a great read with an inspiring level of interactivity.</li>
<li><strong><a href="http://twitter.theinfo.org/200239240179757057#id200243776168525824">Twitter conversation with NateBoat</a></strong><br />My favorite Twitter conversation this week.</li>
</ul>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/scatterbrains-2-the-geekening/' rel='bookmark' title='Scatterbrains 2: The geekening'>Scatterbrains 2: The geekening</a></li>
<li><a href='http://brettterpstra.com/visualize-your-twitter-stream-topics/' rel='bookmark' title='Visualize your Twitter stream topics'>Visualize your Twitter stream topics</a></li>
<li><a href='http://brettterpstra.com/quick-tip-fixing-the-other-account-mac-app-store-issue/' rel='bookmark' title='Quick Tip: fixing the “other account” Mac App Store issue'>Quick Tip: fixing the “other account” Mac App Store issue</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-may-9-2012/">Web excursions: May 9, 2012</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=o8lg5kkWCyg:Hgg3zPAIrPQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=o8lg5kkWCyg:Hgg3zPAIrPQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=o8lg5kkWCyg:Hgg3zPAIrPQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=o8lg5kkWCyg:Hgg3zPAIrPQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=o8lg5kkWCyg:Hgg3zPAIrPQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=o8lg5kkWCyg:Hgg3zPAIrPQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=o8lg5kkWCyg:Hgg3zPAIrPQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=o8lg5kkWCyg:Hgg3zPAIrPQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=o8lg5kkWCyg:Hgg3zPAIrPQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=o8lg5kkWCyg:Hgg3zPAIrPQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/o8lg5kkWCyg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/web-excursions-may-9-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/web-excursions-may-9-2012/</feedburner:origLink></item>
		<item>
		<title>Scatterbrains: git as biographer</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/DGSkMOnUy3c/</link>
		<comments>http://brettterpstra.com/scatterbrains-git-as-biographer/#comments</comments>
		<pubDate>Tue, 08 May 2012 15:00:57 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[dayone]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3983</guid>
		<description><![CDATA[<p>This is another of my attempts at keeping track of my day in an orderly fashion. It’s a pretty simple idea. Given that most of of what I do is stored in git repositories, my commit logs are my best bet for seeing what I’ve accomplished each day. I just needed to pull them together and bundle them up without&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/scatterbrains-git-as-biographer/">Scatterbrains: git as biographer</a></p>]]></description>
			<content:encoded><![CDATA[<p>This is another of my attempts at keeping track of my day in an orderly fashion. It’s a pretty simple idea. Given that most of of what I do is stored in git repositories, my commit logs are my best bet for seeing what I’ve accomplished each day. I just needed to pull them together and bundle them up without having to think about it. If a lot of your work happens in git repositories and you make frequent commits, this might be of use to you.</p>

<p>This script runs nightly and visits a list of local git repositories to extract a log of any commits for the day. It formats them as Markdown and can log them to Day One or just to a plain text file (single file, appended). There’s an accompanying shell command for easily adding the current directory as a repo to check.</p>

<p>This is what my log looks like in nvALT (with a custom theme):</p>

<div id="attachment_4003" class="wp-caption aligncenter" style="width: 617px;  border: 1px solid #dddddd; background-color: #f3f3f3; padding-top: 4px; margin: 10px; text-align:center; display: block; margin-right: auto; margin-left: auto;"><img src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/05/GitLoggerScreenshot.jpg?9d7bd4" alt="GitLogger Screenshot" title="GitLogger" width="607" height="390" class="size-full wp-image-4003" /><p style=' padding: 0 4px 5px; margin: 0;'  class="wp-caption-text">GitLogger log in nvALT</p></div>

<p>Git notes are included, as is body text of the commit if it exists. Formatting creates an unordered list, and short hashes for the commits are added at the end of the commit message, just in case you need them.</p>

<p>As usual, if you’re interested in trying it, I’m happy to share…</p>

<p><span id="more-3983"></span></p>

<h3>Automatic installation</h3>

<p>You can use the following command to automatically install the script and have it run at 11:50pm daily:</p>

<pre><code>/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/gist/2633967/ed3f35df05ba12f1ab7176c12ad174d5210b38f1/gitlogger-install.rb)"
</code></pre>

<h3>Manual install</h3>

<ul>
<li>Save the script below (<a href="https://gist.github.com/2632346">gist link</a>) as <code>gitlogger.rb</code> in a script or bin folder on your drive.</li>
<li>Use the variables at the top to set it up for logging to Day One (<code>dayone = true</code>), or enter a path to a text file (<code>textlog = "path/to/text.md"</code>). If you don’t want to use text file logging, just set that option to “false”.</li>
<li>If you’re logging to Day One, see <a href="http://brettterpstra.com/logging-with-day-one-geek-style/">this post</a> for more instructions. This script doesn’t need the <code>dayone</code> CLI tool, but if you’re not using iCloud for storing your journal, you’ll need to modify the paths to point to your journal file.</li>
</ul>

<script src="http://gist.github.com/2632346.js"></script>

<p>The second little script (<a href="https://gist.github.com/2632356">gist link</a>) is a bash function for adding whatever directory I’m working in to the list that the logger uses to find repos for logging. For consistent results in building the repo list, run the <code>glog</code> command from the base directory of the git repository. Set it once and forget it. You can remove repos from logging by editing the file at <code>~/.gitlogger</code>. You can also just create that file by hand: each line is a repo, with the title first, followed by a colon, followed by the path.</p>

<ul>
<li>Add this function to your <code>~/.bash_profile</code> to be able to mark the current directory for logging by typing <code>glog Alias</code>, where “Alias” is the name you want to appear for the repo in your log.</li>
</ul>

<script src="http://gist.github.com/2632356.js"></script>

<p>To automate the script, I suggest using <code>launchd</code> (the OS X version of <code>cron</code>). Use <a href="http://www.peterborgapps.com/lingon/">Lingon</a> or copy the code below into a file called <code>com.yourusername.gitlogger.plist</code> and save it in <code>~/Library/LaunchAgents/</code>. After creating the file, you’ll want to run <code>launchctl load ~/Library/LaunchAgents/com.yourusername.gitlogger.plist</code> to get it started (or log out and back in, but that takes too long). The code as is will set up the logger to run at 11:50pm every night (in your local time). You’ll want to edit the Label and the ProgramArguments values to match your setup.</p>

<pre><code>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;com.brettterpstra.gitlogger&lt;/string&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
        &lt;string&gt;/usr/bin/ruby&lt;/string&gt;
        &lt;string&gt;/Users/ttscoff/scripts/gitlogger.rb&lt;/string&gt;
    &lt;/array&gt;
    &lt;key&gt;StartCalendarInterval&lt;/key&gt;
    &lt;dict&gt;
        &lt;key&gt;Hour&lt;/key&gt;
        &lt;integer&gt;23&lt;/integer&gt;
        &lt;key&gt;Minute&lt;/key&gt;
        &lt;integer&gt;50&lt;/integer&gt;
    &lt;/dict&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</code></pre>

<p>Maybe this will be of use to <em>somebody</em>. Code contributions and suggestions welcome, just follow the links on the gists above to fork. My personal git workflow works well with this logging statement, but you might want to modify it to log tags only, etc. Let me know what you do with it!</p>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/automating-taskpaper-to-day-one-logs/' rel='bookmark' title='Automating TaskPaper to Day One logs'>Automating TaskPaper to Day One logs</a></li>
<li><a href='http://brettterpstra.com/logging-with-day-one-geek-style/' rel='bookmark' title='Logging with Day One, geek style'>Logging with Day One, geek style</a></li>
<li><a href='http://brettterpstra.com/a-quick-voodoopad-script-plugin-go-to-today/' rel='bookmark' title='A Quick VoodooPad Script Plugin — Go To Today'>A Quick VoodooPad Script Plugin — Go To Today</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/scatterbrains-git-as-biographer/">Scatterbrains: git as biographer</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=DGSkMOnUy3c:DkvlbHnJ5Iw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=DGSkMOnUy3c:DkvlbHnJ5Iw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=DGSkMOnUy3c:DkvlbHnJ5Iw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=DGSkMOnUy3c:DkvlbHnJ5Iw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=DGSkMOnUy3c:DkvlbHnJ5Iw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=DGSkMOnUy3c:DkvlbHnJ5Iw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=DGSkMOnUy3c:DkvlbHnJ5Iw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=DGSkMOnUy3c:DkvlbHnJ5Iw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=DGSkMOnUy3c:DkvlbHnJ5Iw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=DGSkMOnUy3c:DkvlbHnJ5Iw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/DGSkMOnUy3c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/scatterbrains-git-as-biographer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/scatterbrains-git-as-biographer/</feedburner:origLink></item>
		<item>
		<title>Web excursions: April 25, 2012 — May 7, 2012</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/760gqXV3vow/</link>
		<comments>http://brettterpstra.com/web-excursions-april-25-2012-may-7-2012/#comments</comments>
		<pubDate>Mon, 07 May 2012 18:00:05 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[bookmarks]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3960</guid>
		<description><![CDATA[<p>Links of interest from April 25, 2012 through May 7, 2012: Use anchor tags to parse URLs into componentsJoe Bartlett pointed me to this great riff on a technique for parsing urls in javascript. Kudos. Over 46 Powerful Geeklets and Scripts…Great roundup of GeekTool geeklets. Some of the best I’ve seen are mixed in there. grunt: JavaScript Build scripts. Nice.&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-april-25-2012-may-7-2012/">Web excursions: April 25, 2012 — May 7, 2012</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Links of interest from <em>April 25, 2012 through May 7, 2012</em>:</strong></p>

<ul>
<li><strong><a href="https://gist.github.com/964849">Use anchor tags to parse URLs into components</a></strong><br /><a href="http://jdbartlett.com">Joe Bartlett</a> pointed me to this great riff on a technique for <a href="https://gist.github.com/2428561">parsing urls in javascript</a>. Kudos.</li>
<li><strong><a href="http://mac.appstorm.net/roundups/utilities-roundups/over-46-powerful-geeklets-and-scripts-for-the-geek-within-you/">Over 46 Powerful Geeklets and Scripts…</a></strong><br />Great roundup of GeekTool geeklets. Some of the best I’ve seen are mixed in there.</li>
<li><strong><a href="https://github.com/cowboy/grunt">grunt: JavaScript Build scripts. Nice.</a></strong><br /></li>
<li><strong><a href="http://projects.jga.me/boots/">Boots | Twitter Bootstrap cli</a></strong><br />This is pretty sweet if you’re using Bootstrap for any project.</li>
<li><strong><a href="http://tidbits.com/article/12947?rss">Report Text Message Spam to AT&amp;T</a></strong><br />A comprehensive how-to from TidBITS for reporting spam TXT messages.</li>
</ul>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/nvalt-1-0-3/' rel='bookmark' title='nvALT 1.0.3'>nvALT 1.0.3</a></li>
<li><a href='http://brettterpstra.com/listary-giveaway-winners/' rel='bookmark' title='Listary giveaway winners'>Listary giveaway winners</a></li>
<li><a href='http://brettterpstra.com/testing-from-vim/' rel='bookmark' title='Testing from Vim'>Testing from Vim</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-april-25-2012-may-7-2012/">Web excursions: April 25, 2012 — May 7, 2012</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=760gqXV3vow:CFKWn8w6Wqs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=760gqXV3vow:CFKWn8w6Wqs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=760gqXV3vow:CFKWn8w6Wqs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=760gqXV3vow:CFKWn8w6Wqs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=760gqXV3vow:CFKWn8w6Wqs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=760gqXV3vow:CFKWn8w6Wqs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=760gqXV3vow:CFKWn8w6Wqs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=760gqXV3vow:CFKWn8w6Wqs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=760gqXV3vow:CFKWn8w6Wqs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=760gqXV3vow:CFKWn8w6Wqs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/760gqXV3vow" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/web-excursions-april-25-2012-may-7-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/web-excursions-april-25-2012-may-7-2012/</feedburner:origLink></item>
		<item>
		<title>My ultimate Markdown editor wishlist</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/MSb6UANAgyU/</link>
		<comments>http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/#comments</comments>
		<pubDate>Sun, 06 May 2012 21:12:46 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Write]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[markdown]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3972</guid>
		<description><![CDATA[<p>There are a few great Markdown text editors available, and more being worked on right now. I want to put a list of features out there that I think any true Markdown editor should include. Some of these are implemented in one editor or another, but nothing has brought it all together (aside from TextMate with all of my customizations,&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/">My ultimate Markdown editor wishlist</a></p>]]></description>
			<content:encoded><![CDATA[<p>There are a few great Markdown text editors available, and more being worked on right now. I want to put a list of features out there that I think any true Markdown editor should include. Some of these are implemented in one editor or another, but nothing has brought it all together (aside from TextMate with all of my customizations, and even that lacks some of the polish mentioned below).</p>

<p><span id="more-3972"></span></p>

<h3>The wish list</h3>

<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/05/wishlist.jpg?9d7bd4" alt="Wishlist" title="wishlist" width="230" height="528" class="alignright size-full wp-image-3975" /></p>

<ul>
<li><p><strong>Emphasis shortcuts for selected text</strong></p>

<p>Preferably Command-B and Command-I. Selection should remain (expanded to include inserted emphasis characters) so that I can add multiple emphasis if I want. Typing any characters other than emphasis or auto-paired characters (including Space) at this point should move the cursor to the right, deselecting the text and continuing to type after the emphasis end.</p></li>
<li><p><strong>Intelligent indentation</strong></p>

<p>Creating a newline should maintain the previous line’s indentation, except when ending a list, in which case the indentation should be removed. Pasting text should remove indentation from the text and preserve the current indentation of the preceding line.</p></li>
<li><p><strong>List continuation</strong></p>

<p>Pressing enter at the end of a list item should create a new list item at the same indentation level and with the same list type, incrementing the number if it’s an ordered list. Pressing return on a line that contains <em>only</em> the list item delimiter (no text) should remove that delimiter and insert a newline. Never leave me with an orphaned, empty list item.</p></li>
<li><p><strong>Auto-pairing</strong></p>

<p>Needs to be smart enough to know when <em>not</em> to pair: Avoid pairing when inserting a starting element when there’s a non-whitespace character immediately to right, or when inserting a paired element at the end of a string that begins with an unclosed starting element.</p>

<p>Backspacing the first character of a pair immediately followed by the right character should delete both of them.</p>

<p>Obvious note: Characters inserted in this way must have the cursor placed between the resulting pair.</p></li>
<li><p><strong>Wrapping</strong></p>

<p>When the first element of a pair is typed while text is selected, it should wrap the selected text with the pair. Unlike pairing, the cursor should be placed <em>outside</em> of the last character of the pair, allowing you to start typing immediately.</p></li>
<li><p><strong>Link pasting</strong></p>

<p>Elastic Threads has worked some really intelligent link paste detection into nvALT, and I love it. If a link is pasted while text is selected, it adds an inline link to the selected text using the pasted url. If it’s at the beginning of a line, you can paste it as a reference title and position the cursor inside the title brackets. Pasted by itself with leading and trailing whitespace, it should make a self-link (<code>&lt;url&gt;</code>).</p></li>
<li><p><strong>Tab indents entire selection block</strong></p>

<p>God help you if Tab deletes a selection instead. Shift-Tab should function in the same way, outdenting entire selections.</p></li>
<li><p><strong>Shortcuts for moving lines up and down and indenting and outdenting.</strong></p>

<p>This should function on <em>any</em> line, not just within lists. If a current selection is shorter than the current line, the entire line moves, and if it spans multiple lines, the entire block moves including characters within the paragraph but outside of the selection.</p></li>
<li><p><strong>Auto-complete reference titles</strong></p>

<p>When the cursor is inside of square brackets immediately following a closing square bracket, it should start type-ahead autocompletion using all existing references in the document.</p></li>
<li><p><strong>Table of contents navigation based on existing headers, and shortcuts to jump to the next/previous header.</strong></p></li>
<li><p><strong>Footnote insertion</strong></p>

<p>When a hotkey is pressed, a footnote marker should be added and the cursor should jump to a blank line after the current paragraph, inserting newline and a matching reference. Once you finish editing the footnote, the same hotkey should jump back to the footnote marker. I’ve already made this work in the Blogsmith bundle. It’s not that hard.</p>

<p>This same method could be applied to reference links. When a shortcut is pressed while there is selected text, wrap the text with <code>[text][unique title]</code> and move the cursor to the next blank line or existing reference link title, insert <code>[unique title]:</code> and place the cursor after the colon and a trailing space. Using the shortcut immediately after typing should return to the last edit point in the text. Pressing the shortcut on a line beginning with a reference title should scan the document for the first reference to that title and jump to it.</p></li>
<li><p><strong>Headline level conversion</strong></p>

<p>Shortcut should increment/decrement header level for the current line, cycling from 0–6 and looping at beginning/end.</p></li>
<li><p><strong>List creation/conversion</strong></p>

<p>Running this on multiple lines should compact them into a list, preserving indentation. Running it on an existing list should change the list type between unordered and ordered. Needs to be aware of context, only changing within the current scope of indentation and not modifying nested lists. Byword does a really good job with this already.</p></li>
<li><p><strong>Blockquote level shortcut</strong></p>

<p>Using this shortcut should create a blockquote from the current line or selected text, and increase the quote level for the line/selection when pressed repeatedly.</p></li>
<li><p><strong>Reference list insertion</strong></p>

<p>There should be an option to parse the clipboard for all links and insert a set of reference links with a unique title for each, preferably based on the domain of the link for easier use when referencing later. The Blogsmith Bundle and my Markdown Service tools both include this feature.</p></li>
<li><p><strong>Ability to convert all inline links to references</strong></p>

<p>Should scan the entire document for inline links and replace them with reference links, references collected at the end of the document. The Markdown Service Tools have this capability, but Writing Kit on iOS is the only other place I’ve seen it implemented.</p></li>
<li><p><strong>Shift-Return and Command-Return</strong></p>

<p>Shift-Return (or possibly Control-Return) should insert two spaces and a newline to create a hard break. Command-Return should jump to the end of the current paragraph/line and insert a newline, allowing you to jump out of the middle of a line without breaking it. Command-Shift-Return should function like Command-Return, but add the two spaces before inserting the newline.</p></li>
<li><p><strong>Command-Arrow</strong></p>

<p>Command-Left/Right Arrow should jump to the first non-whitespace character of a paragraph, only jumping to the actual beginning of the line on second press. If the current line is wrapped on the screen, jump to the left side of the current line and then to the first character on a repeat press, just to maintain basic compatiblity with existing behavior.</p></li>
</ul>

<h3>Choose your own adventure</h3>

<p>This list isn’t complete, but it includes the major things that I find missing (or would just like to see) in current implementations. Have any to add? I’ll edit this post as I think of more or hear good suggestions. Keep in mind that this represents my personal desires, not necessarily yours. I’m also open to hearing from developers who think any of these might be more cumbersome or confusing than helpful, especially if you have suggestions for modification.</p>

<p>[Update]: Still feel like reading about Markdown editors? There’s a <a href="http://brettterpstra.com/regarding-my-dream-markdown-editor/">followup post.</a></p>
<p>No related posts.</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/">My ultimate Markdown editor wishlist</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=MSb6UANAgyU:MHvmIlpkj54:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=MSb6UANAgyU:MHvmIlpkj54:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=MSb6UANAgyU:MHvmIlpkj54:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=MSb6UANAgyU:MHvmIlpkj54:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=MSb6UANAgyU:MHvmIlpkj54:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=MSb6UANAgyU:MHvmIlpkj54:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=MSb6UANAgyU:MHvmIlpkj54:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=MSb6UANAgyU:MHvmIlpkj54:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=MSb6UANAgyU:MHvmIlpkj54:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=MSb6UANAgyU:MHvmIlpkj54:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/MSb6UANAgyU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/my-ultimate-markdown-editor-wishlist/</feedburner:origLink></item>
		<item>
		<title>Natural Language Date Service update</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/4AfEppeUU98/</link>
		<comments>http://brettterpstra.com/natural-language-date-service-update/#comments</comments>
		<pubDate>Sat, 05 May 2012 21:08:36 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[automator]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[natural language]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[service]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3964</guid>
		<description><![CDATA[<p>I made a small update to the natural language date Service that I put together a while back. I wanted it to handle input formats like “+3″ to get a date for 3 days from right now, and to handle adding times to the output if there’s a time-like string in the input. Now you can use, for example: date&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/natural-language-date-service-update/">Natural Language Date Service update</a></p>]]></description>
			<content:encoded><![CDATA[<p>I made a small update to the natural language date Service that I put together <a href="http://brettterpstra.com/os-x-service-for-natural-language-dates/">a while back</a>. I wanted it to handle input formats like “+3″ to get a date for 3 days from right now, and to handle adding times to the output if there’s a time-like string in the input.</p>

<p>Now you can use, for example:</p>

<ul>
<li><code>date +5</code></li>
<li><code>long +21</code></li>
<li><code>short tomorrow 2pm</code></li>
<li><code>date thurs 3:15pm</code></li>
</ul>

<p>Just a couple of tweaks because I found I needed them. The download has been updated (see bottom of post), and we’ll call it version 1.1.</p>

<p><em>p.s.</em> I know I’ve been a little quiet on the blog lately, I’ve had my head buried in too many projects. Marked has some fantastic new features, though, including MarsEdit and VoodooPad support, as well as the ability to accept an entire folder as input and always preview the most recently-edited text file. The latter is perfect for nvALT and Jekyll blogs. Lots of writing to do for other projects, too, so there may be some more dead air. I’m not gone, I’m just making stuff.</p>

<div class="download_desc"><p class="download-icon"><a href="http://brettterpstra.com/downloads/ConvertDate1.1.zip?9d7bd4" title="Download Convert Date - Natural Language Date Service (245)"><img src="http://brettterpstra.com/wp-content/images/serviceicon.jpg?9d7bd4" alt="download image for Convert Date - Natural Language Date Service" width="64" /></a><br /><a href="http://brettterpstra.com/downloads/ConvertDate1.1.zip?9d7bd4" title="Download Convert Date - Natural Language Date Service (245)" class="download-button">Download</a></p><p class="desc"><a href="http://brettterpstra.com/downloads/ConvertDate1.1.zip?9d7bd4" title="Download Convert Date - Natural Language Date Service (245)">Convert Date — Natural Language Date Service</a> — A System Service which takes selected text and parses it into a standard date format, using keywords at the beginning to define which format to use. <a href="http://brettterpstra.com/?p=2539">More Info</a></p></div>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/os-x-service-for-natural-language-dates/' rel='bookmark' title='OS X Service for natural language dates'>OS X Service for natural language dates</a></li>
<li><a href='http://brettterpstra.com/natural-language-date-conversion-for-textmate/' rel='bookmark' title='Natural language date conversion for TextMate'>Natural language date conversion for TextMate</a></li>
<li><a href='http://brettterpstra.com/natural-language-dates-for-textexpander/' rel='bookmark' title='Natural language dates for TextExpander'>Natural language dates for TextExpander</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/natural-language-date-service-update/">Natural Language Date Service update</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4AfEppeUU98:CE3QVNomOec:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4AfEppeUU98:CE3QVNomOec:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4AfEppeUU98:CE3QVNomOec:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4AfEppeUU98:CE3QVNomOec:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4AfEppeUU98:CE3QVNomOec:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4AfEppeUU98:CE3QVNomOec:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4AfEppeUU98:CE3QVNomOec:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4AfEppeUU98:CE3QVNomOec:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4AfEppeUU98:CE3QVNomOec:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4AfEppeUU98:CE3QVNomOec:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/4AfEppeUU98" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/natural-language-date-service-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/natural-language-date-service-update/</feedburner:origLink></item>
		<item>
		<title>Web excursions: April 20, 2012 — April 24, 2012</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/6FcAOgrVkbk/</link>
		<comments>http://brettterpstra.com/web-excursions-april-20-2012-april-24-2012/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 18:00:13 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[bookmarks]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3940</guid>
		<description><![CDATA[<p>Links of interest from April 20, 2012 through April 24, 2012: Putting the roar in file management – the new ForkLift 2.5The Path Finder 6 release piqued my interest, but Forklift has added a lot of cool new stuff, too. TotalFinder may still be my top choice, but if you’re looking for something more powerful, check this out. Searching nvALT&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-april-20-2012-april-24-2012/">Web excursions: April 20, 2012 — April 24, 2012</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Links of interest from <em>April 20, 2012 through April 24, 2012</em>:</strong></p>

<ul>
<li><strong><a href="http://feedproxy.google.com/~r/binarynights/fPGN/~3/cwuOBxWpwTk/putting-the-roar-in-file-management-the-new-forklift-2-5.html">Putting the roar in file management – the new ForkLift 2.5</a></strong><br />The Path Finder 6 release piqued my interest, but Forklift has added a lot of cool new stuff, too. TotalFinder may still be my top choice, but if you’re looking for something more powerful, check this out.</li>
<li><strong><a href="http://www.macsparky.com/blog/2012/4/23/searching-nvalt-with-launchbar.html">Searching nvALT with LaunchBar</a></strong><br />In case you’re not familiar with the url syntax added by Zachary and also found in nvALT (as nvalt://), it can be used for integration with LaunchBar, Quicksilver and Alfred. MacSparky gets the ball rolling here.</li>
<li><strong><a href="http://beckism.com/2012/04/learning-to-code/">Beckism.com: Learning to code</a></strong><br />I get this question a lot, and I never know what to say. From now on, I’m sending people here when they ask me how to get started with programming.</li>
<li><strong><a href="http://www.appsonthemove.com/blog/2012/03/trunk-notes-for-mac-an-update/">Trunk Notes for Mac</a></strong><br />I’m a little late seeing this, but it’s exciting. I’m ecstatic about the VoodooPad 5 release, but desktop wikis for Mac is an under-populated arena and I absolutely <em>love</em> the iOS version of Trunk Notes. (via <a href="https://twitter.com/#!/tombarys">@tombarys</a>)</li>
<li><strong><a href="http://kieranhealy.org//blog/archives/2012/04/18/visualizing-ios-text-editors/">Visualizing iOS Text Editors</a></strong><br />Kieran Healy takes <a href="http://brettterpstra.com/ios-text-editors">iTextEditors</a> to a new level with some R visualization.</li>
</ul>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/nvalt-2-1-in-the-wild/' rel='bookmark' title='nvALT 2.1 in the wild'>nvALT 2.1 in the wild</a></li>
<li><a href='http://brettterpstra.com/nvalt-2-2-public-beta/' rel='bookmark' title='nvALT 2.2 public beta'>nvALT 2.2 public beta</a></li>
<li><a href='http://brettterpstra.com/quick-tip-running-nvalt-after-a-notational-velocity-update/' rel='bookmark' title='Quick tip: running nvALT after a Notational Velocity update'>Quick tip: running nvALT after a Notational Velocity update</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-april-20-2012-april-24-2012/">Web excursions: April 20, 2012 — April 24, 2012</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6FcAOgrVkbk:cMqfSzWY33A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6FcAOgrVkbk:cMqfSzWY33A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6FcAOgrVkbk:cMqfSzWY33A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6FcAOgrVkbk:cMqfSzWY33A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6FcAOgrVkbk:cMqfSzWY33A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6FcAOgrVkbk:cMqfSzWY33A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6FcAOgrVkbk:cMqfSzWY33A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6FcAOgrVkbk:cMqfSzWY33A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6FcAOgrVkbk:cMqfSzWY33A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6FcAOgrVkbk:cMqfSzWY33A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/6FcAOgrVkbk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/web-excursions-april-20-2012-april-24-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/web-excursions-april-20-2012-april-24-2012/</feedburner:origLink></item>
		<item>
		<title>Spotlight tricks: search by category</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/Gw1OL6wmMN4/</link>
		<comments>http://brettterpstra.com/spotlight-tricks-search-by-category/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 13:51:56 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3953</guid>
		<description><![CDATA[<p>You know those categories the App Stores use to sort applications by their intended use? You can use those in Spotlight on iOS. Did you know you can do that on your Mac, too? I didn’t, and I didn’t find many references to this on the web, so I’ll share the discovery: I was thinking about Spotlight on my iPhone&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/spotlight-tricks-search-by-category/">Spotlight tricks: search by category</a></p>]]></description>
			<content:encoded><![CDATA[<p><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/04/categorymusic.jpg?9d7bd4" alt="Categorymusic" title="categorymusic.jpg" border="0" width="350" height="271" class="alignright shadow" />You know those categories the App Stores use to sort applications by their intended use? You can use those in Spotlight on iOS. Did you know you can do that on your Mac, too? I didn’t, and I didn’t find many references to this on the web, so I’ll share the discovery:</p>

<p>I was thinking about Spotlight on my iPhone and iPad, where I can just type a keyword and see apps that have nothing in their title about the search. I love that, because once you get enough apps it’s really easy to forget their names. I thought I’d try it on Lion.</p>

<p>First, I searched “productivity kind:app” in Spotlight on my Lion system… and it worked. All the apps built with recent versions of Xcode (which allows for categorization in info.plist) showed up, including non-Mac App Store apps. A little metadata inspection and I found a query syntax specifically for this purpose: <code>category:</code>. If you type “category:news” in Spotlight, you’ll get all of your News applications. You can save these as Smart Folders in Finder, too, and replicate Lion’s Launchpad to some extent.</p>

<p>Useful for forgetful people like me. I don’t know yet if it works anywhere other than Lion, but give it a shot.</p>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/fixing-spotlight-indexing-of-markdown-content/' rel='bookmark' title='Fixing Spotlight indexing of Markdown content'>Fixing Spotlight indexing of Markdown content</a></li>
<li><a href='http://brettterpstra.com/app-review-tunesque/' rel='bookmark' title='App Review: Tunesque'>App Review: Tunesque</a></li>
<li><a href='http://brettterpstra.com/app-review-launchpad-control/' rel='bookmark' title='App review: Launchpad-Control'>App review: Launchpad-Control</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/spotlight-tricks-search-by-category/">Spotlight tricks: search by category</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=Gw1OL6wmMN4:hnvRh4Jidw4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=Gw1OL6wmMN4:hnvRh4Jidw4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=Gw1OL6wmMN4:hnvRh4Jidw4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=Gw1OL6wmMN4:hnvRh4Jidw4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=Gw1OL6wmMN4:hnvRh4Jidw4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=Gw1OL6wmMN4:hnvRh4Jidw4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=Gw1OL6wmMN4:hnvRh4Jidw4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=Gw1OL6wmMN4:hnvRh4Jidw4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=Gw1OL6wmMN4:hnvRh4Jidw4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=Gw1OL6wmMN4:hnvRh4Jidw4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/Gw1OL6wmMN4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/spotlight-tricks-search-by-category/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/spotlight-tricks-search-by-category/</feedburner:origLink></item>
		<item>
		<title>New text navigation KeyBindings</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/6uTQtxv2fzo/</link>
		<comments>http://brettterpstra.com/new-text-navigation-keybindings/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 17:59:12 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[keybindings]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3941</guid>
		<description><![CDATA[<p>I haven’t had much time to write here this week thanks to some day job stress, major additions to Marked, writing for other venues, updating iTextEditors and various other fun. I had a brainstorm that resulted in new KeyBindings this morning, though, and thought it would be a good chance to get a post up before anyone thinks I’ve been&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/new-text-navigation-keybindings/">New text navigation KeyBindings</a></p>]]></description>
			<content:encoded><![CDATA[<p>I haven’t had much time to write here this week thanks to some day job stress, major additions to Marked, writing for other venues, updating iTextEditors and various other fun. I had a brainstorm that resulted in new KeyBindings this morning, though, and thought it would be a good chance to get a post up before anyone thinks I’ve been kidnapped.</p>

<p>In case you’ve missed my past keybinding craziness, you can catch up on the evolution <a href="http://brettterpstra.com/tag/keybindings/">in the tag archive</a>. Basically, OS X has a text system that lets you add custom commands and shortcuts that trigger sequences of the text commands you use every day (e.g. option-arrow word navigation, command-arrow to end of line, etc.).</p>

<p>My shorcut collection is pretty extensive (and beyond even my capability to memorize), but you can pick and choose what’s handy for you and create your own KeyBindings.dict file from it. The latest versions are always <a href="https://github.com/ttscoff/KeyBindings">up on Github</a>.</p>

<p><span id="more-3941"></span></p>

<h3>Paragraph navigation</h3>

<p>The new bindings are primarily for paragraph navigation. One of the features I’ve come to love in several code editing applications is the ability to jump to the first character in the line (after any whitespace). So I added Command-Option-Left/Right Arrow navigation to do just that (and handle last character before trailing whitespace as well). I also added one that jumps to the first alphanumeric character in the line, which is great when working with Markdown lists. The unordered ones, at least, because numbers will stop the movement and it has the same result as jump to first character. This is bound to Control-Command-Option-Left Arrow. You can use them from anywhere in the paragraph, even if you’re at the beginning of a line and intuitively think that left arrow will move backward… with these commands it will always jump to the first character even if it’s in front of the cursor.</p>

<p>Jumping to the last character is cool, but in most of my work any whitespace after that shouldn’t be there. Even when I’m just writing Markdown, I don’t want any extra space triggering a hard line break accidentally. I added one more command to the set for this purpose: Control-Option-Right Arrow jumps to the last character and deletes any space following it. In a similar vein, I updated the Full Outdent command (Control-Shift-Command-Left Arrow) to use the same technique, no longer deleting the first character if the line was already fully outdented.</p>

<p><code>~/Library/KeyBindings/DefaultKeyBinding.dict</code> code for all of the above:</p>

<pre><code>// Move to first Alphanumeric character of line (new)
  "@~^\UF702" = (moveToBeginningOfParagraph:,moveWordRight:, moveWordLeft:);
// Move to first non-whitespace character of line (new)
"@~\UF702" = (moveToBeginningOfParagraph:, insertText:, " ", moveLeft:, selectWord:, moveRight:, setMark:, moveToBeginningOfParagraph:, deleteForward:, swapWithMark:, moveLeft:);
// Select to first character of line with leading space (new)
"@~$\UF702" = (setMark:,moveToBeginningOfParagraph:,selectWord:, moveRight:, selectToMark:);
// Move to last non-whitespace character of paragraph (new)
"~@\UF703" = (moveToEndOfParagraph:, insertText:, " ", selectWord:, moveLeft:, setMark:, moveToEndOfParagraph:, deleteBackward:, swapWithMark:);
// Move to end of paragraph and delete trailing whitespace (new)
"^~\UF703" = (moveToEndOfParagraph:, insertText:, " ", selectWord:, deleteBackward:);
</code></pre>

<h3>Markdown line breaks</h3>

<p>Lastly, this somehow inspired me to add a couple of linebreak commands. In Markdown, adding two spaces at the end of a line causes it to be interpreted as a hard break instead of just concatenating the next line to it in a paragraph. I bound Control-Option-Return to add these spaces to the end of the current line–regardless of cursor position–and begin a new line.</p>

<p>The other line break command (Control-Command-Return) is Markdown again, this time adding two spaces and starting a new paragraph from the cursor position; basically just a way to add a quick hard line break in the middle of a paragraph. This binding conflicts with the Line Focus shortcut in Byword<sup id="fnref:cmdenter"><a href="#fn:cmdenter" rel="footnote">1</a></sup>, by the way, so if I get used to using it I’ll either change the binding in Byword (I never use line focus) or update my own bindings. Feel free to change it to whatever is intuitive to you, keeping in mind that control-enter and shift-enter may already be bound to behaviors in the Cocoa application you’re working in.</p>

<p>Here’s the code for these:</p>

<pre><code>// Add hard break for current line and insert newline below (new)
"^~\U000D" = (moveToEndOfParagraph:, insertText:, " ", selectWord:, deleteBackward:, insertText:, "  ", insertNewline:);
// Break line at cursor and add Markdown hard line break (new)
"^@\U000D" = (insertText:, "  ", insertNewline:);
</code></pre>

<h3>Cheatsheet</h3>

<p>In addition to the readme.md file in the repo, I’ve updated the <a href="http://brettterpstra.com/cheaters-customizable-cheat-sheet-system/">Cheaters</a> cheat sheet for the KeyBindings (because I regularly lose track of the shortcuts for lesser-used bindings). The new sheet is available <a href="https://gist.github.com/2465402">as a gist</a> or you can just right-click and <a href="https://raw.github.com/gist/2465402/7093bbd405dea7c1b424ecab76e92290725fab07/keybindings.html">download the raw file</a>. If you have a default install of Cheaters, you can just overwrite the old <code>keybindings.html</code> file with this one. The new keybindings are marked with “(new)” in green, which is mostly for my own good in locating them quickly<sup id="fnref:search"><a href="#fn:search" rel="footnote">2</a></sup>.</p>

<p>Grab the whole thing from the <a href="https://github.com/ttscoff/KeyBindings">KeyBindings repo on Github</a>.</p>

<p>I know, I’m a little crazy.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:cmdenter">
<p>Command-Enter–my TextMate-style binding for starting a new paragraph from anywhere within a line without breaking it–also conflicts with the full-screen keyboard shortcut. I overrode that one in Byword using System Preferences-&gt;Keyboard-&gt;Applications, but I also include Option-O and Option-Shift-O (Vim-like) in the default file for this reason. <a href="#fnref:cmdenter" rev="footnote">↩</a></p>
</li>

<li id="fn:search">
<p>I really want to add an in-page search to Cheaters. It would greatly improve its usefulness for me if I could just quickly type any part of what I’m looking for and jump to the info. I’ll work on that soon, I think. <a href="#fnref:search" rev="footnote">↩</a></p>
</li>

</ol>
</div>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/keybindings-new-improved-surround-commands/' rel='bookmark' title='KeyBindings: new, improved “surround” commands'>KeyBindings: new, improved “surround” commands</a></li>
<li><a href='http://brettterpstra.com/textmate-keybinding-tip/' rel='bookmark' title='A quick TextMate KeyBindings tip'>A quick TextMate KeyBindings tip</a></li>
<li><a href='http://brettterpstra.com/quick-tip-repeat-cocoa-text-actions-emacsvim-style/' rel='bookmark' title='Quick Tip: repeat Cocoa text actions, Emacs/Vim style'>Quick Tip: repeat Cocoa text actions, Emacs/Vim style</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/new-text-navigation-keybindings/">New text navigation KeyBindings</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6uTQtxv2fzo:zq6Aq47c-sc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6uTQtxv2fzo:zq6Aq47c-sc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6uTQtxv2fzo:zq6Aq47c-sc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6uTQtxv2fzo:zq6Aq47c-sc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6uTQtxv2fzo:zq6Aq47c-sc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6uTQtxv2fzo:zq6Aq47c-sc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6uTQtxv2fzo:zq6Aq47c-sc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6uTQtxv2fzo:zq6Aq47c-sc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=6uTQtxv2fzo:zq6Aq47c-sc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=6uTQtxv2fzo:zq6Aq47c-sc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/6uTQtxv2fzo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/new-text-navigation-keybindings/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/new-text-navigation-keybindings/</feedburner:origLink></item>
		<item>
		<title>Desktop countdown timer with GeekTool and AppleScript</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/bJJGIXWiUlU/</link>
		<comments>http://brettterpstra.com/desktop-countdown-timer-with-geektool-and-applescript/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 22:50:43 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[geeklet]]></category>
		<category><![CDATA[geektool]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3930</guid>
		<description><![CDATA[<p>I just realized today, quite belatedly, that you can control GeekTool on your Mac with AppleScript. I just wanted to play around with it a bit, so I threw together a countdown timer. This could be done much more elegantly, I’m sure; I just wanted to see what I could pull off quickly. The script takes an argument ending in&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/desktop-countdown-timer-with-geektool-and-applescript/">Desktop countdown timer with GeekTool and AppleScript</a></p>]]></description>
			<content:encoded><![CDATA[<p><img style=' display: block; margin-right: auto; margin-left: auto;'  src="http://cdn2.brettterpstra.com/wp-content/uploads/2012/04/DoSomethingInteresting.jpg?9d7bd4" alt="" title="DoSomethingInteresting" width="650" height="209" class="aligncenter size-full wp-image-3931" /></p>

<p>I just realized today, quite belatedly, that you can control <a href="http://itunes.apple.com/us/app/geektool/id456877552?mt=12">GeekTool</a> on your Mac with AppleScript. I just wanted to play around with it a bit, so I threw together a countdown timer. This could be done much more elegantly, I’m sure; I just wanted to see what I could pull off quickly.</p>

<p>The script takes an argument ending in an integer (interpreted as minutes), or a colon-separated hour/minutes argument. The last argument is always the time from <em>now</em>. For example <code>Pick up the kids 1:30</code> would set a timer for an hour and 30 minutes from now. <code>Feed the fish 10</code> would set a timer to go off in 10 minutes.</p>

<p>The script calculates the target time and then runs a loop every second to update a GeekTool shell geeklet with the countdown timer. Yes, you could probably do this more efficiently by making use of the Geeklet’s interval property, but… meh, I don’t have an excuse. I kind of thought of that after writing the script. It’s Sunday, lay off.</p>

<p>If you want to play with it, you need to have GeekTool installed and running. Create a Shell Geeklet by dragging the shell icon to your desktop from the GeekTool window. In the properties for the geeklet, name it “GeekTimer” and leave the timeout and refresh values at zero. Size it so that it’s the full width of your screen, set the paragraph justification to centered, pick a font/color and make it as large as you want.</p>

<p><span id="more-3930"></span></p>

<p>Now, save the AppleScript below as a file called <code>geektooltimer</code> somewhere on your drive. Wherever you put it, you’ll need to adjust any commands that call it to match your own path.</p>

<h3>The AppleScript</h3>

<pre><code>#!/usr/bin/osascript

on padNum(_num)
    if _num &lt; 10 then set _num to "0" &amp; _num
    return _num
end padNum

on run argv
    set message to item 1 of argv

    tell application "GeekTool Helper" to set command of shell geeklet named "GeekTimer" to "echo"

    set {astid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, " "}
    set _task to text items 1 thru ((count of text items of message) - 1) of message as string
    set _min to last item of text items of message
    if (offset of ":" in _min) &gt; 0 then
        set AppleScript's text item delimiters to ":"
        set _min to (item 1 of text items of _min) * 60 + (item 2 of text items of _min)
    end if
    set AppleScript's text item delimiters to astid

    set _date to current date
    set _target to (_date + (_min * 60))
    repeat
        set timeLeft to (_target - (current date))
        set minLeft to round timeLeft / 60 rounding down
        if minLeft &gt; 60 then
            set minLeft to (round minLeft / 60 rounding down) &amp; ":" &amp; padNum(minLeft mod 60)
        else
            set minLeft to padNum(minLeft)
        end if
        set secLeft to padNum(timeLeft mod 60)
        tell application "GeekTool Helper"
            set command of shell geeklet named "GeekTimer" to "echo \"" &amp; _task &amp; " in " &amp; minLeft &amp; ":" &amp; secLeft &amp; "\""

            if (current date) ≥ _target then
                do shell script "/usr/bin/afplay /System/Library/Sounds/Glass.aiff"
                set command of shell geeklet named "GeekTimer" to "echo \"Time to " &amp; _task &amp; "\""
                return "Time to " &amp; _task
            end if
        end tell
        delay 1
    end repeat
end run
</code></pre>

<p>Note that the hashbang at the beginning will let you make it executable and call it without <code>osascript</code>, but I used <code>osascript</code> in the methods below just to be safe.</p>

<p>When the timer is up, it will use <code>afplay</code> to ring a bell and set the final text of the Geeklet to your reminder title. I’m pretty sure <code>afplay</code> is included in a standard install, but if you run into issues just remove that line or substitute your own alert method.</p>

<h3>As a Bash function</h3>

<p>I’m mostly calling this script from the command line. I added a function to <code>~/.bash_profile</code> that looks like this:</p>

<pre><code>## GeekTool Timer
# `gtt Pick up the kids 1:30` sets a timer for 1 hour and 30 minutes
# `gtt Feed the fish 10` will set a timer for 10 minutes
# Running `gtt` with no arguments will clear the running timer and exit
gtt() {
    # if a timer is running, kill it
    pid=$(ps ax | grep -E "osascript .*/geektooltimer" | grep -v grep | awk '{print $1}')
    [[ $pid ]] &amp;&amp; kill $pid
    # Clear any existing text
    /usr/bin/osascript -e 'tell application "GeekTool Helper" to set command of shell geeklet named "GeekTimer" to "echo"'
    # if there are arguments, run the script with them. 
    if [[ $# -gt 0 ]]; then
        /usr/bin/osascript ~/scripts/geektooltimer "$*" 2&gt;&amp;1 &amp;
    fi
}
</code></pre>

<p>Drop that into your <code>~/.bash_profile</code> and run <code>source ~/.bash_profile</code>. Now, in combination with the previous AppleScript, you have a <code>gtt</code> command for setting timers on your desktop from Terminal. Be sure to modify the path in the last command (the one that calls <code>geektooltimer</code>) to match the location of the AppleScript you created.</p>

<p>The function first checks to see if a timer is already running, and if so, kills it. Then it clears any text currently in the “GeekTimer” Geeklet, and then runs the AppleScript and passes all command line arguments as one quoted string. The <code>geektoolreminder</code> script handles parsing out the last number and turns the preceding text into the reminder title. Running just <code>gtt</code> without any arguments will clear the current timer.</p>

<p>There’s not a lot of error checking involved, so incorrect parameters will throw errors on the command line. Feel free to spiff it up.</p>

<h3>As a Launchbar (or Alfred or whatever) action</h3>

<p>You can also call the script from <a href="http://www.obdev.at/products/launchbar/index.html">Launchbar</a> by creating an action like:</p>

<pre><code>on handle_string(message)
    do shell script "/Users/ttscoff/scripts/geektooltimer '" &amp; message &amp; "' &amp;"
end handle_string
</code></pre>

<p>Name the action “GeekTool Reminder” (save it in ~/Library/Application Support/Launchbar/Actions/GeekTool Reminder.scpt). You’ll call it up by popping up Launchbar and typing “GTR” or similar, then pressing space. Enter the text of the reminder and end it with a minute or hour:minute designation. Minor catch: execute it with Option-Return to run it in the background, otherwise Launchbar will freeze until the timer is up.</p>

<p>In Alfred you can probably make a straight shell script that runs in the background automatically, so it would be more in line with the Bash function above than with the Launchbar AppleScript method.</p>

<hr />

<p>What I’m hoping is that this example will get a ball rolling, and someone will see a little bit more exciting potential in it than I came up with on a lazy Sunday. Got a cool AppleScript (or even an idea) for GeekTool? I’d love to hear about it!</p>
<p>Related posts:<ol>
<li><a href='http://brettterpstra.com/geeklet-1-minute-average-cpu-load/' rel='bookmark' title='Geeklet: 1-minute average CPU load'>Geeklet: 1-minute average CPU load</a></li>
<li><a href='http://brettterpstra.com/imagemagick-and-geektool-or-nerdtool/' rel='bookmark' title='ImageMagick and GeekTool (or NerdTool)'>ImageMagick and GeekTool (or NerdTool)</a></li>
<li><a href='http://brettterpstra.com/geeklets-weather-and-forecast/' rel='bookmark' title='Geeklets: weather and forecast'>Geeklets: weather and forecast</a></li>
</ol></p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/desktop-countdown-timer-with-geektool-and-applescript/">Desktop countdown timer with GeekTool and AppleScript</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=bJJGIXWiUlU:1w4VcPiwl8A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=bJJGIXWiUlU:1w4VcPiwl8A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=bJJGIXWiUlU:1w4VcPiwl8A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=bJJGIXWiUlU:1w4VcPiwl8A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=bJJGIXWiUlU:1w4VcPiwl8A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=bJJGIXWiUlU:1w4VcPiwl8A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=bJJGIXWiUlU:1w4VcPiwl8A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=bJJGIXWiUlU:1w4VcPiwl8A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=bJJGIXWiUlU:1w4VcPiwl8A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=bJJGIXWiUlU:1w4VcPiwl8A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/bJJGIXWiUlU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/desktop-countdown-timer-with-geektool-and-applescript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/desktop-countdown-timer-with-geektool-and-applescript/</feedburner:origLink></item>
		<item>
		<title>Web excursions: April 2, 2012 — April 10, 2012</title>
		<link>http://feedproxy.google.com/~r/BrettTerpstra/~3/4TZgStFX61Y/</link>
		<comments>http://brettterpstra.com/web-excursions-april-2-2012-april-10-2012/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 17:00:10 +0000</pubDate>
		<dc:creator>Brett</dc:creator>
				<category><![CDATA[Bookmarks]]></category>
		<category><![CDATA[bookmarks]]></category>

		<guid isPermaLink="false">http://brettterpstra.com/?p=3878</guid>
		<description><![CDATA[<p>Links of interest from April 2, 2012 through April 10, 2012: Photoshop tutorial: avoiding gradient banding with 16 bit color modeVia @kartooner, a great breakdown of Photoshop gradient banding, complete with a solution. Whats the Deal With :Target in CSS? &#124; Design ShackNice breakdown of the :target psuedo-class in CSS3. It’s really fun, and if you haven’t already played with&#8230;</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-april-2-2012-april-10-2012/">Web excursions: April 2, 2012 — April 10, 2012</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Links of interest from <em>April 2, 2012 through April 10, 2012</em>:</strong></p>

<ul>
<li><strong><a href="http://trojankitten.posterous.com/suddenly-a-photoshop-tutorial-avoiding-gradie">Photoshop tutorial: avoiding gradient banding with 16 bit color mode</a></strong><br />Via @kartooner, a great breakdown of Photoshop gradient banding, complete with a solution.</li>
<li><strong><a href="http://designshack.net/articles/css/targetcss/">Whats the Deal With :Target in CSS? | Design Shack</a></strong><br />Nice breakdown of the :target psuedo-class in CSS3. It’s really fun, and if you haven’t already played with it check this out.</li>
<li><strong><a href="http://weblog.bignerdranch.com/?p=398">Objective-C Literals, Part 1</a></strong><br />These new literals are really cool, if you haven’t already seen them.</li>
<li><strong><a href="https://github.com/blog/1081-instantly-beautiful-project-pages">Instantly Beautiful Project Pages</a></strong><br />So cool.</li>
<li><strong><a href="https://github.com/victorporof/Sublime-HTMLPrettify">HTMLPrettify</a></strong><br />A really handy HTML/JS/CSS prettifier plugin for Sublime Text 2.</li>
</ul>
<p>No related posts.</p><p>Originally posted on <a href="http://brettterpstra.com" title="BrettTerpstra.com">BrettTerpstra.com</a> at <a href="http://brettterpstra.com/web-excursions-april-2-2012-april-10-2012/">Web excursions: April 2, 2012 — April 10, 2012</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4TZgStFX61Y:aPr1NSTiO6E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4TZgStFX61Y:aPr1NSTiO6E:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4TZgStFX61Y:aPr1NSTiO6E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4TZgStFX61Y:aPr1NSTiO6E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4TZgStFX61Y:aPr1NSTiO6E:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4TZgStFX61Y:aPr1NSTiO6E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4TZgStFX61Y:aPr1NSTiO6E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4TZgStFX61Y:aPr1NSTiO6E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=4TZgStFX61Y:aPr1NSTiO6E:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=4TZgStFX61Y:aPr1NSTiO6E:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/4TZgStFX61Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brettterpstra.com/web-excursions-april-2-2012-april-10-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://brettterpstra.com/web-excursions-april-2-2012-april-10-2012/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching 34/165 queries in 0.522 seconds using xcache
Object Caching 4085/4267 objects using xcache
Content Delivery Network via cdn2.brettterpstra.com

Served from: brettterpstra.com @ 2012-05-21 07:30:06 -->

