<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://andorradotnet.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>400 Bad Request</title><link>http://andorradotnet.com/blogs/lfranco/default.aspx</link><description>Dímelo con flores ;-)</description><dc:language /><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Feliz año 11111011001</title><link>http://andorradotnet.com/blogs/lfranco/archive/2009/01/02/feliz-a-241-o-11111011001.aspx</link><pubDate>Fri, 02 Jan 2009 14:28:56 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:428</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=428</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2009/01/02/feliz-a-241-o-11111011001.aspx#comments</comments><description>&lt;p&gt;:-)   &lt;br /&gt;Aunque sea con un poco de retraso (porque me prometí a mi mismo no tocar el ordenador el día 1/1).&lt;/p&gt;  &lt;p&gt;Feliz año 2009 a todos y esperemos que sea un poquito mejor que el anterior. Que el mundo sea un lugar mejor para vivir, y que esta crisis mundial empiece a remitir, para que todos podamos levantar el vuelo de nuevo…&lt;/p&gt;  &lt;p&gt;Os dejo con una imagen que me ha pasado mi colega &lt;a href="http://www.ulibarri.net/" target="_blank"&gt;Toñín&lt;/a&gt;, en la que se ve con todo lujo de detalles el despegue desde la cabina de un A320. No me explico como salen los pilotos… tal vez por la ventana? :-P&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/cockpit320_554FE101.jpg" target="_blank"&gt;&lt;img title="cockpit320" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="436" alt="cockpit320" src="http://geeks.ms/blogs/lfranco/cockpit320_thumb_43BCA3DE.jpg" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Feliz año 2009 a &lt;a href="mailto:tod@s"&gt;tod@s&lt;/a&gt;,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=428" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/2009/default.aspx">2009</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Felicidades/default.aspx">Felicidades</category></item><item><title>Material del evento: Asentando las bases</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/12/30/material-del-evento-asentando-las-bases.aspx</link><pubDate>Tue, 30 Dec 2008 15:34:04 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:424</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=424</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/12/30/material-del-evento-asentando-las-bases.aspx#comments</comments><description>&lt;p&gt;Ayer tuvimos el último evento del año en &lt;a href="http://andorradotnet.com/"&gt;AndorraDotNet&lt;/a&gt;. Mientras llegan las fotos que hicieron algunos de los asistentes, aprovecho para publicar el material del evento, tanto la presentación como los proyectos de ejemplo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://andorradotnet.com/blogs/anug/image_296F1993.png"&gt;&lt;img title="image" height="184" alt="image" src="http://andorradotnet.com/blogs/anug/image_thumb_38CCBE66.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La presentación la encontraréis aquí:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Y la solución de Visual Studio aquí:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Gracias por todo y nos vemos pronto!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=424" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Grupo/default.aspx">Grupo</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Event/default.aspx">Event</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/AndorraDotNet/default.aspx">AndorraDotNet</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>10 cosas que me gustan de C# respecto a VB</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/12/23/10-cosas-que-me-gustan-de-c-respecto-a-vb.aspx</link><pubDate>Tue, 23 Dec 2008 22:44:53 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:421</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=421</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/12/23/10-cosas-que-me-gustan-de-c-respecto-a-vb.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/pelea_0F4B4E51.jpg"&gt;&lt;img title="pelea" style="border-right:0px;border-top:0px;display:inline;margin:0px 10px 0px 0px;border-left:0px;border-bottom:0px;" height="244" alt="pelea" src="http://geeks.ms/blogs/lfranco/pelea_thumb_16F8D862.jpg" width="220" align="left" border="0" /&gt;&lt;/a&gt;Antes de empezar a leer este post, un aviso: En ningún modo pretendo crear polémica o abrir el viejo debate otra vez, si no más bien enumerar algunas cosillas que hacen que &lt;strong&gt;*yo*&lt;/strong&gt; me sienta más cómodo trabajando con C# que con VB, tanto a nivel de lenguaje como del propio editor. Lo remarco porque quiero que quede bien claro que es una opinión personal, ok? No se trata de comerle el coco a nadie…&lt;/p&gt;  &lt;p&gt;Algunas de estas cosillas ya las he compartido con algunos de vosotros en algún evento de los grupos de usuarios, o simplemente delante de unas cervezas (aquí la conversación suele tornarse más pasional y tiende a alargarse un poco), jejeje…, y a decir verdad pocas veces nos ponemos de acuerdo ¿eh &lt;a title="Guille" href="http://www.elguille.info/" target="_blank"&gt;agüelo&lt;/a&gt;?. Parece ser que antes de empezar a hablar cada cual ya se ha posicionado y de aquí no nos movemos… lo cual es hasta cierto punto normal. Uno sabe con qué herramienta se encuentra más cómodo, aunque pueda usar ambas de forma indistinta.&lt;/p&gt;  &lt;p&gt;De hecho &lt;u&gt;he tirado más líneas de código con VB que con cualquier otro lenguaje&lt;/u&gt;, y eso que empecé en este mundillo con C y posteriormente con C++, para luego pasar a los lenguajes ‘más productivos’ como Delphi o finalmente VB en sus primeras versiones. No fue hasta 2002 y las primeras versiones de .NET que volví a usar la vieja sintaxis del punto y coma. De modo que VB en-todas-sus-variedades me es muy querido, y debo reconocerle sus ventajas… Sin embargo, codificar, al igual que leer o hablar, es algo que siempre haces mejor o te sientes más cómodo en uno de los lenguajes que dominas, y aquí reconozco que C# (como antes de conocerlo lo fue Java) es mi predilecto. Siempre que &lt;strong&gt;YO&lt;/strong&gt; decido el lenguaje a utilizar en un nuevo proyecto, lo escojo, y en caso contrario intento convencer a la otra persona (ya sea compañero, cliente, etc.).&lt;/p&gt;  &lt;p&gt;Os enumero a continuación una lista de cosas que me gustan de C#, o más bien que no me gustan cuando al cabo de un tiempo de trabajar con C#, me pongo a codificar con VB. No siguen ningún orden ni patrón y las voy a ir enumerando conforme se me vayan ocurriendo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;1) Escribo menos código &amp;amp;&amp;amp; código más limpio:&lt;/u&gt;&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;En este punto, un desarrollador de VB acostumbra a decirme que esto no es cierto. Que si bien la sintaxis de VB es en alguno puntos ‘rocambolesca’ es para aclarar, y además el propio editor de código se encarga de escribirlo. Sin embargo tengo comprobado que con el editor de C# en la gran mayoría de las situaciones tecleo menos para decir lo mismo, y queda más claro (al menos para mí). Ojo! Es importante destacar que en ningún momento me mueve el afán de teclear menos, sino que el código resultante sea más legible. Comparemos los siguientes ejemplos: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;u&gt;Declarar una variable:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; x = 5;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; x &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Int = 5&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Bloques de código (ends por todas partes :-P).&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(Nombre == &lt;span style="color:#006080;"&gt;&amp;quot;Pepe&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; Sueldo &amp;lt;= 500)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;...&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Pepe&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;AndAlso&lt;/span&gt; Sueldo &amp;lt;= 500 &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;...&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; If&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Operador AddressOf&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Thread t = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Thread(CountSheep);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; t &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Thread(&lt;span style="color:#0000ff;"&gt;AddressOf&lt;/span&gt; CountSheep)&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Expresiones lambda:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Func&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, Func&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt;&amp;gt; mult = (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; x) =&amp;gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; y) =&amp;gt; x * y;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; mult &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Func(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;, Func(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)) = _    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;(x &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;(y &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) x * y&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Implementar una interfaz (no es preciso Implements):&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; ITest &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getValue();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Test : ITest { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getValue() &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Random r = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Random(); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; r.Next().ToString(); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    } &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Interface&lt;/span&gt; ITest    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; getValue() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Interface&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; Test    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; ITest     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; getValue() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; ITest.getValue&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; r &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Random&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; r.&lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;().ToString()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Podriamos seguir con Overridable, Overrides y unos cuantos más... Pero mejor vamos al siguiente punto que si no, no acabo el post hoy… :-)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;2) No más underscores!&lt;/u&gt;&lt;/strong&gt; 

  &lt;br /&gt;

  &lt;br /&gt;Cuantas veces he tenido que escuchar “&lt;em&gt;no tengo porque terminar cada línea de código con un punto y coma!&lt;/em&gt;”. Pues precisamente, el delimitador de línea es lo que permite que en los lenguajes derivados del viejo y bueno ‘C’ no tengamos que hacer algo tan antinatural como partir las líneas de código con underscores (_). Además suele pasar que es una de las cosas que olvido con mayor rapidez, y cada vez que escribo en VB una query con LINQ acabo por soltar un “AAAAARGH!!! OTRA VEZ!!!”. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;strong&gt;&lt;u&gt;C#&lt;/u&gt;&lt;/strong&gt; 

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt; nums = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;[] { 1, 2, 3, 4 });&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;var mynums = from n &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; nums&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;             &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; n &amp;lt; 5&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;             orderby n&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;             select n;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;VB:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; nums &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; List(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;() {1, 2, 3, 4}) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; mynums = From n &lt;span style="color:#0000ff;"&gt;In&lt;/span&gt; nums _ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    Where n &amp;lt; 5 _ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Order By n _ &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt; n &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;3) Matrices y Listas: [] en lugar de ():&lt;/u&gt;&lt;/strong&gt; 

  &lt;br /&gt;

  &lt;br /&gt;Cuando estoy picando o leyendo código me gusta saber con exactitud si estoy llamando a una función, a una propiedad u obteniendo el valor de una matriz o colección. Precisamente por eso prefiero usar corchetes en lugar de paréntesis para acceder a los miembros de una matriz o lista. En el ejemplo siguiente en la llamada a nums(i) en VB, podría ser tanto un método como una matriz, como una propiedad que devuelve una matriz o lista: 

  &lt;br /&gt;

  &lt;br /&gt;&lt;strong&gt;&lt;u&gt;C#&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt; nums = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;[] { 1, 2, 3, 4 });&lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Console.WriteLine(nums[2].ToString());&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB: 
      &lt;br /&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; nums &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; List(Of &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)(&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;() {1, 2, 3, 4}) &lt;/pre&gt;

  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Console.WriteLine(nums(2).ToString()) &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;4) Parámetros de salida (out):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tipos de parámetro de salida. Estos son muy parecidos a los parámetros por referencia (ref), pero no necesitan ser inicializados. Resultan particularmente útiles en algoritmos recursivos. Visual Basic no dispone de nada equivalente, aunque si permite el paso de valores por referencia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Method(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    i = 44;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Method(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;5) Los códigos de escape y las cadenas verbatim:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otra cosa que me molesta es que VB no reconoce los &lt;a href="http://msdn.microsoft.com/es-es/library/aa691087(VS.71).aspx" target="_blank"&gt;carácteres de escape&lt;/a&gt; contenidos en un string. Esto es particularmente útil cuando deseamos mostrar un retorno de línea ‘\n’ o una tabulación ‘\t’ dentro de una cadena. En Visual Basic hay que recorrer a la concatenación de Environment.NewLine o artimañas parecidas como concatenar directamente el carácter. Por ejemplo el código siguiente se muestra así:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;hola\nque\ntal&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;&lt;a href="http://geeks.ms/blogs/lfranco/MsgBox1_08BCF023.png"&gt;&lt;img title="MsgBox1" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="136" alt="MsgBox1" src="http://geeks.ms/blogs/lfranco/MsgBox1_thumb_03DA3C67.png" width="106" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/MsgBox2_3397E4E6.png"&gt;&lt;img title="MsgBox2" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="112" alt="MsgBox2" src="http://geeks.ms/blogs/lfranco/MsgBox2_thumb_3C877725.png" width="107" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;En este punto más de uno se preguntará ¿y que pasa si no quiero tratar estos caracteres de escape como especiales?, ¿o si quiero mostrar una ruta de acceso que contiene varios caracteres ‘\’? Bien, para ello tenemos varias alternativas: Podemos anteponer un carácter ‘\’ a todo símbolo que deseemos mostrar literalmente o podemos usar &lt;a href="http://msdn.microsoft.com/es-es/library/aa691090(VS.71).aspx" target="_blank"&gt;cadenas verbatim&lt;/a&gt; (también llamado ‘literal de cadena textual’):&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;&amp;quot;C:\\Windows\\system32\\Calc.exe&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;@&amp;quot;hola\nque\ntal&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Las cadenas verbatim van incluso un poco más allá y permiten incluso poder partir una cadena en varias líneas, lo que clarifica en mucho el código:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;MessageBox.Show(&lt;span style="color:#006080;"&gt;@&amp;quot;SELECT O.OrderID, O.CustomerID, O.EmployeeID, &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.OrderDate, O.RequiredDate, O.ShippedDate,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.ShipVia, O.Freight, O.ShipName, O.ShipAddress,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.ShipCity, O.ShipRegion, O.ShipPostalCode,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;O.ShipCountry, C.CompanyName, C.Address,&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;C.City, C.Region, C.PostalCode, C.Country&lt;/font&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;FROM dbo.Customers AS C&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;INNER JOIN dbo.Orders AS O&lt;/font&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;font color="#008080"&gt;ON C.CustomerID = O.CustomerID&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;6) Propiedades autogeneradas:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Algo tan sencillo como crear una propiedad para una clase, lo es todavía más en C#, ya que permite el uso de propiedades autogeneradas. Esto hace que el compilador maneje internamente una variable privada a nivel de clase para almacenar el valor, quedando esta parte oculta al desarrollador. Esta característica estará disponible en la próxima versión de Visual Basic, pero de momento todavía tenemos que conformarnos con representarlo así:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;C#:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Foo&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; id { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; Foo &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _id &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; id() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _id &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            _id = value &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; _name &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; name() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; _name &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; value &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            _name = value &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;7) Refactoring:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hoy en día, al igual que el uso de pruebas unitarias, empieza a ser impensable no refactorizar el código para una mejor comprensión, que repercute en un mejor índice de mantenibilidad (o &lt;em&gt;Maintainability index&lt;/em&gt;, vaya usted a saber cómo se traduce) del código. Bien, pues el menú ‘Refactor’ del editor de C# no aparece en VB. Y la única información acerca de refactorizar el código VB nos enlaza con un &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb693327.aspx" target="_blank"&gt;Add-In de terceros&lt;/a&gt;, la cual a decir verdad es una gran utilidad. Lo sé, porque he usado la versión PRO de este producto durante bastante tiempo. Pero el hecho es que Visual Studio no incorpora ninguna utilidad ‘de fábrica’ para refactorizar el código, lo que no deja de ser sorprendente…&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/RefactorMenu_6C451FA4.png"&gt;&lt;img title="RefactorMenu" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="174" alt="RefactorMenu" src="http://geeks.ms/blogs/lfranco/RefactorMenu_thumb_071145B1.png" width="255" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;8) &lt;/u&gt;&lt;/strong&gt;&lt;strong&gt;&lt;u&gt;Posibilidad de desactivar ‘Strict on’:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Al ser VB la evolución de un lenguaje no tan ‘estricto’ como C#, nos ofrece la posibilidad de desactivar la opción Strict On, y de este modo dejar que el compilador se encargue de realizar muchas conversiones implícitas. Pero lo más peligroso de todo es que la opción viene desactivada ‘de fábrica’ y en cambio no conozco ningún buen programador de VB (que los hay, y muchos) que no sea lo primero que active. Muchos errores en tiempo de ejecución podrían ser evitados si el propio compilador nos obligase a codificar correctamente, en lugar de actual de este modo más ‘relajado’:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB (con Option Strict Off):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; s &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;s = DateTime.Today&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;VB (con Option Strict On):&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; s &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;s = DateTime.Today.ToString()&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Observar que con Option Strict activado, el compilador no permite asignar una fecha a una variable de tipo cadena (con razón!), de modo que para poder compilar debemos realizar una conversión explícita.&lt;/p&gt;

&lt;p&gt;Recomiendo dar un vistazo a este artículo de coding horror: 
  &lt;br /&gt;&lt;a title="http://www.codinghorror.com/blog/archives/000355.html" href="http://www.codinghorror.com/blog/archives/000355.html"&gt;http://www.codinghorror.com/blog/archives/000355.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;9) Microsoft.VisualBasic:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Son legión los programadores que provienen de versiones anteriores de .NET (6 o anteriores), de modo que para facilitarles el camino los proyectos de VB incorporan el espacio de nombres Microsoft.VisualBasic, el cual a su vez incorpora muchas de las funciones de estas versiones anteriores. El hecho de incorporarlas no es un error en sí, lo malo es que estas funciones tienen su equivalente en el modelo de objetos del framework, y si seguimos usando estas funciones ‘antiguas’ no aprenderemos las nuevas, y el día en que debamos trabajar con otro lenguaje del Framework (que no tiene porque ser C#, hay unos cuantos más :-P) nos encontraremos con que estamos usando funciones propias de VB y no conoceremos su equivalente.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/ObjectExplorer_2BA563E6.png"&gt;&lt;img title="ObjectExplorer" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="441" alt="ObjectExplorer" src="http://geeks.ms/blogs/lfranco/ObjectExplorer_thumb_1ECD9E79.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Por ejemplo, en lugar de llamar a la función Len para averiguar el número de caracteres de una cadena, es mejor usar el método Lenght de la clase String, lo mismo para Trim(), y todavía es más flagrante con Mid(), que equivale al método SubString del objeto String:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; n &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = Len(DateTime.Now.ToLongDateString)    &lt;span style="color:#008000;"&gt;&amp;#39;NO&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; n &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = DateTime.Now.ToLongDateString.Lenght  &lt;font color="#008000"&gt;&amp;#39;SI&lt;/font&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;br /&gt;No son pocos los esfuerzos de muchos compañeros, fantásticos programadores como &lt;a href="http://geeks.ms/blogs/jorge/archive/2008/10/31/c-243-mo-eliminar-la-refencia-al-ensamblado-microsoft-visualbasic-dll-en-nuestros-proyectos.aspx" target="_blank"&gt;Jorge Serrano&lt;/a&gt; o &lt;a href="http://msdn.microsoft.com/es-es/library/bb972193.aspx" target="_blank"&gt;Harvey Triana&lt;/a&gt; para eliminar esta librería de nuestras aplicaciones, de modo que la recomendación siempre acaba siendo “no la uses, no la mires, haz como si no estuviera…”. Por cierto, os recomiendo una lectura de ambos artículos.&lt;/div&gt;

&lt;div&gt;&lt;a title="http://geeks.ms/blogs/jorge/archive/2008/10/31/c-243-mo-eliminar-la-refencia-al-ensamblado-microsoft-visualbasic-dll-en-nuestros-proyectos.aspx" href="http://geeks.ms/blogs/jorge/archive/2008/10/31/c-243-mo-eliminar-la-refencia-al-ensamblado-microsoft-visualbasic-dll-en-nuestros-proyectos.aspx"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div&gt;&lt;strong&gt;&lt;u&gt;10) Hay más, y no se por cual decidirme…&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;

