<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Angel "Java" Lopez : Javascript, Programación</title><link>http://msmvps.com/blogs/lopez/archive/tags/Javascript/Programaci_F300_n/default.aspx</link><description>Tags: Javascript, Programación</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>SimpleTags (1) Primeras Ideas</title><link>http://msmvps.com/blogs/lopez/archive/2013/01/28/simpletags-1-primeras-ideas.aspx</link><pubDate>Mon, 28 Jan 2013 16:13:01 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1823198</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1823198</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2013/01/28/simpletags-1-primeras-ideas.aspx#comments</comments><description>&lt;p&gt;Hace más de una década, escribí un sitio que sirvió luego de base para mi sitio personal. Estaba basado en tener items heterogéneos (enlaces, páginas tipo wiki, etc…) clasificados en categorías. Las categorías se disponían en árbol, y se soportaba el concepto de enlace simbólico: una rama de una categoría podía ser un puntero a otro rama del árbol (como cuando tienen enlaces simbólicos en la jerarquía de directorios de un sistema de archivos). Un item se podía colocar en más de una categoría. Pero después de conocer a Delicious y al tiempo a Gmail, ahora prefiero organizar los items usando tags (en Gmail son las “labels”). Y en vez de tener categorías y un árbol de categorías, pienso que es más flexible tener conjuntos basados en predicados de tags. Por ejemplo, lo que sería en mi viejo sitio la categoría Programming –&amp;gt; C#, sería ahora todos los items con tags “programming”, “c#”. Algunas veces, necesitaría en vez de simples tags, un par key-value, como “author:unclebob”, o “project:storm”.&lt;/p&gt;  &lt;p&gt;Así que hace unos días, puse manos a la obra, y comencé un nuevo proyecto, escrito en JavaScript/Node.js, llamado SimpleTags:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://github.com/ajlopez/SimpleTags" href="https://github.com/ajlopez/SimpleTags"&gt;https://github.com/ajlopez/SimpleTags&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Leo en el README.md:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;font size="4"&gt;var itemId = engine.createItem(&amp;#39;http://nodejs.org&amp;#39;, [ &amp;#39;nodejs&amp;#39;, &amp;#39;javascript&amp;#39;, &amp;#39;engine&amp;#39;, &amp;#39;programming&amp;#39; ]);&lt;/font&gt;&lt;/pre&gt;

  &lt;p&gt;…&lt;/p&gt;

  &lt;p&gt;An item has&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;data&lt;/code&gt;: Arbitrary value you supplied &lt;/li&gt;

    &lt;li&gt;&lt;code&gt;tags&lt;/code&gt;: An array of tags. A tag could be a non-empty string or an object with only one property with non-empty value. &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Once created, the item has an associated id, supplied by the engine.&lt;/p&gt;

  &lt;p&gt;…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;El proyecto tiene un modelo en memoria. Un conjunto de tags puede ser asociado a un item de datos arbitrario. Ese item podría ser los datos de un proveedor o factura, pero seguramente sería más usual tener como dato asociado el id del proveedor o la factura, y que otro sistema se ocupe de recuperar la entidad. Entonces, el dato arbitrario puede ser un id para una tabla en nuestra base de datos, o una URL, o lo que querramos y necesitemos. Lo importante es: asociar un dato arbitrario con un conjunto de tags, y recuperar items con predicados sencillos de esos tags.&lt;/p&gt;

&lt;p&gt;Piensen como ejemplo: podemos tener una gran colección de enlaces, y usar SimpleTags para organizarlos. O documentos, fotos, multimedia. Podemos usar los tags en diferentes entornos. Es una idea poderosa y simple que se puede aplciar en varios dominios y escenarios.&lt;/p&gt;

&lt;p&gt;Pienso agrega un sitio web como ejemplo concreto, donde se pueda agregar URLs y asociarles tags, y luego definir categorías o conjuntos, usando predicados. Luego de ese ejemplo general, podría implementar algo más concreto, como una lista de cosas para hacer, con tags, o una lista de tareas pendientes/completas por proyecto, iteración, estado, persona asignada, etc… Usé hace un tiempo un sitio así en un cliente para llevar el estado de los proyectos, y me resultó muy útil y flexible.&lt;/p&gt;

