<?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 : COBOL, Proyectos de C&amp;#243;digo Abierto</title><link>http://msmvps.com/blogs/lopez/archive/tags/COBOL/Proyectos+de+C_26002300_243_3B00_digo+Abierto/default.aspx</link><description>Tags: COBOL, Proyectos de C&amp;#243;digo Abierto</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>CobolScript (4) Páginas Web con Plantillas, en Node.js</title><link>http://msmvps.com/blogs/lopez/archive/2013/01/21/cobolscript-4-p-225-ginas-web-con-plantillas-en-node-js.aspx</link><pubDate>Mon, 21 Jan 2013 17:10:44 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1822948</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=1822948</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2013/01/21/cobolscript-4-p-225-ginas-web-con-plantillas-en-node-js.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/12/30/cobolscript_2D00_3_2D00_templates.aspx"&gt;Anterior Post&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En el anterior post mostré a CobolScript generando salida basada en plantillas. Hoy quiero mostrar que eso se puede usar para generar páginas web. El ejemplo está en:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://github.com/ajlopez/CobolScript/tree/master/samples/templateweb" href="https://github.com/ajlopez/CobolScript/tree/master/samples/templateweb"&gt;https://github.com/ajlopez/CobolScript/tree/master/samples/templateweb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El programa a ejecutar es simple:&lt;/p&gt;  &lt;pre style="background-color:black;color:white;font-size:12pt;"&gt;&lt;span style="color:orange;"&gt;var&lt;/span&gt; cobs = require&lt;span style="color:cyan;"&gt;(&lt;/span&gt;&lt;span style="color:lightgreen;"&gt;&amp;#39;../..&amp;#39;&lt;/span&gt;&lt;span style="color:cyan;"&gt;),&lt;/span&gt;
    http = require&lt;span style="color:cyan;"&gt;(&lt;/span&gt;&lt;span style="color:lightgreen;"&gt;&amp;#39;http&amp;#39;&lt;/span&gt;&lt;span style="color:cyan;"&gt;),&lt;/span&gt;
    fs = require&lt;span style="color:cyan;"&gt;(&lt;/span&gt;&lt;span style="color:lightgreen;"&gt;&amp;#39;fs&amp;#39;&lt;/span&gt;&lt;span style="color:cyan;"&gt;);&lt;/span&gt;

&lt;span style="color:orange;"&gt;var&lt;/span&gt; program = cobs.compileTemplateFile&lt;span style="color:cyan;"&gt;(&lt;/span&gt;&lt;span style="color:lightgreen;"&gt;&amp;#39;./factorial.cobp&amp;#39;&lt;/span&gt;&lt;span style="color:cyan;"&gt;);&lt;/span&gt;

http.createServer&lt;span style="color:cyan;"&gt;(&lt;/span&gt;&lt;span style="color:orange;"&gt;function&lt;/span&gt;&lt;span style="color:cyan;"&gt;(&lt;/span&gt;req&lt;span style="color:cyan;"&gt;,&lt;/span&gt; res&lt;span style="color:cyan;"&gt;)&lt;/span&gt; &lt;span style="color:cyan;"&gt;{&lt;/span&gt;
    program.run&lt;span style="color:cyan;"&gt;(&lt;/span&gt;cobs.getRuntime&lt;span style="color:cyan;"&gt;({&lt;/span&gt; request: req&lt;span style="color:cyan;"&gt;,&lt;/span&gt; response: res &lt;span style="color:cyan;"&gt;}));&lt;/span&gt;
&lt;span style="color:cyan;"&gt;})&lt;/span&gt;.listen&lt;span style="color:cyan;"&gt;(&lt;/span&gt;8000&lt;span style="color:cyan;"&gt;);&lt;/span&gt;

console.log&lt;span style="color:cyan;"&gt;(&lt;/span&gt;&lt;span style="color:lightgreen;"&gt;&amp;#39;Server started, listening at port 8000&amp;#39;&lt;/span&gt;&lt;span style="color:cyan;"&gt;);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;La parte clave es la llamada a compilar el archivo de plantilla. Esto produce una función JavaScript ya compilada, que puede invocarse varias veces. El llamado program.run ejecuta la plantilla ya compilada, dado un contexto de ejecución (“runtime context”). Ese contexto es armado en cada pedido web, dándole los objectos request y response de ese pedido. El contexto se arma internamente, de manera tal que toda la salida producida por el programa CobolScript se deriva a la salida del response. De esta manera, el programa no sabe nada de web, sólo genera texto. Podemos ver a este contexto de ejecución como un proveedor de servicios para el programa CobolScript. Sus propiedades pueden ser accedidas si definimos una LINKAGE SECTION como en COBOL clásico. Pero eso sería tema para otro post. Ese acceso no fue necesario en este simple ejemplo.&lt;/p&gt;

&lt;p&gt;El archivo de plantilla contiene:&lt;/p&gt;

&lt;pre style="background-color:black;color:white;font-size:12pt;"&gt;&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;h1&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;Factorial&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;/h1&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;p&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;Page generated &lt;span style="color:orange;"&gt;by&lt;/span&gt; CobolScript&lt;span style="color:cyan;"&gt;,&lt;/span&gt; &lt;span style="color:orange;"&gt;using&lt;/span&gt; templates&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;/p&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;table&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;tr&lt;span style="color:cyan;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;th align=&lt;span style="color:cyan;"&gt;&amp;#39;&lt;/span&gt;right&lt;span style="color:cyan;"&gt;&amp;#39;&amp;gt;&lt;/span&gt;n&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;/th&lt;span style="color:cyan;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;th align=&lt;span style="color:cyan;"&gt;&amp;#39;&lt;/span&gt;right&lt;span style="color:cyan;"&gt;&amp;#39;&amp;gt;&lt;/span&gt;n&lt;span style="color:cyan;"&gt;!
&amp;lt;&lt;/span&gt;/th&lt;span style="color:cyan;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;/tr&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;#&lt;/span&gt;
&lt;span style="color:orange;"&gt;local&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; show-factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; n &lt;span style="color:orange;"&gt;varying&lt;/span&gt; n &lt;span style="color:orange;"&gt;from&lt;/span&gt; 1 &lt;span style="color:orange;"&gt;to&lt;/span&gt; 10.
&lt;span style="color:cyan;"&gt;#&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;/table&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;#&lt;/span&gt;
.
stop run.

show-factorial &lt;span style="color:orange;"&gt;section&lt;/span&gt; &lt;span style="color:orange;"&gt;using&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;local&lt;/span&gt; result.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; n &lt;span style="color:orange;"&gt;giving&lt;/span&gt; result.
&lt;span style="color:cyan;"&gt;#&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;&lt;/span&gt;tr&lt;span style="color:cyan;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;td align=&lt;span style="color:cyan;"&gt;&amp;#39;&lt;/span&gt;right&lt;span style="color:cyan;"&gt;&amp;#39;&amp;gt;${&lt;/span&gt;n&lt;span style="color:cyan;"&gt;}&amp;lt;&lt;/span&gt;/td&lt;span style="color:cyan;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;td align=&lt;span style="color:cyan;"&gt;&amp;#39;&lt;/span&gt;right&lt;span style="color:cyan;"&gt;&amp;#39;&amp;gt;${&lt;/span&gt;result&lt;span style="color:cyan;"&gt;}
&amp;lt;&lt;/span&gt;/td&lt;span style="color:cyan;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;/tr&lt;span style="color:cyan;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;#&lt;/span&gt;
.

factorial &lt;span style="color:orange;"&gt;section&lt;/span&gt; &lt;span style="color:orange;"&gt;using&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;local&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;if&lt;/span&gt; n = 1 &lt;span style="color:orange;"&gt;then&lt;/span&gt; &lt;span style="color:orange;"&gt;return&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;subtract&lt;/span&gt; 1 &lt;span style="color:orange;"&gt;from&lt;/span&gt; n &lt;span style="color:orange;"&gt;giving&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; m &lt;span style="color:orange;"&gt;giving&lt;/span&gt; m.
multiply n &lt;span style="color:orange;"&gt;by&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;return&lt;/span&gt; m.
&lt;span style="color:cyan;"&gt;#&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Lanzamos el servidor con la línea de comando:&lt;/p&gt;

&lt;p&gt;node server&lt;/p&gt;

&lt;p&gt;Luego, navegar a localhost:8000, para obtener el resultado:&lt;/p&gt;

&lt;p&gt;&lt;img src="https://raw.github.com/ajlopez/CobolScript/master/images/templateweb.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;Próximo post: un sitio web dinámico, escrito en CobolScript, ejecutando sobre Node.js, accediendo a una base de datos MySQL.&lt;/p&gt;

&lt;p&gt;Nos leemos!&lt;/p&gt;

&lt;p&gt;Angel “Java” Lopez 
  &lt;br /&gt;

  &lt;br /&gt;&lt;a href="http://www.ajlopez.com"&gt;http://www.ajlopez.com&lt;/a&gt;&lt;/p&gt;

&lt;p&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=1822948" width="1" height="1"&gt;</description><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/Desarrollo+Web/default.aspx">Desarrollo Web</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/COBOL/default.aspx">COBOL</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/CobolScript/default.aspx">CobolScript</category></item><item><title>Code Katas en JavaScript/Node.js usando TDD</title><link>http://msmvps.com/blogs/lopez/archive/2013/01/14/code_2D00_katas_2D00_in_2D00_javascriptnode_2D00_js_2D00_using_2D00_tdd.aspx</link><pubDate>Mon, 14 Jan 2013 09:23:26 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1822588</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=1822588</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2013/01/14/code_2D00_katas_2D00_in_2D00_javascriptnode_2D00_js_2D00_using_2D00_tdd.aspx#comments</comments><description>&lt;p&gt;En estas semanas pasadas, he estado trabajando en ejemplos y módulos JavaScript/Node.js, usando TDD en cada paso. Practicar, practicar, practicar, el camino a la maestría.&lt;/p&gt;  &lt;p&gt;Pueden ver mi progreso y revisar los commits que hago ante cada test. Lo que sigue es un resumen de este trabajo:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/CobolScript"&gt;CobolScript&lt;/a&gt;: &lt;a href="http://msmvps.com/blogs/lopez/archive/tags/COBOL/default.aspx"&gt;Ver mis posts&lt;/a&gt; un implementación de compilador de COBOL a JavaScript, con ejemplos de consola &lt;a href="https://github.com/ajlopez/SimpleWeb/tree/master/samples/customers"&gt; ejemplo web&lt;/a&gt;, usando MySQL y &lt;a href="http://github.com/ajlopez/SimpleWeb"&gt;SimpleWeb&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://ajlopez.com/images/articles2/cobs09.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimplePipes"&gt;SimplePipes&lt;/a&gt;: Una manera de definir pasaje de mensajes usando ‘pipes’ para conectar diferentes nodes/funciones en un grafo. Quiero extenderlo para que tenga proceso distribuido.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleBoggle"&gt;SimpleBoggle&lt;/a&gt;: Un programa que resuelve &lt;a href="http://en.wikipedia.org/wiki/Boggle"&gt;un tablero de Boggle&lt;/a&gt;, juega mejor que yo! Ver &lt;a href="https://github.com/ajlopez/SimpleBoggle/tree/master/samples/findwords"&gt;ejemplo de consola&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleMemolap"&gt;SimpleMemolap&lt;/a&gt;: procesamiento tipo OLAP multidimensional, pero usando un modelo en memoria. Hay &lt;a href="https://github.com/ajlopez/SimpleWeb/tree/master/samples/customers"&gt;ejemplo web&lt;/a&gt; que usa mi &lt;a href="https://github.com/ajlopez/SimpleWeb"&gt;SimpleWeb&lt;/a&gt; (“dog fooding”):&lt;/p&gt;  &lt;p&gt;&lt;img src="http://ajlopez.com/images/articles2/smemo02.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleChess"&gt;SimpleChess&lt;/a&gt;: En progreso, define un tablero usando &lt;a href="https://github.com/ajlopez/SimpleBoard"&gt;SimpleBoard&lt;/a&gt;, y ya calcula movidas. Estoy también trabajando en &lt;a href="https://github.com/ajlopez/SimpleGo"&gt;SimpleGo&lt;/a&gt;, para tener un tablero, un juego y evaluadores.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleRules"&gt;SimpleRules&lt;/a&gt;: Motor de reglas&amp;#160; “forward-chaining”, hacia adelante (ahora que está de nuevo “de moda” la programación reactiva. Trabaja inspirada en algoritmo RETE-2, detectando los cambios de estado para disparar las acciones apropiadas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://api.viglink.com/api/click?format=go&amp;amp;key=cdee124b11d6baacda6c3e29b12e23dc&amp;amp;loc=http%3A%2F%2Fajlopez.wordpress.com%2F&amp;amp;v=1&amp;amp;libid=1358011009888&amp;amp;out=https%3A%2F%2Fgithub.com%2Fajlopez%2FSimpleScript&amp;amp;title=Angel%20%5C%E2%80%9DJava%5C%E2%80%9D%20Lopez%20on%20Blog&amp;amp;txt=repo&amp;amp;jsonp=vglnk_jsonp_13580115836212"&gt;SimpleScript&lt;/a&gt;: Ver &lt;a href="http://msmvps.com/blogs/lopez/archive/2013/01/03/simplescript-1-primeras-ideas.aspx"&gt;mi post&lt;/a&gt; con las primeras ideas sobre este lenguaje, que compila a JavaScript, trabajo en progreso.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/Py2Script"&gt;Py2Script&lt;/a&gt;: Compilador de Python a JavaScript, primeros pasos.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleWeb"&gt;SimpleWeb&lt;/a&gt;: Una capa de “middleware”, a la Connect, con un ejemplo web:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://ajlopez.com/images/articles2/simpleweb02.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/BasicScript"&gt;BasicScript&lt;/a&gt;: Mis primeros pasos para compilar Basic a JavaScript. Quiero usarlo como lenguaje de programación para juegos en el browser.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimplePermissions"&gt;SimplePermissions&lt;/a&gt;: El code kata de este sábado a la mañana ;-). Implementa Sujetos (Subjects), roles, permisos, otorgados en contexto.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleFunc"&gt;SimpleFunc&lt;/a&gt;: Serialización/Deserialización de funciones y objectos con funciones.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleMapReduce"&gt;SimpleMapReduce&lt;/a&gt;: Explorando la implementación del algoritmo Map-Reduce (y una variante, que llamo Map-Process) tanto sincrónico como asincrónico.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleTuring"&gt;SimpleTuring&lt;/a&gt;: Implementación de una máquina de Turing.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/Cellular"&gt;Cellular&lt;/a&gt;: Implementación de autómatas de estado, lineales o de otras dimensiaones. Incluye un ejemplo de &lt;a href="https://github.com/ajlopez/Cellular/tree/master/samples/life"&gt;juego de la vida en consola&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Y en estos dos días pasados, agregué:&lt;/p&gt;  &lt;p&gt;&lt;a&gt;NodeDelicious&lt;/a&gt;: Para recuperar mis enlaces desde la cuenta de Delicious (sin tener que lidiar con el XML que devuelve directamente la API), ahora que el sitio ha sido rediseñado y no tiene paginación. La gente de Delicious sigue pensando que uno usa los enlaces como un feed (que lo viejo se pierde), pero no, muchos usamos a Delicious como un “Mis favoritos” en la nube y queremos acceder por rango de tiempo.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleSudoku"&gt;SimpleSudoku&lt;/a&gt;: Una reescritura desde 0, con TDD, de mi anterior AjSudoku, resuelve tableros de Sudoku.&lt;/p&gt;  &lt;p&gt;Tengo que trabajar en:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://github.com/ajlopez/SimpleDatabase"&gt;SimpleDatabase&lt;/a&gt;: Base de datos en memoria, puede que en algún momento le agregue persistencia en archivos.&lt;/p&gt;  &lt;p&gt;Y como siempre, todo esto es muy divertido ;-)&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=1822588" width="1" height="1"&gt;</description><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/TDD/default.aspx">TDD</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Code+Katas/default.aspx">Code Katas</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/COBOL/default.aspx">COBOL</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Compilador/default.aspx">Compilador</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/CobolScript/default.aspx">CobolScript</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/MapReduce/default.aspx">MapReduce</category></item><item><title>CobolScript (3) Plantillas</title><link>http://msmvps.com/blogs/lopez/archive/2012/12/30/cobolscript_2D00_3_2D00_templates.aspx</link><pubDate>Sun, 30 Dec 2012 16:22:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821809</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=1821809</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/12/30/cobolscript_2D00_3_2D00_templates.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/12/25/cobolscript_2D00_2_2D00_first_2D00_factorial_2D00_function.aspx"&gt;Anterior Post&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2013/01/21/cobolscript-4-p-225-ginas-web-con-plantillas-en-node-js.aspx"&gt;Siguiente Post&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Me gusta tener un motor de plantillas en los lenguajes que implemento, as&amp;iacute; que agregu&amp;eacute; uno a mi proyecto de c&amp;oacute;digo abierto CobolScript, un compilador COBOL a JavaScript. El primer ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ajlopez/CobolScript/tree/master/samples/template" title="https://github.com/ajlopez/CobolScript/tree/master/samples/template"&gt;https://github.com/ajlopez/CobolScript/tree/master/samples/template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;El c&amp;oacute;digo:&lt;/p&gt;
&lt;pre style="background-color:black;max-width:600px;color:white;font-size:12pt;"&gt;&lt;span style="color:cyan;"&gt;&amp;lt;#&lt;/span&gt;
&lt;span style="color:orange;"&gt;data&lt;/span&gt; &lt;span style="color:orange;"&gt;division&lt;/span&gt;.
&lt;span style="color:orange;"&gt;working&lt;/span&gt;-&lt;span style="color:orange;"&gt;storage&lt;/span&gt; &lt;span style="color:orange;"&gt;section&lt;/span&gt;.
01 n.

&lt;span style="color:orange;"&gt;procedure&lt;/span&gt; &lt;span style="color:orange;"&gt;division&lt;/span&gt;.
&lt;span style="color:cyan;"&gt;#&amp;gt;&lt;/span&gt;
Factorial
---------

&lt;span style="color:cyan;"&gt;&amp;lt;#&lt;/span&gt;
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; show-factorial &lt;span style="color:orange;"&gt;varying&lt;/span&gt; n &lt;span style="color:orange;"&gt;from&lt;/span&gt; 1 &lt;span style="color:orange;"&gt;to&lt;/span&gt; 10.

show-factorial.
&lt;span style="color:orange;"&gt;local&lt;/span&gt; result.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; n &lt;span style="color:orange;"&gt;giving&lt;/span&gt; result.
&lt;span style="color:cyan;"&gt;#&amp;gt;&lt;/span&gt;
&lt;span style="color:cyan;"&gt;${&lt;/span&gt;n&lt;span style="color:cyan;"&gt;}!&lt;/span&gt;= &lt;span style="color:cyan;"&gt;${&lt;/span&gt;result&lt;span style="color:cyan;"&gt;}&lt;/span&gt;
&lt;span style="color:cyan;"&gt;&amp;lt;#&lt;/span&gt;
.
factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;local&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;if&lt;/span&gt; n = 1 &lt;span style="color:orange;"&gt;then&lt;/span&gt; &lt;span style="color:orange;"&gt;return&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;subtract&lt;/span&gt; 1 &lt;span style="color:orange;"&gt;from&lt;/span&gt; n &lt;span style="color:orange;"&gt;giving&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; m &lt;span style="color:orange;"&gt;giving&lt;/span&gt; m.
multiply n &lt;span style="color:orange;"&gt;by&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;return&lt;/span&gt; m.
&lt;span style="color:cyan;"&gt;#&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;El archivo plantilla es compilado a COBOL transformando cada texto en un comando DISPLAY &amp;hellip; WITH NO ADVANCING (los saltos de l&amp;iacute;nea ya est&amp;aacute;n en el texto). El c&amp;oacute;digo entre &amp;lt;# y #&amp;gt; se copia tal cual en el programa COBOL. Cada expresi&amp;oacute;n entre ${ y } se expande como otro par&amp;aacute;metro al comando DISPLAY. Entonces, luego de compilar todo el texto a COBOL, CobolScript compila el resultado a JavaScript. La sintaxis de la plantillas es, entonces, una especie de &amp;ldquo;syntax sugar&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;La salida del programa anterior:&lt;/p&gt;
&lt;pre style="background-color:black;max-width:600px;color:white;font-size:12pt;"&gt;Factorial
---------

1!= 1
2!= 2
3!= 6
4!= 24
5!= 120
6!= 720
7!= 5040
8!= 40320
9!= 362880
10!= 3628800&lt;/pre&gt;
&lt;p&gt;Podr&amp;iacute;a usar las plantillas para generar archivos de texto, y entonces, implementar generaci&amp;oacute;n de c&amp;oacute;digo en CobolScript, as&amp;iacute; como lo hice en AjGenesis (tanto en la variante cl&amp;aacute;sica en .NET, como en Ruby o JavaScript/NodeJs). Antes de eso, ya tengo una implementaci&amp;oacute;n de p&amp;aacute;ginas din&amp;aacute;micas basadas en este motor de plantillas (s&amp;iacute;, p&amp;aacute;ginas din&amp;aacute;micas en CobolScript, cosas vederes Sancho ;-). Pero es tema para otro post.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; 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=1821809" width="1" height="1"&gt;</description><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/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/COBOL/default.aspx">COBOL</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/CobolScript/default.aspx">CobolScript</category></item><item><title>CobolScript (2) Primera Función, Factorial</title><link>http://msmvps.com/blogs/lopez/archive/2012/12/25/cobolscript_2D00_2_2D00_first_2D00_factorial_2D00_function.aspx</link><pubDate>Tue, 25 Dec 2012 12:52:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821581</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=1821581</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/12/25/cobolscript_2D00_2_2D00_first_2D00_factorial_2D00_function.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/12/23/cobolscript_2D00_1_2D00_cobol_2D00_compiler_2D00_to_2D00_javascriptnode_2D00_js.aspx"&gt;Anterior Post&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/12/30/cobolscript_2D00_3_2D00_templates.aspx"&gt;Siguiente Post&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;JavaScript es manteca en mis manos ;-). Estuve trabajando en mi proyecto CobolScript, compiladr de COBOL a JavaScript, que puede ejecutarse en el navegador o en Node.js.&lt;/p&gt;
&lt;p&gt;Agregu&amp;eacute; soporte de funciones definidaspor el usuario, con par&amp;aacute;metros, argumentos a pasar, y hasta variables locales. El primer ejemplo fue el cl&amp;aacute;sico factorial recursivo:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ajlopez/CobolScript/blob/master/samples/factorial/factorial.cob" title="https://github.com/ajlopez/CobolScript/blob/master/samples/factorial/factorial.cob"&gt;https://github.com/ajlopez/CobolScript/blob/master/samples/factorial/factorial.cob&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pueden ejecutarlo en ese directorio, con la l&amp;iacute;nea de comando:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;node run factorial.cob&lt;/span&gt;&lt;/p&gt;
&lt;pre style="background-color:black;color:white;font-size:12pt;"&gt;&lt;span style="color:orange;"&gt;data&lt;/span&gt; &lt;span style="color:orange;"&gt;division&lt;/span&gt;.
&lt;span style="color:orange;"&gt;working&lt;/span&gt;-&lt;span style="color:orange;"&gt;storage&lt;/span&gt; &lt;span style="color:orange;"&gt;section&lt;/span&gt;.
01 n.

&lt;span style="color:orange;"&gt;procedure&lt;/span&gt; &lt;span style="color:orange;"&gt;division&lt;/span&gt;.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; show-factorial &lt;span style="color:orange;"&gt;varying&lt;/span&gt; n &lt;span style="color:orange;"&gt;from&lt;/span&gt; 1 &lt;span style="color:orange;"&gt;to&lt;/span&gt; 10.

show-factorial &lt;span style="color:orange;"&gt;local&lt;/span&gt; result.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; n &lt;span style="color:orange;"&gt;giving&lt;/span&gt; result.
&lt;span style="color:orange;"&gt;display&lt;/span&gt; n &lt;span style="color:lightgreen;"&gt;&amp;quot;! = &amp;quot;&lt;/span&gt; result.

factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; n &lt;span style="color:orange;"&gt;local&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;if&lt;/span&gt; n = 1 &lt;span style="color:orange;"&gt;then&lt;/span&gt; &lt;span style="color:orange;"&gt;return&lt;/span&gt; n.
&lt;span style="color:orange;"&gt;subtract&lt;/span&gt; 1 &lt;span style="color:orange;"&gt;from&lt;/span&gt; n &lt;span style="color:orange;"&gt;giving&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;perform&lt;/span&gt; factorial &lt;span style="color:orange;"&gt;using&lt;/span&gt; m &lt;span style="color:orange;"&gt;giving&lt;/span&gt; m.
multiply n &lt;span style="color:orange;"&gt;by&lt;/span&gt; m.
&lt;span style="color:orange;"&gt;return&lt;/span&gt; m.&lt;/pre&gt;
&lt;p&gt;Le agregu&amp;eacute; nueva sintaxis:&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;perform&lt;/strong&gt; &amp;hellip; &lt;strong&gt;using&lt;/strong&gt; &amp;hellip; Para llamar a un procedimiento local pasando argumentos.&lt;/p&gt;
&lt;p&gt;- &amp;lt;&lt;strong&gt;proc&lt;/strong&gt;&amp;gt; &lt;strong&gt;using&lt;/strong&gt; &amp;hellip;&amp;nbsp; El procedimiento declara sus argumentos.&lt;/p&gt;
&lt;p&gt;- &amp;lt;&lt;strong&gt;proc&lt;/strong&gt;&amp;gt; &lt;strong&gt;local&lt;/strong&gt;(&lt;strong&gt;s&lt;/strong&gt;) &amp;hellip; El procedimiento declara sus variables locales (&lt;strong&gt;actualizaci&amp;oacute;n&lt;/strong&gt;: removido, ahora hay comando&lt;strong&gt; local(s)&amp;hellip;&lt;/strong&gt; directamente en el c&amp;oacute;digo del procedimiento).&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;perform&lt;/strong&gt; &amp;hellip; &lt;strong&gt;giving&lt;/strong&gt; &amp;lt;&lt;strong&gt;var&lt;/strong&gt;&amp;gt;&amp;hellip;&amp;nbsp; Puedo especificar que el valor de retorno del procedimiento (internamente, es una funci&amp;oacute;n JavaScript) sea guardado en una o varias variables.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;return&lt;/strong&gt; (&lt;strong&gt;expr&lt;/strong&gt;)&amp;nbsp; El procedimiento puede retornar en cualquier momento, con un resultado opcional. Me falta implementar el cl&amp;aacute;sico &lt;strong&gt;exit&lt;/strong&gt; de COBOL.&lt;/p&gt;
&lt;p&gt;Le agregu&amp;eacute; soporte de plantillas, p&amp;aacute;ginas web din&amp;aacute;micas, y acceso a objetos JavaScript/Node.js nativos. Pero eso ya es tema para otro post.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; 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=1821581" width="1" height="1"&gt;</description><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/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/COBOL/default.aspx">COBOL</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Compilador/default.aspx">Compilador</category></item><item><title>CobolScript (1) Compilador COBOL a JavaScript/Node.js</title><link>http://msmvps.com/blogs/lopez/archive/2012/12/23/cobolscript_2D00_1_2D00_cobol_2D00_compiler_2D00_to_2D00_javascriptnode_2D00_js.aspx</link><pubDate>Sun, 23 Dec 2012 15:16:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1821478</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=1821478</wfw:commentRss><comments>http://msmvps.com/blogs/lopez/archive/2012/12/23/cobolscript_2D00_1_2D00_cobol_2D00_compiler_2D00_to_2D00_javascriptnode_2D00_js.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msmvps.com/blogs/lopez/archive/2012/12/25/cobolscript_2D00_2_2D00_first_2D00_factorial_2D00_function.aspx"&gt;Siguiente Post&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ayer, comenc&amp;eacute; un nuevo proyecto en mi cuenta de GitHub:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ajlopez/CobolScript" title="https://github.com/ajlopez/CobolScript"&gt;https://github.com/ajlopez/CobolScript&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Es un compilador que lee COBOL y compila a JavaScript. Es un &amp;ldquo;work in progress&amp;rdquo;, pero el cl&amp;aacute;sico &amp;ldquo;Hello, world&amp;rdquo; est&amp;aacute; ya corriendo:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ajlopez/CobolScript/blob/master/samples/hello/hello.cobs" title="https://github.com/ajlopez/CobolScript/blob/master/samples/hello/hello.cobs"&gt;https://github.com/ajlopez/CobolScript/blob/master/samples/hello/hello.cobs&lt;/a&gt;&lt;/p&gt;
&lt;pre style="background-color:black;color:white;font-size:12pt;"&gt;&lt;span style="color:orange;"&gt;DISPLAY&lt;/span&gt; &lt;span style="color:lightgreen;"&gt;&amp;quot;HELLO, WORLD&amp;quot;&lt;/span&gt;.&lt;/pre&gt;
&lt;p&gt;Lo pueden ejecutar escribiendo desde ese directorio en la l&amp;iacute;nea de comando:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;node run hello.cobs&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Un ejemplo m&amp;aacute;s completo:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ajlopez/CobolScript/blob/master/samples/hellopgm/hello.cob" title="https://github.com/ajlopez/CobolScript/blob/master/samples/hellopgm/hello.cob"&gt;https://github.com/ajlopez/CobolScript/blob/master/samples/hellopgm/hello.cob&lt;/a&gt;&lt;/p&gt;
&lt;pre style="background-color:black;color:white;font-size:12pt;"&gt;&lt;span style="color:orange;"&gt;IDENTIFICATION&lt;/span&gt; &lt;span style="color:orange;"&gt;DIVISION&lt;/span&gt;.
    &lt;span style="color:orange;"&gt;PROGRAM&lt;/span&gt;-&lt;span style="color:orange;"&gt;ID&lt;/span&gt;. HELLO.
    &lt;span style="color:orange;"&gt;AUTHOR&lt;/span&gt;. A.J.LOPEZ.
    &lt;span style="color:orange;"&gt;INSTALLATION&lt;/span&gt;. TEST.
    &lt;span style="color:orange;"&gt;DATE&lt;/span&gt;-&lt;span style="color:orange;"&gt;WRITTEN&lt;/span&gt;. 2012-12-22.
    &lt;span style="color:orange;"&gt;DATE&lt;/span&gt;-&lt;span style="color:orange;"&gt;COMPILED&lt;/span&gt;. 2012-12-22.
&lt;span style="color:orange;"&gt;ENVIRONMENT&lt;/span&gt; &lt;span style="color:orange;"&gt;DIVISION&lt;/span&gt;.
    &lt;span style="color:orange;"&gt;CONFIGURATION&lt;/span&gt; &lt;span style="color:orange;"&gt;SECTION&lt;/span&gt;.
        &lt;span style="color:orange;"&gt;SOURCE&lt;/span&gt;-&lt;span style="color:orange;"&gt;COMPUTER&lt;/span&gt;. NODE.
        &lt;span style="color:orange;"&gt;OBJECT&lt;/span&gt;-&lt;span style="color:orange;"&gt;COMPUTER&lt;/span&gt;. NODE.
&lt;span style="color:orange;"&gt;DATA&lt;/span&gt; &lt;span style="color:orange;"&gt;DIVISION&lt;/span&gt;.
&lt;span style="color:orange;"&gt;PROCEDURE&lt;/span&gt; &lt;span style="color:orange;"&gt;DIVISION&lt;/span&gt;.
    &lt;span style="color:orange;"&gt;DISPLAY&lt;/span&gt; &lt;span style="color:lightgreen;"&gt;&amp;quot;HELLO, WORLD&amp;quot;&lt;/span&gt;.&lt;/pre&gt;
&lt;p&gt;Ejecutemos en ese directorio:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;node run hello.cob&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Actualizaci&amp;oacute;n: pas&amp;eacute; los ejemplos de arriba a min&amp;uacute;sculas. Me comentaron que los COBOL modernos aceptan may&amp;uacute;sculas y min&amp;uacute;sculas, as&amp;iacute; que voy a tratar de seguir escribiendo ejemplos pero en min&amp;uacute;sculas.&lt;/p&gt;
&lt;p&gt;Hoy sigo con este trabajo, implementando variantes de verbos como move, add, subtract, etc.. todo escrito usando TDD (Test-Driven Development). Tengo varias cosas que agregar como soporte de formato en los items (&amp;ldquo;picture&amp;rdquo;), la file section, y en alg&amp;uacute;n momento, quiero agregar comandos SQL. Tambi&amp;eacute;n pienso poner p&amp;aacute;ginas din&amp;aacute;micas ejecutadas en un servidor web soportado por Node.js. El c&amp;oacute;digo est&amp;aacute; armado de forma tal que tambi&amp;eacute;n pueda ejecutarse en el navegador.&lt;/p&gt;
&lt;p&gt;Nos leemos!&lt;/p&gt;
&lt;p&gt;Angel &amp;ldquo;Java&amp;rdquo; 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=1821478" width="1" height="1"&gt;</description><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/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/COBOL/default.aspx">COBOL</category><category domain="http://msmvps.com/blogs/lopez/archive/tags/Compilador/default.aspx">Compilador</category></item></channel></rss>