&lt;p&gt;Hay muchas otras cosas que se quedan en el tintero, porque algunas de ellas son demasiado largas (como el manejo de eventos), y otras no son precisamente de uso diario, como la ejecución de código no seguro (unsafe). Pero estaremos de acuerdo en que la mayoría de las novedades aparecen primero para C# (inicializadores de colecciones, propiedades autogeneradas, soporte para expresiones lambda ‘de verdad’, etc.) e incluso los compiladores de C# del proyecto MoNo van siempre por delante de los de VB. Aunque este último punto reconozco que no es demasiado importante… o sí?&lt;/p&gt;

&lt;p&gt;En fin, vaya chapa me ha salido! Pero por lo menos ahora tengo una lista de cosas para cuando me pregunten “¿porque te gusta más C# que VB?”.&lt;/p&gt;

&lt;p&gt;Un saludo desde Andorra,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=421" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Comparativa/default.aspx">Comparativa</category></item><item><title>Mi primera revisión de BillG</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/12/04/mi-primera-revisi-243-n-de-billg.aspx</link><pubDate>Thu, 04 Dec 2008 14:37:07 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:403</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=403</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/12/04/mi-primera-revisi-243-n-de-billg.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/Spolsky-Small_0AAF9D76.jpg"&gt;&lt;img title="Spolsky-Small" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="244" alt="Spolsky-Small" src="http://geeks.ms/blogs/lfranco/Spolsky-Small_thumb_4E88F32F.jpg" width="175" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Siempre me ha encantado leer los artículos de Joel Spolsky, y ayer mientras buscaba otra cosa me topé con un artículo que había leído hace un tiempo (por aquel entonces en su versión original) y que me había gustado mucho. En este artículo Joel nos cuenta la história de su primera revisión con el tío Bill, allá por 1994 cuando trabajaba en Microsoft. Os dejo el artículo traducido al español y os animo a darle una ojeada al resto de artículos de Joel. Vale la pena…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Mi primera revisión de BillG&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;En la ‘antigüedad’, Excel tenía un lenguaje de programación sin nombre bastante incómodo. Lo llamábamos “Excel Macros”. Era un lenguaje de programación gravemente disfuncional, sin variables (tenías que almacenar los valores en celdas de una hoja de cálculo), sin locals, sin llamadas a subrutinas: en resumen, era completamente insostenible. Tenía características avanzadas como “Goto” pero las etiquetas eran físicamente invisibles, en realidad. &lt;/p&gt;  &lt;p&gt;Lo único que lo hacía parecer razonable era que se veía genial comparado con las macros de Lotus, que no eran más que una secuencia de pulsaciones de teclado introducidas como una larga cadena en una celda de una hoja de cálculo. &lt;/p&gt;  &lt;p&gt;El 17 de junio de 1991, empecé a trabajar para Microsoft en el equipo de Excel. Mi título era “Jefe de programa”. Se suponía que debía aportar una solución a este problema. Y que la solución tendría que ver con el lenguaje de programación Basic &lt;/p&gt;  &lt;p&gt;&lt;i&gt;¿Basic? ¡Puagh!&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Pasé algún tiempo negociando con varios grupos de desarrollo. Visual Basic 1.0 acababa de salir, y era jodidamente guay. Había un esfuerzo descaminado en proceso con el nombre en código MacroMan, y otro esfuerzo para crear Basic Orientado a Objetos con el nombre en código “Silver”. Al equipo de Silver se le había dicho que tenían un cliente para su producto: Excel. El jefe de marketing de Silver, Bob Wyman, si, ese Bob Wyman, solo tenía una persona a quien vender esa tecnología: a mí. &lt;/p&gt;  &lt;p&gt;Macroman, como he dicho, iba descaminado, y costó un poco de persuasión, pero finalmente fue cancelado. El equipo de Excel convenció al de Basic de que lo que realmente necesitábamos era una especie de Visual Basic para Excel. Conseguí que se añadieran cuatro características que me gustaban a Basic. Hice que añadieran Variantes, un tipo de dato unión que podía almacenar cualquier otro tipo, porque en otro caso no podrías almacenar los resultados de una celda de hoja de cálculo sin una sentencia switch. Hice que añadieran ‘late binding’, que luego se llamó IDispatch, también conocido como COM Automation, porque el diseño original de Silver requería de un profundo conocimiento de sistemas de tipos del que el tipo de gente que programa macros no se preocupa. Y conseguí que incluyeran dos características sintácticas que me gustaban en el lenguaje: For Each, robado de csh, y With, robado de Pascal. &lt;/p&gt;  &lt;p&gt;Entonces me senté a escribir la especificación de Excel Basic, un documento enorme que creció hasta tener varios centenares de páginas. Creo que cuando se terminó tenía 500 páginas.(“Vaya montón”, te ríes por debajo; ya, ya, cállate). &lt;/p&gt;  &lt;p&gt;En aquella época, solíamos tener estas cosas llamadas revisions de BillG. Básicamente, cada característica principal importante era revisada por Bill Gates. Me dijeron que mandara una copia de mi especificación a su oficina como preparación para la revisión. Era básicamente un taco de folios impresos a láser. &lt;/p&gt;  &lt;p&gt;Me apresuré a imprimir la especificación y la mandé a su oficina. &lt;/p&gt;  &lt;p&gt;Más tarde ese día, tuve un poco de tiempo, así que empecé a trabajar intentando comprender si Basic tenía suficientes funciones de fecha y hora para realizar todo lo que podías hacer en Excel. &lt;/p&gt;  &lt;p&gt;En la mayoría de entornos de programación modernos, las fechas están almacenadas como números reales. La parte entera del número es el número de días desde una fecha acordada del pasado, llamada la ‘epoch’. En Excel, la fecha actual, 16 de junio de 2006, se almacena como 38884 días desde el 1 de enero de 1900, que sería 1. &lt;/p&gt;  &lt;p&gt;Empecé a investigar las diferentes funciones de fecha y hora de Basic y las de Excel, probando cosas, hasta que me dí cuenta de algo extraño en la documentación de Visual Basic.: Basic usa como ‘epoch’ el 31 de diciembre de 1899 en vez del 1 de enero de 1900, pero, por alguna razón, la fecha actual era la misma en Excel y en Basic. &lt;/p&gt;  &lt;p&gt;Ein? &lt;/p&gt;  &lt;p&gt;Busqué un desarrollador de Excel lo suficientemente viejo como para recordar por qué. Ed Fries parecía conocer la respuesta. &lt;/p&gt;  &lt;p&gt;“Oh,” me dijo, “Prueba el 28 de febrero de 1900”. &lt;/p&gt;  &lt;p&gt;“Es 59”, le dije. &lt;/p&gt;  &lt;p&gt;“Prueba ahora el 1 de marzo”. &lt;/p&gt;  &lt;p&gt;“¡Es 61!” &lt;/p&gt;  &lt;p&gt;“¿Qué le ha pasado al 60?” preguntó Ed. &lt;/p&gt;  &lt;p&gt;“El 29 de febrero. ¡1900 fue un año bisiesto! ¡Es divisible por 4!” &lt;/p&gt;  &lt;p&gt;“Buen intento, pero no”, dijo Ed, y me dejó pensando un rato. &lt;/p&gt;  &lt;p&gt;Ups. Investigué un poco. Los años que son divisibles por 100 no son años bisiestos, a menos que también sean divisibles por 400. 1900 no era un año bisiesto. &lt;/p&gt;  &lt;p&gt;“¡Es un bug en Excel!” exclamé. &lt;/p&gt;  &lt;p&gt;“Bueno, &lt;i&gt;en realidad&lt;/i&gt; no” dijo Ed. “Tuvimos que hacerlo así porque necesitábamos poder importar hojas de cálculo de Lotus 123”. &lt;/p&gt;  &lt;p&gt;“¿Así que es un bug en Lotus 123?”. &lt;/p&gt;  &lt;p&gt;“Sí, pero probablemente uno intencionado. Lotus tenía que caber en 640K. Eso no es mucha memoria. Si ignoras a 1900, puedes calcular si un año dado es bisiesto mirando si los dos bits más a la derecha son cero. Es muy rápido y sencillo. Lo tipos de Lotus probablemente pensaron que no importaba equivocarse para esos dos meses tan antiguos. Parece que los tipos de Basic quisieron ser meticulosos con esos dos meses, así que movieron la ‘epoch’ un día hacia atrás. &lt;/p&gt;  &lt;p&gt;“¡Argh!” dije, y me fui a estudiar por qué había un checkbox en el cuadro de diálogo de opciones con el nombre Sistema de Fecha 1904. &lt;/p&gt;  &lt;p&gt;El día siguiente era la gran revisión de BillG. &lt;/p&gt;  &lt;p&gt;30 de Junio de 1992. &lt;/p&gt;  &lt;p&gt;En aquella época, Microsoft era mucho menos burocrática. En vez de las 11 o 12 capas de gestión que tienen hoy en día, yo dependía de Mike Conte que dependía de Chris Gram. que dependía de Pete Higgins, que dependía de Mike Maples, que dependía de Bill. Unas 6 capas desde arriba hasta abajo. Nos reíamos de compañías como General Motors ,con sus 8 capas de gestión, o las que fueran. &lt;/p&gt;  &lt;p&gt;En la reunión de mi revisión de BillG, toda la jerarquía de dependencias estaba allí, junto con sus primos, hermanas y tías, y una persona que vino de mi equipo cuya única función durante la reunión era contar cuántas veces decía Bill la ‘palabra J’. Cuanto menor fuera la cuenta-j*d*r, mejor. &lt;/p&gt;  &lt;p&gt;Bill entró. &lt;/p&gt;  &lt;p&gt;Pensé lo extraño que era que tuviera dos piernas dos brazos, una cabeza, etc. Casi como un ser humano normal. &lt;/p&gt;  &lt;p&gt;Tenía mi especificación en la mano. &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Tenía mi especificación en la mano.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Se sentó e intercambió con un ejecutivo que yo no conocía bromas que no tenían sentido para mí. Unas cuantas personas se rieron. &lt;/p&gt;  &lt;p&gt;Bill se giró hacia mí. &lt;/p&gt;  &lt;p&gt;Me di cuenta de que había comentarios escritos en los márgenes de mi especificación. ¡Se había leído la primera página! &lt;/p&gt;  &lt;p&gt;&lt;i&gt;¡Se había leído la primera página de mi especificación y había escrito pequeñas notas en el margen!&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Considerando que sólo le habíamos dado la especificación 24 horas antes, debía habérsela leído la noche anterior. &lt;/p&gt;  &lt;p&gt;Él hacía preguntas. Yo las respondía. Eran bastante sencillas, pero por mi vida que soy incapaz de recordar cuáles eran, porque no podía evitar darme cuenta de que él estaba hojeando la especificación… &lt;/p&gt;  &lt;p&gt;¡Estaba hojeando la especificación! [Cálmate, ¿qué eres? ¿una niña?] &lt;/p&gt;  &lt;p&gt;… y HABÍA NOTAS EN TODOS LOS MÁRGENES. EN CADA PÁGINA DE LA ESPECIFICACIÓN. SE HABÍA LEÍDO TODA LA MALDITA COSA Y HABÍA ESCRITO NOTAS EN LOS MÁRGENES. &lt;/p&gt;  &lt;p&gt;&lt;i&gt;¡Se la había leído entera! [¡OH DIOS MÍO SIIIIIIIIIIII!]&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Las preguntas se fueron haciendo más difíciles y detalladas. &lt;/p&gt;  &lt;p&gt;Parecían un poco aleatorias. En ese punto me había acostumbrado a pensar en Bill como mi colega. ¡Es un tío majo! ¡Se ha leído mi especificación! ¡Probablemente sólo quiere hacerme algunas preguntas sobre los comentarios en los márgenes! ¡Abriré un bug en el bug tracker por cada uno de sus comentarios y me aseguraré de que se solucione, &lt;i&gt;pronto&lt;/i&gt;! &lt;/p&gt;  &lt;p&gt;Finalmente, la pregunta trampa. &lt;/p&gt;  &lt;p&gt;“No sé, tíos” dijo Hill, “¿Alguien ha mirado &lt;i&gt;realmente&lt;/i&gt; todos los detalles de cómo hacer esto? Como todas esas funciones de fecha y hora. Excel tiene tantas. ¿Basic va a tener las mismas funciones? ¿Van a funcionar de la misma forma?” &lt;/p&gt;  &lt;p&gt;“Si,” dije, “excepto para enero y febrero de 1900. &lt;/p&gt;  &lt;p&gt;Silencio. &lt;/p&gt;  &lt;p&gt;El contador-de-j*d*r*s y mi jefe intercambiaron miradas de asombro. &lt;i&gt;¿Cómo supiste eso? ¿Enero y febrero QUÉ?&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;“OK. Bueno, buen trabajo” dijo Hill. Cogió su copia anotada de la especificación &lt;/p&gt;  &lt;p&gt;&lt;i&gt;…¡espera! Quiero eso…&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;y se fue. &lt;/p&gt;  &lt;p&gt;“Cuatro”, anunció el contador-de-j*d*r*s, y todo el mundo dijo “Guau, es el número más bajo que puedo recordar. Bill se está suavizando con la edad”. El tenía, ya sabes, 36. &lt;/p&gt;  &lt;p&gt;Más tarde me lo explicaron. “Bill no quiere revisar realmente tu especificación, sólo quiere asegurarse de que lo tienes bajo control. Su modus operandi estándar es hacer preguntas cada vez más y más difíciles hasta que admitas que no sabes la respuesta, y entonces él pueda gritarte por no estar preparado. Nadie estaba realmente seguro de que pasaría si respondías la pregunta más difícil que se le pudiera ocurrir, porque no había pasado antes.”. &lt;/p&gt;  &lt;p&gt;“¿Os imagináis si Jim Manzi hubiera estado en esa reunión?” preguntó alguien. “Habría preguntado: ‘¿Qué es una función de fecha?’”. &lt;/p&gt;  &lt;p&gt;Jim Manzi era el MBA que estaba hundiendo a Lotus. &lt;/p&gt;  &lt;p&gt;Era algo importante. Bill Gates era increíblemente técnico. Entendía los Variants, y los objetos COM, y IDispatch, y porqué Automation es diferente de las vtables y porqué podría llevar a interfaces duales. Se preocupaba de las funciones de fecha. No se entrometía en el software si confiaba en la gente que estaba trabajando en él, pero no podías engañarle ni un minuto porque era un programador. Un verdadero programador. &lt;/p&gt;  &lt;p&gt;Ver a no-programadores intentando dirigir empresas de software es como ver a alguien que no sabe hacer surf intentar practicarlo. &lt;/p&gt;  &lt;p&gt;“¡Está bien! ¡Tengo grandes consejeros diciéndome qué hacer!” dicen, y luego se caen de la directiva, una y otra vez. El grito estándar del MBA que cree que la gestión es una función genérica. ¿Es Ballmer otro John Sculley, que casi llevó a Apple a la extinción porque la directiva pensó que vender Pepsi esa una buena preparación para dirigir una empresa de computadoras? Al culto del MBA le gusta creer que puedes dirigir organizaciones que hacen cosas que no entiendes. &lt;/p&gt;  &lt;p&gt;A lo largo de los años, Microsoft se hizo grande, Bill se dedicó a demasiadas cosas, y algunas decisiones éticamente turbias hicieron necesario dedicar demasiada atención de la gestión a luchar contra el gobierno de los Estados Unidos. Steve cogió el puesto de CEO porque en teoría permitiría a Bill dedicar más tiempo a lo que hace mejor, dirigir la organización de desarrollo de software, pero eso no pareció arreglar problemas endémicos causados por esas 11 capas de gestión, una cultura de reuniones permanentes, perpetuas, una terca insistencia en crear cada posible producto, fuera como fuera,(¿Cuántos miles de millones de dólares ha perdido Microsoft en Investigación y Desarrollo, costes legales y daño a su reputación, porque decidieron que no sólo tenían que crear un navegador web, sino además darlo gratis?), y un par de décadas de contrataciones descuidadas y apresuradas ha asegurado que la capacidad intelectual del empleado de Microsoft medio se haya hundido (Douglas Coupland, en Microsiervos: “Contrataron a 3.100 personas sólo en 1992, y sabes que no todos fueron joyas.”). &lt;/p&gt;  &lt;p&gt;Oh, bueno. La fiesta se ha movido a otra parte. Excel Basic se convirtió en Microsoft Visual Basic para Aplicaciones para Microsoft Excel, con tantos (TM)’s y (R)’s que no sé dónde ponerlos. Dejé la compañía en 1994, creyendo que Bill me había olvidado completamente, hasta que descubrí una pequeña entrevista a Bill Gates en el Wall Street Journal en la que mencionó, casi de pasada, algo en la línea de lo difícil que era contratar, digamos, un buen jefe de programa para Excel. No crecen en los árboles, o algo así. &lt;/p&gt;  &lt;p&gt;¿Podría estar hablando de mí? Naaa, probablemente era sobre otra persona. &lt;/p&gt;  &lt;p&gt;Aunque... &lt;/p&gt;  &lt;p&gt;Artículo traducido al español por &lt;i&gt;&lt;a href="http://local.joelonsoftware.com/mediawiki/index.php/User:Deusvede"&gt;David Vilches&lt;/a&gt;&lt;/i&gt;:     &lt;br /&gt;&lt;a href="http://local.joelonsoftware.com/mediawiki/index.php/Mi_primera_revisi%C3%B3n_de_BillG"&gt;http://local.joelonsoftware.com/mediawiki/index.php/Mi_primera_revisi%C3%B3n_de_BillG&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Artículo original en inglés:   &lt;br /&gt;&lt;a href="http://joelonsoftware.com/items/2006/06/16.html"&gt;http://joelonsoftware.com/items/2006/06/16.html&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Saludos desde Andorra,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=403" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Joel+Spolsky/default.aspx">Joel Spolsky</category></item><item><title>Cumpleaños + Nacimiento = Día inolvidable</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/11/11/cumplea-241-os-nacimiento-d-237-a-inolvidable.aspx</link><pubDate>Wed, 12 Nov 2008 04:29:02 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:382</guid><dc:creator>lfranco</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=382</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/11/11/cumplea-241-os-nacimiento-d-237-a-inolvidable.aspx#comments</comments><description>&lt;p&gt;:-)&lt;br /&gt;Menuda ecuación, verdad?&lt;/p&gt; &lt;p&gt;Pues esto es lo que ha sucedido hoy: Cumplo 37 &amp;#39;tacos&amp;#39; y ha nacido MARA, mi segunda hija. Casi nada... &lt;/p&gt; &lt;p&gt;La verdad es que ha sido el mejor regalo de cumpleaños que he tenido jamás, y los he tenido muy buenos ;-), pero ninguno comparable a este (*). Además no ha sido &amp;#39;pactado&amp;#39; con el médico ni nada, simplemente han sido casualidades de la vida. Aunque si te lo paras a pensar, una entre 365 no es nada comparado con las probabilidades de que te toque la lotería, jejeje... Que demonios! soy un tipo afortunado.&lt;/p&gt; &lt;p&gt;El parto ha ido muy bien, y aunque ahora acabo de poner a mi otra niña a dormir y estoy un poco hecho polvo, ha sido de esos días de los que sabes que te vas a acordar toda tu vida. La niña está bien y es requeteguapa (que voy a decir yo, no?), y la mamá también, y se encuentra bastante bien para lo que ha tenido que pasar :-P&lt;/p&gt; &lt;p&gt;En fin, os dejo con algunas fotos, que yo tengo que ir a prepararme un examen para mañana, y si todo va bien ya os contaré... que eso da para otra historia.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02373.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02373" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02373_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02379.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02379" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02379_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02380.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02380" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02380_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02382.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02382" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02382_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02384.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02384" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02384_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02385.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02385" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02385_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02386.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02386" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02386_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02389.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02389" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02389_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02390.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02390" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02390_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02392.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="184" alt="DSC02392" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CumpleaosNacimientoDainolvidable_14612/DSC02392_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;1º Foto: El día anterior, última foto antes de salir.&lt;br /&gt;2º Foto: Justo antes de empezar la juerga&lt;br /&gt;3º Foto: Más que un tío a punto de entrar en quirófano parezco al ché guevara :-)&lt;br /&gt;4º Foto: Me han tenido esperando más de 20 minutos en un vestuario, y sólo había un par de armarios y esta señal (un tío colgado, está claro no?)&lt;br /&gt;5º Foto: Lo que puede llegar a hacer uno para olvidar los nervios :-P&lt;br /&gt;6º Foto: Demostrado: El tiempo es relativo. Cuánta razón llevaba Albert...&lt;br /&gt;7º Foto: Por fin está aquí! Primera foto de MARA.&lt;br /&gt;8º Foto: Subiendo a la habitación&lt;br /&gt;9º Foto: Ya estamos listas para la foto oficial&lt;br /&gt;10º Foto: En casa, con mi otra peque soplando las velitas.&lt;br /&gt; &lt;p&gt;Saludos desde Andorra,&lt;/p&gt; &lt;p&gt;(*) Al Pani y al Marc los voy a marear para que me aconsejen con mi &lt;a href="http://www.htc.com/es/product/touchdiamond/overview.html" target="_blank"&gt;juguetito nuevo&lt;/a&gt;.&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=382" width="1" height="1"&gt;</description></item><item><title>Application Architecture Guide 2.0</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/10/31/application-architecture-guide-2-0.aspx</link><pubDate>Fri, 31 Oct 2008 13:05:58 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:376</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=376</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/10/31/application-architecture-guide-2-0.aspx#comments</comments><description>&lt;p&gt;Veo en el Blog de &lt;a href="http://blogs.msdn.com/somasegar/default.aspx"&gt;Somasegar&lt;/a&gt; que esta semana se ha liberado una beta de Application Architecture Guide 2.0. Esta guía es un compendio de principios, patrones y buenas prácticas para el diseño de arquitecturas de software, y su propósito es el de ayudar a los arquitectos y desarrolladores a diseñar y construir mejores aplicaciones sobre la plataforma .NET.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/AppGuidance_7BCCF560.png"&gt;&lt;img title="AppGuidance" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="257" alt="AppGuidance" src="http://geeks.ms/blogs/lfranco/AppGuidance_thumb_41E04325.png" width="442" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Os dejo el link al &lt;a href="http://blogs.msdn.com/somasegar/archive/2008/10/30/application-architecture-guide-2-0.aspx"&gt;artículo original&lt;/a&gt;, y algunos recursos asociados:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/AppArchGuide"&gt;Application Architecture Guide 2.0&lt;/a&gt;, &lt;a href="http://www.codeplex.com/AppArchGuide"&gt;Knowledge Base&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/jmeier"&gt;Project News and Announcements&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Saludos,   &lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=376" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Arquitectura/default.aspx">Arquitectura</category></item><item><title>DXHelmet: El futuro de la interacción hombre - máquina</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/10/28/dxhelmet-el-futuro-de-la-interacci-243-n-hombre-m-225-quina.aspx</link><pubDate>Tue, 28 Oct 2008 13:26:55 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:371</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=371</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/10/28/dxhelmet-el-futuro-de-la-interacci-243-n-hombre-m-225-quina.aspx#comments</comments><description>&lt;p&gt;Ver para creer… si hace unos años me dicen que esto sería posible no me lo hubiese creído.&lt;/p&gt;  &lt;p&gt;Como dicen ellos mismos:   &lt;br /&gt;[…] The future of software development is here - the way in which you interact with the computer will never be the same again...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/Helmet1_0CE9CEE6.png"&gt;&lt;img title="Helmet1" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="151" alt="Helmet1" src="http://geeks.ms/blogs/lfranco/Helmet1_thumb_70993A6D.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/Helmet2_5D7A9E72.png"&gt;&lt;img title="Helmet2" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="139" alt="Helmet2" src="http://geeks.ms/blogs/lfranco/Helmet2_thumb_10BB3797.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;No os digo más, darle un vistazo que vale la pena:   &lt;br /&gt;&lt;a title="http://devexpress.com/helmet" href="http://devexpress.com/helmet"&gt;http://devexpress.com/helmet&lt;/a&gt;&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=371" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Futures/default.aspx">Futures</category></item><item><title>Series: Resumen de los enlaces</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/10/23/series-resumen-de-los-enlaces.aspx</link><pubDate>Thu, 23 Oct 2008 13:24:52 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:365</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=365</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/10/23/series-resumen-de-los-enlaces.aspx#comments</comments><description>&lt;p align="justify"&gt;Últimamente estoy recibiendo bastantes correos preguntándome cosas acerca de las series de posts que publiqué hace un tiempo. Os dejo aquí un resumen de los enlaces y el código fuente disponible en ellas. Ya estaba todo publicado pero de forma dispersa, así que aquí lo teneis todo juntito.&lt;/p&gt;  &lt;p align="justify"&gt;Aviso: Todas las series son ejemplos reales que muestran cómo realizar algunas de las tareas cotidianas (o no tanto) mediante C#. En ningún caso pretenden ser aplicaciones reales, de modo que deben tomarse como lo que realmente son: Meros ejemplos didácticos.&lt;/p&gt;  &lt;hr /&gt;  &lt;h4&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccederalacachdeInternetExplorerI_E6DA/Internet2_2.jpg"&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" height="102" alt="Internet2" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccederalacachdeInternetExplorerI_E6DA/Internet2_thumb.jpg" width="100" border="0" /&gt;&lt;/a&gt;&lt;/h4&gt;  &lt;h3&gt;Acceder a la caché de Internet Explorer&lt;/h3&gt;  &lt;p&gt;Resumen:&lt;/p&gt;  &lt;p align="justify"&gt;Ejemplo de cómo crear un servicio de Windows que monitoriza la caché de archivos temporales de Internet Explorer y exporta un fichero log a una ubicación remota (por si el usuario decide vaciar la caché). Contiene ejemplos de cómo usar las API de acceso a la caché, cómo serializar objetos, realizar impersonation, y cómo crear y distribuir un servicio de Windows.&lt;/p&gt;  &lt;p&gt;Artículos:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-i.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (I)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-ii.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (II)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-iii.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (III)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-iv.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (IV)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/10/acceder-a-la-cach-233-de-internet-explorer-v-y-final.aspx"&gt;Acceder a la caché de Internet Explorer (V)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Código de ejemplo:&lt;/p&gt;   &lt;hr /&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccediendoaLDAPconCI_1029E/ldap1_2.jpg"&gt;&lt;img height="100" alt="ldap1" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccediendoaLDAPconCI_1029E/ldap1_thumb.jpg" width="161" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Accediendo al directorio activo de la organización desde .NET&lt;/h3&gt;  &lt;p&gt;Resumen:&lt;/p&gt;  &lt;p align="justify"&gt;Ejemplo de cómo crear una aplicación Windows que accede al directorio activo de la organización. Contiene ejemplos de cómo validar unas credenciales (usuario y password) en un dominio, cómo realizar impersonation para ejecutar nuestra aplicación con los credenciales de otro usuario, recuperar los nombres de las propiedades del objeto user del AD, y cómo obtener información y los grupos a los que pertenece el usuario actual.&lt;/p&gt;  &lt;p&gt;Artículos:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-i.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (I)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-ii.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (II)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iii.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (III)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iv.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (IV)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Artículos relacionados:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/07/10/correcci-243-n-funci-243-n-getuserldapproperties.aspx"&gt;Corrección función getUserLDAPProperties&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/07/16/howto-ldap-obtener-propiedades-de-la-clase-user.aspx"&gt;HowTo: LDAP, obtener propiedades de la clase user&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Código de ejemplo:&lt;/p&gt;   &lt;p&gt;Saludos desde Andorra,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=365" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Ejemplo/default.aspx">Ejemplo</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Serie/default.aspx">Serie</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category></item><item><title>ADO.NET Data Services – Entrevista en Channel 9</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/10/22/ado-net-data-services-entrevista-en-channel-9.aspx</link><pubDate>Wed, 22 Oct 2008 12:40:27 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:364</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=364</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/10/22/ado-net-data-services-entrevista-en-channel-9.aspx#comments</comments><description>&lt;p&gt;En este vídeo, Beth Massi entrevista a Saaid Kahn (Program Manager de Visual Studio Pro Tools team) y nos muestra cómo crear aplicaciones de n capas usando ADO.NET Data Services (Astoria) y el Entity Data Model.&lt;/p&gt;   &lt;br /&gt;&lt;a href="http://channel9.msdn.com/posts/funkyonex/ADONET-Data-Services-Astoria-in-Visual-Studio-2008-SP1/"&gt;ADO.NET Data Services (Astoria) in Visual Studio 2008 SP1&lt;/a&gt;  &lt;br /&gt;  &lt;p&gt;Absolutamente recomendable darle una ojeada. Dura poco más de un cuarto de hora y vale la pena.&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=364" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Videos/default.aspx">Videos</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Entrevista/default.aspx">Entrevista</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Channel9/default.aspx">Channel9</category></item><item><title>El Guille community Tour 2008 pasó por Andorra…</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/10/17/el-guille-community-tour-2008-pas-243-por-andorra.aspx</link><pubDate>Fri, 17 Oct 2008 14:24:45 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:363</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=363</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/10/17/el-guille-community-tour-2008-pas-243-por-andorra.aspx#comments</comments><description>&lt;p&gt;…y no he podido escribir nada hasta ahora… aisssss!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/LogoAndorraDotNetsmall_15148EB5.png"&gt;&lt;img title="LogoAndorraDotNetsmall" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="99" alt="LogoAndorraDotNetsmall" src="http://geeks.ms/blogs/lfranco/LogoAndorraDotNetsmall_thumb_789A2D85.png" width="121" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;La verdad es que he estado missing durante unos dias debido a que tengo una punta de trabajo terrible. Espero volver a dar un poco más la vara tanto aquí como el los foros online, de los que también he estado un poco desconectado.&lt;/p&gt;  &lt;p&gt;Pero a lo que iba: El pasado lunes 13 en &lt;a href="http://andorradotnet.com/" target="_blank"&gt;AndorraDotNet&lt;/a&gt; tuvimos la suerte de poder contar con dos ponentes de lujo: El &lt;a title="Guille" href="http://www.elguille.info/" target="_blank"&gt;Guille&lt;/a&gt; y David Salgado de Microsoft. Guille nos habló de las novedades de VB 9.0 como no podía ser de otra manera, y hubieron muchos ‘piques’ entre los defensores de VB y de C#, con lo que nos reímos mucho.. David nos regaló una fantástica demo de cómo construir una aplicación Web mediante ASP.NET, en la que empezamos con una solución en blanco y fue creando poco a poco los diversos elementos del proyecto. Por cierto, que sepas que ya me la han pedido!!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/DSC_3830_1D2E4BBB.jpg"&gt;&lt;img title="DSC_3830" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3830" src="http://geeks.ms/blogs/lfranco/DSC_3830_thumb_52C92884.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/DSC_3833_28E8B44F.jpg"&gt;&lt;img title="DSC_3833" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3833" src="http://geeks.ms/blogs/lfranco/DSC_3833_thumb_6C55D713.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Al final de la sesión tuvimos el típico sorteo de regalos, en el que algunos afortunados se fueron con un regalo entre las manos.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/DSC_3852_1E50084F.jpg"&gt;&lt;img title="DSC_3852" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3852" src="http://geeks.ms/blogs/lfranco/DSC_3852_thumb_7AB8FB58.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/DSC_3853_1EE0E699.jpg"&gt;&lt;img title="DSC_3853" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3853" src="http://geeks.ms/blogs/lfranco/DSC_3853_thumb_4DC8B9DF.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/DSC_3855_55DFE634.jpg"&gt;&lt;img title="DSC_3855" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3855" src="http://geeks.ms/blogs/lfranco/DSC_3855_thumb_0770752C.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/DSC_3857_7DAB0DB3.jpg"&gt;&lt;img title="DSC_3857" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3857" src="http://geeks.ms/blogs/lfranco/DSC_3857_thumb_281C6033.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;La audiencia estuvo sobre las casi 60 personas con perfiles muy diferentes, y aunque me hubiese gustado ver más gente de empresa (ya os tiraré de las orejas a los que no pudísteis asistir) no estuvo nada mal. Por nuestra parte seguiremos trabajando intentando cambiar la situación del país, ya que sigue siendo muy difícil hacer ver a los empresarios que la formación es un recurso vital para la buena marcha de un negocio (si, parece mentira pero hay mucha gente que todavía no lo tiene claro). Si queremos avanzar no hay que escatimar en formación y en I+D. Es por el bien del país!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/DSC_3845_1E56F8BB.jpg"&gt;&lt;img title="DSC_3845" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3845" src="http://geeks.ms/blogs/lfranco/DSC_3845_thumb_4CD2990C.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/DSC_3848_70FA844C.jpg"&gt;&lt;img title="DSC_3848" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="165" alt="DSC_3848" src="http://geeks.ms/blogs/lfranco/DSC_3848_thumb_41CDBA17.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Un agradecimiento especial al colega &lt;a href="http://www.tscp.eu/" target="_blank"&gt;Jan Arbona de TSCP&lt;/a&gt; por su colaboración en el evento, y por habernos tirado un cable en los momentos de estrés.    &lt;br /&gt;Gracias a todos y os espero en el próximo evento que ya estamos preparando!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;img src="http://andorradotnet.com/aggbug.aspx?PostID=363" width="1" height="1"&gt;</description><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/MVP/default.aspx">MVP</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Solidario/default.aspx">Solidario</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/Event/default.aspx">Event</category><category domain="http://andorradotnet.com/blogs/lfranco/archive/tags/AndorraDotNet/default.aspx">AndorraDotNet</category></item><item><title>MVP Open Day 2008 - Game over</title><link>http://andorradotnet.com/blogs/lfranco/archive/2008/10/05/mvp-open-day-2008-game-over.aspx</link><pubDate>Sun, 05 Oct 2008 18:17:52 GMT</pubDate><guid isPermaLink="false">b0fcac78-2c75-4423-8c0a-4c16f1829272:354</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://andorradotnet.com/blogs/lfranco/rsscomments.aspx?PostID=354</wfw:commentRss><comments>http://andorradotnet.com/blogs/lfranco/archive/2008/10/05/mvp-open-day-2008-game-over.aspx#comments</comments><description>&lt;p&gt;Otra vez en el tren de vuelta a casa. No puedo dejar de experimentar una sensación de &lt;em&gt;deja vu&lt;/em&gt;, como cada vez que viajo a Madrid en busca de aquellos que son como yo. Entenderme, no me considero un bicho raro ni mucho menos, lo que sucede es que vivo en un país de apenas 60.000 habitantes, un número que apenas llenaría la mitad de un estadio de fútbol moderno, y que la mayoría de pueblos grandes o ciudades pequeñas de España sobrepasan de largo. Joer, si Cuenca (con todo el respeto) tiene más habitantes :-)&lt;/p&gt; &lt;p&gt;Y claro, los números salen solos: De toda esta población hay poca gente del mundo de desarrollo de software, y menos todavía que tenga la misma pasión por el desarrollo que puedo tener yo. &lt;em&gt;Sólo un pequeño pueblo de irreductibles galos resiste ahora y siempre al invasor&lt;/em&gt;. Bueno, no es exactamente así, pero seguro que me entendéis :-P. Me estoy refiriendo a que gracias a la gente del grupo de usuarios de &lt;a href="http://www.andorradotnet.com"&gt;andorradotnet&lt;/a&gt;, que comparte mi misma pasión por la plataforma .NET se me hace más llevadero el estar tan desconectado (físicamente, que no realmente) de otros profesionales del tema.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02226.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02226" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02226_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02229.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02229" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02229_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02231.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02231" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02231_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;De este modo cuando voy a Madrid un par de veces al año, a uno de estos eventos en los que hay un nivelazo técnico importante, me hace disfrutar cada momento como un enano. Te pones a charlar con cualquiera sobre sobre arquitectura, características de nuestros lenguajes favoritos, favoritismos y manías que todos tenemos en nuestro trabajo, etc. Y como encima lo puedes hacer todo delante de una cerveza, hace que te sientas en el paraíso... Porque de eso se trata, somos tan freaks que cuando nos vamos de fiesta a tomar unas copas terminamos hablando de ciertas cosas que hacen que las mesas de al lado te miren con cara de &amp;quot;de dónde se han caído estos tíos&amp;quot;. Eso si, lo pasamos como enanos, jejeje...&lt;/p&gt; &lt;p&gt;Pero no me quiero ir por las ramas, que esto de estar en el tren sin wifi, y con dos horas por delante puede hacer que se me valla la olla un rato. De hecho este post es para comentar lo requetebien que lo he pasado en el MVP Open Day de este año.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02239.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02239" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02239_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfra