<?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>Automation Inc.</title>
	<atom:link href="http://blog.frameos.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.frameos.org</link>
	<description>Finding the perfect blend between fun and money</description>
	<lastBuildDate>Thu, 12 Aug 2010 10:35:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>FrameOS 5.5 Beta 2 released!</title>
		<link>http://blog.frameos.org/2010/08/12/frameos-5-5-beta-2-released/</link>
		<comments>http://blog.frameos.org/2010/08/12/frameos-5-5-beta-2-released/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 06:38:12 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[FrameOS]]></category>

		<guid isPermaLink="false">http://blog.frameos.org/?p=180</guid>
		<description><![CDATA[Hey Folks, It&#8217;s my pleasure to announce the immediate availability of FrameOS 5.5 Beta 2. Get it from here: http://download.frameos.org/frameos-5.5b2.iso You can check the ISO image integrity once downloaded using the following command: checkisomd5 frameos-5.5b2.iso Changes in FrameOS 5.5 Beta 2: * KVM 88 + libvirt 0.8.3 with netcf support now in the FrameOS official [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F08%2F12%2Fframeos-5-5-beta-2-released%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F08%2F12%2Fframeos-5-5-beta-2-released%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Hey Folks,</p>
<p>It&#8217;s my pleasure to announce the immediate availability of FrameOS 5.5 Beta 2.</p>
<p>Get it from here:</p>
<p><a href="http://download.frameos.org/frameos-5.5b2.iso">http://download.frameos.org/frameos-5.5b2.iso</a></p>
<p>You can check the ISO image integrity once downloaded using the following command:</p>
<pre>
checkisomd5 frameos-5.5b2.iso
</pre>
<p>Changes in FrameOS 5.5 Beta 2:</p>
<p>* KVM 88 + libvirt 0.8.3 with netcf support now in the FrameOS official repo (see the <a href="http://blog.frameos.org/2010/08/12/installing-kvm-88-libvirt-0-8-3-with-netcf-support-in-frameos/">HOWTO</a>).<br />
* Chef client 0.9.6 installed by default (Once again, thanks to the great packages from Matthew Kent&#8217;s ELFF repository)</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2010/08/12/frameos-5-5-beta-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing KVM 88 + Libvirt 0.8.3 with netcf support in FrameOS</title>
		<link>http://blog.frameos.org/2010/08/12/installing-kvm-88-libvirt-0-8-3-with-netcf-support-in-frameos/</link>
		<comments>http://blog.frameos.org/2010/08/12/installing-kvm-88-libvirt-0-8-3-with-netcf-support-in-frameos/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 06:35:09 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[FrameOS]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://blog.frameos.org/?p=182</guid>
		<description><![CDATA[Follow this steps to install kvm-88 + libvirt 0.8.3 (with netcf support). First of all, install FrameOS :D download.frameos.org 1. Install KVM And Libvirt yum install kvm &#8211;enablerepo epel 2. Configure Libvirt to listen for TCP/IP connections (Optional) To simplify the setup, edit /etc/libvirt/libvirtd.conf and set: listen_tls = 0 WARNING: Disabling TLS connections is a [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F08%2F12%2Finstalling-kvm-88-libvirt-0-8-3-with-netcf-support-in-frameos%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F08%2F12%2Finstalling-kvm-88-libvirt-0-8-3-with-netcf-support-in-frameos%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Follow this steps to install kvm-88 + libvirt 0.8.3 (with netcf support).</p>
<p>First of all, install FrameOS :D</p>
<p><a href="http://download.frameos.org">download.frameos.org</a></p>
<p><strong>1. Install KVM And Libvirt</strong></p>
<p>yum install kvm &#8211;enablerepo epel</p>
<p><strong>2. Configure Libvirt to listen for TCP/IP connections (Optional)</strong></p>
<p>To simplify the setup, edit /etc/libvirt/libvirtd.conf and set:</p>
<p>listen_tls = 0</p>
<p>WARNING:<br />
Disabling TLS connections is a security risk. Do not use that in a production environment.</p>
<p>Edit /etc/sysconfig/libvirtd</p>
<p>And make sure the line:</p>
<p>LIBVIRTD_ARGS=&#8221;&#8211;listen&#8221;</p>
<p><strong>3. Reboot</strong></p>
<p>After the reboot, you will be able to manage the FrameOS KVM box using virsh or RedHat virt-manager</p>
<p><strong>References:</strong></p>
<p>https://fedorahosted.org/netcf/</p>
<p>http://libvirt.org/</p>
<p>http://wiki.libvirt.org/page/Networking</p>
<p>http://www.linux-kvm.org/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2010/08/12/installing-kvm-88-libvirt-0-8-3-with-netcf-support-in-frameos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FrameOS 5.5 GA roadmap and what&#8217;s coming in 5.5 Beta 2 release</title>
		<link>http://blog.frameos.org/2010/07/22/frameos-5-5-ga-roadmap-and-whatt-coming-in-5-5-beta-2-release/</link>
		<comments>http://blog.frameos.org/2010/07/22/frameos-5-5-ga-roadmap-and-whatt-coming-in-5-5-beta-2-release/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 00:44:12 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[FrameOS]]></category>

		<guid isPermaLink="false">http://blog.frameos.org/?p=179</guid>
		<description><![CDATA[So, here is the list on what&#8217;s coming to FrameOS 5.5, final release: * Chef 0.9.6 * Libvirt 0.8.2 + kvm-88 (userland) * More rubygems and ruby stuff packaged and available in the FrameOS repo. In no particular order: &#8211; Phusion Passenger &#8211; JRuby &#8211; Trinidad ( Calavera, dude, be ready. I&#8217;ll need your help [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F07%2F22%2Fframeos-5-5-ga-roadmap-and-whatt-coming-in-5-5-beta-2-release%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F07%2F22%2Fframeos-5-5-ga-roadmap-and-whatt-coming-in-5-5-beta-2-release%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>So, here is the list on what&#8217;s coming to <strong>FrameOS 5.5, final release</strong>:</p>
<p>* Chef 0.9.6<br />
* Libvirt 0.8.2 + kvm-88 (userland)<br />
* More rubygems and ruby stuff packaged and available in the FrameOS repo. In no particular order:<br />
  &#8211; Phusion Passenger<br />
  &#8211; JRuby<br />
  &#8211; Trinidad ( Calavera, dude, be ready. I&#8217;ll need your help ;) )<br />
  &#8211; Rails 2.3.8<br />
  &#8211; Related gems and packages to make it possible</p>
<p>If everything goes according to the plan, the final release is scheduled for Q4, 2010. </p>
<p>But before that, there&#8217;s going to be a new <strong>Beta2</strong> (beta3 and RC will follow) in a <strong>couple of weeks</strong>, including the following changes:</p>
<p>* Chef 0.9.6 installed by default<br />
* Libvirt 0.8.2  + KVM88 available in the FrameOS repo</p>
<p>To all the ruby lovers and devops out there. Let me know what you want or what you thing! ;)</p>
<p>We&#8217;ve got a Google Groups ready now at:</p>
<p>http://groups.google.com/group/frameos-linux</p>
<p>And a brand new and shiny Tender support account (special thanks to the nice folks @tenderapp):</p>
<p>http://support.frameos.org</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2010/07/22/frameos-5-5-ga-roadmap-and-whatt-coming-in-5-5-beta-2-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FrameOS 5.5 Beta 1 Released</title>
		<link>http://blog.frameos.org/2010/07/16/frameos-5-5-beta-1-released/</link>
		<comments>http://blog.frameos.org/2010/07/16/frameos-5-5-beta-1-released/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 00:25:36 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[FrameOS]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=177</guid>
		<description><![CDATA[Phew! It has been a crazy month&#8230; but finally I made it. It&#8217;s my pleasure to announce the immediate availability of FrameOS 5.5 Beta1!!! www.frameos.org FrameOS is a CentOS 5 based Linux distribution targeting the following users: 1. DevOps * Opscode Chef is installed by default. One less step to tame the DataCenter beasts. * [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F07%2F16%2Fframeos-5-5-beta-1-released%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F07%2F16%2Fframeos-5-5-beta-1-released%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Phew!</p>
<p>It has been a crazy month&#8230; but finally I made it. It&#8217;s my pleasure to announce the immediate availability of FrameOS 5.5 Beta1!!!</p>
<p><a href="http://www.frameos.org">www.frameos.org</a></p>
<p>FrameOS is a CentOS 5 based Linux distribution targeting the following users:</p>
<p><strong>1. DevOps</strong></p>
<p>* Opscode Chef is installed by default. One less step to tame the DataCenter beasts.<br />
* Built-in kickstart profiles to perform a single step installation.</p>
<p><strong>2. Ruby Enthusiast and Developers</strong></p>
<p>* Ruby Enterprise 2010.2 release as the default ruby installation.<br />
* Rubygems 1.3.6 installed.</p>
<p><strong>3. Virtualization Gurus</strong></p>
<p>* Gitco Xen 3.4 and 4.0 ready<br />
* Modern kvm/libvirt stack.</p>
<p><strong>4. Freedom Lovers</strong></p>
<p>This is the very best OpenSource we all love. No closed source here, no sales crap in the middle ;).<br />
Send me feedback, participate in Google groups and open bugs. No matter what you feel about the distro, share it!</p>
<p>&#8212;</p>
<p>I&#8217;d love to send special thanks to the CentOS crew, FrameOS would not exist without them. You have taught me so much, and brought me so far&#8230; Thank you!</p>
<p>To the ELFF, Gitco, EPEL and RPMForge repo maintainers: You&#8217;ve made my ops live easier for quite a few years, come and visit me @ Barcelona, I owe you a couple of beers ;)</p>
<p>To the Ruby and Chef community: You made infrastructure automation fun for all of us!</p>
<p>Kinda exhausted right now!. I&#8217;ll post tomorrow what&#8217;s coming to the next beta, links to relevant docs, roadmap and some other stuff.</p>
<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2010/07/16/frameos-5-5-beta-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Por una Red Sostenible</title>
		<link>http://blog.frameos.org/2010/01/12/por-una-red-sostenible/</link>
		<comments>http://blog.frameos.org/2010/01/12/por-una-red-sostenible/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 10:14:56 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[activism]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=172</guid>
		<description><![CDATA[RED S@Stenible INTERNET NO SERA OTRA TELE]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F01%2F12%2Fpor-una-red-sostenible%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2010%2F01%2F12%2Fpor-una-red-sostenible%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><center></p>
<h1>
<a href="http://red-sostenible.net/">RED S@Stenible</a><br />
</h1>
<h1>
<a href="http://internetnoseraotratv.net/">INTERNET NO SERA OTRA TELE</a><br />
</h1>
<p></center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2010/01/12/por-una-red-sostenible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowlingMine Client (0.1.4) and Server (0.2) released</title>
		<link>http://blog.frameos.org/2009/12/23/howlingmine-client-0-1-4-and-server-0-2-released/</link>
		<comments>http://blog.frameos.org/2009/12/23/howlingmine-client-0-1-4-and-server-0-2-released/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 09:16:44 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[howlingmine]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=170</guid>
		<description><![CDATA[howlingmine-client ==== 0.1.4 / 2009-12-23 &#8212;&#8211; * Added Issue.find method * Updated examples * Added script/console script * Requires howlingmine-server 0.2 howlingmine-server ====== 0.2 / 2009-12-23 &#8212;&#8211; * Added find action to the plugin controller Links === [http://github.com/rubiojr/howlingmine-server](http://github.com/rubiojr/howlingmine-server) [http://github.com/rubiojr/howlingmine-client](http://github.com/rubiojr/howlingmine-client)]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F12%2F23%2Fhowlingmine-client-0-1-4-and-server-0-2-released%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F12%2F23%2Fhowlingmine-client-0-1-4-and-server-0-2-released%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>howlingmine-client<br />
====</p>
<p>0.1.4 / 2009-12-23<br />
&#8212;&#8211;</p>
<p>* Added Issue.find method<br />
* Updated examples<br />
* Added script/console script<br />
* Requires howlingmine-server 0.2</p>
<p>howlingmine-server<br />
======</p>
<p>0.2 / 2009-12-23<br />
&#8212;&#8211;</p>
<p>* Added find action to the plugin controller</p>
<p>Links<br />
===<br />
[http://github.com/rubiojr/howlingmine-server](http://github.com/rubiojr/howlingmine-server)</p>
<p>[http://github.com/rubiojr/howlingmine-client](http://github.com/rubiojr/howlingmine-client)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/12/23/howlingmine-client-0-1-4-and-server-0-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howling Mine: AR-esque json interface to Redmine issues</title>
		<link>http://blog.frameos.org/2009/12/15/howling-mine-ar-esque-json-interface-to-redmine-issues/</link>
		<comments>http://blog.frameos.org/2009/12/15/howling-mine-ar-esque-json-interface-to-redmine-issues/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 12:29:56 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[In the LAB]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[howlingmine]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=154</guid>
		<description><![CDATA[[Howling Mine](http://github.com/rubiojr/howlingmine-server) is a [Redmine](http://redmine.org) plugin that allows you to query Redmine issues via HTTP GET/POST, returning JSON in the response. howlingmine-client is a thin wrapper around the http interface provided by the howlingmine-server plugin. Installing the redmine plugin ============================= Before using the client library you need to install the howlingmine-server plugin in Redmine. There [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F12%2F15%2Fhowling-mine-ar-esque-json-interface-to-redmine-issues%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F12%2F15%2Fhowling-mine-ar-esque-json-interface-to-redmine-issues%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>[Howling Mine](http://github.com/rubiojr/howlingmine-server) is a [Redmine](http://redmine.org) plugin that allows you to query Redmine issues via HTTP GET/POST, returning JSON in the response.</p>
<p>howlingmine-client is a thin wrapper around the http interface provided by the howlingmine-server plugin.</p>
<p>Installing the redmine plugin<br />
=============================</p>
<p>Before using the client library you need to install the howlingmine-server plugin in Redmine. There are official docs on how to do this (see [here](http://www.redmine.org/wiki/redmine/Plugins)). Anyway, these are the steps required:</p>
<p>**IMPORTANT: the server plugin has only been tested in Redmine 0.8 stable branch, I don&#8217;t know if it will work with current trunk or past releases.**</p>
<p><script src="http://gist.github.com/256915.js?file=install_howlingmine_server.sh"></script></p>
<p>Now reload the redmine server (passenger, mongrel, nginx, whatever&#8230;) and check if the plugin has been detected going to **Administration->Plugins** in the Redmine web interface.</p>
<p>You&#8217;ll need to generate an Email API Key if you haven&#8217;t done it yet:</p>
<p>In Redmine, go to **Administration->Settings->Incoming Emails** tab and generate the key there.</p>
<p>That&#8217;s all, you are ready to test the plugin.</p>
<p>Using the Howling Mine Client library<br />
=====================================<br />
First of all, install the client library from gemcutter.org:</p>
<p>    gem install howlingmine-client<br />
<br/><br />
Now let&#8217;s show our Redmine who&#8217;s the boss here:</p>
<p><script src="http://gist.github.com/256909.js?file=howlingmine_client_example.rb"></script></p>
<p>There are a lot of things to implement and optimize in the current release, but don&#8217;t hesitate and open a ticket at [http://github.com/rubiojr/howlingmine-client/issues](http://github.com/rubiojr/howlingmine-client/issues) if you have something in mind.</p>
<p>Enjoy!</p>
<p>Related pages<br />
=============<br />
**Github**</p>
<p>[Howling Mine Client](http://github.com/rubiojr/howlingmine-client)</p>
<p>[Howling Mine Server](http://github.com/rubiojr/howlingmine-server)</p>
<p>**Howling Mine Client Docs**</p>
<p>[rdoc.info](http://rdoc.info/projects/rubiojr/howlingmine-client)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/12/15/howling-mine-ar-esque-json-interface-to-redmine-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AppFactory: a small Ruby DSL to create Mac OS X statusbar applications with ease</title>
		<link>http://blog.frameos.org/2009/12/02/appfactory-a-small-ruby-dsl-to-create-mac-os-x-statusbar-applications-with-ease/</link>
		<comments>http://blog.frameos.org/2009/12/02/appfactory-a-small-ruby-dsl-to-create-mac-os-x-statusbar-applications-with-ease/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 12:01:57 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[In the LAB]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[macruby]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=149</guid>
		<description><![CDATA[1. Install AppFactory and MacRuby gem install appfactory (gemcutter.org needs to be in your gem sources) Get MacRuby from http://macruby.org 2. Create the script for the application 3. Generate the Application Bundle appfactory &#8211;appname DeliciousReader &#8211;dsl delicious_reader_dsl.rb &#8211;bundle rest-client Voila! Check the screencast: http://appfactory.netcorex.org]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F12%2F02%2Fappfactory-a-small-ruby-dsl-to-create-mac-os-x-statusbar-applications-with-ease%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F12%2F02%2Fappfactory-a-small-ruby-dsl-to-create-mac-os-x-statusbar-applications-with-ease%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><strong>1. Install AppFactory and MacRuby</strong></p>
<p>gem install appfactory (gemcutter.org needs to be in your gem sources)
</p>
<p>Get MacRuby from <a href="http://macruby.org">http://macruby.org</a></p>
<p><strong>2. Create the script for the application<br />
</strong></p>
<p><script src="http://gist.github.com/247164.js?file=delicious_reader_dsl.rb"></script></p>
<p><strong>3. Generate the Application Bundle</strong></p>
<p>
appfactory &#8211;appname DeliciousReader &#8211;dsl delicious_reader_dsl.rb  &#8211;bundle rest-client
</p>
<p>Voila!</p>
<p>Check the screencast: <a href="http://appfactory.netcorex.org">http://appfactory.netcorex.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/12/02/appfactory-a-small-ruby-dsl-to-create-mac-os-x-statusbar-applications-with-ease/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a simple StatusBar application with MacRuby (Part II)</title>
		<link>http://blog.frameos.org/2009/11/30/create-a-simple-statusbar-application-with-macruby-part-ii/</link>
		<comments>http://blog.frameos.org/2009/11/30/create-a-simple-statusbar-application-with-macruby-part-ii/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 12:47:40 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=138</guid>
		<description><![CDATA[The previous post with a twist! The code: mr_status_bar_app_growl.tar.gz]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F11%2F30%2Fcreate-a-simple-statusbar-application-with-macruby-part-ii%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F11%2F30%2Fcreate-a-simple-statusbar-application-with-macruby-part-ii%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>The <a href="http://rubiojr.netcorex.org/blog/?p=124">previous post</a> with a twist!</p>
<p><center><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/NDpRaOkj9qg&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/NDpRaOkj9qg&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
</center></p>
<p>
<strong>The code:</strong></p>
<p><a href="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/11/mr_status_bar_app_growl.tar.gz" title="mr_status_bar_app_growl.tar.gz">mr_status_bar_app_growl.tar.gz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/11/30/create-a-simple-statusbar-application-with-macruby-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a simple StatusBar application with MacRuby</title>
		<link>http://blog.frameos.org/2009/11/30/create-a-simple-statusbar-application-with-macruby/</link>
		<comments>http://blog.frameos.org/2009/11/30/create-a-simple-statusbar-application-with-macruby/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 11:51:00 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[In the LAB]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[macruby]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=124</guid>
		<description><![CDATA[Here&#8217;s what you can do with a few lines of ruby and the power of MacRuby: Install MacRuby and run the ruby script with it macruby app.rb You will see a new icon in your statusbar Uploaded with plasq&#8216;s Skitch! Click it to show the menu. Enjoy! Download the code mr_status_bar_app.tar.gz Get MacRuby http://macruby.org Read [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F11%2F30%2Fcreate-a-simple-statusbar-application-with-macruby%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F11%2F30%2Fcreate-a-simple-statusbar-application-with-macruby%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Here&#8217;s what you can do with a few lines of ruby and the power of MacRuby:</p>
<p><script src="http://gist.github.com/245402.js?file=MacRuby+StatusBar+App"></script></p>
<p><strong>Install MacRuby and run the ruby script with it</strong></p>
<p><pre>
macruby app.rb
</pre>
<p>You will see a new icon in your statusbar</p>
<div class="thumbnail"><a href="http://skitch.com/rubiojr/njqcq/skitch"><img src="http://img.skitch.com/20091130-ecq3t6yg23mtrxj5u2drpy22es.preview.jpg" alt="Skitch" /></a><br /><span style="font-family: Lucida Grande, Trebuchet, sans-serif, Helvetica, Arial; font-size: 10px; color: #808080">Uploaded with <a href="http://plasq.com/">plasq</a>&#8216;s <a href="http://skitch.com">Skitch</a>!</span></div>
<p>
Click it to show the menu.
</p>
<p>Enjoy!</p>
<p><strong>Download the code</strong><br/><br />
<a href="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/11/mr_status_bar_app.tar.gz" title="mr_status_bar_app.tar.gz">mr_status_bar_app.tar.gz</a></p>
<p><strong>Get MacRuby</strong><br/><br />
<a href="http://macruby.org">http://macruby.org</a></p>
<p>Read <a href="http://rubiojr.netcorex.org/blog/?p=138">Part II</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/11/30/create-a-simple-statusbar-application-with-macruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unleash the power of your Chef CouchDB Database with custom views</title>
		<link>http://blog.frameos.org/2009/10/01/unleash-the-power-of-chef-chouchdb-database-custom-views/</link>
		<comments>http://blog.frameos.org/2009/10/01/unleash-the-power-of-chef-chouchdb-database-custom-views/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 13:22:03 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[chef]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=73</guid>
		<description><![CDATA[The following post is a step by step tutorial on adding custom views to your Chef CouchDB database. Custom views are useful, for example, to create reports and inventory sheets. They are quite handy when you want to know the status of some parts of your infrastructure at a glance. Adding a permanent view Permanent [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F10%2F01%2Funleash-the-power-of-chef-chouchdb-database-custom-views%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F10%2F01%2Funleash-the-power-of-chef-chouchdb-database-custom-views%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="padding-bottom: 20px;">The following post is a step by step tutorial on adding custom views to your Chef CouchDB database.</p>
<p>Custom views are useful, for example, to create reports and inventory sheets. They are quite handy when you want to know the status of some parts of your infrastructure at a glance.</p></div>
<h2>Adding a permanent view</h2>
<div style="padding-top: 20px; padding-bottom: 20px">
Permanent views are stored as couchdb documents, so they can be accessed anytime you want, as any other database document.</p>
<p>See <a href="http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views">http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views</a></p>
</div>
<h3>1. Fire up Futon (CouchDB Web Interface)<br />
</h3>
<div>Open a web browser and type your couchdb URL:</p>
<p>http://my-chef-server.example.com:5984/_utils/index.html</p>
<p><br/><br/>
</div>
<div><strong>Note:</strong></p>
<p>CouchDB binds to 127.0.0.1 by default, so if you are connecting to it from a remote host, you&#8217;ll need to either create an SSH tunnel to it or change the bind_address paramenter in the couchdb default.ini config file (<strong>Not recommended!</strong>).<br />
<br /><br/><br/>
</div>
<h3>2. Open the chef database (click the chef link)<br />
</h3>
<div>
<img style="border: solid 30px transparent;" src="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/10/futon.png" alt="futon.png" border="20" width="425" height="253" />
</div>
<h3>3. Select &#8220;Temporary view&#8230;&#8221; from the select view dropdown</h3>
<div style="border: solid 30px transparent; text-align:center;"><img src="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/10/futon_select_view.png" alt="futon_select_view.png" border="0" width="510" height="58" /></p>
<p><br/>
</div>
<h3>4. Add some javascript to the <strong>Map Function</strong></h3>
<div style="border: solid 30px transparent; text-align:center;"><img src="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/10/futon_temp_view1.png" alt="futon_temp_view.png" border="0" width="510" height="185" />
</div>
<h3>5. Click &#8220;Run&#8221; to test the view</h3>
<div style="padding-top: 20px; padding-bottom: 20px;">
Results will apear below the &#8220;View Code&#8221; box.
</div>
<h3>6. Save it as a permanent view</h3>
<div>
Click &#8220;Save As&#8230;&#8221; button in the form</p>
<div style="text-align:center; border: solid 30px transparent;"><img src="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/10/save_as_view1.png" alt="save_as_view.png" border="0" width="510" height="372" /></div>
<p>There you go!. You can create as many views as you want, they will make your life easier :D</p>
<p>The new view will appear under my_views node in the view selector:</p>
<div style="border: solid 30px transparent; text-align:center;"><img src="http://rubiojr.netcorex.org/blog/wp-content/uploads/2009/10/test_view_selector.png" alt="test_view_selector.png" border="0" width="510" height="80" /></div>
</div>
<h2>Testing Views Code with Temporary Views and Curl</h2>
<div style="padding-top: 20px">
Testing a view quickly with curl and temporary views:
</div>
<pre>
curl -X POST -d @post_data_file --header 'Content-type: application/json' http://your-chef-couchdb-server.com:5984/chef/_temp_view
</pre>
<p>Where @post_data_file is a json file describing the view:</p>
<p>For example:</p>
<pre>
{
  "map": "
    function(doc) {
      var date = new Date();
      var ohai_time = parseFloat(doc.attributes.ohai_time);
      var ctime = ((date.getTime()/1000) - ohai_time);
      if(ctime > 3600) {
        emit(doc.attributes.fqdn, parseInt(ctime/3600));
      }
    }"
}
</pre>
<p>This will list all the nodes out of contact (ohai_time greater than 1 hour)</p>
<p>Some more useful functions:</p>
<p><a href="http://gist.github.com/198908">http://gist.github.com/198908</a></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/10/01/unleash-the-power-of-chef-chouchdb-database-custom-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loading custom ohai plugins in your chef clients</title>
		<link>http://blog.frameos.org/2009/09/25/loading-custom-ohai-plugins-in-your-chef-clients/</link>
		<comments>http://blog.frameos.org/2009/09/25/loading-custom-ohai-plugins-in-your-chef-clients/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 11:15:49 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[chef]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=62</guid>
		<description><![CDATA[1. edit /etc/chef/client.rb 2. add the following line to the end of the file: Ohai::Config[:plugin_path]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F09%2F25%2Floading-custom-ohai-plugins-in-your-chef-clients%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F09%2F25%2Floading-custom-ohai-plugins-in-your-chef-clients%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>1. edit /etc/chef/client.rb<br />
2. add the following line to the end of the file:</p>
<p> Ohai::Config[:plugin_path] << '/etc/ohai/plugins' #you can choose<br />
any path you want</p>
<p>3. add your custom plugins there (i.e. /etc/ohai/plugins)<br />
4. reload the client:<br />
 /etc/init.d/chef-client restart</p>
<p>As an example, you can find a custom plugin that extends virtualization attribute adding a guest_lists sub-attribute here:</p>
<p><a href="http://github.com/rubiojr/ohai-plugins/blob/master/virtualization_extensions.rb">http://github.com/rubiojr/ohai-plugins/blob/master/virtualization_extensions.rb</a></p>
<p><strong>WARNING:</strong></p>
<p>There are no official docs on adding custom ohai plugins to your chef client AFAIK, thus the stuff above is a hack. Use it at your own risk :D</p>
<p>UPDATE: sample ohai plugin renamed to virtualization_extensions.rb</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/09/25/loading-custom-ohai-plugins-in-your-chef-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>chef_knives tips: restart inactive Chef clients</title>
		<link>http://blog.frameos.org/2009/09/24/chef_knives-tips-restart-inactive-chef-clients/</link>
		<comments>http://blog.frameos.org/2009/09/24/chef_knives-tips-restart-inactive-chef-clients/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 09:59:02 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[chef]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=58</guid>
		<description><![CDATA[If you need to restart all the chef-clients, this might be of some help: for h in `chef_node_last_checkin -t 35 &#124;awk '{print $1}'&#124;sed 's/://'`; do echo restarting $h; ssh root@$h /etc/init.d/chef-client restart;done Iterate over all the node names with ohai time (last time they contacted the chef-server) greater than 35 minutes and restart the client [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F09%2F24%2Fchef_knives-tips-restart-inactive-chef-clients%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F09%2F24%2Fchef_knives-tips-restart-inactive-chef-clients%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>If you need to restart all the chef-clients, this might be of some help:</p>
<pre>
for h in `chef_node_last_checkin -t 35 |awk '{print $1}'|sed 's/://'`; do echo restarting $h; ssh root@$h /etc/init.d/chef-client restart;done
</pre>
<p>Iterate over all the node names with ohai time (last time they contacted the chef-server) greater than 35 minutes and restart the client issuing a &#8216;/etc/init.d/chef-client restart&#8217; via SSH.</p>
<p>chef_node_last_checkin is a script provided by chef_knives:</p>
<p><a href="http://wiki.github.com/rubiojr/chef-knives/home">http://wiki.github.com/rubiojr/chef-knives/home</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/09/24/chef_knives-tips-restart-inactive-chef-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proxying a Chef Server with Apache</title>
		<link>http://blog.frameos.org/2009/09/14/proxying-a-chef-server-with-apache/</link>
		<comments>http://blog.frameos.org/2009/09/14/proxying-a-chef-server-with-apache/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 16:08:13 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[chef]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=54</guid>
		<description><![CDATA[Some notes on proxying a chef-server with Apache. Sometimes you have a chef-server outside your corporate firewall and the firewall is preventing your chef-nodes from accessing it (i.e. outgoing connections to 444/443 tcp are not allowed). You can setup a simple http proxy with Apache and proxy the nodes through it (if your proxy is [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F09%2F14%2Fproxying-a-chef-server-with-apache%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F09%2F14%2Fproxying-a-chef-server-with-apache%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Some notes on proxying a <a href="http://wiki.opscode.com/display/chef">chef-server</a> with Apache.</p>
<p>Sometimes you have a chef-server outside your corporate firewall and the firewall is preventing your chef-nodes from accessing it (i.e. outgoing connections to 444/443 tcp are not allowed). You can setup a simple http proxy with Apache and proxy the nodes through it (if your proxy is allowed to establish a tcp connection to 443/444, that is). Then you can fake the IP address of the real chef-server with a private DNS server (or editing /etc/hosts files per host&#8230;)</p>
<pre>

                             CHEF-SERVER
                              213.X.X.X
                     (my-chef-server.example.net)
                                 |
                              FIREWALL
___________________________________________________________________
|INTRANET                        |                                |
|                                |                                |
|                            CHEF PROXY (Apache)                  |
|                           192.168.04.10                         |
|                       (my-chef-server.example.net)              |
|                                |                                |
|                 _______________|_______________________         |
|                 |              |                      |         |
|           CHEF_NODE1        CHEF_NODE2           CHEF_NODE3     |
|_________________________________________________________________|
</pre>
<p>Sample Apache VirtualHost config file for the proxy:</p>
<pre>
&lt;VirtualHost *:444&gt;
	ServerName my-chef-server.example.net
	ProxyPreserveHost On
	SSLProxyEngine on
	SSLEngine On
     # sample cert/key files. You should change this and point to a valid one
	SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
	SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
	SSLCipherSuite ALL:!ADH:!EXPORT56:!RC4+RSA:+HIGH:!MEDIUM:!LOW:!SSLv2:+EXP:+eNULL
	ProxyPass / https://real-chef-server-ip-here:444/
	ProxyPassReverse / https://real-chef-server-ip-here:444/
&lt;/VirtualHost&gt;
&lt;VirtualHost *:443&gt;
	ServerName my-chef-server.example.net
	ProxyPreserveHost On
	SSLProxyEngine on
	SSLEngine On
     # sample cert/key files. You should change this and point to a valid one
	SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
	SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
	SSLCipherSuite ALL:!ADH:!EXPORT56:!RC4+RSA:+HIGH:!MEDIUM:!LOW:!SSLv2:+EXP:+eNULL
	ProxyPass / https://real-chef-server-ip-here:443/
	ProxyPassReverse / https://real-chef-server-ip-here:443/
&lt;/VirtualHost&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/09/14/proxying-a-chef-server-with-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>drop.io ruby client example</title>
		<link>http://blog.frameos.org/2009/04/17/dropio-ruby-client-example/</link>
		<comments>http://blog.frameos.org/2009/04/17/dropio-ruby-client-example/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 09:00:46 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Scripts]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=51</guid>
		<description><![CDATA[http://drop.io/rubyclient]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F04%2F17%2Fdropio-ruby-client-example%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F04%2F17%2Fdropio-ruby-client-example%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p style="clear: both">http://drop.io/rubyclient</p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/04/17/dropio-ruby-client-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming the Xen infrastructure in ruby</title>
		<link>http://blog.frameos.org/2009/04/01/programming-the-xen-infrastructure-in-ruby/</link>
		<comments>http://blog.frameos.org/2009/04/01/programming-the-xen-infrastructure-in-ruby/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 15:54:17 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=49</guid>
		<description><![CDATA[Pangea goes to Hollywood! http://www.xen-fu.org/blog/]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F04%2F01%2Fprogramming-the-xen-infrastructure-in-ruby%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2009%2F04%2F01%2Fprogramming-the-xen-infrastructure-in-ruby%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Pangea goes to Hollywood!</p>
<p>http://www.xen-fu.org/blog/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2009/04/01/programming-the-xen-infrastructure-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iphone] iphone / ipod video encoding</title>
		<link>http://blog.frameos.org/2008/12/14/iphone-iphone-ipod-video-encoding/</link>
		<comments>http://blog.frameos.org/2008/12/14/iphone-iphone-ipod-video-encoding/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 10:58:25 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=46</guid>
		<description><![CDATA[Tired of trying to find the right ffmpeg flags to encode the video 4 your device? Checkout Handbrake! HandBrakeCLI -Z &#8220;iPhone &#038; iPod Touch&#8221; -i matzs-keynote-small.mp4 -o matzs-keynote-small_iphone.m4v]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F12%2F14%2Fiphone-iphone-ipod-video-encoding%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F12%2F14%2Fiphone-iphone-ipod-video-encoding%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Tired of trying to find the right ffmpeg flags to encode the video 4 your device?</p>
<p>Checkout <a href="http://handbrake.fr/?article=download">Handbrake</a>! </p>
<p>HandBrakeCLI -Z &#8220;iPhone &#038; iPod Touch&#8221; -i matzs-keynote-small.mp4 -o matzs-keynote-small_iphone.m4v</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2008/12/14/iphone-iphone-ipod-video-encoding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby performance bits: regex libraries</title>
		<link>http://blog.frameos.org/2008/12/06/ruby-performance-bits-regex-libraries/</link>
		<comments>http://blog.frameos.org/2008/12/06/ruby-performance-bits-regex-libraries/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 22:57:26 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[In the LAB]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[ruby regex]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=45</guid>
		<description><![CDATA[Interesantes números midiendo el rendimiento de los diferentes &#8216;motores&#8217; de expresiones regulares que hay en ruby. Las pruebas se han hecho analizando un fichero de 1 millón de líneas de log de apache. ruby1.8.7 require 'benchmark' logfile = '/data/logs/httpd/old/1m' fields = [ '(\d+\.\d+\.\d+\.\d+)', # ip '(.*?)', # ident '(.*?)', # user '\[(.*?)\]', # datetime '"(.*?)"', [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F12%2F06%2Fruby-performance-bits-regex-libraries%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F12%2F06%2Fruby-performance-bits-regex-libraries%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Interesantes números midiendo el rendimiento de los diferentes &#8216;motores&#8217; de expresiones regulares que hay en ruby.</p>
<p>Las pruebas se han hecho analizando un fichero de 1 millón de líneas de log de apache.</p>
<p><strong>ruby1.8.7</strong></p>
<pre lang="ruby" >
require 'benchmark'

logfile = '/data/logs/httpd/old/1m'
fields = [
  '(\d+\.\d+\.\d+\.\d+)',    # ip
  '(.*?)',                   # ident
  '(.*?)',                   # user
  '\[(.*?)\]',               # datetime
  '"(.*?)"',                 # request
  '(\d+)',                   # code
  '(-|\d+)',                 # size
  '"(.*?)"',                 # referer
  '"(.*?)"',                 # user-agent
  '\[(.*?)\]'                # vhost
] 

re = "^#{fields.join('\s+')}$"
regex = /#{re}/

Benchmark.bm do |x|
  3.times do
    x.report {
      File.open logfile do |f|
        f.each_line do |l|
          regex.match(l)
        end
      end
    }
  end
end
</pre>
<p><code><br />
rubiojr@desire:~/lparse_bench$ ruby ruby_regex.rb<br />
         user     system      total        real<br />
    42.820000   0.430000  43.250000 ( 43.578923)<br />
    42.640000   0.520000  43.160000 ( 43.495074)<br />
    42.780000   0.540000  43.320000 ( 43.369753)<br />
</code><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>ruby1.9.1 r19983 (ejecutando el mísmo código de arriba)</strong><br />
<code><br />
rubiojr@desire:~/lparse_bench$ /opt/ruby1.9/bin/ruby ruby_regex.rb<br />
         user     system      total        real<br />
    13.200000   0.150000  13.350000 ( 13.357268)<br />
    13.190000   0.180000  13.370000 ( 13.401657)<br />
    13.220000   0.120000  13.340000 ( 13.333555)<br />
</code><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>ruby1.8.7 + oniguruma</strong></p>
<pre lang='ruby'>
require 'rubygems'
require 'oniguruma'
require 'benchmark'

logfile = '/data/logs/httpd/old/1m'
fields = [
  '(\d+\.\d+\.\d+\.\d+)',    # ip
  '(.*?)',                   # ident
  '(.*?)',                   # user
  '\[(.*?)\]',               # datetime
  '"(.*?)"',                 # request
  '(\d+)',                   # code
  '(-|\d+)',                 # size
  '"(.*?)"',                 # referer
  '"(.*?)"',                 # user-agent
  '\[(.*?)\]'                # vhost
]

re = "^#{fields.join('\s+')}$"
regex = Oniguruma::ORegexp.new(re)

Benchmark.bm do |x|
  3.times do
    x.report {
      File.open logfile do |f|
        f.each_line do |l|
          regex.match(l)
        end
      end
    }
  end
end
</pre>
<p><code><br />
rubiojr@desire:~/lparse_bench$ ruby oniguruma_regex.rb<br />
         user     system      total        real<br />
    12.500000   0.570000  13.070000 ( 13.146782)<br />
    12.520000   0.600000  13.120000 ( 13.242722)<br />
    12.470000   0.530000  13.000000 ( 13.010874)<br />
</code></p>
<p><a href="http://oniguruma.rubyforge.org/">Oniguruma</a> forma parte de ruby1.9, lo que parece que explica la similitud de los resultados obtenidos con ruby1.8+oniguruma y ruby1.9.1.</p>
<p>Está claro que el motor de ruby1.8 no es el candidato ideal para el <a href="http://wikis.sun.com/display/WideFinder/Wide+Finder+Home">WayFinder Project</a> :D</p>
<p><strong>Update: jruby1.1.6 RC1 (IcedTea6 1.3.1)</strong><br />
<code><br />
rubiojr@desire:~/lparse_bench$ jruby ruby_regex.rb<br />
         user     system      total        real<br />
    17.260000   0.220000  17.480000 ( 18.085660)<br />
    16.430000   0.160000  16.590000 ( 16.888714)<br />
    16.240000   0.220000  16.460000 ( 16.728076)<br />
</code><br />
JRuby 1.1 incluye un port de Oniguruma a Java, de acuerdo con las &#8220;<a href="http://wiki.jruby.org/wiki/JRuby_1.1">release notes</a>&#8220;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2008/12/06/ruby-performance-bits-regex-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://blog.frameos.org/2008/11/17/sake-inauguracion-de-la-seccion-del-sake/</link>
		<comments>http://blog.frameos.org/2008/11/17/sake-inauguracion-de-la-seccion-del-sake/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 12:41:41 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Scripts]]></category>
		<category><![CDATA[ruby sake]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=44</guid>
		<description><![CDATA[Hoy me han encomendado la &#8216;divina&#8217; tarea de comprobar 6 cupones de la ONCE y ver si habían sido premiados, así que para no deprimirme demasiado he decidido inaugurar la sección del sake del blog. Necesitarás tener rubygems, sake y mechanize instalado para poder usar la &#8216;divina&#8217; herramienta: gem install sake mechanize A continuación instala [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F11%2F17%2Fsake-inauguracion-de-la-seccion-del-sake%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F11%2F17%2Fsake-inauguracion-de-la-seccion-del-sake%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Hoy me han encomendado la <span style="font-style: italic;">&#8216;divina&#8217;</span> tarea de comprobar 6 cupones de la <a href="http://www.once.es">ONCE</a> y ver si habían sido premiados, así que para no deprimirme demasiado he decidido inaugurar la sección del <a href="http://errtheblog.com/posts/60-sake-bomb">sake</a> del blog.</p>
<p>Necesitarás tener rubygems, sake y mechanize instalado para poder usar la &#8216;divina&#8217; herramienta:</p>
<p>gem install sake mechanize</p>
<p>A continuación instala el <span style="font-style: italic;">sake task</span>:</p>
<p><code><br />wget "http://github.com/rubiojr/sake-tasks/tree/master%2Fonce%2Fcheck_number.sake?raw=true" -O once_check_number.sake</p>
<p>sake -i once_check_number.sake<br /></code></p>
<p>La tarea ya está lista para ser usada:</p>
<p><code><br />rubiojr@desire:~$ sake once:check_number 20081101 01234 011<br />El número 01234 no ha obtenido premio en la fecha 01/11/2008.</p>
<p>rubiojr@desire:~$ sake once:check_number 20081116 01234 011<br />¡ENHORABUENA! El número 01234 de la serie 011 ha sido premiado con 2 Euros por cupón en la fecha 16/11/2008</p>
<p>rubiojr@desire:~$ sake once:check_number <br />Usage: sake once:check_number &lt;fecha&gt; &lt;numero&gt; &lt;serie&gt;<br /></code></p>
<p>
<p class="scribefire-powered">Powered by <a href="http://www.scribefire.com/">ScribeFire</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2008/11/17/sake-inauguracion-de-la-seccion-del-sake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pheeew!</title>
		<link>http://blog.frameos.org/2008/11/14/pheeew/</link>
		<comments>http://blog.frameos.org/2008/11/14/pheeew/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 18:13:17 +0000</pubDate>
		<dc:creator>rubiojr</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rubiojr.netcorex.org/blog/?p=43</guid>
		<description><![CDATA[Oh man, LISA is awesome. Tech sessions finish today. I loved Bruce Schneier, David Wagner and Tobi Oetiker talks, loved them! Uploading some pictures to Google Picasa. Lovely sunny San Diego weather by the way. Going back to Spain and the real life tomorrow :D. peace.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F11%2F14%2Fpheeew%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.frameos.org%2F2008%2F11%2F14%2Fpheeew%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Oh man, <a href="http://www.usenix.org/events/lisa08">LISA</a> is awesome. Tech sessions finish today.</p>
<p>I loved <a href="http://www.schneier.com/">Bruce Schneier</a>, <a href="http://www.cs.berkeley.edu/~daw/">David Wagner</a> and <a href="http://tobi.oetiker.ch/">Tobi Oetiker</a> talks, loved them!</p>
<p>Uploading some <a href="http://picasaweb.google.com/el.caniggia/Lisa2008">pictures</a> to Google Picasa. Lovely sunny San Diego weather by the way.</p>
<p>Going back to Spain and the real life tomorrow :D.</p>
<p>peace.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.frameos.org/2008/11/14/pheeew/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
