<?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>Wed, 08 Sep 2010 00:00:00 PDT</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <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/" /><feedburner:emailServiceId>BrettTerpstra</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>Links for 2010-09-07 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/6EyFpbB3nMs/circlesixdesign</link><pubDate>Wed, 08 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-07</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://thinkvitamin.com/dev/9-magic-methods-for-php/"&gt;Think Vitamin &amp;raquo; 9 Magic Methods for PHP&lt;/a&gt;&lt;br/&gt;
The “magic” methods are ones with special names, starting with two underscores, which denote methods which will be triggered in response to particular PHP events.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.artzstudio.com/2009/04/jquery-performance-rules/"&gt;jQuery Performance Rules - Best Practices for Speeding Up jQuery&lt;/a&gt;&lt;br/&gt;
Once upon a time, all we needed to worry about was reducing Bytes and Requests and playing around with load order to make things faster. Nowadays, we are increasingly impacting one more major component in performance – CPU utilization. Using jQuery and other frameworks that make selecting nodes and DOM manipulation easy can have adverse affects if you’re not careful and follow some simple practices for reducing the work the browser has to do.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.keyvan.net/2010/08/php-readability/"&gt;PHP Port of Arc90&amp;prime;s Readability&lt;/a&gt;&lt;br/&gt;
Last year I ported Arc90′s Readability to use in the Five Filters project. It’s been over a year now and Readability has improved a lot — thanks to Chris Dary and the rest of the team at Arc90.  As part of an update to the Full-Text RSS service I started porting a more recent version (1.6.2) to PHP and the code is now online:&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/6EyFpbB3nMs" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-07</feedburner:origLink></item><item><title>Links for 2010-09-06 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/F1pExFEcjic/circlesixdesign</link><pubDate>Tue, 07 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-06</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ustream.tv/recorded/4804577"&gt;TextMate + Zen-Coding -complete-, Recorded on 2/18/10 cipher on USTREAM. The Web&lt;/a&gt;&lt;br/&gt;
TextMate + Zen-Coding tutorial video. Very nice.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/F1pExFEcjic" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-06</feedburner:origLink></item><item><title>Links for 2010-09-05 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/hjDNDgjNMHo/circlesixdesign</link><pubDate>Mon, 06 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-05</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.draftboardapp.com/"&gt;Draftboard - Collaboration tool made for designers by designers&lt;/a&gt;&lt;br/&gt;
Draftboard is a collaboration tool made by designers for designers. Say goodbye to unnecessary emails as Draftboard helps you streamline the process of approving mockups between your client and your team.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/hjDNDgjNMHo" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-05</feedburner:origLink></item><item><title>Links for 2010-09-04 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/ioC6egu-y2E/circlesixdesign</link><pubDate>Sun, 05 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-04</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://github.com/publicclass/s3upload"&gt;publicclass's s3upload at master - GitHub&lt;/a&gt;&lt;br/&gt;
A jQuery plugin for direct upload to an Amazon S3 bucket.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434"&gt;Amazon Web Services Developer Community : Browser Uploads to S3 using HTML POST Forms&lt;/a&gt;&lt;br/&gt;
In this article, I will demonstrate how to build simple S3 POST forms. I will assume that you have already signed up for the S3 service, and that you have an S3 client program for creating buckets and viewing files in your account. Before you proceed, create your own bucket to store uploaded files — in the examples below I will use a bucket named s3-bucket.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/ioC6egu-y2E" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-04</feedburner:origLink></item><item><title>A TextMate Command for fast abbr tags</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/VDMnVAtJ0UY/</link> <comments>http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/#comments</comments> <pubDate>Sat, 04 Sep 2010 22:45:08 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[html]]></category> <category><![CDATA[html5]]></category> <category><![CDATA[textmate]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=935</guid> <description><![CDATA[I'm on a roll with stupid scripts today, but it's Saturday... so, whatever. This is a quick command for creating semantic &#60;abbr&#62; tags in TextMate. It's short, but pretty smart: if your text is a mix of upper and lowercase letters, it will take the uppercase letters, in order, and create an acronym from them and insert an &#60;abbr&#62; tag,&#8230;<ul><li><a href="http://brettterpstra.com/placeholder-image-textmate-snippet/" rel="bookmark">Placeholder image TextMate Snippet</a></li><li><a href="http://brettterpstra.com/instant-placeholder-images-with-textexpander/" rel="bookmark">Instant placeholder images with TextExpander</a></li><li><a href="http://brettterpstra.com/textmate-drag-command-for-base64-encoding-images/" rel="bookmark">TextMate drag command for Base64 encoding images</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><a href="http://cdn.brettterpstra.com/wp-content/uploads/2010/09/AbbreviateCommandInBundleEditor.jpg" rel="lightbox[935]"><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/09/AbbreviateCommandInBundleEditor-300x190.jpg" alt="" title="AbbreviateCommandInBundleEditor" width="300" height="190" class="alignright size-medium wp-image-937" /></a>I'm on a roll with stupid scripts today, but it's Saturday... so, whatever. This is a quick command for creating semantic &lt;abbr&gt; tags in TextMate. It's short, but pretty smart: if your text is a mix of upper and lowercase letters, it will take the uppercase letters, in order, and create an acronym from them and insert an &lt;abbr&gt; tag, using the original input as the title attribute. If it's one of a couple other scenarios, it will give you the &lt;abbr&gt; tag setup with your cursor in a logical place to fill in the blanks.</p><p>In case you're wondering why I'm using the wrong tag for my acronyms, the HTML5 spec pretty much does away with the &lt;acronym&gt; tag, and &lt;abbr&gt; appears to be the new, all-purpose solution. It's not perfectly semantic, but there doesn't seem to be an ideal solution for acronyms in the spec. This command is really geared toward using the &lt;abbr&gt; for acronyms, but you could easily alter it to insert an &lt;acronym&gt; tag (especially if your doctype is anything other than 'html'), and it works pretty well for just quickly creating an actual abbreviation, too. It just doesn't try to guess how to abbreviate anything other than apparent acronyms, but it gives you Snippet tab stops for quick manual editing. If you run it with no selection, it will create a blank &lt;abbr&gt; tag you can tab through and fill in.</p><p><span id="more-935"></span> To use the command, just create a new TextMate Command in the Bundle Editor, preferably in your own personal bundle (create a new bundle with your name, if you need to). Set the Input to "Selected Text" or "Word", and the output to Insert as Snippet. Assign a key equivalent if you like. Since it's outputting HTML, it probably makes sense to set the Scope Selector field to "text.html", but who knows, you may prefer to use it outside of normal HTML source documents. Once it's set up, add the code below.</p><div markdown=0><pre><code>
#!/usr/bin/env ruby -rjcode -Ku

input = STDIN.read

