<?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 Geek &#187; ruby</title>
	<atom:link href="http://mundogeek.net/etiqueta/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>El lenguaje de los grandes programadores</title>
		<link>http://mundogeek.net/archivos/2011/05/08/el-lenguaje-de-los-grandes-programadores/</link>
		<comments>http://mundogeek.net/archivos/2011/05/08/el-lenguaje-de-los-grandes-programadores/#comments</comments>
		<pubDate>Sun, 08 May 2011 12:42:22 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[lenguajes]]></category>
		<category><![CDATA[lenguajes de programacion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6738</guid>
		<description><![CDATA[Hace un par de días comenzaba una nueva edición del Code Jam de Google, la famosa competición de programación que la empresa viene organizando desde hace ya 8 años. A parte de proporcionar una gran selección de problemas con los que practicar nuestras habilidades, sus estadísticas también pueden servirnos para comprobar cuáles son los lenguajes [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un par de días comenzaba una nueva edición del <a href="http://code.google.com/codejam/" title="Google Code Jam">Code Jam</a> de Google, la famosa competición de programación que la empresa viene organizando desde hace ya 8 años. A parte de proporcionar una gran selección de problemas con los que <a href="http://mundogeek.net/archivos/2011/03/02/katas-de-codigo/" title="Katas de código">practicar nuestras habilidades</a>, sus <a href="http://www.go-hero.net/jam/11/languages" title="Estadísticas Google Code Jam">estadísticas</a> también pueden servirnos para comprobar cuáles son los lenguajes de programación preferidos por los desarrolladores, y qué lenguajes utilizan los mejores programadores (sobre una muestra de 12.200 participantes).<span id="more-6738"></span></p>
<p>Empecemos con los lenguajes más utilizados. Estos podrían ser los lenguajes cuyas sintaxis y características gustan más, o, simplemente, aquellos con los que están más familiarizados los participantes. Como vemos, C++ es, con mucha diferencia, el lenguaje más popular, seguido a larga distancia de Java y <a href="http://mundogeek.net/tutorial-python/" title="Python para todos, mi libro sobre programación en Python">Python</a>.</p>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/lenguajes-programacion-mas-utilizados.png" alt="Lenguajes de programación más utilizados"/></div>
<p>Pasamos a continuación a los lenguajes con mayor porcentaje de programadores capaces. Vemos que el porcentaje de programadores que consiguieron la puntuación suficiente para pasar de fase es altísimo en el caso de C++ y Haskell (90,8% y 90,68%), mientras que el porcentaje de programadores aprobados en el caso de <a href="http://mundogeek.net/archivos/2009/11/26/tutorial-rapido-de-php/" title="Tutorial rápido de PHP">PHP</a> (lenguaje con el que yo me gano las lentejas actualmente) es alarmantemente bajo en comparación (76,5%).</p>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/mejores-lenguajes-programacion.png" alt="Mejores lenguajes de programación"/></div>
<p>Por último, veamos el porcentaje de programadores que consiguieron la puntuación perfecta, agrupados por lenguaje de programación. Aquí Haskell se distancia bastante de C++, y mucho más del resto de lenguajes, quizás por la llamada <a href="http://mundogeek.net/archivos/2007/10/23/la-paradoja-python/">paradoja Python</a>. PHP, por su parte, se mantiene con el dudoso honor de ser el lenguaje con peor porcentaje de programadores con puntuaciones perfectas.</p>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/mejores-lenguajes.png" alt="Lenguajes de programación con los mejores programadores"/></div>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2011/05/08/el-lenguaje-de-los-grandes-programadores/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
		<item>
		<title>Un programa escrito en Haskell, que imprime un programa en Perl, que imprime&#8230;</title>
		<link>http://mundogeek.net/archivos/2011/03/15/un-programa-escrito-en-haskell-que-imprime-un-programa-en-perl-que-imprime/</link>
		<comments>http://mundogeek.net/archivos/2011/03/15/un-programa-escrito-en-haskell-que-imprime-un-programa-en-perl-que-imprime/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 16:37:51 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[quine]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6522</guid>
		<description><![CDATA[¿Un programa escrito en Haskell, que al ejecutarse imprime un programa en Perl, que al ejecutarse imprime un programa en Python, que al ejecutarse imprime un programa en Ruby, que al ejecutarse imprime un programa en C, que al ejecutarse imprime un programa en Java, que al ejecutarse imprime el programa original? Sí, es como [...]]]></description>
			<content:encoded><![CDATA[<p>¿Un <a href="http://blog.sigfpe.com/2011/01/quine-central.html" title="Quine central">programa</a> escrito en Haskell, que al ejecutarse imprime un programa en Perl, que al ejecutarse imprime un programa en Python, que al ejecutarse imprime un programa en Ruby, que al ejecutarse imprime un programa en C, que al ejecutarse imprime un programa en Java, que al ejecutarse imprime el programa original? Sí, es como para que te duela la cabeza, aunque el código, que podéis ver después del salto, es de lo más sencillo.</p>
<p>Este tipo de programas que se imprimen a sí mismos como salida (aunque en este caso, con una peculiaridad extra) se conocen con el nombre de <em>quines</em>, en honor al filósofo estadounidense Willard Van Orman Quine.<span id="more-6522"></span></p>
<pre name="code" class="haskell">import Data.List

langs = [Haskell, Perl, Python, Ruby, C, Java]

data Languages = Haskell | Ruby | Perl | C | Python | Java

sequenceFromString Haskell s = "map toEnum[" ++ (intercalate "," $
    map (\c -> show (fromEnum c)) s) ++ "]"
sequenceFromString Perl s    = (intercalate "," $
    map (\c -> "chr(" ++ show (fromEnum c) ++ ")") s)
sequenceFromString Python s  = (intercalate "+" $
    map (\c -> "chr(" ++ show (fromEnum c) ++ ")") s)
sequenceFromString Ruby s    = (intercalate "+" $
    map (\c -> show (fromEnum c) ++ ".chr") s)
sequenceFromString C s       = concatMap
    (\c -> "putchar(" ++ show (fromEnum c) ++ ");") s
sequenceFromString Java s    = concatMap
    (\c -> "o.write(" ++ show (fromEnum c) ++ ");") s

paramList' Haskell = intercalate " " . map (\n -> "a" ++ show n)
paramList' C       = intercalate "," . map (\n -> "char *a" ++ show n)
paramList' Python  = intercalate "," . map (\n -> "a" ++ show n)
paramList' Ruby    = intercalate "," . map (\n -> "a" ++ show n)
paramList' Java    = intercalate "," . map (\n -> "String a" ++ show n)

paramList Perl    _ = ""
paramList lang n = paramList' lang [0..n-1]

driver l args = defn l ++ intercalate (divider l) args ++ endDefn l

divider C       = "\",\""
divider Perl    = "','"
divider Ruby    = "\",\""
divider Python  = "\",\""
divider Haskell = "\" \""
divider Java    = "\",\""

defn C       = "main(){q(\""
defn Perl    = "&#038;q('"
defn Python  = "q(\""
defn Ruby    = "q(\""
defn Haskell = "main=q \""
defn Java    = "public static void main(String[]args){q(\""

endDefn C       = "\");}"
endDefn Perl    = "')"
endDefn Python  = "\")"
endDefn Ruby    = "\")"
endDefn Haskell = "\""
endDefn Java    = "\");}}"

arg Haskell n = "a" ++ show n
arg Perl n    = "$_[" ++ show n ++ "]"
arg C n       = "printf(a" ++ show n ++ ");"
arg Python n  = "a" ++ show n
arg Ruby n    = "a" ++ show n
arg Java n    = "o.print(a" ++ show n ++ ");"

argDivide Haskell l = "++" ++ sequenceFromString Haskell (divider l) ++ "++"
argDivide Perl l    = ","    ++ sequenceFromString Perl (divider l) ++ ","
argDivide C l       = sequenceFromString C (divider l)
argDivide Python l  = "+" ++ sequenceFromString Python (divider l) ++ "+"
argDivide Ruby l    = "+" ++ sequenceFromString Ruby (divider l) ++ "+"
argDivide Java l    = sequenceFromString Java (divider l)

argList lang1 lang2 n = intercalate (argDivide lang1 lang2) $
    map (arg lang1) ([1..n-1] ++ [0])

fromTo Haskell l n = "q " ++ paramList Haskell n ++ "=putStrLn$a0++" ++
    sequenceFromString Haskell ("\n" ++ defn l) ++ "++" ++
    argList Haskell l n ++ "++" ++ sequenceFromString Haskell (endDefn l)
fromTo Perl    l n = "sub q {" ++ "print $_[0]," ++
    sequenceFromString Perl ("\n" ++ defn l) ++ "," ++ argList Perl l n ++ "," ++
    sequenceFromString Perl (endDefn l ++ "\n") ++ "}"
fromTo Python  l n = "def q(" ++ paramList Python n ++
    "): print a0+" ++ sequenceFromString Python ("\n" ++ defn l) ++
    "+" ++ argList Python l n ++ "+" ++ sequenceFromString Python (endDefn l)
fromTo Ruby    l n = "def q(" ++ paramList Ruby n ++
    ") print a0+" ++ sequenceFromString Ruby ("\n" ++ defn l) ++
    "+" ++ argList Ruby l n ++ "+" ++ sequenceFromString Ruby (endDefn l ++ "\n") ++ " end"
fromTo C       l n = "q(" ++ paramList C n ++ "){" ++ "printf(a0);" ++
    sequenceFromString C ("\n" ++ defn l) ++ argList C l n ++
    sequenceFromString C (endDefn l ++ "\n") ++ "}"
fromTo Java    l n = "public class quine{public static void q(" ++
    paramList Java n ++ "){java.io.PrintStream o=System.out;o.print(a0);" ++
    sequenceFromString Java ("\n" ++ defn l) ++ argList Java l n ++
    sequenceFromString Java (endDefn l ++ "\n") ++ "}"

main = do
    let n = length langs
    let langs' = cycle langs
    putStrLn $ fromTo (head langs') (head (tail langs')) n
    putStrLn $ driver (head langs') $ zipWith (\lang1 lang2 -> fromTo lang1 lang2 n)
        (take n (tail langs')) (tail (tail langs'))</pre>
<p><small><a href="http://news.ycombinator.com/item?id=2322145">Vía Hacker News</a></small></p>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushHaskell.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh//flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2011/03/15/un-programa-escrito-en-haskell-que-imprime-un-programa-en-perl-que-imprime/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Centro de rehabilitación para programadores Java</title>
		<link>http://mundogeek.net/archivos/2008/03/17/centro-de-rehabilitacion-para-programadores-java/</link>
		<comments>http://mundogeek.net/archivos/2008/03/17/centro-de-rehabilitacion-para-programadores-java/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 16:38:49 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/03/17/centro-de-rehabilitacion-para-programadores-java/</guid>
		<description><![CDATA[La programación en Java no tiene por qué ser una dolencia permanente. Con el tratamiento adecuado, y una copia de &#8220;Programando en Ruby&#8221;, puedes reencontrar una vida de desarrollo de software feliz y productiva.]]></description>
			<content:encoded><![CDATA[<p>La programación en Java no tiene por qué ser una dolencia permanente. Con el tratamiento adecuado, y una copia de &#8220;Programando en Ruby&#8221;, puedes reencontrar una vida de desarrollo de software feliz y productiva.</p>
<p><center><a href="http://www.cafepress.com/javarehab" title="Rehabilitación Java"><img src="http://mundogeek.net/wp-content/rehabilitacion-java.jpg" alt="Rehabilitación Java" title="Rehabilitación Java"/></a></center></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/03/17/centro-de-rehabilitacion-para-programadores-java/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Dreamhost: WordPress aún más fácil y Mongrel para Ruby on Rails</title>
		<link>http://mundogeek.net/archivos/2008/02/07/dreamhost-wordpress-aun-mas-facil-y-mongrel-para-ruby-on-rails/</link>
		<comments>http://mundogeek.net/archivos/2008/02/07/dreamhost-wordpress-aun-mas-facil-y-mongrel-para-ruby-on-rails/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 11:48:02 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[alojamiento]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/02/07/dreamhost-wordpress-aun-mas-facil-y-mongrel-para-ruby-on-rails/</guid>
		<description><![CDATA[Estas son las novedades que anuncia Dreamhost en su newsletter de este mes. Anteriormente ya existía una sección en el panel de control de Dreamhost que permitía instalar WordPress con un solo clic. Ahora es incluso más sencillo: la gente de Dreamhost se encarga de actualizar tu instalación de WordPress siempre que aparezca una nueva [...]]]></description>
			<content:encoded><![CDATA[<p>Estas son las novedades que anuncia <a href="http://mundogeek.net/archivos/2007/12/12/alojamiento-con-500gb-de-espacio-y-5000gb-de-ancho-de-banda-por-4-euros-al-mes/" title="Alojamiento con 500GB de espacio y 5000GB de ancho de banda por 4 euros al mes">Dreamhost</a> en su newsletter de este mes.</p>
<p>Anteriormente ya existía una sección en el panel de control de <a href="http://mundogeek.net/archivos/2007/12/12/alojamiento-con-500gb-de-espacio-y-5000gb-de-ancho-de-banda-por-4-euros-al-mes/" title="El mejor hosting">Dreamhost</a> que permitía instalar WordPress con un solo clic. Ahora es incluso más sencillo: la gente de Dreamhost se encarga de actualizar tu instalación de WordPress siempre que aparezca una nueva versión y de mantener la bitácora y la base de datos correctamente configurada.</p>
<p>Mongrel es un servidor HTTP para aplicaciones escritas en Ruby cuya principal característica es la velocidad. A partir de ahora está disponible para clientes de DreamHost PS.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/02/07/dreamhost-wordpress-aun-mas-facil-y-mongrel-para-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>¿Lenguaje de programación más popular?</title>
		<link>http://mundogeek.net/archivos/2007/09/26/%c2%bflenguaje-de-programacion-mas-popular/</link>
		<comments>http://mundogeek.net/archivos/2007/09/26/%c2%bflenguaje-de-programacion-mas-popular/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 17:37:17 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[lenguajes]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/09/26/%c2%bflenguaje-de-programacion-mas-popular/</guid>
		<description><![CDATA[Todos sabemos que el klingon será el idioma dominante dentro de 5 años pero, ¿cuál será el lenguaje de programación más demandado? Según TIOBE, que mantiene un ranking de los lenguajes más utilizados basándose en el número de líneas de código escritas en cada uno, los lenguajes de programación más populares actualmente son: Java &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Todos sabemos que el klingon será el idioma dominante dentro de 5 años pero, ¿cuál será el lenguaje de programación más demandado?</p>
<p>Según TIOBE, que mantiene un ranking de los lenguajes más utilizados basándose en el número de líneas de código escritas en cada uno, los lenguajes de programación más populares actualmente son:</p>
<ol>
<li>Java &#8211; 21.701%</li>
<li>C &#8211; 14.908%</li>
<li>(Visual) Basic &#8211; 10.748%</li>
<li>PHP &#8211; 10.204%</li>
<li>C++ &#8211; 9.938%</li>
<li>Perl &#8211; 5.416%</li>
<li>C# &#8211; 3.583%</li>
<li>Python &#8211; 3.025%</li>
<li>JavaScript &#8211; 2.722%</li>
<li>Ruby &#8211; 2.065%</li>
</ol>
<p><span id="more-1211"></span></p>
<p>Me gustaría saber cuáles son vuestras predicciones y por qué. Así que no os cortéis y votad la siguiente encuesta:</p>
<p><strong>Lenguaje de programación más popular</strong></p>
<ul>
<li>
C#<br />
2447 (<i>52% de los votos</i>)
</li>
<li>
Java<br />
727 (<i>15% de los votos</i>)
</li>
<li>
PHP<br />
347 (<i>7% de los votos</i>)
</li>
<li>
Python<br />
262 (<i>6% de los votos</i>)
</li>
<li>
C++<br />
214 (<i>5% de los votos</i>)
</li>
<li>
Basic / Visual Basic<br />
201 (<i>4% de los votos</i>)
</li>
<li>
C<br />
198 (<i>4% de los votos</i>)
</li>
<li>
Ruby<br />
60 (<i>1% de los votos</i>)
</li>
<li>
Delphi<sup title="Añadido por un lector">1</sup><br />
34 (<i>1% de los votos</i>)
</li>
<li>
Logo<sup title="Añadido por un lector">1</sup><br />
32 (<i>1% de los votos</i>)
</li>
<li>
JavaScript<br />
31 (<i>1% de los votos</i>)
</li>
<li>
Pascal<sup title="Añadido por un lector">1</sup><br />
30 (<i>1% de los votos</i>)
</li>
<li>
COBOL<sup title="Añadido por un lector">1</sup><br />
23 (<i>0% de los votos</i>)
</li>
<li>
Perl<br />
16 (<i>0% de los votos</i>)
</li>
<li>
pl/sql<sup title="Añadido por un lector">1</sup><br />
15 (<i>0% de los votos</i>)
</li>
<li>
LISP<sup title="Añadido por un lector">1</sup><br />
12 (<i>0% de los votos</i>)
</li>
<li>
Asembler<sup title="Añadido por un lector">1</sup><br />
12 (<i>0% de los votos</i>)
</li>
<li>
FORTRAN<sup title="Añadido por un lector">1</sup><br />
12 (<i>0% de los votos</i>)
</li>
<li>
D<sup title="Añadido por un lector">1</sup><br />
9 (<i>0% de los votos</i>)
</li>
<li>
Tarafia<sup title="Añadido por un lector">1</sup><br />
8 (<i>0% de los votos</i>)
</li>
<li>
ActionScript<sup title="Añadido por un lector">1</sup><br />
7 (<i>0% de los votos</i>)
</li>
<li>
Klingon<sup title="Añadido por un lector">1</sup><br />
6 (<i>0% de los votos</i>)
</li>
<li>
BrainFuck<sup title="Añadido por un lector">1</sup><br />
6 (<i>0% de los votos</i>)
</li>
<li>
Genexus<sup title="Añadido por un lector">1</sup><br />
6 (<i>0% de los votos</i>)
</li>
<li>
Groovy<sup title="Añadido por un lector">1</sup><br />
6 (<i>0% de los votos</i>)
</li>
<li>
Haskell<sup title="Añadido por un lector">1</sup><br />
5 (<i>0% de los votos</i>)
</li>
<li>
RPG<sup title="Añadido por un lector">1</sup><br />
5 (<i>0% de los votos</i>)
</li>
<li>
modafuca<sup title="Añadido por un lector">1</sup><br />
5 (<i>0% de los votos</i>)
</li>
</ul>
<p><em>Votos totales: 4736</em><br />
<em>Iniciada: 26 Septiembre 2007</em><br />
<small><sup>1</sup> = Añadido por un lector</small></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/09/26/%c2%bflenguaje-de-programacion-mas-popular/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails vs. Django</title>
		<link>http://mundogeek.net/archivos/2007/08/20/ruby-on-rails-vs-django/</link>
		<comments>http://mundogeek.net/archivos/2007/08/20/ruby-on-rails-vs-django/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 13:26:52 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/08/20/ruby-on-rails-vs-django/</guid>
		<description><![CDATA[En vaporbase podemos encontrar una comparativa de 45 páginas entre Ruby on Rails y Django, los frameworks de desarrollo web más conocidos para Ruby y Python respectivamente. He resumido las conclusiones del autor, aunque no comparto varios puntos, para aquellos demasiado vagos para leerlo entero. Comunidad Ruby on Rails es más popular, debido entre otras [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vaporbase.com/rails-django" title="Ruby on Rails o Django">En vaporbase</a> podemos encontrar una comparativa de 45 páginas entre <strong>Ruby on Rails</strong> y <strong>Django</strong>, los frameworks de desarrollo web más conocidos para Ruby y Python respectivamente. He resumido las conclusiones del autor, aunque no comparto varios puntos, para aquellos demasiado vagos para leerlo entero.<span id="more-1174"></span></p>
<h2>Comunidad</h2>
<p>Ruby on Rails es más popular, debido entre otras cosas a que es open source desde un año antes que Django. Sin embargo, Django está ganando bastante popularidad últimamente. 4 puntos (sobre 5) para Ruby on Rails y 3 para Django.</p>
<h2>Lenguaje de programación</h2>
<p>Python es mucho más utilizado que Ruby. En occidente Ruby es conocido básicamente debido a Ruby on Rails, mientras que sólo en la web de setuptools se listan más de 10.000 librerías para Python. Según el autor programar en Ruby es más divertido, por lo que concluye dando a ambos 4 puntos.</p>
<h2>Concepto del framework</h2>
<p>Ambos siguen el patrón MVC (Modelo &#8211; Vista &#8211; Controlador). RoR tiende a hacer las cosas automágicamente, en Django se prefiere la transparencia en lugar del paternalismo. 4 puntos para Django y 3 para Ruby on Rails.</p>
<h2>Instalación / estructura de directorios</h2>
<p>Ambos son sencillos de instalar. Ruby on Rails fuerza a utilizar una estructura de directorios predeterminada que no tiene porque funcionar en todos los casos. Django es más flexible. 5 puntos para Django y 4 para Ruby on Rails.</p>
<h2>Bases de datos y modelo</h2>
<p>Ambos usan ORM, al estilo de, por ejemplo, Hibernate (correspondencias entre clases y tablas de una base de datos relacional). Mientras que en RoR se crea primero la base de datos y la clase modelo inspecciona la tabla para determinar los atributos, en Django se define primero la clase modelo y a partir de esta se crea la tabla o tablas en la base de datos. </p>
<p>Ruby on Rails proporciona alguna herramienta adicional interesante, como la migración del esquema de una base de datos automaticamente usando el comando migration que le sitúa con 4 puntos frente a los 3 de Django.</p>
<h2>Redirección y controladores</h2>
<p>Las correspondencias entre la URL solicitada y la clase controladora que tratará la petición se listan en ambos casos en archivos de configuración. Django permite utilizar expresiones regulares para definir las URLs. 4 puntos para Django, 3 para Ruby on Rails.</p>
<p>En lo que respecta al desarrollo de los controladores en sí, no existen diferencias significativas que no se traten en otros apartados, por lo que ambos obtienen 3 puntos en este apartado.</p>
<h2>Plantillas, formularios</h2>
<p>Sin diferencias substanciales. 3 puntos para cada uno en ambos casos.</p>
<h2>Administración de los datos y los usuarios</h2>
<p>Una de las cosas por las que Django es famoso es por poder generar una interfaz para crear, modificar, borrar y listar items de una clase de objetos del modelo de dominio a partir de la clase. Además también se puede buscar, filtrar y ordenar las listas. El problema es que estas páginas son difíciles de modificar, por lo que si necesitas algo que se salga de lo común tendrás que crear esta interfaz de gestión a mano, como siempre.</p>
<p>Rails permite algo similar a través de plugins, pero la alternativa de Django es algo mejor. La gestión de permisos es muy rudimentaria en ambos casos: 2 puntos para ambos.</p>
<p>De nuevo Django permite administrar usuarios permitiendo crear grupos y posibilitando registrar nuevos usuarios mientras que en Ruby on Rails esta misma funcionalidad se logra a través de plugins. Ambos distan mucho de ser perfectos: 2 puntos.</p>
<h2>AJAX</h2>
<p>En Ruby on Rails el uso de AJAX está totalmente integrado dentro del framework y encapsulan la funcionalidad de los toolkits prototype y Scrip.aculo.us de forma que se puedan añadir distintos efectos AJAX a las páginas sin necesidad de tocar una sola línea de Javascript.</p>
<p>En Django, por contra, se intenta facilitar el uso de toolkits AJAX, pero no se integra ninguno dentro del framework.</p>
<p>4 puntos para Ruby on Rails, 3 para Django.</p>
<h2>Documentación</h2>
<p>Ambos cuentan con excelente documentación, aunque la de Ruby on Rails es más abundante dado que actualmente es más conocido. 4 puntos para Ruby on Rails, 3 para Django.</p>
<h2>Extensiones</h2>
<p>La instalación de plugins en Ruby on Rails es sumamente sencilla, en Django es más manual. Existen muchos más plugins para Ruby on Rails.</p>
<p>4 puntos para Ruby on Rails, 2 para Django.</p>
<h2>Ciclo de desarrollo</h2>
<p>Ambos cuentan con herramientas de depuración maduras. 3 puntos para ambos.</p>
<p>En Ruby on Rails las baterías de pruebas están más integradas en el ciclo de desarrollo. 4 puntos para Rails, 3 para Django.</p>
<p>Rails facilita más el proceso de despliegue de la aplicación: 4 puntos, frente a los 3 de Django.</p>
<h2>Conclusión</h2>
<p>Haciendo la media el autor da un 3.18 sobre 5 a Ruby on Rails y un 3.27 a Django en el apartado técnico.</p>
<p>Sin embargo, en lo relacionado con el soporte (comunidad, documentación, extensiones de los usuarios, &#8230;) Ruby on Rails se alza como claro vencedor con 3.67 puntos frente a los 2.83 de Django.</p>
<p>En conclusión, las notas finales son de 3.35 para Ruby on Rails y 3.12 para Django.</p>
<p>Esperemos que Django comience a alcanzar la popularidad que se merece y empiecen a cambiar las tornas dentro de poco <img src='http://mundogeek.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/08/20/ruby-on-rails-vs-django/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Gráficas bonitas con Ruby en Ubuntu</title>
		<link>http://mundogeek.net/archivos/2007/08/09/graficas-bonitos-con-ruby-en-ubuntu/</link>
		<comments>http://mundogeek.net/archivos/2007/08/09/graficas-bonitos-con-ruby-en-ubuntu/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 11:00:24 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[graficas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/08/09/graficas-bonitos-con-ruby-en-ubuntu/</guid>
		<description><![CDATA[Vamos a utilizar la librería Gruff Graphs de Ruby (Galería de ejemplos). Necesitaremos, evidentemente, el intérprete de Ruby, además de la librería RMagick, necesaria para correr Gruff, y gem, para poder instalar librerías para Ruby fácilmente. sudo aptitude install ruby rubygems librmagick-ruby Ahora utilizamos el comando gem para instalar gruff, contestando afirmativamente cuando el programa [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a utilizar la librería <a href="http://nubyonrails.com/pages/gruff">Gruff Graphs de Ruby</a> (<a href="http://geoffreygrosenbach.com/projects/show/5">Galería de ejemplos</a>). Necesitaremos, evidentemente, el intérprete de Ruby, además de la librería RMagick, necesaria para correr Gruff, y gem, para poder instalar librerías para Ruby fácilmente.</p>
<p class="code">sudo aptitude install ruby rubygems librmagick-ruby</p>
<p>Ahora utilizamos el comando gem para instalar gruff, contestando afirmativamente cuando el programa nos pregunte si queremos instalar las dependencias necesarias.</p>
<p class="code">sudo gem install gruff</p>
<p>Ahora podemos escribir nuestro script en Ruby que cree una imagen con los datos que le indiquemos. Por ejemplo, para crear un gráfico de barras:</p>
<blockquote><p><code>#!/usr/bin/ruby</p>
<p>require 'rubygems'<br />
require 'gruff'</p>
<p>g = Gruff::Line.new<br />
g.title = "Mi gráfica de prueba"</p>
<p>g.data("Java", [24, 25, 18])<br />
g.data("C", [17.5, 17, 16.5])<br />
g.data("PHP", [4, 3.5, 9.5])<br />
g.data("Python", [1, 6.5, 2.5])</p>
<p>g.labels = {0 => '2003', 1 => '2004', 2 => '2005'}</p>
<p>g.write('prueba.png')</code></p></blockquote>
<p>Ejecutamos el script:</p>
<p class="code">ruby prueba.rb</p>
<p>Y este es el resultado:<br />
<img src="http://mundogeek.net/wp-content/grafica-gruff-ruby.png" alt="Gráfica Ubuntu" title="Gráfica Ubuntu"/></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/08/09/graficas-bonitos-con-ruby-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

