<?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>Mario Carrion &#187; ruby</title>
	<atom:link href="http://blog.carrion.mx/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.carrion.mx</link>
	<description>Personal blog</description>
	<lastBuildDate>Thu, 26 Aug 2010 14:12:19 +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>Comparing Ruby and C#: Equality</title>
		<link>http://blog.carrion.mx/2010/03/17/comparing-ruby-and-c-equality/</link>
		<comments>http://blog.carrion.mx/2010/03/17/comparing-ruby-and-c-equality/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 17:42:12 +0000</pubDate>
		<dc:creator>Mario Carrion</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[march]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[resolutions]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby&c#]]></category>

		<guid isPermaLink="false">http://blog.carrion.ws/?p=637</guid>
		<description><![CDATA[While reading The Ruby Programming Language I wrote a couple of notes about the language comparing it to C#. This is the first post of the series talking about those notes. C# and Ruby share a similar syntax to compare equality in objects. Both use the operator equals (==) and, at least, one method to [...]]]></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.carrion.mx%2F2010%2F03%2F17%2Fcomparing-ruby-and-c-equality%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.carrion.mx%2F2010%2F03%2F17%2Fcomparing-ruby-and-c-equality%2F&amp;source=mariocarrion&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/photos/mariocarrion/4439073605/" title="Beauty by Mario Carrion, on Flickr"><img src="http://farm3.static.flickr.com/2792/4439073605_ef6885dd43_m.jpg" width="240" height="180" alt="Beauty" class="aligncenter" /></a></p>
<p>While reading <a href="2010/01/21/the-ruby-programming-language/">The Ruby Programming Language</a> I wrote a couple of notes about the language comparing it to C#. This is the first post of the series talking about those notes.</p>
<p>C# and Ruby share a similar syntax to compare equality in objects. Both use the operator equals (==) and, at least, one method to compare. Ruby uses <em>equal?</em> and <em>eql?</em>, C# uses <em>Equals</em>. Also, both support overriding the equals (==) operator to provide a different logic in case that&#8217;s required. The methods&#8217; name are different but they work pretty much the same.</p>
<p>Understanding the difference between both languages is really simple. If you already know the difference between reference types and values types you are pretty much all set.</p>
<h3>Ruby</h3>
<h4>Method equal?</h4>
<p>Method used to test reference equality in two objects. For example:</p>
<pre class="brush:ruby">#!/usr/bin/env ruby

a = 0
b = 0.0
c = b
d = e = 0

# "false" pointer c points to b, and b and a
# are different types.w
puts "c.equal?(a) #{c.equal?(a)}"
# "false" b and a are different types
puts "b.equal?(a) #{b.equal?(a)}"
# "true" Same type, same value.
puts "d.equal?(e) #{d.equal?(e)}"</pre>
<h4>Method eql?</h4>
<p>Synonym of equal?, not strict type conversion. Notice Hash classes uses this method for creating the hash, so if two values are the same the hash method should return the same value.</p>
<pre class="brush:ruby">#!/usr/bin/env ruby

a = 0
b = 0.0
c = b
d = e = 0

# "false" Pointer c points to b, and b and a are different types
puts "c.eql?(a) #{c.eql?(a)}"
# "false" Different types
puts "b.eql?(a) #{b.eql?(a)}"
# "true" Same type, same value.
puts "d.eql?(e) #{d.eql?(e)}"</pre>
<h4>Operator equals (==)</h4>
<p>By default, in Object class, it&#8217;s a synonym of equal?. Tests reference equality.</p>
<pre class="brush:ruby">#!/usr/bin/env ruby

a = 0
b = 0.0
c = b
d = e = 0

# "true" Even when pointer c points to b, and b and a
# are different types, the value is the same
puts "c == a #{c == a}"
# "true" Type is casted to allow comparing them
puts "b == a #{b == a}"
# "true" Same type, same value.
puts "d == e #{d == e}"</pre>
<h3>C#</h3>
<p>Before explaining the equality options, notice one important difference between Ruby and C#.</p>
<p><strong>First</strong>, Ruby is a <strong>dynamic typed language</strong>. When declaring variables there&#8217;s no <em>meaning</em> of <em>variable type</em>, all variables can be used to identify instances of different types depending on the situation. For example, we can define a variable <em>x</em> to act as a <em>string</em>, and then use the same variable <em>x</em> to act as an <em>integer</em>, this doesn&#8217;t mean we are converting the string to integer, this means we are using the same pointer (variable x) for two different types, string and integer, pointing to two different addresses in memory. For example:</p>
<pre class="brush:ruby">#!/usr/bin/env ruby

a = "I'm string"
# Output: "a Value: 'I'm string' Class: 'String'"
puts "a Value: '#{a}' Class: '#{a.class}'"

# Output: "a Value: '10.0' Class: 'Float'"
a = 10.0
puts "a Value: '#{a}' Class: '#{a.class}'"</pre>
<p>C# is a <strong>static typed language</strong>, all variables must indicate their type before instantiating an object. For example, when declaring a variable <em>x</em> of type <em>string</em>, you will be able to create an instance of <em>string</em>, <strong>only</strong>, there&#8217;s no way to &#8220;reuse&#8221; <em>x</em> as an <em>integer</em> in the same scope. Try to compile the following example, it <strong>will</strong> fail:</p>
<pre class="brush:csharp">public class RubyAndCSharp {

	public static void Main (string []args) {
		string x = "I'm string";
		System.Console.WriteLine ("a Value: '{0}' Class: '{1}'", x, x.GetType ());

		x = 10.0; // It will fail here: "error CS0029: Cannot implicitly convert type `double' to `string'"
		System.Console.WriteLine ("a Value: '{0}' Class: '{1}'", x, x.GetType ());
	}
}</pre>
<p><strong>Second</strong>, memory management. Both languages manage memory automatically: by default all memory is created and released automatically, there is no need to explicitly release or allocate memory, unless the programmer wants to do so. However, in C# there&#8217;s a &#8220;difference&#8221; between types. There are two <em>type categories</em>: <a href="http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx">Value Type</a> and <a href="http://msdn.microsoft.com/en-us/library/490f96s2.aspx">Reference Type</a>. The difference, related to memory use, is the way they work and the addresses in memory they use. Declaring value types automatically allocates memory, declaring reference types declares a pointer and the memory is allocated when the object pointed by the variable is instantiated. The Value Types are allocated in the <a href="http://en.wikipedia.org/wiki/Stack-based_memory_allocation">stack</a> and the Reference Types are allocated in the <a href="http://en.wikipedia.org/wiki/Dynamic_memory_allocation">heap</a>.</p>
<p>This difference is really important. Comparing two instances of objects with different &#8220;category&#8221;, one value type and one reference type, does not work, it just fails. Is like comparing an apple to an orange. Is comparing a value stored in the stack to a value stored in the heap. We can&#8217;t compare them without writing any extra code.</p>
<p>And this extra code means using the base class <em>object</em> as the pointer for different types, because both types, value type and reference type, are subclasses of object, in one way or another. Let&#8217;s try to compile the following example:</p>
<pre class="brush:csharp">public class RubyAndCSharp {

	public static void Main (string []args) {
		object x = "I'm string";
		// Output: "a Value: 'I'm string' Class: 'System.String'"
		System.Console.WriteLine ("a Value: '{0}' Class: '{1}'", x, x.GetType ());

		x = 10.0;
		// Output: "a Value: '10' Class: 'System.Double'"
		System.Console.WriteLine ("a Value: '{0}' Class: '{1}'", x, x.GetType ());
	}
}</pre>
<p>After this short (or long?) explanation we are ready to see talk about the methods.</p>
<h4>Method Object.Equals()</h4>
<p>Is used to test reference equality in reference types and bitwise equality in value types. For example:</p>
<pre class="brush:csharp">public class RubyAndCSharp {

	class MyClass {
		public string Name { get; set; }
		public override string ToString () { return Name; }
	}

	public static void Main (string []args) {
		// object.Equals in Reference Types uses address memory
		MyClass myClass0 = new MyClass () { Name = "test" };
		MyClass myClass1 = myClass0;

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myClass0, myClass1, object.Equals (myClass0, myClass1));

		// Let's try again. This will return false. myClass1 and myClass2 are different instances
		myClass1 = new MyClass () { Name = "test" };

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myClass0, myClass1, object.Equals (myClass0, myClass1));

		// It doesn't matter myInt0 and myInt1 are different variables, equality will be true.
		int myInt0 = 1;
		int myInt1 = 1;

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myInt0, myInt1, object.Equals (myInt0, myInt1));
	}
}</pre>
<h4>Operator equals (==)</h4>
<p>Is, basically, a synonym of object.Equals, same rules apply.</p>
<pre class="brush:csharp">public class RubyAndCSharp {

	class MyClass {
		public string Name { get; set; }
		public override string ToString () { return Name; }
	}

	public static void Main (string []args) {
		// == in Reference Types uses address memory
		MyClass myClass0 = new MyClass () { Name = "test" };
		MyClass myClass1 = myClass0;

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myClass0, myClass1, myClass0 == myClass1);

		// Let's try again. This will return false. myClass1 and myClass2 are different instances
		myClass1 = new MyClass () { Name = "test" };

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myClass0, myClass1, myClass0 == myClass1);

		// It doesn't matter myInt0 and myInt1 are different variables
		int myInt0 = 1;
		int myInt1 = 1;

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myInt0, myInt1, myInt0 == myInt1);
	}
}</pre>
<h4>Operator Object.ReferenceEquals()</h4>
<p>Pretty straightforward, tests reference:</p>
<pre class="brush:csharp">public class RubyAndCSharp {

	class MyClass {
		public string Name { get; set; }
		public override string ToString () { return Name; }
	}

	public static void Main (string []args) {
		// Object.ReferenceEquals in Reference Types uses address memory
		MyClass myClass0 = new MyClass () { Name = "test" };
		MyClass myClass1 = myClass0;

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myClass0, myClass1, System.Object.ReferenceEquals (myClass0, myClass1));

		// Let's try again. This will return false. myClass1 and myClass2 are different instances
		myClass1 = new MyClass () { Name = "test" };

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myClass0, myClass1, System.Object.ReferenceEquals (myClass0, myClass1));

		// This will also return false.
		int myInt0 = 1;
		int myInt1 = 1;

		System.Console.WriteLine ("object.Equals('{0}','{1}') = {2}", myInt0, myInt1, System.Object.ReferenceEquals (myInt0, myInt1));
	}
}</pre>
<h4>Colophon</h4>
<p>Sometimes you will have to use an <strong>object</strong> reference to refer to both types, value and reference, if you are planning to compare their value you have to use the static method <strong>object.Equals(a,b)</strong>. Using the operator equals (==) will always return false, because of the <a href="http://msdn.microsoft.com/en-us/library/yz2be5wk(VS.80).aspx">boxing/unboxing</a>:</p>
<pre class="brush:csharp">public class RubyAndCSharp {

	public static void Main (string []args) {
		string str0 = "hola";
		string str1 = "hola";

		object obj0 = str0;
		object obj1 = str1;

		System.Console.WriteLine ("Equals: {0}, Using ==: {1}, object.Equals {2}",
		                          obj0.Equals (obj1), // True
		                          obj0 == obj1, // True
		                          object.Equals (obj0, obj1)); // True

		bool bool0 = true;
		bool bool1 = true;

		obj0 = bool0;
		obj1 = bool1;

		System.Console.WriteLine ("Equals: {0}, ==: {1}, object.Equals {2}",
		                          obj0.Equals (obj1), // True
		                          obj0 == obj1, // False
		                          object.Equals (obj0, obj1)); // True

	}
}</pre>
<p><em>Updated 2010-03-17</em>: Thanks to <em>sukru</em> for noticing the error in the examples.</p>
<p><em>Updated 2010-03-18</em>: Fixed typos, thanks to <em>yoeri</em> and <em>doza</em> noticing them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carrion.mx/2010/03/17/comparing-ruby-and-c-equality/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Parallel Development Environments? Pulque!</title>
		<link>http://blog.carrion.mx/2010/01/25/parallel-development-environments-pulque/</link>
		<comments>http://blog.carrion.mx/2010/01/25/parallel-development-environments-pulque/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 03:15:59 +0000</pubDate>
		<dc:creator>Mario Carrion</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[january]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[pulque]]></category>
		<category><![CDATA[resolutions]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.carrion.ws/?p=634</guid>
		<description><![CDATA[By Claire L. Evans / CC BY-ND 2.0 This is an updated version of Multiple Parallel Mono Environments. What is Pulque? Pulque is a collection of applications written in Ruby and Bash scripting to maintain parallel development environments. Why does Pulque exist? Three reasons: I need to keep multiple versions installed of the same software, [...]]]></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.carrion.mx%2F2010%2F01%2F25%2Fparallel-development-environments-pulque%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.carrion.mx%2F2010%2F01%2F25%2Fparallel-development-environments-pulque%2F&amp;source=mariocarrion&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/photos/astro-dudes/2735367731/"><img title="¡Quiero pulque! by Claire L. Evans" src="http://farm4.static.flickr.com/3108/2735367731_73c00175a0_m.jpg" alt="¡Quiero pulque!" width="240" height="180" /></a></p>
<p><a rel="cc:attributionURL" href="http://www.flickr.com/photos/astro-dudes/">By Claire L. Evans</a> / <a rel="license" href="http://creativecommons.org/licenses/by-nd/2.0/">CC BY-ND 2.0</a></p>
<p><em>This is an updated version of <a href="/2009/07/01/multiple-parallel-mono-environments/">Multiple Parallel Mono Environments</a>.</em></p>
<h3>What is Pulque?</h3>
<p><em>Pulque</em> is a collection of applications written in Ruby and Bash scripting to maintain parallel development environments.</p>
<h3>Why does Pulque exist?</h3>
<p>Three reasons:</p>
<ol>
<li>I need to keep <em>multiple versions installed</em> of the same software,</li>
<li>I need to know what <em>Version Control System</em> is used by the software, and the most important</li>
<li>I want to keep myself <strong>sane</strong>.</li>
</ol>
<p>At work, I have to interact with different open source projects, most of them use <a href="http://subversion.tigris.org/">Subversion</a> and <a href="http://git-scm.com/">Git</a>, but some others use <a href="http://bazaar.canonical.com/en/">Bazaar</a> and <a href="http://mercurial.selenic.com/">Mercurial</a>. Keeping track of the current parallel development environment and the VCS used by the software is exhausting.</p>
<p>You spend time focusing on something that shouldn&#8217;t be that important: </p>
<ul>
<li>Managing your parallel environments and,</li>
<li>Keeping track of the VCS used by the software</li>
</ul>
<p>Is easy to get confused when interacting with the repository, for example, executing <em>svn update</em> when the software is stored in a <em>git</em> repository. Is silly, but <strong>it happens</strong>. Unless you are using an IDE that support Multiple Parallel Development Environments you will need the terminal to configure and build your projects.</p>
<p><em>Pulque</em> helps you maintaining parallel development environments by: </p>
<ul>
<li>Printing in the bash prompt the <em>name of the parallel development environment</em> and <em>the type of the VCS</em>, this information is updated depending on the working directory, </li>
<li>Defining aliases to the default commands used to configure and build the software project, to always prefix your projects using your parallel environment, and</li>
<li>Showing a failure or success alert when the command finishes.</li>
</ul>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Fj3dsNwWOVQ&#038;hl=en_US&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Fj3dsNwWOVQ&#038;hl=en_US&#038;fs=1&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h3>Installing and using Pulque</h3>
<p>Follow the instructions in <a href="http://github.com/mariocarrion/pulque/blob/master/INSTALL">INSTALL</a>, or if you are using openSUSE 11.2:</p>
<p style="text-align: center;"><a href="http://download.opensuse.org/repositories/home:/MarioCarrion/openSUSE_11.2/pulque.ymp"><img alt="OneClick Install" src="http://www.mariocarrion.com/icons/oneclick.png" title="OneClick Install" width="162" height="46" class="aligncenter"  /><br />Click here to drink Pulque!</a></p>
<p>Don&#8217;t forget to add the function <em>pswitch</em> to your <em>.bashrc</em>. Bash will autocomplete your environment name when using <em>TAB TAB</em>.</p>
<pre class="brush:bash">
function pswitch {
  source /usr/bin/__pswitch $1
}
</pre>
<p>Read the <a href="http://github.com/mariocarrion/pulque/blob/master/USING">USING</a> file to understand how to use <em>Pulque</em> in the daily basis. If you find something weird or interesting please <a href="http://github.com/mariocarrion/pulque/issues">create an issue</a> to fix it.</p>
<h3>Colophon</h3>
<p>According to <a href="http://en.wikipedia.org/wiki/Pulque ">Wikipedia</a>: &#8220;<em>Pulque, or octli, is a milk-colored, somewhat viscous alcoholic beverage made from the fermented sap of the maguey plant, and is a traditional native beverage of Mexico.</em>&#8220;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carrion.mx/2010/01/25/parallel-development-environments-pulque/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Ruby Programming Language</title>
		<link>http://blog.carrion.mx/2010/01/21/the-ruby-programming-language/</link>
		<comments>http://blog.carrion.mx/2010/01/21/the-ruby-programming-language/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 04:50:49 +0000</pubDate>
		<dc:creator>Mario Carrion</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[january]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[resolutions]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.carrion.ws/?p=635</guid>
		<description><![CDATA[A couple of days ago I finished reading: The Ruby Programming Language, book written by David Flanagan and Yukihiro Matsumoto. If I have to say anything about the book and, the language, of course, is: I am impressed. The syntax is pretty for writing and simple for reading. Its simplicity makes you understand the code, [...]]]></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.carrion.mx%2F2010%2F01%2F21%2Fthe-ruby-programming-language%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.carrion.mx%2F2010%2F01%2F21%2Fthe-ruby-programming-language%2F&amp;source=mariocarrion&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/photos/mariocarrion/4294063393/" title="Ruby by Mario Carrion, on Flickr"><img src="http://farm3.static.flickr.com/2758/4294063393_54d8564980_m.jpg" width="240" height="160" alt="Ruby" /></a></p>
<p>A couple of days ago I finished reading: <a href="http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177">The Ruby Programming Language</a>, book written by David Flanagan and Yukihiro Matsumoto. If I have to say anything about the book and, the language, of course, is: I am impressed. The syntax is pretty for writing and simple for reading. Its simplicity makes you understand the code, is like visualizing the goal of the program in your mind by reading it, not running it. It is like reading a well written letter. You just understand.</p>
<p>I must say, when I was reading the book, at the beginning. I did not feel comfortable with the weird, at that time, syntax. Method decorations such as <em>&#8220;!&#8221;</em> and <em>&#8220;?&#8221;</em>, and the support for methods aliases made no sense. Actually I thought I was wasting my time by trying to learn the language. I was wrong.</p>
<p>When I learned C++ several years ago, I did not have reference to object orientation or any object-oriented programming language. Learning it was difficult, but, at the same time, easy. Difficult because I did not know the paradigm, easy because it was my first time learning that kind of syntax. After learning C++ I decided to learn Java and after that, I decided to learn C#.</p>
<p>And I learned them all the same way. I <em>&#8220;translated&#8221;</em> the syntax. Translated it from the <em>&#8220;new language&#8221;</em> to the <em>&#8220;old language&#8221;</em>. I did learn them all. And I thought, for long time, that the rule was: <em>&#8220;Learn all the languages the same way: by translation&#8221;</em>. I was wrong. Again.</p>
<p>Learning a new programming language, in my opinion, is better when you do not translate the new language. Similar to learn to speak a new language. In both cases, you have <strong>to think in the language</strong>. I decided to think in the new language. To do it that way. The Ruby way. The results were amazing. Were so amazing that inspired me to write <a href="http://github.com/mariocarrion/pulque">a project</a> in Ruby. I wanted to try out the syntax, the platform and the community. To see if the language was that good as I thought. </p>
<p>After trying it out. No disappointments at all. Actually is interesting that C# and Ruby share a lot of things, syntactically speaking. Both of them are pretty languages. Probably they do not share goals. However, I&#8217;m sure they share one goal: to make the life of the software developer easier. And, to a software developer, a programming language, and everything around it, that makes your life easier is what matters the most.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.carrion.mx/2010/01/21/the-ruby-programming-language/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
