<?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:media="http://search.yahoo.com/mrss/" version="2.0"><channel><description>Episode 0.3.3 - Node Knockout
            Micheil and Wynn caught up with Gerad and Visnu from the Node Knockout to talk about the 48 hour Node.js development competition and its entries.
            Go to episode</description><title>The Changelog - Open Source moves fast. Keep up.</title><generator>Tumblr (3.0; @thechangelog)</generator><link>http://thechangelog.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thechangelog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="thechangelog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">thechangelog</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item><title>cached-commons: API for Common Javascripts and Stylesheets Cached and Optimized</title><description>&lt;a href="http://github.com/viatropos/cached-commons"&gt;cached-commons: API for Common Javascripts and Stylesheets Cached and Optimized&lt;/a&gt;: &lt;p&gt;You probably already use Google’s &lt;a href="http://code.google.com/apis/libraries/"&gt;AJAX Libraries&lt;/a&gt; as a CDN for your JavaScripts. But what do you do when Google is slow to add &lt;a href="http://www.modernizr.com/"&gt;your favorite JavaScript library&lt;/a&gt;? &lt;a href="http://github.com/viatropos"&gt;Lance Pollard&lt;/a&gt; has created &lt;a href="http://cachedcommons.org/"&gt;Cached Commons&lt;/a&gt;, an API for common Javascripts and stylesheets, cached and optimized on GitHub’s CDN.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://cachedcommons.org/"&gt;&lt;img src="http://cl.ly/0ca86f7cb1e9ddbaee41/content" alt="Screenshot"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cached Commons lists dozens of scripts under categories like visualization, Ajax, syntax highlighting, HTML5, Flash, and testing, complete with links to project sources, demos, even documenation. Don’t see a script you want? Just fork the project and your script for everyone to share.&lt;/p&gt;

&lt;p&gt;It looks like CSS libraries are on the TODO list, just like I had asked of Google in &lt;a href="http://wynn.fm/032"&gt;Episode 0.3.2&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/viatropos/cached-commons"&gt;Source on GitHub&lt;/a&gt;] [&lt;a href="http://cachedcommons.org/"&gt;Homepage&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Rw4msSNWy7M:8mlEaCil-7w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Rw4msSNWy7M:8mlEaCil-7w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Rw4msSNWy7M:8mlEaCil-7w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=Rw4msSNWy7M:8mlEaCil-7w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Rw4msSNWy7M:8mlEaCil-7w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Rw4msSNWy7M:8mlEaCil-7w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=Rw4msSNWy7M:8mlEaCil-7w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1047967476</link><guid>http://thechangelog.com/post/1047967476</guid><pubDate>Wed, 01 Sep 2010 09:10:00 -0500</pubDate><category>github</category><category>javascript</category><category>cdn</category><category>performance</category></item><item><title>Mastering Node: Open source eBook for Node.js</title><description>&lt;a href="http://github.com/visionmedia/masteringnode"&gt;Mastering Node: Open source eBook for Node.js&lt;/a&gt;: &lt;p&gt;&lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; is for more than just code you know. It’s a great collaboration tool for hackers. &lt;a href="http://github.com/nex3"&gt;Nathan&lt;/a&gt;, &lt;a href="http://github.com/chriseppstein"&gt;Chris&lt;/a&gt;, and I use GitHub as a big part of our workflow for our upcoming &lt;a href="http://twitter.com/ManningBooks/status/22554856352"&gt;book&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/visionmedia"&gt;TJ&lt;/a&gt; (do we really have to say his last name by now?), of &lt;a href="http://expressjs.com/"&gt;Express&lt;/a&gt; and now &lt;a href="http://thechangelog.com/post/866734244/episode-0-3-0-sencha-touch-with-david-kaneda"&gt;Sencha&lt;/a&gt; wants you to &lt;a href="http://visionmedia.github.com/masteringnode/"&gt;Master Node.js&lt;/a&gt; by reading and hacking on his own community-driven ebook.&lt;/p&gt;

&lt;p&gt;The book will walk you through Node step-by-step from installation to topics like &lt;code&gt;EventEmitter&lt;/code&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Typically an object inherits from EventEmitter, however our small example below illustrates the api. First we create an emitter, after which we can define any number of callbacks using the emitter.on() method which accepts the name of the event, and arbitrary objects passed as data. When emitter.emit() is called we are only required to pass the event name, followed by any number of arguments, in this case the first and last name strings.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;var EventEmitter = require('events').EventEmitter;

var emitter = new EventEmitter;

emitter.on('name', function(first, last){
    console.log(first + ', ' + last);
});

