<?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>Mundo Ruby &#187; Ruby</title>
	<atom:link href="http://www.mundoruby.com.ar/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mundoruby.com.ar</link>
	<description>Ruby Artists, Hackers y otras yerbas ...</description>
	<lastBuildDate>Wed, 12 Aug 2009 23:02:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>First stable beta of ESearchy is out!</title>
		<link>http://www.mundoruby.com.ar/2009/07/14/first-stable-beta-of-esearchy-is-out/</link>
		<comments>http://www.mundoruby.com.ar/2009/07/14/first-stable-beta-of-esearchy-is-out/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 13:02:22 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=145</guid>
		<description><![CDATA[
Finally, after weeks of work, the first stable Beta of ESearchy is up and running in github&#8217;s gem repository.
Esearchy is a small library capable of searching the internet for email addresses. Currently, the supported search methods are engines such as Google, Bing, Yahoo, PGP servers, GoogleGroups, Linkedin, etc , but I intend to add many [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>Finally, after weeks of work, the first stable Beta of ESearchy is up and running in github&#8217;s gem repository.<br />
Esearchy is a small library capable of searching the internet for email addresses. Currently, the supported search methods are engines such as Google, Bing, Yahoo, PGP servers, GoogleGroups, Linkedin, etc , but I intend to add many more.</p>
<p>Also, the library searches inside .pdf, .docx, .xlsx, .pptx, asn and .txt files for emails addresses and adds them to the list of found accounts. Finally, we have support for .docs files but for now only in Windows Platforms. (For more information visit: <a href="http://github.com/FreedomCoder/esearchy/tree/master"> Github </a> .</p>
<p>In order to install it you simple add the repository and then install the gem, as shown below.</p>
<p>
<div class="geshifilter">
<div class="geshifilter-bash" style="font-family: monospace;">
<ol>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&gt; &nbsp;gem sources -a http://gems.github.com</div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&gt; &nbsp;gem <span style="color: #c20cb9; font-weight: bold;">install</span> FreedomCoder-esearchy</div>
</li>
</ol>
</div>
</div>
<p>Once the gem is installed, you can create a new search opening and/or use the &#8220;esearchy&#8221; CLI tool but it&#8217;s really basic so far and it does not has all of the plugins.</p>
<div class="geshifilter">
<div class="geshifilter-ruby" style="font-family: monospace;">
<ol>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&#8216;esearchy&#8217;</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp;</div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal"><span style="color:#6666ff; font-weight:bold;">ESearchy::LOG</span>.<span style="color:#9900CC;">level</span> = <span style="color:#6666ff; font-weight:bold;">ESearchy::APP</span> <span style="color:#008000; font-style:italic;">#Output to the stdout. </span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp;</div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">ESearchy.<span style="color:#9900CC;">create</span> <span style="color:#996600;">&quot;domain.com&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span> |d|</div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">yahoo_key</span> = <span style="color:#996600;">&quot;yourAPIkeygoeshere&quot;</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">bing_key</span> = <span style="color:#996600;">&quot;yourAPIkeygoeshere&quot;</span> </div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; <span style="color:#008000; font-style:italic;"># if you want to also look in LinkedIn</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">company_name</span> <span style="color:#996600;">&quot;Company Name&quot;</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; <span style="color:#008000; font-style:italic;">#A user is needed in order to search within Linkedin</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">linkedin_credentials</span> <span style="color:#996600;">&quot;myuser@linkedin.com&quot;</span>, <span style="color:#996600;">&quot;mypwd&quot;</span> </div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">maxhits</span> = <span style="color:#006666;">50</span> </div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">search</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal">&nbsp; d.<span style="color:#9900CC;">save_to_file</span> <span style="color:#996600;">&quot;company_emails.txt&quot;</span></div>
</li>
<li style="font-family: monospace; font-weight: normal;">
<div style="font-family: monospace; font-weight: normal; font-style: normal"><span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
</ol>
</div>
</div>
<p>
If you have any comments, issues or want to submit a bug please do so on<br />
<a href="http://github.com/FreedomCoder/esearchy/issues">http://github.com/FreedomCoder/esearchy/issues</a></p>
<p> Hopefully it will be useful to you.<br /> <img src='http://www.mundoruby.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</p>
<p>(Via <a href="http://www.freedomcoder.com.ar">自由編碼人</a>.) Original Link: <a href="http://www.freedomcoder.com.ar/node/155#comments">First stable beta of ESearchy is out!</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/07/14/first-stable-beta-of-esearchy-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Community Highlights: Ruby Heroes</title>
		<link>http://www.mundoruby.com.ar/2009/06/13/community-highlights-ruby-heroes/</link>
		<comments>http://www.mundoruby.com.ar/2009/06/13/community-highlights-ruby-heroes/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 00:23:10 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Heroes]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=117</guid>
		<description><![CDATA[
This week I’m happy to tell you about a new set of articles which will be appearing here on the Rails blog called “Community Highlights”.  This new series will feature people/projects/sites from the Rails community that may deserve a little extra recognition.
This week, we’re going to start with a few people who received awards [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>This week I’m happy to tell you about a new set of articles which will be appearing here on the Rails blog called “Community Highlights”.  This new series will feature people/projects/sites from the Rails community that may deserve a little extra recognition.</p>
<p>This week, we’re going to start with a few people who received awards on stage at Railsconf 2009, this years Ruby Heroes.</p>
<p><strong>Brian Helmkamp</strong></p>
<p><img src="http://weblog.rubyonrails.org/assets/2009/6/10/Picture_444_1.png" /></p>
<div>Brian has been a contributing member of the Ruby community for 4 years now, but is most well known for his testing library <a href="http://gitrdoc.com/brynary/webrat/tree/master/">Webrat</a>.  He’s a contributer to Rails, RSpec, Rubinius, and is a co-author on the recent <a href="http://www.pragprog.com/titles/achbd/the-rspec-book">RSpec Book</a>.  More recently he’s been helping out the Rails core team with Rack:Test, and Rack:Debug.</p>
<p>His Blog: <a href="http://www.brynary.com/">http://www.brynary.com/</a><br />
Twitter: <a href="http://twitter.com/brynary">brynary</a></div>
</p>
<div></div>
<p><strong>Aman Gupta</strong></p>
<p><img src="http://weblog.rubyonrails.org/assets/2009/6/10/Picture_445_1.png" /></p>
<div>Aman has taken over the maintenance, new features, and the recent releases of <a href="http://rubyeventmachine.com/">EventMachine</a>, which is an invaluable tool for writing fast ruby applications. He’s also the author behind <a href="http://github.com/tmm1/amqp/tree">amqp</a> &#038; <a href="http://github.com/tmm1/xmpp4em/tree">xmpp4em</a> gems which are deployed far and wide.</p>
<p>Github: <a href="http://github.com/tmm1">http://github.com/tmm1</a><br />
Twitter: <a href="http://twitter.com/tmm1">tmm1</a></div>
</p>
<div></div>
<p><strong>Luis Lavena</strong></p>
<p><img src="http://weblog.rubyonrails.org/assets/2009/6/12/LuisLavena.png" /></p>
<div>Luis has done a lot for the Ruby community in Argentina, but he’s most well known in our community for the work he’s done for windows users maintaining the <a href="http://rubyforge.org/projects/rubyinstaller/">One-Click Ruby Installer</a>.  Recently he’s put up a <a href="http://pledgie.com/campaigns/4435">Plegie</a> to help get the windows installer a new home.</p>
<p>His Blog: <a href="http://blog.mmediasys.com/">http://blog.mmediasys.com/</a><br />
Twitter: <a href="http://twitter.com/luislavena">luislavena</a></div>
</p>
<div></div>
<p><strong>Pat Allan</strong></p>
<p><img src="http://weblog.rubyonrails.org/assets/2009/6/12/Pat-Allan.png" /></p>
<div>Pat is the mastermind behind <a href="http://freelancing-god.github.com/ts/en/">Thinking Sphinx</a> which has become a standard when it comes to full-text search in Rails.  He’s also one of the guys that has helped create the phenomenon known as <a href="http://railscamp08.org/">Railscamp</a>, where I hear he makes some killer pancakes.</p>
<p>His Blog: <a href="http://freelancing-gods.com/">http://freelancing-gods.com/</a><br />
Twitter: <a href="http://twitter.com/Pat">Pat</a></div>
</p>
<div></div>
<p><strong>Dan Kubb</strong></p>
<p><img src="http://weblog.rubyonrails.org/assets/2009/6/12/DanKubb.png" /></p>
<div>Dan been tirelessly working on one of the hardest Ruby projects around, <a href="http://datamapper.org/doku.php">DataMapper</a>.  He became the official maintainer after Sam Smoot and since then has completely rewritten the test suite to give DataMapper better coverage, has come up with a viable path to completion, and is currently working on making sure DataMapper works great with Rails 3.</p>
<p>Github: <a href="http://github.com/dkubb">http://github.com/dkubb</a><br />
Twitter: <a href="http://twitter.com/dkubb">dkubb</a></div>
</p>
<div></div>
<p><strong>John Nunemaker</strong></p>
<p><img src="http://weblog.rubyonrails.org/assets/2009/6/12/JohnNunemaker.png" /></p>
<div>Although John Nunemaker has released several widely used open source libraries, like <a href="http://httparty.rubyforge.org/">HTTParty</a> and <a href="http://happymapper.rubyforge.org/">HappyMapper</a>, his main contribution in my opinion comes from his blog <a href="http://railstips.org/">Rails Tips</a>.  Over the past year he’s written an incredible number <a href="http://railstips.org/smorgasbord/">educational blog posts</a> on many Ruby and Rails topics.</p>
<p>RailsTips: <a href="http://railstips.org/">http://railstips.org/</a><br />
Twitter: <a href="http://twitter.com/jnunemaker">jnunemaker</a></div>
</p>
<p>Those are your six Ruby Hero’s for 2009. If you’re interested you can also <a href="http://railsconf.blip.tv/file/2086061/">watch a video</a> of the award ceremony which talks more about the methodology about how they were chosen and see 5 of these guys receive their awards on stage at Railsconf 2009.</p>
</p>
<p>(Via <a href="http://weblog.rubyonrails.org/">Riding Rails</a>.)  Original Link: <a href="http://feedproxy.google.com/~r/RidingRails/~3/GRpbbG-Zgx8/community-highlights-ruby-heroes">Community Highlights: Ruby Heroes</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/06/13/community-highlights-ruby-heroes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pequeñas delicias de las expresiones regulares</title>
		<link>http://www.mundoruby.com.ar/2009/06/13/pequenas-delicias-de-las-expresiones-regulares/</link>
		<comments>http://www.mundoruby.com.ar/2009/06/13/pequenas-delicias-de-las-expresiones-regulares/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 19:57:28 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=113</guid>
		<description><![CDATA[Como les conté acá y acá, estoy escribiendo un tokenizador para un wiki que estoy programando. Y hoy me encontré con una cosa muy extraña de las expresiones regulares.
En ruby la función match sirve para buscar el primer match de una regex dentro de un string. Por ejemplo (usando el irb):

irb(main):001:0&#62; m = /a/.match "babab"
=&#62; #&#60;MatchData "a"&#62;
irb(main):002:0&#62; m.pre_match
=&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Como les conté <a href="http://aurelianito.blogspot.com/2009/06/tokenizer-de-rapidito.html">acá</a> y <a href="http://aurelianito.blogspot.com/2009/06/tokenizer-de-rapidito-segunda-version.html">acá</a>, estoy escribiendo un tokenizador para un wiki que estoy programando. Y hoy me encontré con una cosa muy extraña de las expresiones regulares.<br />
En ruby la función <code>match</code> sirve para buscar el primer match de una regex dentro de un string. Por ejemplo (usando el irb):</p>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 1.1em; background-color: #ffffcc; color: #000000; overflow-x: auto; overflow-y: auto; margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 631px; padding: 10px;">irb(main):001:0&gt; m = /a/.match "babab"
=&gt; #&lt;MatchData "a"&gt;
irb(main):002:0&gt; m.pre_match
=&gt; "b"
irb(main):003:0&gt; m[0]
=&gt; "a"</pre>
</pre>
<p>En particular, el <code>pre_match</code> es lo que está antes del match en el string. También según había entendido (mal) <code>/\Z/</code> matchea con el final del string. Por ejemplo:</p>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 1.1em; background-color: #ffffcc; color: #000000; overflow-x: auto; overflow-y: auto; margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 631px; padding: 10px;">irb(main):004:0&gt; m = /\Z/.match "hola"
=&gt; #&lt;MatchData ""&gt;
irb(main):005:0&gt; m.pre_match
=&gt; "hola"</pre>
</pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Pero, <code>/\Z/</code> tiene un comportamiento muy extraño, aunque <a href="http://www.regular-expressions.info/reference.html">documentado</a>, cuando el último caracter antes del final es un <code>\n</code>. Lo que pasa es que el <code>pre_match</code> queda ¡sin el<code>\n</code> del final!. Lo muestro en el irb:</span></pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 1.1em; background-color: #ffffcc; color: #000000; overflow-x: auto; overflow-y: auto; margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 631px; padding: 10px;">irb(main):006:0&gt; m = /\Z/.match "\n"
=&gt; #&lt;MatchData ""&gt;
irb(main):007:0&gt; m.pre_match
=&gt; ""</pre>
<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Para que no se manduque el <code>\n</code>, hay que usar <code>/\z/</code> (¡en minúscula!):</span></pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 1.1em; background-color: #ffffcc; color: #000000; overflow-x: auto; overflow-y: auto; margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 631px; padding: 10px;">irb(main):008:0&gt; m = /\z/.match "\n"
=&gt; #&lt;MatchData ""&gt;
irb(main):009:0&gt; m.pre_match
=&gt; "\n"</pre>
<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Por lo tanto tuve que tocar el tokenizer, ahora la función de initialize quedó así (miren el cambio de la "Z" a "z"):</span></pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 1.1em; background-color: #ffffcc; color: #000000; overflow-x: auto; overflow-y: auto; margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 631px; padding: 10px;">    <span style="color: #aa0000; font-weight: bold;">def </span><span style="color: #007777;">initialize</span><span style="color: #444477; font-weight: bold;">(</span> <span style="color: #000044;">delimiters</span> <span style="color: #444477; font-weight: bold;">)</span>
      <span style="color: #337777;">@delimiter_list</span> <span style="color: #444477; font-weight: bold;">=</span> <span style="color: #444477; font-weight: bold;">[[/</span><span style="color: #bb6666;"><span>\z</span></span><span style="color: #444477; font-weight: bold;">/,</span> <span style="color: #009999;">:finish</span><span style="color: #444477; font-weight: bold;">]]</span> <span style="color: #444477; font-weight: bold;">+</span>
        <span style="color: #000044;">delimiters</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">to_a</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">map</span> <span style="color: #444477; font-weight: bold;">{</span> <span style="color: #444477; font-weight: bold;">|</span><span style="color: #000044;">k</span><span style="color: #444477; font-weight: bold;">,</span><span style="color: #000044;">arr</span><span style="color: #444477; font-weight: bold;">|</span> <span style="color: #000044;">arr</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">map</span> <span style="color: #444477; font-weight: bold;">{</span> <span style="color: #444477; font-weight: bold;">|</span><span style="color: #000044;">re</span><span style="color: #444477; font-weight: bold;">|</span> <span style="color: #444477; font-weight: bold;">[</span><span style="color: #000044;">re</span><span style="color: #444477; font-weight: bold;">,</span> <span style="color: #000044;">k</span><span style="color: #444477; font-weight: bold;">]</span> <span style="color: #444477; font-weight: bold;">}</span> <span style="color: #444477; font-weight: bold;">}.</span><span style="color: #000044;">inject</span><span style="color: #444477; font-weight: bold;">([])</span> <span style="color: #444477; font-weight: bold;">{</span> <span style="color: #444477; font-weight: bold;">|</span><span style="color: #000044;">ac</span><span style="color: #444477; font-weight: bold;">,</span><span style="color: #000044;">ps</span><span style="color: #444477; font-weight: bold;">|</span> <span style="color: #000044;">ac</span> <span style="color: #444477; font-weight: bold;">+</span> <span style="color: #000044;">ps</span> <span style="color: #444477; font-weight: bold;">}</span>
      <span style="color: #337777;">@match_cache</span> <span style="color: #444477; font-weight: bold;">=</span> <span style="color: #0077ff;">nil</span>
    <span style="color: #aa0000; font-weight: bold;">end</span></pre>
<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Y el test que captura el problema que genera usar \Z en vez de \z quedó así:</span></pre>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 1.1em; background-color: #ffffcc; color: #000000; overflow-x: auto; overflow-y: auto; margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; width: 631px; padding: 10px;">  <span style="color: #aa0000; font-weight: bold;">def </span><span style="color: #007777;">test_carriage_return_ending</span>
    <span style="color: #000044;">tok</span> <span style="color: #444477; font-weight: bold;">=</span> <span style="color: #0077ff;">Tokenizer</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">new</span><span style="color: #444477; font-weight: bold;">(</span> <span style="color: #009999;">:a_kind</span> <span style="color: #444477; font-weight: bold;">=&gt;</span> <span style="color: #444477; font-weight: bold;">[/</span><span style="color: #bb6666;">!</span><span style="color: #444477; font-weight: bold;">/]</span> <span style="color: #444477; font-weight: bold;">)</span>
    <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">source</span> <span style="color: #444477; font-weight: bold;">=</span> <span style="color: #444477; font-weight: bold;">"</span><span style="color: #994444;">bang!<span>\n</span></span><span style="color: #444477; font-weight: bold;">"</span>
    <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">next_token</span>
    <span style="color: #000044;">assert_equal</span> <span style="color: #0077ff;">true</span><span style="color: #444477; font-weight: bold;">,</span> <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">has_next?</span>
    <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">next_token</span>
    <span style="color: #000044;">assert_equal</span> <span style="color: #0077ff;">true</span><span style="color: #444477; font-weight: bold;">,</span> <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">has_next?</span>
    <span style="color: #000044;">assert_equal</span> <span style="color: #444477; font-weight: bold;">"</span><span style="color: #994444;"><span>\n</span></span><span style="color: #444477; font-weight: bold;">",</span> <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">next_token</span><span style="color: #444477; font-weight: bold;">[</span><span style="color: #dd5555;">0</span><span style="color: #444477; font-weight: bold;">].</span><span style="color: #000044;">to_s</span>
    <span style="color: #000044;">assert_equal</span> <span style="color: #0077ff;">false</span><span style="color: #444477; font-weight: bold;">,</span> <span style="color: #000044;">tok</span><span style="color: #444477; font-weight: bold;">.</span><span style="color: #000044;">has_next?</span>
  <span style="color: #aa0000; font-weight: bold;">end</span></pre>
<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Happy hacking,</span></pre>
<p>Aureliano.</p>
<div><img style="border: 0px initial initial;" src="https://blogger.googleusercontent.com/tracker/1437970354124720603-4301954417416078176?l=aurelianito.blogspot.com" alt="" width="1" height="1" /></div>
<p>(Via <a href="http://aurelianito.blogspot.com/">aurelianito</a>.) Original Link: <a href="http://aurelianito.blogspot.com/2009/06/pequenas-delicias-de-las-expresiones.html">Pequeñas delicias de las expresiones regulares</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/06/13/pequenas-delicias-de-las-expresiones-regulares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syntax highlighting de Ruby en mi blog</title>
		<link>http://www.mundoruby.com.ar/2009/06/11/syntax-highlighting-de-ruby-en-mi-blog/</link>
		<comments>http://www.mundoruby.com.ar/2009/06/11/syntax-highlighting-de-ruby-en-mi-blog/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 20:45:24 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=102</guid>
		<description><![CDATA[Tomando como base lo que dice en este post, hice un script en ruby que genera html con clases que se pueden poner coloritos con css:
#!/usr/bin/env ruby

require 'rubygems'
require 'syntax/convertors/html'

class Syntax::Convertors::HTML
  def convert( text, klass="" )
    html = "&#60;pre class=\"#{klass}\"&#62;"
    regions = []
    @tokenizer.tokenize( text ) [...]]]></description>
			<content:encoded><![CDATA[<p>Tomando como base lo que dice <a href="http://blog.michaelgreenly.com/2007/12/blog-post.html">en este post</a>, hice un script en ruby que genera html con clases que se pueden poner coloritos con css:</p>
<pre class="ruby"><span class="comment">#!/usr/bin/env ruby</span>

<span class="ident">require</span> <span class="punct">'</span><span class="string">rubygems</span><span class="punct">'</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">syntax/convertors/html</span><span class="punct">'</span>

<span class="keyword">class </span><span class="class">Syntax::Convertors::HTML</span>
  <span class="keyword">def </span><span class="method">convert</span><span class="punct">(</span> <span class="ident">text</span><span class="punct">,</span> <span class="ident">klass</span><span class="punct">="</span><span class="punct">"</span> <span class="punct">)</span>
    <span class="ident">html</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">&lt;pre class=<span class="escape">\"</span><span class="expr">#{klass}</span><span class="escape">\"</span>&gt;</span><span class="punct">"</span>
    <span class="ident">regions</span> <span class="punct">=</span> <span class="punct">[]</span>
    <span class="attribute">@tokenizer</span><span class="punct">.</span><span class="ident">tokenize</span><span class="punct">(</span> <span class="ident">text</span> <span class="punct">)</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">tok</span><span class="punct">|</span>
      <span class="ident">value</span> <span class="punct">=</span> <span class="ident">html_escape</span><span class="punct">(</span><span class="ident">tok</span><span class="punct">)</span>
      <span class="keyword">case</span> <span class="ident">tok</span><span class="punct">.</span><span class="ident">instruction</span>
        <span class="keyword">when</span> <span class="symbol">:region_close</span> <span class="keyword">then</span>
          <span class="ident">regions</span><span class="punct">.</span><span class="ident">pop</span>
          <span class="ident">html</span> <span class="punct">&lt;&lt;</span> <span class="punct">"</span><span class="string">&lt;/span&gt;</span><span class="punct">"</span>
        <span class="keyword">when</span> <span class="symbol">:region_open</span> <span class="keyword">then</span>
          <span class="ident">regions</span><span class="punct">.</span><span class="ident">push</span> <span class="ident">tok</span><span class="punct">.</span><span class="ident">group</span>
          <span class="ident">html</span> <span class="punct">&lt;&lt;</span> <span class="punct">"</span><span class="string">&lt;span class=<span class="escape">\"</span><span class="expr">#{tok.group}</span><span class="escape">\"</span>&gt;<span class="expr">#{value}</span></span><span class="punct">"</span>
        <span class="keyword">else</span>
          <span class="keyword">if</span> <span class="ident">tok</span><span class="punct">.</span><span class="ident">group</span> <span class="punct">==</span> <span class="punct">(</span> <span class="ident">regions</span><span class="punct">.</span><span class="ident">last</span> <span class="punct">||</span> <span class="symbol">:normal</span> <span class="punct">)</span>
            <span class="ident">html</span> <span class="punct">&lt;&lt;</span> <span class="ident">value</span>
          <span class="keyword">else</span>
            <span class="ident">html</span> <span class="punct">&lt;&lt;</span> <span class="punct">"</span><span class="string">&lt;span class=<span class="escape">\"</span><span class="expr">#{tok.group}</span><span class="escape">\"</span>&gt;<span class="expr">#{value}</span>&lt;/span&gt;</span><span class="punct">"</span>
          <span class="keyword">end</span>
      <span class="keyword">end</span>
    <span class="keyword">end</span>
    <span class="ident">html</span> <span class="punct">&lt;&lt;</span> <span class="punct">"</span><span class="string">&lt;/span&gt;</span><span class="punct">"</span> <span class="keyword">while</span> <span class="ident">regions</span><span class="punct">.</span><span class="ident">pop</span>
    <span class="ident">html</span> <span class="punct">&lt;&lt;</span> <span class="punct">"</span><span class="string">&lt;/pre&gt;</span><span class="punct">"</span>
    <span class="ident">html</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="ident">convertor</span> <span class="punct">=</span> <span class="constant">Syntax</span><span class="punct">::</span><span class="constant">Convertors</span><span class="punct">::</span><span class="constant">HTML</span><span class="punct">.</span><span class="ident">for_syntax</span> <span class="punct">"</span><span class="string">ruby</span><span class="punct">"</span>
<span class="ident">puts</span> <span class="ident">convertor</span><span class="punct">.</span><span class="ident">convert</span><span class="punct">(</span> <span class="global">$stdin</span><span class="punct">.</span><span class="ident">read</span><span class="punct">,</span> <span class="punct">"</span><span class="string">ruby</span><span class="punct">"</span>  <span class="punct">)</span></pre>
<p>En el script monkeypatchié un toque para que agregue la clase &#8220;ruby&#8221; al tag pre que engloba todo el código y aparte estoy usando estos estilos:</p>
<p><code></p>
<pre>&lt;style&gt;
pre.ruby {
      background-color: #ffffcc;
      color: #000000;
      padding: 10px;
      font-size: 1.1em;
      overflow: auto;
      margin: 4px 0px;
      width: 95%;
      border: thin dashed;
}
.ruby .normal {}
.ruby .comment { color: #005; font-style: italic; }
.ruby .keyword { color: #A00; font-weight: bold; }
.ruby .method { color: #077; }
.ruby .class { color: #074; }
.ruby .module { color: #050; }
.ruby .punct { color: #447; font-weight: bold; }
.ruby .symbol { color: #099; }
.ruby .string { color: #944; }
.ruby .char { color: #F07; }
.ruby .ident { color: #004; }
.ruby .constant { color: #07F; }
.ruby .regex { color: #B66; }
.ruby .number { color: #D55; }
.ruby .attribute { color: #377; }
.ruby .global { color: #3B7; }
.ruby .expr { color: #227; }
&lt;/style&gt;</pre>
<p></code></p>
<p>Una cosa más, si estás viendo este post en otro lugar que no sea <a href="http://aurelianito.blogspot.com">aurelianito.blogspot.com</a> no vas a ver el resaltado de sintaxis (ya que no va a tener los estilos).</p>
<p>Hasta la próxima,<br />
Aureliano</p>
<div class="blogger-post-footer"><img src="http://aurelianito.blogspot.com//blogger.googleusercontent.com/tracker/1437970354124720603-8510335889692075579?l=aurelianito.blogspot.com" alt="" width="1" height="1" /></div>
<p>(Via <a href="http://aurelianito.blogspot.com/">aurelianito</a>.)  Original Link: <a href="http://aurelianito.blogspot.com/2009/06/syntax-highlighting-de-ruby-en-mi-blog.html">Syntax highlighting de Ruby en mi blog</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/06/11/syntax-highlighting-de-ruby-en-mi-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyInstaller: One-Clicks need a new home, can you help him?</title>
		<link>http://www.mundoruby.com.ar/2009/05/19/rubyinstaller-one-clicks-need-a-new-home-can-you-help-him/</link>
		<comments>http://www.mundoruby.com.ar/2009/05/19/rubyinstaller-one-clicks-need-a-new-home-can-you-help-him/#comments</comments>
		<pubDate>Tue, 19 May 2009 13:59:13 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[one-click]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=90</guid>
		<description><![CDATA[&#8220;
I must say that my skills to ask for something are really lacking, and my design skills are even worse.
So, I’m bringing this topic to the table, seeking for ideas on how to improve the Ruby on Windows image beyond just code.
I’m willing to offer money to pay for it, since I’m quite aware that [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;
<p>I must say that my skills to ask for something are really lacking, and my design skills are even worse.</p>
<p>So, I’m bringing this topic to the table, seeking for ideas on how to improve the Ruby on Windows image beyond just code.</p>
<p>I’m willing to offer money to pay for it, since I’m quite aware that Open Source and contributions don’t put food on the table.</p>
<p>Of course, I’m not rich, so the balance needs to be found <img src='http://blog.mmediasys.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>So, what is the idea:</p>
<ul>
<li>Build the website with Radiant or a simple CMS over Ruby</li>
<li>Design needs to be simple and provide access to:</li>
<ol>
<li>News feed (small articles)</li>
<li>Download info and links</li>
<li>Getting Started Resources (info and links)</li>
<li>Contribute (RubyForge and GitHub info)</li>
<li>Support (access to mailing list and forums of interest)</li>
</ol>
<li>Initial artwork (logo and iso) already exist</li>
<li>Application icons can be highly improved <img src='http://blog.mmediasys.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
</ul>
<p>For the record: there is no need to be a Windows user or designer, so people on Linux and OSX are welcome <img src='http://blog.mmediasys.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>If there is more interest, maybe a Bounty can be opened, but time, feedback and <em>community</em> response will tell.</p>
<p>Please, comment and pass the message!</p>
<p>&#8220;</p>
<p>(Via <a href="http://blog.mmediasys.com">DEV_MEM.dump_to(:blog) &#8211; Multimedia systems blog</a>.) Original Link: <a href="http://blog.mmediasys.com/2009/05/19/rubyinstaller-one-clicks-need-a-new-home-can-you-help-him/#comments">RubyInstaller: One-Clicks need a new home, can you help him?</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/05/19/rubyinstaller-one-clicks-need-a-new-home-can-you-help-him/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bouncer básico en ruby</title>
		<link>http://www.mundoruby.com.ar/2009/05/06/bouncer-basico-en-ruby/</link>
		<comments>http://www.mundoruby.com.ar/2009/05/06/bouncer-basico-en-ruby/#comments</comments>
		<pubDate>Wed, 06 May 2009 13:40:58 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[TCP]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=84</guid>
		<description><![CDATA[&#8220;Estuve programando un bouncer, usando como base el load balancer que hice el año pasado. Un bouncer es un programa que poner un server TCP en un puerto y cada vez que recibe una conexión abre una conexión a otro lado y las &#8216;ata&#8217;, haciendo que el server al que se conecta le conteste al [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Estuve programando un bouncer, usando como base el <a href="http://aurelianito.blogspot.com/2008/05/load-balancer-minimalista-en-ruby-parte.html">load balancer que hice el año pasado</a>. Un bouncer es un programa que poner un server TCP en un puerto y cada vez que recibe una conexión abre una conexión a otro lado y las &#8216;ata&#8217;, haciendo que el server al que se conecta le conteste al cliente que se conecta a él. <br />En mi caso lo programé para tener una salida controlada del entorno de máquinas virtuales que estoy armando para tener más ordenadas las cosas en el trabajo.<br />Por si les interesa, acá abajo pongo el código completo.<br />
<code><br />
#!/usr/bin/env ruby</p>
<p># == Synopsis<br />
#<br />
# redirect.rb: Redirects TCP connections to distant machines. Handles simultaneously many connections.<br />
#<br />
# == Usage<br />
#<br />
# ruby redirect.rb [OPTION]<br />
#<br />
# -h, --help:<br />
#   Show help<br />
#<br />
# --ip ip, -i ip:<br />
#   Accept connections from ip (default 127.0.0.1)<br />
#<br />
# --port port, -p port:<br />
#   Listen on port (default 12345)<br />
#<br />
# --target ip:port, -t ip:port<br />
#   Connect to ip:port (default 127.0.0.1:23456)<br />
#</p>
<p>require 'getoptlong'<br />
require 'rdoc/usage'<br />
require 'socket'</p>
<p>class Redirect<br />
 def initialize( source_ip, listening_port, target_ip, target_port )<br />
  @source_ip = source_ip<br />
  @target_ip = target_ip<br />
  @target_port = target_port</p>
<p>  @server_socket = TCPServer.new( "", listening_port )<br />
    @server_socket.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 )</p>
<p>  @descriptors = [ @server_socket ]<br />
  @next_step = {}<br />
 end</p>
<p> def handle_new_connection<br />
  incoming = @server_socket.accept<br />
  if incoming.peeraddr[3] == @source_ip<br />
   begin<br />
    outgoing = TCPSocket.new( @target_ip, @target_port )</p>
<p>    @next_step[ incoming ] = outgoing<br />
    @next_step[ outgoing ] = incoming</p>
<p>    @descriptors += [ incoming, outgoing ]<br />
   rescue<br />
    silent_close( incoming )<br />
   end<br />
  else<br />
   silent_close( incoming )<br />
  end<br />
 end</p>
<p> def silent_close( sock )<br />
  begin<br />
   sock.close<br />
  rescue<br />
   #do nothing intentionally<br />
  end<br />
 end</p>
<p>  def propagate(sock)<br />
    next_sock = @next_step[sock]<br />
    next_sock.write(sock.read_nonblock(1000 * 1000))<br />
  end</p>
<p> def finish_connection(sock)<br />
  next_sock = @next_step[sock]<br />
  [ sock, next_sock ].each do<br />
   |s|<br />
   silent_close(s)<br />
   @descriptors.delete(s)<br />
   @next_step.delete(s)<br />
  end<br />
 end</p>
<p> def run<br />
  loop do<br />
   connections = select( @descriptors )<br />
   connections[0].each do<br />
    |sock|<br />
    if sock == @server_socket then<br />
     handle_new_connection<br />
    else<br />
     begin<br />
      sock.eof? ? finish_connection(sock) : propagate(sock)<br />
     rescue<br />
      finish_connection(sock)<br />
     end<br />
    end<br />
   end<br />
  end<br />
 end<br />
end</p>
<p>if $0 == __FILE__ then</p>
<p> opts = GetoptLong.new(<br />
   [ '--help', '-h', GetoptLong::NO_ARGUMENT ],<br />
   [ '--ip', '-i', GetoptLong::REQUIRED_ARGUMENT ],<br />
   [ '--port', '-p', GetoptLong::REQUIRED_ARGUMENT ],<br />
   [ '--target', '-t', GetoptLong::REQUIRED_ARGUMENT ]<br />
 )</p>
<p> ip = '127.0.0.1'<br />
 port = '12345'<br />
 target = '127.0.0.1:23456'</p>
<p> opts.each do<br />
  |opt, arg|<br />
  case opt<br />
  when '--help'<br />
   RDoc::usage<br />
   exit<br />
  when '--ip'<br />
   ip = arg<br />
  when '--port'<br />
   port = arg<br />
  when '--target'<br />
   target = arg<br />
  end<br />
 end</p>
<p> port = port.to_i<br />
 target = target.split(":")</p>
<p> trap("SIGINT") do<br />
   exit<br />
 end</p>
<p> Redirect.new(ip, port, target[0], target[1].to_i).run<br />
end<br />
</code></p>
<div class="blogger-post-footer"><img width='1' height='1' src='http://res1.blogblog.com/tracker/1437970354124720603-8701867554361547727?l=aurelianito.blogspot.com'/></div>
<p>&#8220;</p>
<p>(Via <a href="http://aurelianito.blogspot.com/">aurelianito</a>.) Original Link: <a href="http://aurelianito.blogspot.com/2009/05/bouncer-basico-en-ruby.html">Bouncer b&#225;sico en ruby</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/05/06/bouncer-basico-en-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyInstaller &#8211; State of One-Click</title>
		<link>http://www.mundoruby.com.ar/2009/05/05/rubyinstaller-state-of-one-click/</link>
		<comments>http://www.mundoruby.com.ar/2009/05/05/rubyinstaller-state-of-one-click/#comments</comments>
		<pubDate>Tue, 05 May 2009 16:15:55 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[one-click-installer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=82</guid>
		<description><![CDATA[&#8220;
I wont be lame and say been a while since last blogged, which is true, but is not the reason I’m writing this.
I’ll like to provide a better look on what’s going on at RubyInstaller project, clear out some repeating questions and give hope to people.
Please keep reading if you’re interested (will try to make [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;
<p>I wont be lame and say <em>been a while since last blogged</em>, which is true, but is not the reason I’m writing this.</p>
<p>I’ll like to provide a better look on what’s going on at RubyInstaller project, clear out some repeating questions and give <em>hope</em> to people.</p>
<p>Please keep reading if you’re interested (will try to make it short, I promise).<br />
<span id="more-161"></span></p>
<h3>Current One-Click Installer &#8211; Stable State</h3>
<p>I keep getting several emails about current installer (labeled <code>186-27 RC2</code>). While it says <em>Release Candidate 2</em>, it has proven to be really stable, not getting any new report of issues or major bugs in the installer, Ruby or RubyGems.</p>
<p>So even it says <strong>RC2</strong>, it is stable people, please use it (I do).</p>
<p>I’ve been working in the new installers, that’s why there was no updated version.</p>
<h3>1.8.6, 1.8.7, 1.8.x?</h3>
<p>I tried to explain why RubyInstaller project is sticking with <code>1.8.6</code> for <code>1.8.x</code> line of Ruby support. It seems needs further explanation.</p>
<p>Lot of packages bundled in current installer, see for yourself <a href="http://rubyinstaller.rubyforge.org/svn/trunk/installer-win2/rakefile.rb">here</a></p>
<p>Most of those haven’t been updated <strong>in years</strong>, which mean that manually I need to go and patch all those to make them work with <code>1.8.7</code> due some changes in the extensions and even some <em>features</em> (cough, incompatibilities) back-ported from <code>1.9.x</code> development.</p>
<p>Doing that amount of work is beyond RubyInstaller project job or role. I’ve invested lot of this time fixing several projects for Windows compatibility and provide tools to ease the cross platform integration (rake-compiler).</p>
<p>We can’t do more than that. <strong>I can’t do more than that</strong>.</p>
<p>I cannot endorse <code>1.8.7</code> usage or support it, since I’m not an active user of that particular version. </p>
<p>So go ahead, checkout the Subversion repository of current installer like this:</p>
<pre><code>
svn co http://rubyinstaller.rubyforge.org/svn/trunk/installer-win2/ current-one-click
</code></pre>
<p>Read the instructions and build your own version of 1.8.7.</p>
<p>Don’t have a VC6 license required to build it? then clone the MinGW version over <a href="http://github.com/oneclick/rubyinstaller/tree/master">here</a></p>
<p>All the code is out there, all the instructions are there. There is no rocket science about the process, just time, <em>your</em> time.</p>
<h3>When will be a 1.9 One-Click Installer?</h3>
<p>When people start helping out, seriously.</p>
<p>On a weekly basis I get errors from people facing issues with several Gems, way beyond the scope of RubyInstaller project. Even so, I try to help them out.</p>
<p>That is a time consuming tasks, being the only one with <strong>all the world knowledge</strong> of Windows…</p>
<p>Seriously guys, do you think I know all the answers to all your Windows projects under X, Y, Z version of OS, Rails, permissions, libraries and gem combination? I’m only human. <code>/rant</code></p>
<p>Anyhow, progress has been made in getting both <code>1.8.x</code> and <code>1.9.x</code> working with the new MinGW based installer. Test packages (compressed with <a href="http://7-zip.org">7-zip</a>) are available at the following URL:</p>
<p><a href="http://rubyinstaller.org/downloads/">http://rubyinstaller.org/downloads/</a></p>
<p><strong>Be aware that no bug report will be accepted for those versions, yet.</strong></p>
<p>Also, keep in mind that <code>1.9.1-p0</code> doesn’t complete it’s own tests on Windows, which is a real problem to proper distribute an official version.</p>
<h3>When the <em>Installers</em> are going out for 1.8.6 and 1.9?</h3>
<p>The <a href="http://github.com/oneclick/rubyinstaller/tree/updated-installers">updated-installers</a> branch at GitHub contains the MSI recipes to build both 1.8 and 1.9 versions of the installer.</p>
<p>The following is the list of things that needs more work before release:</p>
<ul>
<p>
<li> Installers requires Administrative privileges (elevated rights).</p>
<p>Looking into a way to avoid it.</li>
</p>
<p>
<li> Does not ask about adding the Ruby to the <code>PATH</code>.</p>
<p>It does always, which make co-existence with other Ruby a problem.</li>
</p>
<p>
<li> Lot of your gems will be broken.</p>
<p>You could blame Ruby and <code>rbconfig</code> for this. Basically, MinGW and VC6, even they use the same <acronym title="C RunTime Library">CRT</acronym>, they are marked as different platforms (<code>i386-mingw32</code> and <code>i386-mswin32</code>).</p>
<p>Several gems evaluate for <code>mswin32</code> (even worse, some of them check <code>RUBY_PLATFORM</code> with <code>win32</code> (see <a href="http://blog.mmediasys.com/2008/10/21/guas-is-giving-unwanted-advice-series-1/">this post</a>)</p>
<p>Cannot fix all those gems, so is time for you to contribute too.</li>
<p>
</ul>
</p>
<h3>What can you do to help?</h3>
<p>I was waiting for that question to show up! <img src='http://blog.mmediasys.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p>Download those versions (including the <em>fake</em> DevKit), put your helmet, gloves and start using it like I do. Some tips:</p>
<ul>
<p>
<li> Add the compiler to the <code>PATH</code> when installing gems that contains extensions.</p>
<p>If you gem fails during installation and shows the <em>Building native extensions legend</em> that means you need the compiler around</li>
</p>
<p>
<li> Check for <code>RUBY_PLATFORM</code> in the gems</p>
<p>If the gem doesn’t work after that, peek into the gem code for <code>RUBY_PLATFORM</code> conditions and see if <code>mingw</code> is being considered</li>
</p>
<p>
<li> Ask the developer to provide <em>native</em> versions of the gem</p>
<p>If the gem requires several libraries and other stuff. Politely request the gem author to create a native binary of that gem for Windows.</p>
<p>Point him to rake-compiler project, and <a href="http://github.com/luislavena/sqlite3-ruby/tree/master">some</a> <a href="http://github.com/luislavena/mysql-gem/tree/better-build">projects</a> that <a href="http://github.com/datamapper/do/tree/next">includes</a> tasks for building cross platform packages.</li>
<p>
</ul>
</p>
<p>As a last resource, ask them join <a href="http://rubyforge.org/mailman/listinfo/rubyinstaller-users">rubyinstaller-users</a> list and ask questions about to improve the cross-platform compatibility of their projects.</p>
<p>Hint: latest json gem needs some love <img src='http://blog.mmediasys.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Final words</h3>
<p>I come from the broadcast video industry, where a <em>release early, release often</em> approach doesn’t work since thousands of dollars can be lost for a couple of seconds downtime.</p>
<p>Releasing something with so many quirks will make people angry, and will not help on solve or improve the image Ruby on Windows already have.</p>
<p>But is as much <strong>I</strong> can do, it is time for <strong>you</strong>, <em>Ruby</em> developer, either on Linux, OSX or Windows to take care.</p>
<p>We are talking about <strong>Ruby</strong> and the <strong>Ruby Community</strong>, not just Windows.</p>
<p>&#8220;</p>
<p>(Via <a href="http://blog.mmediasys.com">DEV_MEM.dump_to(:blog) &#8211; Multimedia systems blog</a>.) Original Link: <a href="http://blog.mmediasys.com/2009/05/05/rubyinstaller-state-of-one-click/#comments">RubyInstaller &#8211; State of One-Click</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/05/05/rubyinstaller-state-of-one-click/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Ruby…??? My Reasonable Question</title>
		<link>http://www.mundoruby.com.ar/2009/04/28/why-ruby%e2%80%a6-my-reasonable-question/</link>
		<comments>http://www.mundoruby.com.ar/2009/04/28/why-ruby%e2%80%a6-my-reasonable-question/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 13:44:03 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=80</guid>
		<description><![CDATA[&#8220;

Why would any self-respecting Java developer care about Ruby? Ruby is a general-purpose scripting language created 10 years ago in Japan. Contrary to popular belief, it is a pure object-oriented language. Unlike Java technology, Ruby has no scalars, so everything, including integers, are first-class objects. Ruby’s syntax borrows heavily from Smalltalk, Python, and Ada. Like [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;
<p>
Why would any self-respecting Java developer care about Ruby? Ruby is a general-purpose scripting language created 10 years ago in Japan. Contrary to popular belief, it is a pure object-oriented language. Unlike Java technology, Ruby has no scalars, so everything, including integers, are first-class objects. Ruby’s syntax borrows heavily from Smalltalk, Python, and Ada. Like the Java programming language, Ruby is a single inheritance language, but it offers some advanced features that Java technology does not, such as closures (think anonymous inner classes on steroids) and mix-ins (similar to interfaces, but less tightly bound to the class). Ruby is also highly portable, running on all major operating systems.</p>
<p>Ruby is also red-hot right now. People are starting to use it for the types of applications where it excels. Because it is interpreted and uses dynamic typing, you can do all sorts of magic tricks at run time that are very difficult in Java. One of the surprising capabilities enabled by dynamic typing and expressive syntax is the ability to create domain-specific languages in Ruby that allow you to work at a higher level of abstraction, away from the ‘raw’ syntax of the language. Ruby on Rails is a framework for creating Web applications backed by databases that shows this elegance. Rake, Ruby’s version of Make and Ant rolled into one, is another example of this powerful use of the language.</p>
<p>The other reason to start playing with Ruby is that all the cool kids are doing it. Many of the people who recognized that Java technology was going to be important back in 1996 (like Glenn Vanderburg, Bruce Tate, and Martin Fowler) are heavily involved in Ruby now. Even if you aren’t going to change all your development efforts to Ruby, maybe it’s time you took a look at this language.</p>
<p>One of the main limiting factors to widespread development in Ruby is a good development environment (for those who don’t want to learn Emacs). The RDT changes that. What better way to experiment with Ruby than in your favorite IDE, Eclipse?</p>
<p>My favorite IDE is EMACS and you ?<br />
Tinix./</p>
<p>&#8220;</p>
<p>(Via <a href="http://weblog.tinixtech.com.ar">TinixTech&#8217;s Weblog</a>.) Original Link: <a href="http://weblog.tinixtech.com.ar/?p=257#comments">Why Ruby&#8230;??? My Reasonable Question</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/04/28/why-ruby%e2%80%a6-my-reasonable-question/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Take A  Photo &#8211; Fotos instantáneas desde tu web</title>
		<link>http://www.mundoruby.com.ar/2009/04/03/take-a-photo-fotos-instantaneas-desde-tu-web/</link>
		<comments>http://www.mundoruby.com.ar/2009/04/03/take-a-photo-fotos-instantaneas-desde-tu-web/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 22:05:20 +0000</pubDate>
		<dc:creator>FreedomCoder</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.mundoruby.com.ar/?p=74</guid>
		<description><![CDATA[En la última semana estuve trabajando en agregar nuevas funcionalidades a un sitio de un cliente y entre los pedidos estaba una especie de Fotoblog para los usuarios (y bue, hay que pagar las cuentas a fin de mes  ).
La cosa salió rápido, usando Paperclip que guarda las imágenes que se suben, se muestra [...]]]></description>
			<content:encoded><![CDATA[<p>En la última semana estuve trabajando en agregar nuevas funcionalidades a un sitio de un cliente y entre los pedidos estaba una especie de Fotoblog para los usuarios (y bue, hay que pagar las cuentas a fin de mes <img src='http://www.mundoruby.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>La cosa salió rápido, usando Paperclip que guarda las imágenes que se suben, se muestra en orden, etc, nada del otro mundo. Pero hablando con el cliente surgió la idea de hacer que el usuario se pueda tomar una foto directamente desde la web usando su webcam, así que después de decir &#8220;<em>si, se debe poder hacer</em>&#8221; mentalmente me salió un &#8220;<em>doh!, que dije!</em>&#8220;. Lo último que se dijo en esa reunión fue &#8220;<em>Lo quiero</em>&#8221; <img src='http://www.mundoruby.com.ar/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p>Ya había visto juegos flash que utilizan la webcam así que empecé por ahí, para ver como sacaban un frame del video, lo cual era muy fácil. Lo siguiente era serializarla. A falta de algo mejor hice un serializador de imágenes muy pedorro, pero que anda (aunque es lento), que envía por POST la información de cada pixel.</p>
<p>La parte de Ruby fue fácil y decidí encapsularla en un plugin de Rails para poder reutilizarlo luego o por si a alguien más le sirve <img src='http://www.mundoruby.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Además se puede integrar con Paperclip o AttachmentFu para hacer la persistencia de la imagen en donde sea.</p>
<p>La única parte que usa Flash es el capturador de la cámara, porque otra no quedaba, pero luego el botón para tomar la foto y los eventos se manejan todo por Javascript.</p>
<p>El plugin tiene varios TODOs, pero por si a alguien le sirve está en <a href="http://github.com/Gazer/take-a-photo/tree/master">github</a>.</p>
<p>(Via <a href="http://www.gazer.com.ar">El Futirifoken</a>.) Original Link: <a href="http://www.gazer.com.ar/2009/04/02/take-a-photo-fotos-instantaneas-desde-tu-web/#comments">Take A  Photo &#8211; Fotos instantáneas desde tu web</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-7949681675937032";
google_ad_slot = "0874687580";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mundoruby.com.ar/2009/04/03/take-a-photo-fotos-instantaneas-desde-tu-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

