<?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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Logan Koester</title>
	
	<link>http://blog.logankoester.com</link>
	<description>overcome obstacles with oversized pants</description>
	<pubDate>Wed, 07 Oct 2009 10:36:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
  <link>http://blog.logankoester.com</link>
  <url>http://blog.logankoester.com/wp-content/uploads/2009/03/icon_016.png</url>
  <title>Logan Koester</title>
</image>
		<geo:lat>42.390846</geo:lat><geo:long>-71.092255</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/logankoester" type="application/rss+xml" /><feedburner:emailServiceId>logankoester</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/logankoester" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Flogankoester" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Fun with ion3</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/fDpAMrA4OlY/fun-with-ion3</link>
		<comments>http://blog.logankoester.com/fun-with-ion3#comments</comments>
		<pubDate>Wed, 07 Oct 2009 10:36:01 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[ion3]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[lua]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[ubuntu]]></category>

		<category><![CDATA[window managers]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=204</guid>
		<description><![CDATA[Ion™ is a tiling tabbed window manager designed with keyboard users in mind.
In recent years I&#039;ve been a GNOME / Compiz guy, but while I&#039;ve enjoyed it&#039;s tight integration with Ubuntu and flashy effects, I&#039;ve always missed the simplicity of so-called minimalist window managers, mainly fvwm. These days, however, practically everything I do happens inside [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><a href="http://www.modeemi.fi/~tuomov/ion/intro.html">Ion</a>™ is a tiling tabbed window manager designed with keyboard users in mind.</p></blockquote>
<p>In recent years I&#039;ve been a <a href="http://www.gnome.org/">GNOME</a> / <a href="http://www.compiz-fusion.org/">Compiz</a> guy, but while I&#039;ve enjoyed it&#039;s tight integration with <a href="http://www.ubuntu.com/">Ubuntu</a> and flashy effects, I&#039;ve always missed the simplicity of so-called minimalist window managers, mainly <a href="http://www.fvwm.org/">fvwm</a>. These days, however, practically everything I do happens inside a <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a>, <a href="http://www.vim.org/">gvim</a>, or <a href="http://directory.fsf.org/project/gnome-terminal/">gnome-terminal</a>.</p>
<p>I want keyboard-driven. I want scriptable. And I don&#039;t want windows hiding behind other windows. Ever.</p>
<p>Enter <a href="http://www.modeemi.fi/~tuomov/ion/intro.html">ion3</a>. I&#039;ve only been using it for the last 24 hours, and even though I haven&#039;t memorized all of the keymaps, or learned how to code in <a href="http://www.lua.org/">Lua</a> (yet!), I already love it. So far the only problem I&#039;ve not been able to overcome is a bug in the latest <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash</a> that breaks fullscreen video. This isn&#039;t specific to ion3 - it&#039;s a problem with any focus-follows-mouse system. I <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=462690#50">hear there is a workound</a>, but it didn&#039;t seem to work for me. I consider it a microscopic trade-off for such an efficient window manager. Many of my previously sluggish applications now run incredibly fast, and with a couple days of practice I&#039;ll be working faster too.</p>
<h3>Installation</h3>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ <span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> ion3 ion3-dev ion3-scripts ion3-doc</div>
</div>
<p>Now just log out, choose <strong>ion3</strong> and start a new session. The first time you log in you&#039;ll be greeted with the man page, which I highly suggest reading. If you try not to &#034;cheat&#034; by using the mouse, you&#039;ll pick up almost everything in a couple of hours, and from there you&#039;ll find yourself navigating faster and faster until you don&#039;t have to think about it at all. Just like vim.</p>
<p>Ion is both simple and well-documented, so it would be pointless for me to write introductory tutorial. Instead, here are a couple tricks I&#039;ve discovered.</p>
<h3>Modifying your configuration</h3>
<p>One of the first things you&#039;re going to want to do when you&#039;re done messing around is change a few settings. For the most part, this is done in a file called <em>cfg_ion.lua</em>. Copy the system-wide file (I found mine at <em>/etc/X11/ion3/cfg_ion.lua</em>) to  ~/.ion3/cfg_ion.lua and open it with a text editor.</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ <span class="kw2">mkdir</span> ~<span class="sy0">/</span>.ion3<br />
$ <span class="kw2">cp</span> <span class="sy0">`</span><span class="kw2">locate</span> cfg_ion.lua <span class="sy0">|</span> <span class="kw2">head</span> -<span class="nu0">1</span><span class="sy0">`</span> ~<span class="sy0">/</span>.ion3<span class="sy0">/</span>cfg_ion.lua<br />
$ gvim ~<span class="sy0">/</span>ion3<span class="sy0">/</span>cfg_ion.lua</div>
</div>
<p>You&#039;ll need to restart Ion for your changes to take effect. Don&#039;t worry, all your applications will stay open; only the window manager needs to be restarted. Hit <strong>F12</strong> and type <em>session/restart.</em></p>
<p>I messed this file up a few times experimenting, and I&#039;ll probably mess it up a few more. If you screw up this file like I did, your <strong>F12</strong> shortcut can disappear, and you&#039;ll need another way to restart Ion after you&#039;ve fixed it. Keep a terminal open whenever you&#039;re editing, because you may not be able to launch one. The trick to restart Ion from the console is simple:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ <span class="kw2">ps</span> <span class="re5">-e</span> <span class="sy0">|</span> <span class="kw2">grep</span> ion3 <span class="co0"># 21108 ?        00:00:16 ion3</span><br />
$ <span class="kw2">kill</span> <span class="re5">-USR1</span> <span class="nu0">21108</span></div>
</div>
<h3>Remapping Mod1</h3>
<p>The <strong>Mod1</strong> key is used to initiate most interactions with Ion. On most systems, this is <strong>Alt</strong>. This is usually a very bad choice, because a lot of other applications need the <strong>Alt</strong> key for other things. I tried the Flying Window key, but it turns out it&#039;s in a very uncomfortable place on the keyboard. The number keys are used a lot. Try reaching <strong>Win+6</strong>, and you&#039;ll see what I mean. <strong>CapsLock</strong> has been working great for me, and as an added bonus, makes it much more work to shout on IRC.</p>
<p>Check your keymaps with <strong>xmodmap -pm</strong>. On my system, <strong>Mod3</strong> was unused, so I remapped <strong>CapsLock</strong> to that.</p>
<p>Edit (or create) <em>~/.Xmodmaprc</em> and insert these lines at the bottom&#8230;</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">remove Lock = Caps_Lock<br />
add Mod3 = Caps_Lock</div>
</div>
<p>Then run it&#8230;</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>X11<span class="sy0">/</span><span class="kw2">xmodmap</span> ~<span class="sy0">/</span>.Xmodmaprc</div>
</div>
<p>Also add this line to <em>~/.Xsession</em> so it is run automatically whenever you start X.</p>
<p>If your <strong>xmodmap -pm</strong> now reads&#8230;
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">mod3        Caps_Lock <span class="br0">&#40;</span>0&#215;42<span class="br0">&#41;</span></div>
</div>
<p> then you&#039;re in luck! Now you just need to edit the META variable near the top of your <span style="text-decoration: underline;"><em>cfg_ion.lua</em></span> to reflect the change
<div class="codesnip-container" >
<div class="lua codesnip" style="font-family:monospace;">META<span class="sy0">=</span><span class="st0">&quot;Mod3+&quot;</span></div>
</div>
<p> and restart.</p>
<p>All done! I hope you enjoy learning and using Ion3 as much as I have. I don&#039;t think I&#039;ll be switching again any time soon.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=fDpAMrA4OlY:rnpYgnxMZ9c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=fDpAMrA4OlY:rnpYgnxMZ9c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=fDpAMrA4OlY:rnpYgnxMZ9c:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=fDpAMrA4OlY:rnpYgnxMZ9c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=fDpAMrA4OlY:rnpYgnxMZ9c:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/fDpAMrA4OlY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/fun-with-ion3/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/fun-with-ion3</feedburner:origLink></item>
		<item>
		<title>Twitter account hacked</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/XeGvZqwIwvE/twitter-account-hacked</link>
		<comments>http://blog.logankoester.com/twitter-account-hacked#comments</comments>
		<pubDate>Tue, 16 Jun 2009 02:39:31 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[hacked]]></category>

		<category><![CDATA[oauth]]></category>

		<category><![CDATA[security]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=198</guid>
		<description><![CDATA[First off, an apology to those who were annoyed all day today by Twitter spam: I&#039;m sorry, I was asleep (I write better code at night) and didn&#039;t know what was going on until I woke up this evening. Not my favourite thing to wake up to!
I do a lot of freelance work with the [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-199" title="Twitter Spam" src="http://blog.logankoester.com/wp-content/uploads/2009/06/3630080691_9c99102882_o-300x187.png" alt="Twitter Spam" width="300" height="187" />First off, an apology to those who were annoyed all day today by Twitter spam: I&#039;m sorry, I was asleep (I write better code at night) and didn&#039;t know what was going on until I woke up this evening. Not my favourite thing to wake up to!</p>
<p>I do a lot of freelance work with the Twitter API, and someone asked me for a quote on a clone of a Ponzi-style follower train site. Not the kind of apps I build, but it looked slightly more legit than usual and I was foolish to log in to have a look around - that&#039;s where the trouble started. The site in question used the pre-oAuth login (as unfortunately most sites still do) which requires giving up your Twitter screen name and password.</p>
<p>As soon as they had it I was locked out of my account due to &#034;too many incorrect password attempts&#034;, and didn&#039;t recover the account until tonight. The password has been changed and the spam in question deleted. I&#039;ve learned my lesson, and will only use oAuth credentials in the future - you won&#039;t receive any more spam from this account.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=XeGvZqwIwvE:DUTqypP3uEw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=XeGvZqwIwvE:DUTqypP3uEw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=XeGvZqwIwvE:DUTqypP3uEw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=XeGvZqwIwvE:DUTqypP3uEw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=XeGvZqwIwvE:DUTqypP3uEw:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/XeGvZqwIwvE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/twitter-account-hacked/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/twitter-account-hacked</feedburner:origLink></item>
		<item>
		<title>Dream</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/K68Jtg4_G2E/dream</link>
		<comments>http://blog.logankoester.com/dream#comments</comments>
		<pubDate>Mon, 15 Jun 2009 06:07:11 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[dreams]]></category>

		<category><![CDATA[madness]]></category>

		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=187</guid>
		<description><![CDATA[I had the strangest dream this morning.
So I&#039;m walking through a grocery store with an umbrella, and randomly I&#039;m approached by a drunk Julia Deakin, who is yelling and slurring at me incomprehensibly. I look down to see what she&#039;s pointing at, and five black cats jump out of my umbrella. The topic drifts abruptly [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-188" title="char_marsha" src="http://blog.logankoester.com/wp-content/uploads/2009/06/char_marsha.jpg" alt="char_marsha" width="150" height="200" />I had the strangest dream this morning.</p>
<p>So I&#039;m walking through a grocery store with an umbrella, and randomly I&#039;m approached by a drunk <a href="http://www.imdb.com/name/nm0212626/">Julia Deakin</a>, who is yelling and slurring at me incomprehensibly. I look down to see what she&#039;s pointing at, and five black cats jump out of my umbrella. The topic drifts abruptly from my cats to the <a href="http://www.palm.com/us/products/phones/pre/">Palm Pre</a>, and she offered me a job on the register. Which was a nice of her, but she clearly didn&#039;t work in the store.</p>
<p>If you can figure out the symbolism behind this one, the men in white coats should be there any minute.</p>
<p><object width="560" height="340" data="http://www.youtube.com/v/zB8PM1fkpig&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/zB8PM1fkpig&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /></object></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=K68Jtg4_G2E:BFmk_mD1ntw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=K68Jtg4_G2E:BFmk_mD1ntw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=K68Jtg4_G2E:BFmk_mD1ntw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=K68Jtg4_G2E:BFmk_mD1ntw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=K68Jtg4_G2E:BFmk_mD1ntw:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/K68Jtg4_G2E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/dream/feed</wfw:commentRss>
		<enclosure url="http://www.youtube.com/v/zB8PM1fkpig&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" length="763" type="application/x-shockwave-flash" /><feedburner:origLink>http://blog.logankoester.com/dream</feedburner:origLink></item>
		<item>
		<title>Human Readable Text Compression</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/Vc5nrRIYOOo/human-readable-text-compression</link>
		<comments>http://blog.logankoester.com/human-readable-text-compression#comments</comments>
		<pubDate>Sat, 13 Jun 2009 13:01:30 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[compression]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[text]]></category>

		<category><![CDATA[tweetshrink]]></category>

		<category><![CDATA[vim]]></category>

		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=163</guid>
		<description><![CDATA[As a Web Service
TweetShrink, a web service from TRNSFR, uses a database of common instant / text messaging abbreviations to reduce the number of characters in a tweet. It&#039;s essentially a human-readable compression algorithm. For example, &#034;Some text to shrink&#034; becomes &#034;sum text 2 shrnk&#034; when passed through their API.
But it doesn&#039;t enforce Twitter&#039;s 140 [...]]]></description>
			<content:encoded><![CDATA[<h4>As a Web Service</h4>
<p><img src="http://blog.logankoester.com/wp-content/uploads/2009/06/icon_128.png" alt="TweetShrink" title="TweetShrink" width="128" height="128" class="alignright size-full wp-image-173" /><a href="http://tweetshrink.com">TweetShrink</a>, a web service from <a href="http://trnsfr.com/">TRNSFR</a>, uses a database of common instant / text messaging abbreviations to reduce the number of characters in a tweet. It&#039;s essentially a human-readable compression algorithm. For example, &#034;<strong>Some text to shrink</strong>&#034; becomes &#034;<strong>sum text 2 shrnk</strong>&#034; when passed through their API.</p>
<p>But it doesn&#039;t enforce Twitter&#039;s 140 character limit, which means it can be used beyond Twitter for whatever you like. Back in March I released the <a href="http://blog.logankoester.com/tweetshrink-gem-for-ruby">tweetshrink gem for Ruby</a>, and today I&#039;ve updated it to 0.2 which includes a command line interface.</p>
<h4>From the command line</h4>
<p>First, make sure you have Ruby and Rubygems installed. On Debian-based operating systems (such as <a href="http://www.ubuntu.com/">Ubuntu</a>), this goes a little something like</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ <span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> ruby rubygems</div>
</div>
<p>Now install the gem from it&#039;s <a href="http://github.com/logankoester/tweetshrink/tree/master">GitHub repository</a>:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ <span class="kw2">sudo</span> gem sources <span class="re5">-a</span> http:<span class="sy0">//</span>gems.github.com <span class="co0"># (only need to do this once)</span><br />
$ <span class="kw2">sudo</span> gem <span class="kw2">install</span> logankoester-tweetshrink</div>
</div>
<p>You can use it from the command line like this:</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ <span class="kw3">echo</span> <span class="st0">&quot;Some text to shrink&quot;</span> <span class="sy0">|</span> tweetshrink<br />
<span class="co0"># Or with a file&#8230;</span><br />
$ tweetshrink .<span class="sy0">/</span>file_to_shrink.txt</div>
</div>
<h4>From vim</h4>
<p>Or, you can integrate it with vim for ultimate text shrinking convenience. Just add the following to your <strong>.vimrc</strong>:</p>
<div class="codesnip-container" >&#034;&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;<br />
&#034; Tweetshrink text filter (:tws) &#034;<br />
&#034;&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;"&#034;<br />
autocmd BufEnter * vmap ,tws !tweetshrink<CR><br />
autocmd BufEnter * nmap ,tws !!tweetshrink<CR></div>
<p>Now you can shrink a single line by hitting <strong>,tws</strong> in <em>Normal</em> mode, or shrink a whole a visual block.</p>
<p>Of course, this is just as easy to integrate with <em>your</em> favorite text editor; I just happen to use vim.</p>
<h4>On the Web</h4>
<p>When I integrated this feature with my blog &#038; tweet scheduler <a href="http://pinglater.fm">PingLater.fm</a>, I realized TweetShrink didn&#039;t have a favicon. I needed an icon to use for the button, so I created these - feel free to use them for whatever.<br />

<a href='http://blog.logankoester.com/human-readable-text-compression/icon_016-2' title='icon_016'><img src="http://blog.logankoester.com/wp-content/uploads/2009/06/icon_016.png" width="16" height="16" class="attachment-thumbnail" alt="" /></a>
<a href='http://blog.logankoester.com/human-readable-text-compression/icon_032' title='icon_032'><img src="http://blog.logankoester.com/wp-content/uploads/2009/06/icon_032.png" width="32" height="32" class="attachment-thumbnail" alt="" /></a>
<a href='http://blog.logankoester.com/human-readable-text-compression/icon_048' title='icon_048'><img src="http://blog.logankoester.com/wp-content/uploads/2009/06/icon_048.png" width="48" height="48" class="attachment-thumbnail" alt="" /></a>
<a href='http://blog.logankoester.com/human-readable-text-compression/icon_128' title='TweetShrink'><img src="http://blog.logankoester.com/wp-content/uploads/2009/06/icon_128.png" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=Vc5nrRIYOOo:tDMmNkS_ZYI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=Vc5nrRIYOOo:tDMmNkS_ZYI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=Vc5nrRIYOOo:tDMmNkS_ZYI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=Vc5nrRIYOOo:tDMmNkS_ZYI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=Vc5nrRIYOOo:tDMmNkS_ZYI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/Vc5nrRIYOOo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/human-readable-text-compression/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/human-readable-text-compression</feedburner:origLink></item>
		<item>
		<title>PingLater.fm</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/amzuNhgTia8/pinglaterfm</link>
		<comments>http://blog.logankoester.com/pinglaterfm#comments</comments>
		<pubDate>Sun, 07 Jun 2009 12:01:13 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[announcements]]></category>

		<category><![CDATA[ping.fm]]></category>

		<category><![CDATA[pinglater.fm]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=127</guid>
		<description><![CDATA[I&#039;ve spent the last couple of days working hard on a new app for managing your web presence.
There is a service called Ping.fm for broadcasting updates to your blogs, Twitter, Facebook, and other social networks all at once, from one place.
This can save you a lot of time if you&#039;re trying to manage a brand [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pinglater.fm"><img class="alignright size-medium wp-image-138" title="PingLater.fm" src="http://blog.logankoester.com/wp-content/uploads/2009/06/home-300x217.png" alt="PingLater.fm - Welcome" width="210" height="152" /></a>I&#039;ve spent the last couple of days working hard on a new app for managing your web presence.</p>
<p>There is a service called <a href="http://ping.fm">Ping.fm</a> for broadcasting updates to your blogs, Twitter, Facebook, and other social networks all at once, from one place.</p>
<p>This can save you a lot of time if you&#039;re trying to manage a brand or keep up with different groups of friends, and it makes it easier to prevent your presence on these sites from becoming stale.</p>
<p>The application I&#039;m calling <a href="http://pinglater.fm">PingLater.fm</a> takes it one step further. Now you can set up pings to be sent at a specified time in the future. You could schedule a product highlight for each day of the month, release new blog posts while you&#039;re off on vacation, or whatever else you want to use a service like this for.</p>
<p>It&#039;s free for now while I gather feedback and optimize the code, but free users will eventually be limited to 3 pings scheduled at a time.</p>
<p>I have a number of premium features in mind (RSS posting, image/video, iPhone&#8230;) to make it a really indispensable tool  for pro bloggers and internet marketing people.</p>
<p>But we&#039;ll get to that. For now, I just want to hear from you. Let me know what I can do to make this useful for you!</p>
<h3><a href="http://pinglater.fm">Click here to try it out!</a></h3>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=amzuNhgTia8:2Rbhv9B_pho:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=amzuNhgTia8:2Rbhv9B_pho:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=amzuNhgTia8:2Rbhv9B_pho:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=amzuNhgTia8:2Rbhv9B_pho:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=amzuNhgTia8:2Rbhv9B_pho:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/amzuNhgTia8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/pinglaterfm/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/pinglaterfm</feedburner:origLink></item>
		<item>
		<title>Amazon EC2 Cheatsheet</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/8byI-pv3blo/amazon-ec2-cheatsheet</link>
		<comments>http://blog.logankoester.com/amazon-ec2-cheatsheet#comments</comments>
		<pubDate>Wed, 29 Apr 2009 16:48:08 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[amazon ec2]]></category>

		<category><![CDATA[amazon s3]]></category>

		<category><![CDATA[cheatsheet]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=111</guid>
		<description><![CDATA[I use Amazon EC2 every day and yet I always forget how to use their command-line tools. Here are a few common scenarios I run into, and their solutions.
Okay, just kidding, there&#039;s only one. I&#039;m planning on editing this post over time  

AWS Access Identifiers
AWS Management Console

Bundling an AMI from a running instance

Use scp [...]]]></description>
			<content:encoded><![CDATA[<p>I use Amazon EC2 every day and yet I always forget how to use their command-line tools. Here are a few common scenarios I run into, and their solutions.</p>
<p>Okay, just kidding, there&#039;s only one. I&#039;m planning on editing this post over time <img src='http://blog.logankoester.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key">AWS Access Identifiers</a></li>
<li><a href="https://console.aws.amazon.com/">AWS Management Console</a></li>
</ul>
<h3>Bundling an AMI from a running instance</h3>
<ol>
<li>Use <strong>scp</strong> to copy your private key (<em>pk-*.pem</em>) to <em>root@yourami:/mnt</em></li>
<li>Log in as root and bundle the volume
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ ec2-bundle-vol <span class="re5">-d</span> <span class="sy0">/</span>mnt <span class="re5">-k</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>pk-<span class="sy0">*</span>.pem <span class="re5">&#8211;cert</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>cert-<span class="sy0">*</span>.pem <span class="re5">-u</span> YOUR_AWS_ACCOUNT_ID <span class="re5">-s</span> <span class="nu0">10240</span></div>
</div>
<p>Now you have several minutes to kill. Click play&#8230;</p>
<p><object width="512" height="296"><param name="movie" value="http://www.hulu.com/embed/sR3b7ZiXgCedmRrz19nfGA"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.hulu.com/embed/sR3b7ZiXgCedmRrz19nfGA" type="application/x-shockwave-flash" allowFullScreen="true"  width="512" height="296"></embed></object></p>
<li>Upload the image to Amazon S3. You may want to do this inside of <strong>screen</strong>; I had my ssh session time out on me while it was working a couple of times.
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ s3cmd <span class="kw2">ls</span> <span class="co0"># List all S3 buckets</span><br />
$ ec2-upload-bundle <span class="re5">-b</span> YOUR_S3_BUCKET <span class="re5">-m</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>image.manifest.xml<br />
$ ec2-upload-bundle <span class="re5">-b</span> YOUR_S3_BUCKET <span class="re5">-m</span> <span class="sy0">/</span>mnt<span class="sy0">/</span>image.manifest.xml <span class="re5">-a</span> YOUR_ACCESS_KEY <span class="re5">-s</span> YOUR_SECRET_ACCESS_KEY</div>
</div>
</li>
<li>Register the AMI. This is something you need to do even when updating an image that has already been registered.
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ ec2-register YOUR_S3_BUCKET<span class="sy0">/</span>image.manifest.xml</div>
</div>
<p>This will return an AMI identifier that can be used to run a new instance.</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;">$ ec2-run-instances YOUR_AMI_IDENTIFIER</div>
</div>
</li>
</ol>
<p><em>More information on <a href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/creating-an-image.html">Creating an Image</a> at Amazon</em></p>
<p><em><br />
</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=8byI-pv3blo:p-nqjlyzKDk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=8byI-pv3blo:p-nqjlyzKDk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=8byI-pv3blo:p-nqjlyzKDk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=8byI-pv3blo:p-nqjlyzKDk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=8byI-pv3blo:p-nqjlyzKDk:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/8byI-pv3blo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/amazon-ec2-cheatsheet/feed</wfw:commentRss>
		<enclosure url="http://www.hulu.com/embed/sR3b7ZiXgCedmRrz19nfGA" length="333185" type="application/x-shockwave-flash" /><feedburner:origLink>http://blog.logankoester.com/amazon-ec2-cheatsheet</feedburner:origLink></item>
		<item>
		<title>Deploying Sinatra to a sub-URI using Passenger</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/IlmUkW4IzrA/deploying-sinatra-to-a-sub-uri-using-passenger</link>
		<comments>http://blog.logankoester.com/deploying-sinatra-to-a-sub-uri-using-passenger#comments</comments>
		<pubDate>Wed, 08 Apr 2009 21:29:06 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[phusion passenger]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=101</guid>
		<description><![CDATA[']]></description>
			<content:encoded><![CDATA[<p>It&#039;s not hard, but it turns out there&#039;s a trick to it. I&#039;ve run into this problem twice now, so I figure it should be documented. This is the solution if your &#034;/&#034; route is resulting in &#034;Not Found&#034; or an Apache directory listing.</p>
<p>You can read more about the problem at <a href="http://blog.ardekantur.com/2008/07/phusion-rack-sinatra-and-sub-domains/">Ardekantur&#039;s &#034;Phusion, Rack, Sinatra, and sub-domains&#034;</a>, but here&#039;s my quick solution:</p>
<ol>
<li>Disable <strong>mod_autoindex</strong> if it is enabled.</li>
<li>Make sure your <strong>RackBaseURI</strong> does not have a trailing slash.</li>
<li>Add this <strong>before_filter</strong> to your Sinatra app:
<pre>
<div class="codesnip-container" >
<div class="ruby codesnip" style="font-family:monospace;">before <span class="kw1">do</span>
&nbsp; request.<span class="me1">env</span><span class="br0">&#91;</span><span class="st0">'PATH_INFO'</span><span class="br0">&#93;</span> = <span class="st0">'/'</span> <span class="kw1">if</span> request.<span class="me1">env</span><span class="br0">&#91;</span><span class="st0">'PATH_INFO'</span><span class="br0">&#93;</span>.<span class="me1">empty</span>?
<span class="kw1">end</span></div>
</div>
</pre>
</li>
</ol>
<p>I suppose an alternative solution would be feasible using Rack middleware, but this is what I&#039;m using. Thanks to <a href="http://ryanfunduk.com/">Ryan Funduk</a> for helping me figure this stuff out.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=IlmUkW4IzrA:l8vH-3gY2so:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=IlmUkW4IzrA:l8vH-3gY2so:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=IlmUkW4IzrA:l8vH-3gY2so:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=IlmUkW4IzrA:l8vH-3gY2so:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=IlmUkW4IzrA:l8vH-3gY2so:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/IlmUkW4IzrA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/deploying-sinatra-to-a-sub-uri-using-passenger/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/deploying-sinatra-to-a-sub-uri-using-passenger</feedburner:origLink></item>
		<item>
		<title>Setting up rTorrent with Firefox</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/jvgDqXtH0Ns/setting-up-rtorrent-with-firefox</link>
		<comments>http://blog.logankoester.com/setting-up-rtorrent-with-firefox#comments</comments>
		<pubDate>Sun, 15 Mar 2009 02:04:31 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[bittorrent]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=68</guid>
		<description><![CDATA[
Being the closest thing we have to a native uTorrent in Linux, I really like Deluge. But, at least for me, it uses a seemingly impossible amount system resources. Since a Bittorrent client is the kind of thing I want to leave running in the background, I needed a lighter alternative.
I don&#039;t see any real [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.logankoester.com/wp-content/uploads/2009/03/rtorrent-elephantsdream.png"><img class="size-medium wp-image-85 alignright" title="rTorrent - Info" src="http://blog.logankoester.com/wp-content/uploads/2009/03/rtorrent-elephantsdream-300x248.png" alt="Downloading Elephant's Dream" width="300" height="248" /></a></p>
<p>Being the closest thing we have to a native <a href="http://www.utorrent.com/">uTorrent</a> in Linux, I really like <a href="http://deluge-torrent.org/">Deluge</a>. But, at least for me, it uses a seemingly impossible amount system resources. Since a <a href="http://en.wikipedia.org/wiki/BitTorrent_client">Bittorrent client</a> is the kind of thing I want to leave running in the background, I needed a lighter alternative.</p>
<p>I don&#039;t see any real need for a graphical interface when ultimately all it&#039;s doing is moving bits around on a network, so I went with <a href="http://libtorrent.rakshasa.no/">rTorrent</a>. One of the benefits of using command-line software is that you can use <a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a> and <a href="http://www.gnu.org/software/screen/">screen</a> to control it over the network&#8230; we don&#039;t need no fancypants AJAX interface for this!</p>
<h3>Part 1 - rTorrent</h3>
<p>If you&#039;re using Ubuntu, you can get rTorrent from the repositories, like so&#8230;</p>
<div class="codesnip-container" >
<div class="bash codesnip" style="font-family:monospace;"><span class="kw2">sudo</span> <span class="kw2">apt-get</span> <span class="kw2">install</span> rtorrent</div>
</div>
<p>Now that you&#039;ve got the software, you&#039;re going to need to configure it. rTorrent looks for a configuration file called <strong>.rtorrent.rc</strong> in your home directory. Don&#039;t panic. Just save the <a href="http://libtorrent.rakshasa.no/browser/trunk/rtorrent/doc/rtorrent.rc?rev=latest&amp;format=raw">sample</a> as <strong>~/.rtorrent.rc</strong> and open it up in your favorite text editor.</p>
<p>You don&#039;t need to worry about most of the stuff in this file, but you can if you want to. Here&#039;s how I have it set up:</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="co1"># Maximum and minimum number of peers to connect to per torrent.</span><br />
<span class="co1"># I like to limit this because I&#039;m often connected through cheap</span><br />
<span class="co1"># wireless routers that have trouble with lots of connections.</span><br />
min_peers = <span class="nu0">40</span><br />
max_peers = <span class="nu0">450</span></p>
<p><span class="co1"># Same as above but for seeding completed torrents (-1 = same as downloading)</span><br />
<span class="co1">#min_peers_seed = 10</span><br />
max_peers_seed = <span class="nu0">50</span></p>
<p><span class="co1"># Maximum number of simultanious uploads per torrent.</span><br />
max_uploads = <span class="nu0">30</span></p>
<p><span class="co1"># Where do you want your downloads to go?</span><br />
directory = ~/downloads</p>
<p><span class="co1"># You can put this anywhere you like, but I put it here.</span><br />
<span class="co1"># Remember that you&#039;ll have to create this directory</span><br />
session = ~/.<span class="me1">rtorrent</span>/session</p>
<p><span class="co1"># Watch a directory for new torrents, and stop those that have been</span><br />
<span class="co1"># deleted.</span><br />
<span class="co1"># This will be important when we&#039;re setting up Firefox.</span><br />
schedule = watch_directory,<span class="nu0">5</span>,<span class="nu0">5</span>,load_start=~/downloads/torrents/<span class="sy0">*</span>.<span class="me1">torrent</span><br />
schedule = untied_directory,<span class="nu0">5</span>,<span class="nu0">5</span>,stop_untied=</p>
<p><span class="co1"># Port range to use for listening.</span><br />
<span class="co1"># Remember if you&#039;re connected through a NAT router, you&#039;ll</span><br />
<span class="co1"># need to forward these ports.</span><br />
port_range = <span class="nu0">50471</span>-<span class="nu0">50479</span></p>
<p><span class="co1"># Enable peer exchange (for torrents not marked private)</span><br />
peer_exchange = yes</div>
</div>
<h3>Part 2 - Save Link In Folder</h3>
<p>Okay, so you&#039;ve got rTorrent all set up now, and configured to watch for new *.torrent files in a directory (mine is <em>~/downloads/torrents/*.torrent</em>). Now let&#039;s configure Firefox. There&#039;s an extension by <a href="http://mozext.achimonline.de/">Achim Seufert</a> called <a href="http://addons.mozilla.org/en-US/firefox/addon/613">Save Link In Folder</a>. You&#039;ll want to install this.</p>
<p>After your browser restarts, go to <em>Tools &gt; Add-ons &gt; Save Link In Folder &gt; Preferences</em> and add a new folder, like this&#8230;</p>
<p><img class="alignnone size-full wp-image-80" title="Save Link In Folder - Torrents" src="http://blog.logankoester.com/wp-content/uploads/2009/03/savelinkinfolder.png" alt="Save Link In Folder - Torrents" width="463" height="448" /></p>
<p><em>Remember - the download directory must be the one you told rTorrent to watch!</em></p>
<p><img class="alignnone size-full wp-image-82" title="Downloading a torrent" src="http://blog.logankoester.com/wp-content/uploads/2009/03/downloadingtorrents.png" alt="Downloading a torrent" width="463" height="365" /></p>
<p>Now when you click a torrent link, just save it instead of opening it with Deluge. If rTorrent is running it will notice the new torrent, and get to work! You can even queue up torrents while rTorrent is off, for downloading later.</p>
<p>I&#039;m definitely an rTorrent noob, having just set this up tonight, but so far I like it a lot, and no longer have the performance issues I had using Deluge. This configuration would also be ideal for setting up a seedbox / media center machine, if you set up all your Firefoxes to save torrent files to a network mount on the server.</p>
<h3>Links</h3>
<ul>
<li><a href="http://libtorrent.rakshasa.no/">rTorrent</a></li>
<li><a href="http://libtorrent.rakshasa.no/wiki/RTorrentUserGuide">rTorrent user guide</a></li>
<li><a href="http://libtorrent.rakshasa.no/rtorrent/rtorrent.1.html">rTorrent man page</a></li>
<li><a href="http://addons.mozilla.org/en-US/firefox/addon/613">Save Link In Folder</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=jvgDqXtH0Ns:RnjOG2GKA6o:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=jvgDqXtH0Ns:RnjOG2GKA6o:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=jvgDqXtH0Ns:RnjOG2GKA6o:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=jvgDqXtH0Ns:RnjOG2GKA6o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=jvgDqXtH0Ns:RnjOG2GKA6o:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/jvgDqXtH0Ns" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/setting-up-rtorrent-with-firefox/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/setting-up-rtorrent-with-firefox</feedburner:origLink></item>
		<item>
		<title>TweetShrink gem for Ruby</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/QUxKWBQT0f0/tweetshrink-gem-for-ruby</link>
		<comments>http://blog.logankoester.com/tweetshrink-gem-for-ruby#comments</comments>
		<pubDate>Fri, 06 Mar 2009 20:41:16 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[gem]]></category>

		<category><![CDATA[github]]></category>

		<category><![CDATA[httparty]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[tweetshrink]]></category>

		<guid isPermaLink="false">http://blog.logankoester.com/?p=63</guid>
		<description><![CDATA[TweetShrink&#039;s API is so simple that this gem barely adds anything on top of HTTParty, but here it is.


require 'rubygems'
require 'tweetshrink'

t = TweetShrink.shrink &#34;One wonders why&#34;
# t['difference'] =&#62; 4
# t['text'] =&#62; &#34;1 wonders y&#34;
# t['original_text'] =&#62; &#34;One wonders why&#34;


You can get it from my github account, here, or via rubygems like
$ sudo gem install logankoester-tweetshrink
Enjoy.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://tweetshrink.com">TweetShrink</a>&#039;s <a href="http://tweetshrink.com/api">API</a> is so simple that this gem barely adds anything on top of <a href="http://github.com/jnunemaker/httparty/tree/master">HTTParty</a>, but here it is.</p>
<pre style="padding-left: 30px;">
<div class="codesnip-container" >
<div class="ruby codesnip" style="font-family:monospace;"><span class="kw3">require</span> <span class="st0">'rubygems'</span>
<span class="kw3">require</span> <span class="st0">'tweetshrink'</span>

t = TweetShrink.<span class="me1">shrink</span> <span class="st0">&quot;One wonders why&quot;</span>
<span class="co1"># t['difference'] =&gt; 4</span>
<span class="co1"># t['text'] =&gt; &quot;1 wonders y&quot;</span>
<span class="co1"># t['original_text'] =&gt; &quot;One wonders why&quot;</span></div>
</div>
</pre>
<p>You can get it from my github account, <a href="http://github.com/logankoester/tweetshrink/tree/master">here</a>, or via rubygems like</p>
<pre style="padding-left: 30px;">$ sudo gem install logankoester-tweetshrink</pre>
<p>Enjoy.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=QUxKWBQT0f0:w3iWQkjFPug:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=QUxKWBQT0f0:w3iWQkjFPug:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=QUxKWBQT0f0:w3iWQkjFPug:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=QUxKWBQT0f0:w3iWQkjFPug:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=QUxKWBQT0f0:w3iWQkjFPug:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/QUxKWBQT0f0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/tweetshrink-gem-for-ruby/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/tweetshrink-gem-for-ruby</feedburner:origLink></item>
		<item>
		<title>Installing Linux Mint 6 on your Asus EeePC 901</title>
		<link>http://feedproxy.google.com/~r/logankoester/~3/rFK9kLq6fl4/installing-linux-mint-6-on-your-asus-eeepc-901</link>
		<comments>http://blog.logankoester.com/installing-linux-mint-6-on-your-asus-eeepc-901#comments</comments>
		<pubDate>Thu, 08 Jan 2009 04:02:08 +0000</pubDate>
		<dc:creator>Logan Koester</dc:creator>
		
		<category><![CDATA[posts]]></category>

		<category><![CDATA[awesome]]></category>

		<category><![CDATA[eeepc]]></category>

		<category><![CDATA[gnome]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[linux mint]]></category>

		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://logankoester.com/2009/?p=12</guid>
		<description><![CDATA[I was a fan of ubuntu-eee (now known as EasyPeasy) for a long time, but after upgrading to EasyPeasy 1.0 on my 20gb EEE 901 ($379.99) tonight, I&#039;ve decided it&#039;s time to move on, and I&#039;m happy I chose Linux Mint. Here&#039;s what I&#039;ve done so far to get it running great:
Install Linux Mint
Since the [...]]]></description>
			<content:encoded><![CDATA[<p>I was a fan of <a title="http://www.geteasypeasy.com/" href="http://">ubuntu-eee</a> (now known as EasyPeasy) for a long time, but after upgrading to EasyPeasy 1.0 on my <a href="http://www.amazon.com/exec/obidos/ASIN/B001BYB620/logakoes-20/ref=nosim/">20gb EEE 901</a> ($379.99) tonight, I&#039;ve decided it&#039;s time to move on, and I&#039;m happy I chose <a href="http://www.linuxmint.com/">Linux Mint</a>. Here&#039;s what I&#039;ve done so far to get it running great:</p>
<h3>Install Linux Mint</h3>
<p>Since the EeePC has no optical media drive, you will need a USB flash drive to install Mint. Download the Linux Mint .iso file and use <a href="http://lubi.sourceforge.net/unetbootin.html">UNetbootin</a> to burn it to your USB disk, then plug it into your Eee.</p>
<p>Turn on the machine and hit <strong>F2</strong> to enter the BIOS setup. Set the boot priority to try the USB disk first. You may also want to make sure the webcam/bluetooth is turned on, while you&#039;re here. Save your changes and reboot, and Mint will guide you through the rest of the installation.</p>
<p>When it asks you how you want to partition your disk, choose <strong>Guided - use entire disk</strong> and let it use the larger of the two SSDs.</p>
<h3>Install the EeePC kernel</h3>
<p>As usual with Linux installations, most of your hardware will work from the get-go, but not everything. The first thing you&#039;ll want to do is get the wireless card working. Plug in an ethernet cable, and then follow <a href="http://www.array.org/ubuntu/setup-intrepid.html">these instructions</a>. I recommend the <em>lean</em> kernel, and uninstalling the generic one since it will just be wasting precious disk space.</p>
<h3>Enable Desktop Effects</h3>
<p>Mint makes this easy for you by taking care of installing the correct drivers for your video card. All you should need to do is turn <a href="http://www.freedesktop.org/wiki/Software/Compiz">Compiz</a> on in <strong>Preferences &gt; Appearance &gt; Desktop Effects</strong>.</p>
<p><img class="aligncenter size-full wp-image-23" title="Enabling Desktop Effects in GNOME" src="http://blog.logankoester.com/wp-content/uploads/2009/01/desktop_effects.png" alt="Enabling Desktop Effects in GNOME" width="606" height="545" /></p>
<h3>Allow tall windows to move past the top of the screen</h3>
<p>Sooner or later you&#039;re going to run into a window that is too tall to display on the 9&#034; screen, and cannot be resized. The solution is to open up a terminal and run this command:</p>
<pre>$ gconftool-2 --set /apps/compiz/plugins/move/allscreens/options/constrain_y --type bool 0</pre>
<p>This will allow you to move these windows past the top of the screen (use ALT+Drag anywhere in the window. There are a number of other useful gconftool hacks on <a href="https://help.ubuntu.com/community/EeePC/Using">Ubuntu&#039;s EeePC page</a>.</p>
<h3>Create $HOME/bin directory</h3>
<p>You&#039;re going to want a place to store little scripts and tools where they can be executed on the command line.</p>
<pre>$ mkdir ~/bin</pre>
<p>Now add it to your PATH so <a href="http://en.wikipedia.org/wiki/Bash">bash</a> can find it. Open up your ~/.bashrc file and append</p>
<pre>if [ -d ~/bin ] ; then
  PATH=~/bin:"${PATH}"
fi</pre>
<h3>Make the LCD ultra bright!</h3>
<p>This hack is really cool. I found it on the <a href="http://www.ubuntu-eee.com/wiki/index.php5?title=How_to:_Ultra_Bright_LCD">EasyPeasy wiki</a>. Create a new file called <strong>ultra-bright</strong> in $HOME/bin and paste in this line, then save.</p>
<pre>sudo setpci -s 00:02.1 f4.b=ff</pre>
<p>You will need to make it executable, so</p>
<pre>$ chmod +x ~/bin/ultra-bright</pre>
<p>Now you can run</p>
<pre>$ ultra-bright</pre>
<p>to turn on the extra brightness, and use the bright/dim function keys to reset it. If you&#039;re like me, you&#039;ll want the extra brightness turned on all the time, so go ahead and create an entry for it in <strong>Preferences &gt; Sessions</strong>.</p>
<p><img class="aligncenter size-full wp-image-19" title="Making the screen ultra bright when you log in" src="http://blog.logankoester.com/wp-content/uploads/2009/01/ultrabright_sessions.png" alt="Making the screen ultra bright when you log in" width="484" height="398" /></p>
<h3>Enable the WiFi / Bluetooth / webcam toggle and performance tuner</h3>
<p>For this you&#039;ll need a package called <strong>eee-control</strong>. You&#039;ve already installed the Eee kernel, so this package should be available to you from the repository you added to your Software Sources.</p>
<pre>$ sudo apt-get install eee-control</pre>
<p>Alternatively, you can download the Ubuntu package from <a href="http://greg.geekmind.org/eee-control/#download">the website</a>.</p>
<p>Now you can find this nifty utility in your <strong>Administration</strong> menu. Unless you need the extra battery life, I recommend setting performance to &#034;super&#034;. To make use of your webcam, install the <a href="http://live.gnome.org/Cheese"><strong>cheese</strong></a> and/or <a href="http://www.skype.com/"><strong>skype</strong></a> packages.</p>
<h3>Make sure text is being rendered crystal clear</h3>
<p>Open <strong>Preferences &gt; Appearance</strong> &gt; <strong>Fonts </strong>and select &#034;Subpixel smoothing (LCDs)&#034;. Then click <strong>Details&#8230;</strong> and set <strong>Hinting</strong> to &#034;Full&#034;. If you&#039;re like me you absolutely hate Ubuntu&#039;s default monospace font. I prefer <a href="http://fractal.csie.org/~eric/wiki/Terminus_font">Terminus</a>. To switch, install the <strong>xfonts-terminus</strong> package and make it the default Fixed Width font.</p>
<h3>Boost GNOME Performance with /etc/hosts</h3>
<p>Following <a href="http://linuxmint.com/wiki/index.php/Boost_Gnome_Performance_by_tweaking_/etc/hosts">this guide</a> will help improve your system performance, and it takes about 2 seconds.</p>
<h3>Installing Avant Window Navigator</h3>
<p><a href="https://launchpad.net/awn">AWN</a> is similar to the Dock on Mac OS X.</p>
<pre>$ sudo apt-get install avant-window-navigator</pre>
<p>Right-click the panel at the bottom of your screen and check &#034;Allow Panel to be Moved&#034;. Drag it to the top of your screen, right-click and lock it again. Now launch <strong>Accessories &gt; Avant Window Navigator</strong>. It&#039;s kind of ugly and huge by default, but we can fix that.</p>
<p>Right-click on AWN and click <strong>Preferences</strong>. Turn on &#034;Auto hide bar when not in use&#034;, then switch to the <strong>Bar Appearance</strong> tab and change <em>Bar Height</em> to something more reasonable, like 32.</p>
<p>Now you&#039;ll want to get rid of the Window List at the top of the screen. Right-click on it and select &#034;Remove from Panel&#034;. Gone! Now there is lots of room for program shortcuts and silly panel applets.</p>
<h2>That&#039;s it!</h2>
<p>You now have a usable OS on your Asus EeePC, which means you are both cooler and more attractive than every other clown with a clunky Xandros-based netbook. Thanks for following my guide. Let me know in the comments section how your installation experience went and if you have any other EEE tricks worth sharing.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/logankoester?a=rFK9kLq6fl4:VecPgjFNLsY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/logankoester?i=rFK9kLq6fl4:VecPgjFNLsY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=rFK9kLq6fl4:VecPgjFNLsY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/logankoester?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/logankoester?a=rFK9kLq6fl4:VecPgjFNLsY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/logankoester?i=rFK9kLq6fl4:VecPgjFNLsY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/logankoester/~4/rFK9kLq6fl4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.logankoester.com/installing-linux-mint-6-on-your-asus-eeepc-901/feed</wfw:commentRss>
		<feedburner:origLink>http://blog.logankoester.com/installing-linux-mint-6-on-your-asus-eeepc-901</feedburner:origLink></item>
	</channel>
</rss>