emitter.emit('name', 'tj', 'holowaychuk');
emitter.emit('name', 'simon', 'holowaychuk');
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Go ahead, &lt;a href="http://github.com/visionmedia/masteringnode"&gt;fork it&lt;/a&gt;, contribute, and add &lt;a href="http://en.wikipedia.org/wiki/EPUB"&gt;ePub&lt;/a&gt; support.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/visionmedia/masteringnode"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xZBATeBOr10:XdkIVvPQj4M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xZBATeBOr10:XdkIVvPQj4M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xZBATeBOr10:XdkIVvPQj4M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=xZBATeBOr10:XdkIVvPQj4M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xZBATeBOr10:XdkIVvPQj4M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xZBATeBOr10:XdkIVvPQj4M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=xZBATeBOr10:XdkIVvPQj4M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1045763455</link><guid>http://thechangelog.com/post/1045763455</guid><pubDate>Tue, 31 Aug 2010 22:18:00 -0500</pubDate><category>github</category><category>node-js</category><category>javascript</category><category>ebooks</category><category>books</category></item><item><title>Episode 0.3.3 - Node Knockout</title><description>&lt;a href="http://changelogshow.com/105/15389-episode-0-3-3-node-knockout"&gt;Episode 0.3.3 - Node Knockout&lt;/a&gt;: &lt;p&gt;Micheil and Wynn caught up with Gerad and Visnu from the Node Knockout to talk about the 48 hour Node.js development competition and its entries.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://changelogshow.com/105/15389-episode-0-3-3-node-knockout.mp3"&gt;Download MP3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Items mentioned in the show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://lonestarrubyconf.com"&gt;Lone Star Ruby Conference&lt;/a&gt; - Texas’ regional Ruby conference in Austin&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://twitter.com/mperham"&gt;Mike Perham&lt;/a&gt; - The awesome Rubyist whose name gives Wynn fits&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://nodeknockout.com"&gt;Node Knockout&lt;/a&gt; - The 48 hour Node.js coding competition&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://railsrumble.com"&gt;Rails Rumble&lt;/a&gt; - Ruby’s own 48 hour coding bash&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://twitter.com/gerad"&gt;Gerad&lt;/a&gt; - of Gerad &amp; Visnu, the “data-y” and “product-y” guy&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://twitter.com/visnup"&gt;Visnu&lt;/a&gt; - the “developer-y” and “designer-y” guy&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://fortnightlabs.com/"&gt;Fortnight Labs&lt;/a&gt; - the proper name for Gerad &amp; Visnu, Inc.&lt;/li&gt;
&lt;li&gt;List of great &lt;a href="http://nodeknockout.com/judging"&gt;Node Knockout Judges&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://joyent.com"&gt;Joyent&lt;/a&gt; &amp; &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt; are great places to host your Node.js apps.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://expressjs.com/"&gt;Express&lt;/a&gt; High performance, high class web development for Node.js&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://senchalabs.github.com/connect/"&gt;Connect&lt;/a&gt; - high performance middleware framework for node featuring robust middleware for serving static files, advanced routing, cookie and session implementations, error handling and much more.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://npmjs.org/"&gt;npm&lt;/a&gt; is a package manager for node. You can use it to install and publish your node programs. It manages dependencies and does other cool stuff.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://github.com/dannycoates/node-inspector"&gt;Node Inspector&lt;/a&gt; is a web inspector based Node.js debugger &lt;/li&gt;
&lt;li&gt;
&lt;a href="http://socket.io"&gt;Socket.io&lt;/a&gt; - Websockets toolkit covered in &lt;a href="http://wynn.fm/031"&gt;0.3.1&lt;/a&gt; and used in so many contest entries&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://nodeknockout.com/teams"&gt;Go vote&lt;/a&gt; for your favorite entries!&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=RTUYwBIXRV4:0sV0tXbvq7o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=RTUYwBIXRV4:0sV0tXbvq7o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=RTUYwBIXRV4:0sV0tXbvq7o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=RTUYwBIXRV4:0sV0tXbvq7o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=RTUYwBIXRV4:0sV0tXbvq7o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=RTUYwBIXRV4:0sV0tXbvq7o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=RTUYwBIXRV4:0sV0tXbvq7o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1044286279</link><guid>http://thechangelog.com/post/1044286279</guid><pubDate>Tue, 31 Aug 2010 16:53:00 -0500</pubDate><category>episode</category><category>node-js</category><category>javascript</category><category>ruby</category><category>rails</category><category>contests</category><category>competitions</category><enclosure url="http://changelogshow.com/105/15389-episode-0-3-3-node-knockout.mp3" length="11536749" type="audio/mpeg" /><media:content url="http://changelogshow.com/105/15389-episode-0-3-3-node-knockout.mp3" fileSize="11536749" type="audio/mpeg" /></item><item><title>dalli: High performance memcached client for Ruby</title><description>&lt;a href="http://github.com/mperham/dalli"&gt;dalli: High performance memcached client for Ruby&lt;/a&gt;: &lt;p&gt;After maintaining &lt;a href="http://rubygems.org/gems/memcache-client"&gt;memcached-client&lt;/a&gt; for a couple of years, Mike Perham decided it was time to build a new Ruby client for Memcached from the ground up. &lt;a href="http://github.com/mperham/dalli"&gt;Dalli&lt;/a&gt; aims to be a simpler, high performance client for  &lt;a href="http://memcached.org/"&gt;Memcached&lt;/a&gt; the simple, ultra-fast in-memory key value store.&lt;/p&gt;

