<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/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/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>Lucas Ontivero : Languages, Desarrollo, Dise&amp;#241;o</title><link>http://geeks.ms/blogs/lontivero/archive/tags/Languages/Desarrollo/Dise_26002300_241_3B00_o/default.aspx</link><description>Etiquetas: Languages, Desarrollo, Dise&amp;#241;o</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Design patterns in the test of time: VISITOR</title><link>http://geeks.ms/blogs/lontivero/archive/2012/10/30/design-patterns-in-the-test-of-time-visitor.aspx</link><pubDate>Tue, 30 Oct 2012 04:46:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:207265</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=207265</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=207265</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2012/10/30/design-patterns-in-the-test-of-time-visitor.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://ayende.com/blog/" target="_blank"&gt;@Ayende&lt;/a&gt; ha comenzado una &lt;a href="http://ayende.com/blog/tags/design-patterns-test-of-time" target="_blank"&gt;serie de post en lo que revisa algunos patrones de diseño&lt;/a&gt; (Go4) luego de transcurridos más de 18 años desde su formalización en el libro &lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612" target="_blank"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;.&amp;#160; Inspirado por esa serie, y por el hecho de que en mi última entrevista laboral me preguntaron sobre esto,&amp;#160; voy a presentar una revisión sobre el patrón visitor.&lt;/p&gt;  &lt;h1&gt;&amp;#160;&lt;/h1&gt;  &lt;h1&gt;Visitor en su forma clásica&lt;/h1&gt;  &lt;p&gt;La motivación detrás de este patrón es poder añadir funcionalidad a una estructura de datos sin necesidad de modificar las clases que conforman esa estructura. En otras palabras: separar las estructuras de datos de aquellos algoritmos que operan sobre ellas. Si vamos a la Wikipedia vamos a ver este diagrama:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/5/59/VisitorPatternUML.png" width="640" height="366" alt="" /&gt;    &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cffd77cf-ec12-4d23-9593-d382195dca33" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Design" rel="tag"&gt;Design&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Pattern" rel="tag"&gt;Pattern&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visitor" rel="tag"&gt;Visitor&lt;/a&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;Como se ve, tiene referencias cíclicas, es decir, todos los CarElements deben implementar un método accept que recibe una referencia a un CarElementVisitor y todo CarElementVisitor matiene referencias a todos los tipos que implementan la interface CarElement. Esto es porque C# (el diagrama usa java) no posibilida doble dispatch y así, mediante estas referencias cíclicas es cómo se logra simularla.&lt;/p&gt;  &lt;p&gt;Aparte del fuertísimo acoplamiento al que nos fuerza, tiene el inconveniente de ser un patrón que agrega bastante complejidad y que es poco legible debido a su “extraña” sintaxis. Así, si tuviésemos un AST y quisiésemos volverlo código mediante un visitor, nuestro código se vería así:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_1506DE1F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_10CCE08D.png" width="401" height="31" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pero si tratamos de seguir este código, y vamos directamente a la implementación de este método ‘Accept’ nos encontraremos con esto:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_16A78426.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_7B8EB517.png" width="401" height="74" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y por último, si nos salteamos la abstracción IVisitor y vamos directamente a la implementación del método Visit del PrinterVisitor, nos encontramos con esto otro:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_0573A683.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_2AFD23E4.png" width="401" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Si no conoces el patrón, posiblemente no comprendas este código (y tengamos en cuenta que nos hemos salteado las abstracciones!). Pero el motivo más frecuente por el que no se entiende, si es ese el caso, es porque es complejo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Visitor alternativo&lt;/h1&gt;  &lt;p&gt;La propuesta que dejo no es mia, ni es nueva. Esta es una implementación muy popular en lenguajes dinámicos.&lt;/p&gt;  &lt;p&gt;Partamos del mismo supuesto: tenemos un AST al que queremos transformar en un string. Lo primero que podemos cambiar es la sintaxis confuza del visitor clásico mediante el uso de un Extension Method, como sigue:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_4F420866.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_161B0597.png" width="401" height="194" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ahora veamos cómo se ven los nodos de este árbol:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_451D416E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_5755E263.png" width="401" height="278" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Si bien aquí tenemos una interface INode la cual no luce muy bien, la simplicidad de los nodos es evidente ya que no estamos forzando a implementar ningún método extraño, me refiero al método ‘Accept’. Peo vamos a ver la implementación:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_680D6744.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_75AFFD7F.png" width="583" height="532" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Esta implementación es mucho menos compleja y legible, además de reducir notablemente el acoplamiento (los nodos no necesitan conocer al IVisitor ni implementar ningún método extra) lo que posibilita eliminar las referencias cíclicas. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lucas Ontivero&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207265" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Clean+Code/default.aspx">Clean Code</category></item><item><title>C# Closures y tipos anónimos a la Javascript</title><link>http://geeks.ms/blogs/lontivero/archive/2012/05/24/c-closures-y-tipos-an-243-nimos-a-la-javascript.aspx</link><pubDate>Thu, 24 May 2012 05:13:28 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:205199</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=205199</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=205199</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2012/05/24/c-closures-y-tipos-an-243-nimos-a-la-javascript.aspx#comments</comments><description>&lt;p&gt;Es C# realmente dinámico? Si hace Cuac es un pato, si hace lo mismo que un lenguaje dinámico es dinámico. Qué te dice este código:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_605E376E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_57418620.png" width="586" height="590" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=205199" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>ECMA Harmony y la conquista del mundo</title><link>http://geeks.ms/blogs/lontivero/archive/2012/05/12/ecma-harmony-y-la-conquista-del-mundo.aspx</link><pubDate>Sun, 13 May 2012 00:13:45 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:204991</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=204991</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=204991</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2012/05/12/ecma-harmony-y-la-conquista-del-mundo.aspx#comments</comments><description>&lt;p&gt;Dicen que existe un plan para que javascript domine el mundo en los próximos años, y a decir verdad, y viendo las propuestas que se plasman en el draf del ECMA-262 sexta edición, creo que el plan aunque algo silencioso sigue a marcha firme.&lt;/p&gt;  &lt;p&gt;Quiero mostrar aquellas propuestas que a mi me resultan más interesantes:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Strings&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo bueno: se agregan métodos startsWith(), endsWith(), contains(), repeat(), toArray()&lt;/p&gt;  &lt;p&gt;Lo malo: la interpolación de strings no forma parte del draft actual, esta feature permitiría crear string de manera más natural, como por ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_0CEAA143.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_41C780B3.png" width="540" height="66" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;en lugar de usar las formas actuales:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_6B5B4BE6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_3ED21C00.png" width="640" height="38" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Destructuring&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Esta es una de mis preferidas y permitiría entre otras cosas que una función retorne más de un resultado:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_4F6A16EE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_74F3944F.png" width="559" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Iterar las propiedades de los objetos de manera más natural:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_0181416C.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_1FEB8255.png" width="443" height="36" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;y quien sabe cuantas cosas más!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Iterators&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;for-of para iterar sobre los valores de las propiedades en lugar de hacerlo sobre las propiedades es sí mismas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_40AF453C.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_13B9E261.png" width="433" height="119" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Generators&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Esto nos tienen que resultar familiar a todos, solo hace falta ver el yield para darse cuenta de cómo funciona. Exactamente como se hace en .Net. Ahora podríamos por agregarle al prototype una función where, por ejemplo, para evaluar un predicado contra cada uno de los elementos del iterador y listo, tendremos linq en ECMAScript. (pero mejor ver Array comprehension)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_0436D092.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_5BB7EE7D.png" width="272" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lo mismo pero quizás más claro y conveniete puede realizarse con un Generator comprehension:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_071C0F78.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_690DDBB6.png" width="479" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Lambdas&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Aunque actualmente no forma parte del draft de la versión 6, la discusión está vida. No hay que explicar nada.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_4D88D9B3.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_17A3E499.png" width="228" height="22" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Array comprehension&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_6B86E7A7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_1586E5D0.png" width="446" height="23" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;¿Quien no entiende esto? es un generator que retorna los cuadrados de los números pares de numbers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Let&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Si bien la idea detrás de la sintaxis de javascript era parecerse a java, pocos lenguajes se parecen tan poco. El scope de las variables en javascript es la función y no el code block como en java. Let es justamente para limitar el scope al code block.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_5478666B.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_66E0B720.png" width="326" height="156" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;                          &lt;p&gt;Estas son solo unas pocas de las propuestas que se discuten actualmente y que me han gustado más. Otras más importantes quizás sean las de modularidad del lenguaje, pragmas y API, pero a mi me gustan las que tratan sobre la expresividad del lenguaje y la verdad es que con estas y otras propuestas tomadas de ruby y python, ECMAScript va a dar un lindo paso en su plan de conquista del mundo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204991" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Investigaciones/default.aspx">Investigaciones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Clean+Code/default.aspx">Clean Code</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/javascript/default.aspx">javascript</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/ECMAScript/default.aspx">ECMAScript</category></item><item><title>Código libre de NULLs</title><link>http://geeks.ms/blogs/lontivero/archive/2012/02/02/c-243-digo-libre-de-nulls.aspx</link><pubDate>Thu, 02 Feb 2012 20:02:23 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:203159</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=203159</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=203159</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2012/02/02/c-243-digo-libre-de-nulls.aspx#comments</comments><description>&lt;p&gt;En este video explico los problemas que causan las referencias nulas en nuestro código y planteo cómo debemos crear un código libre de NULLs.&lt;/p&gt; &lt;object style="height:390px;width:640px;"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vnO5whrfx9M?version=3&amp;amp;feature=player_detailpage"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/vnO5whrfx9M?version=3&amp;amp;feature=player_detailpage" type="application/x-shockwave-flash" allowscriptaccess="always" width="640" height="360"&gt;&lt;/object&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203159" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Series/default.aspx">Series</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Refactoring/default.aspx">Refactoring</category></item><item><title>[Video] Serie sobre excepciones–Donde capturarlas</title><link>http://geeks.ms/blogs/lontivero/archive/2011/12/19/video-serie-sobre-excepciones-donde-capturarlas.aspx</link><pubDate>Tue, 20 Dec 2011 01:47:03 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202246</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=202246</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=202246</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2011/12/19/video-serie-sobre-excepciones-donde-capturarlas.aspx#comments</comments><description>&lt;p&gt;Les dejo la tercera entrega de la serie sobre excepciones.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:dab7d61a-5f65-4e42-9197-95a1946d6e0b" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=62fuHcYB4Hg&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/videob5ae928734ae_5F00_54E188AE.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Saludos&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202246" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Series/default.aspx">Series</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>[Video] Serie sobre excepciones–Exceptions vs ErrorCodes</title><link>http://geeks.ms/blogs/lontivero/archive/2011/12/16/video-serie-sobre-excepciones-exceptions-vs-errorcodes.aspx</link><pubDate>Fri, 16 Dec 2011 22:47:42 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202176</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=202176</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=202176</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2011/12/16/video-serie-sobre-excepciones-exceptions-vs-errorcodes.aspx#comments</comments><description>&lt;p&gt;Les dejo el primero de una serie de videos sobre excepciones que estoy creando para el equipo de desarrollo al que pertenezco. Espero les guste.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:b3a768be-6227-4f14-aff9-2c1d9c44f61b" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=RHBe4FNF50k&amp;amp;feature=youtube_gdata_player" target="_new"&gt;&lt;img src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/video051bbb3a924d_5F00_57491CA8.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Saludos &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-winkingsmile" alt="Guiño" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/wlEmoticon_2D00_winkingsmile_5F00_39776C1C.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202176" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Series/default.aspx">Series</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Cursos/default.aspx">Cursos</category></item><item><title>Por qué no me gustan las plantillas T4</title><link>http://geeks.ms/blogs/lontivero/archive/2011/08/05/por-qu-233-no-me-gustan-las-plantillas-t4.aspx</link><pubDate>Fri, 05 Aug 2011 04:53:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:198846</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=198846</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=198846</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2011/08/05/por-qu-233-no-me-gustan-las-plantillas-t4.aspx#comments</comments><description>&lt;p&gt;A mi anterior entrada la titul&amp;eacute; &amp;ldquo;Las plantillas T4 son basura&amp;rdquo; cosa que respondi&amp;oacute; m&amp;aacute;s a mi estado de bronca contra &amp;eacute;stas que a su verdadero valor como herramienta. Muchos me preguntaron sobre el por qu&amp;eacute; de tal calificaci&amp;oacute;n y la verdad es que ese por qu&amp;eacute; es demasiado largo de explicar pero voy a mostrar la punta del ovillo para que a quien le interese pueda descubrirlo por s&amp;iacute; solo.&lt;/p&gt;
&lt;p&gt;Veamos un par de ejemplo muy sencillos, el primero es crear un CVS partir de una array definido como sigue:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_7876C733.png"&gt;&lt;img height="74" width="347" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_2F23FC6B.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lo que queremos obtener es lo siguiente:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_26C02714.png"&gt;&lt;img height="46" width="203" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_4E36F37E.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;table width="100%" cellpadding="2" cellspacing="3" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="349" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;T4&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="410" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;StringTemplate&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="349" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_6903198A.png"&gt;&lt;img height="82" width="329" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_4BADC1C0.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="410" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_71373F21.png"&gt;&lt;img height="38" width="419" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_7711E2BA.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ambos dan por resultado exactamente la misma salida. Ahora, como no soy experto en ninguno de los dos, doy por seguro que existen mejores maneras de hacerlo tanto usando T4 como StringTemplate. Pero, si damos por v&amp;aacute;lido el ejemplo, podemos ver claramente la diferencia en legibilidad y, aunque el ejemplo es muy peque&amp;ntilde;os, en mantenibilidad la diferencia tambi&amp;eacute;n es evidente.&lt;/p&gt;
&lt;p&gt;Pero veamos algo levemente m&amp;aacute;s complejo, solo un poquito m&amp;aacute;s complejo, generemos una tabla html para ver algunas diferencias. Aunque con StringTemplate lo har&amp;iacute;a as&amp;iacute;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_2EE426DE.png"&gt;&lt;img height="224" width="501" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_330DFEA3.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;Voy a refactorizarla y compararla en la tabla de abajo.&lt;/p&gt;
&lt;table width="770" cellpadding="2" cellspacing="3" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="349" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;T4&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="410" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;StringTemplate&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="349" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_5C5520D4.png"&gt;&lt;img height="562" width="456" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_2048DF1F.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="410" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_1D537A6C.png"&gt;&lt;img height="468" width="362" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/lontivero/image_5F00_thumb_5F00_50135B13.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nuevamente aqu&amp;iacute; estoy seguro de que existen mejores maneras de hacerlo tanto con T4 como con StringTemplate pero bueno, que valga el ejemplo. as&amp;iacute; que veamos&amp;hellip; (suspiro prolongado) por donde empezar&amp;hellip;.?. quiz&amp;aacute;s deba aclarar que mientras que la plantilla de la derecha est&amp;aacute; completa, a la de la izquierda&amp;nbsp; le quit&amp;eacute; varios renglones con directivas varias del tipo &amp;lt;@template&amp;gt; y &amp;lt;@output&amp;gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Antes de comenzar pregunto: &amp;iquest;soy yo, o en la plantilla del lado izquierdo hay mucho amarillito? &lt;/p&gt;
&lt;p&gt;Bueno, ahora si, lo primero es que dado que en la plantilla de la izquierda tenemos c&amp;oacute;digo, este puede explotar con alguna exception. Por ejemplo, que sucede si data es NULL? S&amp;iacute;, tendremos una bonita exception y entonces quiz&amp;aacute;s debamos depurar la plantilla. S&amp;iacute;, le&amp;iacute;ste bien: depurar una plantilla! por m&amp;aacute;s rid&amp;iacute;culo que suene, es algo que probablemente debamos hacer. En cambio, con la plantilla de la derecha obtendremos simplemente una tabla html vac&amp;iacute;a, no muy &amp;uacute;til pero v&amp;aacute;lida al fin. &lt;/p&gt;
&lt;p&gt;Otro punto es que cualquiera que haya usado T4 ha sufrido alguna vez la p&amp;eacute;rdida de alguna etiqueta de apertura o cierre y ha perdido la vista tratando de encontrar donde es que le falta abrir o cerrar un tag. Y es que en semejante sopa de tags cualquiera se pierde. Por eso es com&amp;uacute;n ver comentarios en la plantilla al estilo: &lt;em&gt;&lt;span style="color:#333333;"&gt;// cierra foreach&lt;/span&gt;&lt;/em&gt; ya que uno termina pregunt&amp;aacute;ndose &amp;iquest;que es lo que est&amp;aacute; cerrando esta llave? Bueno, esa llave est&amp;aacute; cerrando un foreach!&lt;/p&gt;
&lt;p&gt;En cuanto a la calidad de la salida solo puedo decir que con la plantilla de la derecha, sin ning&amp;uacute;n esfuerzo adicional, obtengo un html perfectamente tabulado mientras que con la de la derecha&amp;hellip;.uhmmm, bueno&amp;hellip; requiere alg&amp;uacute;n trabajito adicional que se resuelve agregando m&amp;aacute;s c&amp;oacute;digo.&lt;/p&gt;
&lt;p&gt;Tal vez algo que me agrada de StringTemplate es que nos mantiene protegidos de sus mecanismos internos, es decir, uno no est&amp;aacute; obligado, y de hecho no deber&amp;iacute;a estarlo, a entender c&amp;oacute;mo es que funciona internamente. Pero T4 si nos obliga, solo basta ver los distintos tipos de bloques que existen para darse cuenta: &amp;iquest;Standard feature block?, &amp;iquest;Class feature block? Adem&amp;aacute;s deben ir en un orden espec&amp;iacute;fico o no compilan. S&amp;iacute;, esas son las tuber&amp;iacute;as sali&amp;eacute;ndose hacia afuera a las que me refiero, el creador debe estar consciente de a d&amp;oacute;nde va a ir a parar lo que pone en cada block seg&amp;uacute;n el tipo de bloque, debe entender o imaginar como es la clase que T4 genera por detr&amp;aacute;s. Por tal motivo, T4 es solo para programadores. &lt;/p&gt;
&lt;p&gt;Corto ac&amp;aacute; pero antes debo aclarar que no basta solo con &amp;ldquo;ver&amp;rdquo; las diferencias sino con &amp;ldquo;entender&amp;rdquo; las diferencias, entender todo lo conceptual que hay por detr&amp;aacute;s de la elegancia de StringTemplate (o de la inelegancia de T4). &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=198846" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Productividad/default.aspx">Productividad</category></item><item><title>Otro ejemplo de DSL en el mundo real</title><link>http://geeks.ms/blogs/lontivero/archive/2010/08/27/otro-ejemplo-de-dsl-en-el-mundo-real.aspx</link><pubDate>Fri, 27 Aug 2010 03:31:44 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:181154</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=181154</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=181154</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2010/08/27/otro-ejemplo-de-dsl-en-el-mundo-real.aspx#comments</comments><description>Desarrollo un sistema para la planificación, ejecución y seguimiento de encuestas en el que uno de los requerimientos es poder crear encuestas de manera sencilla y veloz. Además las mismas deben seguir un workflow (algo informal) de revisión. Otro dato importante es que el cliente diseña encuestas que van desde aquellas con solo algunas pocas preguntas hasta esas otras que nos tienen todo un domingo respondiendo acerca de alguna ginebra o algún nuevo centro comercial. Para rematar debo decir que...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2010/08/27/otro-ejemplo-de-dsl-en-el-mundo-real.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181154" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Gesti_26002300_243_3B00_n+de+proyectos/default.aspx">Gesti&amp;#243;n de proyectos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Productividad/default.aspx">Productividad</category></item><item><title>Escalando DSL internos</title><link>http://geeks.ms/blogs/lontivero/archive/2010/08/16/escalando-dsl-internos.aspx</link><pubDate>Mon, 16 Aug 2010 18:08:35 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:180707</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=180707</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=180707</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2010/08/16/escalando-dsl-internos.aspx#comments</comments><description>En mi entrada Fluent Interfaces y TDD presentaba una prueba de concepto sobre un DSL interno que estaba desarrollando para encapsular varios detalles de la manipulación de documentos en el proyecto en el que trabajo actualmente. Luego de avanzar un tanto me doy con un problema muy común en la mayoría de las interfaces fluidas que he visto, a este patrón lo llamo sentencia única . Esto significa que una sentencia de un dsl interno no interactúa con otras del mismo. Veamos un ejemplo: Dh.Using.AnimalControl...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2010/08/16/escalando-dsl-internos.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=180707" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Productividad/default.aspx">Productividad</category></item><item><title>Qué debemos considerar antes de crear nuestro DSL</title><link>http://geeks.ms/blogs/lontivero/archive/2010/08/15/qu-233-debemos-considerar-antes-de-crear-nuestro-dsl.aspx</link><pubDate>Sun, 15 Aug 2010 23:36:03 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:180683</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=180683</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=180683</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2010/08/15/qu-233-debemos-considerar-antes-de-crear-nuestro-dsl.aspx#comments</comments><description>Hoy todos reconocemos el potencial que tiene (LOP) Language Oriented Programming, pero no solo eso sino que muchos ya están invirtiendo para hacerse con las ventajas prometidas por este paradigma(?). Muchos incluso diseñan la sintaxis de aquellos lenguajes que entienden, pueden hacerles alcanzar la productividad, calidad y mantenibilidad que buscan. Ahora bien, una vez decididos a crear el lenguaje (textual) propio para un dominio particular, hay que implementarlo. Aquí es donde deben estudiarse...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2010/08/15/qu-233-debemos-considerar-antes-de-crear-nuestro-dsl.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=180683" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Investigaciones/default.aspx">Investigaciones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Productividad/default.aspx">Productividad</category></item><item><title>Como refactorizar métodos estáticos</title><link>http://geeks.ms/blogs/lontivero/archive/2010/08/14/como-refactorizar-m-233-todos-est-225-ticos.aspx</link><pubDate>Sat, 14 Aug 2010 03:43:29 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:180642</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=180642</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=180642</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2010/08/14/como-refactorizar-m-233-todos-est-225-ticos.aspx#comments</comments><description>Imagina que encontramos un clase estática con varios métodos estáticos los cuales tienen una cantidad aberrante de parámetros. Queremos eliminarla pero nos damos con que está siendo usada en muchísimas partes ¿que hacemos? ¿Como lo harias vos?. Para hablar más concretamente veamos uno de esos métodos: public static void CreateActivityLog( string containerSourceId, string containerId, string action, string sourceId, string instanceId, string docNo, string notes, IFrameworkSecurityContext credentials...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2010/08/14/como-refactorizar-m-233-todos-est-225-ticos.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=180642" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/XP/default.aspx">XP</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/TDD/default.aspx">TDD</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Refactoring/default.aspx">Refactoring</category></item><item><title>Fluent Interfaces y TDD</title><link>http://geeks.ms/blogs/lontivero/archive/2010/08/12/fluent-interfaces-unit-tests-y-tdd.aspx</link><pubDate>Fri, 13 Aug 2010 00:04:04 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:180603</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=180603</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=180603</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2010/08/12/fluent-interfaces-unit-tests-y-tdd.aspx#comments</comments><description>Desarrollar con TDD al principio no es nada fácil pero luego se vuelve “la manera” de desarrollar. Ahora, no siempre hago TDD, si quiero probar algo tan solo tiro las lineas y listo pero, por otro lado, si quiero hacer algo bien por más que tenga algo de código hecho lo tiro y lo comienzo de nuevo con TDD (nunca he perdido mucho. Por el contrario, lo hago porque veo una diferencia). El asunto es que diseñé una interface fluida para encapsular todos los detalles indeseables de la manipulación de documentos...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2010/08/12/fluent-interfaces-unit-tests-y-tdd.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=180603" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/XP/default.aspx">XP</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/TDD/default.aspx">TDD</category></item><item><title>[DSL] Domain Specific Languages - Un ejemplo</title><link>http://geeks.ms/blogs/lontivero/archive/2010/02/14/dsl-domain-specific-languages-un-ejemplo.aspx</link><pubDate>Sun, 14 Feb 2010 18:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:167368</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=167368</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=167368</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2010/02/14/dsl-domain-specific-languages-un-ejemplo.aspx#comments</comments><description>Intro Como ya sabemos, un DSL es un lenguaje de programaci&amp;oacute;n que se construye para atacar una familia de problemas que se presentan habitualmente en un dominio particular. Aunque su denominaci&amp;oacute;n actual (DSL) es relativamente nueva, estos han sido utilizados desde siempre, en particular los que Martin Fowler llama &amp;ldquo;external DSL&amp;rdquo; los cuales muchas veces los utilizamos dentro de otro lenguaje hu&amp;eacute;sped. Por ejemplo, es muy com&amp;uacute;n encontrar SQL, XPath, RegEx, Xml...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2010/02/14/dsl-domain-specific-languages-un-ejemplo.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=167368" width="1" height="1"&gt;</description><enclosure url="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.16.73.68/EasyBLS.zip" length="456912" type="application/x-zip-compressed" /><itunes:author>Lucas Ontivero</itunes:author><itunes:subtitle>[DSL] Domain Specific Languages - Un ejemplo</itunes:subtitle><itunes:keywords>Patterns,Arquitectura,Dise&amp;#241;o,.Net,Languages,Investigaciones,Patrones,Desarrollo,Conceptos,C#,Productividad</itunes:keywords><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Investigaciones/default.aspx">Investigaciones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Conceptos/default.aspx">Conceptos</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Productividad/default.aspx">Productividad</category></item><item><title>Análisis estático de código y malos diseños</title><link>http://geeks.ms/blogs/lontivero/archive/2008/08/19/limitaciones-del-an-225-lisis-est-225-tico-de-c-243-digo.aspx</link><pubDate>Tue, 19 Aug 2008 13:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:95290</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=95290</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=95290</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2008/08/19/limitaciones-del-an-225-lisis-est-225-tico-de-c-243-digo.aspx#comments</comments><description>Aprender a desarrollar y a diseñar software es una tarea en la que hay que invertir muchos años. Hay que ser obsesivo, fanático, hay que equivocarse miles de veces y aprender de esos errores. No contentarse con los aparentes aciertos porque al poco de andar se descubre que no se hizo lo mejor sino que alguien más en un blogs perdido en la web lo resolvió mucho mejor que nosotros y ese alguien también encontrará mejores maneras 10 minutos después de su posteo. Pero sobre todo, hay que leer muchísimo...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2008/08/19/limitaciones-del-an-225-lisis-est-225-tico-de-c-243-digo.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95290" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Misc/default.aspx">Misc</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Series/default.aspx">Series</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Investigaciones/default.aspx">Investigaciones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Patrones/default.aspx">Patrones</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item><item><title>[MISC] C# y VB.Net con IDE Online</title><link>http://geeks.ms/blogs/lontivero/archive/2008/08/14/misc-c-y-vb-net-con-ide-online.aspx</link><pubDate>Thu, 14 Aug 2008 23:36:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:94943</guid><dc:creator>Lucas Ontivero</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/rsscomments.aspx?PostID=94943</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/lontivero/commentapi.aspx?PostID=94943</wfw:comment><comments>http://geeks.ms/blogs/lontivero/archive/2008/08/14/misc-c-y-vb-net-con-ide-online.aspx#comments</comments><description>Resulta que estaba averiguando para hacer una certificación de C++ y entre el material del curso se recomendaba un compiladore de C++ online. Como era la primera vez que veia esto lo busqué para C# y lo encontré! Se trata de un IDE online (ver la foto de abajo) para proyectos en C# y VB.Net (por ahora) y solo permite usar el framework 2.0 (según dice también es &amp;quot;por ahora&amp;quot; al igual que los betas de Google :) Este es el sitio: http://compilr.com/ para no tener que loguearse ni nada pueden...(&lt;a href="http://geeks.ms/blogs/lontivero/archive/2008/08/14/misc-c-y-vb-net-con-ide-online.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=94943" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Misc/default.aspx">Misc</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Dise_26002300_241_3B00_o/default.aspx">Dise&amp;#241;o</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Series/default.aspx">Series</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/.Net/default.aspx">.Net</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Languages/default.aspx">Languages</category><category domain="http://geeks.ms/blogs/lontivero/archive/tags/Desarrollo/default.aspx">Desarrollo</category></item></channel></rss>