if input =~ /^[A-Z]+$/
  print %Q{&lt;abbr title=&quot;$1&quot;&gt;#{input}&lt;/abbr&gt;$0}
else
  acronym = input.scan(/[A-Z]/).join()
  if acronym.length &lt; 2
    print %Q{&lt;abbr title=&quot;${1:#{input}}&quot;&gt;$2&lt;/abbr&gt;$0}
  else
    print %Q{&lt;abbr title=&quot;#{input}&quot;&gt;${1:#{acronym}}&lt;/abbr&gt;$0}
  end
end
</code></pre></div><p>It's probably not useful on a frequent enough basis be memorable in cases where you'd actually need it, but there it is. It's actually a small part of a larger experiment I played with today. I'll probably post about it this weekend, as it's useful not just with &lt;abbr&gt; tags, but with any tag with a descriptive attribute. Just a few lines of jQuery which can make the <abbr title="Products of Totally Wasted Weekends">PTWW</abbr> be more immediately useful, accessible and, well, look cooler.</p><p>And yes, I did just make that acronym markup with the above TextMate Command. I feel like a salesman who sells people things which seem perfect for situations they'll never find themselves in.</p><ul><li><a href="http://brettterpstra.com/placeholder-image-textmate-snippet/" rel="bookmark">Placeholder image TextMate Snippet</a></li><li><a href="http://brettterpstra.com/instant-placeholder-images-with-textexpander/" rel="bookmark">Instant placeholder images with TextExpander</a></li><li><a href="http://brettterpstra.com/textmate-drag-command-for-base64-encoding-images/" rel="bookmark">TextMate drag command for Base64 encoding images</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=VDMnVAtJ0UY:bwra3AALg_4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=VDMnVAtJ0UY:bwra3AALg_4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=VDMnVAtJ0UY:bwra3AALg_4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=VDMnVAtJ0UY:bwra3AALg_4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=VDMnVAtJ0UY:bwra3AALg_4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=VDMnVAtJ0UY:bwra3AALg_4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=VDMnVAtJ0UY:bwra3AALg_4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=VDMnVAtJ0UY:bwra3AALg_4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=VDMnVAtJ0UY:bwra3AALg_4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=VDMnVAtJ0UY:bwra3AALg_4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/VDMnVAtJ0UY" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/</feedburner:origLink></item> <item><title>A Quick VoodooPad Script Plugin — Go To Today</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/rIzp9H5CZVk/</link> <comments>http://brettterpstra.com/a-quick-voodoopad-script-plugin-go-to-today/#comments</comments> <pubDate>Sat, 04 Sep 2010 22:02:29 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[scripting]]></category> <category><![CDATA[voodoopad]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=933</guid> <description><![CDATA[This script may not be of use to many people, but I'm finding it so handy today that I figured I'd post it in the hopes that someone who needs it finds it. It's really only useful to people who use VoodooPad to keep a journal or log with a page for each date, and all it does is jump&#8230;<ul><li><a href="http://brettterpstra.com/three-things-i-discovered-today/" rel="bookmark">Three things I discovered today</a></li><li><a href="http://brettterpstra.com/a-few-scripts-for-taskpaper-users/" rel="bookmark">A few scripts for TaskPaper users</a></li><li><a href="http://brettterpstra.com/saving-safari-browsing-sessions-to-evernote/" rel="bookmark">Saving Safari browsing sessions to Evernote</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/09/GoToTodayScreenShot.jpg" alt="VoodooPad Scratchpad Screenshot" border="0" width="317" height="211" class="alignright" /> This script may not be of use to many people, but I'm finding it so handy today that I figured I'd post it in the hopes that someone who needs it finds it. It's really only useful to people who use <a href="http://voodoopad.com/">VoodooPad</a> to keep a journal or log with a page for each date, and all it does is jump to the current day's page. Simple, but useful.</p><p>I'm using Ian Beck's <a href="http://tagamac.com/2009/09/scratchpad_part2/">VoodooPad Scratchpad</a> scripts, and have been for over a year. I won't go into detail on the inner workings (I'm hoping to post a little more about them on TUAW soon), but the end result is a very well-connected log of what I've done, what I've found and what I've learned each day. Navigating them isn't difficult, but once you've run it for a year or more, you end up with a lot of very similarly named pages (2010-09-xx, etc.). I'm sure this is the case for anyone who's logging or journaling in VoodooPad, and if you've ever scrolled for more than a few seconds just to find the page for today, here's your (&uuml;ber-simple) answer.</p><div markdown=0><pre><code>
--[[
VPLanguage = lua
VPScriptMenuTitle = Go to Today
VPShortcutKey = g
VPShortcutMask = command control
VPEndConfig
--]]

document = windowController:document()
pageName = os.date(&quot;%Y-%m-%d&quot;, os.time())
document:openPageWithTitle(pageName)
</code></pre></div><p>You'll want to edit the line with os.date() in it to match the format of your date-named pages. Then just save it as gototoday.lua in your Script Plugins folder (~/Library/Application Support/VoodooPad/Script Plugins). Restart VoodoPad and the shortcut Control-Command-G will jump to the current day. It's not smart, though, and if you don't have a page for the current day, it's going to make one. That could be good or bad, depending on your system.</p><p>I also wrote a script page within my scratchpad (called Today) that jumps to the current day instead of itself when you open it. It seems like one of those things that I just did to see if I could, and not worth troubling the internets with. If you're interested in it, ping me.</p><ul><li><a href="http://brettterpstra.com/three-things-i-discovered-today/" rel="bookmark">Three things I discovered today</a></li><li><a href="http://brettterpstra.com/a-few-scripts-for-taskpaper-users/" rel="bookmark">A few scripts for TaskPaper users</a></li><li><a href="http://brettterpstra.com/saving-safari-browsing-sessions-to-evernote/" rel="bookmark">Saving Safari browsing sessions to Evernote</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=rIzp9H5CZVk:xgXQBlVInZs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=rIzp9H5CZVk:xgXQBlVInZs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=rIzp9H5CZVk:xgXQBlVInZs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=rIzp9H5CZVk:xgXQBlVInZs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=rIzp9H5CZVk:xgXQBlVInZs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=rIzp9H5CZVk:xgXQBlVInZs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=rIzp9H5CZVk:xgXQBlVInZs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=rIzp9H5CZVk:xgXQBlVInZs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=rIzp9H5CZVk:xgXQBlVInZs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=rIzp9H5CZVk:xgXQBlVInZs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/rIzp9H5CZVk" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/a-quick-voodoopad-script-plugin-go-to-today/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/a-quick-voodoopad-script-plugin-go-to-today/</feedburner:origLink></item> <item><title>Links for 2010-09-03 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/3fduPOwnrOE/circlesixdesign</link><pubDate>Sat, 04 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-03</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://undesigned.org.za/2007/10/22/amazon-s3-php-class"&gt;Amazon S3 PHP Class - Undesigned&lt;/a&gt;&lt;br/&gt;
This class is a standalone Amazon S3 REST implementation for PHP 5.2.x (using CURL), that supports large file uploads and doesn&amp;#039;t require PEAR.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sxi.sabrextreme.com/phpini"&gt;DreamHost Scripts and Tips - DreamHost PHP.INI installer&lt;/a&gt;&lt;br/&gt;
Script that gives you instant access to an editable php.ini on DreamHost. Too bad you still can&amp;#039;t control max_post or max_upload for shit.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://alternativeto.net/api"&gt;API Documentation - AlternativeTo.net&lt;/a&gt;&lt;br/&gt;
API to get an application and it’s alternatives (Mac, Windows, Linux, Online, Mobile, iOS)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hypem.com/"&gt;Latest Songs From MP3 &amp;amp; Music Blogs / The Hype Machine&lt;/a&gt;&lt;br/&gt;
Every day, thousands of people around the world write about music they love — and it all ends up here.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hongkiat.com/blog/website-speed-and-performance-check-tools/"&gt;Website Speed and Performance Checking Tools&lt;/a&gt;&lt;br/&gt;
It is essential to identify what builds up your website before you jump into the codes trying to speed things up because it cannot be done without knowing the culprits that are slowing down your website. This article compile a collection of useful web service and tools that will help you to diagnose and analyze you site, allowing you to understand your site better.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/3fduPOwnrOE" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-03</feedburner:origLink></item><item><title>Links for 2010-09-02 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/bby78hZWcxY/circlesixdesign</link><pubDate>Fri, 03 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-02</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ampercent.com/dropbox-uploader-allow-users-upload-files-dropbox-account/"&gt;Allow Anyone To Upload Files To a Folder in Your Dropbox Account&lt;/a&gt;&lt;br/&gt;
create this simple browser uploader for Dropbox which will allow anyone to upload files to a particular folder in your Dropbox account. All you need is a web server that supports php.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/bby78hZWcxY" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-02</feedburner:origLink></item><item><title>gleeBox gets prettier highlights</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/dLPb5WtENZs/</link> <comments>http://brettterpstra.com/gleebox-gets-prettier-highlights/#comments</comments> <pubDate>Thu, 02 Sep 2010 15:46:38 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[gleebox]]></category> <category><![CDATA[safari]]></category> <category><![CDATA[safari 5]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=928</guid> <description><![CDATA[Primer: gleeBox is an amazing extension for Safari (and Chrome and Firefox) that gives you keyboard navigation of links, bookmarks, bookmarklets and more. If you haven't tried it out, you should. A while back I wrote about fixing the highlights in gleeBox. I found them just ugly enough to require measures to soften the colors and handle padding a little&#8230;<ul><li><a href="http://brettterpstra.com/fixing-gleebox/" rel="bookmark">Fixing Gleebox</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-bugs/" rel="bookmark">Instapaper Beyond Bugs (fixed)</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><a href="http://cdn.brettterpstra.com/wp-content/uploads/2010/09/newgleeboxhighlights.jpg" rel="lightbox[928]"><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/09/newgleeboxhighlights-300x56.jpg" alt="New gleeBox highlights screenshot" title="New gleeBox highlights" width="300" height="56" class="alignright size-medium wp-image-929" /></a></p><p><em>Primer:</em> <a href="http://thegleebox.com/">gleeBox</a> is an amazing extension for Safari (and Chrome and Firefox) that gives you keyboard navigation of links, bookmarks, bookmarklets and more. If you haven't tried it out, you should.</p><p>A while back I wrote about <a href="http://brettterpstra.com/fixing-gleebox/">fixing the highlights in gleeBox</a>. I found them just ugly enough to require measures to soften the colors and handle padding a little differently. Well, color me tickled, the latest update that just showed up in my extensions panel brings, <a href="http://thegleebox.com/releases.html">among other things</a>, prettier highlights. Prettier than my makeshift ones, too. Just thought I'd share...</p><ul><li><a href="http://brettterpstra.com/fixing-gleebox/" rel="bookmark">Fixing Gleebox</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-bugs/" rel="bookmark">Instapaper Beyond Bugs (fixed)</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=dLPb5WtENZs:rmgvfpNTgwU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=dLPb5WtENZs:rmgvfpNTgwU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=dLPb5WtENZs:rmgvfpNTgwU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=dLPb5WtENZs:rmgvfpNTgwU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=dLPb5WtENZs:rmgvfpNTgwU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=dLPb5WtENZs:rmgvfpNTgwU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=dLPb5WtENZs:rmgvfpNTgwU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=dLPb5WtENZs:rmgvfpNTgwU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=dLPb5WtENZs:rmgvfpNTgwU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=dLPb5WtENZs:rmgvfpNTgwU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/dLPb5WtENZs" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/gleebox-gets-prettier-highlights/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/gleebox-gets-prettier-highlights/</feedburner:origLink></item> <item><title>Links for 2010-09-01 [del.icio.us]</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/PLJd9PZEpx8/circlesixdesign</link><pubDate>Thu, 02 Sep 2010 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/circlesixdesign#2010-09-01</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://davidwalsh.name/css-enhancements-user-experience"&gt;7 Quick CSS Enhancements for Better User Experience&lt;/a&gt;&lt;br/&gt;
The beauty in CSS is that a tiny directive can make a huge difference in how the page displays. Here are seven quick CSS snippets that will give your website more &amp;quot;pop&amp;quot; and make your user&amp;#039;s experience more functional and enjoyable.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/PLJd9PZEpx8" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/circlesixdesign#2010-09-01</feedburner:origLink></item><item><title>Instapaper Beyond microsite</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/45hB33oQPfg/</link> <comments>http://brettterpstra.com/instapaper-beyond-microsite/#comments</comments> <pubDate>Sat, 28 Aug 2010 17:12:28 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[instapaper]]></category> <category><![CDATA[instapaper beyond]]></category> <category><![CDATA[safari]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=923</guid> <description><![CDATA[Due in part to the inclusion of Instapaper Beyond in Apple’s Safari Extensions Gallery, I’ve put together a dedicated “microsite” for Instapaper Beyond. You can check it out at http://brettterpstra.com/instapaperbeyond. It uses the same navigation as Instapaper Beyond (mmm, clever), so pressing “h” will bring down a menu of the main commands available in the extension, and pressing the letter&#8230;<ul><li><a href="http://brettterpstra.com/minor-update-to-instapaper-beyond-1-4/" rel="bookmark">Minor update to Instapaper Beyond (1.4)</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-for-safari/" rel="bookmark">Instapaper Beyond for Safari!</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><a href="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/InstapaperBeyondMicrosite.jpg" rel="lightbox[923]"><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/InstapaperBeyondMicrosite-300x226.jpg" alt="Screenshot of the Instapaper Beyond microsite" title="Instapaper Beyond Microsite Screenshot" width="300" height="226" class="alignright size-medium wp-image-925" /></a>Due in part to the inclusion of Instapaper Beyond in Apple’s <a href="http://extensions.apple.com/">Safari Extensions Gallery</a>, I’ve put together a dedicated “microsite” for Instapaper Beyond. You can check it out at <a href="http://brettterpstra.com/instapaperbeyond">http://brettterpstra.com/instapaperbeyond</a>.</p><p>It uses the same navigation as Instapaper Beyond (mmm, clever), so pressing “h” will bring down a menu of the main commands available in the extension, and pressing the letter for a command (or clicking it in the menu) will provide more information about that command. In some cases, a short screencast is available, and I’ll put more up when I have a chance.</p><p>The page takes advantage of the fact that it’s pretty much exclusive to Safari 5, using HTML5 video tags and webkit transitions for much of the interface. That, and a little jQuery. The video player is a custom-styled <code>&lt;video&gt;</code> tag, which was something I’ve been meaning to figure out how to pull off.</p><p>I hope IB users <a href="http://brettterpstra.com/instapaperbeyond">enjoy the page</a>, and I welcome comments and criticisms!</p><ul><li><a href="http://brettterpstra.com/minor-update-to-instapaper-beyond-1-4/" rel="bookmark">Minor update to Instapaper Beyond (1.4)</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-for-safari/" rel="bookmark">Instapaper Beyond for Safari!</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=45hB33oQPfg:3r-zAXp2QbM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=45hB33oQPfg:3r-zAXp2QbM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=45hB33oQPfg:3r-zAXp2QbM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=45hB33oQPfg:3r-zAXp2QbM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=45hB33oQPfg:3r-zAXp2QbM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=45hB33oQPfg:3r-zAXp2QbM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=45hB33oQPfg:3r-zAXp2QbM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=45hB33oQPfg:3r-zAXp2QbM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=45hB33oQPfg:3r-zAXp2QbM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=45hB33oQPfg:3r-zAXp2QbM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/45hB33oQPfg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/instapaper-beyond-microsite/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/instapaper-beyond-microsite/</feedburner:origLink></item> <item><title>Instapaper Beyond in the Safari Extensions Gallery</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/tmG4lCXlEV0/</link> <comments>http://brettterpstra.com/instapaper-beyond-in-the-safari-extensions-gallery/#comments</comments> <pubDate>Wed, 25 Aug 2010 01:07:24 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[instapaper]]></category> <category><![CDATA[instapaper beyond]]></category> <category><![CDATA[safari]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=919</guid> <description><![CDATA[: http://extensions.apple.com/ I just got word from Apple that Instapaper Beyond is being added to the [Safari Extensions Gallery]! That's great news, for the most part... it means that I'll have to run all future updates through Apple before releasing them, but I assume that will just be a minor formality in the grand scheme of things. I have a&#8230;<ul><li><a href="http://brettterpstra.com/instapaper-beyond-microsite/" rel="bookmark">Instapaper Beyond microsite</a></li><li><a href="http://brettterpstra.com/new-safari-extensions-give-good-source/" rel="bookmark">New Safari Extensions give good source</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-bugs/" rel="bookmark">Instapaper Beyond Bugs (fixed)</a></li></ul> ]]></description> <content:encoded><![CDATA[<p>I just got word from Apple that <a href="http://brettterpstra.com/instapaper-beyond-for-safari/">Instapaper Beyond</a> is being added to the <a href="http://extensions.apple.com/">Safari Extensions Gallery</a>! That's great news, for the most part... it means that I'll have to run all future updates through Apple before releasing them, but I assume that will just be a minor formality in the grand scheme of things.</p><p>I have a few new features completed and ready to launch, actually, but I'll save them up for a bigger update. I'm also going to try to find time to build out a dedicated project page, and maybe even add a screencast. I do love making screencasts.</p><p>I'll be keeping an eye on the gallery to see when it shows up. Follow <a href="http://twitter.com/ttscoff">@ttscoff</a> on Twitter if you're curious, I'm sure I'll have an excited tweet or two when it does.</p><ul><li><a href="http://brettterpstra.com/instapaper-beyond-microsite/" rel="bookmark">Instapaper Beyond microsite</a></li><li><a href="http://brettterpstra.com/new-safari-extensions-give-good-source/" rel="bookmark">New Safari Extensions give good source</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-bugs/" rel="bookmark">Instapaper Beyond Bugs (fixed)</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=tmG4lCXlEV0:w5m2ONIgo9Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=tmG4lCXlEV0:w5m2ONIgo9Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=tmG4lCXlEV0:w5m2ONIgo9Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=tmG4lCXlEV0:w5m2ONIgo9Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=tmG4lCXlEV0:w5m2ONIgo9Q:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=tmG4lCXlEV0:w5m2ONIgo9Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=tmG4lCXlEV0:w5m2ONIgo9Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=tmG4lCXlEV0:w5m2ONIgo9Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=tmG4lCXlEV0:w5m2ONIgo9Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=tmG4lCXlEV0:w5m2ONIgo9Q:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/tmG4lCXlEV0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/instapaper-beyond-in-the-safari-extensions-gallery/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/instapaper-beyond-in-the-safari-extensions-gallery/</feedburner:origLink></item> <item><title>Three things I discovered today</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/pSlUcPcIHGI/</link> <comments>http://brettterpstra.com/three-things-i-discovered-today/#comments</comments> <pubDate>Tue, 17 Aug 2010 01:15:44 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[aditi]]></category> <category><![CDATA[emma]]></category> <category><![CDATA[experiments]]></category> <category><![CDATA[family]]></category> <category><![CDATA[markdown]]></category> <category><![CDATA[multimarkdown]]></category> <category><![CDATA[voodoopad]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=911</guid> <description><![CDATA[Amidst trying to get ready to launch a major website and playing with my own personal projects, I realized three things today. How important they are is debatable, and their usefulness depends entirely on what you're working on right now. VoodooPad1 supports column selection (hold down the option key and drag) and non-contiguous text selection. The former is a major&#8230;<ul><li><a href="http://brettterpstra.com/a-quick-voodoopad-script-plugin-go-to-today/" rel="bookmark">A Quick VoodooPad Script Plugin — Go To Today</a></li><li><a href="http://brettterpstra.com/multimarkdown-in-marsedit/" rel="bookmark">MultiMarkdown in MarsEdit</a></li><li><a href="http://brettterpstra.com/textmate-drag-command-for-base64-encoding-images/" rel="bookmark">TextMate drag command for Base64 encoding images</a></li></ul> ]]></description> <content:encoded><![CDATA[<p>Amidst trying to get ready to launch a major website and playing with my own personal projects, I realized three things today. How important they are is debatable, and their usefulness depends entirely on what you're working on right now.</p><ol><li><a href="http://www.voodoopad.com/voodoopad/">VoodooPad</a><sup id="fnref:voodoopad"><a href="#fn:voodoopad" rel="footnote">1</a></sup> supports column selection (hold down the option key and drag) and non-contiguous text selection. The former is a major boon in many situations, such as wanting to remove all of the spaces/tabs between a number at the beginning of lines in a list, and the first character in the list. That would make more sense if I had a picture for you, but this is a quick post and there's no time for such frivolity. Just try it. The latter is neat, but I've never really found a use for it. By holding down the Command key and dragging in areas that don't touch, you can create multiple selections and operate on them all at once. I'm sure there's a valid use case for that... I just think it's neat that it's there. I'm weird like that.</li><li><a href="http://www.freewisdom.org/projects/python-markdown/">Python Markdown</a> supports attributes. By placing <code>{@class=alignright}</code> in the alt text for an image definition, for instance, you can add <code>class="alignright"</code> within that element. It doesn't work very well for things like horizontal rules (messes up the parsing) or unordered lists (gets assigned to individual list items), but for paragraphs, images and other block elements, it's awesome. <a href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> has become one of my favorite writing tools, so this is cool news.<sup id="fnref:markdowntesting1"><a href="#fn:markdowntesting1" rel="footnote">2</a></sup> <sup id="fnref:markdowntesting2"><a href="#fn:markdowntesting2" rel="footnote">3</a></sup></li><li>When my <a href="http://theurbaneanimal.com/">wife</a><sup id="fnref:aditi"><a href="#fn:aditi" rel="footnote">4</a></sup> is out-of-town for a week, things go to hell pretty fast. I didn't just discover that today, but I further proved it.</li></ol><p>I'll explain why I care about the second item in an upcoming post (<em>teaser:</em> it's about VoodooPad, Python Markdown Extra and running a live website with VoodooPad). You may never get an explanation on the third item, but I'm sure you'll be all right with that.</p><p><strong>Bonus discovery:</strong> Our pit bull, Emma, is totally awesome. You know you want to click <strong><a href="http://dl.getdropbox.com/u/22614/BadassEmma.jpg" rel="lightbox[911]">here</a></strong> for a taste of the awesomesauce. For the last week, it's just been her, me and a crazy pit mix we're fostering named <a href="http://mnpitstop.com/current-fosters/">Honey</a>, and we all still love each other.</p><p><strong>Bonus tip:</strong> want to know a nifty way to get the direct image urls from your (or anyone's) Flickr images, despite the new Flickr design? Use <a href="http://geturlinfo.appspot.com/">getURLinfo</a>. You just enter the url of the page after their url, and optionally add a format (xml or json) to the end as a query string: <a href="http://geturlinfo.appspot.com/http://www.flickr.com/photos/circlesixdesign/3431867259/?format=json">http://geturlinfo.appspot.com/http://www.flickr.com/photos/circlesixdesign/3431867259/?format=json</a>. Works well for finding out where shortened url's go, too… if you don't like all of the <a href="http://brettterpstra.com/is-your-url-too-short-try-our-system-free/">options</a> I threw out this weekend.</p><div class="footnotes"><hr /><ol><li id="fn:voodoopad"><p>I've always (for as long as I've known about it, and it's been a while) loved <a href="http://www.voodoopad.com/voodoopad/">VoodooPad</a>, but have only recently really tapped into the power of it. Combine tagging with the ability to run Python, Lua and scripts in other languages based on numerous triggers and it becomes the ultimate geek notebook. Seriously, if you're a Mac user who geeks out (and I assume you are because you're reading this blog), check it out.&#160;<a href="#fnref:voodoopad" rev="footnote">&#8617;</a></p></li><li id="fn:markdowntesting1"><p>You can test out syntax for Python Markdown Extra with the <a href="http://achinghead.com/markdown/dingus/">Dingus</a> Markdown sandbox, which is a very handy tool. <a href="http://michelf.com/projects/php-markdown/extra/">Markdown Extra</a> is similar to <a href="http://fletcherpenney.net/multimarkdown/">MultiMarkdown</a>, and the <a href="http://www.freewisdom.org/projects/python-markdown/">Python implementation</a> has a few extra goodies.&#160;<a href="#fnref:markdowntesting1" rev="footnote">&#8617;</a></p></li><li id="fn:markdowntesting2"><p>For general Markdown testing and a comparison of Markdown flavors, check out <a href="http://babelmark.bobtfish.net/">BabelMark</a>.&#160;<a href="#fnref:markdowntesting2" rev="footnote">&#8617;</a></p></li><li id="fn:aditi"><p><a href="http://farm1.static.flickr.com/130/396295549_5a7e195c85.jpg" rel="lightbox[911]">Aditi</a>, also shown <a href="http://farm4.static.flickr.com/3586/3431867259_fb2b2393c0.jpg" rel="lightbox[911]">here</a> with our <del>baby-killing</del> <ins>sweet, loving and totally awesome</ins> pit bull, <a href="http://farm3.static.flickr.com/2684/4113821294_b3856fc591.jpg" rel="lightbox[911]">Emma</a>.&#160;<a href="#fnref:aditi" rev="footnote">&#8617;</a></p></li></ol></div><ul><li><a href="http://brettterpstra.com/a-quick-voodoopad-script-plugin-go-to-today/" rel="bookmark">A Quick VoodooPad Script Plugin — Go To Today</a></li><li><a href="http://brettterpstra.com/multimarkdown-in-marsedit/" rel="bookmark">MultiMarkdown in MarsEdit</a></li><li><a href="http://brettterpstra.com/textmate-drag-command-for-base64-encoding-images/" rel="bookmark">TextMate drag command for Base64 encoding images</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pSlUcPcIHGI:c0UJVcUPqCs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pSlUcPcIHGI:c0UJVcUPqCs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pSlUcPcIHGI:c0UJVcUPqCs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pSlUcPcIHGI:c0UJVcUPqCs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pSlUcPcIHGI:c0UJVcUPqCs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pSlUcPcIHGI:c0UJVcUPqCs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pSlUcPcIHGI:c0UJVcUPqCs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pSlUcPcIHGI:c0UJVcUPqCs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=pSlUcPcIHGI:c0UJVcUPqCs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=pSlUcPcIHGI:c0UJVcUPqCs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/pSlUcPcIHGI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/three-things-i-discovered-today/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/three-things-i-discovered-today/</feedburner:origLink></item> <item><title>Is your URL too short? Try our system, free!</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/0nt0JHfSoRI/</link> <comments>http://brettterpstra.com/is-your-url-too-short-try-our-system-free/#comments</comments> <pubDate>Sat, 14 Aug 2010 15:00:05 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[bash]]></category> <category><![CDATA[experiments]]></category> <category><![CDATA[launchbar]]></category> <category><![CDATA[service]]></category> <category><![CDATA[snow leopard]]></category> <category><![CDATA[terminal]]></category> <category><![CDATA[urlshortener]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=899</guid> <description><![CDATA[I was sifting through my previous blog after Jeffery Zeldman kindly sent a lot of visitors in that direction for some TextMate starter tips. Whilst milling around, I stumbled upon an old trick I used to use in Quicksilver (before I gave up on it1), but had forgotten about since. It's a very simple little shell command which uses curl&#8230;<ul><li><a href="http://brettterpstra.com/a-system-service-for-to-url-shortening/" rel="bookmark">A System Service for to. url shortening</a></li><li><a href="http://brettterpstra.com/updated-songza-lucky-link-service/" rel="bookmark">Updated: Songza Lucky Link Service</a></li><li><a href="http://brettterpstra.com/songza-lucky-link-service/" rel="bookmark">Songza Lucky Link Service</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/urlextender_system.jpg" alt="URL Extender System" border="0" width="300" height="260" class="alignright noshadow" />I was sifting through my <a href="http://blog.circlesixdesign.com">previous blog</a> after Jeffery Zeldman kindly <a href="http://www.zeldman.com/2010/08/13/how-to-use-textmate/">sent a lot of visitors</a> in that direction for some <a href="http://blog.circlesixdesign.com/2007/01/02/digging-in-to-textmate/">TextMate starter tips</a>. Whilst milling around, I stumbled upon an <a href="http://blog.circlesixdesign.com/2007/10/19/reverse-shortened-urls-with-quicksilver/">old trick I used to use</a> in <a href="http://www.blacktree.com/">Quicksilver</a> (before I gave up on it<sup id="fnref:quicksilver"><a href="#fn:quicksilver" rel="footnote">1</a></sup>), but had forgotten about since.</p><p>It's a very simple little shell command which uses <code>curl</code> to track down the destination of a shortened url (or any link with a redirect). It works with an assortment of services, including bit.ly, tinyurl.com, ow.ly, etc. It returns the destination address (the original url), and you can pass that on to whatever you like!</p><p><strong>Side note</strong>: I've been working on a little site called <a href="http://justthelinks.com">JustTheLinks</a> which makes liberal use of url-lengthening. It grabs all of your tweets from your home timeline which contain links, and creates a live-updated list with expanded urls and titles. It uses PHP's curl to do the trick, so it's the same concept. It's "in-progress," but feel free to check it out at <a href="http://justthelinks.com">http://justthelinks.com</a>!</p><p>Anyway, I decided to update the Quicksilver action and adapt it for some other uses. I'm happy to report that it's still quite useful as a command line script, a LaunchBar action or a System Service. This post has code for all three, so take your pick!</p><p><span id="more-899"></span></p><p>The <code>curl</code> command in this script has two options specified, -I and -s. -I tells it to fetch only the headers of the requested URI, and the -s tells it to suppress error messages (silent). The result is a short response which contains the location of the redirect, which is piped to <code>awk</code>. We look for the line in the response containing "Location" and print the second field of that line, which is the destination url. Here are a few ways I thought of to put it to use:</p><h3>Terminal</h3><p>The first thing I did was whip up a shell script to run from the command line. Just create a text file wherever you keep scripts<sup id="fnref:scripts"><a href="#fn:scripts" rel="footnote">2</a></sup>, or make a new directory somewhere for it. Paste in the code below, and name it something that makes sense to you. I went with <code>follow</code>, because it's following the redirect path, and <code>expand</code> was taken (and lengthen didn't seem as much fun to type...). The script looks for a single argument, which would be the shortened url, and if it doesn't receive one it tries the clipboard. So, if you already have the url in your clipboard, which is a pretty safe bet in this case, you can just run the script with no arguments.</p><div markdown=0><pre><code class="bash">
#!/bin/bash

if [ $# -eq 0 ]; then
  curl -Is `pbpaste` | awk &#x27;/Location/ { print $2 }&#x27;  
else
  curl -Is $1 | awk &#x27;/Location/ { print $2 }&#x27;
fi
</code></pre></div><h3>LaunchBar</h3><p>I heart <a href="http://www.obdev.at/products/launchbar/index.html" title="LaunchBar 5">LaunchBar</a>. Like Quicksilver, you can easily build "actions" for it that act on different types of input. This one just acts on text you paste or send to it, and assumes it's going to be a shortened URL. After it lengthens it, it just displays the result as large popup text. If you wanted to, you could easily have it <code>open location</code> or whatever, but the whole point is just to see where you're going, right?</p><p>This just goes into <code>~/Library/Application Support/LaunchBar/Actions</code> as a compiled AppleScript (scpt) file. Open AppleScript Editor and paste in the code below (or just <a href="applescript://com.apple.scripteditor?action=new&amp;script=on%20handle_string%28message%29%0A%09%0A%09tell%20application%20%22LaunchBar%22%0A%09%09set%20_res%20to%20do%20shell%20script%20%22curl%20%2DIs%20%22%20%26%20message%20%26%20%22%20%7C%20awk%20%27%2FLocation%2F%20%7B%20print%20%242%20%7D%27%22%0A%09%09display%20in%20large%20type%20_res%0A%09end%20tell%0A%09%0Aend%20handle_string">click here to open it automatically</a> in your editor). Save the file to the Actions folder and give it a name you'll recognize. Mine's called 'Expand Shortened URL.scpt'. Clever, I know. Here's the code:</p><div markdown=0><pre><code class="as">
on handle_string(message)

    tell application &quot;LaunchBar&quot;
        set _res to do shell script &quot;curl -Is &quot; &amp; message &amp; &quot; | awk &#x27;/Location/ { print $2 }&#x27;&quot;
        display in large type _res
    end tell

end handle_string
</code></pre></div><h3>Snow Leopard Service</h3><p>Lastly, here's a System Service that you can run on selected text in any Cocoa application. I've previously posted a <a href="http://brettterpstra.com/a-system-service-for-to-url-shortening/">Service for shortening urls</a>, so here's the opposite. This one can actually take a whole block of text and will scan for any and all links in it, attempting to lengthen and replace any shortened urls in the text. Here's how to build it:</p><ul><li>Open Automator.app</li><li>Select "Service" from the new file menu</li><li>Set "Service receives selected" to "text" in "any application"</li><li>Check the "Replaces selected text" box</li><li>Find the "Run Shell Script" action on the left and drag it into your workflow on the right</li><li>Set the Shell to Ruby (in this case)</li><li>Paste in the code below</li><li>Save the file to the <code>~/Library/Services</code> folder, named something like "Expand shortened urls in selection" (or something more interesting)</li></ul><p>Now, when you select text in any Cocoa application (Safari, Mail, TextEdit, etc.), you'll be able to find your Service in the Services submenu of either the application menu in the menubar, or in the contextual menu that comes up when you right click (ctrl-click) the selected text. When you run it, it will replace your text with a new version with any shortened urls in it expanded.</p><div markdown=0><pre><code class="ruby">
#!/usr/bin/env ruby -rjcode -Ku

require &#x27;open-uri&#x27;

input = STDIN.read
links = input.scan(/\b((?:https?:\/\/)(?:www\.)?([^\/]+)\/[a-zA-Z0-9]+[^\s`!()\[\]{};:&#x27;&quot;.,&lt;&gt;?&laquo;&raquo;&ldquo;&rdquo;&lsquo;&rsquo;])/im)
links.each {|link|
  result = %x{curl -Is #{link[0]} | awk &#x27;/Location/ { print $2 }&#x27;}
  input = input.gsub(/#{link[0]}/,result.strip)
}
print input
</code></pre></div><p>How often will you need any of these little experiments? Probably not very often. Most of the time, I'm more than happy to just follow a shortened link and trust that the description it came with will hold true. Every once in a while, though, I come across a link of unknown origin that I'd prefer to run through something like this. Hopefully you'll be able to find a use for it, too. It's a cool little snippet.</p><div class="footnotes"><hr /><ol><li id="fn:quicksilver"><p>Sorry, Quicksilver fans. It used to be my absolute, must-have, favorite thing in the world, but it got too crashy on Snow Leopard, and then development just kind of died. <a href="http://www.obdev.at/products/launchbar/index.html" title="LaunchBar 5">LaunchBar</a> is way better these days.&#160;<a href="#fnref:quicksilver" rev="footnote">&#8617;</a></p></li><li id="fn:scripts"><p>I keep a 'scripts' folder in my home directory (~/scripts) and put that in my PATH environment variable in my .bash_profile. Then, I can run my scripts from anywhere but don't have to muck around in <code>/usr/local/bin</code> or any such thing.&#160;<a href="#fnref:scripts" rev="footnote">&#8617;</a></p></li></ol></div><ul><li><a href="http://brettterpstra.com/a-system-service-for-to-url-shortening/" rel="bookmark">A System Service for to. url shortening</a></li><li><a href="http://brettterpstra.com/updated-songza-lucky-link-service/" rel="bookmark">Updated: Songza Lucky Link Service</a></li><li><a href="http://brettterpstra.com/songza-lucky-link-service/" rel="bookmark">Songza Lucky Link Service</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=0nt0JHfSoRI:HtPl6ZwFS5A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=0nt0JHfSoRI:HtPl6ZwFS5A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=0nt0JHfSoRI:HtPl6ZwFS5A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=0nt0JHfSoRI:HtPl6ZwFS5A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=0nt0JHfSoRI:HtPl6ZwFS5A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=0nt0JHfSoRI:HtPl6ZwFS5A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=0nt0JHfSoRI:HtPl6ZwFS5A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=0nt0JHfSoRI:HtPl6ZwFS5A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=0nt0JHfSoRI:HtPl6ZwFS5A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=0nt0JHfSoRI:HtPl6ZwFS5A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/0nt0JHfSoRI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/is-your-url-too-short-try-our-system-free/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/is-your-url-too-short-try-our-system-free/</feedburner:origLink></item> <item><title>A quick TextMate KeyBindings tip</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/iqdqp-IfHBE/</link> <comments>http://brettterpstra.com/textmate-keybinding-tip/#comments</comments> <pubDate>Fri, 13 Aug 2010 19:19:52 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[keybindings]]></category> <category><![CDATA[keyboard]]></category> <category><![CDATA[terminal]]></category> <category><![CDATA[textmate]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=891</guid> <description><![CDATA[I love the keyboard, and I love keyboard shortcuts. It's one of the reasons TextMate and I get along so well. There's one thing that bothers me any time I'm editing text (in any application), though: having to move my right hand all the way over to the arrow keys just to move forward a couple of characters, say, after&#8230;<ul><li><a href="http://brettterpstra.com/updated-songza-lucky-link-service/" rel="bookmark">Updated: Songza Lucky Link Service</a></li><li><a href="http://brettterpstra.com/clippable-to-evernote-snow-leopard-service/" rel="bookmark">Clippable to Evernote Snow Leopard Service</a></li><li><a href="http://brettterpstra.com/songza-lucky-link-service/" rel="bookmark">Songza Lucky Link Service</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/keybindingstypewriter1.jpg" alt="Typewriter Image" border="0" width="318" height="301" class="alignright noshadow" />I love the keyboard, and I love keyboard shortcuts. It's one of the reasons TextMate and I get along so well. There's one thing that bothers me any time I'm editing text (in any application), though: having to move my right hand <em>all</em> the way over to the arrow keys just to move forward a couple of characters, say, after an auto-paired set of parenthesis that I want to get out of.</p><p>I know, it's stupid for two reasons: first, it's just not that big a deal, and second, I could just use the Emacs keybindings (^F,^B,^P,^N, etc.). Well, to that I say "phooey" on both counts. It <em>is</em> a big deal; I've probably lost hours of my life to that motion. As to the latter, I didn't grow up on Emacs, and those shortcuts have just never nestled into my muscle memory. In related news, I already have some of those keys bound elsewhere.</p><p>I used to use <a href="http://pqrs.org/macosx/keyremap4macbook/">KeyRemap4Macbook</a> to map control-j,i,l and m to the cursor keys, but haven't installed it since my last clean wipe (just in case it was part of the reason I had to do the clean wipe to begin with). I missed that convenience, though, so after 15 minutes of Googling, here's the answer...</p><p><span id="more-891"></span></p><p>Allan Odgaard, creator of TextMate, offers the beginning of the solution <a href="http://blog.macromates.com/2005/key-bindings-for-switchers/">on the TextMate blog</a>. I found a little <a href="http://xahlee.org/emacs/osx_keybinding.html">more detailed information</a> around the net, too. Basically, you can add or edit a file called <code>DefaultKeyBinding.dict</code> in <code>~/Library/KeyBindings/</code> to add the keystrokes to all Cocoa applications. Mine looks like this now:</p><div markdown=0><pre><code>
{
  "^j" = "moveBackward:";
  "^l" = "moveForward:";
  "^m" = "moveDown:";
  "^i" = "moveUp:";
  "^E" = "\"editInTextMate:\"";
}
</code></pre></div><p>The first part of each pair is the keystroke, and the second part is the action. To find a list of the available actions, I just looked at <code>/System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict</code>, which has all of the default OS X keybindings in it. You'll need Property List Editor to view the file in its default state. To view the file in a text editor, you have to convert it to an XML (old school and plain text) plist. If you're curious, copy the file to your Desktop and, in Terminal, run <code>plutil -convert xml1 ~/Desktop/StandardKeyBinding.dict</code>.</p><p>After editing <code>DefaultKeyBinding.dict</code> and restarting your Cocoa apps, your new keyboard shortcuts will be available. That's when I found the next problem. TextMate has ^J mapped to "Reformat and Justify" under the Text menu. I never, ever use that command, so that was just annoying. I first tried to just override it in System Preferences->Keyboard->Application Shortcuts, but that didn't do anything. Next I found a <a href="http://www.macosxhints.com/article.php?story=20040618093419348">post on macosxhints</a> that offered a Terminal (<code>defaults</code>) command for changing default Application shortcuts. For example:</p><div markdown=0><pre><code>
defaults write com.macromates.textmate NSUserKeyEquivalents -dict-add "Reformat and Justify" "nil"
</code></pre></div><p>Guess what? That didn't do it. TextMate was still pwning the ^J shortcut. Next stop, the Resources folder of the TextMate application. There I found <code>KeyBindings.dict</code>, where it was easy to locate the offending shortcut. I commented out the line (//) and restarted TextMate. Ta. Dum. My new keyboard shortcuts now function perfectly.</p><p>By the way, the reason I didn't use "k" for down is I actually do regularly use the <code>kill</code> keybinding to delete to the end of the line (as well as ^a to move to beginning and ^e to the end). Also, you might skip mapping "m" to down, as "n" right next to it is already mapped to moveDown:, as mentioned while complaining about Emacs keybindings. I have them both mapped now, so I can have lazy fingers if I want to. Further, note that these keybindings will not work when selecting text; once you press the shift key, you're in a whole new world. You'd have map those as well if you wanted that functionality.</p><p>I'm happy now, and so are my fingers. Have any other brilliant keybinding stories? I'd love to hear them.</p><ul><li><a href="http://brettterpstra.com/updated-songza-lucky-link-service/" rel="bookmark">Updated: Songza Lucky Link Service</a></li><li><a href="http://brettterpstra.com/clippable-to-evernote-snow-leopard-service/" rel="bookmark">Clippable to Evernote Snow Leopard Service</a></li><li><a href="http://brettterpstra.com/songza-lucky-link-service/" rel="bookmark">Songza Lucky Link Service</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=iqdqp-IfHBE:ZhsEK6aMy9k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=iqdqp-IfHBE:ZhsEK6aMy9k:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=iqdqp-IfHBE:ZhsEK6aMy9k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=iqdqp-IfHBE:ZhsEK6aMy9k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=iqdqp-IfHBE:ZhsEK6aMy9k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=iqdqp-IfHBE:ZhsEK6aMy9k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=iqdqp-IfHBE:ZhsEK6aMy9k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=iqdqp-IfHBE:ZhsEK6aMy9k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=iqdqp-IfHBE:ZhsEK6aMy9k:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=iqdqp-IfHBE:ZhsEK6aMy9k:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/iqdqp-IfHBE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/textmate-keybinding-tip/feed/</wfw:commentRss> <slash:comments>1</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/textmate-keybinding-tip/</feedburner:origLink></item> <item><title>GReader Instapaper 0.2</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/PVJeSnFjRPM/</link> <comments>http://brettterpstra.com/greader-instapaper-0-2/#comments</comments> <pubDate>Sat, 07 Aug 2010 02:05:06 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[google reader]]></category> <category><![CDATA[instapaper]]></category> <category><![CDATA[safari]]></category> <category><![CDATA[safari 5]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=883</guid> <description><![CDATA[I just pushed a tiny little update to the GReader Instapaper extension. It shortens the default speed at which the notifications disappear, and adds a settings item in preferences so you can adjust it if you want to. I think the 1300ms delay is a pretty good one, it was 5000 before (and everyone complained). All better. I cleaned up&#8230;<ul><li><a href="http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/" rel="bookmark">Single-keystroke Instapaper in Google Reader</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-for-safari/" rel="bookmark">Instapaper Beyond for Safari!</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/07/greaderinstapapericon.jpg" alt="GReader Instapaper Icon" title="GReader Instapaper Icon" width="200" height="200" class="alignright size-full wp-image-838 noshadow" />I just pushed a tiny little update to the <a href="http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/">GReader Instapaper</a> extension. It shortens the default speed at which the notifications disappear, and adds a settings item in preferences so you can adjust it if you want to. I think the 1300ms delay is a pretty good one, it was 5000 before (and everyone complained). All better.</p><p>I cleaned up a few loose ends, fixed some error messages, general housekeeping. However, I’m still stuck as to how to tell when a post to Instapaper fails. I’m unable to get a response code from the async post, so all I can really tell is that there <em>was</em> a response. I can’t tell if it was good or bad. So… the notification will pretty much always tell you it was a success. If your articles aren’t showing up in Instapaper, check your username and password in the settings and try again.</p><p>I doubt I’ll push much further on this, given that the Instapaper bookmarklet does a fine job with Google Reader, and you can trigger it with a ⌘-# if it’s in your bookmarks bar, # being the position of the bookmarklet in the bar, from 1–9.</p><p class="download_desc"><a href="http://brettterpstra.com/downloads/GReaderInstapaper.0.2.zip" title="Download GReader Instapaper (838)"><img src="http://cdn.brettterpstra.com/wp-content/uploads/downloads/thumbnails/2010/07/icon.png" alt="download image for GReader Instapaper" width="64" height="64" /></a><a href="http://brettterpstra.com/downloads/GReaderInstapaper.0.2.zip" title="Download GReader Instapaper (838)">GReader Instapaper</a> — Adds single-keystroke sending of the current article in Google Reader to your Instapaper account. <a href="http://brettterpstra.com/2010/07/28/single-keystroke-instapaper-in-google-reader/">More Info</a></p><ul><li><a href="http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/" rel="bookmark">Single-keystroke Instapaper in Google Reader</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-for-safari/" rel="bookmark">Instapaper Beyond for Safari!</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=PVJeSnFjRPM:tChjIYg_WpU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=PVJeSnFjRPM:tChjIYg_WpU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=PVJeSnFjRPM:tChjIYg_WpU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=PVJeSnFjRPM:tChjIYg_WpU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=PVJeSnFjRPM:tChjIYg_WpU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=PVJeSnFjRPM:tChjIYg_WpU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=PVJeSnFjRPM:tChjIYg_WpU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=PVJeSnFjRPM:tChjIYg_WpU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=PVJeSnFjRPM:tChjIYg_WpU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=PVJeSnFjRPM:tChjIYg_WpU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/PVJeSnFjRPM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/greader-instapaper-0-2/feed/</wfw:commentRss> <slash:comments>3</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/greader-instapaper-0-2/</feedburner:origLink></item> <item><title>Placeholder image TextMate Snippet</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/XBPmuVsO_kk/</link> <comments>http://brettterpstra.com/placeholder-image-textmate-snippet/#comments</comments> <pubDate>Fri, 06 Aug 2010 00:40:52 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[snippet]]></category> <category><![CDATA[textmate]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=868</guid> <description><![CDATA[Yesterday, I posted a quick TextExpander snippet for inserting placeholder images into an HTML layout using placehold.it. I took a minute today to convert this to a TextMate snippet as well, and wanted to share it as I find it immensely useful. If you've never created a TextMate Snippet before, read on. If you're an old pro, skip down to&#8230;<ul><li><a href="http://brettterpstra.com/instant-placeholder-images-with-textexpander/" rel="bookmark">Instant placeholder images with TextExpander</a></li><li><a href="http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/" rel="bookmark">A TextMate Command for fast abbr tags</a></li><li><a href="http://brettterpstra.com/an-ode-to-twilight-and-a-textmate-tip/" rel="bookmark">An ode to Twilight, and a TextMate tip</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://placehold.it/200x150/333333/dddddd&#038;text=TextMate!" alt="Placehold.it" width="200" height="150" class="alignright noshadow" />Yesterday, <a href="http://brettterpstra.com/2010/08/04/instant-placeholder-images-with-textexpander/">I posted a quick TextExpander snippet</a> for inserting placeholder images into an HTML layout using <a href="http://placehold.it">placehold.it</a>. I took a minute today to convert this to a <a href="http://www.macromates.com/">TextMate</a> snippet as well, and wanted to share it as I find it immensely useful.</p><p><span id="more-868"></span> If you've never created a TextMate Snippet before, read on. If you're an old pro, skip down to the <a href="#thecode">code below</a>.</p><h3>Creating a TextMate Snippet</h3><p><a href="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/BundleEditorPlaceholderImage.jpg" rel="lightbox[868]"><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/BundleEditorPlaceholderImage-300x210.jpg" alt="Bundle Editor" title="BundleEditorPlaceholderImage" width="300" height="210" class="alignright size-medium wp-image-870 noshadow" /></a>To create a Snippet in TextMate, go to Bundles->Bundle Editor->Show Bundle Editor. If you don't already have a "personal" Bundle, you should create one to keep your custom Snippets and Commands separate from other bundles. Just use the plus sign button in the bottom left and choose New Bundle, then name it with your own name (or whatever you like).</p><p>Select that bundle in the left column and use the plus sign button at the bottom again, this time choosing New Snippet. Name the new Snippet "Placeholder Image" and set the Activation to Tab Trigger and enter your preferred shortcut in the field next to it. I'm using "dummy," which is the same as my TextExpander snippet, but I have TextExpander disabled in TextMate, so it overlaps nicely.</p><p>Next, insert the following code in the main text area for the snippet...</p><h3 id="thecode">The Placeholder Image Snippet</h3><div markdown=0><pre><code>
&#x3C;img src=&#x22;http://placehold.it/${1:width}x${2:height}/${3:333333}/${4:dddddd}&#x26;text=${5/ /+/g}${6:+($1x$2)}&#x22; alt=&#x22;${5:Placeholder} $1x$2&#x22; width=&#x22;$1&#x22; height=&#x22;$2&#x22; /&#x3E;
</code></pre></div><h3>Using the Placeholder Image Snippet</h3><p>Snippets in TextMate don't save until you select another one or close the Bundle Editor, so change your sidebar selection before you try it out. You should be able to create or edit any HTML or PHP file now, and type your shortcut, followed by a tab, and get a placeholder image. After it's inserted, you can tab through and change the attributes.</p><p>This Snippet gives you a full image tag with tab stops<sup id="fnref:tabstops"><a href="#fn:tabstops" rel="footnote">1</a></sup> for width, height, background color, foreground color and title text. The title text is entered in the alt attribute, and mirrored into the query string so that you can just type alphanumeric characters with natural spaces and it will substitute the necessary plus signs in the mirrored version. The width and height are included as mirrors in the title, but you can delete that in the final tab stop.</p><div class="footnotes"><hr /><ol><li id="fn:tabstops"><p>Tab stops allow you to have multiple editable parts in the inserted code. The first one is highlighted automatically when you insert the snippet, and you can edit it and press tab to go to the next one. You can also skip editing and just tab to the next one, or delete the entire selection and tab on.&#160;<a href="#fnref:tabstops" rev="footnote">&#8617;</a></p></li></ol></div><ul><li><a href="http://brettterpstra.com/instant-placeholder-images-with-textexpander/" rel="bookmark">Instant placeholder images with TextExpander</a></li><li><a href="http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/" rel="bookmark">A TextMate Command for fast abbr tags</a></li><li><a href="http://brettterpstra.com/an-ode-to-twilight-and-a-textmate-tip/" rel="bookmark">An ode to Twilight, and a TextMate tip</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=XBPmuVsO_kk:Hsr4hsLLQDs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=XBPmuVsO_kk:Hsr4hsLLQDs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=XBPmuVsO_kk:Hsr4hsLLQDs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=XBPmuVsO_kk:Hsr4hsLLQDs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=XBPmuVsO_kk:Hsr4hsLLQDs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=XBPmuVsO_kk:Hsr4hsLLQDs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=XBPmuVsO_kk:Hsr4hsLLQDs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=XBPmuVsO_kk:Hsr4hsLLQDs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=XBPmuVsO_kk:Hsr4hsLLQDs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=XBPmuVsO_kk:Hsr4hsLLQDs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/XBPmuVsO_kk" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/placeholder-image-textmate-snippet/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/placeholder-image-textmate-snippet/</feedburner:origLink></item> <item><title>Instant placeholder images with TextExpander</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/R-BVZErAYs0/</link> <comments>http://brettterpstra.com/instant-placeholder-images-with-textexpander/#comments</comments> <pubDate>Thu, 05 Aug 2010 01:43:50 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[textexpander]]></category> <category><![CDATA[webdesign]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=866</guid> <description><![CDATA[When designing for the web, placeholder images can come in handy during initial layout, and even during wireframing, if you happen to wireframe in markup. I've been using a TextExpander snippet to generate instant placeholder images at any size (almost) and with appropriate titles using Placehold.it. It's a really handy snippet to have in your web design toolkit. Just create&#8230;<ul><li><a href="http://brettterpstra.com/placeholder-image-textmate-snippet/" rel="bookmark">Placeholder image TextMate Snippet</a></li><li><a href="http://brettterpstra.com/textexpander-experiments/" rel="bookmark">TextExpander experiments</a></li><li><a href="http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/" rel="bookmark">A TextMate Command for fast abbr tags</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://placehold.it/200x150/333333/dddddd&#038;text=Placehold.it" alt="Placehold.it" width="200" height="150" class="alignright noshadow" /> When designing for the web, placeholder images can come in handy during initial layout, and even during wireframing, if you happen to wireframe in markup. I've been using a <a href="http://www.smileonmymac.com/textexpander/">TextExpander</a> snippet to generate instant placeholder images at any size (<a href="http://twitter.com/chockenberry/status/20348744761">almost</a>) and with appropriate titles using <a href="http://placehold.it/">Placehold.it</a>. It's a really handy snippet to have in your web design toolkit.</p><p>Just create a new plain text snippet, title it "Placeholder Image," give it whatever shortcut makes sense to you, and then add this code:</p><div markdown=0><pre><code>
&#x3C;img src=&#x22;http://placehold.it/%fill:width%x%fill:height%/333333/dddddd&#x26;text=%fill:title%&#x22; alt=&#x22;%fill:title%&#x22; width=&#x22;%fill:width%&#x22; height=&#x22;%fill:height%&#x22; /&#x3E;
</code></pre></div><p>It uses TextExpander 3's Fill feature to get the width, height and title from you before it inserts the image tag. If you have multiple words in your title, use plus signs (+) instead of spaces (url encoded). I'll be turning this into a <a href="http://www.macromates.com/">TextMate</a> snippet soon, too, and I'll post that when I have another minute. I'd love to hear about any other great tools you're using!</p><ul><li><a href="http://brettterpstra.com/placeholder-image-textmate-snippet/" rel="bookmark">Placeholder image TextMate Snippet</a></li><li><a href="http://brettterpstra.com/textexpander-experiments/" rel="bookmark">TextExpander experiments</a></li><li><a href="http://brettterpstra.com/a-textmate-command-for-fast-abbr-tags/" rel="bookmark">A TextMate Command for fast abbr tags</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=R-BVZErAYs0:Saz0YTM2I7w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=R-BVZErAYs0:Saz0YTM2I7w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=R-BVZErAYs0:Saz0YTM2I7w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=R-BVZErAYs0:Saz0YTM2I7w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=R-BVZErAYs0:Saz0YTM2I7w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=R-BVZErAYs0:Saz0YTM2I7w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=R-BVZErAYs0:Saz0YTM2I7w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=R-BVZErAYs0:Saz0YTM2I7w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=R-BVZErAYs0:Saz0YTM2I7w:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=R-BVZErAYs0:Saz0YTM2I7w:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/R-BVZErAYs0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/instant-placeholder-images-with-textexpander/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/instant-placeholder-images-with-textexpander/</feedburner:origLink></item> <item><title>A cleaner HootSuite icon for Fluid/Prism</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/U7e2s2gbSo4/</link> <comments>http://brettterpstra.com/a-cleaner-hootsuite-icon-for-fluidprism/#comments</comments> <pubDate>Thu, 05 Aug 2010 00:05:49 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[design]]></category> <category><![CDATA[fluid]]></category> <category><![CDATA[icon]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=863</guid> <description><![CDATA[This is just a quick pointer to an icon I whipped up this evening for HootSuite. I thought I’d share it in case anyone else found the default icon packed with the Fluid SSB download (available here) unsatisfactory. Their icon is too big and looks awkward in my Dock, so I trimmed it down and vectorized the owl to clean&#8230;<ul><li><a href="http://brettterpstra.com/antique-safari-reader-hack-update-with-evernote-goodness/" rel="bookmark">Antique Safari Reader hack update with Evernote goodness</a></li><li><a href="http://brettterpstra.com/instapaper-beyond/" rel="bookmark">Instapaper Beyond for Fluid.app</a></li><li><a href="http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/" rel="bookmark">Single-keystroke Instapaper in Google Reader</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/hootsuiteiconpostheader.jpg" alt="hootsuiteiconpostheader.jpg" border="0" width="650" height="187" class="headerimg" /></p><p><a href="http://dl.dropbox.com/u/22614/hootsuiteiconNEW.png" title="HootSuite icon revised, PNG" rel="lightbox[863]"><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/08/hootsuiteiconpreview.jpg" alt="hootsuiteiconpreview.jpg" border="0" width="103" height="150" class="alignright noshadow" /></a>This is just a quick pointer to an icon I whipped up this evening for <a href="http://hootsuite.com/">HootSuite</a>. I thought I’d share it in case anyone else found the default icon packed with the <a href="http://fluidapp.com/">Fluid</a> SSB download (<a href="http://hootsuite.com/apps#fluid">available here</a>) unsatisfactory. Their icon is too big and looks awkward in my Dock, so I trimmed it down and vectorized the owl to clean up the lines a bit.</p><p>If you haven’t tried HootSuite, it’s a great social media client with a layout similar to <a href="http://www.tweetdeck.com/">TweetDeck</a>. It lacks some of the features that TweetDeck has, but not too many, and it has the benefit of not crashing. Over. And over. <a href="http://hootsuite.com/">Check it out</a> for all your Twitter, Facebook, LinkedIn, Ping.fm, etc. needs.</p><p>Here you go: <strong><a href="http://ow.ly/2lbY1">HootSuite Icon Revised</a></strong></p><ul><li><a href="http://brettterpstra.com/antique-safari-reader-hack-update-with-evernote-goodness/" rel="bookmark">Antique Safari Reader hack update with Evernote goodness</a></li><li><a href="http://brettterpstra.com/instapaper-beyond/" rel="bookmark">Instapaper Beyond for Fluid.app</a></li><li><a href="http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/" rel="bookmark">Single-keystroke Instapaper in Google Reader</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=U7e2s2gbSo4:zLGQzUg90WU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=U7e2s2gbSo4:zLGQzUg90WU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=U7e2s2gbSo4:zLGQzUg90WU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=U7e2s2gbSo4:zLGQzUg90WU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=U7e2s2gbSo4:zLGQzUg90WU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=U7e2s2gbSo4:zLGQzUg90WU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=U7e2s2gbSo4:zLGQzUg90WU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=U7e2s2gbSo4:zLGQzUg90WU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=U7e2s2gbSo4:zLGQzUg90WU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=U7e2s2gbSo4:zLGQzUg90WU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/U7e2s2gbSo4" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/a-cleaner-hootsuite-icon-for-fluidprism/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/a-cleaner-hootsuite-icon-for-fluidprism/</feedburner:origLink></item> <item><title>Blue Bags: new song with 33% more metaphor</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/3s-X01AEzw8/</link> <comments>http://brettterpstra.com/blue-bags-new-song-with-33-more%c2%a0metaphor/#comments</comments> <pubDate>Mon, 02 Aug 2010 22:18:09 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Music]]></category> <category><![CDATA[music]]></category> <category><![CDATA[personal]]></category> <category><![CDATA[recording]]></category> <category><![CDATA[something precious]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=847</guid> <description><![CDATA[You can count yourself lucky if you have no idea what "blue bags with red letters" might be, but I think you'll get the idea from the lyrics to this song nonetheless. Within certain circles, the stamp bag1 is a common form of packaging powdered goods... at least in New York and other high-traffic cities. A small envelope, often blue&#8230;<ul><li><a href="http://brettterpstra.com/sad-songs-part-2-junky-angel/" rel="bookmark">Sad songs, part 2: Junky Angel</a></li><li><a href="http://brettterpstra.com/now-something-happier/" rel="bookmark">And now… something happier</a></li><li><a href="http://brettterpstra.com/sad-music-for-happy-people-part-1/" rel="bookmark">Sad music for happy people, part 1</a></li></ul> ]]></description> <content:encoded><![CDATA[<p>You can count yourself lucky if you have no idea what "blue bags with red letters" might be, but I think you'll get the idea from the lyrics to this song nonetheless. Within certain circles, the stamp bag<sup id="fnref:stampbag"><a href="#fn:stampbag" rel="footnote">1</a></sup> is a common form of packaging powdered goods... at least in New York and other high-traffic cities. A small envelope, often blue in my day, stamped with red letters which spell out the name of the dealer/batch the contents are from.</p><p>I do my best never to write blatantly drug-related lyrics. I try to use metaphor and a little imagination to create imagery which people who have "been there" can relate to, while still being meaningful to those who don't have such self-destructive proclivities. This is an older song of mine, and marks the beginning of this lyrical "rule" for me. I may not have nailed it, but I think it was a good start.</p><p>The guitar in this song is the first acoustic I picked up when I started this new leg of my life, and its sound is far from beautiful. The bass is a dumpster find from my punk rock days, recorded through a direct box, and has a sound I would call "trashy," if you'll excuse the pun. All told, though, I rather like the final product, and hope you do, too.</p><p>I'm posting the lyrics after the player, as this is an older recording and I don't think my mix on the vocals was optimal for making out all of the words. I'm going to go back and add lyrics to the others in this series as well, when I get a chance.</p><p><a href="http://brettterpstra.com/blue-bags-new-song-with-33-more%c2%a0metaphor/" title="Blue Bags">Continue to the post</a> to hear Blue Bags&hellip;</p><p><span id="more-847"></span></p><h4>Blue Bags</h4><p class="verse lyrics">He said "I've got the blue bags with the red letters, and<br /> You can look away but don't you ever tell me never,<br /> for a buck and a quarter, man, I'll do you better,<br /> you can walk away but don't you ever tell me never"</p><p class="chorus lyrics">And I know... I think my brain is trying to kill me</p><p class="verse lyrics">And in the blue bags with the red letters I found her<br /> Her skin was brown I pulled her down I tried to drown her<br /> I gave her a single lonely red rose before I took her in<br /> And now she's dancing in my veins</p><p class="chorus lyrics">I can't restrain<br /> I can't refrain<br /> I can't refrain from pain<br /> I think my brain is trying to kill me</p><p class="verse lyrics">And in the blue bags with the red letters I gave in<br /> It's dark in here it smells like death and it feels like heaven<br /> And here I am now waiting, waiting on the corner again<br /> Waiting for those blue bags and everything's forgiven</p><p class="chorus lyrics">Because that's the world we're living in<br /> And every day we're giving in<br /> We wallow in and dying in<br /> I think my brain is trying to kill me</p><p class="verse lyrics">I gave her a red rose every time I saw her<br /> She drags me down she bleeds me dry and still I call her<br /> And in a blue sea on a red ship I saw her<br /> Sailing for my heart</p><p class="chorus lyrics">On a red ship in a blue sea<br /> Can't remember why I feel this need<br /> I only know what's plain to see<br /> I think my brain is trying to kill me</p><p class="verse lyrics">And on a blue arm in red letters still drying<br /> We wrote a song about freedom and dying<br /> Because some of us find freedom and some of us find death<br /> And some of us, we have to steal our own last breath</p><p class="chorus lyrics">Because some of us we find our way out, some of us die trying<br /> These are the words she breathed to me as she lay dying<br /> She said, I'm drowning in blue bags with red letters<br /> I'm drowning in blue bags with red letters<br /> I'm drowing, I'm drowing...</p><div class="footnotes"><hr /><ol><li id="fn:stampbag"><p>Curious? See <a href="http://www.kickstarter.com/projects/1411510312/edge-markets-nyc-heroin-stamps-photography-exhib-0">this article</a>.&#160;<a href="#fnref:stampbag" rev="footnote">&#8617;</a></p></li></ol></div><ul><li><a href="http://brettterpstra.com/sad-songs-part-2-junky-angel/" rel="bookmark">Sad songs, part 2: Junky Angel</a></li><li><a href="http://brettterpstra.com/now-something-happier/" rel="bookmark">And now… something happier</a></li><li><a href="http://brettterpstra.com/sad-music-for-happy-people-part-1/" rel="bookmark">Sad music for happy people, part 1</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3s-X01AEzw8:N0YFCwMZGz8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3s-X01AEzw8:N0YFCwMZGz8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3s-X01AEzw8:N0YFCwMZGz8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3s-X01AEzw8:N0YFCwMZGz8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3s-X01AEzw8:N0YFCwMZGz8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3s-X01AEzw8:N0YFCwMZGz8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3s-X01AEzw8:N0YFCwMZGz8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3s-X01AEzw8:N0YFCwMZGz8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=3s-X01AEzw8:N0YFCwMZGz8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=3s-X01AEzw8:N0YFCwMZGz8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/3s-X01AEzw8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/blue-bags-new-song-with-33-more%c2%a0metaphor/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/blue-bags-new-song-with-33-more%c2%a0metaphor/</feedburner:origLink></item> <item><title>Single-keystroke Instapaper in Google Reader</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/K-OtUB9FsBs/</link> <comments>http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/#comments</comments> <pubDate>Wed, 28 Jul 2010 14:02:05 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[safari]]></category> <category><![CDATA[safari 5]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=836</guid> <description><![CDATA[This was a quick plugin I put together last night when I got too frustrated to work on my actual jobs. It lets you define a single shortcut key which, after you input your Instapaper username and password, will let you send the currently-selected article in Google Reader straight to Instapaper. It works fine with themes like Helvetireader (Safari extension),&#8230;<ul><li><a href="http://brettterpstra.com/greader-instapaper-0-2/" rel="bookmark">GReader Instapaper 0.2</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-for-safari/" rel="bookmark">Instapaper Beyond for Safari!</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><img src="http://cdn.brettterpstra.com/wp-content/uploads/2010/07/greaderinstapapericon.jpg" alt="GReader Instapaper Icon" title="GReader Instapaper Icon" width="200" height="200" class="alignright size-full wp-image-838 noshadow" />This was a quick plugin I put together last night when I got too frustrated to work on my actual jobs. It lets you define a single shortcut key which, after you input your <a href="http://www.instapaper.com/">Instapaper</a> username and password, will let you send the currently-selected article in <a href="http://www.google.com/reader/">Google Reader</a> straight to Instapaper. It works fine with themes like <a href="http://helvetireader.com/">Helvetireader</a> (<a href="http://kirindave.tumblr.com/post/675464589/safari-5-port-of-helvetireader">Safari extension</a>), and functions in both list view and expanded view.</p><p>Click below to download, unzip the extension and double click it to install. Head for <strong>Preferences->Extensions</strong> and set up your Instapaper username and password, and pick a hotkey. The default hotkey is "i", which doesn't interfere with existing Google shortcuts. Tailor to taste.</p><p>The only issue I'm having right now is that it doesn't fail properly if you have an incorrect user/pass combination. It tells you it succeeded, but doesn't post to your account. I'll have to add a verification step at some point in the process. For now, if things aren't showing up in Instapaper for you, check your username and password in the Extensions preferences. Be sure to check out <a href="http://brettterpstra.com/2010/06/09/instapaper-beyond-for-safari/">Instapaper Beyond</a>, too!</p><h4>Download:</h4><p class="download_desc"><a href="http://brettterpstra.com/downloads/GReaderInstapaper.0.2.zip" title="Download GReader Instapaper (838)"><img src="http://cdn.brettterpstra.com/wp-content/uploads/downloads/thumbnails/2010/07/icon.png" alt="download image for GReader Instapaper" width="64" height="64" /></a><a href="http://brettterpstra.com/downloads/GReaderInstapaper.0.2.zip" title="Download GReader Instapaper (838)">GReader Instapaper</a> - Adds single-keystroke sending of the current article in Google Reader to your Instapaper account. <a href="http://brettterpstra.com/2010/07/28/single-keystroke-instapaper-in-google-reader/">More Info</a></p><ul><li><a href="http://brettterpstra.com/greader-instapaper-0-2/" rel="bookmark">GReader Instapaper 0.2</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-for-safari/" rel="bookmark">Instapaper Beyond for Safari!</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=K-OtUB9FsBs:VCJ9XBgbmzM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=K-OtUB9FsBs:VCJ9XBgbmzM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=K-OtUB9FsBs:VCJ9XBgbmzM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=K-OtUB9FsBs:VCJ9XBgbmzM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=K-OtUB9FsBs:VCJ9XBgbmzM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=K-OtUB9FsBs:VCJ9XBgbmzM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=K-OtUB9FsBs:VCJ9XBgbmzM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=K-OtUB9FsBs:VCJ9XBgbmzM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=K-OtUB9FsBs:VCJ9XBgbmzM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=K-OtUB9FsBs:VCJ9XBgbmzM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/K-OtUB9FsBs" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/feed/</wfw:commentRss> <slash:comments>14</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/single-keystroke-instapaper-in-google-reader/</feedburner:origLink></item> <item><title>Instapaper Beyond 1.8.9</title><link>http://feedproxy.google.com/~r/BrettTerpstra/~3/BYkBFsvmyN0/</link> <comments>http://brettterpstra.com/instapaper-beyond-1-8-9/#comments</comments> <pubDate>Mon, 26 Jul 2010 13:31:29 +0000</pubDate> <dc:creator>Brett</dc:creator> <category><![CDATA[Blog]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[instapaper]]></category> <category><![CDATA[instapaper beyond]]></category> <category><![CDATA[safari]]></category> <category><![CDATA[safari 5]]></category><guid isPermaLink="false">http://brettterpstra.com/?p=832</guid> <description><![CDATA[Instapaper Beyond version 1.8.9 is another small release with a couple of usability enhancements. Thanks to everyone who’s been submitting ideas and bugs, I’ll do my best to keep up! This release includes: Alphabetical sorting of the help HUD (A-Z,a-z) Edit a bookmark with “E” (Shift-E) you can tab through the fields and submit with Enter, returning you to your&#8230;<ul><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-1-8-7/" rel="bookmark">Instapaper Beyond 1.8.7</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-1-3/" rel="bookmark">Instapaper Beyond 1.3</a></li></ul> ]]></description> <content:encoded><![CDATA[<p><a href="http://brettterpstra.com/2010/06/09/instapaper-beyond-for-safari/">Instapaper Beyond</a> version 1.8.9 is another small release with a couple of usability enhancements. Thanks to everyone who’s been submitting ideas and bugs, I’ll do my best to keep up!</p><p>This release includes:</p><ul><li>Alphabetical sorting of the help HUD (A-Z,a-z)</li><li>Edit a bookmark with “E” (Shift-E)<ul><li>you can tab through the fields and submit with Enter, returning you to your listing</li></ul></li><li>Scroll animation when navigating bookmark lists<ul><li>makes it more obvious which direction the page just scrolled you in when selecting a bookmark partially or entirely offscreen.</li></ul></li></ul><p><strong>Download:</strong></p><p class="download_desc"><a href="http://brettterpstra.com/downloads/InstapaperBeyond.1.8.10.zip" title="Download Instapaper Beyond for Safari 5 (162)"><img src="http://cdn.brettterpstra.com/wp-content/uploads/downloads/thumbnails/2010/06/instapaperbeyond95.png" alt="download image for Instapaper Beyond for Safari 5" width="64" height="64" /></a><a href="http://brettterpstra.com/downloads/InstapaperBeyond.1.8.10.zip" title="Download Instapaper Beyond for Safari 5 (162)">Instapaper Beyond for Safari 5</a> — Instapaper Beyond for Safari adds full keyboard navigation and Ajax loading of text views to Instapaper (http://www.instapaper.com). This extension is for Safari 5 with extensions enabled. <a href="http://brettterpstra.com/2010/06/09/instapaper-beyond-for-safari/">More Info</a></p><ul><li><a href="http://brettterpstra.com/instapaper-beyond-fix-for-text-style-controls/" rel="bookmark">Instapaper Beyond: fix for text style controls</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-1-8-7/" rel="bookmark">Instapaper Beyond 1.8.7</a></li><li><a href="http://brettterpstra.com/instapaper-beyond-1-3/" rel="bookmark">Instapaper Beyond 1.3</a></li></ul> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=BYkBFsvmyN0:HUgFqUAyDCw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=BYkBFsvmyN0:HUgFqUAyDCw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=BYkBFsvmyN0:HUgFqUAyDCw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=BYkBFsvmyN0:HUgFqUAyDCw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=BYkBFsvmyN0:HUgFqUAyDCw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=BYkBFsvmyN0:HUgFqUAyDCw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=BYkBFsvmyN0:HUgFqUAyDCw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=BYkBFsvmyN0:HUgFqUAyDCw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BrettTerpstra?a=BYkBFsvmyN0:HUgFqUAyDCw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/BrettTerpstra?i=BYkBFsvmyN0:HUgFqUAyDCw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BrettTerpstra/~4/BYkBFsvmyN0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://brettterpstra.com/instapaper-beyond-1-8-9/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><feedburner:origLink>http://brettterpstra.com/instapaper-beyond-1-8-9/</feedburner:origLink></item> </channel> </rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using xcache
Database Caching 145/509 queries in 4.552 seconds using xcache
Object Caching 5261/5424 objects using xcache
Content Delivery Network via Amazon Web Services: CloudFront: Amazon Web Services: S3: cdn.brettterpstra.com

Served from: brettterpstra.com @ 2010-09-05 03:26:48 -->