&lt;p&gt;Among the improvements in Dalli:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use of the faster binary Memcached protocol vs. the slower text protocol&lt;/li&gt;
&lt;li&gt;Almost 500 fewer lines of Ruby&lt;/li&gt;
&lt;li&gt;Monitoring hooks for tools like &lt;a href="http://newrelic.com"&gt;New Relic&lt;/a&gt; and &lt;a href="http://github.com/brynary/rack-bug"&gt;Rack::Bug&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SASL support for managed environments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, just install the gem&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo gem install dalli
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can then write to and read from your cache:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require 'dalli'
dc = Dalli::Client.new('localhost:11211')
dc.set('abc', 123)
value = dc.get('abc')
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;[&lt;a href="http://github.com/mperham/dalli"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=XnZYQgcDSn4:afXc_ZdvMQk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=XnZYQgcDSn4:afXc_ZdvMQk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=XnZYQgcDSn4:afXc_ZdvMQk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=XnZYQgcDSn4:afXc_ZdvMQk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=XnZYQgcDSn4:afXc_ZdvMQk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=XnZYQgcDSn4:afXc_ZdvMQk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=XnZYQgcDSn4:afXc_ZdvMQk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1042548400</link><guid>http://thechangelog.com/post/1042548400</guid><pubDate>Tue, 31 Aug 2010 09:17:00 -0500</pubDate><category>github</category><category>ruby</category><category>cache</category><category>performance</category></item><item><title>High Quality MySQL driver for Node</title><description>&lt;a href="http://github.com/felixge/node-mysql"&gt;High Quality MySQL driver for Node&lt;/a&gt;: &lt;p&gt;Now that Felix Geisendörfer launched his node powered site &lt;a href="http://transloadit.com"&gt;&lt;a href="http://transloadit.com"&gt;http://transloadit.com&lt;/a&gt;&lt;/a&gt;, he’s tacked the much needed task of writing a high quality MySQL protocol implementation in pure JavaScript.&lt;/p&gt;

&lt;p&gt;Using the high performance networking capabilities of node, and the awesome speed of V8, it’s now feasible to implement binary network protocols without resorting to writing C++ extensions and wrapping blocking APIs in thread pools.&lt;/p&gt;

&lt;p&gt;Felix is a great programmer, but could use some help in the form of sponsorship and/or patches.  We all win when high quality drivers are written and shared with the community.&lt;/p&gt;

&lt;h4&gt;Design Goals&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;TDD: All code is written using test driven development, code coverage should approach 100%&lt;/li&gt;
&lt;li&gt;Simplicity: The MySQL protocol is easy, a good parser should reflect that&lt;/li&gt;
&lt;li&gt;Efficiency: Use fast algorithms, buffers and as little memory as possible.&lt;/li&gt;
&lt;li&gt;Portability: Should run anywhere node runs&lt;/li&gt;
&lt;li&gt;Completeness: The goal is to support the full MySQL API.&lt;/li&gt;
&lt;li&gt;Compatibility: MySql &gt;= 4.1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the code and more info on his &lt;a href="http://github.com/felixge/node-mysql"&gt;git repo&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=izd8D_Qbdvg:vauJHKWen6M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=izd8D_Qbdvg:vauJHKWen6M:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=izd8D_Qbdvg:vauJHKWen6M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=izd8D_Qbdvg:vauJHKWen6M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=izd8D_Qbdvg:vauJHKWen6M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=izd8D_Qbdvg:vauJHKWen6M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=izd8D_Qbdvg:vauJHKWen6M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1007417500</link><guid>http://thechangelog.com/post/1007417500</guid><pubDate>Wed, 25 Aug 2010 00:34:36 -0500</pubDate><category>github</category><category>mysql</category><category>nodejs</category><category>database</category></item><item><title>Git Extras: Helpful tools for Git</title><description>&lt;a href="http://github.com/visionmedia/git-extras"&gt;Git Extras: Helpful tools for Git&lt;/a&gt;: &lt;p&gt;If you’ve ever been working heavily on a project that uses git, you’d know, that sometimes it’s good to have a few extras to help you out, and that’s what &lt;a href="http://github.com/visionmedia/"&gt;TJ Holowaychuk&lt;/a&gt;’s recent project &lt;a href="http://github.com/visionmedia/git-extras"&gt;git-extras&lt;/a&gt; provides!&lt;/p&gt;

&lt;p&gt;Currently git-extras includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;git summary&lt;/li&gt;
&lt;li&gt;git changelog&lt;/li&gt;
&lt;li&gt;git commits-since&lt;/li&gt;
&lt;li&gt;git count&lt;/li&gt;
&lt;li&gt;git delete-branch&lt;/li&gt;
&lt;li&gt;git delete-tag&lt;/li&gt;
&lt;li&gt;git ignore&lt;/li&gt;
&lt;li&gt;git release&lt;/li&gt;
&lt;li&gt;git contrib&lt;/li&gt;
&lt;li&gt;git repl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most cover tasks such as counting commit contributions, or viewing commits based on time, others include changelog generation based on commits and quickly adding items to the .git-ignore file. The extras are also quite easy to install, just clone the repository, then &lt;code&gt;[sudo] make install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/visionmedia/git-extras"&gt;source on github&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=UdFajUW-EeM:ZSiOhzK7yl0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=UdFajUW-EeM:ZSiOhzK7yl0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=UdFajUW-EeM:ZSiOhzK7yl0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=UdFajUW-EeM:ZSiOhzK7yl0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=UdFajUW-EeM:ZSiOhzK7yl0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=UdFajUW-EeM:ZSiOhzK7yl0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=UdFajUW-EeM:ZSiOhzK7yl0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1006950102</link><guid>http://thechangelog.com/post/1006950102</guid><pubDate>Tue, 24 Aug 2010 22:46:00 -0500</pubDate><category>Extensions</category><category>git</category><category>github</category><category>tools</category></item><item><title>Selene: Asynchronous SSL/TLS</title><description>&lt;a href="http://github.com/pquerna/selene"&gt;Selene: Asynchronous SSL/TLS&lt;/a&gt;: &lt;p&gt;A common issue when working with SSL/TLS libraries is that they are synchronous, you ask the library to do something, then have to wait for it to finish before you can do anything else, Selene by &lt;a href="http://github.com/pquerna"&gt;Paul Querna&lt;/a&gt; aims to change this.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/pquerna/selene"&gt;Selene&lt;/a&gt; is an C library that sits on top of your SSL/TLS library — currently only &lt;a href="http://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; is supported — providing an asynchronous API for interacting with it. Currently selene is in an early stage of development, but aims towards the following goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Completely Asynchronous: it does no IO itself, but provides notifications that IO should be done.&lt;/li&gt;
&lt;li&gt;Test Driven Development: A test framework to test all code paths.&lt;/li&gt;
&lt;li&gt;Pluggable Backends for Cryptography: Currently only focusing on OpenSSL, but others are possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Selene is definitely something that you are probably going to want to checkout if you’re working with SSL/TLS and want to get the best performance and throughput possible.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/pquerna/selene"&gt;Source on Github&lt;/a&gt;] [&lt;a href="http://groups.google.com/group/selene-dev?pli=1"&gt;Mailing List&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Q4NOXD2zj68:AIYvF836tzI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Q4NOXD2zj68:AIYvF836tzI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Q4NOXD2zj68:AIYvF836tzI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=Q4NOXD2zj68:AIYvF836tzI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Q4NOXD2zj68:AIYvF836tzI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=Q4NOXD2zj68:AIYvF836tzI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=Q4NOXD2zj68:AIYvF836tzI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/1007194584</link><guid>http://thechangelog.com/post/1007194584</guid><pubDate>Tue, 24 Aug 2010 00:00:00 -0500</pubDate><category>github</category><category>ssl</category><category>tls</category><category>security</category><category>async</category><category>c</category></item><item><title>GithubFinder: JavaScript-powered Github repo browser</title><description>&lt;a href="http://github.com/sr3d/GithubFinder"&gt;GithubFinder: JavaScript-powered Github repo browser&lt;/a&gt;: &lt;p&gt;For those times you need to quickly browse a GitHub repo but don’t want to clone it locally, check out &lt;a href="http://github.com/sr3d/GithubFinder"&gt;GitHubFinder&lt;/a&gt; from &lt;a href="http://github.com/sr3d"&gt;Alex Le&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cl.ly/c8768e18fed3dd7dc410/content" alt="Screenshot"/&gt;&lt;/p&gt;

&lt;p&gt;Modeled after the Mac OSX finder, GitHubFinder provides a familiar drill-down navigation to browse all the files in a given repo. The project has a plugin-based architecture for extensibility and includes keyboard navigation, file diffs, basic syntax highlighting, and a resizable, panel-based interface out of the box.&lt;/p&gt;

&lt;p&gt;Written in JavaScript as part of the &lt;a href="http://10k.aneventapart.com/"&gt;10K Apart Contest&lt;/a&gt;, the app uses the same &lt;a href="http://develop.github.com/"&gt;JSONP API&lt;/a&gt; we use here on The Changelog and weighs in at just 8.5KB compressed. Bravo, Alex!&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/sr3d/GithubFinder"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=WjhuE8pn80A:pKKQUI2ddD4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=WjhuE8pn80A:pKKQUI2ddD4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=WjhuE8pn80A:pKKQUI2ddD4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=WjhuE8pn80A:pKKQUI2ddD4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=WjhuE8pn80A:pKKQUI2ddD4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=WjhuE8pn80A:pKKQUI2ddD4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=WjhuE8pn80A:pKKQUI2ddD4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/995873400</link><guid>http://thechangelog.com/post/995873400</guid><pubDate>Sun, 22 Aug 2010 21:23:00 -0500</pubDate><category>github</category><category>10k</category><category>javascript</category><category>tools</category></item><item><title>slablet: Stylish CSS layout for iPad and more</title><description>&lt;a href="http://github.com/fellowshiptech/slablet"&gt;slablet: Stylish CSS layout for iPad and more&lt;/a&gt;: &lt;p&gt;If you like &lt;a href="http://sencha.com"&gt;Sencha Touch&lt;/a&gt;, the HTML5 mobile framework we recently covered in &lt;a href="http://wynn.fm/030"&gt;Episode 0.3.0&lt;/a&gt;, but long for a more declarative, markup-driven approach, then keep an eye on &lt;a href="http://github.com/fellowshiptech/slablet"&gt;Slablet&lt;/a&gt; from &lt;a href="http://www.fellowshiptech.com/"&gt;Fellowship Technologies&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wynnxp/4909431950/"&gt;&lt;img src="http://farm5.static.flickr.com/4122/4909431950_d834baf3b4_m.jpg" alt="Landscape"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slablet, as &lt;a href="http://urbandictionary.com/define.php?term=slablet"&gt;defined by Urban Dictionary&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;(n.) - a slang word for a computer tablet such as the iPad or other branded tablet devices&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unlike Sencha’s JavaScript-centric approach, Slablet opts for a more unobtrusive implementation. Content is created in HTML, styled with CSS, and driven by jQuery. The project uses &lt;a href="http://cubiq.org/iscroll"&gt;iScroll&lt;/a&gt; to provide &lt;code&gt;overflow:scroll&lt;/code&gt; in its fixed height elements.&lt;/p&gt;

&lt;p&gt;Fellowship has provided a few nice looking &lt;a href="http://host.sonspring.com/slablet/"&gt;demos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/wynnxp/4909431864/"&gt;&lt;img src="http://farm5.static.flickr.com/4138/4909431864_6c31742497_m.jpg" alt="Horizontal"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re wanting to start developing split-pane interfaces for the iPad, give Slablet a look.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/fellowshiptech/slablet"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=7JlQO6weqJ0:c_Z8CAF5300:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=7JlQO6weqJ0:c_Z8CAF5300:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=7JlQO6weqJ0:c_Z8CAF5300:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=7JlQO6weqJ0:c_Z8CAF5300:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=7JlQO6weqJ0:c_Z8CAF5300:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=7JlQO6weqJ0:c_Z8CAF5300:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=7JlQO6weqJ0:c_Z8CAF5300:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/980482626</link><guid>http://thechangelog.com/post/980482626</guid><pubDate>Thu, 19 Aug 2010 22:32:00 -0500</pubDate><category>github</category><category>ios</category><category>ipad</category><category>tablet</category><category>css</category><category>design</category><category>jquery</category><category>javascript</category></item><item><title>Episode 0.3.2 - 960.gs with Nathan Smith</title><description>&lt;a href="http://changelogshow.com/105/15091-episode-0-3-2-960-gs-with-nathan-smith"&gt;Episode 0.3.2 - 960.gs with Nathan Smith&lt;/a&gt;: &lt;p&gt;Adam and Wynn caught up with &lt;a href="http://twitter.com/nathansmith"&gt;Nathan Smith&lt;/a&gt; from &lt;a href="http://960.gs"&gt;960 Grid System&lt;/a&gt; to talk about web development and CSS grid frameworks.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://changelogshow.com/105/15091-episode-0-3-2-960-gs-with-nathan-smith.mp3"&gt;Download MP3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Items mentioned in the show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://960.gs"&gt;960 Grid System&lt;/a&gt; - Nathan’s awesome CSS grid framework&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://github.com/nathansmith/960-Grid-System/tree/master/templates/"&gt;960’s awesome templates&lt;/a&gt; help you plan your layouts&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.flickr.com/photos/wynnxp/4907885579/"&gt;Wynn’s new monitor setup&lt;/a&gt; is just plain obscene&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.designinfluences.com/fluid960gs/"&gt;960’s fluid support&lt;/a&gt; from &lt;a href="http://www.domain7.com/Team/StephenBau.html"&gt;Stephen Bau&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://thechangelog.com/post/734492229/episode-0-2-8-mobile-web-development-with-john-resig"&gt;Episode 0.2.8&lt;/a&gt; where John Resig talks about mobile web dev&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://vimeo.com/12166734"&gt;Episode 18&lt;/a&gt; of the &lt;a href="http://yayquery.com/"&gt;yayQuery podcast&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Wynn asks why &lt;a href="http://code.google.com/apis/libraries/"&gt;Google’s AJAX API library&lt;/a&gt; doesn’t include the CSS frameworks&lt;/li&gt;
&lt;li&gt;Nathan and Wynn are fans of &lt;a href="http://jasonsantamaria.com/"&gt;Jason Santa Maria’s&lt;/a&gt; &lt;a href="http://jasonsantamaria.com/articles/fullcodepress-2010"&gt;layout&lt;/a&gt;-&lt;a href="http://jasonsantamaria.com/articles/on-good/"&gt;per&lt;/a&gt;-&lt;a href="http://jasonsantamaria.com/articles/on-the-subject-of-design-2/"&gt;post&lt;/a&gt; blog&lt;/li&gt;
&lt;li&gt;For the non-soccer fans, a little background for Nathan’s &lt;a href="http://en.wikipedia.org/wiki/Midfielder"&gt;midfielder&lt;/a&gt; analogy.&lt;/li&gt;
&lt;li&gt;We don’t need to link to &lt;a href="http://sass-lang.com"&gt;Sass&lt;/a&gt; do we?&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.hulu.com/watch/1447/saturday-night-live-taco-town"&gt;Taco Town&lt;/a&gt; from SNL&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.amazon.com/dp/0596159773?tag=sons-20"&gt;jQuery Cookbook&lt;/a&gt;, to which Nathan contributed lucky Chapter 13&lt;/li&gt;
&lt;li&gt;Nathan is a big &lt;a href="http://drupal.org"&gt;Drupal&lt;/a&gt; fan&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.rebeccamurphey.com/"&gt;Rebecca Murphey&lt;/a&gt; organizer of the awesome &lt;a href="http://texasjavascript.com"&gt;TXJS&lt;/a&gt; conference&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.textism.com/tools/textile/"&gt;Textile&lt;/a&gt; vs. &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=etdRcu07NOQ:eaeAOa1fB4I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=etdRcu07NOQ:eaeAOa1fB4I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=etdRcu07NOQ:eaeAOa1fB4I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=etdRcu07NOQ:eaeAOa1fB4I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=etdRcu07NOQ:eaeAOa1fB4I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=etdRcu07NOQ:eaeAOa1fB4I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=etdRcu07NOQ:eaeAOa1fB4I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/980148470</link><guid>http://thechangelog.com/post/980148470</guid><pubDate>Thu, 19 Aug 2010 21:17:00 -0500</pubDate><category>episode</category><category>css</category><category>design</category><category>frameworks</category><category>web</category><category>sass</category><enclosure url="http://changelogshow.com/105/15091-episode-0-3-2-960-gs-with-nathan-smith.mp3" length="16294796" type="audio/mpeg" /><media:content url="http://changelogshow.com/105/15091-episode-0-3-2-960-gs-with-nathan-smith.mp3" fileSize="16294796" type="audio/mpeg" /></item><item><title>Optitron: Easily add option and command parsing to your Ruby CLI</title><description>&lt;a href="http://github.com/joshbuddy/optitron"&gt;Optitron: Easily add option and command parsing to your Ruby CLI&lt;/a&gt;: &lt;p&gt;We love command line interfaces. We’ve &lt;a href="http://thechangelog.com/post/919553603/a-new-look"&gt;written before&lt;/a&gt; about how we use the &lt;a href="http://github.com/mwunsch/tumblr"&gt;Tumblr gem&lt;/a&gt; to post to this site. If you want to add a nice CLI to your Ruby app, &lt;a href="http://github.com/joshbuddy"&gt;Joshua Hull&lt;/a&gt; from the &lt;a href="http://www.padrinorb.com/"&gt;Padrino&lt;/a&gt; team has released &lt;a href="http://github.com/joshbuddy/optitron"&gt;Optitron&lt;/a&gt;, an easy way to support option and command parsing.&lt;/p&gt;

&lt;h4&gt;Install the gem&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;gem install optitron
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;A quick example&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;@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
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then you can print those options with &lt;code&gt;@parser.help&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let’s see how Optitron parses inbound arguments&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;response = @parser.parse(%w(-v install file))
response.command
=&gt; "install"
response.args
=&gt; ["file"]
response.params
=&gt; {"verbose" =&gt; true}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With four patch releases today, this gem is moving fast but one to keep an eye on.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/joshbuddy/optitron"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=biFxf2wUgrg:Bhh6qrU8VVo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=biFxf2wUgrg:Bhh6qrU8VVo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=biFxf2wUgrg:Bhh6qrU8VVo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=biFxf2wUgrg:Bhh6qrU8VVo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=biFxf2wUgrg:Bhh6qrU8VVo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=biFxf2wUgrg:Bhh6qrU8VVo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=biFxf2wUgrg:Bhh6qrU8VVo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/960758568</link><guid>http://thechangelog.com/post/960758568</guid><pubDate>Sun, 15 Aug 2010 22:58:48 -0500</pubDate><category>github</category><category>ruby</category><category>cli</category></item><item><title>Nitrode: A lightweight HTTP Server on top of Node.js</title><description>&lt;a href="http://github.com/ollym/nitrode"&gt;Nitrode: A lightweight HTTP Server on top of Node.js&lt;/a&gt;: &lt;p&gt;Released earlier today was &lt;a href="http://github.com/ollym/nitrode"&gt;Nitrode&lt;/a&gt;, which aims to be FASTCGI type server for &lt;a href="http://nodejs.org"&gt;Node.js&lt;/a&gt;, this is a server for those who want the power of something like &lt;a href="http://nginx.org"&gt;Nginx&lt;/a&gt;, but would prefer to write the logic in JavaScript.&lt;/p&gt;

&lt;p&gt;Nitrode boasts pretty impressive features for a first release, some notable features including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual Host Configuration&lt;/li&gt;
&lt;li&gt;Redirection&lt;/li&gt;
&lt;li&gt;ETags and If-Modified-Since support&lt;/li&gt;
&lt;li&gt;Static file serving&lt;/li&gt;
&lt;li&gt;SSL support&lt;/li&gt;
&lt;li&gt;HTTP Basic Authentication&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now, there’s an example.js file up in the repository on github, and it’s author, &lt;a href="http://github.com/ollym"&gt;Oliver Morgan&lt;/a&gt; still says there’s a lot of work to be done on it.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/ollym/nitrode"&gt;Source on GitHub&lt;/a&gt;] [&lt;a href="http://groups.google.com/group/nodejs/browse_thread/thread/479e1e5de272931d?hl=en"&gt;Release notes&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=gBe88ZdnBxw:PKr5gx-6r4Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=gBe88ZdnBxw:PKr5gx-6r4Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=gBe88ZdnBxw:PKr5gx-6r4Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=gBe88ZdnBxw:PKr5gx-6r4Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=gBe88ZdnBxw:PKr5gx-6r4Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=gBe88ZdnBxw:PKr5gx-6r4Y:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=gBe88ZdnBxw:PKr5gx-6r4Y:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/958501415</link><guid>http://thechangelog.com/post/958501415</guid><pubDate>Sun, 15 Aug 2010 14:08:00 -0500</pubDate><category>github</category><category>node.js</category><category>javascript</category><category>framework</category></item><item><title>mongomatic: Minimal Ruby mapper for Mongo</title><description>&lt;a href="http://github.com/benmyles/mongomatic"&gt;mongomatic: Minimal Ruby mapper for Mongo&lt;/a&gt;: &lt;p&gt;If you’re a close-to-the-metal sort of developer who eschews conveniences like relationships, indexes, and query APIs, then check out &lt;a href="http://github.com/benmyles/mongomatic"&gt;Mongomatic&lt;/a&gt; from &lt;a href="http://github.com/benmyles"&gt;Ben Myles&lt;/a&gt;. Mongomatic aims to do ‘just enough’ by mapping your models to &lt;a href="http://mongodb.org"&gt;MongoDB&lt;/a&gt; collections but leaves the rest to you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No additional query API.&lt;/strong&gt; You simply drop down to the Ruby driver.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No relationships.&lt;/strong&gt; Simply write your own finder methods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No validations.&lt;/strong&gt; Unless you write your own.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What’s the upside you may ask? Minimal dependencies and better alignment with MongoDB native conventions.&lt;/p&gt;

&lt;h4&gt;A sample model&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;require 'mongomatic'

class User &lt; Mongomatic::Base
  def validate
    self.errors &lt;&lt; ["Name", "can't be empty"]  if self["name"].blank?
    self.errors &lt;&lt; ["Email", "can't be empty"] if self["email"].blank?
  end
end

# set the db for all models:
Mongomatic.db = Mongo::Connection.new.db("mongomatic_test")
# or you can set it for a specific model:
User.db = Mongo::Connection.new.db("mongomatic_test_user")
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Find a single user:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;found = User.find_one({"name" =&gt; "Ben Myles"})
=&gt; #&lt;User:0x00000101939a48 @doc={"_id"=&gt;BSON::ObjectID('4c32834f0218236321000001'), "name"=&gt;"Ben Myles", "email"=&gt;"me@somewhere.com"}, @removed=false, @is_new=false, @errors=[]&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Iterate over a cursor, the MongoDB way:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cursor = User.find({"name" =&gt; "Ben Myles"})
=&gt; #&lt;Mongomatic::Cursor:0x0000010195b4e0 @obj_class=User, @mongo_cursor=&lt;Mongo::Cursor:0x80cadac0 namespace='mongomatic_test.User' @selector={"name"=&gt;"Ben Myles"}&gt;&gt;
found = cursor.next
=&gt; #&lt;User:0x00000101939a48 @doc={"_id"=&gt;BSON::ObjectID('4c32834f0218236321000001'), "name"=&gt;"Ben Myles", "email"=&gt;"me@somewhere.com"}, @removed=false, @is_new=false, @errors=[]&gt;
found.remove
=&gt; 67
User.count
=&gt; 0
User.find({"name" =&gt; "Ben Myles"}).next
=&gt; nil
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you need a quick-and-dirty model for your MongoDB Ruby app, give Mongomatic a look. It looks like a lightweight alternative to &lt;a href="http://github.com/jnunemaker/mongomapper"&gt;MongoMapper&lt;/a&gt; and &lt;a href="http://mongoid.org/"&gt;Mongoid&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/benmyles/mongomatic"&gt;Source on GitHub&lt;/a&gt;] [&lt;a href="http://mongomatic.com"&gt;Homepage&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=ZsLo1EgDP-A:v5jV8BUs2h8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=ZsLo1EgDP-A:v5jV8BUs2h8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=ZsLo1EgDP-A:v5jV8BUs2h8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=ZsLo1EgDP-A:v5jV8BUs2h8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=ZsLo1EgDP-A:v5jV8BUs2h8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=ZsLo1EgDP-A:v5jV8BUs2h8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=ZsLo1EgDP-A:v5jV8BUs2h8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/954675753</link><guid>http://thechangelog.com/post/954675753</guid><pubDate>Sat, 14 Aug 2010 19:37:08 -0500</pubDate><category>github</category><category>ruby</category><category>mongodb</category><category>nosql</category><category>orm</category></item><item><title>facebook-ios-sdk: Drop Facebook into your iOS application</title><description>&lt;a href="http://github.com/facebook/facebook-ios-sdk"&gt;facebook-ios-sdk: Drop Facebook into your iOS application&lt;/a&gt;: &lt;p&gt;Facebook loves iOS developers. First, they gave us  &lt;a href="http://thechangelog.com/post/610697985/episode-0-2-4-facebook-open-source-projects-tornado-hip"&gt;Three20&lt;/a&gt;, a nice iOS app framework extracted from their popular native app. Now they’ve released the &lt;a href="http://github.com/facebook/facebook-ios-sdk"&gt;Facebook iOS SDK&lt;/a&gt; which lets you easily add authorization, API calls, and Facebook dialogs to your iOS apps.&lt;/p&gt;

&lt;h4&gt;Authorization&lt;/h4&gt;

&lt;p&gt;To authorize a user using OAuth2 you can simply create the Facebook client and call &lt;code&gt;authorize&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;facebook = [[Facebook alloc] init];
[facebook authorize:apiKey permissions:permissions delegate:self];
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Making API calls&lt;/h4&gt;

&lt;p&gt;Now you can do things like getting info for the authenticating user:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[facebook requestWithGraphPath:@"me" andDelegate:self];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;or get that users’s friends&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[facebook requestWithGraphPath:@"me/friends" andDelegate:self];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;[&lt;a href="http://github.com/facebook/facebook-ios-sdk"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JRFd4kvAeek:SsOolBPfIEY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JRFd4kvAeek:SsOolBPfIEY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JRFd4kvAeek:SsOolBPfIEY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=JRFd4kvAeek:SsOolBPfIEY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JRFd4kvAeek:SsOolBPfIEY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JRFd4kvAeek:SsOolBPfIEY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=JRFd4kvAeek:SsOolBPfIEY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/952365770</link><guid>http://thechangelog.com/post/952365770</guid><pubDate>Sat, 14 Aug 2010 08:40:00 -0500</pubDate><category>api</category><category>github</category><category>iOS</category><category>objective-c</category><category>facebook</category></item><item><title>tweet-button: Easy Twitter Tweet Buttons for your Rails apps</title><description>&lt;a href="http://github.com/intridea/tweet-button"&gt;tweet-button: Easy Twitter Tweet Buttons for your Rails apps&lt;/a&gt;: &lt;p&gt;Nobody does 0day gems like &lt;a href="http://intridea.com"&gt;Intridea&lt;/a&gt;. First they released  &lt;a href="http://thechangelog.com/post/543459572/oauth2-ruby-wrapper-for-oauth-2-0"&gt;OAuth2&lt;/a&gt; the same day Facebook announced their plans for it. This week, they created &lt;a href="http://github.com/intridea/tweet-button"&gt;tweet-button&lt;/a&gt; the same day Twitter unveiled their new &lt;a href="http://twitter.com/goodies/tweetbutton"&gt;official tweet button&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/intridea/tweet-button"&gt;Tweet button&lt;/a&gt; is a simple helper to provide a nice Ruby interface for adding the button to your page:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;= tweet_button :via =&gt; "changelogshow", :url =&gt; "http://wynn.fm/twbtns", :text =&gt; "This is so meta!"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;which will yield&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/share" class="twitter-share-button" data-url="http://wynn.fm/twbtns" data-text="This is so meta!" data-count="horizontal" data-via="changelogshow"&gt;Tweet&lt;/a&gt;&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;Configurable options include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:url&lt;/code&gt; - The URL to share; the default is the current URL.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:text&lt;/code&gt; - The text that will appear in the tweet; the default is “Check this out!”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:via&lt;/code&gt; - The attribution. Defaults to “tweetbutton”, but you should change that.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:lang&lt;/code&gt; - Set the language for the tweet (no default).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:related&lt;/code&gt; - Related Twitter accounts (no default).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:count&lt;/code&gt; - The tweet count box position (values can be “none”, “horizontal”, or “vertical”; default is “vertical”).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check the &lt;a href="http://github.com/intridea/tweet-button#readme"&gt;README&lt;/a&gt; for advanced features.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/intridea/tweet-button"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xgK_ji8zxa8:mM7uKxecigA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xgK_ji8zxa8:mM7uKxecigA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xgK_ji8zxa8:mM7uKxecigA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=xgK_ji8zxa8:mM7uKxecigA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xgK_ji8zxa8:mM7uKxecigA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=xgK_ji8zxa8:mM7uKxecigA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=xgK_ji8zxa8:mM7uKxecigA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/950796609</link><guid>http://thechangelog.com/post/950796609</guid><pubDate>Fri, 13 Aug 2010 23:45:22 -0500</pubDate><category>github</category><category>ruby</category><category>twitter</category><category>social</category><category>web</category></item><item><title>fikus: Cloud-friendly Ruby CMS powered by Padrino and MongoDB</title><description>&lt;a href="http://github.com/bratta/fikus"&gt;fikus: Cloud-friendly Ruby CMS powered by Padrino and MongoDB&lt;/a&gt;: &lt;p&gt;For the developer, a blog or CMS is like a favorite t-shirt. It doesn’t have to be fashionable, but it’s got to fit. It’s in that spirit that we highlight &lt;a href="http://github.com/bratta/fikus"&gt;Fikus&lt;/a&gt;, the new simple Ruby CMS from &lt;a href="http://github.com/bratta"&gt;Tim Gourley&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What makes Fikus special?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Powered by Padrino.&lt;/strong&gt; &lt;a href="http://www.sinatrarb.com"&gt;Sinatra&lt;/a&gt;’s cool Italian cousin provides a built-in admin panel. Checkout out &lt;a href="http://thechangelog.com/post/708173099/episode-0-2-7-padrino-ruby-web-framework"&gt;Episode 0.2.7&lt;/a&gt; for more on this cool Ruby web framework.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB.&lt;/strong&gt; Document-oriented databases are great CMS databases, as we discussed in &lt;a href="http://thechangelog.com/post/287597162/episode-0-0-7-mike-dirolf-from-10gen-and-mongodb"&gt;Episode 0.0.7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HAML-based layouts.&lt;/strong&gt; Never hunt down a closing &lt;code&gt;&lt;/div&gt;&lt;/code&gt; again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud friendly.&lt;/strong&gt; Fikus is ready for &lt;a href="http://www.engineyard.com/products/appcloud"&gt;Engine Yard AppCloud&lt;/a&gt; and &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt; out of the box. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fikus is also chock full of caching optimizations and Rack middleware, or &lt;a href="http://coderack.org"&gt;go add your own&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/bratta/fikus"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=NJi1-pEN5qo:Z-iila_2UwI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=NJi1-pEN5qo:Z-iila_2UwI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=NJi1-pEN5qo:Z-iila_2UwI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=NJi1-pEN5qo:Z-iila_2UwI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=NJi1-pEN5qo:Z-iila_2UwI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=NJi1-pEN5qo:Z-iila_2UwI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=NJi1-pEN5qo:Z-iila_2UwI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/950642641</link><guid>http://thechangelog.com/post/950642641</guid><pubDate>Fri, 13 Aug 2010 20:50:02 -0500</pubDate><category>github</category><category>ruby</category><category>cms</category><category>padrino</category><category>web</category><category>blogging</category></item><item><title>gollum: A simple, Git-powered wiki with a sweet API and local frontend.</title><description>&lt;a href="http://github.com/github/gollum"&gt;gollum: A simple, Git-powered wiki with a sweet API and local frontend.&lt;/a&gt;: &lt;p&gt;If your open source project needs a wiki, GitHub will leave you saying “My PRECIOUS!” After much anticipation, GitHub has finally taken the curtain down on their new git-powered wikis.&lt;/p&gt;

&lt;h4&gt;What’s new&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Reverence images and folders in your Git project.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://github-images.s3.amazonaws.com/blog/2010/wiki-images.png" alt="Screenshot"/&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Markdown support!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Local previewing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You’ll need to upgrade to the new wiki from within your GitHub project admin page.&lt;/p&gt;

&lt;p&gt;As part of the rollout, they’ve also released &lt;a href="http://github.com/github/gollum"&gt;Gollum&lt;/a&gt; the Ruby library that powers the new GitHub wikis. Gollumn also includes an embedded &lt;a href="http://www.sinatrarb.com"&gt;Sinatara&lt;/a&gt; server to preview your content.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/github/gollum"&gt;Source on GitHub&lt;/a&gt;] [&lt;a href="http://github.com/blog/699-making-github-more-open-git-backed-wikis"&gt;Announcement blog post&lt;/a&gt;] [&lt;a href="http://github.com/mojombo/gollum-demo"&gt;Gollum Demo&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=VdSuo7z88jg:OTrWq3Cedu8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=VdSuo7z88jg:OTrWq3Cedu8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=VdSuo7z88jg:OTrWq3Cedu8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=VdSuo7z88jg:OTrWq3Cedu8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=VdSuo7z88jg:OTrWq3Cedu8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=VdSuo7z88jg:OTrWq3Cedu8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=VdSuo7z88jg:OTrWq3Cedu8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/943735340</link><guid>http://thechangelog.com/post/943735340</guid><pubDate>Thu, 12 Aug 2010 15:54:00 -0500</pubDate><category>github</category><category>wiki</category><category>git</category><category>ruby</category></item><item><title>webshell: A console-based JavaScripty web client utility (using node.js)</title><description>&lt;a href="http://github.com/fictivekin/webshell"&gt;webshell: A console-based JavaScripty web client utility (using node.js)&lt;/a&gt;: &lt;p&gt;If you’re like me, you probably spend a good deal of time using cURL from the console or &lt;a href="http://hurl.it"&gt;Hurl&lt;/a&gt; on the web to test/inspect/debug HTTP stuffs. Wanting something a bit more robust and console-friendly &lt;a href="http://github.com/fictivekin"&gt;Evan Haas&lt;/a&gt; and &lt;a href="http://github.com/scoates"&gt;Sean Coates&lt;/a&gt; have created &lt;a href="http://github.com/fictivekin/webshell"&gt;Webshell&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Webshell is built on &lt;a href="http://nodejs.org"&gt;Node.js&lt;/a&gt; (of which we’re &lt;a href="http://thechangelog.com/search/node"&gt;big fans&lt;/a&gt;), and gives you a simple console to load and debug HTTP calls, follow &lt;code&gt;302&lt;/code&gt; redirects, store history, process JSON, and more:&lt;/p&gt;

&lt;p&gt;To run, clone the project and then fire up the shell with Node:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;node shell.js 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then you’re all set to start making HTTP requests:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;webshell&gt; GET &lt;a href="http://google.com/"&gt;http://google.com/&lt;/a&gt;
HTTP 301 &lt;a href="http://google.com/"&gt;http://google.com/&lt;/a&gt;
webshell&gt; $_.headers
{ location: 'http://www.google.com/'
, 'content-type': 'text/html; charset=UTF-8'
, date: 'Sun, 08 Aug 2010 22:38:23 GMT'
, expires: 'Tue, 07 Sep 2010 22:38:23 GMT'
, 'cache-control': 'public, max-age=2592000'
, server: 'gws'
, 'content-length': '219'
, 'x-xss-protection': '1; mode=block'
, connection: 'close'
}
webshell&gt; $_.headers.location
'http://www.google.com/'
webshell&gt; $_.follow()
HTTP 302 &lt;a href="http://www.google.com/"&gt;http://www.google.com/&lt;/a&gt;
webshell&gt; $_.headers.location
'http://www.google.ca/'
webshell&gt; $_.follow()
HTTP 200 &lt;a href="http://www.google.ca/"&gt;http://www.google.ca/&lt;/a&gt;
webshell&gt; $_.raw.substring(0, 50)
'&lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;meta http-equiv="conte'
webshell&gt; ^D
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The built-in JSON processing is slick:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;webshell&gt; GET &lt;a href="http://twitter.com/users/coates.json"&gt;http://twitter.com/users/coates.json&lt;/a&gt;
HTTP 200 &lt;a href="http://twitter.com/users/coates.json"&gt;http://twitter.com/users/coates.json&lt;/a&gt;
webshell&gt; $_.json.name
'Sean Coates'
webshell&gt; ^D
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;[&lt;a href="http://github.com/fictivekin/webshell"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JYNeKLz7A9Q:K0N530DAlXc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JYNeKLz7A9Q:K0N530DAlXc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JYNeKLz7A9Q:K0N530DAlXc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=JYNeKLz7A9Q:K0N530DAlXc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JYNeKLz7A9Q:K0N530DAlXc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=JYNeKLz7A9Q:K0N530DAlXc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=JYNeKLz7A9Q:K0N530DAlXc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/942336843</link><guid>http://thechangelog.com/post/942336843</guid><pubDate>Thu, 12 Aug 2010 09:25:29 -0500</pubDate><category>github</category><category>node</category><category>javascript</category><category>api</category><category>console</category><enclosure url="http://twitter.com/users/coates.json" length="1399" type="application/json; charset=utf-8" /><media:content url="http://twitter.com/users/coates.json" fileSize="1399" type="application/json; charset=utf-8" /></item><item><title>html5-boilerplate: Best practices starting point project for HTML5 and mobile web apps</title><description>&lt;a href="http://github.com/paulirish/html5-boilerplate"&gt;html5-boilerplate: Best practices starting point project for HTML5 and mobile web apps&lt;/a&gt;: &lt;p&gt;While HTML5 is &lt;a href="http://jeffcroft.com/blog/2010/aug/02/term-html5/"&gt;expanding in definition to include any whizz-bang feature in the post rounded corner web era&lt;/a&gt;, implementing actual HTML5 in your web app can be confusing. It’s a fast moving landscape that touches everything from traditional web apps to mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://paulirish.com"&gt;Paul Irish&lt;/a&gt;, the Google Chrome dev relations guy who gave us the &lt;a href="http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/"&gt;bulletproof syntax&lt;/a&gt; for &lt;a href="http://thechangelog.com/tagged/typography"&gt;@font-face&lt;/a&gt;, brings us his &lt;a href="http://github.com/paulirish/html5-boilerplate"&gt;HTML5 Boilerplate&lt;/a&gt; a great tutorial/starting point for implementing a number of best practices in your desktop and mobile web applications including&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML5 &lt;code&gt;&lt;!doctype&gt;&lt;/code&gt; and CSS reset&lt;/li&gt;
&lt;li&gt;Handheld stylesheets&lt;/li&gt;
&lt;li&gt;CSS media queries for advanced mobile device targeting (even portrait or landscape layouts)&lt;/li&gt;
&lt;li&gt;Paul’s &lt;a href="http://www.modernizr.com/"&gt;Modernizr&lt;/a&gt; script for detecting device capabilities such as &lt;code&gt;Modernizr.video.ogg&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The current version is heavily documented. Paul promises a more slim, production ready version soon.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://github.com/paulirish/html5-boilerplate"&gt;Source on GitHub&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=SpbECYbJ7yI:_4kA69J8zZc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=SpbECYbJ7yI:_4kA69J8zZc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=SpbECYbJ7yI:_4kA69J8zZc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=SpbECYbJ7yI:_4kA69J8zZc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=SpbECYbJ7yI:_4kA69J8zZc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=SpbECYbJ7yI:_4kA69J8zZc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=SpbECYbJ7yI:_4kA69J8zZc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/938211029</link><guid>http://thechangelog.com/post/938211029</guid><pubDate>Wed, 11 Aug 2010 14:08:46 -0500</pubDate><category>github</category><category>html5</category><category>web</category><category>bootstrap</category><category>templates</category><category>modernizr</category><category>css3</category><category>mobile</category></item><item><title>smoothie: Lightweight JavaScript library for smooth real-time charts in the browser</title><description>&lt;a href="http://github.com/joewalnes/smoothie"&gt;smoothie: Lightweight JavaScript library for smooth real-time charts in the browser&lt;/a&gt;: &lt;p&gt;Providing real-time, smoothly updating charts in the browser is a challenge. London-based developer &lt;a href="http://github.com/joewalnes"&gt;Joe Walnes&lt;/a&gt; has tackled the problem with &lt;a href="http://github.com/joewalnes/smoothie"&gt;Smoothie Charts&lt;/a&gt;, a lightweight JavaScript library that uses &lt;code&gt;&lt;canvas&gt;&lt;/code&gt; to do just that.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cl.ly/d70d178690b0ddd81e2d/content" alt="Screenshot"/&gt;&lt;/p&gt;

&lt;p&gt;A quick example from &lt;a href="http://smoothiecharts.org/"&gt;the project homepage&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Randomly add a data point every 500ms
var random = new TimeSeries();
setInterval(function() {
  random.append(new Date().getTime(), Math.random() * 10000);
}, 500);

function createTimeline() {
  var chart = new SmoothieChart();
  chart.addTimeSeries(random, { strokeStyle: 'rgba(0, 255, 0, 1)', fillStyle: 'rgba(0, 255, 0, 0.2)', lineWidth: 4 });
  chart.streamTo(document.getElementById("chart"), 500);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;[&lt;a href="http://github.com/joewalnes/smoothie"&gt;Source on GitHub&lt;/a&gt;] [&lt;a href="http://smoothiecharts.org/"&gt;Homepage&lt;/a&gt;]&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=6V54B7pwb70:FZbZjdIiKaY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=6V54B7pwb70:FZbZjdIiKaY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=6V54B7pwb70:FZbZjdIiKaY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=6V54B7pwb70:FZbZjdIiKaY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=6V54B7pwb70:FZbZjdIiKaY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/thechangelog?a=6V54B7pwb70:FZbZjdIiKaY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/thechangelog?i=6V54B7pwb70:FZbZjdIiKaY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://thechangelog.com/post/938035648</link><guid>http://thechangelog.com/post/938035648</guid><pubDate>Wed, 11 Aug 2010 13:22:56 -0500</pubDate><category>github</category><category>javascript</category><category>charts</category><category>canvas</category><category>graphs</category></item><language>en-us</language><media:rating>nonadult</media:rating></channel></rss>