&lt;p&gt;Podría ser una excusa para aprender más de Express, o para hacer “dog fooding” y consumir mi proyecto web &lt;a href="https://github.com/ajlopez/SimpleWeb"&gt;SimpleWeb&lt;/a&gt;. En todo caso, me divierto como loco :-)&lt;/p&gt;

&lt;p&gt;Como es usual, escribí SimpleTags usando TDD, pueden consultar el log de commits. &lt;/p&gt;

&lt;p&gt;Nos leemos!&lt;/p&gt;

&lt;p&gt;Angel “Java” Lopez 
  &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt; 

  &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1823198" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx">TDD</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Proyectos+de+C_26002300_243_3B00_digo+Abierto/default.aspx">Proyectos de C&amp;#243;digo Abierto</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NodeJs/default.aspx">NodeJs</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/SimpleTags/default.aspx">SimpleTags</category></item><item><title>Resoluciones del Nuevo Mes: Noviembre 2012</title><link>http://msmvps.com/blogs/lopez/archive/2012/11/07/resoluciones-del-nuevo-mes-noviembre-2012.aspx</link><pubDate>Wed, 07 Nov 2012 16:15:49 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1818911</guid><dc:creator>lopez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1818911</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/11/07/resoluciones-del-nuevo-mes-noviembre-2012.aspx#comments</comments><description>&lt;p&gt;Revisión de &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/10/02/resoluciones-del-nuevo-mes-octubre-2012.aspx"&gt;mis resoluciones de Octubre&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;- Dar una charla sobre lenguajes de programación en Javascript &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=khbun9jb2T8"&gt;ver video&lt;/a&gt;     &lt;br /&gt;- Dar una chalar sobre Node.js/Socket.IO, aplicaciones web de tiempo real &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/11/01/node-js-express-y-socket-io-en-udadev-2012-cuenca-ecuador.aspx"&gt;ver post&lt;/a&gt;    &lt;br /&gt;- Trabajar en PythonSharp &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="https://github.com/ajlopez/PythonSharp"&gt;ver repo&lt;/a&gt;     &lt;br /&gt;- Trabajar en AjTalk para Java &lt;strong&gt;&lt;font color="#800000"&gt;[pendiente]&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;- Trabajar en AjConsorSite &lt;font color="#800000"&gt;&lt;strong&gt;[parcial]&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt; &lt;/strong&gt;solo tuve demo y reuniones&lt;/font&gt;     &lt;br /&gt;- Trabajar en GameServer &lt;font color="#800000"&gt;&lt;strong&gt;[parcial] &lt;/strong&gt;&lt;font color="#000000"&gt;&lt;strong&gt;&lt;/strong&gt;solo tuve demo y reuniones&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Adicionalmente, estuve trabajando en:&lt;/p&gt;  &lt;p&gt;- Actualizar mis ejemplos de Node.js &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="https://github.com/ajlopez/NodeSamples"&gt;ver repo&lt;/a&gt;     &lt;br /&gt;- Autómata celular en Javascript/Node.js &lt;strong&gt;&lt;font color="#008000"&gt;[completo]&lt;/font&gt;&lt;/strong&gt; &lt;a href="https://github.com/ajlopez/Cellular"&gt;ver repo&lt;/a&gt;     &lt;br /&gt;- Mejoras menores de &lt;a href="https://github.com/ajlopez/AjTalkJs"&gt;AjTalkJs&lt;/a&gt; y &lt;a href="https://github.com/ajlopez/AjLispJs"&gt;AjLispJs&lt;/a&gt;     &lt;br /&gt;- Comenzar mi Basic Script (para Javascript/Node.js) &lt;font color="#008000"&gt;&lt;strong&gt;[completo] &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;a href="https://github.com/ajlopez/BasicScript"&gt;ver repo&lt;/a&gt;       &lt;br /&gt;- Comenzar a portar AjGroups (librería de grupos finitos) a Javascript/Node.js &lt;/font&gt;&lt;font color="#008000"&gt;&lt;strong&gt;[completo] &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;a href="https://github.com/ajlopez/AjGroupsJs"&gt;ver repo&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Para este nuevo mes:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;- Trabajar en PythonSharp      &lt;br /&gt;- Dar una charla sobre Implementando Python, en PyCon 2012 Argentina       &lt;br /&gt;- Trabajar en AjTalk para Java       &lt;br /&gt;- Trabajar en AjTalk para Javascript       &lt;br /&gt;- Trabajar en BasicScript (quiero comenzar a usarlo para que se pueda definir la lógica de un juego ejemplo de mi GameServer)       &lt;br /&gt;- Comenzar páginas markdown con Tutorial de Java, en español&amp;#160; &lt;br /&gt;- Comenzar páginas markdown con Tutorial de Node.js en español&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Nos leemos!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Angel “Java” Lopez      &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;       &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1818911" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/Smalltalk/default.aspx">Smalltalk</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Software/default.aspx">Desarrollo de Software</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Lenguajes+de+Programaci_26002300_243_3B00_n/default.aspx">Lenguajes de Programaci&amp;#243;n</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Python/default.aspx">Python</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Proyectos+de+C_26002300_243_3B00_digo+Abierto/default.aspx">Proyectos de C&amp;#243;digo Abierto</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NodeJs/default.aspx">NodeJs</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Desarrollo+de+Juegos/default.aspx">Desarrollo de Juegos</category></item><item><title>Node.js (1) Trabajando en Windows</title><link>http://msmvps.com/blogs/lopez/archive/2012/06/11/node-js-1-trabajando-en-windows.aspx</link><pubDate>Mon, 11 Jun 2012 16:57:58 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1810907</guid><dc:creator>lopez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lopez/rsscomments.aspx?PostID=1810907</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/06/11/node-js-1-trabajando-en-windows.aspx#comments</comments><description>&lt;p&gt;Si leyeron anteriores posts, ya saben que desde el año pasado estoy usando Node.js, en Windows, en Azure, y también en algún Ubuntu. Ver:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ajlopez.wordpress.com/category/nodejs/"&gt;Posts en Inglés&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/tags/NodeJs/default.aspx"&gt;Posts en Español&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hace unas semanas tuve el gusto de dar una charla sobre &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/05/21/implementing_2D00_programming_2D00_languages_2D00_in_2D00_javascript_2D00_jsconf_2D00_argentina.aspx"&gt;implementación de lenguajes en Javascript&lt;/a&gt;, en &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/05/14/jsconf-argentina-javascript-en-buenos-aires.aspx"&gt;la JSConf Argentina&lt;/a&gt; donde usé Node. Y el pasado mes, &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/06/07/new_2D00_months_2D00_resolutions_2D00_june_2D00_2012.aspx"&gt;me estuve entrenando en proyectos chicos&lt;/a&gt;. También quedó &lt;a href="http://altnethispano.org/wiki/van-2012-04-14-esos-raros-lenguajes-parte1.ashx"&gt;en video una charla virtual&lt;/a&gt; que dí gracias a la &lt;a href="http://msmvps.com/blogs/lopez/archive/2012/04/09/esos-raros-lenguajes-nuevos-1-vans-en-alt-net-hispano.aspx"&gt;gente de AltNet Hispano&lt;/a&gt;. Ahora con este post quisiera iniciar una serie sobre Node.js. &lt;/p&gt;  &lt;p&gt;Como primer tema, viene algo sencillo: ¿qué estoy usando para programar en Windows?&lt;/p&gt;  &lt;p&gt;Primero, estoy usando la versión .msi que está &lt;a href="http://nodejs.org/"&gt;en el sitio de Node&lt;/a&gt;. Uso una estable, 0.6.x, hasta que salga la 0.8.x (las 0.par son las versiones estables de Node.js). Instala Node.js en un directorio fijo de Program files, y ahí mismo &lt;a href="http://npmjs.org/"&gt;tiene npm&lt;/a&gt;. El año pasado apareció soporte directo de Windows (antes había que compilar desde los fuentes) pero no fue hasta que apareció el npm (el manejador de paquetes “estandard” de Node.js) que se hizo cómodo el desarrollo. Les aconsejo tener la última versión. Por ejemplo, en algunas máquinas tenía una versión del año pasado, y el npm todavía tenía algunas fallas (caso concreto: al lanzar npm test, una de las tareas que tiene npm, no incluía el directorio local node_unit\.bin en el PATH, y entonces no ejecutaba tareas como “nodeunit …” aunque estuvieran instaladas).&lt;/p&gt;  &lt;p&gt;Segundo: no codifico casi nada de mis proyectos en GitHub SIN USAR TDD. Para eso, hasta ahora usé:&lt;/p&gt;  &lt;p&gt;- El &lt;a href="http://nodejs.org/api/assert.html"&gt;módulo assert&lt;/a&gt;, que ya viene en Node.js. Ver como ejemplo &lt;a href="https://github.com/ajlopez/AjGenesisNode"&gt;AjGenesisNode&lt;/a&gt; y ver cómo lanzo los test en &lt;a href="https://github.com/ajlopez/AjGenesisNode/blob/master/package.json"&gt;el package.json&lt;/a&gt; (de forma multiplataforma) gracias al script &lt;a href="https://github.com/ajlopez/AjGenesisNode/blob/master/test.js"&gt;test.js&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;- &lt;a href="https://github.com/caolan/nodeunit"&gt;Nodeunit&lt;/a&gt;, cuando necesito tests con asincronía. Ver &lt;a href="https://github.com/ajlopez/SimpleActors"&gt;SimpleActors&lt;/a&gt; y &lt;a href="https://github.com/ajlopez/SimpleMessages"&gt;SimpleMessages&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Tercero: cualquier editor de texto con el que estén cómodos.&lt;/p&gt;  &lt;p&gt;Cuarto: &lt;a href="https://github.com/ajlopez"&gt;una cuenta en GitHub&lt;/a&gt; para ir publicando pruebas, experimentos, pequeños ejemplos y mis primeros paquetes. Si el proyecto es un paquete, armo el package.json. Cada proyecto tienen un .gitignore, en general para no enviar el subdirectorio node_modules, de los módulos que uso, y un .npmignore que suele agregar como excluido al directorio samples&lt;/p&gt;  &lt;p&gt;Lo importante no es tener tanto tooling como seguir bien TDD. Como voy desarrollando por “baby steps” casi nunca tengo que recurrir a depurar. Cualquier error de escritura de código, aparece enseguida con el test. Trato de no agregar línea que no tenga cubierta por test. Pueden revisar los commits de mis proyectos, he tratado de hacer commits atómicos que reflejen el agregado de tests y su puesta en verde.&lt;/p&gt;  &lt;p&gt;Eso me ha servido para encarar refactoring, tanto pequeño como grande. Por ejemplo, ayer hice refactoring de la implementación interna de &lt;a href="https://github.com/ajlopez/SimpleRemote"&gt;SimpleRemote&lt;/a&gt; y gracias a los tests no tuve mayor problema: cualquier error, quedaba reflejado en algún test que fallaba, y cuando lo solucionaba, el test pasaba a verde.&lt;/p&gt;  &lt;p&gt;La combinación Javascript y Node.js es muy potente: por un lado, Javascript es un lenguaje con bajísima ceremonia (menos aún que Ruby, por comparar). Y Node.js tiene un excelente ecosistema de paquetes, y un manejador de los mismos (el npm) que debe ser el mejor que encontré hasta ahora.&lt;/p&gt;  &lt;p&gt;Próximos post: ¿cómo es Node.js? ¿qué tiene de particular? ¿qué es V8? etc…&lt;/p&gt;  &lt;p&gt;Nos leemos!&lt;/p&gt;  &lt;p&gt;Angel “Java” Lopez   &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://twitter.com/ajlopez"&gt;http://twitter.com/ajlopez&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1810907" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lopez/archive/tags/TDD/default.aspx">TDD</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Programaci_F300_n/default.aspx">Programación</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Proyectos+de+C_26002300_243_3B00_digo+Abierto/default.aspx">Proyectos de C&amp;#243;digo Abierto</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/NodeJs/default.aspx">NodeJs</category></item></channel></rss>