<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Sobre C#, LINQ y algo más...</title><subtitle type="html">&lt;img src="/users/avatar.aspx?userid=2620&amp;amp;lastmodified=633570213034730000" alt="" style="border-width:0px;" /&gt;El blog de &lt;strong&gt;Octavio Hernández Leal&lt;/strong&gt;</subtitle><id>http://geeks.ms/blogs/ohernandez/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/ohernandez/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/ohernandez/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2009-07-04T09:20:00Z</updated><entry><title>Applying LINQ to new data types</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2011/09/05/applying-linq-to-new-data-types.aspx" /><id>/blogs/ohernandez/archive/2011/09/05/applying-linq-to-new-data-types.aspx</id><published>2011-09-05T04:21:00Z</published><updated>2011-09-05T04:21:00Z</updated><content type="html">[This article was originally published in MSDN C# Developer Center , February 2008] Given the enormous expressive power that LINQ (Language Integrated Query) puts in the hands of developers, it is not surprising that we have started to search for ways to &amp;ldquo;LINQ-enable&amp;rdquo; more and more data types and technologies. As Dinesh Kulkarni humorously put it in this post , soon we will have even &amp;ldquo;LINQ to Coffee Machine&amp;rdquo; :-). .NET Framework 3.5 and C# 3.0 offer us several ways to achieve...(&lt;a href="http://geeks.ms/blogs/ohernandez/archive/2011/09/05/applying-linq-to-new-data-types.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200344" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /></entry><entry><title>"C# 3.0 y LINQ" disponible en formato PDF</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2011/04/27/quot-c-3-0-y-linq-quot-disponible-en-formato-pdf.aspx" /><id>/blogs/ohernandez/archive/2011/04/27/quot-c-3-0-y-linq-quot-disponible-en-formato-pdf.aspx</id><published>2011-04-27T06:52:00Z</published><updated>2011-04-27T06:52:00Z</updated><content type="html">&amp;quot;All over the world Everybody got the word ...&amp;quot; The Electric Light Orchestra , &amp;quot;All Over the World&amp;quot; (1980) Desde hace unos d&amp;iacute;as, todos los libros de la editorial Krasis Press (incluido mi &amp;quot; C# 3.0 y LINQ &amp;quot;) est&amp;aacute;n a la venta en formato PDF a precios, en mi opini&amp;oacute;n, muy razonables. Como hacen pr&amp;aacute;cticamente todas las dem&amp;aacute;s casas que editan contenidos digitales, las copias personalizadas se generan din&amp;aacute;micamente y llevan una traza...(&lt;a href="http://geeks.ms/blogs/ohernandez/archive/2011/04/27/quot-c-3-0-y-linq-quot-disponible-en-formato-pdf.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://geeks.ms/aggbug.aspx?PostID=193052" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="General" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/General/default.aspx" /></entry><entry><title>Libros recomendados</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2011/04/18/libros-recomendados.aspx" /><id>/blogs/ohernandez/archive/2011/04/18/libros-recomendados.aspx</id><published>2011-04-18T05:35:00Z</published><updated>2011-04-18T05:35:00Z</updated><content type="html">&lt;p align="right"&gt;﻿&amp;quot;So you run and you run to catch up with the sun but it&amp;#39;s sinking &lt;br /&gt;Racing around to come up behind you again...&amp;quot;&lt;br /&gt;&lt;strong&gt;Pink Floyd&lt;/strong&gt;, &amp;quot;Time&amp;quot;, from &amp;quot;The Dark Side of the Moon&amp;quot; (1973)&lt;/p&gt;
&lt;p&gt;De manera similar a lo que sugiere el tema inmortal de &lt;strong&gt;Pink Floyd&lt;/strong&gt;, esto de estar al d&amp;iacute;a en todas las tecnolog&amp;iacute;as que nos interesan se convierte cada vez m&amp;aacute;s en &lt;em&gt;misi&amp;oacute;n imposible&lt;/em&gt;: cuando crees que ya &amp;quot;controlas&amp;quot; la versi&amp;oacute;n &lt;strong&gt;N&lt;/strong&gt; de la tecnolog&amp;iacute;a &lt;strong&gt;X&lt;/strong&gt;, aparece su versi&amp;oacute;n &lt;strong&gt;N+1&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Durante los &amp;uacute;ltimos fines de semana, he estado intentando ponerme al d&amp;iacute;a en algunas de las tecnolog&amp;iacute;as que no utilizo de momento en el d&amp;iacute;a a d&amp;iacute;a y que han progresado bastante desde la &amp;uacute;ltima vez que &amp;quot;tropec&amp;eacute;&amp;quot; seriamente con ellas; concretamente, me refiero a &lt;strong&gt;Silverlight&lt;/strong&gt; y &lt;strong&gt;Entity Framework&lt;/strong&gt;. Para ello, me he apoyado en dos excelentes recursos en castellano, escritos por grandes amigos y a&amp;uacute;n mejores profesionales, que se me antojan ideales no solo para los desarrolladores .NET castellanohablantes que quieran ponerse al d&amp;iacute;a en las m&amp;aacute;s recientes novedades incorporadas a las respectivas tecnolog&amp;iacute;as, sino tambi&amp;eacute;n para aquellos que se aproximen por primera vez a ellas y necesiten una fuente que los lleve de la mano, pr&amp;aacute;cticamente desde cero y de una manera concisa, pero completa, a trav&amp;eacute;s de los m&amp;uacute;ltiples t&amp;oacute;picos que son simplemente imprescindibles para poder aplicarlas con &amp;eacute;xito. Me estoy refiriendo a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;&lt;strong&gt;Programaci&amp;oacute;n en Silverlight 4.0&lt;/strong&gt;&amp;quot;, de &lt;strong&gt;Marino Posadas&lt;/strong&gt; (Netalia, ISBN 978-84-93489535). Una obra que, a pesar de su t&amp;iacute;tulo, versa no solo sobre los temas m&amp;aacute;s directamente relacionados con la programaci&amp;oacute;n en s&amp;iacute;, sino tambi&amp;eacute;n sobre los que tienen que ver con el dise&amp;ntilde;o de interfaces de usuario; el cap&amp;iacute;tulo dedicado a Expression Blend 4 es un buen ejemplo de ello. Esta edici&amp;oacute;n no solo &amp;quot;toca&amp;quot; las nuevas caracter&amp;iacute;sticas que se incorporaron por primera vez en la versi&amp;oacute;n 4 de Silverlight (en particular, todo lo relacionado con la ejecuci&amp;oacute;n fuera del navegador), sino que adem&amp;aacute;s incluye un cap&amp;iacute;tulo que describe los fundamentos del desarrollo de aplicaciones Silverlight para Windows Phone 7.&lt;/li&gt;
&lt;li&gt;&amp;quot;&lt;strong&gt;ADO.NET Entity Framework 4.0. Aplicaciones y servicios centrado en datos&lt;/strong&gt;&amp;quot;, de &lt;strong&gt;Unai Zorrilla&lt;/strong&gt; et al (Krasis Press, ISBN 978-84-93669676). Aunque, por razones obvias (le tengo mucho cari&amp;ntilde;o a este libro, cuya primera versi&amp;oacute;n ayud&amp;eacute; a &amp;quot;traer al mundo&amp;quot;), puede que mi opini&amp;oacute;n no sea 100% imparcial, creo sinceramente que la presente edici&amp;oacute;n mejora sensiblemente la original, complementando muchos de los temas originales, poniendo en su lugar a algunos de ellos que por aquel entonces se antojaban m&amp;aacute;s relevantes, e incorporando excelentes presentaciones de pr&amp;aacute;cticamente todas las nuevas caracter&amp;iacute;sticas aparecidas con la versi&amp;oacute;n 4.0. Otro gran &amp;quot;plus&amp;quot; de esta nueva edici&amp;oacute;n es su mayor orientaci&amp;oacute;n pr&amp;aacute;ctica, con mejores ejemplos y un nuevo cap&amp;iacute;tulo, &amp;quot;EF 4.0 en el mundo real&amp;quot;, dedicado a presentar las l&amp;iacute;neas generales del desarrollo de aplicaciones corporativas en m&amp;uacute;ltiples capas basadas en EF 4.0 a trav&amp;eacute;s de un ejemplo disponible en Codeplex.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, dos excelentes obras, que recomiendo de coraz&amp;oacute;n desde aqu&amp;iacute; a los lectores. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;NOTA&lt;/span&gt;&lt;/strong&gt;: Las opiniones reflejadas en este art&amp;iacute;culo son m&amp;iacute;as propias, y no han sido revisadas ni aprobadas por la empresa en la que trabajo. &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Referencia musical&lt;/strong&gt;&lt;/span&gt;: Para m&amp;iacute;, el lugar que ocupa &amp;ldquo;&lt;strong&gt;The Dark Side of the Moon&lt;/strong&gt;&amp;rdquo; (1973) en el mapa de la cultura popular occidental contempor&amp;aacute;nea lo define una estad&amp;iacute;stica: &lt;strong&gt;741&lt;/strong&gt; (me apasionan las estad&amp;iacute;sticas; tal vez por eso sea que me aferro desesperadamente al b&amp;eacute;isbol, en estos tiempos en que arrasan el &lt;em&gt;soccer&lt;/em&gt; y el f&amp;uacute;tbol americano). 741 es el n&amp;uacute;mero de semanas consecutivas que estuvo &amp;quot;La cara oculta&amp;quot; en la lista Billboard de los 200 &amp;aacute;lbumes m&amp;aacute;s vendidos (entre 1973 y 1988). Fueron m&amp;aacute;s de 14 a&amp;ntilde;os, casi el doble de lo que hayan logrado alcanzar sus m&amp;aacute;s cercanos perseguidores. Y ello, a pesar de no tratarse de un producto fabricado para el consumo f&amp;aacute;cil, estrictamente hablando. Un disco simplemente imprescindible, al igual que la mayor&amp;iacute;a de los dem&amp;aacute;s trabajos de la banda, como &amp;quot;&lt;strong&gt;Wish You Were Here&lt;/strong&gt;&amp;quot; (1975) o &amp;quot;&lt;strong&gt;The Wall&lt;/strong&gt;&amp;quot; (1979).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=192523" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /></entry><entry><title>Despedida como MVP</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2011/01/10/despedida-como-mvp.aspx" /><id>/blogs/ohernandez/archive/2011/01/10/despedida-como-mvp.aspx</id><published>2011-01-10T07:38:00Z</published><updated>2011-01-10T07:38:00Z</updated><content type="html">&lt;p align="right"&gt;﻿&amp;quot;Es de bien nacidos ser agradecidos&amp;quot;&lt;br /&gt;(Refr&amp;aacute;n que me ense&amp;ntilde;&amp;oacute; mi abuela Guillermina)&lt;/p&gt;
&lt;p&gt;Este post est&amp;aacute; listo desde hace algunos d&amp;iacute;as, pero decid&amp;iacute; posponer su publicaci&amp;oacute;n hasta que salieran de la lista de los m&amp;aacute;s le&amp;iacute;dos los posts de j&amp;uacute;bilo de mis compa&amp;ntilde;eros que muy merecidamente han sido renovados por un a&amp;ntilde;o m&amp;aacute;s o elegidos como MVP por primera vez, para no restarles protagonismo. &lt;/p&gt;
&lt;p&gt;En mi caso, dej&amp;eacute; de pertenecer al programa MVP el pasado 1 de enero. Y lo primero que debo dejar claro es que la decisi&amp;oacute;n fue 100% correcta. He estado casi todo el a&amp;ntilde;o fuera de Espa&amp;ntilde;a, sin participar en las actividades de la comunidad. Por otra parte, he estado envuelto en un proyecto apasionante, aprendiendo un mont&amp;oacute;n de cosas nuevas, y lo poco que pod&amp;iacute;a haber hecho para haber merecido tal vez una renovaci&amp;oacute;n como MVP, simplemente qued&amp;oacute; relegado a un plano secundario. Me refiero, por ejemplo, a cosas como publicar una versi&amp;oacute;n actualizada a C# 4.0 del libro &amp;ldquo;C# 3.0 y LINQ&amp;rdquo;, o haber ayudado a mi buen amigo &lt;strong&gt;Unai&lt;/strong&gt; en su excelente actualizaci&amp;oacute;n del libro de Entity Framework a la versi&amp;oacute;n 4.0 (que ya tengo por aqu&amp;iacute;; pienso escribir sobre &amp;eacute;l en los pr&amp;oacute;ximos d&amp;iacute;as, tan pronto lo termine de leer). As&amp;iacute; que, totalmente, &lt;em&gt;Mea culpa&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;M&amp;aacute;s all&amp;aacute; de las florituras, el objetivo de este post es uno solo: expresar mi agradecimiento infinito a &lt;strong&gt;Microsoft&lt;/strong&gt; por haberse fijado en m&amp;iacute; por all&amp;aacute; por 2004 y hacerme miembro del programa. La gran mayor&amp;iacute;a de las cosas buenas que han ocurrido en mi vida profesional a partir de entonces tienen que ver, de forma u otra, con esa decisi&amp;oacute;n. En espec&amp;iacute;fico, quiero dar las gracias a los dos MVP Lead con los que tuve el honor de interactuar, &lt;strong&gt;Cristina Gonz&amp;aacute;lez Herrero&lt;/strong&gt; y &lt;strong&gt;Alberto Amescua Bernier&lt;/strong&gt;, dos personas y profesionales &amp;ldquo;como la copa de un pino&amp;rdquo; que se desvivieron siempre a diario por transmitir nuestras quejas, opiniones y sugerencias a los equipos de producto, ponernos en contacto con las personas adecuadas dentro de esa gran empresa, y hacer otros miles de cosas m&amp;aacute;s para que nuestra experiencia de MVP fuera lo m&amp;aacute;s completa posible. Desde aqu&amp;iacute; les mando un fuerte abrazo, as&amp;iacute; como a todos los colegas MVP y empleados de Microsoft a los que he tenido el placer de conocer durante este hermoso viaje. Un afectuoso saludo tambi&amp;eacute;n para los reci&amp;eacute;n elegidos; me agrada sobremanera ver que el programa se rejuvenece y los &amp;ldquo;mayores&amp;rdquo; (como yo :-) van cediendo el protagonismo a las caras j&amp;oacute;venes. Se me antoja que nadie como los cubanos debemos tener clara la importancia de la alternancia y la renovaci&amp;oacute;n para la vitalidad de cualquier proyecto. &lt;/p&gt;
&lt;p&gt;&amp;iexcl;Seguimos en contacto! &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;NOTA&lt;/span&gt;&lt;/strong&gt;: Las opiniones reflejadas en este art&amp;iacute;culo son m&amp;iacute;as propias, y no han sido revisadas ni aprobadas por la empresa en la que trabajo. &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Referencia literaria&lt;/strong&gt;&lt;/span&gt;: &amp;ldquo;Mea culpa&amp;rdquo; es un libro muy recomendable de uno de mis escritores favoritos, &lt;strong&gt;Guillermo Cabrera Infante&lt;/strong&gt;. Nadie ha sabido captar como &amp;eacute;l el embrujo de mi Habana natal, esa Habana que persigue en los sue&amp;ntilde;os a los habaneros por muchas d&amp;eacute;cadas que hayan transcurrido desde que te escapaste (&amp;iquest;intentaste escapar?) de all&amp;iacute;. Y ya que hablamos sobre Premios Nobel de Literatura, no se pierda el reciente discurso de aceptaci&amp;oacute;n del premio de otro gigante de las letras ibero-americanas, &lt;strong&gt;Mario Vargas Llosa&lt;/strong&gt;, disponible &lt;a target="_blank" href="http://nobelprize.org/nobel_prizes/literature/laureates/2010/vargas_llosa-lecture_sp.pdf" title="Vargas Llosa, al aceptar el Premio Nobel"&gt;aqu&amp;iacute;&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=187022" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="Personal" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/Personal/default.aspx" /></entry><entry><title>Silverlight Firestarter</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/12/09/silverlight-firestarter.aspx" /><id>/blogs/ohernandez/archive/2010/12/09/silverlight-firestarter.aspx</id><published>2010-12-09T06:34:00Z</published><updated>2010-12-09T06:34:00Z</updated><content type="html">&lt;p align="right"&gt;﻿&amp;quot;It was the heat of the moment&lt;br /&gt;Telling me what my heart meant...&amp;quot;&lt;br /&gt;(&amp;quot;Heat of the Moment&amp;quot;, &lt;strong&gt;Asia&lt;/strong&gt;, 1982) &lt;/p&gt;
&lt;p&gt;Mirando los v&amp;iacute;deos del evento &lt;strong&gt;Silverlight Firestarter&lt;/strong&gt; (todos accesibles desde &lt;a href="http://blogs.msdn.com/b/usisvde/archive/2010/12/04/silverlight-firestarter-sessions-on-video-11-labs-online.aspx"&gt;aqu&amp;iacute;&lt;/a&gt;), se me ocurre que &lt;a href="http://www.zdnet.com/blog/microsoft/microsoft-our-strategy-with-silverlight-has-shifted/7834"&gt;las palabras de &lt;strong&gt;Bob Muglia&lt;/strong&gt;&lt;/a&gt;, pronunciadas (espero) &lt;i&gt;en el calor del momento&lt;/i&gt;, ayudaron a fin de cuentas a llamar la atenci&amp;oacute;n sobre Silverlight y sobre este excelente evento...&lt;/p&gt;
&lt;p&gt;Han corrido r&amp;iacute;os de tinta con relaci&amp;oacute;n a esas declaraciones, pero si quiere leer a&amp;uacute;n algo m&amp;aacute;s sobre el tema, puedo recomendarle los dos siguientes art&amp;iacute;culos:&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;&amp;iquest;Silverlight vs HTML5? &amp;iquest;Son buenos los est&amp;aacute;ndares?&amp;quot;, de mi maestro y amigo &lt;strong&gt;Miguel Katrib&lt;/strong&gt;, disponible &lt;a href="http://www.weboomania.com/index.php/2010/11/23/silverlight-vs-html5-son-buenos-los-estndares/"&gt;aqu&amp;iacute;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&amp;quot;El caso SilverGate&amp;quot;, de &lt;strong&gt;Braulio D&amp;iacute;ez&lt;/strong&gt; y &lt;strong&gt;Reyes Garc&amp;iacute;a&lt;/strong&gt;, en la &lt;strong&gt;dotNetMan&amp;iacute;a&lt;/strong&gt; de este mes (n&amp;ordm; 76). Este art&amp;iacute;culo incluye adem&amp;aacute;s referencias a las declaraciones de los principales actores que estuvieron implicados en el drama.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;NOTA&lt;/span&gt;&lt;/strong&gt;: Las opiniones reflejadas en este art&amp;iacute;culo son m&amp;iacute;as propias, y no han sido revisadas ni aprobadas por la empresa en la que trabajo. &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: A principios de los &amp;#39;80, los grandes grupos de rock progresivo empezaron a desintegrarse bajo los influjos de la comercializaci&amp;oacute;n: era demasiado el dinero que se ganaba &amp;quot;vendiendo el alma al diablo&amp;quot; y dedic&amp;aacute;ndose a interpretar productos mucho m&amp;aacute;s asequibles al &amp;quot;gran p&amp;uacute;blico&amp;quot;. Comienzan entonces a surgir proyectos comerciales (&amp;iquest;super-grupos?) orientados a explotar las im&amp;aacute;genes individuales de sus integrantes, a la misma vez que interpretando principalmente baladas y otros temas &amp;quot;suaves&amp;quot; capaces de subir a lo m&amp;aacute;s alto de las listas de &amp;eacute;xitos. Uno de los primeros representantes de esta tendencia fue &lt;strong&gt;Asia&lt;/strong&gt;, banda en la que confluyeron &lt;strong&gt;John Wetton&lt;/strong&gt; (&lt;strong&gt;King Crimson&lt;/strong&gt;), &lt;strong&gt;Steve Howe&lt;/strong&gt; y &lt;strong&gt;Geoff Downes&lt;/strong&gt; (&lt;strong&gt;Yes&lt;/strong&gt;) y &lt;strong&gt;Carl Palmer&lt;/strong&gt; (&lt;strong&gt;Emerson, Lake &amp;amp; Palmer&lt;/strong&gt;). &amp;quot;Heat of the Moment&amp;quot;, de su primer disco (llamado tambien &amp;quot;Asia&amp;quot;), fue su primer gran &amp;eacute;xito.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=185784" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /></entry><entry><title>Simplificando la programación asíncrona</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/11/01/simplificando-la-programaci-243-n-as-237-ncrona.aspx" /><id>/blogs/ohernandez/archive/2010/11/01/simplificando-la-programaci-243-n-as-237-ncrona.aspx</id><published>2010-10-31T23:22:00Z</published><updated>2010-10-31T23:22:00Z</updated><content type="html">&lt;p align="right"&gt;﻿&amp;quot;Parallel our sights&lt;br /&gt;And we will find, that we need to be where we belong&lt;br /&gt;Parallel our heights&lt;br /&gt;Display our rights and wrongs, and always keep it strong.&amp;quot;&lt;br /&gt;(&amp;quot;Parallels&amp;quot;, &lt;strong&gt;Yes&lt;/strong&gt;, 1977) &lt;/p&gt;
&lt;p&gt;Despu&amp;eacute;s de un buen tiempo sin escribir, &amp;quot;rumiando&amp;quot; a cada rato contra la incorporaci&amp;oacute;n a C# del tipado din&amp;aacute;mico y toda la parafernalia asociada, a los que sigo a&amp;uacute;n sin encontrarles la &amp;quot;raz&amp;oacute;n de estar&amp;quot; (ciertos anuncios recientes parecen hasta darme la raz&amp;oacute;n), la presentaci&amp;oacute;n de la nueva &lt;strong&gt;Async CTP&lt;/strong&gt; durante la PDC 2010 ha venido a insuflarme esp&amp;iacute;ritu y confianza en que no todo est&amp;aacute; perdido y quedan muchas cosas interesantes a&amp;uacute;n por venir en relaci&amp;oacute;n con mi lenguaje favorito. Pero el lector no deber&amp;iacute;a hacerme mucho caso en lo relativo a &lt;strong&gt;dynamic&lt;/strong&gt;: creo que desde hace alg&amp;uacute;n tiempo me estoy haciendo conservador (aunque, pienso, sin traspasar a&amp;uacute;n la delgada l&amp;iacute;nea que separa &amp;quot;conservador&amp;quot; de &amp;quot;reaccionario&amp;quot; ;-). Es algo que pens&amp;eacute; que jam&amp;aacute;s podr&amp;iacute;a ocurrirme a m&amp;iacute;, educado &lt;span style="text-decoration:line-through;"&gt;en la falacia &lt;/span&gt;bajo el signo de la &amp;quot;revoluci&amp;oacute;n interminable&amp;quot;; probablemente cosas de la edad :-).&lt;/p&gt;
&lt;p&gt;En cuanto a la reci&amp;eacute;n publicada &lt;strong&gt;Async CTP&lt;/strong&gt;, pienso que se trata de una propuesta excelente, que simplificar&amp;aacute; en gran medida la programaci&amp;oacute;n as&amp;iacute;ncrona, cuya complejidad de implementaci&amp;oacute;n con la versi&amp;oacute;n actual de C# es alta, algo de lo que puede dar fe cualquiera que se haya enfrentado al desarrollo de una aplicaci&amp;oacute;n medianamente &amp;quot;concurrente&amp;quot;. A trav&amp;eacute;s de la introducci&amp;oacute;n de dos nuevas palabras reservadas, &lt;strong&gt;async&lt;/strong&gt; y &lt;strong&gt;await&lt;/strong&gt;, la programaci&amp;oacute;n as&amp;iacute;ncrona en futuras versiones de C# se har&amp;aacute; casi tan clara y natural como la s&amp;iacute;ncrona, dejando al compilador la tarea de generar pr&amp;aacute;cticamente todo el c&amp;oacute;digo de fontaner&amp;iacute;a asociado al tratamiento de los &lt;em&gt;callbacks&lt;/em&gt; y aprovechando al m&amp;aacute;ximo las bondades que ofrece la Task Parallel Library (TPL) introducida en .NET 4.0.&lt;/p&gt;
&lt;p&gt;Para descargar la CTP y acceder a una gran cantidad de documentaci&amp;oacute;n y ejemplos (incluyendo un v&amp;iacute;deo introductorio de &lt;strong&gt;Anders Hejlsberg&lt;/strong&gt;), visite &lt;a href="http://msdn.microsoft.com/en-us/async"&gt;http://msdn.microsoft.com/en-us/async&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;NOTA&lt;/span&gt;&lt;/strong&gt;: Las opiniones reflejadas en este art&amp;iacute;culo son m&amp;iacute;as propias, y no han sido revisadas ni aprobadas por la empresa en la que trabajo. &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: Para esta ocasi&amp;oacute;n, he utilizado un tema de uno de los &amp;quot;padres&amp;quot; del rock progresivo, &lt;strong&gt;Yes&lt;/strong&gt;; una banda que dura ya m&amp;aacute;s de 40 a&amp;ntilde;os, durante los cuales, a pesar de los numerosos cambios de personal, ha sido capaz de mantener en todo momento un alt&amp;iacute;simo nivel interpretativo. Mis &amp;aacute;lbumes favoritos de Yes son los pertenecientes al primer ciclo de la banda, uno de cuyos m&amp;aacute;ximos exponentes es &amp;quot;Going for the One&amp;quot; (1977); &amp;aacute;lbum al que pertenece el tema &amp;quot;Parallels&amp;quot;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=184161" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Generalización del cálculo de productos cartesianos con LINQ</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/06/28/generalizaci-243-n-del-c-225-lculo-de-productos-cartesianos-con-linq.aspx" /><id>/blogs/ohernandez/archive/2010/06/28/generalizaci-243-n-del-c-225-lculo-de-productos-cartesianos-con-linq.aspx</id><published>2010-06-28T15:57:00Z</published><updated>2010-06-28T15:57:00Z</updated><content type="html">&lt;p&gt;En un &lt;a target="_blank" href="http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx" title="Eric Lippert - Cartesian products with LINQ"&gt;interesante post&lt;/a&gt; (como siempre), el genial &lt;strong&gt;Eric Lippert&lt;/strong&gt; muestra c&amp;oacute;mo generalizar el c&amp;aacute;lculo de &lt;strong&gt;n&lt;/strong&gt; productos cartesianos utilizando LINQ. Creo haber estado entre los primeros que identific&amp;oacute; el operador &lt;strong&gt;SelectMany&lt;/strong&gt; de LINQ con el&amp;nbsp;c&amp;aacute;lculo de un producto cartesiano, &lt;a target="_blank" href="http://shop.campusmvp.com/Product-C-3.0-y-LINQ_1.aspx" title="C# 3.0 y LINQ"&gt;por all&amp;aacute; por 2007&lt;/a&gt; (parece que haya pasado una eternidad :-).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=178608" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term="LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/LINQ/default.aspx" /></entry><entry><title>Interview with Raj Pai, Group Program Manager of the VS Languages Team</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/05/19/interview-with-raj-pai-group-program-manager-of-the-vs-languages-team.aspx" /><id>/blogs/ohernandez/archive/2010/05/19/interview-with-raj-pai-group-program-manager-of-the-vs-languages-team.aspx</id><published>2010-05-19T07:02:00Z</published><updated>2010-05-19T07:02:00Z</updated><content type="html">&lt;p&gt;Visual Studio Languages Community Program Manager &lt;strong&gt;Lisa Feigenbaum&lt;/strong&gt; has published in &lt;a target="_blank" href="http://blogs.msdn.com/lisa/archive/2010/05/17/interview-with-group-program-manager-raj-pai-on-vb-c-f-ironpython-and-ironruby-in-visual-studio-2010.aspx" title="dotNetMan&amp;iacute;a Interview with Raj Pai"&gt;her blog&lt;/a&gt; (with the kind permission of &lt;strong&gt;&lt;a target="_blank" href="http://www.dotnetmania.com" title="dotNetMan&amp;iacute;a"&gt;dotNetMan&amp;iacute;a&lt;/a&gt;&lt;/strong&gt;) the English version of &lt;a target="_blank" href="http://blogs.msdn.com/lisa/archive/2010/05/17/interview-with-group-program-manager-raj-pai-on-vb-c-f-ironpython-and-ironruby-in-visual-studio-2010.aspx" title="dotNetMan&amp;iacute;a Interview with Raj Pai"&gt;the interview I did for the magazine with &lt;strong&gt;Raj Pai&lt;/strong&gt;&lt;/a&gt;, Group Program Manager of the Visual Studio Languages Team at Microsoft. The interview was originally published (in Spanish) in the recent special issue dedicated to Visual Studio 2010; in it, the conversation mainly revolves around this version&amp;#39;s new features across the different supported programming languages, and then there&amp;#39;s some more. Enjoy!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=176913" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Movin' out</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/04/19/movin-out.aspx" /><id>/blogs/ohernandez/archive/2010/04/19/movin-out.aspx</id><published>2010-04-19T06:17:00Z</published><updated>2010-04-19T06:17:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;We gotta move out&lt;br /&gt;&amp;#39;Cause the city&amp;#39;s movin&amp;#39; in...&amp;quot;&lt;br /&gt;(&amp;quot;Movin&amp;#39; out&amp;quot;, &lt;strong&gt;Aerosmith&lt;/strong&gt;, 1973)&lt;/p&gt;
&lt;p&gt;Despu&amp;eacute;s de unos d&amp;iacute;as en primera plana del &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx" title="MSDN C# Developer Center"&gt;C# Developer Center&lt;/a&gt;&lt;/strong&gt; de MSDN, mi art&amp;iacute;culo corto &amp;quot;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vcsharp/ee957404.aspx" title="Solving Combinatory Problems with LINQ"&gt;Solving Combinatory Problems with LINQ&lt;/a&gt;&lt;/strong&gt;&amp;quot; sale de la lista de novedades, desplazado con toda justicia por ese suceso hist&amp;oacute;rico que es la aparici&amp;oacute;n de .NET Framework 4 y Visual Studio 2010:&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/MovinOut.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x500/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/MovinOut.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: Otro de los monstruos del rock que ha sobrevivido hasta el presente es &lt;strong&gt;Aerosmith&lt;/strong&gt;, un grupo que no necesita presentaci&amp;oacute;n entre los que tienen&amp;nbsp;50 &amp;oacute; menos :-). &amp;quot;&lt;strong&gt;Movin&amp;#39; out&lt;/strong&gt;&amp;quot; es un tema de su primer &amp;aacute;lbum, &amp;quot;&lt;strong&gt;Aerosmith&lt;/strong&gt;&amp;quot; (1973), con el que sentaron las bases para los que vendr&amp;iacute;an despu&amp;eacute;s, de los que recomiendo especialmente los que considero sus dos mejores trabajos, &amp;quot;&lt;strong&gt;Toys in the Attic&lt;/strong&gt;&amp;quot; (1975) y &amp;quot;&lt;strong&gt;Rocks&lt;/strong&gt;&amp;quot; (1976).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=175045" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /><category term="LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/LINQ/default.aspx" /></entry><entry><title>Resolviendo con las tuplas las carencias de los tipos anónimos</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/04/19/resolviendo-con-las-tuplas-las-carencias-de-los-tipos-an-243-nimos.aspx" /><id>/blogs/ohernandez/archive/2010/04/19/resolviendo-con-las-tuplas-las-carencias-de-los-tipos-an-243-nimos.aspx</id><published>2010-04-19T05:57:00Z</published><updated>2010-04-19T05:57:00Z</updated><content type="html">&lt;p&gt;Unos d&amp;iacute;as despu&amp;eacute;s de ver la luz el art&amp;iacute;culo &amp;quot;&lt;strong&gt;Tuplas en .NET Framework 4&lt;/strong&gt;&amp;quot;, que co-escrib&amp;iacute; para &lt;strong&gt;&lt;a target="_blank" href="http://www.dotnetmania.com" title="dotNetMan&amp;iacute;a"&gt;dotNetMan&amp;iacute;a&lt;/a&gt;&lt;/strong&gt; con mi maestro y amigo &lt;strong&gt;Miguel Katrib&lt;/strong&gt; en el marco del ejemplar especial dedicado a la salida de .NET Framework 4 y Visual Studio 2010, me encuentro con este &lt;a target="_blank" href="http://blogs.msdn.com/jaredpar/archive/2010/03/23/dictionary-tkey-tvalue-trygetvalue-and-anonymous-types.aspx" title="Post de Jared Parsons"&gt;post de &lt;strong&gt;Jared Parsons&lt;/strong&gt;&lt;/a&gt;, miembro del Languages Team de Microsoft, en el que se describe&amp;nbsp;un posible escenario de&amp;nbsp;utilizaci&amp;oacute;n de las tuplas para suplir las carencias actuales de los tipos an&amp;oacute;nimos, con un esp&amp;iacute;ritu muy similar al que presentamos en nuestro art&amp;iacute;culo. &amp;iexcl;Recomendado!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=175041" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry><entry><title>More fun with LINQ</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/04/08/more-fun-with-linq.aspx" /><id>/blogs/ohernandez/archive/2010/04/08/more-fun-with-linq.aspx</id><published>2010-04-08T06:01:00Z</published><updated>2010-04-08T06:01:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;Standing on a bridge, watch the water passing under me &lt;br /&gt;It must&amp;rsquo;ve been much harder when there was no bridge just water...&amp;quot;&lt;br /&gt;(&amp;quot;Funny the Way it is&amp;quot;, &lt;strong&gt;Dave Matthews Band&lt;/strong&gt;, 2009)&lt;/p&gt;
&lt;p&gt;Ayer se public&amp;oacute; en el &amp;aacute;rea de &lt;strong&gt;Community Content&lt;/strong&gt; de &lt;strong&gt;MSDN&lt;/strong&gt; mi art&amp;iacute;culo corto &amp;quot;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vcsharp/ee957404.aspx" title="Solving Combinatory Problems with LINQ"&gt;Solving Combinatory Problems with LINQ&lt;/a&gt;&lt;/strong&gt;&amp;quot;, un divertimento basado en LINQ al estilo de otros que ya he publicado tanto en &amp;quot;&lt;strong&gt;C# 3.0 y LINQ&lt;/strong&gt;&amp;quot; como aqu&amp;iacute;. Estos puzzles siempre me traen a la memoria los problemas que pon&amp;iacute;amos a nuestros alumnos hace veintitantos a&amp;ntilde;os en la Universidad de La Habana, y me hacen pensar en c&amp;oacute;mo el progreso hace f&amp;aacute;cil lo que un tiempo atr&amp;aacute;s era bastante m&amp;aacute;s dif&amp;iacute;cil, que es precisamente a lo que se hace alusi&amp;oacute;n en la referencia musical de hoy.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: De entre los grupos contempor&amp;aacute;neos de m&amp;uacute;sica popular, uno de los que m&amp;aacute;s me gustan por su calidad,&amp;nbsp;originalidad y eclecticismo es &lt;strong&gt;Dave Matthews Band&lt;/strong&gt;. Su m&amp;uacute;sica es una interesante combinaci&amp;oacute;n de rock, jazz, soul, bluegrass e incluso m&amp;uacute;sica cl&amp;aacute;sica, y en sus conciertos acostumbran a improvisar alrededor de sus canciones al estilo de las &lt;em&gt;jam sessions&lt;/em&gt; tan t&amp;iacute;picas del jazz. &amp;quot;&lt;strong&gt;Funny the Way it is&lt;/strong&gt;&amp;quot; fue el primer single del disco &amp;quot;&lt;strong&gt;Big Whiskey and the GrooGrux King&lt;/strong&gt;&amp;quot; (2009), que vi por primera vez (y no dej&amp;eacute; escapar :-) en un Starbucks, a mediados del a&amp;ntilde;o pasado.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=174124" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /><category term="LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/LINQ/default.aspx" /></entry><entry><title>There's Know Place Like Home</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/04/06/there-s-know-place-like-home.aspx" /><id>/blogs/ohernandez/archive/2010/04/06/there-s-know-place-like-home.aspx</id><published>2010-04-06T07:17:00Z</published><updated>2010-04-06T07:17:00Z</updated><content type="html">&lt;p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="250"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/250x300/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/Portada69.jpg" align="center" border="0" alt="" /&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Vuelvo de nuevo a la carga para resaltar los principales contenidos que ofrece el m&amp;aacute;s reciente n&amp;uacute;mero de la revista &lt;a target="_blank" href="http://www.dotnetmania.com" title="dotNetMan&amp;iacute;a"&gt;dotNetMan&amp;iacute;a&lt;/a&gt;, en esta ocasi&amp;oacute;n dedicado casi &amp;iacute;ntegramente al suceso m&amp;aacute;s importante del&amp;nbsp;a&amp;ntilde;o en lo que a la plataforma .NET se refiere: la salida de .NET Framework 4 y Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;Como art&amp;iacute;culo de portada, este mes se ofrece &amp;quot;&lt;strong&gt;Programaci&amp;oacute;n paralela con VS 2010 y .NET Framework 4&lt;/strong&gt;&amp;quot;, de &lt;strong&gt;Leonardo&amp;nbsp;Paneque&lt;/strong&gt; y &lt;strong&gt;Miguel Katrib&lt;/strong&gt;, una introducci&amp;oacute;n seria a las principales puertas que se abren ante nosotros con las nuevas versiones para aprovechar la potencia de los ya quasi-omnipresentes m&amp;uacute;ltiples n&amp;uacute;cleos y procesadores; tambi&amp;eacute;n en relaci&amp;oacute;n con las nuevas posibilidades de las librer&amp;iacute;as, &lt;strong&gt;Javier Holguera&lt;/strong&gt; presenta &amp;quot;&lt;strong&gt;Novedades en WCF 4&lt;/strong&gt;&amp;quot;. En el &amp;aacute;rea de los lenguajes de programaci&amp;oacute;n, &lt;strong&gt;Luis Miguel Blanco&lt;/strong&gt; describe las novedades de Visual Basic 10, mientras que &lt;strong&gt;Marino Posadas&lt;/strong&gt; se encarga de la presentaci&amp;oacute;n ante el p&amp;uacute;blico del nuevo lenguaje que se a&amp;ntilde;ade a la familia en esta versi&amp;oacute;n con el art&amp;iacute;culo &amp;quot;&lt;strong&gt;F#: un mundo de posibilidades&lt;/strong&gt;&amp;quot;. Para no olvidar al entorno de desarrollo en s&amp;iacute;, &lt;strong&gt;Bruno Capuano&lt;/strong&gt; describe una de las novedades m&amp;aacute;s destacadas al respecto: la depuraci&amp;oacute;n hist&amp;oacute;rica. Finalmente, &lt;strong&gt;Alberto Poblaci&amp;oacute;n&lt;/strong&gt; da respuesta a varias de las preguntas relacionadas con las nuevas versiones que con m&amp;aacute;s frecuencia se repiten en los foros de desarrollo.&lt;/p&gt;
&lt;p&gt;En lo personal, este mes he tenido la ocasi&amp;oacute;n (y el honor) de co-escribir el art&amp;iacute;culo &amp;quot;&lt;strong&gt;Tuplos en .NET Framework 4&lt;/strong&gt;&amp;quot; con mi maestro y amigo &lt;strong&gt;Miguel Katrib&lt;/strong&gt;; no escrib&amp;iacute;amos nada juntos desde 1991, cuando publicamos, para&amp;nbsp;la instituci&amp;oacute;n que considero mi Alma M&amp;aacute;ter, la Universidad de La Habana,&amp;nbsp;un cuaderno de &amp;quot;Ejercicios de programaci&amp;oacute;n en Pascal&amp;quot; que guardo &amp;quot;bajo un cristal&amp;quot; - los cubanos sabr&amp;aacute;n a qu&amp;eacute; me refiero. Espero que los lectores nos disculpen el uso del t&amp;eacute;rmino &amp;quot;tuplos&amp;quot; en lugar del com&amp;uacute;nmente utilizado en la pen&amp;iacute;nsula ib&amp;eacute;rica &amp;quot;tuplas&amp;quot; -&amp;nbsp;un peque&amp;ntilde;o, pero sentido homenaje al sitio del que provenimos.&lt;/p&gt;
&lt;hr /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="2"&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Notas culturales&lt;/span&gt;&lt;/strong&gt;: En esta ocasi&amp;oacute;n, la referencia musical est&amp;aacute; en el propio t&amp;iacute;tulo del post. &amp;quot;&lt;strong&gt;There&amp;#39;s &lt;span style="text-decoration:underline;"&gt;Know&lt;/span&gt; Place Like Home&lt;/strong&gt;&amp;quot; (2009) es el t&amp;iacute;tulo del &amp;uacute;ltimo doble-CD y DVD de mi banda favorita, &lt;strong&gt;Kansas&lt;/strong&gt;, en el que volvieron a su ciudad natal, &lt;strong&gt;Topeka&lt;/strong&gt; (&amp;iquest;&lt;a target="_blank" href="http://www.pcworld.com/article/190601/topeka_thats_google_kansas_to_you.html" title="Topeka is Google for a month"&gt;o es Google&lt;/a&gt;?), para grabar un concierto en directo con una orquesta sinf&amp;oacute;nica local. Como seguramente sabr&amp;aacute;, &amp;quot;&lt;strong&gt;There&amp;#39;s &lt;span style="text-decoration:underline;"&gt;no&lt;/span&gt; place like home&lt;/strong&gt;&amp;quot; es una frase de &lt;strong&gt;Dorothy&lt;/strong&gt;, la ni&amp;ntilde;a protagonista de &amp;quot;&lt;strong&gt;El mago de Oz&lt;/strong&gt;&amp;quot;, que era precisamente de Kansas; el trueque de &amp;quot;&lt;strong&gt;no&lt;/strong&gt;&amp;quot; por &amp;quot;&lt;strong&gt;know&lt;/strong&gt;&amp;quot; es una &amp;quot;marca registrada&amp;quot; de la banda, que aplic&amp;oacute; la f&amp;oacute;rmula por primera vez en el famoso disco &amp;quot;&lt;strong&gt;Point of Know Return&lt;/strong&gt;&amp;quot; (1977). En plena adolescencia, este disco me ense&amp;ntilde;&amp;oacute; c&amp;oacute;mo bastan dos letras para transformar la negaci&amp;oacute;n en certeza y la desesperaci&amp;oacute;n en esperanza.&lt;/p&gt;
&lt;p&gt;Por otra parte, &amp;quot;guardados bajo un cristal&amp;quot; es un verso de un poema de nuestro h&amp;eacute;roe nacional &lt;strong&gt;Jos&amp;eacute; Mart&amp;iacute;&lt;/strong&gt;, &amp;quot;Los zapaticos de rosa&amp;quot;, que todo cubano se sabe desde la infancia. Desde aqu&amp;iacute; las gracias a mi buena amiga &lt;strong&gt;Marta Polanco&lt;/strong&gt;, de quien tom&amp;eacute; prestada la idea de usar un verso de este poema del Maestro.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=173919" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /></entry><entry><title>Entrevista a Jeffrey Richter, y mucho más...</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2010/03/04/entrevista-a-jeffrey-richter-y-mucho-m-225-s.aspx" /><id>/blogs/ohernandez/archive/2010/03/04/entrevista-a-jeffrey-richter-y-mucho-m-225-s.aspx</id><published>2010-03-04T06:20:00Z</published><updated>2010-03-04T06:20:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;&amp;#39;I&amp;#39;m older now, and still runnin&amp;#39;&lt;br /&gt;Against the wind&amp;quot;&lt;br /&gt;(&amp;quot;Against the Wind&amp;quot;, &lt;strong&gt;Bob Seger&lt;/strong&gt;, 1980)&lt;/p&gt;
&lt;p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="230" rowspan="2"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/DNM68.jpg"&gt;&lt;img height="300" width="225" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/DNM68.jpg" border="1" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Despu&amp;eacute;s de muchos meses sin escribir pr&amp;aacute;cticamente nada (C# y el ingl&amp;eacute;s no cuentan), retorno este mes a &lt;a target="_blank" href="http://www.dotnetmania.com/" title="dotNetMan&amp;iacute;a"&gt;dotNetMan&amp;iacute;a&lt;/a&gt; con una entrevista al gran&amp;nbsp;&lt;strong&gt;Jeffrey Richter&lt;/strong&gt;, que acaba de publicar una nueva edici&amp;oacute;n (la 3ra., actualizada para .NET Framework 4 y C# 4.0) de su excelente libro &amp;quot;&lt;strong&gt;&lt;a target="_blank" href="http://www.amazon.com/CLR-via-Pro-Developer-Jeffrey-Richter/dp/0735627045/" title="&amp;quot;CLR via C# en Amazon.com"&gt;CLR via C#&lt;/a&gt;&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/CLRviaCS.jpg"&gt;&lt;img height="140" width="115" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/ohernandez/CLRviaCS.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;Por otra parte, este ejemplar, que recomiendo de coraz&amp;oacute;n a los lectores, incluye excelentes art&amp;iacute;culos como &amp;quot;&lt;strong&gt;Tipado din&amp;aacute;mico en C# 4.0&lt;/strong&gt;&amp;quot;, de &lt;a target="_blank" href="http://www.weboomania.com" title="Blog del Grupo WEBOO"&gt;&lt;strong&gt;Mario del Valle&lt;/strong&gt; y &lt;strong&gt;Miguel Katrib&lt;/strong&gt;&lt;/a&gt;, que resume de manera perfecta los fundamentos de&amp;nbsp;esta nueva posibilidad que se abre ante los desarrolladores de C# y que ciertos ortodoxos (como yo :-) a&amp;uacute;n no acaban de aceptar del todo, y &amp;quot;&lt;strong&gt;Acceso a datos en Silverlight con WCF RIA Services&lt;/strong&gt;&amp;quot;, de &lt;strong&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/lmblanco/" title="Blog de Luis Miguel Blanco"&gt;Luis Miguel Blanco&lt;/a&gt;&lt;/strong&gt;, que le permitir&amp;aacute; &amp;quot;ponerse en &amp;oacute;rbita&amp;quot; r&amp;aacute;pidamente&amp;nbsp;en todo lo relativo a la creaci&amp;oacute;n y consumo de este novedoso tipo de servicios.&lt;/p&gt;
&lt;p&gt;&amp;iexcl;No se lo pierda!&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: Esta vez la referencia musical va dedicada a mi buen amigo &lt;strong&gt;Paco Mar&amp;iacute;n&lt;/strong&gt;, que no ceja en su empe&amp;ntilde;o de llevar a los lectores mes tras mes una publicaci&amp;oacute;n impresa de calidad. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bob Seger&lt;/strong&gt; es uno de los int&amp;eacute;rpretes m&amp;aacute;s destacados de lo que hoy se denomina&amp;nbsp;rock cl&amp;aacute;sico, y varios de sus temas, como el aqu&amp;iacute; mencionado &amp;quot;&lt;strong&gt;Against the Wind&lt;/strong&gt;&amp;quot;, pero tambi&amp;eacute;n &amp;quot;&lt;strong&gt;Mainstreet&lt;/strong&gt;&amp;quot;, &amp;quot;&lt;strong&gt;Night Moves&lt;/strong&gt;&amp;quot;, &amp;quot;&lt;strong&gt;Hollywood Nights&lt;/strong&gt;&amp;quot;&amp;nbsp;o &amp;quot;&lt;strong&gt;Turn the Page&lt;/strong&gt;&amp;quot; (aunque este &amp;uacute;ltimo probablemente es m&amp;aacute;s conocido en la versi&amp;oacute;n que hizo a&amp;ntilde;os despu&amp;eacute;s &lt;strong&gt;Metallica&lt;/strong&gt;), pueden a&amp;uacute;n o&amp;iacute;rse con frecuencia en diferentes medios. Es de destacar tambi&amp;eacute;n que &amp;quot;Against the Wind&amp;quot; forma parte de la banda sonora de ese gran caleidoscopio de la cultura popular norteamericana de la &amp;eacute;poca que es la pel&amp;iacute;cula &amp;quot;&lt;strong&gt;Forrest Gump&lt;/strong&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Post Scriptum&lt;/strong&gt;&lt;/span&gt;. Me alegra ver c&amp;oacute;mo la idea de asociar una referencia cultural a los posts, que yo copi&amp;eacute; de &lt;a target="_blank" href="http://geeks.ms/blogs/palvarez/" title="Blog de Pablo A. Doval"&gt;Pablito&lt;/a&gt;, va tomando cierta fuerza. Ultimamente he visto hacerlo a amigos como &lt;a target="_blank" href="http://geeks.ms/blogs/gvelez/archive/2009/12/31/sentado-en-la-d-225-rsena-de-la-bah-237-a-mirando-a-sharepoint-pasar.aspx" title="Post de G. V&amp;eacute;lez &amp;quot;Sitting at the Dock of the Bay&amp;quot;"&gt;Gustavo V&amp;eacute;lez&lt;/a&gt;&amp;nbsp;o &lt;a target="_blank" href="http://geeks.ms/blogs/eecsaky/archive/2009/12/31/2009-the-final-countdown.aspx" title="Post de E. Estrada &amp;quot;The Final Countdown&amp;quot;"&gt;Eugenio Estrada&lt;/a&gt;, e incluso &amp;iexcl;al mism&amp;iacute;simo &lt;a target="_blank" href="http://blogs.msdn.com/ericlippert/archive/2010/02/22/should-i-specify-a-timeout.aspx" title="Post de E. Lippert &amp;quot;Careful with that Axe, Eugene&amp;quot;"&gt;Eric Lippert&lt;/a&gt;, del equipo de C#! En mi opini&amp;oacute;n, de esta manera los posts ayudan a difundir cultura en general, y no solamente cultura inform&amp;aacute;tica.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=168732" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Code Contracts en dotNetManía</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/12/06/code-contracts-en-dotnetman-237-a.aspx" /><id>/blogs/ohernandez/archive/2009/12/06/code-contracts-en-dotnetman-237-a.aspx</id><published>2009-12-06T19:10:00Z</published><updated>2009-12-06T19:10:00Z</updated><content type="html">&lt;p align="right"&gt;[1] &amp;quot;&amp;#39;Cause rockin&amp;#39; and rollin&amp;#39; (&lt;em&gt;and bloggin&amp;#39; - OH&lt;/em&gt;)&lt;br /&gt;Is only howlin&amp;#39; at the moon...&amp;quot;&lt;br /&gt;(&amp;quot;Magnum Opus&amp;quot;, &lt;strong&gt;Kansas&lt;/strong&gt;, 1975)&lt;/p&gt;
&lt;p align="right"&gt;[2] &amp;quot;You make loving (&lt;em&gt;programming- OH&lt;/em&gt;) fun...&lt;br /&gt;It&amp;#39;s all I wanna do!&amp;quot;&lt;br /&gt;(&amp;quot;You make loving fun&amp;quot;, &lt;strong&gt;Fleetwood Mac&lt;/strong&gt;, 1977)&lt;/p&gt;
&lt;p&gt;Salgo de mi cueva para aullar [1] un poco, en esta ocasi&amp;oacute;n para recomendar a mis lectores el art&amp;iacute;culo &amp;quot;&lt;strong&gt;Programaci&amp;oacute;n por Contratos. Un&amp;nbsp;deseo hecho realidad&lt;/strong&gt;&amp;quot;, de &lt;strong&gt;Miguel Katrib&lt;/strong&gt; y &lt;strong&gt;Jorge Luis de Armas&lt;/strong&gt; (&lt;a target="_blank" href="http://www.dotnetmania.com/Articulos/065/index.html" title="dotNetMan&amp;iacute;a n&amp;ordm; 65"&gt;dotNetMan&amp;iacute;a n&amp;ordm; 65&lt;/a&gt;), que resume de manera excelente (en unas 12 p&amp;aacute;ginas, bastante m&amp;aacute;s de lo habitual para un art&amp;iacute;culo de la revista)&amp;nbsp;lo que representa y aporta la incorporaci&amp;oacute;n de &lt;strong&gt;Code Contracts&lt;/strong&gt; a la pr&amp;oacute;xima versi&amp;oacute;n 4.0 de .NET Famework. El Maestro no necesita presentaci&amp;oacute;n alguna; de Jorge Luis (de quien tuve el honor de ser tutor de su trabajo de tesis hace ya m&amp;aacute;s de una d&amp;eacute;cada) baste decir que, am&amp;eacute;n de excelente persona y profesional, tiene el privilegio de haber sido el primer&amp;nbsp; cubano en ganar un primer premio en una olimpiada &lt;span style="text-decoration:line-through;"&gt;mundial&lt;/span&gt; internacional de Matem&amp;aacute;ticas.&lt;br /&gt;&lt;br /&gt;Con la adici&amp;oacute;n de Code Contracts a la librer&amp;iacute;a de clases de .NET (a lo que muy probablemente seguir&amp;aacute; la adici&amp;oacute;n de las correspondientes instrucciones en futuras versiones de C# y VB), Microsoft definitivamente ha cumplido un sue&amp;ntilde;o de mucha gente a lo largo de mucho tiempo, y sin duda nos har&amp;aacute; la programaci&amp;oacute;n mucho m&amp;aacute;s amena y divertida [2] en el futuro.&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: Como de mi banda favorita, &lt;a target="_blank" href="http://www.kansasband.com" title="Kansas"&gt;&lt;strong&gt;Kansas&lt;/strong&gt;&lt;/a&gt;, y uno de mis &amp;aacute;lbumes favoritos, &lt;strong&gt;Leftoverture&lt;/strong&gt; (1975), ya he hablado y seguramente volver&amp;eacute; a hablar aqu&amp;iacute;, esta vez toca presentar (si es que el t&amp;eacute;rmino es adecuado) a &lt;strong&gt;Fleetwood Mac&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike Fleetwood&lt;/strong&gt; y &lt;strong&gt;John McVie&lt;/strong&gt; ya se hab&amp;iacute;an ganado un espacio en la historia del rock desde finales de los &amp;#39;60 con temas como &amp;quot;&lt;strong&gt;Albatross&lt;/strong&gt;&amp;quot;; pero en 1975 dieron un giro espectacular a su carrera e incorporaron al grupo a dos fenomenales compositores e int&amp;eacute;rpretes: &lt;strong&gt;Stevie Nicks&lt;/strong&gt; (su tema &amp;quot;&lt;strong&gt;Landslide&lt;/strong&gt;&amp;quot; es de los que no se olvidan) y &lt;strong&gt;Lindsey Buckingham&lt;/strong&gt;. Ya desde antes formaba parte de la banda &lt;strong&gt;Christine McVie&lt;/strong&gt;, esposa entonces de John. El primer &amp;aacute;lbum con esta nueva formaci&amp;oacute;n, &amp;quot;&lt;strong&gt;Fleetwood Mac&lt;/strong&gt;&amp;quot; (1975), sent&amp;oacute; las bases para lo que vendr&amp;iacute;a despu&amp;eacute;s: el &amp;quot;&lt;strong&gt;Rumours&lt;/strong&gt;&amp;quot; (1977), que tom&amp;oacute; por asalto el circuito comercial y no par&amp;oacute; hasta convertirse en el disco m&amp;aacute;s vendido de todos los tiempos, r&amp;eacute;cord que solo ceder&amp;iacute;an a&amp;ntilde;os despu&amp;eacute;s al &amp;quot;&lt;strong&gt;Thriller&lt;/strong&gt;&amp;quot; del recientemente fallecido &lt;strong&gt;Michael Jackson&lt;/strong&gt;. De aquella &amp;eacute;poca recuerdo c&amp;oacute;mo desfilaron por lo m&amp;aacute;s alto del American Top Forty temas como &amp;quot;&lt;strong&gt;Don&amp;#39;t Stop&lt;/strong&gt;&amp;quot;, &amp;quot;&lt;strong&gt;Dreams&lt;/strong&gt;&amp;quot;, &amp;quot;&lt;strong&gt;You Make Lovin&amp;#39; Fun&lt;/strong&gt;&amp;quot; y &amp;quot;&lt;strong&gt;Go Your Own Way&lt;/strong&gt;&amp;quot;,&amp;nbsp;en un &amp;quot;qu&amp;iacute;tate tu,&amp;nbsp;pa&amp;#39; ponerme yo&amp;quot; que no se recordaba desde la &amp;eacute;poca de los Beatles. &amp;iexcl;Y eso que, como ocurre casi siempre, las mejores canciones del disco, que hoy son cl&amp;aacute;sicos del rock (me refiero a temas como &amp;quot;&lt;strong&gt;The Chain&lt;/strong&gt;&amp;quot; o &amp;quot;&lt;strong&gt;Second Hand News&lt;/strong&gt;&amp;quot;) no fueron catalogadas como singles! En mi opini&amp;oacute;n, un ejemplo de &amp;eacute;xito comercial avalado por calidad. Y un pu&amp;ntilde;ado de canciones que a&amp;uacute;n suenas frescas m&amp;aacute;s de treinta a&amp;ntilde;os despu&amp;eacute;s. Recomendado.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=162032" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /></entry><entry><title>Buscando "El símbolo perdido" con LINQ (II)</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/10/19/buscando-quot-el-s-237-mbolo-perdido-quot-con-linq-ii.aspx" /><id>/blogs/ohernandez/archive/2009/10/19/buscando-quot-el-s-237-mbolo-perdido-quot-con-linq-ii.aspx</id><published>2009-10-19T05:59:00Z</published><updated>2009-10-19T05:59:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;Now I know you&amp;#39;re all king horse&lt;br /&gt;Between tenderness and brute force...&amp;quot;&lt;br /&gt;(&amp;quot;King Horse&amp;quot;, &lt;strong&gt;Elvis Costello&lt;/strong&gt;, 2007)&lt;/p&gt;
&lt;p&gt;Continuando con el problema propuesto en el &lt;a target="_blank" href="http://geeks.ms/blogs/ohernandez/archive/2009/10/12/buscando-simbolo.aspx" title="Post anterior"&gt;post anterior&lt;/a&gt; (basado en &amp;quot;&lt;strong&gt;El s&amp;iacute;mbolo perdido&lt;/strong&gt;&amp;quot;, la &amp;uacute;ltima obra de &lt;strong&gt;Dan Brown&lt;/strong&gt;), aqu&amp;iacute; presento el c&amp;oacute;digo final utilizado para resolver el problema, as&amp;iacute; como un an&amp;aacute;lisis somero de los resultados obtenidos.&lt;/p&gt;
&lt;p&gt;La adici&amp;oacute;n de las condiciones que faltan al programa del post anterior&amp;nbsp;(que la suma de los&amp;nbsp;cuatro &amp;quot;cuadrantes&amp;quot;, m&amp;aacute;s la del cuadrado central, coincida con la de las filas, columnas y diagonales) nos permite reducir el n&amp;uacute;mero de &amp;quot;variables libres&amp;quot; sobre las que el programa debe iterar a 7, con lo que la cantidad de combinaciones a probar es del orden de &lt;strong&gt;MAX^7&lt;/strong&gt;, donde MAX es el valor m&amp;aacute;ximo que queremos poder almacenar en cualquier casilla.Inicialmente establec&amp;iacute; MAX a 100, con lo que el n&amp;uacute;mero&amp;nbsp;de combinaciones a intentar era realmente enorme. Pero el problema result&amp;oacute; m&amp;aacute;s &amp;quot;flojo&amp;quot; de lo que pensaba: en unos dos d&amp;iacute;as de c&amp;aacute;lculo ininterrumpido, &lt;strong&gt;Rainmaker&lt;/strong&gt; ya hab&amp;iacute;a encontrado unas 500.000 soluciones, y el valor de la primera variable (&lt;strong&gt;a11&lt;/strong&gt;) a&amp;uacute;n segu&amp;iacute;a siendo 1. As&amp;iacute; que decid&amp;iacute; no torturar m&amp;aacute;s al pobre amigo y detuve la ejecuci&amp;oacute;n. A continuaci&amp;oacute;n, el primero de los cuadrados obtenidos:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;1&lt;/td&gt;
&lt;td align="right" width="29"&gt;4&lt;/td&gt;
&lt;td align="right" width="29"&gt;11&lt;/td&gt;
&lt;td align="right" width="29"&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;26&lt;/td&gt;
&lt;td align="right" width="29"&gt;14&lt;/td&gt;
&lt;td align="right" width="29"&gt;3&lt;/td&gt;
&lt;td align="right" width="29"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;12&lt;/td&gt;
&lt;td align="right" width="29"&gt;7&lt;/td&gt;
&lt;td align="right" width="29"&gt;21&lt;/td&gt;
&lt;td align="right" width="29"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;6&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Entonces decid&amp;iacute; restringir la b&amp;uacute;squeda a los cuadrados en los que el n&amp;uacute;mero m&amp;aacute;ximo utilizado fuera el &lt;strong&gt;20&lt;/strong&gt;, lo que redujo considerablemente la cantidad de combinaciones a probar. En algo menos de un minuto, ya ten&amp;iacute;a a mi disposici&amp;oacute;n los 320 cuadrados v&amp;aacute;lidos existentes. De nuevo, aqu&amp;iacute; solo muestro el primero de ellos; el lector interesado en buscar uno m&amp;aacute;s &amp;quot;bonito&amp;quot; puede ejecutar el programa y estudiar sus resultados. &lt;/p&gt;
&lt;div align="center"&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;11&lt;/td&gt;
&lt;td align="right" width="29"&gt;1&lt;/td&gt;
&lt;td align="right" width="29"&gt;13&lt;/td&gt;
&lt;td align="right" width="29"&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;18&lt;/td&gt;
&lt;td align="right" width="29"&gt;14&lt;/td&gt;
&lt;td align="right" width="29"&gt;4&lt;/td&gt;
&lt;td align="right" width="29"&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;3&lt;/td&gt;
&lt;td align="right" width="29"&gt;9&lt;/td&gt;
&lt;td align="right" width="29"&gt;17&lt;/td&gt;
&lt;td align="right" width="29"&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;12&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;As&amp;iacute; que aqu&amp;iacute; est&amp;aacute; mi modesto homenaje a &lt;strong&gt;Visual Studio 2010&lt;/strong&gt; - un programa que utiliza LINQ y que se me antoja combina,&amp;nbsp;usando las palabras de Elvis Costello,&amp;nbsp;&amp;quot;ternura y fuerza bruta&amp;quot; (pero, &amp;iquest;en qu&amp;eacute; medida cada una de ellas, amigo lector? :-)&amp;nbsp;.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;C&amp;oacute;digo utilizado&lt;/span&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System;&lt;br /&gt;&lt;strong&gt;using&lt;/strong&gt; System.IO;&lt;br /&gt;&lt;strong&gt;using&lt;/strong&gt; System.Linq;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;namespace&lt;/strong&gt; LostSymbol&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;class&lt;/strong&gt; Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;private const int&lt;/strong&gt; MAX = 20;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;static void&lt;/strong&gt; Main(&lt;strong&gt;string&lt;/strong&gt;[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;const int&lt;/strong&gt; firstSeed = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;const int&lt;/strong&gt; secondSeed = 10;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;var&lt;/strong&gt; res =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* first row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a11 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a11 != firstSeed &amp;amp;&amp;amp; a11 != secondSeed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a12 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a12 != firstSeed &amp;amp;&amp;amp; a12 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a12 != a11 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a13 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a13 != firstSeed &amp;amp;&amp;amp; a13 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a13 != a11 &amp;amp;&amp;amp; a13 != a12&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a14 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a14 != firstSeed &amp;amp;&amp;amp; a14 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a14 != a11 &amp;amp;&amp;amp; a14 != a12 &amp;amp;&amp;amp; a14 != a13 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; sum = a11 + a12 + a13 + a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* second row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a21 in Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a21 != firstSeed &amp;amp;&amp;amp; a21 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a21 != a11 &amp;amp;&amp;amp; a21 != a12 &amp;amp;&amp;amp; a21 != a13 &amp;amp;&amp;amp; a21 != a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a22 = sum - (a11 + a12 + a21)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a22 &amp;gt; 0 &amp;amp;&amp;amp; a22 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a22 != firstSeed &amp;amp;&amp;amp; a22 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a22 != a21 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a22 != a11 &amp;amp;&amp;amp; a22 != a12 &amp;amp;&amp;amp; a22 != a13 &amp;amp;&amp;amp; a22 != a14 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a23 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a23 != firstSeed &amp;amp;&amp;amp; a23 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a23 != a21 &amp;amp;&amp;amp; a23 != a22 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a23 != a11 &amp;amp;&amp;amp; a23 != a12 &amp;amp;&amp;amp; a23 != a13 &amp;amp;&amp;amp; a23 != a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a24 = sum - (a21 + a22 + a23)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a24 &amp;gt; 0 &amp;amp;&amp;amp; a24 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a24 != firstSeed &amp;amp;&amp;amp; a24 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a24 != a21 &amp;amp;&amp;amp; a24 != a22 &amp;amp;&amp;amp; a24 != a23 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a24 != a11 &amp;amp;&amp;amp; a24 != a12 &amp;amp;&amp;amp; a24 != a13 &amp;amp;&amp;amp; a24 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a13 + a14 + a23 + a24 == sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* second quadrant */&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* third row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a31 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a31 != firstSeed &amp;amp;&amp;amp; a31 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31 != a11 &amp;amp;&amp;amp; a31 != a12 &amp;amp;&amp;amp; a31 != a13 &amp;amp;&amp;amp; a31 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31 != a21 &amp;amp;&amp;amp; a31 != a22 &amp;amp;&amp;amp; a31 != a23 &amp;amp;&amp;amp; a31 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a32 = sum - (a12 + a22 + firstSeed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a32 &amp;gt; 0 &amp;amp;&amp;amp; a32 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != firstSeed &amp;amp;&amp;amp; a32 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != a31 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != a11 &amp;amp;&amp;amp; a32 != a12 &amp;amp;&amp;amp; a32 != a13 &amp;amp;&amp;amp; a32 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != a21 &amp;amp;&amp;amp; a32 != a22 &amp;amp;&amp;amp; a32 != a23 &amp;amp;&amp;amp; a32 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a33 = sum - (a13 + a23 + secondSeed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a33 &amp;gt; 0 &amp;amp;&amp;amp; a33 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != firstSeed &amp;amp;&amp;amp; a33 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != a31 &amp;amp;&amp;amp; a33 != a32 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != a11 &amp;amp;&amp;amp; a33 != a12 &amp;amp;&amp;amp; a33 != a13 &amp;amp;&amp;amp; a33 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != a21 &amp;amp;&amp;amp; a33 != a22 &amp;amp;&amp;amp; a33 != a23 &amp;amp;&amp;amp; a33 != a24 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a22 + a23 + a32 + a33 == sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* middle quadrant */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a34 = sum - (a31 + a32 + a33)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a34 &amp;gt; 0 &amp;amp;&amp;amp; a34 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != firstSeed &amp;amp;&amp;amp; a34 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != a31 &amp;amp;&amp;amp; a34 != a32 &amp;amp;&amp;amp; a34 != a33 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != a11 &amp;amp;&amp;amp; a34 != a12 &amp;amp;&amp;amp; a34 != a13 &amp;amp;&amp;amp; a34 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != a21 &amp;amp;&amp;amp; a34 != a22 &amp;amp;&amp;amp; a34 != a23 &amp;amp;&amp;amp; a34 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* fourth row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a41 = sum - (a11 + a21 + a31)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a41 &amp;gt; 0 &amp;amp;&amp;amp; a41 &amp;lt; MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != firstSeed &amp;amp;&amp;amp; a41 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != a11 &amp;amp;&amp;amp; a41 != a12 &amp;amp;&amp;amp; a41 != a13 &amp;amp;&amp;amp; a41 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != a21 &amp;amp;&amp;amp; a41 != a22 &amp;amp;&amp;amp; a41 != a23 &amp;amp;&amp;amp; a41 != a24 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != a31 &amp;amp;&amp;amp; a41 != a32 &amp;amp;&amp;amp; a41 != a33 &amp;amp;&amp;amp; a41 != a34 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 + a32 + a23 + a14 == sum &amp;amp;&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* right-to-left diagonal */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31 + a32 + a41 + firstSeed == sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* fourth quadrant */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a42 = firstSeed &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a43 = secondSeed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a44 = sum - (a14 + a24 + a34)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a44 &amp;gt; 0 &amp;amp;&amp;amp; a44 &amp;lt; MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != firstSeed &amp;amp;&amp;amp; a44 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a41 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a11 &amp;amp;&amp;amp; a44 != a12 &amp;amp;&amp;amp; a44 != a13 &amp;amp;&amp;amp; a44 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a21 &amp;amp;&amp;amp; a44 != a22 &amp;amp;&amp;amp; a44 != a23 &amp;amp;&amp;amp; a44 != a24 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a31 &amp;amp;&amp;amp; a44 != a32 &amp;amp;&amp;amp; a44 != a33 &amp;amp;&amp;amp; a44 != a34 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 + firstSeed + secondSeed + a44 == sum &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a11 + a22 + a33 + a44 == sum &amp;amp;&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* left-to-right diagonal */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 + a34 + a43 + a44 == sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* third quadrant */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;select new&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a11, a12, a13, a14,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a21, a22, a23, a24,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31, a32, a33, a34,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41, a42, a43, a44,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;using&lt;/strong&gt; (StreamWriter sw = &lt;strong&gt;new&lt;/strong&gt; StreamWriter(&amp;quot;&lt;a&gt;C:\\TEMP\\Solutions.txt&lt;/a&gt;&amp;quot;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;Start : &amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy/MM/dd hh:mm:ss&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;int&lt;/strong&gt; n = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;foreach&lt;/strong&gt; (&lt;strong&gt;var&lt;/strong&gt; r &lt;strong&gt;in&lt;/strong&gt; res)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;Solution &amp;quot; + n);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;=============&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a11, r.a12, r.a13, r.a14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a21, r.a22, r.a23, r.a24);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a31, r.a32, r.a33, r.a34);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a41, r.a42, r.a43, r.a44);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Flush(); n++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;Finish: &amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy/MM/dd hh:mm:ss&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: &lt;strong&gt;Elvis Costello&lt;/strong&gt;, cantante y compositor nacido en Inglaterra, lleva m&amp;aacute;s de treinta a&amp;ntilde;os de &amp;eacute;xito desde que debut&amp;oacute; en 1977 con el excelente album &amp;quot;&lt;strong&gt;My Aim is True&lt;/strong&gt;&amp;quot;. Su eclecticismo musical y letras&amp;nbsp;trabajadas lo han convertido en un referente para varias generaciones de m&amp;uacute;sicos.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158316" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /><category term="LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/LINQ/default.aspx" /></entry><entry><title>Buscando "El símbolo perdido" con LINQ</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/10/12/buscando-simbolo.aspx" /><id>/blogs/ohernandez/archive/2009/10/12/buscando-simbolo.aspx</id><published>2009-10-12T01:44:00Z</published><updated>2009-10-12T01:44:00Z</updated><content type="html">&lt;p&gt;&amp;Uacute;ltimamente he estado leyendo en los ratos libres &amp;quot;&lt;strong&gt;El s&amp;iacute;mbolo perdido&lt;/strong&gt;&amp;quot;, la &amp;uacute;ltima obra de &lt;strong&gt;Dan Brown&lt;/strong&gt;, el autor de &amp;quot;El c&amp;oacute;digo Da Vinci&amp;quot; y otros &lt;em&gt;best sellers&lt;/em&gt;. Como parte de los hechos a los que se enfrenta el protagonista durante sus peripecias para descifrar un oculto misterio, el autor nos presenta un cuadrado ultra-m&amp;aacute;gico que aparece en el cuadro &amp;quot;&lt;strong&gt;Melencolia I&lt;/strong&gt;&amp;quot; (1514), del pintor alem&amp;aacute;n &lt;strong&gt;Alberto Durero&lt;/strong&gt;:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;16&lt;/td&gt;
&lt;td align="right" width="29"&gt;3&lt;/td&gt;
&lt;td align="right" width="29"&gt;2&lt;/td&gt;
&lt;td align="right" width="29"&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;5&lt;/td&gt;
&lt;td align="right" width="29"&gt;10&lt;/td&gt;
&lt;td align="right" width="29"&gt;11&lt;/td&gt;
&lt;td align="right" width="29"&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;9&lt;/td&gt;
&lt;td align="right" width="29"&gt;6&lt;/td&gt;
&lt;td align="right" width="29"&gt;7&lt;/td&gt;
&lt;td align="right" width="29"&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;4&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;14&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;La &amp;quot;magia&amp;quot; de&amp;nbsp;este cuadrado (m&amp;aacute;s informaci&amp;oacute;n &lt;a target="_blank" href="http://mathworld.wolfram.com/DuerersMagicSquare.html" title="Cuadrado m&amp;aacute;gico de Durero"&gt;aqu&amp;iacute;&lt;/a&gt;) radica en el hecho de que no solo todas las filas, todas las columnas y las dos diagonales suman 34; adicionalmente, los cuatro &amp;quot;cuadrantes&amp;quot; del cuadrado tambi&amp;eacute;n suman 34, as&amp;iacute; como las cuatro casillas centrales. Por &amp;uacute;ltimo, las dos casillas centrales de la &amp;uacute;ltima fila son 15 y 14, que concatenadas producen &amp;#39;1514&amp;#39;, el a&amp;ntilde;o en el que Durero pint&amp;oacute; el cuadro. &lt;/p&gt;
&lt;p&gt;En cierto momento de la lectura, pens&amp;eacute;: &amp;iquest;y por qu&amp;eacute; no buscar un cuadrado similar, pero que tenga en esas casillas inferiores &amp;#39;20&amp;#39; y &amp;#39;10&amp;#39; (en homenaje, claro est&amp;aacute;,&amp;nbsp;a &lt;strong&gt;Visual Studio 2010&lt;/strong&gt; :-)? La siguiente pregunta surgi&amp;oacute; casi inmediatamente: &amp;iquest;y por qu&amp;eacute; no utilizar LINQ, que es parte del producto y de seguro nos permitir&amp;aacute; especificar el problema de una manera natural, para resolverlo?&lt;/p&gt;
&lt;p&gt;Al final de este post incluyo el c&amp;oacute;digo que escrib&amp;iacute; en pocos minutos para resolver una simplificaci&amp;oacute;n del problema que me pareci&amp;oacute; ya bastante dif&amp;iacute;cil: simplemente buscar un cuadrado tal, que todas las filas, columnas y diagonales sumen lo mismo, con &amp;#39;20&amp;#39; y &amp;#39;10&amp;#39; en las casillas centrales inferiores. Pens&amp;eacute; que encontrar una soluci&amp;oacute;n tal pod&amp;iacute;a requerir un enorme tiempo de c&amp;aacute;lculo en el peor de los casos dada la complejidad algor&amp;iacute;tmica del programa. Pero como &amp;uacute;ltimamente mi viejo amigo &lt;strong&gt;Rainmaker&lt;/strong&gt; (llamado as&amp;iacute;, por supuesto, en honor a un tema de &lt;strong&gt;Kansas&lt;/strong&gt;) se pasa los d&amp;iacute;as ocioso y solito en casa, &amp;iquest;por qu&amp;eacute; no intentarlo y&amp;nbsp;de paso alegrarle un poco la vida?&lt;/p&gt;
&lt;p&gt;Al final, la simplificaci&amp;oacute;n result&amp;oacute; ser mucho menos dura de lo que pensaba, y a los pocos minutos el programa estaba escupiendo respuestas con cierta frecuencia. A continuaci&amp;oacute;n, la primera de las soluciones encontradas:&lt;/p&gt;
&lt;div align="center"&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;1&lt;/td&gt;
&lt;td align="right" width="29"&gt;2&lt;/td&gt;
&lt;td align="right" width="29"&gt;15&lt;/td&gt;
&lt;td align="right" width="29"&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;14&lt;/td&gt;
&lt;td align="right" width="29"&gt;21&lt;/td&gt;
&lt;td align="right" width="29"&gt;5&lt;/td&gt;
&lt;td align="right" width="29"&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;23&lt;/td&gt;
&lt;td align="right" width="29"&gt;4&lt;/td&gt;
&lt;td align="right" width="29"&gt;17&lt;/td&gt;
&lt;td align="right" width="29"&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right" width="29"&gt;9&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" width="29"&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Por supuesto, este cuadrado no cumple con todas las condiciones del cuadrado de Durero. Desde aqu&amp;iacute; invito a los lectores a completar mi programa con las condiciones que faltan o crear el suyo propio y buscar un cuadrado que cumpla todas las condiciones (si es que existe). &lt;/p&gt;
&lt;p&gt;Sobre la utilizaci&amp;oacute;n de LINQ para resolver problemas de este tipo ya escrib&amp;iacute; en su momento (&lt;a href="http://geeks.ms/blogs/ohernandez/archive/2007/04/25/191-debemos-aprender-una-nueva-forma-de-escribir-bucles.aspx"&gt;http://geeks.ms/blogs/ohernandez/archive/2007/04/25/191-debemos-aprender-una-nueva-forma-de-escribir-bucles.aspx&lt;/a&gt;), aunque sigo teniendo algunas dudas existenciales al respecto :-). Un experimento que se me antoja interesante ser&amp;iacute;a el de comparar el rendimiento de implementaciones como &amp;eacute;sta al utilizar LINQ y PLINQ en m&amp;aacute;quinas con m&amp;uacute;ltiples n&amp;uacute;cleos. Pero ese experimento, por mi parte, tendr&amp;aacute; que esperar&amp;hellip;&lt;/p&gt;
&lt;p align="center"&gt;(Vea la continuaci&amp;oacute;n &lt;a target="_self" href="http://geeks.ms/blogs/ohernandez/archive/2009/10/19/buscando-quot-el-s-237-mbolo-perdido-quot-con-linq-ii.aspx" title="Buscando &amp;quot;El s&amp;iacute;mbolo perdido&amp;quot;(II)"&gt;aqu&amp;iacute;&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;C&amp;oacute;digo utilizado&lt;/span&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System;&lt;br /&gt;&lt;strong&gt;using&lt;/strong&gt; System.IO;&lt;br /&gt;&lt;strong&gt;using&lt;/strong&gt; System.Linq;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;namespace&lt;/strong&gt; LostSymbol&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;class&lt;/strong&gt; Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;private const int&lt;/strong&gt; MAX = 100;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;static void&lt;/strong&gt; Main(&lt;strong&gt;string&lt;/strong&gt;[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;const int&lt;/strong&gt; firstSeed = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;const int&lt;/strong&gt; secondSeed = 10;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;var&lt;/strong&gt; res =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* first row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a11 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a11 != firstSeed &amp;amp;&amp;amp; a11 != secondSeed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a12 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a12 != firstSeed &amp;amp;&amp;amp; a12 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a12 != a11 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a13 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a13 != firstSeed &amp;amp;&amp;amp; a13 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a13 != a11 &amp;amp;&amp;amp; a13 != a12&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a14 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a14 != firstSeed &amp;amp;&amp;amp; a14 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a14 != a11 &amp;amp;&amp;amp; a14 != a12 &amp;amp;&amp;amp; a14 != a13 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; sum = a11 + a12 + a13 + a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* second row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a21 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a21 != firstSeed &amp;amp;&amp;amp; a21 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a21 != a11 &amp;amp;&amp;amp; a21 != a12 &amp;amp;&amp;amp; a21 != a13 &amp;amp;&amp;amp; a21 != a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a22 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a22 != firstSeed &amp;amp;&amp;amp; a22 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a22 != a21 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a22 != a11 &amp;amp;&amp;amp; a22 != a12 &amp;amp;&amp;amp; a22 != a13 &amp;amp;&amp;amp; a22 != a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a23 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a23 != firstSeed &amp;amp;&amp;amp; a23 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a23 != a21 &amp;amp;&amp;amp; a23 != a22 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a23 != a11 &amp;amp;&amp;amp; a23 != a12 &amp;amp;&amp;amp; a23 != a13 &amp;amp;&amp;amp; a23 != a14&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a24 = sum - (a21 + a22 + a23)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a24 &amp;gt; 0 &amp;amp;&amp;amp; a24 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a24 != firstSeed &amp;amp;&amp;amp; a24 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a24 != a21 &amp;amp;&amp;amp; a24 != a22 &amp;amp;&amp;amp; a24 != a23 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a24 != a11 &amp;amp;&amp;amp; a24 != a12 &amp;amp;&amp;amp; a24 != a13 &amp;amp;&amp;amp; a24 != a14 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* third row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;from&lt;/strong&gt; a31 &lt;strong&gt;in&lt;/strong&gt; Enumerable.Range(1, MAX)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a31 != firstSeed &amp;amp;&amp;amp; a31 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31 != a11 &amp;amp;&amp;amp; a31 != a12 &amp;amp;&amp;amp; a31 != a13 &amp;amp;&amp;amp; a31 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31 != a21 &amp;amp;&amp;amp; a31 != a22 &amp;amp;&amp;amp; a31 != a23 &amp;amp;&amp;amp; a31 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a32 = sum - (a12 + a22 + firstSeed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a32 &amp;gt; 0 &amp;amp;&amp;amp; a32 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != firstSeed &amp;amp;&amp;amp; a32 != secondSeed &amp;amp;&amp;amp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != a31 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != a11 &amp;amp;&amp;amp; a32 != a12 &amp;amp;&amp;amp; a32 != a13 &amp;amp;&amp;amp; a32 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a32 != a21 &amp;amp;&amp;amp; a32 != a22 &amp;amp;&amp;amp; a32 != a23 &amp;amp;&amp;amp; a32 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a33 = sum - (a13 + a23 + secondSeed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a33 &amp;gt; 0 &amp;amp;&amp;amp; a33 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != firstSeed &amp;amp;&amp;amp; a33 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != a31 &amp;amp;&amp;amp; a33 != a32 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != a11 &amp;amp;&amp;amp; a33 != a12 &amp;amp;&amp;amp; a33 != a13 &amp;amp;&amp;amp; a33 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a33 != a21 &amp;amp;&amp;amp; a33 != a22 &amp;amp;&amp;amp; a33 != a23 &amp;amp;&amp;amp; a33 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a34 = sum - (a31 + a32 + a33)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a34 &amp;gt; 0 &amp;amp;&amp;amp; a34 &amp;lt;= MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != firstSeed &amp;amp;&amp;amp; a34 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != a31 &amp;amp;&amp;amp; a34 != a32 &amp;amp;&amp;amp; a34 != a33 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != a11 &amp;amp;&amp;amp; a34 != a12 &amp;amp;&amp;amp; a34 != a13 &amp;amp;&amp;amp; a34 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a34 != a21 &amp;amp;&amp;amp; a34 != a22 &amp;amp;&amp;amp; a34 != a23 &amp;amp;&amp;amp; a34 != a24&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* fourth row */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a41 = sum - (a11 + a21 + a31)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a41 &amp;gt; 0 &amp;amp;&amp;amp; a41 &amp;lt; MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != firstSeed &amp;amp;&amp;amp; a41 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != a11 &amp;amp;&amp;amp; a41 != a12 &amp;amp;&amp;amp; a41 != a13 &amp;amp;&amp;amp; a41 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != a21 &amp;amp;&amp;amp; a41 != a22 &amp;amp;&amp;amp; a41 != a23 &amp;amp;&amp;amp; a41 != a24 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 != a31 &amp;amp;&amp;amp; a41 != a32 &amp;amp;&amp;amp; a41 != a33 &amp;amp;&amp;amp; a41 != a34 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 + a32 + a23 + a14 == sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* right-to-left diagonal */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a42 = firstSeed &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a43 = secondSeed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;let&lt;/strong&gt; a44 = sum - (a14 + a24 + a34)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;where&lt;/strong&gt; a44 &amp;gt; 0 &amp;amp;&amp;amp; a44 &amp;lt; MAX &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != firstSeed &amp;amp;&amp;amp; a44 != secondSeed &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a41 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a11 &amp;amp;&amp;amp; a44 != a12 &amp;amp;&amp;amp; a44 != a13 &amp;amp;&amp;amp; a44 != a14 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a21 &amp;amp;&amp;amp; a44 != a22 &amp;amp;&amp;amp; a44 != a23 &amp;amp;&amp;amp; a44 != a24 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a44 != a31 &amp;amp;&amp;amp; a44 != a32 &amp;amp;&amp;amp; a44 != a33 &amp;amp;&amp;amp; a44 != a34 &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41 + firstSeed + secondSeed + a44 == sum &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a11 + a22 + a33 + a44 == sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* left-to-right diagonal */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;select new&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a11, a12, a13, a14,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a21, a22, a23, a24,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a31, a32, a33, a34,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a41, a42, a43, a44,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;using&lt;/strong&gt; (StreamWriter sw = &lt;strong&gt;new&lt;/strong&gt; StreamWriter(&amp;quot;&lt;a&gt;C:\\TEMP\\Solutions.txt&lt;/a&gt;&amp;quot;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;Start : &amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy/MM/dd hh:mm:ss&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;int&lt;/strong&gt; n = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;foreach&lt;/strong&gt; (&lt;strong&gt;var&lt;/strong&gt; r &lt;strong&gt;in&lt;/strong&gt; res)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;Solution &amp;quot; + n);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;=============&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a11, r.a12, r.a13, r.a14);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a21, r.a22, r.a23, r.a24);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a31, r.a32, r.a33, r.a34);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;{0} {1} {2} {3}&amp;quot;, r.a41, r.a42, r.a43, r.a44);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Flush(); n++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;Finish: &amp;quot; + DateTime.Now.ToString(&amp;quot;yyyy/MM/dd hh:mm:ss&amp;quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=157851" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C# y LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_+y+LINQ/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /><category term="LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/LINQ/default.aspx" /></entry><entry><title>Transiciones más o menos suaves</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/09/07/transiciones-m-225-s-o-menos-suaves.aspx" /><id>/blogs/ohernandez/archive/2009/09/07/transiciones-m-225-s-o-menos-suaves.aspx</id><published>2009-09-07T19:05:00Z</published><updated>2009-09-07T19:05:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;I could change my life to better suit your mood&lt;br /&gt;Because you&amp;#39;re so smooth...&amp;quot;&lt;br /&gt;(&amp;quot;Smooth&amp;quot;, &lt;strong&gt;Santana featuring Rob Thomas&lt;/strong&gt;, 1999)&lt;/p&gt;
&lt;p&gt;El presente post es para recomendar sinceramente a mis lectores el &lt;a target="_blank" href="http://www.dotnetmania.com/" title="dotNetMan&amp;iacute;a"&gt;ejemplar de este mes de &lt;strong&gt;dotNetMan&amp;iacute;a&lt;/strong&gt;&lt;/a&gt;, en el que &lt;strong&gt;Miguel Katrib&lt;/strong&gt; y &lt;strong&gt;Mario del Valle&lt;/strong&gt; publican un excelente art&amp;iacute;culo sobre las futuras posibilidades asociadas a la &lt;strong&gt;varianza&lt;/strong&gt; y &lt;strong&gt;contravarianza&lt;/strong&gt; en los tipos gen&amp;eacute;ricos que ofrecer&amp;aacute; C# 4.0. Del art&amp;iacute;culo he tomado prestado el t&amp;eacute;rmino &amp;quot;suave&amp;quot; (&lt;em&gt;smooth&lt;/em&gt;), con el que los autores&amp;nbsp;califican a la transici&amp;oacute;n paulatina que hemos ido observando en el sistema de tipos de C# a partir de su versi&amp;oacute;n original y en particular a partir de la versi&amp;oacute;n 2.0, en la que apareci&amp;oacute; por primera vez la genericidad en el lenguaje.&lt;/p&gt;
&lt;p&gt;Por dem&amp;aacute;s, la edici&amp;oacute;n de este mes incluye otros varios muy buenos art&amp;iacute;culos (escritos igualmente por grandes amigos como &lt;strong&gt;Marino Posadas&lt;/strong&gt; o &lt;strong&gt;Iv&amp;aacute;n Gonz&amp;aacute;lez&lt;/strong&gt;, entre otros) enmarcados&amp;nbsp;en el contexto de un ejemplar dedicado a las recientemente aparecidas versiones 3 de&amp;nbsp;&lt;strong&gt;Silverlight&lt;/strong&gt; y &lt;strong&gt;Expression&lt;/strong&gt;. Pensando en el caso de Silverlight, no estoy seguro de si me atrever&amp;iacute;a a&amp;nbsp;describir precisamente como &amp;quot;suaves&amp;quot;&amp;nbsp;las transiciones en su desarrollo, aunque no por ninguna raz&amp;oacute;n t&amp;eacute;cnica (&amp;iexcl;todo lo contrario!), sino por la celeridad con la que las diferentes versiones del producto se han ido lanzando al mercado.&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: Carlos Santana es, sin duda alguna, uno de los guitarristas m&amp;aacute;s destacados de toda la historia del rock. Temas como &amp;quot;&lt;strong&gt;Oye como va&lt;/strong&gt;&amp;quot;, &amp;quot;&lt;strong&gt;Samba pa&amp;#39; ti&lt;/strong&gt;&amp;quot; o &amp;quot;&lt;strong&gt;Black Magic Woman&lt;/strong&gt;&amp;quot; le abrieron un hueco en la historia de la m&amp;uacute;sica popular desde principios de los &amp;#39;70.&amp;nbsp;Ya a&amp;nbsp;finales del pasado milenio, &amp;quot;&lt;strong&gt;Supernatural&lt;/strong&gt;&amp;quot; (1999), un &amp;aacute;lbum de colaboraciones con otras estrellas como &lt;strong&gt;Eric Clapton&lt;/strong&gt;, &lt;strong&gt;Rob Thomas&lt;/strong&gt;, &lt;strong&gt;Dave Matthews&lt;/strong&gt;, &lt;strong&gt;Lauryn Hill&lt;/strong&gt; o &lt;strong&gt;Man&amp;aacute;&lt;/strong&gt;, entre otros (y en el que tuvo alguna participaci&amp;oacute;n &lt;a target="_blank" href="http://www.elnegro.com" title="El Negro"&gt;mi hermano&lt;/a&gt;), tom&amp;oacute; por asalto los medios de todo el mundo. Seg&amp;uacute;n &amp;quot;&lt;a target="_blank" href="http://www.amazon.com/Billboard-Book-Top-Hits-Forty/dp/0823074994/" title="Billboard Top 40 Hits"&gt;The Billboard Book of Top 40 Hits&lt;/a&gt;&amp;quot;, &amp;quot;&lt;strong&gt;Smooth&lt;/strong&gt;&amp;quot; (tema que Rob Thomas compuso para su esposa, de origen portorrique&amp;ntilde;o) es el &lt;em&gt;single&lt;/em&gt; de mayor &amp;eacute;xito comercial de toda la historia. &amp;iexcl;Eso es Latino Power!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=155434" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Fences, by design</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/08/27/fences-by-design.aspx" /><id>/blogs/ohernandez/archive/2009/08/27/fences-by-design.aspx</id><published>2009-08-27T07:17:00Z</published><updated>2009-08-27T07:17:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;Oh, give me land, lots of land under starry skies above,&lt;br /&gt;Don&amp;#39;t fence me in&amp;quot;&lt;br /&gt;(&amp;quot;Don&amp;#39;t fence me in&amp;quot;, &lt;strong&gt;Ella Fitzgerald&lt;/strong&gt;, 1956)&lt;/p&gt;
&lt;p align="right"&gt;&amp;quot;If you want to keep something precious&lt;br /&gt;You got to lock it up and throw away the key&lt;br /&gt;If you want to hold onto your possession&lt;br /&gt;Don&amp;#39;t even think about me&amp;quot;&lt;br /&gt;(&amp;quot;If you love somebody set them free&amp;quot;, &lt;strong&gt;Sting&lt;/strong&gt;, 1986)&lt;/p&gt;
&lt;p&gt;Me escribe mi amigo &lt;strong&gt;Alain&lt;/strong&gt; pidi&amp;eacute;ndome que comente acerca de la limitaci&amp;oacute;n de LINQ to SQL que le impide utilizar en sus modelos tablas que tengan una clave primaria autoincremental de tipo byte (&lt;strong&gt;TINYINT&lt;/strong&gt; en SQL Server); el intento produce el error de ejecuci&amp;oacute;n&amp;nbsp;&amp;quot;The primary key column of type &amp;#39;TinyInt&amp;#39; cannot be generated by the server&amp;quot;. Lamentablemente, no se me ocurre ninguna raz&amp;oacute;n v&amp;aacute;lida que ofrecerle, salvo la ya tradicional frase &amp;quot;&lt;strong&gt;By design&lt;/strong&gt;&amp;quot;, con la que generalmente los equipos de desarrollo quieren decir &amp;quot;Lo hicimos as&amp;iacute; por que nos sali&amp;oacute; de ...&amp;quot; (complete la frase el lector con la referencia corporal o espiritual que prefiera, aunque a fin de cuentas, el &amp;uacute;nico culpable es el cerebro de alguien). La soluci&amp;oacute;n pasa por definir el campo de tipo &lt;strong&gt;SMALLINT&lt;/strong&gt; (16 bits) en lugar de TINYINT pero,&amp;nbsp;&amp;iquest;si SQL Server soporta este tipo de campos, por qu&amp;eacute; eliminar la posibilidad en LINQ to SQL? Probablemente alguien, con toda la buena intenci&amp;oacute;n del mundo, decidi&amp;oacute; que, dado el estrecho rango que ofrece TINYINT, ser&amp;iacute;a mejor prohibir la utilizaci&amp;oacute;n de tales campos; pero, &amp;iquest;qu&amp;eacute; saben los desarrolladores de librer&amp;iacute;as de los posibles usos que podr&amp;aacute;n tener en el futuro sus desarrollos?&lt;/p&gt;
&lt;p&gt;Evitar la imposici&amp;oacute;n de tales &amp;quot;cercas&amp;quot; (&amp;quot;vallas&amp;quot;) artificiales es uno de los aspectos a tener muy en cuenta durante el desarrollo de librer&amp;iacute;as. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nota adicional&lt;/strong&gt;: He probado el mismo ejemplo bajo la Beta 1 de VS 2010 y comprobado que la situaci&amp;oacute;n se mantiene. Y en estos tiempos de costes ajustados y dada la particular relaci&amp;oacute;n entre LINQ to SQL y Entity Framework, lo m&amp;aacute;s probable es que todo siga igual despu&amp;eacute;s de la salida de la nueva versi&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;
&lt;hr /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: Esta vez introducimos el &lt;em&gt;post&lt;/em&gt; con un fragmento de un tema cl&amp;aacute;sico de &lt;strong&gt;Cole Porter&lt;/strong&gt; que o&amp;iacute;mos por primera vez en la voz de la inmortal &lt;strong&gt;Ella Fitzgerald&lt;/strong&gt;, una que nunca faltaba en nuestra casa de La Habana. Adicionalmente va otra referencia aleg&amp;oacute;rica al tema de hoy: &amp;quot;&lt;strong&gt;If you love somebody set them free&lt;/strong&gt;&amp;quot;, de aquel genial &lt;strong&gt;Sting&lt;/strong&gt; que, despu&amp;eacute;s de romper con Police, conform&amp;oacute; una banda espectacular con m&amp;uacute;sicos afro-norteamericanos (el fallecido &lt;strong&gt;Kenny Kirland&lt;/strong&gt; al piano, &lt;strong&gt;Branford Marsalis&lt;/strong&gt;&amp;nbsp;al clarinete, &lt;strong&gt;Darryl Jones&lt;/strong&gt; al bajo y &lt;strong&gt;Omar Hakim&lt;/strong&gt; en la bater&amp;iacute;a, entre otros) de la que hoy quedan como recuerdo los&amp;nbsp;&amp;aacute;lbumes &amp;quot;&lt;strong&gt;The Dream of the Blue Turtles&lt;/strong&gt;&amp;quot; (1985) y &amp;quot;&lt;strong&gt;Bring on the Night&lt;/strong&gt;&amp;quot; (1986).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=154833" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="LINQ" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/LINQ/default.aspx" /></entry><entry><title>Qué problema tiene este código? (III)</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/07/26/qu-233-problema-tiene-este-c-243-digo-iii.aspx" /><id>/blogs/ohernandez/archive/2009/07/26/qu-233-problema-tiene-este-c-243-digo-iii.aspx</id><published>2009-07-26T20:31:00Z</published><updated>2009-07-26T20:31:00Z</updated><content type="html">&lt;p&gt;Continuando con la l&amp;iacute;nea de posts relacionada con problemas potenciales con los que los programadores .NET deben tener cuidado, aqu&amp;iacute; va uno al que, si se tratara de un film, le a&amp;ntilde;adir&amp;iacute;amos la coletilla &amp;quot;basado en una historia real&amp;quot;: deriva directamente de un &lt;em&gt;bug&lt;/em&gt; que encontr&amp;eacute; hace unos d&amp;iacute;as revisando el c&amp;oacute;digo&amp;nbsp;de un proyecto heredado.&lt;/p&gt;
&lt;p&gt;Suponga que tenemos una clase como la siguiente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;public class&lt;/strong&gt;&amp;nbsp;Customer&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;public &lt;/strong&gt;Guid Id&amp;nbsp;{ &lt;strong&gt;get&lt;/strong&gt;; &lt;strong&gt;set&lt;/strong&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;public string&lt;/strong&gt; Name&amp;nbsp;{ &lt;strong&gt;get&lt;/strong&gt;; &lt;strong&gt;set&lt;/strong&gt;; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;public&lt;/strong&gt; Customer(&lt;strong&gt;string&lt;/strong&gt; name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Id&amp;nbsp;= Guid.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;= name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; Persist()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Here the object is persisted to the database&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;And &amp;#39;Id&amp;#39; field is assigned a value if it&amp;nbsp;is Empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;...More class&amp;#39; definition...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; Action()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;if&lt;/strong&gt; (Id == &lt;strong&gt;null&lt;/strong&gt;)&amp;nbsp; // The bug is here!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Persist();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;The action&amp;#39;s code...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;iquest;Ve d&amp;oacute;nde est&amp;aacute; el problema? Seguramente de manera inconsciente, el programador compar&amp;oacute; el Guid (que, como&amp;nbsp;sabemos, es un tipo valor) con &lt;strong&gt;null&lt;/strong&gt; en vez de con Guid.Empty. Como resultado, el objeto no se persiste si no lo estaba anteriormente (la comparaci&amp;oacute;n produce siempre falso).&lt;/p&gt;
&lt;p&gt;En &lt;a target="_blank" href="http://blogs.msdn.com/kirillosenkov/archive/2008/09/08/why-a-comparison-of-a-value-type-with-null-is-a-warning.aspx" title="Comparing value types with null"&gt;este excelente post&lt;/a&gt;, miembros del equipo de C# explican claramente por qu&amp;eacute;&amp;nbsp;la comparaci&amp;oacute;n (de igualdad o desigualdad)&amp;nbsp;de un tipo valor con &lt;strong&gt;null&lt;/strong&gt; produce una advertencia y no un error; b&amp;aacute;sicamente, debido a la posibilidad de&amp;nbsp;&lt;span style="text-decoration:underline;"&gt;promoci&amp;oacute;n&lt;/span&gt; (&lt;em&gt;lifting&lt;/em&gt;) de los tipos valor a sus correspondientes tipos valor anulables. Con eso estoy totalmente de acuerdo; con lo que no&amp;nbsp;lo estoy del todo es con la asignaci&amp;oacute;n a este problema potencial del nivel de advertencia 2, con lo que pasar&amp;aacute; totalmente desapercibido en caso de que el proyecto se compile con nivel 1.&lt;/p&gt;
&lt;p&gt;Como siempre, &amp;iexcl;queda advertido!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=153090" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Excepciones más o menos fatales</title><link rel="alternate" type="text/html" href="/blogs/ohernandez/archive/2009/07/04/excepciones-m-225-s-o-menos-fatales.aspx" /><id>/blogs/ohernandez/archive/2009/07/04/excepciones-m-225-s-o-menos-fatales.aspx</id><published>2009-07-04T07:20:00Z</published><updated>2009-07-04T07:20:00Z</updated><content type="html">&lt;p align="right"&gt;&amp;quot;The world weighs on my shoulders&lt;br /&gt;But what am I to do?&amp;quot;&lt;br /&gt;(&amp;quot;Distant Early Warning&amp;quot;, &lt;strong&gt;Rush&lt;/strong&gt;, 1984)&lt;/p&gt;
&lt;p&gt;Hace unos d&amp;iacute;as, mi colega y amigo &lt;strong&gt;Fernando Chapa&lt;/strong&gt;, sin duda uno de los mejores programadores con los que he tenido la suerte de trabajar, llam&amp;oacute; mi atenci&amp;oacute;n sobre una clase base que se me antoja poco conocida (tal vez por poco documentada), aunque forma parte de la librer&amp;iacute;a de clases de .NET desde la versi&amp;oacute;n 2.0: &lt;strong&gt;System.WarningException&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WarningException&lt;/strong&gt; hereda directamente de &lt;strong&gt;Exception&lt;/strong&gt;; la idea que subyace es la de que las excepciones de esta clase o cualquiera de sus descendientes deben ser tratadas como advertencias m&amp;aacute;s que como errores. En particular, si una aplicaci&amp;oacute;n de consola o escritorio no maneja una excepci&amp;oacute;n de este tipo, en lugar del m&amp;aacute;s familiar di&amp;aacute;logo:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://geeks.ms/cfs-filesystemfile.ashx/__key/CommunityServer.Components.PostAttachments/00.00.15.17.96/WarningException1.jpg" border="0" style="max-width:550px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;el usuario recibir&amp;aacute; uno como &amp;eacute;ste (el mensaje es el asociado a la excepci&amp;oacute;n, claro):&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://geeks.ms/cfs-filesystemfile.ashx/__key/CommunityServer.Components.PostAttachments/00.00.15.17.97/WarningException2.jpg" border="0" style="max-width:550px;" alt="" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Me pareci&amp;oacute; interesante llamar aqu&amp;iacute; la atenci&amp;oacute;n sobre la existencia de esta clase no por el hecho de c&amp;oacute;mo reacciona .NET en el caso de que una excepci&amp;oacute;n de este tipo no sea manejada, puesto que toda aplicaci&amp;oacute;n que se precie deber&amp;iacute;a implementar un gestor de excepciones global basado en los mecanismos que ofrece para ello .NET (&lt;strong&gt;Application.ThreadException&lt;/strong&gt; en Windows Forms, &lt;strong&gt;Page.ErrorPage&lt;/strong&gt; en ASP.NET, etc.), sino por el inter&amp;eacute;s que podr&amp;iacute;a tener para aquellos que dise&amp;ntilde;an librer&amp;iacute;as de clases con sus propias clases de excepciones.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;El bit nost&amp;aacute;lgico&lt;/strong&gt;&lt;/span&gt;: &lt;strong&gt;WarningException&lt;/strong&gt; me record&amp;oacute; a una clase de excepci&amp;oacute;n que ofrec&amp;iacute;a (perd&amp;oacute;n, que a&amp;uacute;n ofrece) Delphi, llamada &lt;strong&gt;EAbort&lt;/strong&gt; y conocida como &amp;quot;la excepci&amp;oacute;n silenciosa&amp;quot;. Si esta excepci&amp;oacute;n se produce (casi siempre provocada por el propio programador mediante una llamada al m&amp;eacute;todo predefinido &lt;strong&gt;Abort&lt;/strong&gt;) y llega sin ser tratada al nivel m&amp;aacute;s externo de la pila de llamadas, el sistema &amp;quot;se la traga&amp;quot; de manera silenciosa. Tal vez en alguna pr&amp;oacute;xima versi&amp;oacute;n de .NET veamos una clase as&amp;iacute; (heredera, probablemente, de &lt;strong&gt;WarningException&lt;/strong&gt; :-).&lt;/p&gt;
&lt;p&gt;
&lt;hr /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Pop/Rock tip&lt;/strong&gt;&lt;/span&gt;: &lt;strong&gt;Rush&lt;/strong&gt; es, probablemente, la banda de rock canadiense m&amp;aacute;s importante de todos los tiempos, con una muy exitosa carrera que abarca cinco d&amp;eacute;cadas, a lo largo de las cuales se han reinventado a s&amp;iacute; mismos varias veces de una manera muy digna, y veintitantos discos de oro. Mis discos favoritos de &lt;strong&gt;Rush&lt;/strong&gt; corresponden a la &amp;eacute;poca en que hac&amp;iacute;an un rock m&amp;aacute;s progresivo: &amp;quot;&lt;strong&gt;A Farewell to Kings&lt;/strong&gt;&amp;quot; (1977), &amp;quot;&lt;strong&gt;Hemispheres&lt;/strong&gt;&amp;quot; (1978), &amp;quot;&lt;strong&gt;Permanent Waves&lt;/strong&gt;&amp;quot; (1980) y &amp;quot;&lt;strong&gt;Moving Pictures&lt;/strong&gt;&amp;quot; (1981). El tema que hemos mencionado aqu&amp;iacute; pertenece al disco &amp;quot;&lt;strong&gt;Grace Under Pressure&lt;/strong&gt;&amp;quot; de 1984, &amp;eacute;poca en la que ya hab&amp;iacute;an adoptado un estilo algo m&amp;aacute;s comercial.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=151799" width="1" height="1"&gt;</content><author><name>ohernandez</name><uri>http://geeks.ms/members/ohernandez/default.aspx</uri></author><category term=".NET" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://geeks.ms/blogs/ohernandez/archive/tags/C_2300_/default.aspx" /></entry></feed>
