<?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>blogt0sk1 &#187; Projects</title>
	<atom:link href="http://blog.jerodsanto.net/category/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jerodsanto.net</link>
	<description>with Jerod Santo</description>
	<lastBuildDate>Sat, 19 Jun 2010 14:34:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Cappuccino On Rails</title>
		<link>http://blog.jerodsanto.net/2010/01/cappuccino-on-rails/</link>
		<comments>http://blog.jerodsanto.net/2010/01/cappuccino-on-rails/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 03:16:32 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=825</guid>
		<description><![CDATA[I&#8217;m happy to announce the release of CappuccinoResource (CR), a library dedicated to interfacing between a Cappuccino front-end and a Rails back-end. CR should feel very familiar to Rails developers. Its interface is akin to ActiveResource and it borrows heavily from the (very good) ObjectiveResource library for the iPhone. All basic CRUD operations are supported, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce the release of <a href="http://github.com/sant0sk1/CappuccinoResource" rel="external">CappuccinoResource</a> (CR), a library dedicated to interfacing between a <a href="http://cappuccino.org" rel="external">Cappuccino </a>front-end and a <a href="http://rubyonrails.org" rel="external">Rails</a> back-end.</p>
<p>CR should feel very familiar to Rails developers. Its interface is akin to <a href="http://api.rubyonrails.org/classes/ActiveResource/Base.html" rel="external">ActiveResource</a> and it borrows heavily from the (very good) <a href="http://iphoneonrails.com/" rel="external">ObjectiveResource</a> library for the iPhone.</p>
<p>All basic CRUD operations are supported, and you can perform advanced finds with arbitrary parameters. A brief example of fetching a record, modifying it, and saving it:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> post <span style="color: #000;">=</span> <span style="color: #000;">&#91;</span>Post find<span style="color: #000;">:@</span><span style="color: #D14;">&quot;42&quot;</span><span style="color: #000;">&#93;</span><span style="color: #000;">;</span>
<span style="color: #000;">&#91;</span>post setTitle<span style="color: #000;">:@</span><span style="color: #D14;">&quot;Why X is Better than Y&quot;</span><span style="color: #000;">&#93;</span><span style="color: #000;">;</span>
<span style="color: #000;">&#91;</span>post save<span style="color: #000;">&#93;</span><span style="color: #000;">;</span></pre></div></div>

<p>Check out the README on the project&#8217;s page <a href="http://github.com/sant0sk1/CappuccinoResource" rel="external">on GitHub</a> for more details and usage examples.</p>
<h2>Live Demo</h2>
<p>I also created a demo application which is a simplified clone of OS X&#8217;s Address Book. The demo is <a href="http://capp-resource-example.heroku.com" rel="external">live on Heroku</a>. Check it out. The source for the demo is also <a href="http://github.com/sant0sk1/CappResourceExample" rel="external">on GitHub</a>.</p>
<p>If you&#8217;re a Rails developer waiting for a good opportunity to try out Cappuccino, there&#8217;s no better time than now.</p>
<p>If you&#8217;re a Cappuccino developer looking for an easy-to-use, powerful back-end for your applications, Rails might be the answer for you.</p>
<p>CR is a young project, but it drives one of my client applications that is production-ready (albeit not deployed), so I believe it is ready for prime time. Please try it and let me know how it goes. </p>
<p>Fork, <a href="http://github.com/sant0sk1/CappuccinoResource/issues" rel="external">report  issues</a>, et cetera.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2010/01/cappuccino-on-rails/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>A WordPress Skeleton Key</title>
		<link>http://blog.jerodsanto.net/2009/10/a-wordpress-skeleton-key/</link>
		<comments>http://blog.jerodsanto.net/2009/10/a-wordpress-skeleton-key/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 15:40:19 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=690</guid>
		<description><![CDATA[File this one under &#8220;scratching my own itch&#8221; A Problem I often use WordPress as a CMS and have a couple of sites with many users contributing. I rarely go a week without an email or phone call from a user who needs help posting. When it comes to remote support there is no substitute [...]]]></description>
			<content:encoded><![CDATA[<p>File this one under<strong> &#8220;scratching my own itch&#8221;</strong></p>
<h3>A Problem</h3>
<p>I often use WordPress as a CMS and have a couple of sites with many users contributing. I rarely go a week without an email or phone call from a user who needs help posting. When it comes to remote support there is no substitute for seeing what they&#8217;re seeing. </p>
<p>However, if you want to login to the site with their user account you have to either ask for their password (<em>tacky &#038; insecure</em>) or reset their password temporarily (<em>amateurish &#038; annoying</em>).</p>
<h3>A Solution</h3>
<p><span id="more-690"></span><br />
<img src="http://blog.jerodsanto.net/wp-content/uploads/2009/10/large_SkeletonKeyP-150x150.jpg" alt="large_SkeletonKeyP" title="large_SkeletonKeyP" width="150" height="150" class="alignright size-thumbnail wp-image-711" /><br />
Say goodbye to the days of <em>tacky, amateurish, insecure &#038; annoying</em>. The <a href="http://wordpress.org/extend/plugins/skeleton-key/" rel="external">Skeleton Key</a> plugin allows WordPress administrators (level 10 users) to login to the site as any user by authenticating with the user&#8217;s login and their own (administrator) password. Once logged in, you <em>are</em> that user. Handy, huh?</p>
<p><strong>***UPDATE***</strong><br />
The plugin has already gotten some TLC and it is now more performant and secure. We are now requiring admins to login with their own login followed by a &#8220;+&#8221; followed by the user&#8217;s login. This will cut down on the chances of people guessing administrative passwords. In a weird, corny way the &#8220;+&#8221; is your digital skeleton key&#8230; so to login as user &#8220;joeblow&#8221; as an admin I would provide:</p>
<p>username = admin+joeblow<br />
password = [the admin's password]<br />
<strong>/***UPDATE***</strong></p>
<h3>An Explanation</h3>
<p>This plugin is dead simple. It hooks into WordPress&#8217; authentication chain using 2.8&#8242;s new &#8216;<strong>authenticate</strong>&#8216; hook. The Skeleton Key&#8217;s function sets its priority higher than the built-in authentication functions and checks the password against the admin account provided before the &#8220;+&#8221; in the database. If the check fails it returns an error and the next function in the chain is called (like normal). If it matches, the <a href="http://wordpress.org/extend/plugins/skeleton-key/" rel="external">Skeleton Key</a> hands back the user account tied to the login and you&#8217;re good to go.</p>
<p>The <a href="http://github.com/sant0sk1/wp-skeleton-key" rel="external">source is on GitHub</a>, like usual. Feel free to grok it &#038; provide feedback if interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/10/a-wordpress-skeleton-key/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>CappuccinoFlow</title>
		<link>http://blog.jerodsanto.net/2009/10/cappuccinoflow/</link>
		<comments>http://blog.jerodsanto.net/2009/10/cappuccinoflow/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 13:38:30 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=672</guid>
		<description><![CDATA[In Brief: I just launched CappuccinoFlow: a community driven link blog for the Cappuccino framework. If you&#8217;re at all interested in this amazing new technology out of 280north, make sure to subscribe to the RSS feed, follow along on Twitter, and post cool Cappuccino-related links to the flow! In Detail: It has been a little [...]]]></description>
			<content:encoded><![CDATA[<h3>In Brief:</h3>
<p><a href="http://cappuccinoflow.com"><img src="http://blog.jerodsanto.net/wp-content/uploads/2009/10/cf.png" style="margin-left:10px" alt="CappuccinoFlow" title="CappuccinoFlow" width="125" height="125" class="alignright size-full wp-image-678" /></a><br />
I just launched <a href="http://cappuccinoflow.com" rel="external">CappuccinoFlow</a>: a community driven link blog for the <a href="http://www.cappuccino.org" rel="external">Cappuccino</a> framework. If you&#8217;re at all interested in this amazing new technology out of <a href="http://280north.com/" rel="external">280north</a>, make sure to subscribe to the <a href="http://feeds.feedburner.com/cappuccinoflow">RSS feed</a>, follow along on <a href="http://twitter.com/cappuccinoflow" rel="external">Twitter</a>, and <a href="http://cappuccinoflow.com/items/new" rel="external">post</a> cool Cappuccino-related links to the flow!</p>
<h3>In Detail:</h3>
<p>It has been a little quiet around these parts lately. I blame Cappuccino.</p>
<p>For the uninitiated, Cappuccino is a framework for writing web applications (<a href="http://almost.at" rel="external">for example</a>). It is built on Objective-J, which is an Objective-C-esque superset of JavaScript. It is completely rad. Also, it&#8217;s all client-side so I still get to use Rails on the back-end. I believe the apt word is: woot.</p>
<p>I wanted a link blog to support the small, but growing, Cappuccino community. I&#8217;m a big fan of <a href="http://rubyflow.com" rel="external">RubyFlow</a> so I contacted its creator, <a href="http://peterc.org" rel="external">Peter Cooper</a>, and asked him if I could set one up for Cappuccino. He was gracious enough to say yes, and he had conveniently <a href="http://github.com/Sutto/rubyflow/" rel="external">open-sourced</a> an old version of his site awhile back. I <a href="http://github.com/sant0sk1/cappuccinoflow" rel="external">forked it</a> on GitHub and the result is <a href="http://cappuccinoflow.com" rel="external">CappuccinoFlow</a>.</p>
<p>I&#8217;ll probably have to modify my blog&#8217;s headline soon, because once I become proficient in Objective-J &#038; Cappuccino you&#8217;ll probably see some posts about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/10/cappuccinoflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Console Update</title>
		<link>http://blog.jerodsanto.net/2009/07/wordpress-console-update/</link>
		<comments>http://blog.jerodsanto.net/2009/07/wordpress-console-update/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 16:33:05 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=540</guid>
		<description><![CDATA[It&#8217;s been awhile since I posted about my open-source WordPress Console (WPC) plugin, and enough has happened since I released it that I thought it deserved a little mention. What&#8217;s New Basic Security Thanks to Apokalyptik, the back-end PHP scripts now require a shared secret from the console before executing any code. As he so [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been awhile since I posted about my <a href="http://github.com/sant0sk1/wordpress-console" rel="external">open-source</a> WordPress Console (WPC) plugin, and enough has happened since I released it that I thought it deserved a little mention.</p>
<h3>What&#8217;s New</h3>
<ol>
<li>Basic Security</li>
<p>Thanks to <a href="http://blog.apokalyptik.com/" rel="external">Apokalyptik</a>, the back-end PHP scripts now require a shared secret from the console before executing any code. As he so eloquently described it:</p>
<blockquote><p>As is the plugin is negligently insecure (but outstandingly cool and useful and I want this plugin to be installable, thus the patch)</p></blockquote>
<p>Even though the increased security is a huge improvement from what we had before, I still wouldn&#8217;t run the plugin on production servers.</p>
<li>Tab-Completion</li>
<p>This is the biggest functional improvement to WPC by far. It was a feature that I wanted to release the plugin with initially, but it didn&#8217;t make the cut because I wanted to release early. The best thing about tab-completion is that it allows you to explore the PHP &#038; WP environments in a very fulfilling way. If you haven&#8217;t tried the plugin with this feature, please give it a go.</p>
<li>Small Things</li>
<p>WPC now handles command history with more grace. Using the up-arrow puts the cursor at the end of input, you can&#8217;t walk off the end of the history buffer, and a few other improvements to the code quality.
</ol>
<h3>Some Press</h3>
<p>Thanks to <a href="http://pixelgraphics.us/" rel="external">Doug Neiner</a> for giving WPC a solid review on the <a href="http://fuelyourcoding.com/plugin-review-wordpress-console" rel="external">Fuel Your Coding blog</a>, and for contributing to the project.</p>
<h3>What&#8217;s Next</h3>
<p>I&#8217;m not really sure. </p>
<p>I&#8217;ve considered adding in-console documentation for PHP &#038; WP functions, but not sure if people would use it much. I also have a command-line version of the console which I could spit shine and include with the plugin, but that might not be too attractive either. Maybe the plugin is as good as done. Any ideas or suggestions?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/07/wordpress-console-update/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introducing the WordPress Console</title>
		<link>http://blog.jerodsanto.net/2009/06/introducing-the-wordpress-console/</link>
		<comments>http://blog.jerodsanto.net/2009/06/introducing-the-wordpress-console/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 03:13:19 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=475</guid>
		<description><![CDATA[One killer feature of Ruby on Rails (for me) is script/console. Being able to interact with your code and data inside the full Rails environment is a powerful tool for development. Some days I practically live there, and if I get carried away, I do a lot of my testing there too (bad, I know). [...]]]></description>
			<content:encoded><![CDATA[<p>One killer feature of Ruby on Rails (for me) is <strong>script/console</strong>. Being able to interact with your code and data inside the full Rails environment is a powerful tool for development. Some days I practically live there, and if I get carried away, I do a lot of my testing there too (bad, I know).</p>
<p>I love Ruby and Rails, but being a contract developer means I go where the money is and recently that has been in WordPress plugin development. I enjoy developing for WordPress, but I&#8217;ve been spoiled by Rails and I often long for an interactive console for WordPress.</p>
<p>As a result, I&#8217;ve been developing (and using) a WordPress plugin built for WordPress developers. It provides an in-browser console where you can &#8220;play&#8221; with the code you&#8217;re working on.</p>
<p>If a picture is worth 1,000 words, this screencast will be worth at least a bazillion of &#8216;em:<br />
<span id="more-475"></span><br />
<object width="640" height="368"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5300607&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5300607&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="368"></embed></object></p>
<p>So there you have it. It is currently version <strong>0.1.0</strong> (very young) and I would love some help to make it even more awesome. The source code is hosted on <a href="http://github.com/sant0sk1/wordpress-console">GitHub</a>, so please fork away and I&#8217;d be happy to merge in your changes.</p>
<p>Or, simply go <a href="http://wordpress.org/extend/plugins/wordpress-console/">download</a> the plugin and try it.</p>
<p><strong>*NOTE*</strong><br />
In developing this plugin, I leaned on a few other open-source projects for inspiration (and in some cases, code). They are:</p>
<ul>
<li><a href="http://pear.php.net/package/PHP_Shell/">PHP_Shell</a></li>
<li><a href="http://code.google.com/p/htsh/">htsh</a></li>
</ul>
<p>I thank the authors for opening their source.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/06/introducing-the-wordpress-console/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Dreamy: Now With 100% API Coverage</title>
		<link>http://blog.jerodsanto.net/2009/05/dreamy-now-with-100-api-coverage/</link>
		<comments>http://blog.jerodsanto.net/2009/05/dreamy-now-with-100-api-coverage/#comments</comments>
		<pubDate>Sun, 03 May 2009 02:23:52 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[dreamhost]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=245</guid>
		<description><![CDATA[The folks at DreamHost were gracious enough to provide me with a complimentary Private Server account so I could expand Dreamy&#8217;s functionality. What a nice surprise that was! So, to ensure they got their money&#8217;s worth, I added all the Private Server API calls to Dreamy! This means that Dreamy now covers the entire DreamHost [...]]]></description>
			<content:encoded><![CDATA[<p>The folks at DreamHost were gracious enough to provide me with a complimentary Private Server account so I could expand <a href="http://github.com/sant0sk1/dreamy">Dreamy&#8217;s</a> functionality. What a nice surprise that was!</p>
<p>So, to ensure they got their money&#8217;s worth, I added all the Private Server API calls to Dreamy! This means that Dreamy now covers the entire DreamHost API. Check out all the new commands added to &#8220;dh&#8221; (the accompanying command-line tool):</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">ps                                 # list private servers
ps:add &lt;web|mysql&gt; &lt;yes|no&gt;        # adds a private server of type &lt;web|mysql&gt;
ps:pending                         # list private servers scheduled to be created
ps:reboots &lt;name&gt;                  # list historical reboots for &lt;name&gt;
ps:reboot &lt;name&gt; now!              # reboot &lt;name&gt; now! (proceed with caution)
ps:remove                          # removes all pending private servers
ps:settings &lt;name&gt;                 # list settings for private server &lt;name&gt;
ps:set &lt;name&gt; &lt;setting&gt; &lt;value&gt;    # change &lt;setting&gt; on &lt;name&gt; to &lt;value&gt;
ps:size &lt;name&gt;                     # list historical memory sizes for &lt;name&gt;
ps:size &lt;name&gt; &lt;value&gt;             # set new memory &lt;value&gt; for &lt;name&gt;
ps:usage &lt;name&gt;                    # list historical memory &amp; CPU usage for &lt;name&gt;</pre></div></div>

<p>You&#8217;ll need version 0.4.2 of the Dreamy gem to use the new functionality. To upgrade your gem, simply run the following:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">sudo gem update sant0sk1-dreamy</pre></div></div>

<p>That&#8217;s all for now!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/05/dreamy-now-with-100-api-coverage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So Dreamy!</title>
		<link>http://blog.jerodsanto.net/2009/04/so-dreamy/</link>
		<comments>http://blog.jerodsanto.net/2009/04/so-dreamy/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 20:42:03 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[gems]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=201</guid>
		<description><![CDATA[DreamHost is running a kick-off competition in support of their newly released API. It seems like their developer community could use a little productivity boost, so I thought I&#8217;d create a Ruby library to interact with their API. The resulting Ruby Gem, available on GitHub, is called &#8220;Dreamy&#8221; and includes a library and a command-line [...]]]></description>
			<content:encoded><![CDATA[<p>DreamHost is running a <a href="http://blog.dreamhost.com/2009/04/09/big-boy-time/">kick-off competition</a> in support of their newly released <a href="http://wiki.dreamhost.com/API">API</a>. It seems like their developer community could use a little productivity boost, so I thought I&#8217;d create a Ruby library to interact with their API.</p>
<p>The resulting Ruby Gem, <a href="http://github.com/sant0sk1/dreamy">available on GitHub</a>, is called &#8220;<strong>Dreamy</strong>&#8221; and includes a library and a command-line tool.</p>
<p>Why a command-line tool? Because sometimes you wanna see what&#8217;s going on with your DH account without having to pop open the control panel (also, as an example of how to use the library). Here is some sample output returning all DNS records for domains matching the string &#8220;rachel&#8221; (my wife&#8217;s name):</p>
<p><a href="http://blog.jerodsanto.net/wp-content/uploads/2009/04/dreamy_output.png"><img src="http://blog.jerodsanto.net/wp-content/uploads/2009/04/dreamy_output.png" alt="dreamy_output" title="dreamy_output" width="443" height="227" class="aligncenter size-full wp-image-202" /></a></p>
<p>Isn&#8217;t that table-based formatting <em>dreamy</em>?!?! Next up, a listing of all domains on the account and their availability. If one of the domains is down, it will ping the domain&#8217;s host server to determine if the problem is system-wide or not:<br />
<a href="http://blog.jerodsanto.net/wp-content/uploads/2009/04/dh_domain_status.png"><img src="http://blog.jerodsanto.net/wp-content/uploads/2009/04/dh_domain_status.png" alt="dh_domain_status" title="dh_domain_status" width="443" height="110" class="aligncenter size-full wp-image-231" /></a></p>
<p>There are many more things you can do with the command-line tool, but you can check out those by installing the gem and running:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">dh help</pre></div></div>

<p>How do you install the gem? It&#8217;s super-simple (if you already have Ruby and RubyGems installed):</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">gem sources -a http://gems.github.com (only needed if you've never run this before)
gem install sant0sk1-dreamy</pre></div></div>

<p>Booyah!</p>
<p>How do you use the library? Well, you just require it into your Ruby program and hit the ground running!</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color: #0086B3;">require</span> <span style="color: #D14;">'rubygems'</span>
<span style="color: #0086B3;">require</span> <span style="color: #D14;">'dreamy'</span>
&nbsp;
account = <span style="color:#6666ff; font-weight:bold;">Dreamy::Base</span>.<span style="color: #0086B3;">new</span><span style="color: #000;">&#40;</span>username, api_key<span style="color: #000;">&#41;</span>
&nbsp;
<span style="color: #6F6F6F;"># get an array of Domain objects</span>
account.<span style="color: #0086B3;">domains</span>
<span style="color: #6F6F6F;"># get an array of User objects</span>
account.<span style="color: #0086B3;">users</span>
<span style="color: #6F6F6F;"># get an array of DNS objects</span>
account.<span style="color: #0086B3;">dns</span>
<span style="color: #6F6F6F;"># get an array of Subcribers to &quot;my_list@example.com&quot;</span>
account.<span style="color: #0086B3;">announce_list</span><span style="color: #000;">&#40;</span><span style="color: #D14;">&quot;my_list&quot;</span>,<span style="color: #D14;">&quot;example.com&quot;</span><span style="color: #000;">&#41;</span>
<span style="color: #6F6F6F;"># add a subscriber to &quot;my_list@example.com&quot;</span>
account.<span style="color: #0086B3;">announce_add</span><span style="color: #000;">&#40;</span><span style="color: #D14;">&quot;my_list&quot;</span>,<span style="color: #D14;">&quot;example.com&quot;</span>,<span style="color: #D14;">&quot;guy@gmail.com&quot;</span><span style="color: #000;">&#41;</span>
<span style="color: #6F6F6F;"># remove a subscriber to &quot;my_list@example.com&quot;</span>
account.<span style="color: #0086B3;">announce_remove</span><span style="color: #000;">&#40;</span><span style="color: #D14;">&quot;my_list&quot;</span>,<span style="color: #D14;">&quot;example.com&quot;</span>,<span style="color: #D14;">&quot;guy@gmail.com&quot;</span><span style="color: #000;">&#41;</span></pre></div></div>

<p>The Domain, User, DNS, and Subscriber objects that are returned in the arrays include all the data that DreamHost exposes about them from their API. For instance, I can print the attributes of the Domain object like so:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">account.<span style="color: #0086B3;">domains</span>.<span style="color: #0086B3;">first</span>.<span style="color: #0086B3;">instance_variables</span></pre></div></div>

<p>Which returns:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color: #000;">&#91;</span><span style="color: #D14;">&quot;@www_or_not&quot;</span>, <span style="color: #D14;">&quot;@user&quot;</span>, <span style="color: #D14;">&quot;@php&quot;</span>, <span style="color: #D14;">&quot;@path&quot;</span>, <span style="color: #D14;">&quot;@fastcgi&quot;</span>, <span style="color: #D14;">&quot;@unique_ip&quot;</span>, <span style="color: #D14;">&quot;@passenger&quot;</span>, <span style="color: #D14;">&quot;@type&quot;</span>, <span style="color: #D14;">&quot;@account_id&quot;</span>, <span style="color: #D14;">&quot;@security&quot;</span>, <span style="color: #D14;">&quot;@home&quot;</span>, <span style="color: #D14;">&quot;@domain&quot;</span>, <span style="color: #D14;">&quot;@outside_url&quot;</span>, <span style="color: #D14;">&quot;@xcache&quot;</span>, <span style="color: #D14;">&quot;@php_fcgid&quot;</span>, <span style="color: #D14;">&quot;@hosting_type&quot;</span><span style="color: #000;">&#93;</span></pre></div></div>

<p>To find out more about the library, head over to the project&#8217;s <a href="http://github.com/sant0sk1/dreamy/">GitHub page</a> and check out the README.</p>
<p>Let me know what you think!</p>
<p><strong>UPDATE:</strong> Dreamy is now 100% API Compatible (and a whole lot cooler!) Check out <a href="http://blog.jerodsanto.net/2009/05/dreamy-now-with-100-api-coverage">my second blog post outlining the changes</a></p>
<p><strong>NOTE #1: The DreamHost API is still young and in heavy development. Dreamy is nowhere near a comprehensive library, but I wanted to get it into the public so other developers could use it for their competition projects. Please, if you find any bugs or want to add functionality&#8230; please, please, please fork the project and help out!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/04/so-dreamy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New Gem: Rack-noIE6</title>
		<link>http://blog.jerodsanto.net/2009/04/new-gem-rack-noie6/</link>
		<comments>http://blog.jerodsanto.net/2009/04/new-gem-rack-noie6/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 18:21:30 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[rack]]></category>

		<guid isPermaLink="false">http://blog.jerodsanto.net/?p=189</guid>
		<description><![CDATA[Many web developers are discontinuing support for IE6. I, happily, am one of them (unless a client demands it). The other day I went searching for an IE6 detection and redirect solution to aide in my un-support of the browser. What I found was pretty rad. Now that Rails is on Rack, dozens of useful [...]]]></description>
			<content:encoded><![CDATA[<p>Many web developers are discontinuing support for IE6. I, happily, am one of them (unless a client demands it). The other day I went searching for an IE6 detection and redirect solution to aide in my un-support of the browser. What I found was pretty rad.</p>
<p>Now that Rails is on Rack, dozens of useful middleware apps are being developed and can be plugged into Rails with ease. Thanks to a simple <a href="http://github.com">GitHub</a> search, I found the <a href="http://github.com/juliocesar/rack-noie/tree/master">rack-noie</a> project by Julio Cesar.</p>
<p>His middleware did almost exactly what I wanted except for a few small things. First, I prefer using gems with Rails so dependencies can easily be managed using config.gem. Second, we&#8217;re just hating on IE6, not IE in general. Therefore, the name is a bit misleading.</p>
<p>So, in the spirit of open-source, I forked his project and molded it to my liking. You can see the shiny new rack-noie6 gem&#8217;s GitHub page <a href="http://github.com/sant0sk1/rack-noie6/">here</a>.</p>
<p>Its dead simple to integrate. First, install the gem</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">gem sources -a http://gems.github.com (only if you haven't yet)
gem install sant0sk1-rack-noie6</pre></div></div>

<p>Next (if you&#8217;re using Rails), add the following to environment.rb inside the Rails::Initializer.run block:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">config.<span style="color: #0086B3;">gem</span> <span style="color: #D14;">'sant0sk1-rack-noie6'</span>, <span style="color:#ff3333; font-weight:bold;">:lib</span> <span style="color: #000;">=&gt;</span> <span style="color: #D14;">'noie6'</span>
config.<span style="color: #0086B3;">middleware</span>.<span style="color: #0086B3;">use</span> <span style="color: #D14;">&quot;Rack::NoIE6&quot;</span></pre></div></div>

<p>As the IE6-BraveHeart would proclaim: FREEEEDOMMMM!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2009/04/new-gem-rack-noie6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adhearsion TextMate Bundle</title>
		<link>http://blog.jerodsanto.net/2008/08/adhearsion-textmate-bundle/</link>
		<comments>http://blog.jerodsanto.net/2008/08/adhearsion-textmate-bundle/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 00:21:00 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[adhearsion]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://0/2008/08/30/adhearsion-textmate-bundle</guid>
		<description><![CDATA[I began hacking on Asterisk using the Adhearsion framework a few weeks ago. Despite initial setbacks, I am now having an absolute blast. I put together a little TextMate bundle to aide in my development and figured I&#8217;d share it out as a starting point for others. I am not a TextMate or Adhearsion pro [...]]]></description>
			<content:encoded><![CDATA[<p>I began hacking on Asterisk using the <a href="http://adhearsion.com/">Adhearsion</a> framework a few weeks ago. Despite initial setbacks, I am now having an absolute blast.</p>
<p>I put together a little <a href="http://macromates.com/">TextMate</a> bundle to aide in my development and figured I&#8217;d share it out as a starting point for others. I am not a TextMate or Adhearsion pro (yet) so I am sure there are a ton of improvements to be made.</p>
<p><a href="http://blog.jerodsanto.net/wp-content/uploads/2008/08/adhearsion-tmbundle.png"><img src="http://blog.jerodsanto.net/wp-content/uploads/2008/08/adhearsion-tmbundle.png" alt="adhearsion-tmbundle" title="adhearsion-tmbundle" width="495" height="131" class="aligncenter size-full wp-image-81" /></a></p>
<p>So, please fork my <a href="http://github.com/sant0sk1/adhearsion-tmbundle/tree/master">GitHub repo</a> and make improvements. We will all benefit from them!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2008/08/adhearsion-textmate-bundle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing lil tom peep</title>
		<link>http://blog.jerodsanto.net/2008/08/introducing-lil-tom-peep/</link>
		<comments>http://blog.jerodsanto.net/2008/08/introducing-lil-tom-peep/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 19:38:00 +0000</pubDate>
		<dc:creator>Jerod</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://0/2008/08/23/introducing-lil-tom-peep</guid>
		<description><![CDATA[lil tom peep is a new web application I wrote to fix a problem I had with web surfing. I hate having to manually check up on semi-static web pages like blog comment streams and firmware update pages (basically anything missing RSS). Now I just submit the page url and my email address to lil [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://liltompeep.com/">lil tom peep</a> is a new web application I wrote to fix a problem I had with web surfing. I hate having to manually check up on semi-static web pages like blog comment streams and firmware update pages (basically anything missing RSS).</p>
<p>Now I just submit the page url and my email address to <a href="http://liltompeep.com/">lil tom peep</a> and he does the checking for me. Pretty basic, but very useful to me.</p>
<p><a href="http://blog.jerodsanto.net/wp-content/uploads/2008/08/ltp.png"><img src="http://blog.jerodsanto.net/wp-content/uploads/2008/08/ltp.png" alt="ltp" title="ltp" width="406" height="116" class="aligncenter size-full wp-image-83" /></a></p>
<p><a href="http://liltompeep.com/">ltp</a> is powered by <a href="http://sinatrarb.com/">Sinatra</a>. Check out the <a href="http://liltompeep.com/props">props</a> page to see all the technologies involved. Possible future features include RSS-integration and a bookmarklet. Let me know if you have any feature requests or encounter any bugs while using the service. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jerodsanto.net/2008/08/introducing-lil-tom-peep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
