<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>The Changelog &#187; CLI</title>
	<atom:link href="http://thechangelog.com/tagged/cli/feed/" rel="self" type="application/rss+xml" />
	<link>http://thechangelog.com</link>
	<description>Open source moves fast. Keep up.</description>
	<lastBuildDate>Sat, 18 May 2013 07:32:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Multi-user tmux made easy with wemux</title>
		<link>http://thechangelog.com/multi-user-tmux-made-easy-with-wemux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=multi-user-tmux-made-easy-with-wemux</link>
		<comments>http://thechangelog.com/multi-user-tmux-made-easy-with-wemux/#comments</comments>
		<pubDate>Fri, 15 Mar 2013 13:15:05 +0000</pubDate>
		<dc:creator>Andrew Thorp</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://thechangelog.com/?p=3705</guid>
		<description><![CDATA[<p>Two of the many things in the development community that are growing in popularity are remote work and pair programming. Traditionally, pairing meant you had two people looking at the same computer and one person doing the typing. This is great, as long as you are in the same room. What about those developers, like [...]</p><p>The post <a href="http://thechangelog.com/multi-user-tmux-made-easy-with-wemux/">Multi-user tmux made easy with wemux</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Two of the many things in the development community that are growing in popularity are remote work and pair programming. Traditionally, pairing meant you had two people looking at the same computer and one person doing the typing. This is great, as long as you are in the same room.</p>

<p>What about those developers, like myself, who rarely (if ever) find themselves in the same room as their coworkers? Enter <a href="https://github.com/zolrath/wemux">wemux</a> by <a href="https://twitter.com/zolrath">Matt Furden</a>, the <a href="http://tmux.sourceforge.net/">tmux</a> tool that makes it simple for multiple users to connect to the same tmux session so you can see the same thing.</p>

<p>The only requirement, according to the README, is <strong>tmux >= 1.6.</strong> Installation is simple, with the preferred method being Homebrew:</p>

<pre><code>&gt;&gt; brew install https://github.com/downloads/zolrath/wemux/wemux.rb
</code></pre>

<p>After installation, you &mdash; <em>the host</em> &mdash; would start a new wemux server:</p>

<pre><code>&gt;&gt; wemux start
</code></pre>

<p>At this time, anyone else &mdash; <em>the clients</em> &mdash; could connect with any of the following three commands:</p>

<ul>
<li><code>wemux mirror</code> &#8211; attach to the server in read-only mode.</li>
<li><code>wemux pair</code> &#8211; attach to the server in pair mode, where both the client and the host can control the terminal.</li>
<li><code>wemux rogue</code> &#8211; attach to the server in rogue mode, where the client and host can work independently of eachother.</li>
</ul>

<p>There are plenty of other features, from listing users to running multiple wemux servers at once. Once you get the hang of it, pairing while working remotely becomes much simpler than screen sharing on Skype!</p>

<p>You can find out everything you need to know in the <a href="https://github.com/zolrath/wemux">README</a> or <a href="https://news.ycombinator.com/item?id=5380402">discuss this post on HackerNews</a>.</p>
<p>The post <a href="http://thechangelog.com/multi-user-tmux-made-easy-with-wemux/">Multi-user tmux made easy with wemux</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/multi-user-tmux-made-easy-with-wemux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Searching, improved with The Silver Searcher</title>
		<link>http://thechangelog.com/searching-improved-with-the-silver-searcher/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=searching-improved-with-the-silver-searcher</link>
		<comments>http://thechangelog.com/searching-improved-with-the-silver-searcher/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 15:15:51 +0000</pubDate>
		<dc:creator>Andrew Thorp</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://thechangelog.com/?p=3246</guid>
		<description><![CDATA[<p>The Silver Searcher by Geoff Greer is a tool which aims to take searching to the next level. Installation is simple: brew install the_silver_searcher If you aren&#8217;t on a Mac, or using homebrew, there are other installation instructions on the README. Using it is very straightforward, especially if you have used ack (or grep) in [...]</p><p>The post <a href="http://thechangelog.com/searching-improved-with-the-silver-searcher/">Searching, improved with The Silver Searcher</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/ggreer/the_silver_searcher">The Silver Searcher</a> by <a href="https://twitter.com/ggreer">Geoff Greer</a> is a tool which aims to take searching to the next level. Installation is simple:</p>

<pre><code>brew install the_silver_searcher
</code></pre>

<p>If you aren&#8217;t on a Mac, or using homebrew, there are other installation instructions on the <a href="https://github.com/ggreer/the_silver_searcher#installation">README</a>. Using it is very straightforward, especially if you have used <a href="http://betterthangrep.com/">ack</a> (or grep) in the past:</p>

<pre><code>ag stringtofind ~/code
</code></pre>

<p>I know what you&#8217;re thinking, what is <code>ag</code>? Well, <a href="http://www.webelements.com/silver/">Ag</a> is the chemical symbol for silver, and it&#8217;s a lot easier to type than <code>the_silver_server</code>, so Geoff went with it! There are a number of features that make The Silver Searcher worth giving a try:</p>

<ul>
<li><em>Speed</em>: 3-5x faster than ack</li>
<li>It honors .gitignore, .hgignore, and .agignore</li>
<li><code>ag</code> is 33% shorter than <code>ack</code> (admittedly this is silly, but you can&#8217;t argue the facts!)</li>
</ul>

<p><a href="http://news.ycombinator.com/item?id=5292713">Discuss this on HackerNews</a> or <a href="https://github.com/ggreer/the_silver_searcher">view the repo on GitHub</a>.</p>
<p>The post <a href="http://thechangelog.com/searching-improved-with-the-silver-searcher/">Searching, improved with The Silver Searcher</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/searching-improved-with-the-silver-searcher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ghost means never having to touch ssh/config again (either)</title>
		<link>http://thechangelog.com/ghost-means-never-having-to-touch-sshconfig-again/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ghost-means-never-having-to-touch-sshconfig-again</link>
		<comments>http://thechangelog.com/ghost-means-never-having-to-touch-sshconfig-again/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 05:17:53 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">https://thechangelog.com/?p=2941</guid>
		<description><![CDATA[<p>As a throwback to our original coverage of Ghost back in 2010, I wanted to share a hidden feature I just discovered in Ghost. Two years ago Felipe Coury submitted a pull request to add ghost-ssh to manipulate ~/.ssh/config files. If it weren&#8217;t for Google pointing me to this pull request, I would have never [...]</p><p>The post <a href="http://thechangelog.com/ghost-means-never-having-to-touch-sshconfig-again/">Ghost means never having to touch ssh/config again (either)</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>As a throwback to <a href="http://thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/">our original coverage of Ghost back in 2010</a>, I wanted to share a hidden feature I just discovered in <a href="https://github.com/bjeanes/ghost">Ghost</a>.</p>

<p>Two years ago <a href="https://github.com/fcoury">Felipe Coury</a> submitted <a href="https://github.com/bjeanes/ghost/pull/10">a pull request</a> to add <code>ghost-ssh</code> to manipulate <code>~/.ssh/config</code> files. If it weren&#8217;t for Google pointing me to this pull request, I would have never known <code>ghost-ssh</code> existed. <em><a href="https://github.com/bjeanes/ghost/blob/master/README.md">The readme</a> says nothing about it!</em></p>

<p>This is what Felipe had to say when he submitted <a href="https://github.com/bjeanes/ghost/pull/10">his patch</a>:</p>

<blockquote>
  <p>I had a need to manipulate ~/.ssh/config file the same way I can manipulate my hosts entries, so I made this change.</p>
  
  <p>Not sure if it will be useful for the upstream project, but be welcome to merge if you like.</p>
</blockquote>

<h2>An intro to ghost-ssh</h2>

<p>Just like with <code>ghost</code> on the command line, <code>ghost-ssh</code> has basic <code>list</code>, <code>add</code>, and <code>delete</code> options, as well as an <code>import</code> operation to import files.</p>

<p>To save you some time, here&#8217;s the contents of <code>ghost-ssh --help</code>:</p>

<pre><code>$ ghost-ssh --help
USAGE: ghost-ssh add &lt;host&gt; &lt;hostname&gt; [--user=&lt;user&gt;] [--port=&lt;port&gt;]
       ghost-ssh modify &lt;host&gt; &lt;hostname&gt; [--user=&lt;user&gt;] [--port=&lt;port&gt;]
       ghost-ssh delete &lt;host&gt;
       ghost-ssh list
       ghost-ssh empty
       ghost-ssh export
       ghost-ssh import &lt;file&gt;
</code></pre>

<p>An example of adding a new entry to your <code>ssh/config</code> might look something like this:</p>

<pre><code>$ ghost-ssh add tclprod xxxxxx.gridserver.com --user=tcladmin
  [Adding] tclprod -&gt; xxxxxx.gridserver.com
</code></pre>

<p>You can confirm the entry was added to <code>ssh/config</code> by running the <code>ghost-ssh list</code> command:</p>

<pre><code>$ghost-ssh list                                             
Listing 1 configs(s):
  tclprod -&gt; tcladmin@xxxxxx.gridserver.com:22
</code></pre>

<p>Now that I have this new entry in place, I can easily ssh into the server by running <code>ssh tclprod</code> and <em>boom goes the dynamite!</em></p>

<p>Checkout <a href="https://github.com/bjeanes/ghost">the source for Ghost</a> on GitHub for install and usage details.</p>

<p><a href="http://news.ycombinator.com/item?id=5205321">Discuss on Hacker News</a> if you&#8217;d like.</p>
<p>The post <a href="http://thechangelog.com/ghost-means-never-having-to-touch-sshconfig-again/">Ghost means never having to touch ssh/config again (either)</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/ghost-means-never-having-to-touch-sshconfig-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nodefront &#8211; Node.js-powered rapid front-end development utility</title>
		<link>http://thechangelog.com/node-js-powered-rapid-front-end-development-utility/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=node-js-powered-rapid-front-end-development-utility</link>
		<comments>http://thechangelog.com/node-js-powered-rapid-front-end-development-utility/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 13:46:22 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/node-js-powered-rapid-front-end-development-utility/</guid>
		<description><![CDATA[<p>Nodefront from Karthik Viswanathan aims to make a front-end developer&#8217;s life easier. Built in Node.js, Nodefront bundles a local web server for serving up HTML, CSS, and JavaScript assets and supports live reloading via web sockets. Additionally it ships with a command line interface: nodefront compile &#8211; Compiles Jade and Stylus files to HTML and [...]</p><p>The post <a href="http://thechangelog.com/node-js-powered-rapid-front-end-development-utility/">Nodefront &#8211; Node.js-powered rapid front-end development utility</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/karthikv/nodefront">Nodefront</a> from <a href="https://twitter.com/karthikvnet">Karthik Viswanathan</a> aims to make a front-end developer&#8217;s life easier. Built in Node.js, Nodefront bundles a local web server for serving up HTML, CSS, and JavaScript assets and supports live reloading via web sockets. Additionally it ships with a command line interface:</p>

<ul><li><p><code>nodefront compile</code> &#8211; Compiles Jade and Stylus files to HTML and CSS. Can compile upon modification, serve files on localhost, and even automatically refresh the browser/styles when files are changed.</p></li>
<li><p><code>nodefront fetch</code> &#8211; Automatically fetches CSS/JS libraries for use in your project. Provides an interactive mode to add new libraries.</p></li>
<li><p><code>nodefront insert</code> &#8211; Inserts CSS/JS libraries directly into your HTML or Jade files.</p></li>
<li><p><code>nodefront minify</code> &#8211; Minifies CSS and JS files. Can also optimize JPG and PNG images.</p></li>
</ul>

<p>Karthik has put together a <a href="http://vimeo.com/46197434">twenty minute screencast</a> for a full demonstration.</p>

<iframe src="http://player.vimeo.com/video/46197434" width="550" height="344" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>

<p>Check out the <a href="http://karthikv.github.com/nodefront/">project web site</a> or <a href="https://github.com/karthikv/nodefront">source on GitHub</a> for more.</p>
<p>The post <a href="http://thechangelog.com/node-js-powered-rapid-front-end-development-utility/">Nodefront &#8211; Node.js-powered rapid front-end development utility</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/node-js-powered-rapid-front-end-development-utility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ascii.io &#8211; Python-powered terminal recording and sharing</title>
		<link>http://thechangelog.com/ascii-io-python-powered-terminal-recording-and-sharing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ascii-io-python-powered-terminal-recording-and-sharing</link>
		<comments>http://thechangelog.com/ascii-io-python-powered-terminal-recording-and-sharing/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 13:20:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/ascii-io-python-powered-terminal-recording-and-sharing/</guid>
		<description><![CDATA[<p>Yesterday we featured codestre.am, a Node.js app that lets you record and livestream your terminal to others. Łukasz Korecki was quick to point us to ascii.io: @thechangelog You should checkout @asciiio by @sickill &#8211; similar service, less dependencies :-)&#8212; Łukasz Korecki (@lukaszkorecki) April 2, 2012 Powered by Python, ascii.io from Marcin Kulik is fully open [...]</p><p>The post <a href="http://thechangelog.com/ascii-io-python-powered-terminal-recording-and-sharing/">ascii.io &#8211; Python-powered terminal recording and sharing</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Yesterday we <a href="http://thechangelog.com/post/20362741933/codestre-am-live-coding-just-got-a-boost">featured codestre.am</a>, a Node.js app that lets you record and livestream your terminal to others. <a href="https://twitter.com/lukaszkorecki">Łukasz Korecki</a> was quick to point us to <a href="http://ascii.io">ascii.io</a>:</p>

<blockquote class="twitter-tweet" data-in-reply-to="186907484261318657"><p>@<a href="https://twitter.com/thechangelog">thechangelog</a> You should checkout @<a href="https://twitter.com/asciiio">asciiio</a> by @<a href="https://twitter.com/sickill">sickill</a> &#8211; similar service, less dependencies :-)</p>&mdash; Łukasz Korecki (@lukaszkorecki) <a href="https://twitter.com/lukaszkorecki/status/186919461100601345" data-datetime="2012-04-02T20:54:06+00:00">April 2, 2012</a></blockquote>

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<p>Powered by Python, ascii.io from <a href="https://twitter.com/#!/sickill">Marcin Kulik</a> is fully open source, both client and server. You can install the client with a simple shell script:</p>

<pre><code>$ curl -sL get.ascii.io | bash
</code></pre>

<p>Once installed, use the <code>asciiio</code> command line interface to record your session, optionally logging in with GitHub or Twitter to store your recordings under your profile at <a href="http://ascii.io">ascii.io</a>.</p>

<p><a href="http://ascii.io/a/34"><img src="http://cl.ly/133R1Y072h0s2U3F3d2K/Screen%20Shot%202012-04-03%20at%208.07.00%20AM.png" alt="ascii.io screencap" /></a></p>

<p>Check out the <a href="https://github.com/sickill/ascii.io">source on GitHub</a> for info on usage and how to contribute.</p>

<p>Bonus: <a href="http://ascii.io/a/3">Nyan Cat!</a></p>
<p>The post <a href="http://thechangelog.com/ascii-io-python-powered-terminal-recording-and-sharing/">ascii.io &#8211; Python-powered terminal recording and sharing</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/ascii-io-python-powered-terminal-recording-and-sharing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>noexec &#8211; Run Ruby scripts without bundle exec</title>
		<link>http://thechangelog.com/noexec-run-ruby-scripts-without-bundle-exec/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=noexec-run-ruby-scripts-without-bundle-exec</link>
		<comments>http://thechangelog.com/noexec-run-ruby-scripts-without-bundle-exec/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:16:26 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[bundler]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/noexec-run-ruby-scripts-without-bundle-exec/</guid>
		<description><![CDATA[<p>We&#8217;ve covered a few of Josh Hull&#8217;s projects on this blog. His latest is so simple, yet quite useful. If you use Bundler, you probably spend a good part of your day running bundle exec. I even use a zsh alias be for this purpose. Well now, we can stop. With noexec, Josh has created [...]</p><p>The post <a href="http://thechangelog.com/noexec-run-ruby-scripts-without-bundle-exec/">noexec &#8211; Run Ruby scripts without bundle exec</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>We&#8217;ve <a href="http://thechangelog.com/post/11504199078/renee-sinatra-inspired-rack-framework-for-ber-dry-routin">covered</a> a <a href="http://thechangelog.com/post/9412707640/ghostbuster-headless-testing-with-phantomjs-and-coffeesc">few</a> of <a href="https://twitter.com/#!/joshbuddy">Josh Hull</a>&#8217;s <a href="http://thechangelog.com/post/960758568/optitron-sensible-options-parsing">projects</a> on this blog. His latest is so simple, yet quite useful. If you use Bundler, you probably spend a good part of your day running <code>bundle exec</code>. I even use a zsh alias <code>be</code> for this purpose. Well now, we can stop.</p>

<p>With <a href="https://github.com/joshbuddy/noexec">noexec</a>, Josh has created a small script that will walk up your directory structure until it can find a Gemfile. If the executable you&#8217;re running is in that Gemfile, it will use it instead of <code>Bundle.setup</code>.</p>

<p>Simply install the gem:</p>

<pre><code>gem install noexec
</code></pre>

<p>&#8230; and be sure to export the following environment variable in your shell profile:</p>

<pre><code>RUBYOPT="-r`noexec`"
</code></pre>

<p>Check the <a href="https://github.com/joshbuddy/noexec">source on GitHub</a> for more.</p>
<p>The post <a href="http://thechangelog.com/noexec-run-ruby-scripts-without-bundle-exec/">noexec &#8211; Run Ruby scripts without bundle exec</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/noexec-run-ruby-scripts-without-bundle-exec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>httpie &#8211; Python-powered HTTP CLI for humans</title>
		<link>http://thechangelog.com/httpie-python-powered-http-cli-for-humans/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=httpie-python-powered-http-cli-for-humans</link>
		<comments>http://thechangelog.com/httpie-python-powered-http-cli-for-humans/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 14:38:35 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[wep]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/httpie-python-powered-http-cli-for-humans/</guid>
		<description><![CDATA[<p>Although cURL is great, we&#8217;re always looking for great console tools for working with HTTP. Jakub Roztocil has released HTTPie. Built on Requests, HTTPie provides a clean command line interface for HTTP requests: http PATCH api.example.com/person/1 X-API-Token:123 name=John email=john@example.org PATCH /person/1 HTTP/1.1 User-Agent: HTTPie/0.1 X-API-Token: 123 Content-Type: application/json; charset=utf-8 {"name": "John", "email": "john@example.org"} I appreciate [...]</p><p>The post <a href="http://thechangelog.com/httpie-python-powered-http-cli-for-humans/">httpie &#8211; Python-powered HTTP CLI for humans</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Although cURL is great, we&#8217;re always looking for great <a href="http://thechangelog.com/post/1081571891/htty-htty-is-the-http-tty-a-console-application-for-inte">console tools for working with HTTP</a>. <a href="https://twitter.com/jkbrzt">Jakub Roztocil</a> has released <a href="https://github.com/jkbr/httpie">HTTPie</a>. Built on <a href="http://docs.python-requests.org/en/v0.10.6/index.html">Requests</a>, HTTPie provides a clean command line interface for HTTP requests:</p>

<pre><code>http PATCH api.example.com/person/1 X-API-Token:123 name=John email=john@example.org

PATCH /person/1 HTTP/1.1
User-Agent: HTTPie/0.1
X-API-Token: 123
Content-Type: application/json; charset=utf-8

{"name": "John", "email": "john@example.org"}
</code></pre>

<p>I appreciate the colored terminal output:</p>

<p><a href="https://github.com/jkbr/httpie"><img src="http://cl.ly/3Z012p3x3L0N1R152P1E/httpie.png" alt="HTTPie output" /></a></p>

<p><a href="https://github.com/jkbr/httpie">Source</a> on GitHub.</p>
<p>The post <a href="http://thechangelog.com/httpie-python-powered-http-cli-for-humans/">httpie &#8211; Python-powered HTTP CLI for humans</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/httpie-python-powered-http-cli-for-humans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Methadone &#8211; Build better Ruby-based CLI&#8217;s with logging and Cucumber support</title>
		<link>http://thechangelog.com/methadone-build-better-ruby-based-clis-with-logging/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=methadone-build-better-ruby-based-clis-with-logging</link>
		<comments>http://thechangelog.com/methadone-build-better-ruby-based-clis-with-logging/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 14:48:37 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[aruba]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/methadone-build-better-ruby-based-clis-with-logging/</guid>
		<description><![CDATA[<p>There&#8217;s no shortage of projects to build CLI apps in Ruby, but few ship with as many tools to help you build better command line interfaces as David Copeland&#8217;s Methadone. Features include bootstrapping, logging, command DSL, and even Cucumber support via Aruba. The DSL aims to be a readable, convenience wrapper around OptionParser: #!/usr/bin/env ruby [...]</p><p>The post <a href="http://thechangelog.com/methadone-build-better-ruby-based-clis-with-logging/">Methadone &#8211; Build better Ruby-based CLI&#8217;s with logging and Cucumber support</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s no shortage of projects to build CLI apps in Ruby, but few ship with as many tools to help you build <em>better</em> command line interfaces as <a href="http://twitter.com/davetron5000">David Copeland</a>&#8217;s <a href="https://github.com/davetron5000/methadone">Methadone</a>. Features include bootstrapping, logging, command DSL, and even Cucumber support via <a href="http://thechangelog.com/post/388235527/aruby-cucumber-from-the-command-line">Aruba</a>.</p>

<p>The DSL aims to be a readable, convenience wrapper around <code>OptionParser</code>:</p>

<pre><code>#!/usr/bin/env ruby

require 'optparse'
require 'methadone'

include Methadone::Main

main do |name,password|
  name # =&gt; guaranteed to be non-nil
  password # =&gt; nil if user omitted on command line
  options[:switch] # =&gt; true if user used --switch or -s
  options[:s]      # =&gt; ALSO true if user used --switch or -s
  options[:f]      # =&gt; value of FILE if used on command-line
  options[:flag]   # =&gt; ALSO value of FILE if used on command-line

  ...
end

description "One line summary of your awesome app"

on("--[no-]switch","-s","Some switch")
on("-f FILE","--flag","Some flag")
on("-x FOO") do |foo|
  # something more complex; this is exactly OptionParser opts.on 
end

arg :name
arg :password, :optional

go!
</code></pre>

<p>Since Methadone also scaffolds out your Cucumber features, you can test your CLI via Aruba:</p>

<pre><code>Feature: My bootstrapped app kinda works
  In order to get going on coding my awesome app
  I want to have aruba and cucumber setup
  So I don't have to do it myself

  Scenario: App just runs
    When I run `newgem --help`
    Then the exit status should be 0
    And the output should contain:
    """
    Usage: newgem [options]
    """
</code></pre>

<p>Check out the <a href="https://github.com/davetron5000/methadone">README</a> for advanced usage or the <a href="https://github.com/davetron5000/methadone/wiki/Roadmap">roadmap</a> to see how you might contribute.</p>
<p>The post <a href="http://thechangelog.com/methadone-build-better-ruby-based-clis-with-logging/">Methadone &#8211; Build better Ruby-based CLI&#8217;s with logging and Cucumber support</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/methadone-build-better-ruby-based-clis-with-logging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cement2, Python CLI framework nears beta</title>
		<link>http://thechangelog.com/cement2-python-cli-framework-nears-beta/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cement2-python-cli-framework-nears-beta</link>
		<comments>http://thechangelog.com/cement2-python-cli-framework-nears-beta/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 13:20:59 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/cement2-python-cli-framework-nears-beta/</guid>
		<description><![CDATA[<p>Cement2, the next version of the Python application framework is almost ready for a beta release. I love Command Line Interfaces, and Cement2 is a slick way to create a CLI in Python. The canonical Hello World CLI is just five lines: from cement2.core import foundation app = foundation.lay_cement('helloworld') app.setup() app.run() print('Hello World') With the [...]</p><p>The post <a href="http://thechangelog.com/cement2-python-cli-framework-nears-beta/">Cement2, Python CLI framework nears beta</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://cement.readthedocs.org/en/portland/">Cement2</a>, the next version of the <a href="http://builtoncement.org">Python application framework</a> is almost ready for a beta release. I love Command Line Interfaces, and Cement2 is a slick way to create a CLI in Python. The canonical <em>Hello World</em> CLI is just five lines:</p>

<pre><code>from cement2.core import foundation
app = foundation.lay_cement('helloworld')
app.setup()
app.run()
print('Hello World')
</code></pre>

<p>With the single call to <code>lay_cement</code>, this Python script is a full-fledged CLI complete with usage and help information:</p>

<pre><code>$ python helloworld.py --help
usage: helloworld.py [-h] [--debug] [--quiet]

optional arguments:
  -h, --help  show this help message and exit
  --debug     toggle debug output
  --quiet     suppress all output
</code></pre>

<p>I especially like how Cement separates <a href="http://cement.readthedocs.org/en/portland/dev/interfaces_and_handlers/">interfaces and handlers</a>, allowing for swappable implementations of features based on command line arguments. There is also a robust <a href="http://cement.readthedocs.org/en/portland/dev/plugins/">plugin architecture</a> for those that want to extend it. Be sure and check out the <a href="https://github.com/derks/cement/branches">Portland branch</a> for the source as Cement2 is still under active development.</p>
<p>The post <a href="http://thechangelog.com/cement2-python-cli-framework-nears-beta/">Cement2, Python CLI framework nears beta</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/cement2-python-cli-framework-nears-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JazzLibs &#8211; Ruby CLI to rollout and manage JavaScript libraries</title>
		<link>http://thechangelog.com/jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra</link>
		<comments>http://thechangelog.com/jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 13:08:54 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra/</guid>
		<description><![CDATA[<p>JazzLibs is a small Ruby library from Paul Engel to stamp out a repository structure and manage JavaScript libraries. The simple Thor-based CLI unfurls a new project that includes: a source folder a demo folder and nice looking HTML page with your assets wired up default license Rakefile for managing releases The bundled Rakefile includes [...]</p><p>The post <a href="http://thechangelog.com/jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra/">JazzLibs &#8211; Ruby CLI to rollout and manage JavaScript libraries</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/archan937/jazz_libs">JazzLibs</a> is a small Ruby library from <a href="http://codehero.es/about_me">Paul Engel</a> to stamp out a repository structure and manage  JavaScript libraries. The simple <a href="https://github.com/wycats/thor">Thor</a>-based CLI unfurls a new project that includes:</p>

<ul><li>a source folder</li>
<li>a demo folder and nice looking HTML page with your assets wired up</li>
<li>default license</li>
<li>Rakefile for managing releases</li>
</ul>

<p><a href="https://github.com/archan937/jazz_libs"><img src="http://f.cl.ly/items/3B2u2i0Y3f3t1d0Z3u1j/Screen%20Shot%202011-10-17%20at%207.58.15%20AM.png" alt="Screenshot" /></a></p>

<p>The bundled Rakefile includes a <code>release</code> task that lets you easily version and deploy new versions of your script. Check out the <a href="https://github.com/archan937/jazz_libs">GitHub repo</a> to fork and contribute.</p>
<p>The post <a href="http://thechangelog.com/jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra/">JazzLibs &#8211; Ruby CLI to rollout and manage JavaScript libraries</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/jazzlibs-ruby-cli-to-rollout-and-manage-javascript-libra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>capt: Command line tool for creating Backbone.js apps</title>
		<link>http://thechangelog.com/capt-command-line-tool-for-creating-backbone-js-applicat/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=capt-command-line-tool-for-creating-backbone-js-applicat</link>
		<comments>http://thechangelog.com/capt-command-line-tool-for-creating-backbone-js-applicat/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 15:23:45 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/capt-command-line-tool-for-creating-backbone-js-applicat/</guid>
		<description><![CDATA[<p>If you set out to use Backbone.js for a client-centric application, one thing you might miss coming from a server-side MVC framework is some basic file structure, dependency managment, and generator support. To solve this problem Ben Nolan has created Capt. Capt is aimed at developers building single page, stand alone applications as well as [...]</p><p>The post <a href="http://thechangelog.com/capt-command-line-tool-for-creating-backbone-js-applicat/">capt: Command line tool for creating Backbone.js apps</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>If you set out to use <a href="http://thechangelog.com/post/1306791328/backbone-give-your-js-app-some-backbone-with-models-view">Backbone.js</a> for a client-centric application, one thing you might miss coming from a server-side MVC framework is some basic file structure, dependency managment, and generator support. To solve this problem <a href="https://twitter.com/bnolan">Ben Nolan</a> has created <a href="http://github.com/bnolan/capt">Capt</a>.</p>

<p>Capt is aimed at developers building single page, stand alone applications as well as server-backed applications using Node.js, bundling the following projects and languages:</p>

<h4>Languages</h4>

<ul><li>Coffeescript</li>
<li>JavaScript</li>
<li>SCSS</li>
<li>LESS</li>
</ul>

<h4>Testing frameworks</h4>

<ul><li>Qunit</li>
<li>Jasmine [planned]</li>
</ul>

<h4>Libraries</h4>

<ul><li>jQuery</li>
<li>Backbone.js</li>
<li>Underscore.js</li>
<li>json2.js</li>
</ul>

<h3>Installation</h3>

<p>You can grab Capt from <a href="http://npmjs.org">npm</a></p>

<pre><code>npm install capt
</code></pre>

<p>To check your installation and see usage help, just run <code>capt</code> in your
terminal:</p>

<p>Usage:</p>

<pre><code>capt new projectname 
  - create a new project

capt server
  - serve the current project on port 3000

capt watch
  - watch the current project and recompile as needed
</code></pre>

<p>There&#8217;s also generators to create Backbone models and controllers:</p>

<pre><code>capt generate model &lt;model name&gt;

capt generate controller &lt;controller name&gt;
</code></pre>

<p>Capt is still in alpha but is under active development. Got ideas? Why
not <a href="http://github.com/bnolan/capt">contribute</a>?</p>

<p>[<a href="http://github.com/bnolan/capt">Source on GitHub</a>] [<a href="http://bennolan.com/capt/">Web
site</a>]</p>
<p>The post <a href="http://thechangelog.com/capt-command-line-tool-for-creating-backbone-js-applicat/">capt: Command line tool for creating Backbone.js apps</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/capt-command-line-tool-for-creating-backbone-js-applicat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jsonpipe: Convert JSON to a UNIX-friendly line-based format using Python</title>
		<link>http://thechangelog.com/jsonpipe-convert-json-to-a-unix-friendly-line-based-form/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jsonpipe-convert-json-to-a-unix-friendly-line-based-form</link>
		<comments>http://thechangelog.com/jsonpipe-convert-json-to-a-unix-friendly-line-based-form/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 11:47:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/jsonpipe-convert-json-to-a-unix-friendly-line-based-form/</guid>
		<description><![CDATA[<p>As the web seems to be moving to JavaScript Object Notation over XML for data transfer, it&#8217;s nice to find tools to help you work with JSON from the command line. Changelog listener Jason Williams pointed us to JSON Pipe, a simple Python command line utility for visualizing JSON document structure. Installation and usage Install [...]</p><p>The post <a href="http://thechangelog.com/jsonpipe-convert-json-to-a-unix-friendly-line-based-form/">jsonpipe: Convert JSON to a UNIX-friendly line-based format using Python</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>As the web seems to be moving to <a href="http://json.org">JavaScript Object Notation</a> over XML for data transfer, it&#8217;s nice to find tools to help you work with JSON from the command line. Changelog listener <a href="https://twitter.com/#!/jasonjwwilliams">Jason Williams</a> pointed us to <a href="http://github.com/dvxhouse/jsonpipe">JSON Pipe</a>, a simple Python command line utility for visualizing JSON document structure.</p>

<h3>Installation and usage</h3>

<p>Install JSON Pipe via <a href="http://pypi.python.org/pypi/pip#downloads">pip</a></p>

<pre><code>pip install jsonpipe
</code></pre>

<p>Now we can <em>pipe</em> data into <code>jsonpipe</code> to see a breakdown of the structure of the document:</p>

<pre><code>$ echo '[{"a": [{"b": {"c": ["foo"]}}]}]' | jsonpipe
/   []
/0  {}
/0/a        []
/0/a/0      {}
/0/a/0/b    {}
/0/a/0/b/c  []
/0/a/0/b/c/0        "foo"
</code></pre>

<p>How about inspecting an <a href="http://npmjs.org">NPM</a> package?</p>

<pre><code>curl <a href="https://github.com/jashkenas/coffee-script/raw/master/package.json">https://github.com/jashkenas/coffee-script/raw/master/package.json</a> | jsonpipe

/ {}
/name "coffee-script"
/description  "Unfancy JavaScript"
/keywords []
/keywords/0 "javascript"
/keywords/1 "language"
/keywords/2 "coffeescript"
/keywords/3 "compiler"
/author "Jeremy Ashkenas"
/version  "1.1.0-pre"
/licenses []
/licenses/0 {}
/licenses/0/type  "MIT"
/licenses/0/url "http://github.com/jashkenas/coffee-script/raw/master/LICENSE"
/engines  {}
/engines/node "&gt;=0.2.5"
/directories  {}
/directories/lib  "./lib"
/main "./lib/coffee-script"
/bin  {}
/bin/coffee "./bin/coffee"
/bin/cake "./bin/cake"
/homepage "http://coffeescript.org"
/repository {}
/repository/type  "git"
/repository/url "git://github.com/jashkenas/coffee-script.git"
</code></pre>

<p>Since the output is regular STDOUT, JSON Pipe is <em>piping</em> hot:</p>

<pre><code>curl <a href="https://github.com/jashkenas/coffee-script/raw/master/package.json">https://github.com/jashkenas/coffee-script/raw/master/package.json</a> | jsonpipe | grep "homepage"

/homepage   "http://coffeescript.org"
</code></pre>

<p>JSON Pipe will show you the key/value structure of your JSON documents faster than you can say XPath.</p>

<p>[<a href="http://github.com/dvxhouse/jsonpipe">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/jsonpipe-convert-json-to-a-unix-friendly-line-based-form/">jsonpipe: Convert JSON to a UNIX-friendly line-based format using Python</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/jsonpipe-convert-json-to-a-unix-friendly-line-based-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>solarized: Light and dark precision color scheme for terminal apps, editors</title>
		<link>http://thechangelog.com/solarized-precision-color-scheme-for-multiple-applicatio/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solarized-precision-color-scheme-for-multiple-applicatio</link>
		<comments>http://thechangelog.com/solarized-precision-color-scheme-for-multiple-applicatio/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 21:34:23 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[VimL]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/solarized-precision-color-scheme-for-multiple-applicatio/</guid>
		<description><![CDATA[<p>We developers spend as much time finding the right color scheme for our text editors and command line tools as we do using them. Normally, you find your tool of choice and then browse the gallery of themes to pick one to use or customize. Ethan Schoonover has taken a different approach with Solarized, a [...]</p><p>The post <a href="http://thechangelog.com/solarized-precision-color-scheme-for-multiple-applicatio/">solarized: Light and dark precision color scheme for terminal apps, editors</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>We developers spend as much time finding the right color scheme for our text editors and command line tools as we do using them. Normally, you find your tool of choice and then browse the gallery of themes to pick one to use or customize.</p>

<p><a href="https://twitter.com/ethanschoonover">Ethan Schoonover</a> has taken a different approach with Solarized, a theme that comes with support for a number of tools out of the box including:</p>

<ul><li>Vim</li>
<li>Mutt e-mail client</li>
<li>Xresources / Xdefaults</li>
<li>iTerm2</li>
<li>OS X Terminal.app</li>
<li>Adobe Photoshop Palette (inc. L<em>a</em>b values)</li>
<li>Apple Color Picker Palette</li>
<li>GIMP Palette</li>
</ul>

<p><a href="http://ethanschoonover.com/solarized"><img src="http://github.com/altercation/solarized/raw/master/img/solarized-vim.png" alt="Sample" /></a></p>

<p>Never before has so much design gone into a color theme. Ethan supports both light and dark variations to support selective contrast and <a href="http://ethanschoonover.com/solarized#features">other features</a></p>

<p><a href="http://ethanschoonover.com/solarized"><img src="http://ethanschoonover.com/img/solarized/solarized-palette.png" alt="palette" /></a></p>

<p>There&#8217;s even a Sass implementation:</p>

<pre><code>$base03:    #002b36;
$base02:    #073642;
$base01:    #586e75;
$base00:    #657b83;
$base0:     #839496;
$base1:     #93a1a1;
$base2:     #eee8d5;
$base3:     #fdf6e3;
$yellow:    #b58900;
$orange:    #cb4b16;
$red:       #d30102;
$magenta:   #d33682;
$violet:    #6c71c4;
$blue:      #268bd2;
$cyan:      #2aa198;
$green:     #859900;
@mixin rebase($rebase03,$rebase02,$rebase01,$rebase00,$rebase0,$rebase1,$rebase2,$rebase3) 
{
    background-color:$rebase03;
    color:$rebase0;
    * { color:$rebase0; }
    h1,h2,h3,h4,h5,h6 { color:$rebase1; border-color: $rebase0; }
    a, a:active, a:visited { color: $rebase1; }
}
@mixin accentize($accent) {
    a, a:active, a:visited, code.url { color: $accent; }
    h1,h2,h3,h4,h5,h6 {color:$accent}
}
/* light is default mode, so pair with general html definition */
html, .light { @include rebase($base3,$base2,$base1,$base0,$base00,$base01,$base02,$base03)}
.dark  { @include rebase($base03,$base02,$base01,$base00,$base0,$base1,$base2,$base3)}
html * {
    color-profile: sRGB;
    rendering-intent: auto;
}
</code></pre>

<p>We didn&#8217;t see TextMate support. Perhaps you could <a href="http://github.com/altercation/solarized">fork the project</a> and contribute.</p>

<p>[<a href="http://github.com/altercation/solarized">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/solarized-precision-color-scheme-for-multiple-applicatio/">solarized: Light and dark precision color scheme for terminal apps, editors</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/solarized-precision-color-scheme-for-multiple-applicatio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>earthquake: Twitter terminal client with streaming API support</title>
		<link>http://thechangelog.com/earthquake-twitter-client-on-terminal-with-streaming-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=earthquake-twitter-client-on-terminal-with-streaming-api</link>
		<comments>http://thechangelog.com/earthquake-twitter-client-on-terminal-with-streaming-api/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 17:58:08 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/earthquake-twitter-client-on-terminal-with-streaming-api/</guid>
		<description><![CDATA[<p>As at least one observant Twitter user has noticed, I&#8217;m testing out a new Twitter client. Earthquake, from jugyo (十行), is a Command Line Interface Twitter client similar to Console Tweet but with support for Twitter&#8217;s Streaming API. Installation and usage To get started, install Earthquake via RubyGems: gem install earthquake The gem installs a [...]</p><p>The post <a href="http://thechangelog.com/earthquake-twitter-client-on-terminal-with-streaming-api/">earthquake: Twitter terminal client with streaming API support</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>As at least one observant Twitter user has noticed, I&#8217;m testing out a new Twitter client. <a href="https://github.com/jugyo/earthquake">Earthquake</a>, from <a href="https://github.com/jugyo">jugyo (十行)</a>, is a Command Line Interface Twitter client similar to <a href="https://github.com/seejohnrun/console_tweet">Console Tweet</a> but with support for Twitter&#8217;s <a href="http://dev.twitter.com/pages/streaming_api">Streaming API</a>.</p>

<p><img src="http://cl.ly/2k3x3d1W3L0c1m3f1K3n/Screen_shot_2011-03-21_at_12.39.38_PM.png" alt="screencap" /></p>

<h3>Installation and usage</h3>

<p>To get started, install Earthquake via RubyGems:</p>

<pre><code>gem install earthquake
</code></pre>

<p>The gem installs a command line application, invoked via <code>earthquake</code>. The first time you run the application, you&#8217;ll be redirected to Twitter in a new browser window to authorize the application and provide a PIN to enter into the Earthquake prompt to complete the OAuth setup:</p>

<pre><code>~ » earthquake                                                                        ~  
1) open: <a href="http://api.twitter.com/oauth/authorize?oauth_token=UF5HD9XH8pvAQtrhvQwpO0iZmyvLgJ8sGhEPdhLA">http://api.twitter.com/oauth/authorize?oauth_token=UF5HD9XH8pvAQtrhvQwpO0iZmyvLgJ8sGhEPdhLA</a>
2) Enter the PIN: 
</code></pre>

<p>Once authenticated, you&#8217;ll get a nifty lightning bolt prompt (⚡) from which you can tweet, search, even eval Ruby:</p>

<pre><code># tweet
⚡ Hello World!

# Search
⚡ :search #ruby

# Eval
⚡ :eval Time.now
</code></pre>

<p>As <a href="https://twitter.com/#!/roidrage">Mathias Meyer</a> was <a href="https://twitter.com/#!/roidrage/status/49886298701430785">nice to point out</a>, you&#8217;ll want to type <code>:exit</code> <a href="https://twitter.com/#!/pengwynn/status/49886223908614144">not <code>exit</code></a> to leave the application.</p>

<p>Be sure and check the <a href="http://github.com/jugyo/earthquake">README</a> for advanced usage and color customization.</p>

<h3>Earthquake for Node.js?</h3>

<p>Intrigued by my <code>exit</code> tweet, Changelog alum <a href="https://twitter.com/#!/creationix">Tim Caswell</a> wants to rebuild Earthquake  in Node.js and offered a <a href="https://gist.github.com/761639">fine start</a> in under thirty seconds.</p>

<p>[<a href="http://github.com/jugyo/earthquake">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/earthquake-twitter-client-on-terminal-with-streaming-api/">earthquake: Twitter terminal client with streaming API support</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/earthquake-twitter-client-on-terminal-with-streaming-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WatchWednesday for 20101006</title>
		<link>http://thechangelog.com/watchwednesday-20101006/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=watchwednesday-20101006</link>
		<comments>http://thechangelog.com/watchwednesday-20101006/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 19:29:38 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[growl]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[WatchWednesday]]></category>
		<category><![CDATA[ww]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/watchwednesday-20101006/</guid>
		<description><![CDATA[<p>Another WatchWednesday, is upon us. Here&#8217;s a quick list of projects you might have missed or you should watch. Commander TJ Holowaychuk&#8217;s latest projects seem to have a Node.js flavor, but TJ has released a ton of Ruby projects, too. Commander is a robust API for creating Ruby command line applications. Commander sits atop OptionParser, [...]</p><p>The post <a href="http://thechangelog.com/watchwednesday-20101006/">WatchWednesday for 20101006</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Another <a href="http://thechangelog.com/post/1167855730/watchwednesday-20100922">WatchWednesday</a>, is upon us.  Here&#8217;s a quick list of projects you might have missed or you should watch.</p>
<h4><a href="http://github.com/visionmedia/commander">Commander</a></h4>
<p><a href="http://github.com/visionmedia">TJ Holowaychuk</a>&#8217;s latest projects seem to have a Node.js flavor, but TJ has released a <a href="http://github.com/visionmedia">ton of Ruby projects</a>, too. <a href="http://github.com/visionmedia/commander">Commander</a> is a robust API for creating Ruby command line applications. Commander sits atop OptionParser, HighLine and other libraries you probably already use. It also supports formatters as well as text-to-speech and Growl support on MacOS. It even has support for nice looking terminal tables via TJ&#8217;s <a href="http://github.com/visionmedia/terminal-table">terminal-table</a> gem:</p>
<pre><code>+----------+-------+----+--------+-----------------------+
| Terminal | Table | Is | Wicked | Awesome               |
+----------+-------+----+--------+-----------------------+
|          |       |    |        | get it while its hot! |
+----------+-------+----+--------+-----------------------+
</code></pre>
<h4><a href="http://github.com/paulca/eyeballs.js">Eyeballs.js</a></h4>
<p><a href="http://github.com/paulca/eyeballs.js">Eyeballs</a> from <a href="http://github.com/paulca">Paul Campbell</a> is a lightweight JavaScript MVC framework that sits on top of jQuery or Prototype that provides features such as hash-based URL routing, data models, and local storage. A humorous feature of Eyeballs is the syntax and the &#8216;eep eep&#8217; function:</p>
<pre><code>// declare a model
o_O('Post', function(post){
  post.validates_presence_of('title')
})
</code></pre>
<p>You gotta love that. o_O</p>
<h4><a href="http://github.com/jondruse/screeninator">Screeninator</a></h4>
<p>Inspired by Arthur Chiu&#8217;s wildly popular <a href="http://thechangelog.com/post/1121940971/terminitor-automate-your-workflow">terminitor</a>, <a href="http://github.com/jondruse/screeninator">Jon Druse</a>&#8217;s <a href="http://github.com/jondruse/screeninator">Screeninator</a> orchestrates your <code>screen</code> sessions.</p>
<pre><code># ~/.screeninator/project_name.yml
# you can make as many tabs as you wish...

escape: ``
project_name: Screeninator
project_root: ~/code/rails_project
tabs:
  - shell: git pull
  - database: rails db
  - console: rails c
  - logs: 
    - cd logs
    - tail -f development.log
  - ssh: ssh me@myhost
</code></pre>
<h4><a href="http://github.com/scalatra/scalatra">Scalatra</a></h4>
<p><a href="http://github.com/scalatra/scalatra">Scalatra</a> is a Scala port of <a href="http://www.sinatrarb.com/">everyone&#8217;s favorite Ruby microframework</a>.</p>
<pre><code>package org.scalatra

class ScalatraExample extends ScalatraServlet {

  // send a text/html content type back each time
  before {
    contentType = "text/html"
  }

  // parse matching requests, saving things prefixed with ':' as params
  get("/date/:year/:month/:day") {
    &lt;ul&gt;
      &lt;li&gt;Year: {params("year")}&lt;/li&gt;
      &lt;li&gt;Month: {params("month")}&lt;/li&gt;
      &lt;li&gt;Day: {params("day")}&lt;/li&gt;
    &lt;/ul&gt;
  }

  // produce a simple HTML form
  get("/form") {
    &lt;form action='/post' method='POST'&gt;
      Post something: &lt;input name='submission' type='text'/&gt;
      &lt;input type='submit'/&gt;
    &lt;/form&gt;
  }

  ...
</code></pre>
<h4><a href="http://github.com/kangax/fabric.js">Fabric.js</a></h4>
<p>One of the cool things about SVG is the DOM API. <a href="http://github.com/kangax/fabric.js">Fabric.js</a> from <a href="http://github.com/kangax">Juriy Zaytsev</a> provides an <em>interactive object model</em> on top of the HTML5&#160;<code>&lt;canvas&gt;</code> element.</p>
<pre><code>&lt;canvas id="canvas" width="300" height="300"&gt;&lt;/canvas&gt;  
...

var canvas = new fabric.Element('canvas');

var rect = new fabric.Rect({
  top: 100,
  left: 100,
  width: 60,
  height: 70,
  fill: 'red'
});

canvas.add(rect);
</code></pre>
<p>Be sure and check out the extensive <a href="http://kangax.github.com/fabric.js/test/demo/">Fabric.js demo and sandbox</a>.</p>
<p>The post <a href="http://thechangelog.com/watchwednesday-20101006/">WatchWednesday for 20101006</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/watchwednesday-20101006/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optitron: Easily add option and command parsing to your Ruby CLI</title>
		<link>http://thechangelog.com/optitron-sensible-options-parsing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optitron-sensible-options-parsing</link>
		<comments>http://thechangelog.com/optitron-sensible-options-parsing/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 03:58:48 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/optitron-sensible-options-parsing/</guid>
		<description><![CDATA[<p>We love command line interfaces. We&#8217;ve written before about how we use the Tumblr gem to post to this site. If you want to add a nice CLI to your Ruby app, Joshua Hull from the Padrino team has released Optitron, an easy way to support option and command parsing. Install the gem gem install [...]</p><p>The post <a href="http://thechangelog.com/optitron-sensible-options-parsing/">Optitron: Easily add option and command parsing to your Ruby CLI</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>We love command line interfaces. We&#8217;ve <a href="http://thechangelog.com/post/919553603/a-new-look">written before</a> about how we use the <a href="http://github.com/mwunsch/tumblr">Tumblr gem</a> to post to this site. If you want to add a nice CLI to your Ruby app, <a href="http://github.com/joshbuddy">Joshua Hull</a> from the <a href="http://www.padrinorb.com/">Padrino</a> team has released <a href="http://github.com/joshbuddy/optitron">Optitron</a>, an easy way to support option and command parsing.</p>

<h4>Install the gem</h4>

<pre><code>gem install optitron
</code></pre>

<h4>A quick example</h4>

<pre><code>@parser = Optitron.new {
  opt 'verbose', "Be very loud"
  cmd "install", "This installs things" do
    arg "file", "The file to install"
  end
  cmd "show", "This shows things" do
    arg "first", "The first thing to show"
    arg "second", "The second optional thing to show", :required =&gt; false
  end
  cmd "kill", "This kills things" do
    opt "pids", "A list of pids to kill", :type =&gt; :array
    opt "pid", "A pid to kill", :type =&gt; :numeric
    opt "names", "Some sort of hash", :type =&gt; :hash
  end
  cmd "join", "This joins things" do
    arg "thing", "Stuff to join", :type =&gt; :greedy
  end
}
</code></pre>

<p>Then you can print those options with <code>@parser.help</code>:</p>

<pre><code>Commands

show [first] &lt;second&gt;          # This shows things
install [file]                 # This installs things
kill                           # This kills things
  -p/--pids=[ARRAY]            # A list of pids to kill
  -P/--pid=[NUMERIC]           # A pid to kill
  -n/--names=[HASH]            # Some sort of hash
join [thing1 thing2 ...]       # This joins things

Global options

-v/--verbose                   # Be very loud
</code></pre>

<p>Let&#8217;s see how Optitron parses inbound arguments</p>

<pre><code>response = @parser.parse(%w(-v install file))
response.command
=&gt; "install"
response.args
=&gt; ["file"]
response.params
=&gt; {"verbose" =&gt; true}
</code></pre>

<p>With four patch releases today, this gem is moving fast but one to keep an eye on.</p>

<p>[<a href="http://github.com/joshbuddy/optitron">Source on GitHub</a>]</p>
<p>The post <a href="http://thechangelog.com/optitron-sensible-options-parsing/">Optitron: Easily add option and command parsing to your Ruby CLI</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/optitron-sensible-options-parsing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tumblr-rb &#8211; Post to tumblr from the command line</title>
		<link>http://thechangelog.com/tumblr-rb-post-to-tumblr-from-the-command-line/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tumblr-rb-post-to-tumblr-from-the-command-line</link>
		<comments>http://thechangelog.com/tumblr-rb-post-to-tumblr-from-the-command-line/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 16:41:55 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[defunkt]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[tumblr]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/tumblr-rb-post-to-tumblr-from-the-command-line/</guid>
		<description><![CDATA[<p>tumblr-rb from Mark Wunsch is a cool new Ruby wrapper for Tumblr, the blogging service that powers The Changelog. While not the first Ruby wrapper for Tumblr, nor even the first with CLI support, tumblr-rb is the first we know of to support YAML front-matter. YAML front-matter isn&#8217;t a special part of your brain, rather [...]</p><p>The post <a href="http://thechangelog.com/tumblr-rb-post-to-tumblr-from-the-command-line/">tumblr-rb &#8211; Post to tumblr from the command line</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://rubygems.org/gems/tumblr-rb">tumblr-rb</a> from <a href="http://twitter.com/markwunsch">Mark Wunsch</a> is a cool new Ruby wrapper for <a href="http://tumblr.com">Tumblr</a>, the blogging service that powers The Changelog. While <a href="http://rubygems.org/search?query=tumblr">not the first Ruby wrapper for Tumblr</a>, nor even the <a href="http://github.com/ahoward/tumblr">first with CLI support</a>, tumblr-rb is the first we know of to support YAML front-matter.</p>

<p>YAML front-matter isn&#8217;t a special part of your brain, rather it&#8217;s YAML formatted meta-data at the top of a text file, a pattern made popular by <a href="http://github.com/twp/webby">Webby</a>, <a href="http://github.com/mojombo/jekyll">Jekyll</a>, <a href="http://nanoc.stoneship.org/">Nanoc</a>, and other static-ish publishing tools:</p>

<pre><code>---
title: The Tumblr Gem
state: queue
format: markdown
tags: Ruby, Tumblr, Weary
slug: tumblr-rb
---


You can also give it a URL:

  $ tumblr <a href="http://mwunsch.github.com/tumblr/tumblr.1.html">http://mwunsch.github.com/tumblr/tumblr.1.html</a>

That will create a _Link_ post on Tumblr pointing to the `tumblr` manpage.
</code></pre>

<p>Another cool thing about tumblr-rb is how Mark has employed <a href="http://defunkt.github.com/">Chris Wanstrath&#8217;s</a> new <a href="http://github.com/defunkt/gem-man">gem-man</a> (Changelog article forthcoming) to create <a href="http://mwunsch.github.com/tumblr/tumblr.1.html">awesome looking man pages</a> for the gem.</p>

<p>Tumblr is about removing the friction from blogging workflow. If you spend any time in the terminal, tumblr-rb takes it even farther.</p>

<p>[<a href="http://github.com/mwunsch/tumblr">Source on GitHub</a>] [<a href="http://mwunsch.tumblr.com">Marks&#8217; Tumblog</a>]</p>
<p>The post <a href="http://thechangelog.com/tumblr-rb-post-to-tumblr-from-the-command-line/">tumblr-rb &#8211; Post to tumblr from the command line</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/tumblr-rb-post-to-tumblr-from-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ghost means never having to touch /etc/hosts again</title>
		<link>http://thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ghost-means-never-having-to-touch-etc-hosts-again</link>
		<comments>http://thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 05:24:16 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/</guid>
		<description><![CDATA[<p>Ghost from Bodaniel Jeanes is a Ruby gem that lets you manage your local host names without futzing with /etc/hosts. To install: gem install ghost And then from the command line: $ ghost add mydevsite.local [Adding] mydevsite.local -&#62; 127.0.0.1 $ ghost add staging-server.local 67.207.136.164 [Adding] staging-server.local -&#62; 67.207.136.164 $ ghost list Listing 2 host(s): mydevsite.local [...]</p><p>The post <a href="http://thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/">Ghost means never having to touch /etc/hosts again</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://github.com/bjeanes/ghost">Ghost</a> from <a href="http://github.com/bjeanes">Bodaniel Jeanes</a> is a Ruby gem that lets you manage your local host names without futzing with /etc/hosts.</p>

<p>To install:</p>

<pre><code>gem install ghost
</code></pre>

<p>And then from the command line:</p>

<pre><code>$ ghost add mydevsite.local
  [Adding] mydevsite.local -&gt; 127.0.0.1

$ ghost add staging-server.local 67.207.136.164
  [Adding] staging-server.local -&gt; 67.207.136.164

$ ghost list
Listing 2 host(s):
  mydevsite.local      -&gt; 127.0.0.1
  staging-server.local -&gt; 67.207.136.164

$ ghost delete mydevsite.local
  [Deleting] mydevsite.local
</code></pre>

<p>Aside from basic <code>list</code>, <code>add</code>, and <code>delete</code> options, Ghost provides powerful <code>import</code> and <code>delete_matching</code> operations to import files or delete entries based on pattern matching.</p>

<p>Check out <a href="http://github.com/bjeanes/ghost">the source</a> on GitHub.</p>

<p><em>UPDATE:</em> <a href="/ghost-means-never-having-to-touch-sshconfig-again/">We covered ghost-ssh</a>, a hidden feature of <code>ghost</code> which lets you manipulate your <code>~/.ssh/config</code> file as well.</p>
<p>The post <a href="http://thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/">Ghost means never having to touch /etc/hosts again</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/ghost-means-never-having-to-touch-etc-hosts-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prism &#8211; command line and Ruby library parser for Microformats</title>
		<link>http://thechangelog.com/prism-command-line-ruby-parser-for-microformats/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=prism-command-line-ruby-parser-for-microformats</link>
		<comments>http://thechangelog.com/prism-command-line-ruby-parser-for-microformats/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 03:45:55 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[scraping]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/prism-command-line-ruby-parser-for-microformats/</guid>
		<description><![CDATA[<p>Prism from Mark Wunsch is a cool Ruby library and command line tool for parsing Microformats. It even supports vCard export: twitter_contacts = Prism.find 'http://twitter.com/markwunsch', :hcard me = twitter_contacts.first me.fn #=&#62; "Mark Wunsch" me.n.family_name #=&#62; "Wunsch" me.url #=&#62; "http://markwunsch.com/" File.open('mark.vcf','w') {&#124;f&#124; f.write me.to_vcard } ## Add me to your address book! Or if the command [...]</p><p>The post <a href="http://thechangelog.com/prism-command-line-ruby-parser-for-microformats/">Prism &#8211; command line and Ruby library parser for Microformats</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Prism from <a href="http://github.com/mwunsch">Mark Wunsch</a> is a cool Ruby library and command line tool for parsing <a href="http://microformats.org">Microformats</a>. It even supports vCard export:</p>

<pre><code>twitter_contacts = Prism.find 'http://twitter.com/markwunsch', :hcard
me = twitter_contacts.first
me.fn
#=&gt; "Mark Wunsch"
me.n.family_name
#=&gt; "Wunsch"
me.url
#=&gt; "http://markwunsch.com/"
File.open('mark.vcf','w') {|f| f.write me.to_vcard }
## Add me to your address book!
</code></pre>

<p>Or if the command line is your bag:</p>

<pre><code>$: prism --hcard <a href="http://markwunsch.com">http://markwunsch.com</a> &gt; ~/Desktop/me.vcf
</code></pre>

<p>or using STDIN and cURL:</p>

<pre><code>$: curl <a href="http://markwunsch.com">http://markwunsch.com</a> | prism --hcard &gt; ~/Desktop/me.vcf
</code></pre>

<p>Prism also includes a DSL for parsing your own <a href="http://microformats.org/wiki/posh">POSH</a> formats:</p>

<pre><code>class Navigation &lt; Prism::POSH::Base
    search {|document| document.css('ul#navigation') }
    # Search a Nokogiri document for nodes of a certain type

    validate {|node| node.matches?('ul#navigation') }
    # Validate that a node is the right element we want

    has_many :items do
        search {|doc| doc.css('li') }
    end
    # has_many and has_one define properties, which themselves inherit from
    # Prism::POSH::Base, so you can do :has_one, :has_many, :search, :extract, etc.
end
</code></pre>

<p>[<a href="http://github.com/mwunsch/prism">Source on GitHub</a>] [<a href="http://rdoc.info/projects/mwunsch/prism">Docs</a>] [<a href="http://twitter.com/markwunsch">Mark Wunsch on Twitter</a>]</p>
<p>The post <a href="http://thechangelog.com/prism-command-line-ruby-parser-for-microformats/">Prism &#8211; command line and Ruby library parser for Microformats</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/prism-command-line-ruby-parser-for-microformats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>aruba &#8211; Cucumber steps for testing your command line apps</title>
		<link>http://thechangelog.com/aruby-cucumber-from-the-command-line/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aruby-cucumber-from-the-command-line</link>
		<comments>http://thechangelog.com/aruby-cucumber-from-the-command-line/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 03:14:00 +0000</pubDate>
		<dc:creator>Wynn Netherland</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/aruby-cucumber-from-the-command-line/</guid>
		<description><![CDATA[<p>Terminal junkies rejoice! Now you can use Cucumber to test your command line interfaces just like you do for your web apps. Aruba from Cucumber creator Aslak Hellesøy provides familiar step definitions for testing output, exit statuses, and file system commands. Here&#8217;s an example feature file for testing exit statuses: Feature: exit statuses In order [...]</p><p>The post <a href="http://thechangelog.com/aruby-cucumber-from-the-command-line/">aruba &#8211; Cucumber steps for testing your command line apps</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Terminal junkies rejoice! Now you can use <a href="http://cukes.info">Cucumber</a> to test your command line interfaces just like you do for your web apps. <a href="http://github.com/cucumber/aruba">Aruba</a> from Cucumber creator <a href="http://github.com/aslakhellesoy">Aslak Hellesøy</a> provides familiar step definitions for testing output, exit statuses, and file system commands. Here&#8217;s an example feature file for testing exit statuses:</p>

<pre><code>Feature: exit statuses

  In order to specify expected exit statuses
  As a developer using Cucumber
  I want to use the "the exit status should be" step

  Scenario: exit status of 0
    When I run "ruby -h"
    Then the exit status should be 0

  Scenario: non-zero exit status
    When I run "ruby -e 'exit 56'"
    Then the exit status should be 56
</code></pre>

<p>Aruba provides the exit status step:</p>

<pre><code>Then /^the exit status should be (\d+)$/ do |exit_status|
  @last_exit_status.should == exit_status.to_i
end
</code></pre>

<p>To use Aruba just install the gem</p>

<pre><code>sudo gem install aruba
</code></pre>

<p>and then require it in your <code>env.rb</code> or any file under <code>features/support</code></p>

<pre><code>require 'aruba'
</code></pre>

<p>Check out <a href="http://github.com/cucumber/aruba">the source</a> on GitHub or <a href="http://cukes.info">the Cucumber homepage</a> for more info.</p>
<p>The post <a href="http://thechangelog.com/aruby-cucumber-from-the-command-line/">aruba &#8211; Cucumber steps for testing your command line apps</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/aruby-cucumber-from-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>things-rb: Ruby lib &amp; CLI for Things (mac)</title>
		<link>http://thechangelog.com/things-rb-ruby-lib-cli-for-things-mac/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=things-rb-ruby-lib-cli-for-things-mac</link>
		<comments>http://thechangelog.com/things-rb-ruby-lib-cli-for-things-mac/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 12:39:00 +0000</pubDate>
		<dc:creator>Adam Stacoviak</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[things]]></category>

		<guid isPermaLink="false">http://new.thechangelog.com/things-rb-ruby-lib-cli-for-things-mac/</guid>
		<description><![CDATA[<p>A fellow Rubist and good friend Andy Shen had a conversation on Twitter with another fellow Rubist Josh Price about Things, the Mac GTD application for the Desktop and iPhone. What they probably didn&#8217;t know is that there&#8217;s a Ruby library &#38; CLI tool for accessing the back-end of Things Open Sourced on GitHub. There [...]</p><p>The post <a href="http://thechangelog.com/things-rb-ruby-lib-cli-for-things-mac/">things-rb: Ruby lib &amp; CLI for Things (mac)</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>A fellow Rubist and good friend <a href="http://twitter.com/shenie">Andy Shen</a> had a conversation on Twitter with another fellow Rubist <a href="http://twitter.com/joshprice">Josh Price</a> about <a href="http://culturedcode.com/things/">Things</a>, the Mac GTD application for the Desktop and iPhone.</p>

<p><img src="http://farm5.static.flickr.com/4032/4297630426_f715cf9a02_o.jpg" alt="Screenshot" /></p>

<p>What they probably didn&#8217;t know is that there&#8217;s a Ruby library &amp; CLI tool for accessing the back-end of Things Open Sourced on GitHub.</p>

<p>There are number of reasons why you&#8217;d use a command line version of Things, including:</p>

<ol><li>You&#8217;re a geek and you like using Terminal and the command line</li>
<li>You don&#8217;t need to keep &#8220;Things&#8221; running all the time</li>
<li>You can access your todo&#8217;s remotely via SSH (even from a Windows or Linux box)</li>
<li>Use <a href="http://projects.tynsoe.org/en/geektool/">GeekTool</a> to keep your todo&#8217;s on the desktop</li>
</ol>

<p>Example from the <a href="http://github.com/haraldmartin/things-rb#readme">README</a>:</p>

<pre><code>things = Things.new # will use Things' default database location. 
# things = Things.new(:database =&gt; '/path/to/Database.xml')

tasks = things.today.map do |task|
  tags    = "(#{task.tags.join(' ')})" if task.tags?
  project = "[#{task.parent}]" if task.parent?
  [task.bullet, task.title, tags, project].compact.join(" ")
end

puts tasks.compact.sort.join("n")
</code></pre>

<p>[<a href="http://github.com/haraldmartin/things-rb">Source on GitHub</a>] [<a href="http://github.com/haraldmartin/things-rb#readme">README</a>]</p>
<p>The post <a href="http://thechangelog.com/things-rb-ruby-lib-cli-for-things-mac/">things-rb: Ruby lib &amp; CLI for Things (mac)</a> appeared first on <a href="http://thechangelog.com">The Changelog</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://thechangelog.com/things-rb-ruby-lib-cli-for-things-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
