<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkcBRXk5fip7ImA9WxBUE08.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340</id><updated>2010-02-28T00:34:14.726-03:00</updated><title>gioos</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.gioos.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.gioos.com/" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Gioos" /><feedburner:info uri="gioos" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUEDRHg6eCp7ImA9WxBSGU4.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-6126620137372487240</id><published>2009-12-27T13:28:00.014-03:00</published><updated>2009-12-27T14:07:55.610-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-27T14:07:55.610-03:00</app:edited><title>port scanner usando la Task Parallel Library</title><content type="html">Poderoza la Task Parallel Library, dejo un ejemplo bastante simple de un port scanner que hace su trabajo en paralelo pero sin crear un solo thread en forma explícita. Toda la magia está en:&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;Parallel.For(from, to, (port) =&gt; {});&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; (args.Length &amp;lt; 2 || args.Length &amp;gt; 3)&lt;br /&gt;         &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException();&lt;br /&gt;&lt;br /&gt;     var to = 0;&lt;br /&gt;     var from = 0;&lt;br /&gt;     var host = args[0];         &lt;br /&gt;&lt;br /&gt;     &lt;span class="preproc"&gt;#region&lt;/span&gt; argument validation&lt;br /&gt;     &lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;     &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     Console.WriteLine(&lt;span class="str"&gt;"Scanning {0} ports from: {1} to {2}"&lt;/span&gt;, host, from, to - 1);&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;// parallel port scan&lt;/span&gt;&lt;br /&gt;     Parallel.For(from, to, (port) =&amp;gt;&lt;br /&gt;     {&lt;br /&gt;         var tcpScan = &lt;span class="kwrd"&gt;new&lt;/span&gt; TcpClient();&lt;br /&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;         {&lt;br /&gt;             tcpScan.Connect(host, port);&lt;br /&gt;&lt;br /&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; (tcpScan.Connected)&lt;br /&gt;                 Console.WriteLine(&lt;span class="str"&gt;"Listening on port: {0}"&lt;/span&gt;, port);&lt;br /&gt;         }&lt;br /&gt;         &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception)&lt;br /&gt;         {&lt;br /&gt;         }&lt;br /&gt;         &lt;span class="kwrd"&gt;finally&lt;/span&gt;&lt;br /&gt;         {&lt;br /&gt;             &lt;span class="kwrd"&gt;if&lt;/span&gt; (tcpScan.Connected)&lt;br /&gt;                 tcpScan.Close();                 &lt;br /&gt;         }&lt;br /&gt;     });         &lt;br /&gt;&lt;br /&gt;     Console.ReadKey();&lt;br /&gt; }&lt;br /&gt;}    &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-6126620137372487240?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CZona5AdB8OkVNxpZr2rzVTnFcw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CZona5AdB8OkVNxpZr2rzVTnFcw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CZona5AdB8OkVNxpZr2rzVTnFcw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CZona5AdB8OkVNxpZr2rzVTnFcw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/6SxflbKrno4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/6126620137372487240/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=6126620137372487240" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/6126620137372487240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/6126620137372487240?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/6SxflbKrno4/port-scanner-usando-la-task-parallel.html" title="port scanner usando la Task Parallel Library" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.gioos.com/2009/12/port-scanner-usando-la-task-parallel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIASH86eSp7ImA9WxNbFkU.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-4627350558679363207</id><published>2009-11-19T23:07:00.008-03:00</published><updated>2009-11-19T23:35:49.111-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-19T23:35:49.111-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wii" /><title>wii sports fail</title><content type="html">Parece que a la gente de nintendo no se le ocurrió que alguien podía jugar al wii sports hasta romper el indicador de puntaje.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_f5w0YURrEeU/SwX9xoAuE2I/AAAAAAAABW8/I3Q_hskj6EQ/s1600/wii.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://4.bp.blogspot.com/_f5w0YURrEeU/SwX9xoAuE2I/AAAAAAAABW8/I3Q_hskj6EQ/s320/wii.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5406005956724003682" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-4627350558679363207?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GcVhFWFzOrlgHJZNBZgX0kryHfo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GcVhFWFzOrlgHJZNBZgX0kryHfo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GcVhFWFzOrlgHJZNBZgX0kryHfo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GcVhFWFzOrlgHJZNBZgX0kryHfo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/LthgEn-79HU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/4627350558679363207/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=4627350558679363207" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/4627350558679363207?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/4627350558679363207?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/LthgEn-79HU/wii-sports-fail.html" title="wii sports fail" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_f5w0YURrEeU/SwX9xoAuE2I/AAAAAAAABW8/I3Q_hskj6EQ/s72-c/wii.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.gioos.com/2009/11/wii-sports-fail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcDSXk9eSp7ImA9WxRWFUs.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-3842218920294814876</id><published>2008-11-01T13:55:00.019-02:00</published><updated>2008-11-01T15:21:18.761-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-01T15:21:18.761-02:00</app:edited><title>Hola Flex</title><content type="html">Ahi van mis primeras lineas en Flex:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mx:Application&lt;/span&gt; &lt;span class="attr"&gt;xmlns:mx&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.adobe.com/2006/mxml"&lt;/span&gt; &lt;span class="attr"&gt;layout&lt;/span&gt;&lt;span class="kwrd"&gt;="absolute"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:ns1&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mx:Button&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;="Saludo"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnSaludo"&lt;/span&gt; &lt;span class="attr"&gt;enabled&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt; &lt;span class="attr"&gt;click&lt;/span&gt;&lt;span class="kwrd"&gt;="saludar()"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;mx:Script&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;br /&gt;                import mx.controls.Alert;&lt;br /&gt;                import mx.rpc.events.ResultEvent;            &lt;br /&gt;            &lt;br /&gt;                private function saludar():void{&lt;br /&gt;                    Alert.show('hola');&lt;br /&gt;                }&lt;br /&gt;            ]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;mx:Script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;    &lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;mx:Application&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-3842218920294814876?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/csB7kQttWx3dWy4tGRv7ojU16IY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/csB7kQttWx3dWy4tGRv7ojU16IY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/csB7kQttWx3dWy4tGRv7ojU16IY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/csB7kQttWx3dWy4tGRv7ojU16IY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/MVZ7k4AuKuA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/3842218920294814876/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=3842218920294814876" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/3842218920294814876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/3842218920294814876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/MVZ7k4AuKuA/hola-flex.html" title="Hola Flex" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.gioos.com/2008/11/hola-flex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFRHg5eip7ImA9WxdXEUU.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-5136149371024943051</id><published>2008-06-22T11:50:00.003-03:00</published><updated>2008-06-22T22:28:35.622-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-22T22:28:35.622-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="datamapper" /><title>datamapper</title><content type="html">&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Una de las cosas que mas me gusta de &lt;a href="http://datamapper.org/"&gt;DataMapper&lt;/a&gt; es que partís definiendo los atributos de tu modelo en el modelo mismo. En lugar de armar scripts (migrations), o definir a mano la base de datos y que luego levante el modelo de la base.&lt;br /&gt;&lt;br /&gt;Pero había algo bastante feo en la version 0.3; cada vez que modificabas el modelo y le decías que actualice la base de datos, borraba todos los datos que tenías en ella.&lt;br /&gt;&lt;br /&gt;Con la salida de la versión 0.9 de DataMapper se solucionó el problema de perder todos los datos de la base por cada&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt; dm:db:automigrate&lt;/span&gt;. Ahora existe &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;dm:db:autoupgrade&lt;/span&gt; que se encarga de actualizar la base de datos según lo definición de los modelos preservando la información que está en las tablas. Parece ser una buena solución frente al problema que tiene ActiveRecord cuando no se trata de un proyecto de una sola persona (se crean muchos conflictos con los commits de los migrations). La solución de DataMapper es olvidarse de la base de datos, actualizo mis modelos aplicando patchs, haciendo merges, lo que fuera. Luego hago un upgrade y la base siempre corresponde a la definicón de los modelos.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'trebuchet ms';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;Otro cambio importante es que ya no es necesario que las clases que nos interesa persistir hereden de una clase especial como sucede con la mayoría de los ORM's. Entonces nos queda la herencia disponible para algún uso más interesante.&lt;br /&gt;&lt;br /&gt;  &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class Page&lt;br /&gt;    include DataMapper::Resource&lt;br /&gt;&lt;br /&gt; end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;También perdió un poco de automagia que tenía respecto a la definición de las primary keys. Ahora hay que definir a mano la pk de cada modelo, como cualquier otro atributo:&lt;br /&gt;&lt;br /&gt;  &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class Page&lt;br /&gt;    include DataMapper::Resource&lt;br /&gt;&lt;br /&gt;    property :id, Integer, :serial =&gt; true&lt;br /&gt;&lt;br /&gt;  end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Está muy buena la sintaxis para definir las relaciones "has_many":&lt;br /&gt;&lt;br /&gt;  &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class Page&lt;br /&gt;    include DataMapper::Resource&lt;br /&gt;&lt;br /&gt;    property :id, Integer, :serial =&gt; true&lt;br /&gt;&lt;br /&gt;    has 1..3, :columns&lt;br /&gt;    has n, :html_controls&lt;br /&gt;  end&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-5136149371024943051?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K96o6NGpMzYws8TmtxxGYmMXMA8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K96o6NGpMzYws8TmtxxGYmMXMA8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K96o6NGpMzYws8TmtxxGYmMXMA8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K96o6NGpMzYws8TmtxxGYmMXMA8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/5HwqG8i9vjs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/5136149371024943051/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=5136149371024943051" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/5136149371024943051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/5136149371024943051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/5HwqG8i9vjs/datamapper.html" title="datamapper" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.gioos.com/2008/06/datamapper.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04CQXszeip7ImA9WxZUGUo.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-7701917919547793345</id><published>2008-04-11T19:23:00.011-03:00</published><updated>2008-04-12T01:52:40.582-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-12T01:52:40.582-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby on rails" /><category scheme="http://www.blogger.com/atom/ns#" term="activerecord" /><title>árbol en rails</title><content type="html">&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Si querés implementar una estructura con forma de &lt;a href="http://es.wikipedia.org/wiki/%C3%81rbol_%28estructura_de_datos%29"&gt;árbol n-ario&lt;/a&gt; en rails, podés usar este pluging:  &lt;a href="http://wiki.rubyonrails.org/rails/pages/ActsAsTree"&gt;ActsAsTree&lt;/a&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;ActsAsTree lo que hace es crear una tabla en donde guarda el nombre de la clase, la primary key y el parent_id de cada instancia de cada modelo que nos interese que se comporte como árbol. Con esta tabla puede dar soporte a todos los modelos ActiveRecord que tengas definidos, además en cada modelo vas a tener acceso a estos métodos:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;children() – all immediate children of current object&lt;br /&gt;parent() – first ancestor of the current object&lt;br /&gt;siblings() – all children of my parent excluding me&lt;br /&gt;self_and_siblings() all children of my parent including me&lt;br /&gt;ancestors() all parent, grandparent, etc… object up to root&lt;br /&gt;root() the base object we descended from in the tree&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Otra forma&lt;/span&gt; de hacer casi lo mismo pero sin un plugin y sin guardar las relaciones entre nodos en una tabla externa es la siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Suponiendo que tenemos el modelo "Box", lo que vamos a hacer es crear una estructura que permita guardar cajas dentro de cajas. Sólo vamos a guardar la relación de cada nodo con su padre.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;primero hay que agregar el campo "parent_id" en la tabla "boxes":&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  class BoxAddReferenceToParent &lt;&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    def self.up         &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;      add_column :boxes, &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;                 :parent_id, &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;                 :integer   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    end    &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    def self.down     &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;      remove_column :boxes, &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;                    :parent_id   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    end  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;segundo, agregamos la relación en el modelo de cada nodo con su parent (en este caso el parent es la caja que contiene a cada instancia):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  class Box &lt; ActiveRecord::Base&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    belongs_to :parent, &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;               :class_name =&gt; "Box", &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;               :foreign_key =&gt; "parent_id"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;tercero y último, agregamos la relación de cada caja con las que están dentro de ellas:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  class Box &lt; ActiveRecord::Base&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    belongs_to :parent, &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;               :class_name =&gt; "Box", &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;               :foreign_key =&gt; "parent_id"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    has_many :children, &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;             :class_name =&gt; "Box", &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;             :foreign_key =&gt; "parent_id"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;listo!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Desde la consola de rails podés crear un par de cajas y probar algo como esto:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;b = Box.find 17 &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;b.parent         # es la caja que contiene a b&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;b.children       # es un Array de los objetos Box que están dentro de b  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Esta solución no es tan automágica como ActsAsTree pero me parece mucho mas prolija, las relaciones entre los nodos están donde deben estar.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-7701917919547793345?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sQF59iy7UsCfCkkuMQkbgYCvsfc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sQF59iy7UsCfCkkuMQkbgYCvsfc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sQF59iy7UsCfCkkuMQkbgYCvsfc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sQF59iy7UsCfCkkuMQkbgYCvsfc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/YYab2teT5jA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/7701917919547793345/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=7701917919547793345" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7701917919547793345?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7701917919547793345?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/YYab2teT5jA/rbol-en-rails.html" title="árbol en rails" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.gioos.com/2008/04/rbol-en-rails.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcFQHo5eyp7ImA9WxZREks.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-8183625543364856944</id><published>2008-02-06T00:27:00.001-02:00</published><updated>2008-02-06T01:03:31.423-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-06T01:03:31.423-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sortables" /><category scheme="http://www.blogger.com/atom/ns#" term="mootools" /><title>mootools: sortable of sortables</title><content type="html">&lt;p&gt;Armé una &lt;a href="http://www.gioos.com/demos/mootools/sortables.html"&gt;demo&lt;/a&gt; de un sortable que contiene a otros tres sortables. Hace un tiempo había hecho la misma prueba pero con prototype+scriptaculus, la verdad que es mucho mas transparente con mootools y el código queda mucho mas limpio:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="color: rgb(153, 153, 153);"&gt;var master = new Sortables('master', { handle: 'span'});&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="color: rgb(153, 153, 153);"&gt;  var mySortables = new Sortables([$('lista_A'), $('lista_B'), $('lista_C')], {&lt;br /&gt;         cloneOpacity: 0.4,&lt;br /&gt;      elementOpacity: 0.8&lt;br /&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span"  style="color: rgb(153, 153, 153); font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;La demo está funcionando en opera, safari, firefox, iexplorer y camino sin tener que hacer ningún hack por el browser; mootools se encarga solito!&lt;/p&gt;&lt;p&gt;En la &lt;a href="http://www.gioos.com/demos/mootools/sortables.html"&gt;demo&lt;/a&gt;  se pueden dragear los items dentro de una misma lista, entre las listas y también se puede hacer un drag desde la parte naranja para intercambiar una lista completa con otra.&lt;/p&gt;&lt;p&gt;Esta es &lt;a href="http://www.gregphoto.net/sortable/advanced/"&gt;otra demo&lt;/a&gt; que encontré pero usa scriptaculus.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-8183625543364856944?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_O6fNQ5Hgj-O5lrY0QGMsGvFuN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_O6fNQ5Hgj-O5lrY0QGMsGvFuN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_O6fNQ5Hgj-O5lrY0QGMsGvFuN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_O6fNQ5Hgj-O5lrY0QGMsGvFuN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/g1yY1Ar46KQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/8183625543364856944/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=8183625543364856944" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/8183625543364856944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/8183625543364856944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/g1yY1Ar46KQ/mootools-sortable-of-sortables.html" title="mootools: sortable of sortables" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.gioos.com/2008/02/mootools-sortable-of-sortables.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCSHczcCp7ImA9WxZREUU.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-7362372831715353862</id><published>2008-02-05T00:34:00.000-02:00</published><updated>2008-02-05T01:16:09.988-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-05T01:16:09.988-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="tag" /><title>script tag</title><content type="html">&lt;span style="font-family:georgia;"&gt;Haciendo unas pruebas con los &lt;a href="http://demos.mootools.net/Sortables"&gt;sortables&lt;/a&gt; de &lt;a href="http://mootools.net/"&gt;mootools&lt;/a&gt; me encuentro con que el ejemplo que armé no funciona en FF pero si en Safari. Me pongo a tratar de encontrar el error y para eso voy sacando todo el código que encuentro por el camino con la idea de aislarlo. Llego al punto en el que simplemente defino una función en js y la llamo en el onclick de un button (nada mas simple); pero en FF me tira un error diciendo que la función no está definida. Pruebo de borrar una referencia a un js externo y comienza a funcionar.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;¿Qué pasó?  No había cerrado el tag de script en forma explícita.&lt;br /&gt;Para el tag script la w3c dice: &lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;Start tag: required, End tag: required&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;script scr="mootools.js" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;La forma correcta es:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;script scr="mootools.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;Dejo 2 links al respecto:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a style="font-family: lucida grande;" href="http://javascript.crockford.com/script.html"&gt;crockford "The script tag"&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-family: lucida grande;" href="http://www.w3.org/TR/html401/interact/scripts.html"&gt;w3c recomendation "scripts"&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a style="font-family: lucida grande;" href="http://www.w3.org/TR/html401/interact/scripts.html"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-7362372831715353862?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P3CV7Qp3vAo33GcdGCIKwRKvVrc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P3CV7Qp3vAo33GcdGCIKwRKvVrc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P3CV7Qp3vAo33GcdGCIKwRKvVrc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P3CV7Qp3vAo33GcdGCIKwRKvVrc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/MuzK4dNngX4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/7362372831715353862/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=7362372831715353862" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7362372831715353862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7362372831715353862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/MuzK4dNngX4/script-tag.html" title="script tag" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.gioos.com/2008/02/script-tag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFQ3c4fip7ImA9WB9UE0o.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-6950819407877675303</id><published>2007-12-10T22:47:00.000-03:00</published><updated>2007-12-11T10:11:52.936-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-11T10:11:52.936-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="ruby on rails" /><title>Instalando rails 2.0 y mysql</title><content type="html">Hoy llegué del trabajo y me puse a instalar la &lt;a href="http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done"&gt;versión 2.o de ruby on rails&lt;/a&gt;, en realidad hice un update porque ya vino instalado en el os x tanto ruby como rails.&lt;div&gt;Fue muy fácil (usando &lt;a href="http://www.rubygems.org/"&gt;gems&lt;/a&gt;) :&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;   gem update rails&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;listo!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El problema fue cuando quise tratar de instalar mysql en Leopard.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Al no existir un instalador específico para Leopard por parte de mysql (la versión de Tiger no anda bien) opté por compilar mysql siguiendo los pasos (muy bien explicados) del &lt;a href="http://hivelogic.com/narrative/articles/installing-mysql-on-mac-os-x"&gt;blog de Dan Benjamin.&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Siguiendo la explicación de ese blog al pie de la letra no tuve problemas para compilar e instalar mysql. El único inconveniente fue que no tenía permisos sobre:  &lt;span style="font-family:courier new;"&gt;/var/mysql/mysql.sock &lt;span style="font-family:georgia;"&gt;y me daba este error:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock'&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:georgia;"&gt;La solución la encontré en el &lt;/span&gt;&lt;a style="font-family: georgia;" href="http://dev.mysql.com/doc/refman/5.1/en/mac-os-x-installation.html"&gt;manual &lt;/a&gt;&lt;a style="font-family: georgia;" href="http://dev.mysql.com/doc/refman/5.1/en/mac-os-x-installation.html"&gt;de mysql&lt;/a&gt;&lt;span style="font-family:georgia;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo mkdir /var/mysql&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo chown _mysql /var/mysql/mysql.sock&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo chmod 777 /var/mysql/mysql.sock&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-6950819407877675303?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LJUDmRWTcSd_BGw-Uuq1FBamkAk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LJUDmRWTcSd_BGw-Uuq1FBamkAk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LJUDmRWTcSd_BGw-Uuq1FBamkAk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LJUDmRWTcSd_BGw-Uuq1FBamkAk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/08KXOM1xeeM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/6950819407877675303/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=6950819407877675303" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/6950819407877675303?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/6950819407877675303?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/08KXOM1xeeM/instalando-rails-20-y-mysql.html" title="Instalando rails 2.0 y mysql" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.gioos.com/2007/12/instalando-rails-20-y-mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEARHw6cCp7ImA9WB9UEU8.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-7774658552823785574</id><published>2007-12-07T17:07:00.000-03:00</published><updated>2007-12-08T12:44:05.218-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-08T12:44:05.218-03:00</app:edited><title>otro blog!</title><content type="html">&lt;span style="font-family:georgia;font-size:100%;"&gt;Hoy es un día de nacimientos, nace &lt;a href="http://notiziaz.blogspot.com/"&gt;notizia-z&lt;/a&gt;.&lt;br /&gt;Con &lt;a href="http://diegocanizares.blogspot.com/"&gt;Diego&lt;/a&gt; surgió la idea de hacer un blog para postear las noticias bizarras y no tanto que leemos todos los días en la hora de almuerzo. Recuerdo cada una... por ejemplo la de los &lt;a href="http://www.infobae.com/notas/nota.php?Idx=278701&amp;amp;IdxSeccion=1100795"&gt;enanos de jardín de infobae&lt;/a&gt;; &lt;a href="http://www.perfil.com/contenidos/2006/09/29/noticia_0049.html"&gt;perfil no se queda atrás&lt;/a&gt;...     jaja&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-7774658552823785574?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PiB704z-Mm0zyIUkBS5ldmfMSW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PiB704z-Mm0zyIUkBS5ldmfMSW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PiB704z-Mm0zyIUkBS5ldmfMSW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PiB704z-Mm0zyIUkBS5ldmfMSW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/-kk838twfM4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/7774658552823785574/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=7774658552823785574" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7774658552823785574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7774658552823785574?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/-kk838twfM4/otro-blog.html" title="otro blog!" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.gioos.com/2007/12/otro-blog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFQX8-fSp7ImA9WB9UEEg.&quot;"><id>tag:blogger.com,1999:blog-4898645472208088340.post-7278923235906194365</id><published>2007-12-07T14:29:00.001-03:00</published><updated>2007-12-07T17:26:50.155-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-07T17:26:50.155-03:00</app:edited><title>hola</title><content type="html">&lt;span style="font-family: georgia;font-size:100%;" &gt;¿Qué es gioos?&lt;br /&gt;Es un lugar para publicar cosas que me interesan sobre desarrollo web, de video juegos y lo que sea, compartir opiniones y dar a conocer proyectos en los que estoy trabajando.&lt;br /&gt;&lt;br /&gt;Antes tenía instalado un blog typo (no llegué a publicar nada) pero al final me decidí por blogger.&lt;br /&gt;&lt;br /&gt;Bueno, así arranca el blog.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4898645472208088340-7278923235906194365?l=blog.gioos.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3n1HkwN4EdaSnky6AWJ5rXgyl1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3n1HkwN4EdaSnky6AWJ5rXgyl1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3n1HkwN4EdaSnky6AWJ5rXgyl1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3n1HkwN4EdaSnky6AWJ5rXgyl1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Gioos/~4/uM2G6vbkH20" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.gioos.com/feeds/7278923235906194365/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=4898645472208088340&amp;postID=7278923235906194365" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7278923235906194365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4898645472208088340/posts/default/7278923235906194365?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gioos/~3/uM2G6vbkH20/hola.html" title="hola" /><author><name>Eze</name><uri>http://www.blogger.com/profile/02361098592253412216</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="10207973343986561148" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.gioos.com/2007/12/hola.html</feedburner:origLink></entry></feed>
