<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-22529781</id><updated>2009-06-26T15:18:23.722-06:00</updated><title type="text">Diario de un Dotnetero</title><subtitle type="html">Un blog para tratar temas de desarrollo de software con .NET y tecnología en general.  Lo pocho de este espacio es un feature, no un bug.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.dotnetero.com/feeds/posts/full" /><link rel="alternate" type="text/html" href="http://www.dotnetero.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/full?start-index=26&amp;max-results=25" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>119</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>31.782408</geo:lat><geo:long>-106.36353</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><link rel="self" href="http://feeds.feedburner.com/ElOtroLado" type="application/atom+xml" /><feedburner:emailServiceId>ElOtroLado</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FElOtroLado" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/ElOtroLado" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FElOtroLado" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FElOtroLado" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FElOtroLado" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FElOtroLado" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.addtoany.com/?linkname=Diario%20de%20un%20Dotnetero&amp;linkurl=http%3A%2F%2Ffeeds.feedburner.com%2FElOtroLado&amp;type=feed" src="http://www.addtoany.com/addfr-b.gif">Add to Any Feed Reader</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-22529781.post-6935343960426438950</id><published>2008-11-04T12:11:00.001-07:00</published><updated>2008-11-04T12:18:28.413-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="preguntas y respuestas" /><category scheme="http://www.blogger.com/atom/ns#" term="web services" /><category scheme="http://www.blogger.com/atom/ns#" term="wcf" /><title type="text">Preguntas de los lectores: DataSets y Web Services</title><content type="html">&lt;p&gt;Esta pregunta me llegó por e-mail y la respuesta acabó tan larga que mejor la pongo como una entrada:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;De antemano te digo que tu blog es muy interesante y se entienden todas las cosas que has puesto... ahora bien tengo una duda que puede sonar un poco tonta pero aqui va...      &lt;br /&gt;En cuanto a los xml de los web services en visual studio un dataset que se envia por un web services es convertido a xml para viajar por el HTTP asi que lo puedo dejar de esa manera para que otra aplicacion lo recoja como un xml????       &lt;br /&gt;en el caso de que no... al serializar el objeto DataSet obtengo, eso si en la vista del browser un tag String y dentro de ella todo el codigo del xml, evidentemente eso no es lo que se ocupa o si??       &lt;br /&gt;Bueno disculpa por las preguntas pero me interesan demasiado las respuestas.... de antemano muchas gracias!!!&lt;/p&gt;    &lt;p&gt;—Luis Mario Carvajal&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Primero que nada, gracias Luis.&amp;#160; Se siente muy padre que las personas encuentren algo que escribes útil.&lt;/p&gt;  &lt;p&gt;Segundo, las preguntas que haces son bien interesantes.&amp;#160; La respuesta a la primera es, sí, un DataSet se &lt;a href="http://www.dotnetero.com/2007/04/lo-que-todo-desarrollador-debera-saber.html"&gt;serializaría a XML&lt;/a&gt;—al tratarse de servicios &lt;em&gt;Web &lt;/em&gt;todos los tipos son serializados a XML, porque en escencia estamos hablando de XML sobre HTTP, como tú lo mencionaste.&lt;/p&gt;  &lt;p&gt;Sin embargo, generalmente no se recomienda utilizar un DataSet para pasar datos, ya que es un objeto bastante complejo: tiene muchas colecciones (DataTables, DataRelations, etc.), y cada una de ellas, a su vez tiene colecciones (un DataTable tiene una colección de DataRows, etc.).&amp;#160; Así que al serializar el grafo de todos eso objetos, acabas con mucho &lt;em&gt;overhead&lt;/em&gt;, mucho XML complejo para transmitir solo unos cuantos datos. Y, aunque en teoría sí podrías consumir eso de otra aplicación—dependiendo si estas usando ASP.NET Web Services o WCF, ya que utilizan serializadores distintos—en general no es muy interoperable con otras plataformas.&amp;#160; &lt;/p&gt;  &lt;p&gt;Si el consumidor de tu servicio usa .NET, no debe tener problemas para consumir ese DataSet &lt;strong&gt;como un objeto &lt;/strong&gt;de .NET, ya que el generador de la clase proxy que viene con Visual Studio utiliza unos artilugios para des-serializar el DataSet sin ningún esfuerzo.&lt;/p&gt;  &lt;p&gt;Ahora, que si lo que te interesa solo es extraer los datos del DataSet en formato XML, una manera muy sencilla de hacerlo—y mucho mejor que hacer ToString(), creo—es a través del método &lt;strong&gt;WriteXml()&lt;/strong&gt; que es parte de la clase &lt;strong&gt;DataSet&lt;/strong&gt; y &lt;strong&gt;DataTable&lt;/strong&gt;.&amp;#160; Aunque no te da mucho control sobre el XML Schema que utiliza para exportar esos datos, utiliza una estructura bastante sencilla y amigable como para leerlo y manipularlo con otras herramientas.&lt;/p&gt;  &lt;p&gt;Finalmente, creo que también es importante mencionar que si simplemente estás exponiendo datos, existen otros formatos más breves (que no usan XML), pero que siguen siendo amigables a los servicios, como JSON.&amp;#160; &lt;a href="http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx"&gt;WCF maneja JSON de una manera relativamente fácil&lt;/a&gt;, y puedes consumirlo utilizando ASP.NET AJAX, por ejemplo.&amp;#160; Una última alternativa también es exponer tus datos como un &lt;a href="http://msdn.microsoft.com/en-us/library/cc907912.aspx"&gt;ADO.NET Data Service&lt;/a&gt; (que es una característica nueva del .NET Framework 3.5 SP1).&lt;/p&gt;  &lt;p&gt;Espero te ayude.&lt;/p&gt; Enjoy &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-6935343960426438950?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=seGbC5k4cks:-c0FQouQATc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=seGbC5k4cks:-c0FQouQATc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=seGbC5k4cks:-c0FQouQATc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=seGbC5k4cks:-c0FQouQATc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/seGbC5k4cks" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/6935343960426438950/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=6935343960426438950" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6935343960426438950" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6935343960426438950" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/seGbC5k4cks/preguntas-de-los-lectores-datasets-y.html" title="Preguntas de los lectores: DataSets y Web Services" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/11/preguntas-de-los-lectores-datasets-y.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-3107233773327235298</id><published>2008-10-01T12:06:00.001-06:00</published><updated>2008-10-01T12:08:58.683-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><title type="text">Microsoft anuncia Visual Studio 2010 y .NET Framework 4.0</title><content type="html">&lt;p&gt;Ayer Microsoft se adelantó al PDC y &lt;a href="http://www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx?rss_fdn=Press%20Releases"&gt;anunció&lt;/a&gt; que Visual Studio 2010 (también conocido por Visual Studio 10 o “Rosario”) y el .NET Framework 4.0 estarían disponibles a finales del 2009 o principios del 2010—seguramente para coincidir con el lanzamiento de Windows 7, tal como lo hicieron con .NET 3.0 y Windows Vista.&lt;/p&gt;  &lt;p&gt;Lo curioso, sin embargo es que no dió muchos detalles al respecto.&amp;#160; &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx"&gt;Según esta página en MSDN&lt;/a&gt;, los “pilares” de esa versión son [interpretación mía]:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Democratizar el ciclo de desarrollo.&amp;#160; &lt;/strong&gt;Que en términos prácticos parece que se trata de incorporar aún más modelación en Visual Studio, incluyendo—finalmente—diagramación en UML.&amp;#160; &lt;a href="http://channel9.msdn.com/posts/VisualStudio/Top-down-design-with-Visual-Studio-Team-System-2010/"&gt;Checa este video en Channel 9 al respecto&lt;/a&gt;. Parece que también van a mejorar algunas de las herramientas de pruebas y documentación, sobre todo para poder reproducir &lt;em&gt;pulgas&lt;/em&gt; elusivas.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Facilitar las tecnologías emergentes.&lt;/strong&gt;&amp;#160; No sé exactamente a qué se refieran, ¿quizá soporte nativo a Silverlight 2 y cosas así? ¿Facilitar cosas de cloud computing? ¿Desarrollo para mulitprocesadores/&lt;em&gt;multicore&lt;/em&gt;?&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Inspirar deleite en los desarrolladores.&lt;/strong&gt;&amp;#160; Esto me suena a puro &lt;em&gt;marketingspeak&lt;/em&gt; &lt;img title=":)" alt=":)" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Seguir la ola de plataformas de próxima generación.&lt;/strong&gt;&amp;#160; Esto pudiera referirse a tecnologías asociadas con Windows 7 o Server 2008 R2, o a cosas relacionadas con &lt;a href="https://www.mesh.com/Welcome/Welcome.aspx"&gt;Live Mesh&lt;/a&gt;—parte de la iniciativa de &lt;em&gt;cloud computing &lt;/em&gt;de Microsoft—que estoy seguro también tendrán algo de integración.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Aplicaciones departamentales avanzadas.&lt;/strong&gt;&amp;#160; Supongo que se enfocarán a facilitar el desarrollo no solo de “aplicacionzotas” sino también “aplicacioncitas”—que luego crecen como monstruos y luego las quieren usar en todos lados.&amp;#160; ¿Significa que integrarán algunos pricipios de Access? &lt;img title="[eek]" alt="[eek]" src="http://spaces.live.com/rte/emoticons/smile_confused.gif" /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hay una serie de &lt;a href="http://channel9.msdn.com/tags/Visual+Studio+2010/"&gt;videos ya en Channel 9 acerca de VS 2010&lt;/a&gt;.&amp;#160; El blog de Arturo también &lt;a href="http://team.intellekt.ws/blogs/arturo/archive/2008/09/30/microsoft-anuncia-visual-studio-2010-y-net-framework-4-0.aspx"&gt;tiene algo más de información en español al respecto&lt;/a&gt;.&lt;/p&gt; Enjoy &lt;img title="cool" alt="cool" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-3107233773327235298?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=d5wyKzLKrOs:gJaSu2Cd3eE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=d5wyKzLKrOs:gJaSu2Cd3eE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=d5wyKzLKrOs:gJaSu2Cd3eE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=d5wyKzLKrOs:gJaSu2Cd3eE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/d5wyKzLKrOs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/3107233773327235298/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=3107233773327235298" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3107233773327235298" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3107233773327235298" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/d5wyKzLKrOs/microsoft-anuncia-visual-studio-2010-y.html" title="Microsoft anuncia Visual Studio 2010 y .NET Framework 4.0" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/10/microsoft-anuncia-visual-studio-2010-y.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-2354941805875933739</id><published>2008-10-01T11:27:00.001-06:00</published><updated>2008-10-01T11:27:57.498-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title type="text">Videos en español de Visual Studio 2008 y más por Channel 9</title><content type="html">&lt;p&gt;Para los que no lo conocen, &lt;a href="http://channel9.msdn.com/"&gt;Channel 9&lt;/a&gt; es un sitio de Microsoft para desarrolladores donde puedes encontrar un montonal de videos—y más importante creo—opinar sobre muchas de las tecnologías que maneja la compañía.&amp;#160; &lt;/p&gt;  &lt;p&gt;La mayoría de los videos están en inglés, pero hoy descubrí que si juegas con los &lt;em&gt;tags&lt;/em&gt; puedes obtener un listado de los videos que está en español.&amp;#160; Este enlace te da dicho listado:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://channel9.msdn.com/tags/Spanish/" href="http://channel9.msdn.com/tags/Spanish/"&gt;http://channel9.msdn.com/tags/Spanish/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ahí encontrarás videos sobre Visual Studio 2008, Expression Web, incluso uno que otro sobre Silverlight y Expression Blend.&lt;/p&gt;  &lt;p&gt;Por ejemplo, parece que acaban de sacar &lt;a href="http://channel9.msdn.com/tags/Expression+web/"&gt;una serie de cinco partes sobre Expression Web&lt;/a&gt;—uno de los productos de la familia Expression diseñados para hacer desde sitios HTML hasta sitios con páginas ASP.NET.&lt;/p&gt;  &lt;p&gt;Enjoy &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-2354941805875933739?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=ctAKAgFs-TE:59xYgTllmPU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=ctAKAgFs-TE:59xYgTllmPU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=ctAKAgFs-TE:59xYgTllmPU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=ctAKAgFs-TE:59xYgTllmPU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/ctAKAgFs-TE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/2354941805875933739/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=2354941805875933739" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/2354941805875933739" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/2354941805875933739" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/ctAKAgFs-TE/videos-en-espaol-de-visual-studio-2008.html" title="Videos en español de Visual Studio 2008 y más por Channel 9" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/10/videos-en-espaol-de-visual-studio-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-8947812254021953154</id><published>2008-09-04T00:01:00.000-06:00</published><updated>2008-09-05T15:42:37.018-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="xml" /><category scheme="http://www.blogger.com/atom/ns#" term="linq" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term=".net framework 3.5" /><title type="text">Cómo transformar XML sin usar XSLT</title><content type="html">&lt;p&gt;El otro día, una compañía externa hizo un una auditoría de seguridad a un sistema grande que manejamos.&amp;#160; Parte de la auditoría consistió en correr la herramienta &lt;a href="http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx"&gt;FxCop&lt;/a&gt; contra las DLLs para buscar—entre otras cosas—posibles &lt;a href="http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL"&gt;vulnerabilidades de inyección de SQL&lt;/a&gt;.&amp;#160; FxCop produce dichos reportes en XML y eso fue lo que nos entregaron.&amp;#160; &lt;/p&gt;  &lt;p&gt;Estos reportes eran enormes y en un formato no muy amigable, así que necesitábamos de alguna forma extraer los datos de ahí para enfocar los esfuerzos de los desarrolladores (qué corregir y en dónde), y también para tabular los datos (número de &lt;em&gt;issues &lt;/em&gt;por namespace, DLL, etc.) de manera que se les pudieran presentar a los gerentoides.&amp;#160; &lt;/p&gt;  &lt;p&gt;Este es un ejemplo de uno de esos archivos—no te preocupes, todas estas vulnerabilidades ya fueron parchadas, este es un extracto de esos reportes &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /&gt;. &lt;/p&gt;  &lt;p&gt;(Da clic a la imagen para ver un tamaño más grande)&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/carlos.rubalcava/SL9cIymutNI/AAAAAAAAAXM/tN60IiXwjy8/s1600-h/sampleFxCopReport16.png"&gt;&lt;img title="ejemplo de reporte FxCop" height="480" alt="ejemplo de reporte FxCop" src="http://lh4.ggpht.com/carlos.rubalcava/SL9cJ-lJBDI/AAAAAAAAAXQ/Na1AU556YaE/sampleFxCopReport_thumb14.png?imgmax=800" width="511" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ahora, se me ocurrió que estos archivos se podían transformar a algo más “plano”—como otro archivo de XML o un CSV—de manera que pudiera ser importado a Excel fácilmente.&amp;#160; Algo así como lo siguiente:&lt;/p&gt;  &lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;   &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;standalone&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;yes&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Vulnerabilities&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Vulnerability&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Namespace&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Namespace&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Method&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Method&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Issue&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Issue&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Vulnerability&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Vulnerability&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Module&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Namespace&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Namespace&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Method&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Method&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Issue&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Issue&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Vulnerability&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Vulnerabilities&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;La sola idea de hacer una hoja de estilos XSL para transformar eso me daba escalofríos, así que fue una buena oportunidad para practicar mi LINQ-Fu.&amp;#160; Para ello me ayudé de &lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;—una excelente herramienta para probar snippets de LINQ.&lt;/p&gt;

&lt;h3&gt;Armando el query&lt;/h3&gt;

&lt;p&gt;Mi primer query fue este:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt; xml = &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;.Load(&lt;span style="color: #a31515"&gt;@&amp;quot;C:\Users\Carlos\Desktop\sampleFxCopReport.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; query =&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;from&lt;/span&gt; e &lt;span style="color: blue"&gt;in&lt;/span&gt; xml.Descendants(&lt;span style="color: #a31515"&gt;&amp;quot;Issue&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;where&lt;/span&gt; e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Message&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;TypeName&amp;quot;&lt;/span&gt;).First().Value == &lt;span style="color: #a31515"&gt;&amp;quot;ReviewSqlQueriesForSecurityVulnerabilities&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;select&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Module = e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Module&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Namespace = e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Namespace&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Type = e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Method = e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Member&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Issue = e.Value&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; };&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Como puedes ver, cargar el archivo es trivial.&amp;#160; Puedes hacerlo a través del método &lt;strong&gt;Load()&lt;/strong&gt; de la clase &lt;strong&gt;XElement&lt;/strong&gt; o &lt;strong&gt;XDocument&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Luego, declaré una variable de tipo &lt;strong&gt;var &lt;/strong&gt;porque no estaba seguro exactamente del tipo de los objetos que regresaría mi query—utilicé un tipo anónimo, el cual explicaré en un minuto.&lt;/p&gt;

&lt;p&gt;Si no estás muy familiarizado con queries de LINQ, solo recuerda que en su nivel &lt;em&gt;más básico&lt;/em&gt;, tienes un &lt;strong&gt;from&lt;/strong&gt;/&lt;strong&gt;where&lt;/strong&gt;/&lt;strong&gt;select&lt;/strong&gt;.&amp;#160; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Primero le dices a qué objetos quieres hacerle query (&lt;strong&gt;from&lt;/strong&gt;), &lt;/li&gt;

  &lt;li&gt;luego especificas un filtro que deje solo los que te interesen (&lt;strong&gt;where&lt;/strong&gt;) y &lt;/li&gt;

  &lt;li&gt;finalmente le indicas una expresión de cómo quieres &lt;strong&gt;&lt;em&gt;proyectar&lt;/em&gt;&lt;/strong&gt; tus datos en la salida (&lt;strong&gt;select&lt;/strong&gt;). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En este caso, se me hizo más fácil elegir primero todos los elementos &lt;em&gt;&amp;lt;Issue&amp;gt;&lt;/em&gt; dentro del documento XML, ya que a partir de ellos puedo obtener el resto de la información viendo los nodos ancestros.&amp;#160; Logré hacer esto con una sola línea en el &lt;strong&gt;from&lt;/strong&gt; gracias al método &lt;strong&gt;Descendants()&lt;/strong&gt; de la clase &lt;strong&gt;XElement&lt;/strong&gt;.&amp;#160; En otras palabras estoy diciendo “selecciona los elementos &lt;em&gt;&amp;lt;Issue&amp;gt;&lt;/em&gt; en el documento, y por cada uno de ellos dame una variable &lt;em&gt;e&lt;/em&gt; de donde extraer más información”.&amp;#160; Puedes pensarlo como algo &lt;em&gt;parecido &lt;/em&gt;a un &lt;strong&gt;foreach&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Luego, indiqué en el filtro &lt;strong&gt;where &lt;/strong&gt;que únicamente deseo los &lt;em&gt;&amp;lt;Issue&amp;gt; &lt;/em&gt;donde el mensaje (&lt;em&gt;&amp;lt;Message&amp;gt;&lt;/em&gt;) sea de tipo vulnerabilidad de SQL (&lt;em&gt;TypeName=”ReviewSqlQueriesForSecurityVulnerabilities”).&lt;/em&gt;&amp;#160; Como los elementos &lt;em&gt;&amp;lt;Message&amp;gt; &lt;/em&gt;son ancestros de &lt;em&gt;&amp;lt;Issue&amp;gt;&lt;/em&gt;, utilicé &lt;strong&gt;Ancestors()&lt;/strong&gt; para acceder a ese elemento y luego &lt;strong&gt;Attributes()&lt;/strong&gt; para obtener el valor de atributo &lt;em&gt;TypeName&lt;/em&gt; y poder hacer la comparación.&lt;/p&gt;

&lt;p&gt;Finalmente, en la proyección el &lt;strong&gt;select new &lt;/strong&gt;crea un tipo (una clase pues) sin nombre con 5 propiedades, que son inicializadas con los valores de las expresiones.&amp;#160; Esto crea una collección de tipo &lt;strong&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/strong&gt; donde&lt;strong&gt; T&lt;/strong&gt; es el tipo anónimo—¿ves por qué fue necesaria la variable &lt;strong&gt;var&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;El resultado del query es este (da clic para ver la imagen más grande):&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/carlos.rubalcava/SL9cKyPJkaI/AAAAAAAAAXU/hk4PfmxdszA/s1600-h/query1results2.png"&gt;&lt;img title="resultados del primer query" height="109" alt="resultados del primer query" src="http://lh3.ggpht.com/carlos.rubalcava/SL9cLleBZZI/AAAAAAAAAXY/RbAUWOtPNR0/query1results_thumb2.png?imgmax=800" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero, ¿qué tal si quisiera ordenar mis resultados primero por &lt;em&gt;Module&lt;/em&gt;, luego por &lt;em&gt;Namespace&lt;/em&gt;, &lt;em&gt;Type&lt;/em&gt; y &lt;em&gt;Method &lt;/em&gt;sucesivamente?&amp;#160; Sencillo.&amp;#160; Puedo agregar una cadena de &lt;strong&gt;OrderBy&lt;/strong&gt;’s a mi query original o puedo agarrar el resultado del query y ordenarlo así:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; ordered =&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; query.OrderBy(x =&amp;gt; x.Method).OrderBy(x =&amp;gt; x.Type)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; .OrderBy(x =&amp;gt; x.Namespace).OrderBy(x =&amp;gt; x.Module);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Esta manera de hacerlo involucra las famosas expresiones lamda, pero no me quiero desviar en explicarlas.&amp;#160; Por ahora sólo tómalas como ejemplo y nota que puedes encadenar las cláusulas.&lt;/p&gt;

&lt;p&gt;Esto es un buen comienzo, pero ahora quiero esos datos en algo que se le parezca a un documento XML.&lt;/p&gt;

&lt;p&gt;Entonces agregué esto después de mi query:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;XDocument&lt;/span&gt; xdoc = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XDocument&lt;/span&gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;xdoc.AddFirst(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Vulnerabilities&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; element &lt;span style="color: blue"&gt;in&lt;/span&gt; query)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; xdoc.Root.Add(&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Vulnerability&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Module&amp;quot;&lt;/span&gt;, element.Module)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; , &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Namespace&amp;quot;&lt;/span&gt;, element.Namespace)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; , &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;, element.Type)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; , &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Method&amp;quot;&lt;/span&gt;, element.Method)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; , &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Issue&amp;quot;&lt;/span&gt;, element.Issue)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ));&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Primero creo un nuevo documento XML utilizando la clase &lt;strong&gt;XDocument, &lt;/strong&gt;y le agrego un elemento raíz &lt;em&gt;&amp;lt;Vulnerabilities&amp;gt;&lt;/em&gt;.&amp;#160; Luego por cada elemento de mi lista ordenada, agrego un elemento &lt;em&gt;&amp;lt;Vulnerability&amp;gt;&lt;/em&gt; que contendrá cinco elementos, uno por cada propiedad que me interesó, y que tendrán el valo.&amp;#160; Nota que los constructores “raros” de &lt;strong&gt;XElement&lt;/strong&gt; facilitan enormemente la tarea, y que los métodos &lt;strong&gt;AddFirst()&lt;/strong&gt; y &lt;strong&gt;AddNew()&lt;/strong&gt; se encargará de cerrar los elementos adecuadamente—a diferencia de la forma en que se utiliza un &lt;strong&gt;XmlWriter&lt;/strong&gt;, por ejemplo.&lt;/p&gt;

&lt;p&gt;El resultado:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/carlos.rubalcava/SL9cMrOlZmI/AAAAAAAAAXc/8C5Jt6WAoQo/s1600-h/query1XMLresults3.png"&gt;&lt;img title="resultados del query" height="480" alt="resultados del query" src="http://lh6.ggpht.com/carlos.rubalcava/SL9cNlgAPFI/AAAAAAAAAXg/SCPcBg6_FSM/query1XMLresults_thumb1.png?imgmax=800" width="400" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Esto ya es prácticamente lo que quiero.&amp;#160; Sin embargo, mi código hasta ahorita son como 30 líneas—principalmente por el formato, en realidad solo he utilizado como 7 instrucciones—y me gustaría condensar el código más.&amp;#160; Además descubrí que el ordenamiento en realidad no lo necesito—puedo hacerlo en Excel—y que al documento XML le falta la declaración &lt;strong&gt;&amp;lt;?xml&amp;gt;&lt;/strong&gt; al pricipio.&lt;/p&gt;

&lt;h3&gt;Sintetizando el código&lt;/h3&gt;

&lt;p&gt;Así que decidí cambiar la proyección (el &lt;strong&gt;select &lt;/strong&gt;pues) de mi query original.&amp;#160; El total del código quedó así:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt; xml = &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;.Load(&lt;span style="color: #a31515"&gt;@&amp;quot;C:\Users\Carlos\Desktop\sampleFxCopReport.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;&amp;gt; query =&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;from&lt;/span&gt; e &lt;span style="color: blue"&gt;in&lt;/span&gt; xml.Descendants(&lt;span style="color: #a31515"&gt;&amp;quot;Issue&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;where&lt;/span&gt; e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Message&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;TypeName&amp;quot;&lt;/span&gt;).First().Value == &lt;span style="color: #a31515"&gt;&amp;quot;ReviewSqlQueriesForSecurityVulnerabilities&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;select&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Vulnerability&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Module&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Module&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Namespace&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Namespace&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Method&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Member&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Issue&amp;quot;&lt;/span&gt;, e.Value)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;XDocument&lt;/span&gt; xDoc = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XDocument&lt;/span&gt;(&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XDeclaration&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Vulnerabilities&amp;quot;&lt;/span&gt;, query)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; );&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Nota que con solo 2 instrucciones—la instrucción de carga no cuenta—logré hacer la transformación (&lt;strong&gt;¡!&lt;/strong&gt;) &lt;img alt="smile_omg" src="http://spaces.live.com/rte/emoticons/smile_omg.gif" /&gt;.&amp;#160;&amp;#160; Veamos los cambios significativos al query.&lt;/p&gt;

&lt;p&gt;Primero, el resultado es almacenado en una variable que ya no es tipo &lt;strong&gt;var&lt;/strong&gt;, sino &lt;strong&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/strong&gt; donde &lt;strong&gt;T&lt;/strong&gt; es &lt;strong&gt;XElement&lt;/strong&gt;.&amp;#160; Esto es porque en la proyección (el &lt;strong&gt;select&lt;/strong&gt;) ya no estoy utilizando un tipo anónimo para construir un objeto, sino los constructores de la clase &lt;strong&gt;XElement &lt;/strong&gt;para obtener objetos de este tipo.&lt;/p&gt;

&lt;p&gt;Finalmente, a la hora de crear el nuevo documento XML, utilizo también un constructor alterno de &lt;strong&gt;XDocument&lt;/strong&gt;, para primero pasarle la declaración XML, y agregarle un elemento &lt;em&gt;&amp;lt;Vulnerabilities&amp;gt;&lt;/em&gt; que tendrá como contenido el resultado de mi query—la lista de nodos &lt;em&gt;&amp;lt;Vulnerability&amp;gt;&lt;/em&gt; con sus respectivos elementos hijo.&amp;#160; ¿Así o más mágico? &lt;img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" /&gt;&lt;/p&gt;

&lt;p&gt;[&lt;em&gt;Pronunciarse en tono de vendedor de chuchulucos por T.V.:&lt;/em&gt;] &lt;strong&gt;¡Pero aún hay más!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;¿Quieres saber lo que se necesita para guardar el nuevo documento de XML a un archivo?&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;xDoc.Save(&lt;span style="color: #a31515"&gt;@&amp;quot;C:\Users\Carlos\Desktop\transformedReport.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Así que con un total de 4 instrucciones logré cargar un archivo complejo de XML, transformarlo y escribir los resultados a otro más amigable.&lt;/p&gt;

&lt;p&gt;[&lt;em&gt;Pronunciarse en tono de vendedor de chuchulucos por T.V.:&lt;/em&gt;] &lt;strong&gt;¡Pero aún hay más!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Sintetizándo el código aún más&lt;/h3&gt;

&lt;p&gt;¿En verdad quieres ponerte quisiquilloso con el query?&amp;#160; Puedes lograr la totalidad de la lógica con solo 3 instrucciones—una para cargar el archivo original, otra para transformarlo y una más para guardar el archivo resultante—si utilizas expresiones lambda.&amp;#160; Este ejemplo no lo explico porque igual y te acabo confundiendo más, pero creo que ilustra el poderío de LINQ y las nuevas clases para manipular XML.&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt; xml = &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;.Load(&lt;span style="color: #a31515"&gt;@&amp;quot;C:\Users\Carlos\Desktop\sampleFxCopReport.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #2b91af"&gt;XDocument&lt;/span&gt; xDoc = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XDocument&lt;/span&gt;(&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XDeclaration&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt;),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Vulnerabilities&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xml.Descendants(&lt;span style="color: #a31515"&gt;&amp;quot;Issue&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Where(i =&amp;gt; i.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Message&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;TypeName&amp;quot;&lt;/span&gt;).First().Value == &lt;span style="color: #a31515"&gt;&amp;quot;ReviewSqlQueriesForSecurityVulnerabilities&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Select(e =&amp;gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Vulnerability&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Module&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Module&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Namespace&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Namespace&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Method&amp;quot;&lt;/span&gt;, e.Ancestors(&lt;span style="color: #a31515"&gt;&amp;quot;Member&amp;quot;&lt;/span&gt;).Attributes(&lt;span style="color: #a31515"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;).First().Value),&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;XElement&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Issue&amp;quot;&lt;/span&gt;, e.Value)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; )&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; )&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; )&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; );&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;xDoc.Save(&lt;span style="color: #a31515"&gt;@&amp;quot;c:\users\Carlos\Desktop\transformedReport.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;¿Qué tal, eh? &lt;img alt="smile_nerd" src="http://spaces.live.com/rte/emoticons/smile_nerd.gif" /&gt;&lt;/p&gt;

&lt;h3&gt;Conclusión&lt;/h3&gt;

&lt;p&gt;Este artículo mostró un ejemplo de cómo transformar un documento XML utilizando LINQ to XML.&amp;#160; También mostró de manera práctica qué son los tipos anónimos (“clases sin nombres”), cómo cargar y escribir archivos XML con las clases &lt;strong&gt;XElement&lt;/strong&gt; y &lt;strong&gt;XDocument &lt;/strong&gt;incluidas en el .NET Framework 3.5, e ilustró brevemente el uso de expresiones lambda.&amp;#160; La mayoría de los conceptos—excepto quizá las expresiones lambda—aplican también si estás utilizando Visual Basic como tu lenguaje de desarrollo para .NET.&lt;/p&gt;

&lt;p&gt;Enjoy. &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;font color="#0000ff"&gt;[Actualización 04-sept-2008, 3:00 p.m.]&lt;/font&gt; Para aquellos que son bien &lt;em&gt;técnicos&lt;/em&gt;, los tipos anónimos sí tienen un nombre, solo que este no es elegido por el desarrollador, sino por el compilador, &lt;a href="http://geeks.ms/blogs/fhualpa/archive/2008/07/09/tipos-an-243-nimos-qui-233-n-se-hace-cargo.aspx"&gt;como lo mostró Fernik en su excelente artrículo&lt;/a&gt;.&amp;#160; En términos &lt;em&gt;prácticos&lt;/em&gt; no importa porque normalmente no se ofrece saber cuál es ese nombre.&amp;#160; La palabra clave &lt;strong&gt;var&lt;/strong&gt; permite que interactuemos con ellos como si fueran tipos comúnes y corrientes.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-8947812254021953154?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=CzN6L-pmLZU:VYg9trQ75DE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=CzN6L-pmLZU:VYg9trQ75DE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=CzN6L-pmLZU:VYg9trQ75DE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=CzN6L-pmLZU:VYg9trQ75DE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/CzN6L-pmLZU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/8947812254021953154/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=8947812254021953154" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8947812254021953154" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8947812254021953154" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/CzN6L-pmLZU/cmo-transformar-xml-sin-usar-xslt.html" title="Cómo transformar XML sin usar XSLT" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/09/cmo-transformar-xml-sin-usar-xslt.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-7321095857129581281</id><published>2008-09-03T13:30:00.003-06:00</published><updated>2008-09-03T13:48:30.790-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo web" /><category scheme="http://www.blogger.com/atom/ns#" term="diseño web" /><category scheme="http://www.blogger.com/atom/ns#" term="aventuras en betalandia" /><title type="text">Google Chrome beta tampoco me impresiona</title><content type="html">&lt;p&gt;Todo mundo y su abuelita para ahora se ha de haber enterado que &lt;a href="http://www.google.com/chrome"&gt;Google lanzó su propio browser&lt;/a&gt;—&lt;em&gt;Wired &lt;/em&gt;tiene &lt;a href="http://www.wired.com/techbiz/it/magazine/16-10/mf_chrome?currentPage=all"&gt;un artículo interesante&lt;/a&gt; de por qué se tardaron tanto para lanzarlo, cuando para muchas personas era una evolución lógica.&lt;/p&gt;  &lt;p&gt;Bajo riesgo repetir &lt;a href="http://www.dotnetero.com/2008/03/apple-libera-safari-para-windows-ie8.html"&gt;artículos anteriores&lt;/a&gt;, tengo que admitir que cuando comencé a ver &lt;a href="http://www.google.com/chrome/intl/es/features.html"&gt;la lista de características&lt;/a&gt; “inovadoras” me sorprendió lo &lt;strong&gt;no&lt;/strong&gt; inovadoras que en realidad son:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Omnibox.&lt;/strong&gt;  Básicamente una versión del &lt;em&gt;Awesomebar&lt;/em&gt; (Firefox 3) o del &lt;em&gt;Smart Address Bar&lt;/em&gt; de IE8 beta2, pero con búsqueda integrada.  Moderadamente interesante.  Se parece también al search box que trae Flock—y el cual espero fusionen con el &lt;em&gt;Awesomebar&lt;/em&gt; para Flock 2 final.  &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Pestañas independientes.&lt;/strong&gt;  Rara vez se me ha ofrecido que una pestaña haga que truene el navegador.  De las pocas veces que me ha sucedido es cuando corro IETab dentro de Firefox, e incluso en esas instancias FF hace buen trabajo en recuperar mi sesión.  Pero, la idea es interesante.  Tanto que al parecer &lt;a href="http://www.winsupersite.com/reviews/ie8_beta2.asp"&gt;se le ocurrió lo mismo al equipo de Internet Explorer 8.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Acceso directo a aplicaciones.&lt;/strong&gt;  Un concepto que se me hizo bastante útil, desde que el equipo de Mozilla comenzó con el &lt;a href="http://developer.mozilla.org/en/Prism"&gt;proyecto Prism&lt;/a&gt; hace casi un año (¿?)—y del cual, naturalmente &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6665"&gt;hay una extensión para Firefox&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Pestañas dinámicas.&lt;/strong&gt;  Yo suelo mantener una sola ventana de navegador abierta—si no ¿pa’ qué quiero las pestañas, verdad?—pero si les gusta esta característica, también pueden encontrarla en Safari. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Modo incógnito&lt;/strong&gt;.  O como dijo un amigo mío, modo “p0rn” jejeje—y no que &lt;em&gt;yo &lt;/em&gt;lo use, ¿verdad? Hmm… ¿dónde he visto eso? ¡Ah! Qué tal en Safari (conocido como &lt;em&gt;Private Browsing) &lt;/em&gt;y en IE 8 beta 2 (conocido como &lt;em&gt;InPrivate&lt;/em&gt;). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Marcadores instantáneos.&lt;/strong&gt;  Ver Flock, y FF 3.  No digo más. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;De lo único que en verdad puedo ver inovador es el motor de JavaScript que le pusieron, V8, que al parecer &lt;a href="http://news.cnet.com/8301-1001_3-10030888-92.html?part=rss"&gt;patea traseros en desempeño&lt;/a&gt;.  Y aunque algunos autores han argumentado que JavaScript es “solo una parte mínima del Web”, yo les digo: ¿Alguna vez has intentado correr Gmail, Slashdot o Facebook en IE7 o previos contra &lt;em&gt;cualquier&lt;/em&gt; otro navegador moderno?  JavaScript sí importa, y mucho.&lt;/p&gt;  &lt;p&gt;Tratando de no tirar mucho rollo—demasiado tarde, lo sé—sí hubo cosas que me gustaron:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Desempeño. &lt;/strong&gt;Jala hecho la mater &lt;strong&gt;cuando no está detrás de un proxy&lt;/strong&gt;—lean un poco más abajo&lt;strong&gt;.&lt;/strong&gt;  &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Google Gears integrado. &lt;/strong&gt;No tienes que instalar esto por separado para utilizar, por ejemplo, Google Reader en modo &lt;em&gt;offline.&lt;/em&gt; No sorprendente, dado que otro producto de Google, pero es útil que lo traiga integrado. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Interfaz minimalista. &lt;/strong&gt;De las primeras cosas que le hago a Firefox es quitarle todos los botones y cosas extra y si vieran mi pantalla verían que mi arreglo quedó prácticamente idéntico al que usaron en Chrome.  Safari también viene de cajón así. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Herramientas de desarrollo Web incluidas.&lt;/strong&gt;  Al igual que  Safari, puedes seleccionar un elemento y dar “Inspect Element” para obtener información de CSS, etc. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Búsqueda en la página amigable.&lt;/strong&gt;  Casi igual que la de Safari—¿comienzan a ver un patrón? &lt;/li&gt; &lt;/ul&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/carlos.rubalcava/SL7lznqk6tI/AAAAAAAAAVg/MYOqvefxoTw/s1600-h/image%5B8%5D.png"&gt;&lt;img title="image" alt="image" src="http://lh6.ggpht.com/carlos.rubalcava/SL7l8eW6ILI/AAAAAAAAAVk/hpsh1n1pkq4/image_thumb%5B6%5D.png?imgmax=800" width="604" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Si quisiera resumir “lo bueno” diría que en muchos sentidos, Chrome es como Safari, pero sin el rendereo borroso de fonts en Windows y con Gears integrado.&lt;/p&gt;  &lt;p&gt;Lo que de plano no me gusto, y de hecho impide que lo use de tiempo completo:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;No le gustan los proxies&lt;/strong&gt;, sobretodo los que te piden username y password.  Ni siquiera puedes instalarlo si estás detrás de un proxy de este tipo.  Y el desempeño se va por el caño, con muchas páginas que no se llegan a cargarse completas—no pude correr Gmail, lo cual es el colmo.  Esto quizá es de esperarse de un beta—Safari tuvo problemas similares que resolvieron en la versión final—pero por ahora es un &lt;em&gt;dealbreaker&lt;/em&gt; para mi. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Fallas de compatibilidad con sitios sociales.&lt;/strong&gt;  Algunas cosas en Facebook y MySpace no funcionan aún con Chrome.  Unas simplemente hacen una experiencia menos agradable y otras de plano hacen que no puedas utilizar funcionalidad de estos sitios.  MySpace puede irse a chiflar alpistle—es el sitio del demonio en lo que a mi concierne—pero Facebook está bastante bien armado hasta donde sé.  Pero si el navegador no jala bien en estos sitios, ¿cuántos chavalos de 12 a 17 años que se la pasan viviendo ahí lo usarían? &lt;/li&gt;&lt;li&gt;&lt;strong&gt;No trae soporte para RSS.&lt;/strong&gt;  Solo muestra el XML del feed.  ¿Cómo se supone que voy a leer mis noticias?
&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;¿Matará Chrome a IE?  Lo dudo.  Habrá que ver lo que sucede.  En mi opinión esto tomaría tiempo, aunque es interesante que algunos ya le &lt;a href="http://tech.slashdot.org/tech/08/09/03/1343226.shtml"&gt;achacan el 3% del mercado&lt;/a&gt; después de su lanzamiento.  Google es una compañía a la par con los recursos y reputación de Microsoft, lo cual introduce una dinámica interesante, sobretodo para los que desarrollamos aplicaciones Web.  Antes probablemente te preocupabas por que tus sitios jalaran en IE o Firefox, si mucho—al pobre de Opera nunca lo han pelado y mucho menos a Konqueror et.al.  Ahora que tienes Safari y Chrome en el mercado, creo que finalmente comenzaremos una era donde los estándares en el desarrollo del Web cobren la importancia que debieron tener desde el principio.  *Cruzando los dedos para que suceda*&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-7321095857129581281?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=G0CTj8__qrE:sattM_LtqCI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=G0CTj8__qrE:sattM_LtqCI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=G0CTj8__qrE:sattM_LtqCI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=G0CTj8__qrE:sattM_LtqCI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/G0CTj8__qrE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/7321095857129581281/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=7321095857129581281" title="5 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7321095857129581281" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7321095857129581281" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/G0CTj8__qrE/google-chrome-beta-tampoco-me.html" title="Google Chrome beta tampoco me impresiona" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/09/google-chrome-beta-tampoco-me.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-7336199528198435221</id><published>2008-08-12T05:43:00.001-06:00</published><updated>2008-08-12T05:58:54.726-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><title type="text">Visual Studio 2008 Service Pack 1 ya está disponible</title><content type="html">&lt;p&gt;Al menos para suscriptores de MSDN.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/msdnsubscriptions/archive/2008/08/11/visual-studio-2008-service-pack-1-files-are-also-now-available.aspx"&gt;Official MSDN Subscriptions Blog : Visual Studio 2008 Service Pack 1 files are also now available&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Oh, y también ya soltaron la versión RTM de SQL Server 2008.&lt;/p&gt;  &lt;p&gt;¿Qué es lo que agrega?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Visual Studio 2008 SP1 delivers: &lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Improved WPF designers &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;SQL Server 2008 support&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;&lt;strong&gt;ADO.NET Entity Designer&lt;/strong&gt; &lt;/li&gt;      &lt;li&gt;Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007 style ‘Ribbon’) &lt;/li&gt;      &lt;li&gt;Visual Studio Team System Team Foundation Server (TFS) addresses customer feedback on version control usability and performance, email integration with work item tracking and full support for hosting on SQL Server 2008 &lt;/li&gt;      &lt;li&gt;Richer JavaScript support, enhanced AJAX and data tools, and Web site deployment improvements&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;strong&gt;The .NET Framework 3.5 SP1 delivers:&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Performance increases between 20-45% for WPF-based applications – without having to change any code &lt;/li&gt;      &lt;li&gt;WCF improvements that give developers more control over the way they access data and services &lt;/li&gt;      &lt;li&gt;Streamlined installation experience for client applications &lt;/li&gt;      &lt;li&gt;Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET Data Services and support for SQL Server 2008’s new features&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;[Tomado de &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;esta página&lt;/a&gt;, énfasis mía]&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-7336199528198435221?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=WTVGYSYUxUE:LXu_voId9h4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=WTVGYSYUxUE:LXu_voId9h4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=WTVGYSYUxUE:LXu_voId9h4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=WTVGYSYUxUE:LXu_voId9h4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/WTVGYSYUxUE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/7336199528198435221/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=7336199528198435221" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7336199528198435221" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7336199528198435221" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/WTVGYSYUxUE/visual-studio-2008-service-pack-1-ya.html" title="Visual Studio 2008 Service Pack 1 ya está disponible" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/08/visual-studio-2008-service-pack-1-ya.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-1501319756429352932</id><published>2008-06-10T19:45:00.001-06:00</published><updated>2008-06-10T19:45:31.669-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="comunidad" /><category scheme="http://www.blogger.com/atom/ns#" term="cotorreo" /><title type="text">Reseña del Lanzamiento de Visual Studio 2008</title><content type="html">&lt;p&gt;Alex Briseño puso una muy buena &lt;a href="http://alexbriseno.blogspot.com/2008/06/ahora-si-llego-el-dia.html"&gt;reseña del evento que tuvimos el pasado martes 27 de mayo&lt;/a&gt;, repleto de fotografías, pa’ que vayan a leerla.&amp;#160; &lt;/p&gt;  &lt;p&gt;La verdad yo me divertí un chorro, a pesar de que quedé exhausto porque me tocó dar 3 pláticas—lo cual implica hablar casi tres horas—me dió mucho gusto ver tanta gente.&amp;#160; También se sintió bien padre que que ahora sí tuvimos bastantes cosas que regalar como todos esos paquetes de desarrollador con Visual Studio 2008, SQL Server 2008 y Windows Server 2008, así como los discos de Windows Vista y las suscripciones de TechNet. &lt;/p&gt;  &lt;p&gt;Pero lo más chido creo que fue definitivamente el final, cuando nos pusimos a jugar—o a hacer el intento de jugar—boliche y a echarnos unas chelas con toda la raza &lt;em&gt;hardcore &lt;/em&gt;que se quedó hasta esa hora.&amp;#160; &lt;/p&gt;  &lt;p&gt;El momento &lt;i&gt;priceless&lt;/i&gt; se lo llevó Sergio, después de ganarle a Alex: “No pos si es la primera vez que juego”... ajá... sí cómo no... jejeje&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-1501319756429352932?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=QnhcDL-mV6Y:tQpLSX8OczQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=QnhcDL-mV6Y:tQpLSX8OczQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=QnhcDL-mV6Y:tQpLSX8OczQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=QnhcDL-mV6Y:tQpLSX8OczQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/QnhcDL-mV6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/1501319756429352932/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=1501319756429352932" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/1501319756429352932" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/1501319756429352932" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/QnhcDL-mV6Y/resea-del-lanzamiento-de-visual-studio.html" title="Reseña del Lanzamiento de Visual Studio 2008" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/06/resea-del-lanzamiento-de-visual-studio.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-8249054782891912753</id><published>2008-06-03T13:07:00.001-06:00</published><updated>2008-11-16T14:22:04.486-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="preguntas y respuestas" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title type="text">Cómo acceder a controles dentro de un GridView</title><content type="html">&lt;p&gt;Esta entrada sali&amp;#243; como resultado de &lt;a href="http://comunidadnetjuarez.org/forums/thread/1436.aspx"&gt;una pregunta que hicieron en el Foro de la Comunidad .NET&lt;/a&gt;.&amp;#160; La pregunta, esencialmente, es: &lt;em&gt;&amp;#191;C&amp;#243;mo accedo a un control que tengo en una columna templeteada &lt;/em&gt;&lt;em&gt;dentro de un &lt;/em&gt;&lt;strong&gt;GridView&lt;/strong&gt; &lt;em&gt;de ASP.NET?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Me pareci&amp;#243; buena la pregunta, as&amp;#237; que hice un peque&amp;#241;o ejemplo para ilustrarlo.&amp;#160;&amp;#160; Una columna templeteada (&lt;strong&gt;TemplateField&lt;/strong&gt;) es distinta a una normal (&lt;strong&gt;BoundField&lt;/strong&gt;) en que tienes m&amp;#225;s control sobre los controles que aparecen en la columna.&amp;#160; En otras palabras, t&amp;#250; especificas qu&amp;#233; quieres que se muestre cuando el rengl&amp;#243;n est&amp;#225; en modo &amp;quot;normal&amp;quot; (&lt;strong&gt;ItemTemplate&lt;/strong&gt;) o cuando est&amp;#225; en modo &amp;quot;edici&amp;#243;n&amp;quot; (&lt;strong&gt;EditItemTemplate&lt;/strong&gt;).&amp;#160; Puedes tener m&amp;#250;ltiples controles dentro de la columna, en lugar de solo uno que represente el dato.&lt;/p&gt;  &lt;p&gt;La siguiente p&amp;#225;gina contiene un GridView con tres columnas que vienen de un SqlDataSource.&amp;#160; Los datos provienen de la cl&amp;#225;sica base de datos Northwind.&amp;#160;&amp;#160; En este caso estoy recuperando datos de la tabla de productos:&lt;/p&gt;  &lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;   &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: #a31515"&gt;Page&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;VB&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;CodeFile&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Default.aspx.vb&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: red"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;_Default&amp;quot;&lt;/span&gt; &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #a31515"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: red"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Head1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Accediendo a Elementos en un GridView&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;style&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/css&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;#miGrid&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;width&lt;/span&gt;: &lt;span style="color: blue"&gt;450px&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;float&lt;/span&gt;: &lt;span style="color: blue"&gt;left&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;leerElementosButton&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Leer elementos&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;miGrid&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;GridView&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;GridView1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;ProductID&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;DataSourceID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;SqlDataSource1&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;EmptyDataText&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;No hay registros que mostrar.&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;BoundField&lt;/span&gt; &lt;span style="color: red"&gt;DataField&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;ProductID&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;HeaderText&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;ID Producto&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;InsertVisible&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;ReadOnly&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;BoundField&lt;/span&gt; &lt;span style="color: red"&gt;DataField&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;ProductName&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;HeaderText&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Nombre Producto&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TemplateField&lt;/span&gt; &lt;span style="color: red"&gt;HeaderText&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Descontinuado&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;CheckBox1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;Checked&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Bind(&amp;quot;Discontinued&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;CheckBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;CheckBox1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;Checked&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;# Bind(&amp;quot;Discontinued&amp;quot;) &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;Enabled&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TemplateField&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Columns&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;GridView&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SqlDataSource&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;SqlDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;ConnectionString&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;$ ConnectionStrings:NorthwindConnectionString &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;ProviderName&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;$ ConnectionStrings:NorthwindConnectionString.ProviderName &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;SelectCommand&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;SELECT [ProductID], [ProductName], [Discontinued] FROM [Products]&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;SqlDataSource&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;resultados&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;resultadosLabel&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Para acceder, por ejemplo, al CheckBox que est&amp;#225; dentro de la columna templeteada, primero necesitas una referencia al rengl&amp;#243;n, ya que el ID del control se repetir&amp;#225; &lt;em&gt;n&lt;/em&gt; veces (una por cada rengl&amp;#243;n del Grid).&amp;#160; &lt;/p&gt;

&lt;p&gt;Esto se puede hacer de varias formas, por ejemplo, si tienes un manejador para un evento clic en alguno de los controles dentro del rengl&amp;#243;n pues en ese caso el &lt;em&gt;sender&lt;/em&gt; viene siendo el rengl&amp;#243;n en s&amp;#237;, entonces &amp;#250;nicamente te falta encontrar el CheckBox de ese rengl&amp;#243;n para leer sus propiedades.&amp;#160;&amp;#160; Otra forma de hacerlo, como en el siguiente ejemplo, es leer todos los renglones y por cada uno encontrar el CheckBox que le corresponde al rengl&amp;#243;n:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 10pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 400px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;Partial&lt;/span&gt; &lt;span style="color: blue"&gt;Class&lt;/span&gt; _Default&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;Inherits&lt;/span&gt; System.Web.UI.Page&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;Protected&lt;/span&gt; &lt;span style="color: blue"&gt;Sub&lt;/span&gt; leerElementosButton_Click(&lt;span style="color: blue"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Object&lt;/span&gt;, _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: blue"&gt;Handles&lt;/span&gt; leerElementosButton.Click&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; grid &lt;span style="color: blue"&gt;As&lt;/span&gt; GridView = &lt;span style="color: blue"&gt;Me&lt;/span&gt;.GridView1&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; checkBox &lt;span style="color: blue"&gt;As&lt;/span&gt; CheckBox&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; resultado &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;New&lt;/span&gt; StringBuilder&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;For&lt;/span&gt; &lt;span style="color: blue"&gt;Each&lt;/span&gt; renglon &lt;span style="color: blue"&gt;As&lt;/span&gt; GridViewRow &lt;span style="color: blue"&gt;In&lt;/span&gt; grid.Rows&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; checkBox = &lt;span style="color: blue"&gt;CType&lt;/span&gt;(renglon.FindControl(&lt;span style="color: #a31515"&gt;&amp;quot;CheckBox1&amp;quot;&lt;/span&gt;), CheckBox)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;If&lt;/span&gt; checkBox.Checked &lt;span style="color: blue"&gt;Then&lt;/span&gt;&amp;#160; &lt;span style="color: green"&gt;'Hacer algo con esta informaci&amp;#243;n&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; resultado.Append(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format( _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;El rengl&amp;#243;n {0} est&amp;#225; descontinuado &amp;lt;br /&amp;gt;&amp;quot;&lt;/span&gt;, renglon.DataItemIndex))&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Next&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160; resultadosLabel.Text = resultado.ToString()&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;En res&amp;#250;men, la idea clave aqu&amp;#237; es que el &lt;strong&gt;GridView&lt;/strong&gt; tiene una colecci&amp;#243;n de renglones (de tipo &lt;strong&gt;GridViewRow&lt;/strong&gt;) y cada uno de estos renglones tiene su correspondiente colecci&amp;#243;n de controles que est&amp;#225;n dentro de ese rengl&amp;#243;n.&amp;#160; El &lt;strong&gt;GridViewRow &lt;/strong&gt;tambi&amp;#233;n te da acceso al &lt;strong&gt;DataItem &lt;/strong&gt;que contiene los datos asociados al rengl&amp;#243;n, en caso de que lo requirieras.&lt;/p&gt;

&lt;p&gt;El resultado de correr el c&amp;#243;digo anterior (dando clic al bot&amp;#243;n) es el siguiente:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/AccediendoAElementosEnGridView.jpg" /&gt; &lt;/p&gt;

&lt;p&gt;Espero les ayude.&lt;/p&gt;

&lt;p&gt;Enjoy &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-8249054782891912753?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=r3sEHfagjIU:R3ASg9Bb50s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=r3sEHfagjIU:R3ASg9Bb50s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=r3sEHfagjIU:R3ASg9Bb50s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=r3sEHfagjIU:R3ASg9Bb50s:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/r3sEHfagjIU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/8249054782891912753/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=8249054782891912753" title="10 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8249054782891912753" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8249054782891912753" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/r3sEHfagjIU/cmo-acceder-controles-dentro-de-un.html" title="Cómo acceder a controles dentro de un GridView" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/06/cmo-acceder-controles-dentro-de-un.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-4095576928342724100</id><published>2008-05-15T12:28:00.001-06:00</published><updated>2008-05-15T12:28:09.239-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="cotorreo" /><title type="text">Creo que he estado trabajando mucho...</title><content type="html">&lt;p&gt;Me sali&amp;#243; esto hoy.&amp;#160; Creo que Visual Studio est&amp;#225; tratando de decirme algo...&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/OutOfMemory.png" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-4095576928342724100?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=rvvJrPyobgM:o3bI7YQNeD0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=rvvJrPyobgM:o3bI7YQNeD0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=rvvJrPyobgM:o3bI7YQNeD0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=rvvJrPyobgM:o3bI7YQNeD0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/rvvJrPyobgM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/4095576928342724100/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=4095576928342724100" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/4095576928342724100" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/4095576928342724100" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/rvvJrPyobgM/creo-que-he-estado-trabajando-mucho.html" title="Creo que he estado trabajando mucho..." /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/05/creo-que-he-estado-trabajando-mucho.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-3166506781431263946</id><published>2008-04-20T15:42:00.002-06:00</published><updated>2008-11-16T14:22:04.487-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="referencia rápida" /><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><title type="text">Domina los atajos de teclado para Visual Studio</title><content type="html">&lt;p&gt;Una de las maneras m&amp;#225;s f&amp;#225;ciles de incrementar tu productividad cuando utilizas casi cualquier programa es aprenderte los atajos de teclado&amp;#8212;los mentaos &lt;em&gt;keyboard shortcuts&lt;/em&gt;, pues.&amp;#160; De hecho tengo amigos que &lt;strong&gt;odian &lt;/strong&gt;levantar las manos del teclado cuando est&amp;#225;n programando.&amp;#160; Si alguna vez has usado alg&amp;#250;n editor de texto como &lt;em&gt;&lt;strong&gt;vi&lt;/strong&gt;&lt;/em&gt;, quiz&amp;#225; hayas apreciado que una vez que dominas la complejidad de los comandos, en realidad se siente como si estuvieras &amp;quot;platicando&amp;quot; con el editor. Y aunque yo no llegar&amp;#237;a al extremo de recomendar que &lt;a href="http://www.viemu.com/"&gt;manejes Visual Studio con los comandos de vi&lt;/a&gt;, s&amp;#237; recomiendo enormemente que te aprendas algunos de los m&amp;#225;s com&amp;#250;nes que ya vienen de caj&amp;#243;n con el &lt;abbr title="Integrated Development Environment"&gt;IDE&lt;/abbr&gt;. &lt;/p&gt;  &lt;p&gt;El problema es que Visual Studio tiene 8 millones 557,934 comandos.&amp;#160; Bueno, quiz&amp;#225; algunos menos, pero a&amp;#250;n as&amp;#237; son un titipuchal.&amp;#160; Y lo que es peor, los atajos de teclado cambian de acuerdo a la configuraci&amp;#243;n general de Visual Studio.&amp;#160; Esta es la configuraci&amp;#243;n que te pregunta la primer vez que arrancas el IDE o si das &lt;strong&gt;Tools&amp;gt;Import and Export Settings...&amp;gt;Reset all settings&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img alt="Ventana de di&amp;#225;logo de configuraci&amp;#243;n general de Visual Studio" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/visualstudiosettings.png" /&gt; &lt;/p&gt;  &lt;p&gt;Aqu&amp;#237; es donde ayudan algunos documentos de referencia r&amp;#225;pida.&amp;#160; Si primordialmente desarrollas en Visual Basic, y utilizas esa configuraci&amp;#243;n &lt;strong&gt;&lt;em&gt;(Visual Basic Development Settings)&lt;/em&gt;&lt;/strong&gt;, &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en"&gt;aqu&amp;#237; hay un PDF de Microsoft&lt;/a&gt; que los resume.&amp;#160; &lt;/p&gt;  &lt;p&gt;Si usas la configuraci&amp;#243;n de &lt;em&gt;&lt;strong&gt;Visual C# Development Settings&lt;/strong&gt;&lt;/em&gt;, para desarrollar primordialmente en C#, est&amp;#225;n este &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c15d210d-a926-46a8-a586-31f8a2e576fe&amp;amp;DisplayLang=en"&gt;para Visual Studio 2005&lt;/a&gt; y este otro &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=E5F902A8-5BB5-4CC6-907E-472809749973&amp;amp;displaylang=en"&gt;para Visual Studio 2008&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Sin embargo, yo utilizo la configuraci&amp;#243;n para desarrollo general &lt;em&gt;&lt;strong&gt;(General Development Settings)&lt;/strong&gt;&lt;/em&gt; porque desarrollo tanto aplicaciones Web como Windows, a veces en C# y a veces en Visual Basic, aparte que ya me hab&amp;#237;a aprendido algunos atajos desde versiones anteriores de Visual Studio.&amp;#160; Como no encontr&amp;#233; ninguna referencia r&amp;#225;pida para esta configuraci&amp;#243;n, cre&amp;#233; mi propio documento.&amp;#160; Puedes &lt;a href="http://comunidadnetjuarez.org/files/folders/varios/entry1325.aspx"&gt;descargarlo del sitio de la Comunidad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Mi recomendaci&amp;#243;n personal es, no intentes aprenderlos todos de un zopet&amp;#243;n.&amp;#160; Dice un proverbio: &amp;quot;&amp;#191;C&amp;#243;mo te comes un elefante? Un bocado a la vez&amp;quot;.&amp;#160; As&amp;#237; que mejor escoge un grupo de comandos y practica cada uno por separado, repiti&amp;#233;ndolo al menos 20 veces.&amp;#160; Lo que yo hice fue agarrar una archivo con c&amp;#243;digo y practicar un comando a la vez en diferentes partes del archivo mientras lo &amp;quot;vocalizaba mentalmente&amp;quot; hasta que quedaba grabado en mi memoria muscular.&amp;#160; Luego practicaba el siguiente comando hasta terminar el grupo.&amp;#160; Al d&amp;#237;a siguiente me enfocaba en un grupo distinto, y as&amp;#237; sucesivamente.&lt;/p&gt;  &lt;h3&gt;C&amp;#243;mo crear tus propios atajos&lt;/h3&gt;  &lt;p&gt;Por supuesto, tambi&amp;#233;n puedes definir tus propios atajos.&amp;#160; Estos atajos pueden ejecutar un comando del IDE o alguna macro que hayas creado para alguna tarea espec&amp;#237;fica.&amp;#160; Por ejemplo, hay dos atajos que a mi me ha sido &amp;#250;til definir: uno para comparar el archivo actual contra la versi&amp;#243;n en el controlador de c&amp;#243;digo y otro para obtener el historial del archivo actual en el controlador de c&amp;#243;digo.&lt;/p&gt;  &lt;p&gt;Para definirlos, primero ve a &lt;strong&gt;Tools&amp;gt;Options... &lt;/strong&gt;y luego &lt;strong&gt;Environment&amp;gt;Keyboard&lt;/strong&gt;.&amp;#160; Al hacerlo ver&amp;#225;s la siguiente ventana:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/visualstudiokeyboardoptions.png" /&gt; &lt;/p&gt;  &lt;p&gt;En la parte donde dice &lt;em&gt;&lt;strong&gt;Show commands containing&lt;/strong&gt;&lt;/em&gt;, teclea parte del comando, p. ej. &amp;quot;compare&amp;quot;.&amp;#160; Esto traer&amp;#225; una lista de posibles comandos.&amp;#160; En este caso, el que busco es &lt;strong&gt;File.Compare&lt;/strong&gt;.&amp;#160; Luego, selecciona el comando adecuado de la lista y pon el cursor en la parte donde dice &lt;em&gt;&lt;strong&gt;Press shortcut keys&lt;/strong&gt;.&lt;/em&gt; Presiona la combinaci&amp;#243;n que desees utilizar.&amp;#160; Si la combinaci&amp;#243;n ya est&amp;#225; siendo utilizada por alg&amp;#250;n otro comando, esta informaci&amp;#243;n ser&amp;#225; mostrada en la parte de abajo donde dice &lt;strong&gt;&lt;em&gt;Shortcut currently used by.&lt;/em&gt;&lt;/strong&gt;&amp;#160; En mi caso escog&amp;#237; la combinaci&amp;#243;n &lt;strong&gt;Ctrl+Alt+F,C&lt;/strong&gt; para finalmente darle clic en el bot&amp;#243;n &lt;em&gt;&lt;strong&gt;Assign&lt;/strong&gt;&lt;/em&gt;.&amp;#160; &lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/visualstudiokeyboardoptions_filecom.png" /&gt; &lt;/p&gt;  &lt;p&gt;Repite los mismos pasos para el comando &lt;strong&gt;File.ViewHistory &lt;/strong&gt;y utiliza el atajo &lt;strong&gt;Ctrl+Alt+F,H&amp;#8212;&lt;/strong&gt;o cualquier otra combinaci&amp;#243;n que m&amp;#225;s te guste.&lt;/p&gt; En fin, creo que esto da la idea.&amp;#160; Enjoy &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-3166506781431263946?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=wpiwdaD-W3E:yg_3BtxKzJQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=wpiwdaD-W3E:yg_3BtxKzJQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=wpiwdaD-W3E:yg_3BtxKzJQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=wpiwdaD-W3E:yg_3BtxKzJQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/wpiwdaD-W3E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/3166506781431263946/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=3166506781431263946" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3166506781431263946" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3166506781431263946" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/wpiwdaD-W3E/atajos-de-teclado-para-visual-studio.html" title="Domina los atajos de teclado para Visual Studio" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/04/atajos-de-teclado-para-visual-studio.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-2747754159993854507</id><published>2008-04-11T19:51:00.001-06:00</published><updated>2008-04-11T19:51:54.598-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="el mundo es plano" /><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="cotorreo" /><title type="text">La Generación M: Al borde del un nuevo cambio</title><content type="html">&lt;p&gt;Hoy me toc&amp;#243; dar una pl&amp;#225;tica bastante diferente a la que estoy acostumbrado.&amp;#160; Resulta que los chavos de la carrera de Tecnolog&amp;#237;as Computacionales del Tec de Monterrey Campus Ju&amp;#225;rez (mi &amp;quot;alma mater&amp;quot;) hicieron un evento llamado &lt;strong&gt;El Congreso&lt;/strong&gt; con la finalidad de atraer a m&amp;#225;s chavos (y chavas, claro, si no qu&amp;#233; chiste) de las prepas y secundarias locales hacia las carreras de &amp;quot;sistemas&amp;quot;.&lt;/p&gt;  &lt;p&gt;Aparentemente algunos de ellos hab&amp;#237;an le&amp;#237;do mi blog y me enviaron un correo para invitarme a participar como expositor, lo cual se me hizo un honor.&amp;#160; Se siente medio raro regresar a la escuela de donde te graduaste para &amp;quot;ense&amp;#241;ar algo&amp;quot;.&amp;#160; Pero cuando me dijeron que la audiencia ser&amp;#237;an principalmente &lt;em&gt;lepes&lt;/em&gt; de preparatoria comenc&amp;#233; a ponerme un poco nervioso.&amp;#160; Despu&amp;#233;s de todo, han pasado casi 10 a&amp;#241;os&amp;#8212;a ver d&amp;#237;aganlo: &amp;quot;uuuuuuuuuuuuu!&amp;quot;&amp;#8212;desde que dej&amp;#233; de dar clases, y no me paraba a hablar enfrente de un grupo de esa edad.&amp;#160; Mi mente inmediatamente comenz&amp;#243; a dar vueltas: &amp;quot;Demonios, &amp;#191;de qu&amp;#233; les puedo hablar? &amp;#191;De qu&amp;#233; manera puedo encontrar un tema donde tengamos algo en com&amp;#250;n, y que hable de tecnolog&amp;#237;a?&amp;quot;&amp;#160; &lt;/p&gt;  &lt;p&gt;Pens&amp;#225;ndola un poco m&amp;#225;s ca&amp;#237; en cuenta que muchos de estos chicos, son &lt;em&gt;modelo 90&lt;/em&gt; o m&amp;#225;s reciente&amp;#8212;osea que nacieron despu&amp;#233;s de 1990&amp;#8212;lo cual me hizo sentir &lt;em&gt;m&amp;#225;s &lt;/em&gt;ruco todav&amp;#237;a porque yo soy setentayqu&amp;#237;h&amp;#250;bole.&amp;#160; Mientras m&amp;#225;s lo pensaba m&amp;#225;s me era evidente que hay un a brecha entre esta generaci&amp;#243;n y la m&amp;#237;a.&amp;#160; Comenc&amp;#233; a recordar c&amp;#243;mo era el mundo cuando &lt;em&gt;yo&lt;/em&gt; ten&amp;#237;a la edad de ellos&amp;#8212;hace 15 a&amp;#241;os m&amp;#225;s o menos&amp;#8212;y c&amp;#243;mo hab&amp;#237;a cambiado el mundo desde entonces hasta ahora, hasta que me cay&amp;#243; el veinte: &amp;quot;&amp;#191;y por qu&amp;#233; no hablar precisamente sobre eso?&amp;quot;.&lt;/p&gt;  &lt;p&gt;As&amp;#237; que ech&amp;#233; un poco de alucine este fue el resultado. &lt;/p&gt;  &lt;h3&gt;Generaci&amp;#243;n i&lt;/h3&gt;  &lt;p&gt;La i es de internet.&amp;#160; Esta es la generaci&amp;#243;n a la que creo que pertenezco.&amp;#160; En ella incluyo a las personas que eran adolescentes durante los pricipios de la d&amp;#233;cada de 1990 y que nos toc&amp;#243;, por un lado, ver el nacimiento del internet&amp;#8212;s&amp;#237; ya s&amp;#233; que el &lt;em&gt;intern&amp;#233;&lt;/em&gt; exist&amp;#237;a desde los 70s y 80s pero no fue sino hasta los 90s que el Web lo trajo a las masas &amp;#191;verdad?&amp;#8212;y por otro lado presenciar cambios hist&amp;#243;ricos a nivel mundial como la ca&amp;#237;da del comunismo.&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/generacion_i.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;A&amp;#250;n recuerdo ver en la televisi&amp;#243;n c&amp;#243;mo derribaban el muro de Berl&amp;#237;n.&amp;#160; Recuerdo ver tambi&amp;#233;n en la T.V. los tanques en Rusia mientras intentaron el golpe de estado contra Gorbachev y sentirme triste porque le&amp;#237; su libro sobre la &lt;em&gt;perestroika &lt;/em&gt;y el &lt;em&gt;glasnost&lt;/em&gt;.&amp;#160; Recuerdo la ca&amp;#237;da, pa&amp;#237;s por pa&amp;#237;s, de la cortina de hierro en Europa y tambi&amp;#233;n la &lt;em&gt;primera&lt;/em&gt; Guerra del Golfo P&amp;#233;rsico donde &lt;em&gt;una coalici&amp;#243;n de pa&amp;#237;ses&lt;/em&gt; decidi&amp;#243; luchar contra Saddam Hussein.&lt;/p&gt;  &lt;p&gt;Para cuando tuve edad de entrar en a la carrera en 1994, el mundo entero parec&amp;#237;a enamorado de nuevo con el capitalismo y la apertura de mercados.&amp;#160; M&amp;#233;xico llevaba poco que hab&amp;#237;a firmado el TLC y en el Tec hasta inventaron carreras nuevas como la de Lic. en Comercio Internacional.&amp;#160; Tambi&amp;#233;n por aquellos tiempos el internet comenzaba a salir de las escuelas y a entrar a los hogares.&amp;#160; El Tec, que hasta entonces hab&amp;#237;a sido el &amp;#250;nico ISP de Cd. Ju&amp;#225;rez, le dej&amp;#243; eso a compa&amp;#241;&amp;#237;as como Infolink (si mal no recuerdo)&amp;#8212;&amp;#191;se acuerdan cuando ten&amp;#237;an que pagarle a alguien y marcarles por tel&amp;#233;fono con su m&amp;#243;dem para estar &amp;quot;en l&amp;#237;nea&amp;quot;? &amp;#191;No? &lt;em&gt;Chin.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;El caso es que se respiraba un ambiente de apertura.&amp;#160; En el lado tecnol&amp;#243;gico esa actitud comenz&amp;#243; a reflejarse en movimientos como el de Open Source.&amp;#160; Las personas comenzaron a colaborar a pesar de las grandes distancias gracias a la red que ahora cobraba vida.&amp;#160; Est&amp;#225;bamos en plena &amp;quot;globalizaci&amp;#243;n 1.0&amp;quot;, como lo describe &lt;a href="http://www.amazon.com/World-Flat-3-0-History-Twenty-first/dp/0312425074/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207952544&amp;amp;sr=8-1"&gt;Thomas Friedman&lt;/a&gt; y el mundo se estaba aplanando.&amp;#160; El internet hab&amp;#237;a fomentado la globalizaci&amp;#243;n y la globalizaci&amp;#243;n ayud&amp;#243; al crecimiento de la red.&amp;#160; &lt;a href="http://www.dotnetero.com/2007/01/el-carlos-en-un-mundo-plano.html"&gt;Por supuesto que ese momento no me d&amp;#237; cuenta de lo que ocurr&amp;#237;a porque estaba inmerso en &amp;#233;l&lt;/a&gt;.&amp;#160; Para cuando me gradu&amp;#233; de la carrera en 1998, &amp;quot;eso del e-mail&amp;quot; y de trabajar a distancia se hab&amp;#237;a vuelto bastante com&amp;#250;n.&amp;#160; &lt;/p&gt;  &lt;h3&gt;Generaci&amp;#243;n M&lt;/h3&gt;  &lt;p&gt;La M es de m&amp;#243;bil, es decir un &lt;em&gt;pochismo deformado &lt;/em&gt;m&amp;#237;o de &lt;em&gt;mobile phones, &lt;/em&gt;tambi&amp;#233;n conocidos como tel&amp;#233;fonos celulares.&amp;#160; Esta es la generaci&amp;#243;n que &lt;em&gt;en estos momentos &lt;/em&gt;est&amp;#225; en la adolescencia.&lt;/p&gt;  &lt;p&gt;Cuando comenc&amp;#233; mi pl&amp;#225;tica, abr&amp;#237; con una pregunta: &amp;quot;&amp;#191;C&amp;#243;mo ser&amp;#237;a tu vida... sin tu celular?&amp;quot;&amp;#160; Hubieran visto la reacci&amp;#243;n.&amp;#160; Fue una exclamaci&amp;#243;n colectiva de aut&amp;#233;ntico horror: &amp;quot;&amp;#161;Ay NOOoooo!&amp;quot;, jejeje. &amp;quot;&amp;#191;...sin Google? &amp;#191;...sin el Internet? &amp;#191;Qu&amp;#233; m&amp;#250;sica escuchar&amp;#237;as? &amp;#191;Qu&amp;#233; ser&amp;#237;a diferente?&amp;quot;&amp;#160; Y ya cuando hab&amp;#237;an parado la oreja puse una diapositiva que dec&amp;#237;a: &amp;quot;As&amp;#237; era el mundo hace apenas 15 a&amp;#241;os&amp;quot;.&lt;/p&gt;  &lt;p&gt;A veces creo que no se le ha dado cr&amp;#233;dito a la impacto que han tenido los celulares&amp;#8212;y s&amp;#237;, yo tambi&amp;#233;n considero que son odiosos y ojal&amp;#225; no los hubieran inventado, pero pues ni modo ya ganaron.&amp;#160; &amp;quot;En mis tiempos...&amp;quot;&amp;#8212;como dicen los viejitos&amp;#8212;los &amp;#250;nicos que tra&amp;#237;an celulares eran los narcos y la gente de muuuucha lana.&amp;#160; Eran esos horrendos ladrillos Motorola que les duraba la pila una hora y pod&amp;#237;an se utilizados como arma de defensa personal.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/generacion_m_1.jpg" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Hoy en d&amp;#237;a parece que los chavitos nacen con el celular en la mano.&amp;#160; He visto ni&amp;#241;os de 7 y 8 a&amp;#241;os&amp;#8212;entre ellos algunos de mis sobrinos&amp;#8212;con celular propio, lo cual me parece absurdo, pero es la realidad.&amp;#160; Todo tipo de vagancias y mal comportamiento es videograbado con su tel&amp;#233;fono para subirlo a YouTube.&amp;#160; Para ellos se ha convertido en una extensi&amp;#243;n de su persona.&amp;#160; Algunos de ellos incluso &lt;em&gt;se identifican &lt;/em&gt;con su celular, lo cual es en verdad preocupante.&amp;#160; &lt;/p&gt;  &lt;p&gt;Esto est&amp;#225; ocasionando cambios interesantes.&amp;#160; Por ejemplo, todos esos mensajitos de texto&amp;#8212;y la flojera que causa tener que teclearlos, supongo&amp;#8212;est&amp;#225;n ocasionando cambios informales y deformaciones al espa&amp;#241;ol escrito.&amp;#160; Una conversaci&amp;#243;n t&amp;#237;pica podr&amp;#237;a ser:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;#8212;Ke rollo?      &lt;br /&gt;&amp;#8212;No ps nada       &lt;br /&gt;&amp;#8212;Vas a ir al cine vdd?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Este tipo de deformaciones tambi&amp;#233;n est&amp;#225;n creciendo por el uso de mensajer&amp;#237;a instant&amp;#225;nea (Messenger, Google Chat, Skype, etc.).&amp;#160; Cuando intento platicar con una de mis sobrinas por Messenger, a veces me dan ganas de darle un &lt;em&gt;sape&lt;/em&gt; virtual y decirle: &amp;quot;&amp;#161;escriba bien, no sea payasa!&amp;quot;, pero me las aguanto.&amp;#160; Estos programas, tambi&amp;#233;n los est&amp;#225;n acostumbrando a que ahora se puede tener conversaciones de video o voz internacionales gratis o a muy bajo costo.&amp;#160; En otras palabras, la dimensi&amp;#243;n de la distancia comienza a cambiar.&amp;#160; El mundo no solo es plano sino que comienza a encogerse.&lt;/p&gt;  &lt;p&gt;Una caracter&amp;#237;stica m&amp;#225;s que se me ocurre sobre la generaci&amp;#243;n M es que, los chicos de ahora est&amp;#225;n (&amp;#191;mal?)acostumbrados a tener las cosas &lt;em&gt;on-demand,&lt;/em&gt; es decir, cuando ellos quieren y como ellos quieren.&amp;#160; Si quieren m&amp;#250;sica, se van a iTunes, o BitTorrent o &lt;em&gt;&amp;lt;inserte aqu&amp;#237; la herramienta de pirater&amp;#237;a de moda&amp;gt;&lt;/em&gt;, la bajan y listo; ya no est&amp;#225;n limitados por la m&amp;#250;sica de la radio o los discos en la tienda del &lt;em&gt;mall&lt;/em&gt;.&amp;#160; Si quieren un libro es cuesti&amp;#243;n de pedirlo por Amazon o similares y obtenerlo.&amp;#160; &amp;#191;Aburrido? Solo &amp;quot;prende&amp;quot; YouTube y puedes perder horas enteras viendo todo tipo de tarugadas; ya no est&amp;#225;n limitados a lo que ofrece la tele.&amp;#160; La palabra clave, supongo, es opci&amp;#243;n.&amp;#160; Ahora tienen m&amp;#225;s opciones que nunca.&amp;#160; Lo cual quiz&amp;#225; es bueno y malo a la vez.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/generacion_m_2.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;Por otro lado tambi&amp;#233;n se pueden observar una serie de cambios y situaciones sociales interesantes.&amp;#160; Una de ellas me la apunt&amp;#243; &lt;a href="http://pelosbriseno.blogspot.com"&gt;Alex Brise&amp;#241;o&lt;/a&gt;: los hijos de los due&amp;#241;os de muchas empresas est&amp;#225;n comenzando a tomar las riendas.&amp;#160; Es decir, un empresario que hoy tiene 50-60 a&amp;#241;os y que puso su negocio propio ahora est&amp;#225; d&amp;#225;ndole el control a su hijos para que se hagan cargo.&amp;#160; Estos &amp;quot;hijos de due&amp;#241;os&amp;quot; son de la generaci&amp;#243;n i, y no se sienten intimidados por la tecnolog&amp;#237;a, lo que es m&amp;#225;s, lo ven como algo favorable, algo que trae un valor agregado.&amp;#160; Si alguna vez se han dedicado al negocio de vender &amp;quot;sistemas&amp;quot; se habr&amp;#225;n quiz&amp;#225; dado cuenta que con excepci&amp;#243;n de empresarios con mucha visi&amp;#243;n, la mayor&amp;#237;a de la generaciones anteriores percib&amp;#237;an esto como un costo, no como algo que les pudiera ayudar a ganar dinero.&amp;#160; Los &amp;quot;hijos de due&amp;#241;o&amp;quot;, sin embargo, no solo no tienen problema con esto, sino que &lt;em&gt;te buscan&lt;/em&gt; para que les hagas un sistema.&amp;#160; Eso a su vez comienza a cambiar la din&amp;#225;mica de la competencia en muchos &amp;#225;mbitos.&lt;/p&gt;  &lt;p&gt;Combinado con la maduraci&amp;#243;n de la globalizaci&amp;#243;n 2.0, el inicio de la 3.0 esto est&amp;#225; permitiendo que los David comiencen a competir con los Goliat.&amp;#160; &lt;a href="http://www.wired.com/wired/archive/12.10/tail.html"&gt;La Cola Larga&lt;/a&gt; est&amp;#225; comenzando a esparcirse.&amp;#160; Dos ejemplos locales son que en Cd. Ju&amp;#225;rez, en los &amp;#250;ltimos 6 u 8 meses, Cablem&amp;#225;s comenz&amp;#243; a competir con Telmex en telefon&amp;#237;a; Volaris e InterJet, dos aerol&amp;#237;neas de bajo costo comenzaron a competir con Aerom&amp;#233;xico.&lt;/p&gt;  &lt;p&gt;Pero con todas las maravillas de la tecnolog&amp;#237;a hay otra cosa que est&amp;#225; ocurriendo: est&amp;#225; creciendo la brecha digital, el &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Digital_divide"&gt;digital divide&lt;/a&gt;&lt;/em&gt;.&amp;#160; Es decir despu&amp;#233;s de darte cuenta que el internet es maravilloso y que el acceso a la informaci&amp;#243;n es una necesidad porque uno como &lt;strong&gt;individuo&lt;/strong&gt; est&amp;#225; compitiendo con personas de todo el mundo, la siguiente pregunta inevitablemente es &amp;quot;&amp;#191;y qu&amp;#233; hay de los &lt;u&gt;millones&lt;/u&gt; de mexicanos que a&amp;#250;n viven en extrema pobreza? &amp;#191;C&amp;#243;mo sobreviviran en este nuevo mundo?&amp;quot;&lt;/p&gt;  &lt;p&gt;Desgraciadamente no hay respuestas alentadoras.&amp;#160; La &amp;#250;nica manera de competir es a trav&amp;#233;s de la educaci&amp;#243;n &lt;strong&gt;y&lt;/strong&gt; de ofrecer algo m&amp;#225;s.&amp;#160; En otras palabras, no competir en la maquilada de las cosas o de la informaci&amp;#243;n&amp;#8212;siempre habr&amp;#225; mano de obra m&amp;#225;s barata en un pa&amp;#237;s m&amp;#225;s desesperado&amp;#8212;sino competir ofreciendo las cosas que requieren de m&amp;#225;s coco, de m&amp;#225;s intelecto. Seguro, un ingeniero hind&amp;#250; o chino de sistemas promedio sale m&amp;#225;s barato que yo, pero ninguno, de todos los que conozco y con los que he trabajado tiene la misma capacidad que yo.&amp;#160; Y no es por ser arrogante, simplemente les ha faltado cayo y colmillo.&amp;#160; No significa que no haya ingenieros competentes en otros pa&amp;#237;ses, significa que esos ingenieros no son de bajo costo.&amp;#160; Incluso eso est&amp;#225; cambiando claro, al punto que &lt;a href="http://www.eds.com/sites/cs/blogs/eds_next_big_thing_blog/archive/2008/04/07/will-india-be-still-viable-option-for-it-outsourcing-in-10-years.aspx"&gt;en 10 a&amp;#241;os quiz&amp;#225; estemos hablando de otros pa&amp;#237;ses&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Esta es una realidad dif&amp;#237;cil de aceptar.&amp;#160; Aunque hay que mencionar que s&amp;#237; hay algunas personas haciendo algo concreto al respecto.&amp;#160; Proyectos como el de &lt;a href="http://laptop.org/index.es.html"&gt;Una Laptop Por Ni&amp;#241;o (OLPC)&lt;/a&gt; est&amp;#225;n tratando de atacar este tipo de problemas, pero la tecnolog&amp;#237;a en s&amp;#237; es una soluci&amp;#243;n insuficiente.&lt;/p&gt;  &lt;h3&gt;Generaci&amp;#243;n W&lt;/h3&gt;  &lt;p&gt;La W es de &lt;em&gt;wireless&lt;/em&gt;.&amp;#160; Esta generaci&amp;#243;n ser&amp;#237;an los hijos de la generaci&amp;#243;n M, nacidos quiz&amp;#225; unos 15 o 20 a&amp;#241;os m&amp;#225;s en el futuro.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/generacion_w.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;Si todo progresa como hasta ahora, m&amp;#225;s temprano que tarde la idea de las redes inal&amp;#225;mbricas a nivel ciudad o regi&amp;#243;n se har&amp;#225;n realidad a trav&amp;#233;s de cosas como &lt;a href="http://es.wikipedia.org/wiki/WiMAX"&gt;WiMAX&lt;/a&gt; o &lt;a href="http://en.wikipedia.org/wiki/Mesh_network"&gt;mesh networks&lt;/a&gt;.&amp;#160; En otras palabras para entonces ya no estar&amp;#225;s atado a tu casa o tu restaurante favorito para estar conectado.&amp;#160; Esto no solo dar&amp;#225; a pie a dispositivos m&amp;#225;s sencillos y a la vez sofisticados&amp;#8212;&amp;#191;imaginas el iPhone del futuro?&amp;#8212;sino que har&amp;#237;a el sue&amp;#241;o de OLPC una realidad.&lt;/p&gt;  &lt;p&gt;Una vez liberados de los cables, &lt;a href="http://www.eds.com/sites/cs/blogs/eds_next_big_thing_blog/archive/2008/02/06/the-2048-teenager-questions-the-teenager-of-today.aspx"&gt;estos ni&amp;#241;os&lt;/a&gt; podr&amp;#225;n asimilar informaci&amp;#243;n y tecnolog&amp;#237;a de manera casi instant&amp;#225;nea.&amp;#160; De hecho, la idea de adiciones bio-tecnol&amp;#243;gicas al cuerpo humano no est&amp;#225; completamente fuera del rango de posibilidades.&amp;#160; Imagina que en lugar de &lt;em&gt;cargar&lt;/em&gt; un dispositivo como un celular o tableta inteligente que te brinda informaci&amp;#243;n, &amp;#233;sta est&amp;#233; integrada a ti.&amp;#160; Una red inal&amp;#225;mbrica ubicua y un &amp;quot;chip&amp;quot; integrado podr&amp;#237;a darle la capacidad a los ni&amp;#241;os de este siglo de comunicarse y compartir informaci&amp;#243;n pseudo-ps&amp;#237;quicamente en una red verdaderamente P2P.&amp;#160; Piensa en los &lt;em&gt;Borg&lt;/em&gt;, de &lt;em&gt;Star Trek, &lt;/em&gt;pero no tan feos y con independencia de acci&amp;#243;n.&lt;/p&gt;  &lt;p&gt;&amp;#191;Todav&amp;#237;a suena como ciencia ficci&amp;#243;n?&amp;#160; Considera que en unos 15 a&amp;#241;os seguramente habr&amp;#225; avances significativos en la nanotecnolog&amp;#237;a y que seg&amp;#250;n algunos expertos &lt;a href="http://news.bbc.co.uk/1/hi/world/7248875.stm"&gt;para el 2029 tambi&amp;#233;n habr&amp;#225; tanto el hardware como el software necesario para tener inteligencia artificial a nivel humano&lt;/a&gt;.&amp;#160; Supon que se retrasen algunos a&amp;#241;os, el doble aproximadamente, y esto no se de sino hasta mediados de siglo.&amp;#160; Los ni&amp;#241;os de la generaci&amp;#243;n W estar&amp;#225;n apenas entrando a la adolescencia.&lt;/p&gt;  &lt;p&gt;Sin embargo hay cosas que podr&amp;#237;an descarrilar todo esto.&amp;#160; Conflictos globales persistentes, como la actual guerra en Irak podr&amp;#237;an llevar a un des-aplanamiento del mundo y a que se vuelvan a cerrar las fronteras, regres&amp;#225;ndonos a la era Reagan.&amp;#160; Simplemente consideren algunos de los argumentos de los actuales candidatos dem&amp;#243;cratas a la presidencia de EE.UU., Barack Obama y Hillary Clinton.&amp;#160; Ambos &lt;a href="http://www.lanacion.com.ar/exterior/nota.asp?nota_id=1002304"&gt;han expresado que quieren re-negociar el TLC&lt;/a&gt;.&amp;#160; Entre eso, y &lt;a href="http://www.lanacion.com.ar/exterior/nota.asp?nota_id=1002304"&gt;el muro&amp;#8212;perd&amp;#243;n, &amp;quot;barda&amp;quot;&amp;#8212;fronterizo&lt;/a&gt; que &lt;a href="http://mundoabierto.info/2008/03/21/eloisa-tamez-la-mujer-que-demando-a-chertoff/"&gt;tan insistentemente&lt;/a&gt; y est&amp;#225;n construyendo, no inspira precisamente un ambiente de apertura para el futuro.&amp;#160; Siguiendo esta l&amp;#237;nea de pensamiento, no es tampoco descabechado pensar en un &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Internet_censorship_in_the_People's_Republic_of_China"&gt;Great Firewall&lt;/a&gt;&lt;/em&gt; estadounidense o europeo modelado despu&amp;#233;s del de China.&amp;#160; Si esto llegara a ocurrir y regres&amp;#225;ramos a un mundo cerrado, la humanidad en mi humilde opini&amp;#243;n, se estar&amp;#237;a dando en la torre de &lt;em&gt;motu proprio&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Pero todas estas son meramente posibilidades.&amp;#160; Lo bonito del futuro es que a&amp;#250;n no est&amp;#225; escrito, &amp;#191;verdad?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-2747754159993854507?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=f3dpE1qMke0:Ah2TY3mITR0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=f3dpE1qMke0:Ah2TY3mITR0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=f3dpE1qMke0:Ah2TY3mITR0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=f3dpE1qMke0:Ah2TY3mITR0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/f3dpE1qMke0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/2747754159993854507/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=2747754159993854507" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/2747754159993854507" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/2747754159993854507" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/f3dpE1qMke0/la-generacin-m-al-borde-del-un-nuevo.html" title="La Generación M: Al borde del un nuevo cambio" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/04/la-generacin-m-al-borde-del-un-nuevo.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-3302014091466686109</id><published>2008-03-18T08:54:00.001-07:00</published><updated>2008-03-25T11:43:13.206-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo web" /><category scheme="http://www.blogger.com/atom/ns#" term="diseño web" /><title type="text">Apple libera Safari para Windows, IE8 beta no me impresionó</title><content type="html">&lt;p&gt;Parece que Apple acaba de liberar la versi&amp;#243;n &lt;strong&gt;final&lt;/strong&gt; de &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt;.&amp;#160; Y aunque las versiones beta &lt;em&gt;&lt;a href="http://www.dotnetero.com/2007/06/aventuras-con-safari-3-en-windows.html"&gt;tuvieron algunos detalles&lt;/a&gt; &lt;/em&gt;(desde problemas con los fonts hasta problemas para autenticar a trav&amp;#233;s de un proxy), la versi&amp;#243;n final parece haber atado los cabos sueltos.&amp;#160; Una adici&amp;#243;n particularmente &amp;#250;til para los desarrolladores Web es que integraron las herramientas de desarrollado (WebKit) que antes solo estaban disponibles en la Mac:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/safari_developer_options.png" /&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/safari_developer_menu.png" /&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/safari_web_inspector.png" /&gt; &lt;/p&gt;  &lt;p&gt;Y aunque esto no es nada nuevo para gente que desarrolla con Firefox, es bueno tenerlo en otros navegadores.&lt;/p&gt;  &lt;p&gt;Por otro lado hace un par de semanas el equipo de Internet Explorer anunci&amp;#243; los features de IE8 al &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/features.mspx"&gt;liberar el beta 1 de ese navegador&lt;/a&gt; el cual tambi&amp;#233;n incluir&amp;#225; herramientas de desarrollo Web estilo Firebug.&amp;#160; &amp;lt;sarcasmo&amp;gt;Qu&amp;#233; bien, ya no voy a tener que &lt;a href="http://www.dotnetero.com/2006/09/toolbars-y-extensiones-para-desarrollo.html"&gt;bajar el Developer Toolbar&lt;/a&gt; y el &lt;a href="http://www.nikhilk.net/Project.WebDevHelper.aspx"&gt;Web Development Helper&lt;/a&gt; por separado.&amp;lt;/sarcasmo&amp;gt;&amp;#160; En cuanto a los otros &amp;quot;features&amp;quot;, ummm, a ver: WebSlices = Firefox Live Bookmarks on steroids, Activities = Smart Tags rehashed, y AJAX navigation = Something that should come with your AJAX framework.&amp;#160; Lo &amp;#250;nico decente va a ser la mejora en el performance de JavaScript, lo cual les urg&amp;#237;a corregir, pero de ah&amp;#237; en m&amp;#225;s nada particularmente inovador.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-3302014091466686109?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=UTcnYyAcx7U:QqC2L0fjSWw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=UTcnYyAcx7U:QqC2L0fjSWw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=UTcnYyAcx7U:QqC2L0fjSWw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=UTcnYyAcx7U:QqC2L0fjSWw:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/UTcnYyAcx7U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/3302014091466686109/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=3302014091466686109" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3302014091466686109" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3302014091466686109" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/UTcnYyAcx7U/apple-libera-safari-para-windows-ie8.html" title="Apple libera Safari para Windows, IE8 beta no me impresionó" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/03/apple-libera-safari-para-windows-ie8.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-7993445719600984423</id><published>2008-02-27T17:34:00.001-07:00</published><updated>2008-02-27T17:34:40.811-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo de software" /><title type="text">Aguas con el SDC (Síndrome del Desarrollador Callado)</title><content type="html">&lt;p&gt;Ya van varias veces que veo esto ocurrir en diferentes proyectos y diferentes compa&amp;#241;&amp;#237;as, as&amp;#237; que asumo que es algo relativamente com&amp;#250;n. &lt;/p&gt;  &lt;p&gt;La historia casi siempre es la misma: se vende un proyecto grande a un cliente, quiz&amp;#225; algo ajustado de tiempo, pero suficiente para hacerlo.&amp;#160; Se hace el an&amp;#225;lisis y se bosqueja el dise&amp;#241;o r&amp;#225;pidamente.&amp;#160; Se reparte la chamba y todos en el equipo se ponen a jalar: &amp;quot;T&amp;#250; avi&amp;#233;ntate este m&amp;#243;dulo, t&amp;#250; este y yo este otro&amp;quot;.&lt;/p&gt;  &lt;p&gt;Ves a uno de los desarrolladores involucrados en el proyecto todos los d&amp;#237;as en su esquinita, tecleando como hormiga.&amp;#160; Sabes que est&amp;#225; chambeando (o al menos &lt;i&gt;crees&lt;/i&gt; saber que est&amp;#225; chambeando).&amp;#160; Cuando le preguntan: &lt;/p&gt;  &lt;p&gt;&amp;#8212;&amp;#191;Qu&amp;#233; rollo? &amp;#191;C&amp;#243;mo vas con eso? &lt;/p&gt;  &lt;p&gt;&amp;#8212;Bien&amp;#8212;contesta sencillamente.&amp;#160; No se queja, no da detalles.&amp;#160; As&amp;#237; que &lt;i&gt;asumes&lt;/i&gt; que todo va bien, &amp;#191;verdad?&lt;/p&gt;  &lt;p&gt;Pasa una semana, quiz&amp;#225; un mes o dos... tres meses, y de pronto esa persona comienza a enfermarse o a faltar misteriosamente y de buenas a primeras decide renunciar.&amp;#160; Para entonces ya est&amp;#225;s a una semana de entregar el sistema que prometiste, y cuando comienzas revisar el c&amp;#243;digo que el cuate hizo, te das cuenta que: 1) lo que hizo no funciona o 2) lo que hizo hace &lt;i&gt;algo&lt;/i&gt; pero no era lo que se supone que ten&amp;#237;a que hacer.&amp;#160; En otras palabras est&amp;#225;s &lt;strike&gt;jodido&lt;/strike&gt; en aprietos.&lt;/p&gt;  &lt;p&gt;Entonces el proyecto entra en p&amp;#225;nico.&amp;#160; Se oprime el bot&amp;#243;n rojo y comienzan a sonar alarmas.&amp;#160; Llamadas desesperadas.&amp;#160; Baja de unas cuerdas del techo un equipo S.W.A.T. de desarrolladores externos (o si no tienes pues con los mismos de tu equipo) y se junta a la raza en el &lt;i&gt;war room&lt;/i&gt; para ver c&amp;#243;mo canijos se puede hacer en una semana lo que un chango no hizo en 3 o 4 meses.&amp;#160; Todo mundo entra en &lt;i&gt;overdrive&lt;/i&gt; codificando d&amp;#237;a, noche y fines de semana casi sin dormir.&lt;/p&gt;  &lt;p&gt;Si tienes suerte, y gente MUY talentosa, igual y logras la meta.&amp;#160; Pero muchas veces no es suficiente.&lt;/p&gt;  &lt;p&gt;&amp;#191;Qu&amp;#233; fue lo que pas&amp;#243;?&amp;#160; Acabas de ser v&amp;#237;ctima del SDC, o S&amp;#237;ndrome del Desarrollador Callado.&lt;/p&gt;  &lt;p&gt;Una de las cosas que a menudo hacemos al desarrollar software es que cuando el &lt;i&gt;schedule&lt;/i&gt; anda apretado, lo primero que se hace es mandar a la goma las revisiones de c&amp;#243;digo, las pruebas unitarias, etc&amp;#233;tera.&amp;#160; Es decir, lo primero en sacrificarse en aras del calendario, normalmente son las buenas pr&amp;#225;cticas de desarrollo de software, que ir&amp;#243;nicamente son tu m&amp;#225;s valiosa herramienta para terminar a tiempo y con calidad.&amp;#160; &lt;/p&gt;  &lt;p&gt;Lo que acaba ocurriendo es que si las sacrificas y tienes uno de esos desarrolladores con SDC, lo m&amp;#225;s probable es que esa persona no est&amp;#233; entendiendo los requerimientos y/o no tenga las habilidades para pasarlos a c&amp;#243;digo y tiene demasiado temor de que se sepa.&amp;#160; As&amp;#237; que no pide ayuda, no se queja, no hace preguntas.&amp;#160; Simplemente se va a su esquinita y hace el intento.&amp;#160; Cuando va pasando el tiempo y se acerca el &lt;i&gt;deadline&lt;/i&gt; (por algo trae &lt;i&gt;dead&lt;/i&gt; la palabra) esa persona comienza a sentir la presi&amp;#243;n que a menudo se manifiesta en enfermedad/desaparici&amp;#243;n.&lt;/p&gt;  &lt;p&gt;No me malinterpreten, conozco dos o tres desarrolladores excelentes, algo anti-sociales, que chambean en su cub&amp;#237;culo/esquina, calladitos, enclaustrados una semana o dos y cuando emergen salen con una fregoner&amp;#237;a de c&amp;#243;digo.&amp;#160; Pero son &lt;b&gt;dos o tres&lt;/b&gt; de un montononal que conozco. &lt;/p&gt;  &lt;p&gt;Lo peor es que la soluci&amp;#243;n al SDC casi siempre es bien simple: hacer revisiones frecuentes del avance, no solo a lo que se ve (es decir, las pantallas, p&amp;#225;ginas, o lo que sea visible del sistema), sino a nivel c&amp;#243;digo.&amp;#160; Cada semana (cuando MUCHO) juntar a otro desarrollador, y a un &lt;i&gt;tester&lt;/i&gt; o persona que conozca los requerimientos: &amp;#8212;A ver, vamos a ver c&amp;#243;mo va esa pantalla.&lt;/p&gt;  &lt;p&gt;No se trata de traer a la raza a latigazos, y tampoco se trata de hacer que la raza no le busque por su cuenta.&amp;#160; Se trata de no esperarse para descubrir las broncas cuando es demasiado tarde para hacer algo al respecto.&amp;#160; Sobre todo de que no se atasque el proyecto por cosas sencillas.&amp;#160; Yo, personalmente, si me atoro con algo (ya &lt;i&gt;googuli&amp;#233;&lt;/i&gt;, y ya lo intent&amp;#233; de dos o tres formas distintas) m&amp;#225;s de 3 o 4 horas y no puedo salir de ah&amp;#237;, inmediatamente agarro uno de mis compa&amp;#241;eros y comienzo a explicarle el problema.&amp;#160; A veces con solo explicarlo se me viene una idea que resuelve el ator&amp;#243;n, y cuando no, ellos me pueden dar ideas nuevas o enfoques que a m&amp;#237; no se me hab&amp;#237;an ocurrido.&amp;#160; Por muy chicho que creas ser, nunca faltan los d&amp;#237;as&amp;#8212;o meses jejeje&amp;#8212;en los que puedes caer en un &lt;i&gt;lapsus brutus.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;As&amp;#237; que si son uno de esos desarrolladores con SDC, &lt;i&gt;por amor de Diosito&lt;/i&gt;, levanten la mano cuando se les atore la carreta.&amp;#160; No se esperen a que sea demasiado tarde.&amp;#160; Les prometo que nadie los va a morder. &lt;/p&gt;  &lt;p&gt;&lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-7993445719600984423?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=x4JHW9tZwhk:c6em3J7xa5I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=x4JHW9tZwhk:c6em3J7xa5I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=x4JHW9tZwhk:c6em3J7xa5I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=x4JHW9tZwhk:c6em3J7xa5I:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/x4JHW9tZwhk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/7993445719600984423/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=7993445719600984423" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7993445719600984423" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7993445719600984423" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/x4JHW9tZwhk/aguas-con-el-sdc-sndrome-del.html" title="Aguas con el SDC (Síndrome del Desarrollador Callado)" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/02/aguas-con-el-sdc-sndrome-del.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-1712834990392775900</id><published>2008-01-28T23:50:00.001-07:00</published><updated>2008-01-28T23:50:33.116-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="comunidad" /><category scheme="http://www.blogger.com/atom/ns#" term="anuncios" /><title type="text">Evento de Microsoft en El Paso</title><content type="html">&lt;p&gt;Dado que no s&amp;#233; si el grupo de usuarios de .NET de El Paso ya pas&amp;#243; a mejor vida, les paso informaci&amp;#243;n de un evento que realizar&amp;#225; Microsoft este pr&amp;#243;ximo jueves.&amp;#160; Se me hizo interesante, ya que &amp;#250;ltimamente he estado hablando de &lt;a href="http://www.dotnetero.com/search/label/iis"&gt;IIS 7&lt;/a&gt; y &lt;a href="http://www.dotnetero.com/search/label/asp.net"&gt;ASP.NET&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MSDN Events: What&amp;#8217;s New in IIS7 and Extending ASP.NET 2.0 Application Services&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Thursday,&lt;/strong&gt; &lt;strong&gt;January 31, 2008 12:00 PM - 4:00 PM&lt;/strong&gt;    &lt;br /&gt;Welcome Time: 11:30 AM&lt;/p&gt;  &lt;p&gt;Theater - Cinemark Tinseltown USA&lt;/p&gt;  &lt;p&gt;11855 Gateway West    &lt;br /&gt;El Paso Texas 79936     &lt;br /&gt;United States&lt;/p&gt;  &lt;p&gt;Para registrarse y obtener m&amp;#225;s detalles sobre el evento, vayan a la siguiente direcci&amp;#243;n:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032359805"&gt;http://msevents.microsoft.com/cui/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032359805&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tengan en mente que &lt;strong&gt;este evento es en ingl&amp;#233;s&lt;/strong&gt; (que igual no es problema).&amp;#160; Tambi&amp;#233;n tomen en cuenta que aunque la p&amp;#225;gina de registro dice que es de 1PM a 5PM, esto es tiempo del Centro as&amp;#237; que ser&amp;#237;a de 12PM a 5PM tiempo local.&lt;/p&gt;  &lt;p&gt;Les resalto los temas que me parecieron interesantes: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Session 1 | Safer, Smarter, Stronger: What&amp;#8217;s New for Web Developers in IIS7&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Authentication methods and integration between ASP.NET and IIS 7 &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Writing IIS managed handlers and modules&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How the IIS protocol listeners support hosting WCF services on TCP, Named Pipes and more&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;IIS handler permissions, request filtering and administration lists &lt;/li&gt;    &lt;li&gt;How the XML replacement for the Metdata Config file makes it easy to duplicate Web servers &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Features and protocols that make IIS 7 secure right out of the box&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Session 2 | Extending ASP.NET 2.0 Application Services&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Membership, role and profile provider overviews &lt;/li&gt;    &lt;li&gt;How to configure the built-in providers and use the basic login, role and navigation controls &lt;/li&gt;    &lt;li&gt;How to create and integrate a custom provider &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Using application services from AJAX and Silverlight clients&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Using ASP.NET 3.5 client application services from a Windows client.&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Espero verlos ah&amp;#237;. &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-1712834990392775900?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=ovJmtwaTkqU:3e72NY1b5DM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=ovJmtwaTkqU:3e72NY1b5DM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=ovJmtwaTkqU:3e72NY1b5DM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=ovJmtwaTkqU:3e72NY1b5DM:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/ovJmtwaTkqU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/1712834990392775900/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=1712834990392775900" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/1712834990392775900" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/1712834990392775900" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/ovJmtwaTkqU/evento-de-microsoft-en-el-paso.html" title="Evento de Microsoft en El Paso" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/01/evento-de-microsoft-en-el-paso.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-4242654741216026431</id><published>2008-01-25T01:07:00.001-07:00</published><updated>2008-03-25T11:42:46.179-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="windows vista" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="iis" /><title type="text">¿Dónde quedó el usuario ASPNET en Windows Vista? ¿Y qué $#!N&amp;@2 es eso de los Application Pools?</title><content type="html">&lt;p&gt;Hoy aprend&amp;#237; algunas cosas m&amp;#225;s al continuar con mis aventuras de desarrollo ASP.NET en Windows Vista.&amp;#160; Muchas de estas cosas aparentemente no son nuevas, vienen desde IIS 6 que era la versi&amp;#243;n incluida con Windows Server 2003, pero yo nunca los us&amp;#233;, as&amp;#237; que hasta ahora me vengo enterando.&lt;/p&gt;  &lt;p&gt;La primer lecci&amp;#243;n sali&amp;#243; cuando andaba buscando el usuario &lt;strong&gt;ASPNET&lt;/strong&gt; de mi m&amp;#225;quina para asignarle permisos de escritura sobre un directorio donde mi aplicaci&amp;#243;n &lt;a href="http://www.dotnetero.com/2007/12/cmo-subir-un-archivo-tu-servidor-web.html"&gt;permite que los usuarios suban archivos&lt;/a&gt;.&amp;#160; Despu&amp;#233;s de un rato de jugar &lt;em&gt;Where's Waldo&lt;/em&gt; con el usuario, me convenc&amp;#237; que simplemente no exist&amp;#237;a.&amp;#160; Resulta que el &lt;strong&gt;ASP.NET Worker Process&lt;/strong&gt;&amp;#8212;el proceso bajo el cual se ejecuta el c&amp;#243;digo de ASP.NET&amp;#8212;corre ahora por &lt;em&gt;default&lt;/em&gt; bajo la cuenta &lt;strong&gt;NETWORK SERVICE &lt;/strong&gt;(aunque esto se puede cambiar f&amp;#225;cilmente).&amp;#160; Ah, y por cierto, el &lt;em&gt;Worker Process&lt;/em&gt; ahora se llama &lt;strong&gt;w3wp.exe&lt;/strong&gt;, en lugar de aspnet_wp.exe.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/AppPools/w3wp.png" /&gt; &lt;/p&gt;  &lt;p&gt;La segunda lecci&amp;#243;n vino cuando quise correr mi aplicaci&amp;#243;n.&amp;#160; Resulta que si usas m&amp;#243;dulos HTTP (&amp;lt;httpModules&amp;gt;) en tu web.config, recibir&amp;#225;s un mensaje de error porque IIS 7 intenta correr las aplicaciones por &lt;em&gt;default&lt;/em&gt; en un &lt;strong&gt;Application Pool &lt;/strong&gt;llamado&amp;#8212;duh&amp;#8212;DefaultAppPool, y &amp;#233;ste tiene un &lt;strong&gt;Managed Pipeline Mode &lt;/strong&gt;puesto a &lt;strong&gt;Integrated&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;#191;G&amp;#252;at?&lt;/strong&gt;&lt;/em&gt;&amp;#160; A ver si me puedo explicar.&amp;#160; Si abres la consola administrativa de IIS y te vas a Application Pools, ver&amp;#225;s algo como esto:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/AppPools/ApplicationPools.png" /&gt; &lt;/p&gt;  &lt;p&gt;De caj&amp;#243;n, Vista tra&amp;#237;a los dos primeros&amp;#8212;&lt;strong&gt;Classic .NET AppPool&lt;/strong&gt; y &lt;strong&gt;DefaultAppPool&lt;/strong&gt;.&amp;#160; El tercero fue creado cuando instal&amp;#233; SQL Server Reporting Services, as&amp;#237; que por ahora ign&amp;#243;ralo.&lt;/p&gt;  &lt;p&gt;Lo primero que me pregunt&amp;#233; fue &amp;#191;qu&amp;#233; &lt;em&gt;&lt;strike&gt;$#!N&amp;amp;@2&lt;/strike&gt;&lt;/em&gt; demonios es eso de los &lt;strong&gt;Application Pools&lt;/strong&gt;?&lt;/p&gt;  &lt;p&gt;Resulta que es una manera muy padre de segregar y asignar una aplicaci&amp;#243;n Web&amp;#8212;o m&amp;#225;s correctamente &lt;a href="http://www.dotnetero.com/2006/10/y-tu-dominas-tus-aplicaciones.html"&gt;su Application Domain&lt;/a&gt;&amp;#8212;a un &lt;em&gt;Worker Process&lt;/em&gt; determinado.&amp;#160; Un &lt;em&gt;Pool &lt;/em&gt;puede tener varios &lt;strong&gt;AppDomain&lt;/strong&gt;s, y estos estar&amp;#225;n separados de los que corran en otros &lt;em&gt;pools.&lt;/em&gt; Considera este ejemplo:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/AppPools/DiagramaApplicationPools.png" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Aqu&amp;#237; tenemos tres aplicaciones de ASP.NET, cada una con su directorio virtual.&amp;#160; Las primeras dos est&amp;#225;n asignadas al primer &lt;em&gt;Application Pool&lt;/em&gt;, y la tercera aplicaci&amp;#243;n est&amp;#225; asignada al segundo.&amp;#160; Esto es EXCELENTE por varias razones:&lt;/p&gt;  &lt;p&gt;&amp;#191;Que pasaba antes si una falla en una de las aplicaciones web hac&amp;#237;a que se reciclara el &lt;em&gt;Worker Process&lt;/em&gt;?&amp;#160; Pues todas las aplicaciones se &amp;quot;reiniciaban&amp;quot;&amp;#8212;botando posiblemente a las sesiones y todo el show&amp;#8212;porque los &lt;em&gt;Application Domains &lt;/em&gt;est&amp;#225;n corriendo en el mismo proceso ejecutable. Me ha pasado. Ten&amp;#237;amos una applicaci&amp;#243;n Web corriendo en el mismo servidor que un servicio Web (en una m&amp;#225;quina con Windows 2000 si mal no recuerdo), y de vez en cuando la aplicaci&amp;#243;n hac&amp;#237;a que se reciclara el &lt;em&gt;Worker Process&lt;/em&gt;&amp;#8212;maldito Crystal Reports&amp;#8212;llev&amp;#225;ndose entre las patas al &lt;em&gt;Web Service&lt;/em&gt;.&amp;#160; Ahora es posible asilar ese tipo de fallas.&lt;/p&gt;  &lt;p&gt;&amp;#191;O qu&amp;#233; pasar&amp;#237;a si quiero correr una aplicaci&amp;#243;n de ASP.NET v1.x en el mismo servidor que una de ASP.NET v2.x?&amp;#160; Un &lt;em&gt;Worker Process &lt;/em&gt;solo puede correr una versi&amp;#243;n del .NET Framework, hasta donde s&amp;#233;, as&amp;#237; que con Application Pools ahora puedes lograrlo.&lt;/p&gt;  &lt;p&gt;Y m&amp;#225;s relevante para el problema que yo ten&amp;#237;a, IIS 7 tiene una manera distinta de manejar los httpModules&amp;#8212;llamado &lt;strong&gt;Managed Pipeline Mode&lt;/strong&gt;. DefaultAppPool usa &lt;strong&gt;Integrated&lt;/strong&gt;. As&amp;#237; que lo que ten&amp;#237;a que hacer en mi caso era asignar el directorio virtual de mi aplicaci&amp;#243;n al Classic .NET AppPool que utiliza el modo &lt;strong&gt;Classic&lt;/strong&gt;, para no tener que cambiar la configuraci&amp;#243;n (y posiblemente c&amp;#243;digo) de mi aplicaci&amp;#243;n.&lt;/p&gt;  &lt;p&gt;Si inspeccionas las opciones avanzadas de un &lt;em&gt;Application Pool&lt;/em&gt; te das cuenta que puedes configurar cosas interesantes.&amp;#160; &lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/AppPools/ApplicationPoolAdvancedProperties.png" /&gt; &lt;/p&gt;  &lt;p&gt;Las que me llamaron la atenci&amp;#243;n fueron:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;.NET Framework Version.&lt;/strong&gt; Para seleccionar qu&amp;#233; versi&amp;#243;n quieres utilizar para las aplicaciones Web que corren en el &lt;em&gt;Pool&lt;/em&gt;, o si no quieres permitir que corra c&amp;#243;digo administrado (p.ej. una aplicaci&amp;#243;n de ASP cl&amp;#225;sico o PHP que no tenga nada que ver con .NET). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Managed Pipeline Mode&lt;/strong&gt;.&amp;#160; &lt;strong&gt;Integrated&lt;/strong&gt; utiliza el modo IIS 7, donde la configuraci&amp;#243;n de los httpModules est&amp;#225;n centralizados y supuestamente tiene varios beneficios que a&amp;#250;n no conozco; &lt;strong&gt;Classic&lt;/strong&gt; permite que cada aplicaci&amp;#243;n web mantenga su configuraci&amp;#243;n. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;.&amp;#160; La cuenta de usuario y bajo el cual corre el &lt;em&gt;Worker Process&lt;/em&gt;. Esto afecta directamente los permisos de seguridad de las aplicaciones en el &lt;em&gt;Pool&lt;/em&gt;.&amp;#160; Los valores posibles son: &lt;strong&gt;NetworkService&lt;/strong&gt;, &lt;strong&gt;LocalService&lt;/strong&gt;, &lt;strong&gt;LocalSystem&lt;/strong&gt;, &lt;strong&gt;SpecificUser&lt;/strong&gt;; este &amp;#250;ltimo por si quieres especificar una cuenta creada por ti. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Identity Specific User Credentials&lt;/strong&gt;.&amp;#160; Para poner las &amp;quot;credenciales&amp;quot; (el password pues) del usuario si usas Identity=SpecificUser. &lt;/li&gt;    &lt;li&gt;CPU &lt;strong&gt;Limit&lt;/strong&gt;, &lt;strong&gt;Limit Interval &lt;/strong&gt;y &lt;strong&gt;Limit Action&lt;/strong&gt;.&amp;#160; Sirven para limitar el porcentaje de CPU que consume el &lt;em&gt;Worker Process &lt;/em&gt;en un tiempo determinado y hacer algo si se excede, como por ejemplo, matarlo. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Private Memory Limit&lt;/strong&gt; y &lt;strong&gt;Virtual Memory Limit&lt;/strong&gt;.&amp;#160; Sirven para limitar la memoria real y virtual que utiliza el &lt;em&gt;Worker Process&lt;/em&gt;. &amp;#191;Alguna vez le has pegado a un System.OutOfMemoryException? Yo si, y no es divertido. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Una vez que comenc&amp;#233; a entender este rollo, asignar mi aplicaci&amp;#243;n al &lt;em&gt;Pool &lt;/em&gt;correcto fue s&amp;#250;per sencillo.&amp;#160; Simplemente te vas a las opciones avanzadas de tu directorio virtual y lo cambias. &lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/AppPools/VirtualDirectoryAdvancedProperties.png" /&gt;&amp;#160; &lt;/p&gt; Enjoy &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-4242654741216026431?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=EiTGQdlONqA:ZN8cWXJ4i-M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=EiTGQdlONqA:ZN8cWXJ4i-M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=EiTGQdlONqA:ZN8cWXJ4i-M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=EiTGQdlONqA:ZN8cWXJ4i-M:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/EiTGQdlONqA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/4242654741216026431/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=4242654741216026431" title="10 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/4242654741216026431" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/4242654741216026431" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/EiTGQdlONqA/dnde-qued-el-usuario-aspnet-en-windows.html" title="¿Dónde quedó el usuario ASPNET en Windows Vista? ¿Y qué $#!N&amp;amp;@2 es eso de los Application Pools?" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/01/dnde-qued-el-usuario-aspnet-en-windows.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-4736993296924326090</id><published>2008-01-22T13:47:00.001-07:00</published><updated>2008-03-25T11:42:46.181-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="sql server" /><category scheme="http://www.blogger.com/atom/ns#" term="windows vista" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="iis" /><title type="text">Cómo configurar IIS 7 en Windows Vista para desarrollar con Visual Studio 2005 y SQL Server 2005</title><content type="html">&lt;p&gt;Aunque Windows Vista ya tiene m&amp;#225;s del a&amp;#241;o que sali&amp;#243;, apenas hasta estos d&amp;#237;as pude migrar mi m&amp;#225;quina primaria de trabajo a este sistema operativo&amp;#8212;solo digamos que la empresa para la que chambeo es muuuuuuy cautelosa con este tipo de cambios.&amp;#160; Y aunque tambi&amp;#233;n ya sali&amp;#243; Visual Studio 2008, a&amp;#250;n tengo que utilizar la versi&amp;#243;n 2005.&lt;/p&gt;  &lt;p&gt;Desarrollo principalmente aplicaciones ASP.NET y tambi&amp;#233;n necesito tener SQL Server 2005 Developer instalado localmente para correr tanto la base de datos como Reporting Services.&amp;#160; &lt;/p&gt;  &lt;p&gt;Pero al intentar instalar estas herramientas me top&amp;#233; inmediatamente con los cambios en la manera que instalas IIS en Windows Vista.&amp;#160; Ya me hab&amp;#237;an platicado que IIS 7 era m&amp;#225;s modular, pero no me hab&amp;#237;an dicho &lt;em&gt;qu&amp;#233; tanto&lt;/em&gt;.&amp;#160; Por &lt;em&gt;default, &lt;/em&gt;IIS ni siquiera viene habilitado, as&amp;#237; que lo primero que tienes que hacer es instalarlo.&amp;#160; &lt;/p&gt;  &lt;p&gt;Es sencillo, te vas a &lt;strong&gt;Control Panel &amp;gt; Programs &amp;gt; Turn Windows features on or off&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/IIS7/VistaControlPanel_TurnWindowsFeatur.png" /&gt; &lt;/p&gt;  &lt;p&gt;De las opciones que aparecen, &lt;em&gt;palomea&lt;/em&gt; (osea dale clic en el &lt;em&gt;checkbox&lt;/em&gt;) a lo siguiente, en este orden:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Internet Information Services&lt;/strong&gt;.&amp;#160; Esto selecciona autom&amp;#225;ticamente lo necesario para correr IIS. &lt;/li&gt;    &lt;li&gt;IIS &amp;gt; WWW Services &amp;gt; Application Development Features &amp;gt; &lt;strong&gt;ASP.NET&lt;/strong&gt;.&amp;#160; Esto selecciona autom&amp;#225;ticamente lo necesario para correr aplicaciones de ASP.NET. &lt;/li&gt;    &lt;li&gt;IIS &amp;gt; Web Management Tools &amp;gt; IIS 6 Management Compatibility &amp;gt; &lt;strong&gt;IIS Metabase&lt;/strong&gt; and IIS 6 configuration compatibility.&amp;#160; Este componente es necesario para Visual Studio 2005. &lt;/li&gt;    &lt;li&gt;Ya que andas por ah&amp;#237;, selecciona &lt;strong&gt;IIS 6 WMI Compatibility&lt;/strong&gt;.&amp;#160; Este lo necesita SQL Server 2005. &lt;/li&gt;    &lt;li&gt;IIS &amp;gt; WWW Services &amp;gt; Common Http Features &amp;gt; &lt;strong&gt;HTTP Redirection&lt;/strong&gt;.&amp;#160; Este tambi&amp;#233;n lo necesita SQL Server. &lt;/li&gt; &lt;/ol&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/IIS7/IIS7OptionsForVS2005andSQLServer200.png" /&gt; &lt;/p&gt;  &lt;p&gt;Da clic en &lt;strong&gt;OK&lt;/strong&gt;, y se instalar&amp;#225;n los componentes seleccionados.&lt;/p&gt;  &lt;p&gt;Como puedes ver, solo necesitas 1, 2 y 3 para desarrollar ASP.NET con Visual Studio 2005.&amp;#160; Y si necesitas SQL Server 2005, agregas las opciones 3, y 4.&lt;/p&gt;  &lt;p&gt;Si intentas instalar SQL Server sin lo anterior, es muy probable que recibas una advertencia como la siguiente:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/IIS7/SQLServer2005WarningOnVista.png" /&gt; &lt;/p&gt;  &lt;p&gt;Enjoy &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-4736993296924326090?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=6l3vQrIB1AE:lLhaSwfrGNo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=6l3vQrIB1AE:lLhaSwfrGNo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=6l3vQrIB1AE:lLhaSwfrGNo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=6l3vQrIB1AE:lLhaSwfrGNo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/6l3vQrIB1AE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/4736993296924326090/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=4736993296924326090" title="15 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/4736993296924326090" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/4736993296924326090" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/6l3vQrIB1AE/cmo-configurar-iis-7-en-windows-vista.html" title="Cómo configurar IIS 7 en Windows Vista para desarrollar con Visual Studio 2005 y SQL Server 2005" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">15</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/01/cmo-configurar-iis-7-en-windows-vista.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-3872672968108567145</id><published>2008-01-12T13:41:00.001-07:00</published><updated>2008-01-12T13:44:43.108-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cotorreo" /><title type="text">Bill Gates’ last day at Microsoft (video)</title><content type="html">&lt;p&gt;Hay que verlo para creerlo... &lt;img alt="smile_tongue" src="http://spaces.live.com/rte/emoticons/smile_tongue.gif" /&gt;&lt;/p&gt;  &lt;blockquote&gt;A video spoof shown during the CES 2008 keynote by Bill Gates about his last full day at Microsoft in July starring himself, Brian Williams, Steve Ballmer, Matthew McConaugheyr [sic], Robbie Bach, Jay-Z, Bono, Steven Spielberg, George Clooney, Jon Stewart, Kevin Turner, Hillary Clinton, Barack Obama, Al Gore, Ray Ozzie and Craig Mundie [...] Amazing who they can call for a guest appearance in the name of Bill Gates.&lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://www.istartedsomething.com/20080107/bill-gates-last-day-microsoft-video/"&gt;Bill Gates&amp;#8217; last day at Microsoft (video) - istartedsomething&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-3872672968108567145?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=7UrGbV3dplk:eq5YhhPxaAU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=7UrGbV3dplk:eq5YhhPxaAU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=7UrGbV3dplk:eq5YhhPxaAU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=7UrGbV3dplk:eq5YhhPxaAU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/7UrGbV3dplk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/3872672968108567145/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=3872672968108567145" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3872672968108567145" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/3872672968108567145" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/7UrGbV3dplk/bill-gates-last-day-at-microsoft-video.html" title="Bill Gates’ last day at Microsoft (video)" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2008/01/bill-gates-last-day-at-microsoft-video.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-7692483925880434585</id><published>2007-12-13T12:55:00.001-07:00</published><updated>2008-03-25T11:42:46.183-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="vb.net" /><category scheme="http://www.blogger.com/atom/ns#" term="ado.net" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><title type="text">Cómo leer archivos planos con ADO.NET (versión Visual Basic 2005)</title><content type="html">&lt;p&gt;Hace poco m&amp;#225;s de un a&amp;#241;o escrib&amp;#237; &lt;a href="http://www.dotnetero.com/2006/11/cmo-leer-archivos-planos-con-adonet.html" target="_blank"&gt;este art&amp;#237;culo&lt;/a&gt; que describe una t&amp;#233;cnica para leer archivos &lt;em&gt;planos &lt;/em&gt;utilizando el OleDB provider de ADO.NET.&amp;#160; Es uno de los art&amp;#237;culos de este sitio que ha recibido m&amp;#225;s comentarios, y entre ellos est&amp;#225; &lt;a href="http://www.dotnetero.com/2006/11/cmo-leer-archivos-planos-con-adonet.html#comment-7400577416392422469" target="_blank"&gt;uno que dej&amp;#243; fredy&lt;/a&gt; que me hizo re-hacer el ejemplo en Visual Basic 2005 para comprobar que no fuera un error de c&amp;#243;digo&amp;#8212;en realidad &amp;#233;l hizo la mayor parte de la chamba para &amp;quot;traducir&amp;quot; la rutina.&lt;/p&gt;  &lt;p&gt;No voy a explicar mucho la l&amp;#243;gica del c&amp;#243;digo&amp;#8212;para eso te dejo de tarea que leas &lt;a href="http://www.dotnetero.com/2006/11/cmo-leer-archivos-planos-con-adonet.html" target="_blank"&gt;el art&amp;#237;culo original&lt;/a&gt;&amp;#8212;aqu&amp;#237; simplemente te comparto c&amp;#243;mo se ver&amp;#237;a la rutina en VB:&lt;/p&gt;  &lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 9pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;   &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;Imports&lt;/span&gt; System.IO&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;Imports&lt;/span&gt; System.Data&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;Imports&lt;/span&gt; System.Data.OleDb&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;Module&lt;/span&gt; Utilerias&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Public&lt;/span&gt; &lt;span style="color: blue"&gt;Enum&lt;/span&gt; TipoDeArchivoPlano&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Delimited&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Fixed&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Enum&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Public&lt;/span&gt; &lt;span style="color: blue"&gt;Function&lt;/span&gt; LeerArchivoPlano(&lt;span style="color: blue"&gt;ByVal&lt;/span&gt; archivo &lt;span style="color: blue"&gt;As&lt;/span&gt; FileInfo, _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;ByVal&lt;/span&gt; tieneEncabezado &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Boolean&lt;/span&gt;, _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;ByVal&lt;/span&gt; tipoDeArchivo &lt;span style="color: blue"&gt;As&lt;/span&gt; TipoDeArchivoPlano) &lt;span style="color: blue"&gt;As&lt;/span&gt; DataTable&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;If&lt;/span&gt; (&lt;span style="color: blue"&gt;Not&lt;/span&gt; archivo.Exists) &lt;span style="color: blue"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Throw&lt;/span&gt; &lt;span style="color: blue"&gt;New&lt;/span&gt; FileNotFoundException(&lt;span style="color: #a31515"&gt;&amp;quot;No se encontr&amp;#243; el archivo especificado&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; conEncabezado &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;String&lt;/span&gt; = IIf(tieneEncabezado, &lt;span style="color: #a31515"&gt;&amp;quot;YES&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;NO&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; connectionString &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;String&lt;/span&gt; = _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};&amp;quot;&lt;/span&gt; + _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;Extended Properties='text;HDR={1};FMT={2}'&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; archivo.DirectoryName, conEncabezado, tipoDeArchivo.ToString())&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; dt &lt;span style="color: blue"&gt;As&lt;/span&gt; DataTable = &lt;span style="color: blue"&gt;New&lt;/span&gt; DataTable(&lt;span style="color: #a31515"&gt;&amp;quot;miTabla&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Using&lt;/span&gt; conn &lt;span style="color: blue"&gt;As&lt;/span&gt; OleDbConnection = &lt;span style="color: blue"&gt;New&lt;/span&gt; OleDbConnection(connectionString)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Using&lt;/span&gt; da &lt;span style="color: blue"&gt;As&lt;/span&gt; OleDbDataAdapter = &lt;span style="color: blue"&gt;New&lt;/span&gt; OleDbDataAdapter( _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;SELECT * FROM &amp;quot;&lt;/span&gt; + archivo.Name, conn)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; da.Fill(dt)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Using&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Using&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Return&lt;/span&gt; dt&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Function&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Module&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;Para probarla, hice una aplicaci&amp;#243;n sencilla en ASP.NET que mostrara los datos de un archivo .CSV que est&amp;#225; dentro de un subdirectorio del sitio web.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/LeerArchivosPlanosConOleDBProvider/SolutionExplorer.png" /&gt;&lt;/p&gt;

&lt;p&gt;El archivo &lt;strong&gt;jason.csv&lt;/strong&gt; contiene:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 9pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;Producto,Cantidad,Precio&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;Sierra el&amp;#233;ctrica,1,250&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;M&amp;#225;scara de hockey,1,15.50&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;Machete,5,2.70&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;Detergente para ropa (con quita-manchas),1,10&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;Delantal,2,7.25&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;Afilador,3,5&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;La p&amp;#225;gina dentro de la soluci&amp;#243;n que en realidad solo tiene un GridView.&amp;#160; Este es el contenido de &lt;strong&gt;Default.aspx&lt;/strong&gt;:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 9pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: #a31515"&gt;Page&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;VB&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;CodeFile&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Default.aspx.vb&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;_Default&amp;quot;&lt;/span&gt; &lt;span style="background: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #a31515"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: red"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Leer un archivo plano con VB 2005&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;miFormulario&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;GridView&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;miGridView&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;GridView&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;Finalmente, para mandar llamar la rutina y &lt;em&gt;bindear&lt;/em&gt;&amp;#8212;&amp;#191;enlazar?&amp;#8212;los datos al GridView, solo agregu&amp;#233; esto en el &lt;em&gt;code-behind:&lt;/em&gt;&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 9pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: black; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;Partial&lt;/span&gt; &lt;span style="color: blue"&gt;Class&lt;/span&gt; _Default&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Inherits&lt;/span&gt; System.Web.UI.Page&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Protected&lt;/span&gt; &lt;span style="color: blue"&gt;Sub&lt;/span&gt; miFormulario_Load(&lt;span style="color: blue"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Object&lt;/span&gt;, &lt;span style="color: blue"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue"&gt;As&lt;/span&gt; System.EventArgs) _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Handles&lt;/span&gt; miFormulario.Load&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;If&lt;/span&gt; &lt;span style="color: blue"&gt;Not&lt;/span&gt; Page.IsPostBack &lt;span style="color: blue"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; archivo &lt;span style="color: blue"&gt;As&lt;/span&gt; FileInfo = _&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;New&lt;/span&gt; FileInfo(&lt;span style="color: #a31515"&gt;&amp;quot;D:\WebSites\LeerArchivosPlanosVB\Archivos\jason.csv&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Dim&lt;/span&gt; tabla &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;New&lt;/span&gt; DataTable&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tabla = Utilerias.LeerArchivoPlano(archivo, &lt;span style="color: blue"&gt;True&lt;/span&gt;, TipoDeArchivoPlano.Delimited)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;If&lt;/span&gt; tabla.Rows.Count &amp;gt; 0 &lt;span style="color: blue"&gt;Then&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; miGridView.DataSource = tabla&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; miGridView.DataBind()&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;Else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(&lt;span style="color: #a31515"&gt;&amp;quot;No hay datos para mostrar.&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;If&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;El resultado de correr la p&amp;#225;gina:&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/LeerArchivosPlanosConOleDBProvider/GridViewMostrandoDatos.png" /&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Whew! &lt;/em&gt;Funcion&amp;#243; &lt;em&gt;&lt;img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" /&gt; &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Enjoy. &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;PD.&amp;#160; Puedes &lt;a href="http://comunidadnetjuarez.org/files/folders/ejemplos/entry1088.aspx" target="_blank"&gt;descargar el c&amp;#243;digo de este ejemplo del sitio de la Comunidad .NET de Cd. Ju&amp;#225;rez.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-7692483925880434585?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=VLhaiV4L-r4:nMDcc3DpTIA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=VLhaiV4L-r4:nMDcc3DpTIA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=VLhaiV4L-r4:nMDcc3DpTIA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=VLhaiV4L-r4:nMDcc3DpTIA:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/VLhaiV4L-r4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/7692483925880434585/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=7692483925880434585" title="7 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7692483925880434585" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/7692483925880434585" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/VLhaiV4L-r4/cmo-leer-archivos-planos-con-adonet.html" title="Cómo leer archivos planos con ADO.NET (versión Visual Basic 2005)" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/12/cmo-leer-archivos-planos-con-adonet.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-8728851816880339991</id><published>2007-12-12T20:43:00.001-07:00</published><updated>2007-12-12T21:24:03.271-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term=".net framework 3.5" /><title type="text">Dynamic Data se ve interesante (y con screencast se entiende mejor)</title><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/davidebb/archive/2007/12/09/introducing-the-new-dynamic-data.aspx"&gt;Dynamic Data&lt;/a&gt; es uno de los &lt;em&gt;features&lt;/em&gt; de las &lt;a href="http://asp.net/downloads/3.5-extensions/"&gt;ASP.NET 3.5 Extensions&lt;/a&gt; (a&amp;#250;n en &lt;em&gt;Preview&lt;/em&gt;) que me llam&amp;#243; la atenci&amp;#243;n el otro d&amp;#237;a.&amp;#160; Te permite hacer una versi&amp;#243;n &lt;em&gt;scaffolded&lt;/em&gt;&amp;#8212;un armaz&amp;#243;n pues&amp;#8212;de tu aplicaci&amp;#243;n Web a partir de tu modelo de base de datos, algo al estilo de Rails.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(Ah&amp;#237; les encargo la traducci&amp;#243;n de &amp;#8220;&lt;/em&gt;scaffolded&amp;#8221;&lt;em&gt; al espa&amp;#241;ol.&amp;#160; Hasta donde s&amp;#233; un&lt;/em&gt; scaffold &lt;em&gt;es un andamio, como el que usan los maistros alba&amp;#241;iles en la talacha, pero no creo que &amp;#8220;andamiada&amp;#8221; sea una palabra correcta. Y si lo es, qu&amp;#233; fea.&amp;#160; A mi no me gusta nada &amp;#8220;miado&amp;#8221; o &amp;#8220;miada&amp;#8221;) &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Esto es bastante &amp;#250;til porque muchas veces necesitas arrancar con &lt;em&gt;algo&lt;/em&gt; para poder meter datos aunque sea de prueba a tu base de datos.&amp;#160; Y muchas veces esto, con cambios muy menores, es suficiente para lo que los usuarios necesitan de la aplicaci&amp;#243;n.&amp;#160; Si tienes una base de datos bien armada&amp;#8212;y s&amp;#237; la tienes &lt;em&gt;&amp;#191;verdad?&lt;/em&gt;&amp;#8212;o al menos tu modelo de datos bien armado, esto ya te quit&amp;#243; esa talacha.&lt;/p&gt;  &lt;p&gt;Ayer precisamente estaba intentando explicarle a un compa&amp;#241;ero del trabajo qu&amp;#233; era Dynamic Data: &amp;#8220;&lt;em&gt;Pos&lt;/em&gt; &amp;#191;ya ves c&amp;#243;mo est&amp;#225; &lt;em&gt;shida &lt;/em&gt;que puedes nom&amp;#225;s arrastrar un SqlDataSource y un GridView a una p&amp;#225;gina ASP.NET y sin mucho esfuerzo ya puedes editar tu tabla?&amp;#160; Bueno pues esto es como eso, pero para toda tu base de datos, si as&amp;#237; lo quisieras. Y como est&amp;#225; basado en templetes, pues puedes alterar de un sablazo todo el sitio...&amp;#8221; &lt;/p&gt;  &lt;p&gt;Pero al parecer no supe explicarlo muy bien, as&amp;#237; que despu&amp;#233;s de la cara de &lt;em&gt;guatdefuc &lt;/em&gt;que me puso, me di&amp;#243; mucho gusto mostrarle &lt;a href="http://download.microsoft.com/download/5/D/1/5D113D2D-571C-4EDD-9C1C-59BC0E6981F6/WinVideo-2007-12-08%20Dynamic%20Data.wmv"&gt;este screencast&lt;/a&gt; (en ingl&amp;#233;s) que me encontr&amp;#233; hoy en el blog de &lt;a href="http://blogs.msdn.com/davidebb/default.aspx" target="_blank"&gt;David Ebbo:&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;I made a &lt;a href="http://download.microsoft.com/download/5/D/1/5D113D2D-571C-4EDD-9C1C-59BC0E6981F6/WinVideo-2007-12-08 Dynamic Data.wmv" target="_blank"&gt;screencast&lt;/a&gt; which walks through a basic scenario of using ASP.NET Dynamic Data in a simple site using Northwind.&amp;#160; It's about 17 minutes long.&amp;#160; Enjoy and feel free to give any feedback here or in the &lt;a href="http://forums.asp.net/1145.aspx" target="_blank"&gt;forum&lt;/a&gt;.&lt;/blockquote&gt;  &lt;p&gt;Enjoy. &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-8728851816880339991?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=0bnQj43e6Ls:Od6ohH_gFW0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=0bnQj43e6Ls:Od6ohH_gFW0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=0bnQj43e6Ls:Od6ohH_gFW0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=0bnQj43e6Ls:Od6ohH_gFW0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/0bnQj43e6Ls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/8728851816880339991/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=8728851816880339991" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8728851816880339991" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8728851816880339991" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/0bnQj43e6Ls/dynamic-data-se-ve-interesante-y-con.html" title="Dynamic Data se ve interesante (y con screencast se entiende mejor)" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/12/dynamic-data-se-ve-interesante-y-con.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-5117228871729866422</id><published>2007-12-06T19:42:00.001-07:00</published><updated>2007-12-12T11:59:14.408-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo web" /><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><title type="text">Cómo subir un archivo a tu servidor web mediante el control FileUpload de ASP.NET</title><content type="html">&lt;p&gt;Este es un tip s&amp;#250;per sencillo, pero bastante &amp;#250;til, y como ya van varias personas que me lo preguntan, mejor lo explico aqu&amp;#237;.&lt;/p&gt;  &lt;p&gt;A menudo se ofrece que los usuarios de nuestra aplicaci&amp;#243;n web nos env&amp;#237;en (o &amp;quot;suban&amp;quot;) alg&amp;#250;n archivo al servidor web donde corre nuestra aplicaci&amp;#243;n ASP.NET. Pudiera ser que el gerentoide tiene un &lt;a href="http://www.dotnetero.com/2006/11/cmo-leer-archivos-planos-con-adonet.html"&gt;archivo de texto o .CSV que necesitamos leer para cargarlo en la base de datos&lt;/a&gt;, o una im&amp;#225;gen que vamos a poner como avatar en el perfil del usuario, qu&amp;#233; se yo.&lt;/p&gt;  &lt;p&gt;Con ASP.NET 2.0 o posterior, subir un archivo a tu servidor es sencill&amp;#237;simo mediante el control &lt;strong&gt;FileUpload. &lt;/strong&gt;Supongamos que tenemos una forma de ASP.NET como esta:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img alt="Una forma ASP.NET para subir un archivo a tu servidor web" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/FileUpload/fileUpload1.png" /&gt; &lt;/p&gt;  &lt;p&gt;El &lt;em&gt;markup &lt;/em&gt;ser&amp;#237;a el siguiente:&lt;/p&gt;  &lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 8pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: #162a3e; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;   &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="background: #ffee62; color: black"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt; &lt;span style="color: #a31515"&gt;Page&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;CodeFile&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Default.aspx.cs&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;_Default&amp;quot;&lt;/span&gt; &lt;span style="background: #ffee62; color: black"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #a31515"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: red"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: blue"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Subir un archivo&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;head&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;h3&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; C&amp;#243;mo subir un archivo a tu servidor web mediante ASP.NET&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;h3&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Elige el archivo a subir:&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;FileUpload&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;trepador&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;subir&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Subir Archivo&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;OnClick&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;subir_Click&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;estatus&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;Style&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;color&lt;/span&gt;: &lt;span style="color: blue"&gt;#0000FF&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;body&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;Como puedes ver la forma en realidad consiste de &amp;#250;nicamente de un control &lt;strong&gt;FileUpload&lt;/strong&gt;, un bot&amp;#243;n para iniciar el &lt;em&gt;postback, &lt;/em&gt;y un &lt;strong&gt;Label&lt;/strong&gt; que usar&amp;#233; para mostrar un mensaje. Al bot&amp;#243;n le asociamos un manejador para el evento Click&amp;#8212;que veremos un poquito m&amp;#225;s abajo.&lt;/p&gt;

&lt;p&gt;Las propiedades y m&amp;#233;todos relevantes del control &lt;strong&gt;FileUpload&lt;/strong&gt; son:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SaveAs()&lt;/strong&gt;, que se usa para decir d&amp;#243;nde quieres guardar el archivo que se est&amp;#225; subiendo. Debes proporcionar la ruta completa y el nombre. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;HasFile&lt;/strong&gt;, que indica si el usuario ya escribi&amp;#243; el nombre de un archivo o lo seleccion&amp;#243; mediante el bot&amp;#243;n &amp;quot;Browse...&amp;quot; &lt;/li&gt;
&lt;/ul&gt;

&lt;p align="center"&gt;&lt;img src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/FileUpload/fileUpload2.png" /&gt; &lt;/p&gt;

&lt;p&gt;Ahora, este es el c&amp;#243;digo para manejar el evento:&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 8pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: #162a3e; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;partial&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;_Default&lt;/span&gt; : System.Web.UI.&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; subir_Click(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (trepador.HasFile)&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;string&lt;/span&gt; directorio = &lt;span style="color: #a31515"&gt;@&amp;quot;C:\Archivos de Usuario\&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;Directory&lt;/span&gt;.Exists(directorio))&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;string&lt;/span&gt; archivo = directorio + trepador.FileName;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;File&lt;/span&gt;.Exists(archivo))&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// ya existe un archivo con el mismo nombre en el directorio,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// as&amp;#237; que hay hacer algo al respecto (p.ej. renombrar el que &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// est&amp;#225; en el servidor o asignarle otro nombre al que se est&amp;#225; &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// subiendo), de lo contrario el archivo en el servidor ser&amp;#225; &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// sobreescrito&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trepador.SaveAs(archivo);&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; estatus.Text = &lt;span style="color: #a31515"&gt;&amp;quot;Tu archivo ha sido enviado exitosamente.&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// TODO: c&amp;#243;digo para procesar el archivo va aqu&amp;#237;...&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DirectoryNotFoundException&lt;/span&gt;(&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;El directorio en el servidor donde se suben los archivos no existe&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p align="center"&gt;&lt;img alt="" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/FileUpload/fileUpload3.png" /&gt; &lt;/p&gt;

&lt;h3&gt;Consideraciones adicionales&lt;/h3&gt;

&lt;p&gt;Hay dos aspectos m&amp;#225;s que debes cuidar con esto de la &amp;quot;trepada&amp;quot; de archivos.&lt;/p&gt;

&lt;p&gt;Primero, debes asegurarte que la cuenta de usuario bajo la que corre el &lt;em&gt;ASP.NET Worker Process &lt;/em&gt;(t&amp;#237;picamente la cuenta se llama &lt;strong&gt;ASPNET&lt;/strong&gt;) tenga suficientes permisos de seguridad sobre el directorio donde quieres escribir los archivos en el servidor, de lo contrario ver&amp;#225;s una excepci&amp;#243;n de seguridad. Creo que el permiso m&amp;#237;nimo que necesita es de &lt;em&gt;Write&lt;/em&gt;, aunque yo casi siempre uso el de &lt;em&gt;Modify &lt;/em&gt;en mi m&amp;#225;quina local.&lt;/p&gt;

&lt;p align="center"&gt;&amp;#160;&lt;img alt="Permisos necesarios para que ASP.NET pueda subir (escribir) archivos en el servidor" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/FileUpload/ASPNETpermissions.png" /&gt; &lt;/p&gt;

&lt;p&gt;Y segundo, ASP.NET, por default, est&amp;#225; configurado para subir archivos de hasta 4 Mb &amp;#250;nicamente (4096 bytes). Esto es porque la petici&amp;#243;n la recibe IIS primero y debe &amp;quot;trag&amp;#225;rsela&amp;quot; completa antes de pas&amp;#225;rsela al Worker Process. Si lo que vas a subir son archivos de texto, pues 4 Mb es un chorro, pero si es otro tipo de archivos&amp;#8212;im&amp;#225;genes &lt;strike&gt;p0rno&lt;/strike&gt;, archivos de Word, etc&amp;#233;tera&amp;#8212;pues esto podr&amp;#237;a ser terriblemente insuficiente. Si el archivo es muy grande, el otro problema es que la petici&amp;#243;n de HTTP pudiera exceder el tiempo m&amp;#225;ximo por petici&amp;#243;n y hacer &lt;em&gt;timeout.&lt;/em&gt; Afortunadamente podemos alterar esto mediante el archivo de configuraci&amp;#243;n del sitio (&lt;strong&gt;web.config&lt;/strong&gt;):&lt;/p&gt;

&lt;div style="border-right: #cccccc 1pt dashed; padding-right: 5pt; border-top: #cccccc 1pt dashed; padding-left: 5pt; font-size: 8pt; background: #f5f5f5; padding-bottom: 5pt; overflow: auto; border-left: #cccccc 1pt dashed; width: 95%; color: #162a3e; max-height: 500px; padding-top: 5pt; border-bottom: #cccccc 1pt dashed; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;
  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.web&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt;&amp;#160; Requerido para subir archivos grandes. En este caso &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; especificas un tiempo m&amp;#225;ximo de 10 minutos (600 segundos)&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; y un tama&amp;#241;o m&amp;#225;ximo de archivos de 50Mb&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;httpRuntime&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;executionTimeout&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;600&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;maxRequestLength&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;51200&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.web&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px; font-family: &amp;#39;Bitstream Vera Sans Mono&amp;#39;, &amp;#39;Consolas&amp;#39;, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;p&gt;&lt;strong&gt;&lt;span style="color: rgb(255,0,0)"&gt;En la configuraci&amp;#243;n anterior exager&amp;#233; un bastante, y deber&amp;#237;as tener cuidado de valores como estos,&lt;/span&gt;&lt;/strong&gt; ya que est&amp;#225;s indicando que puede haber peticiones de ASP.NET que duren hasta 10 &lt;strong&gt;minutos&lt;/strong&gt; ejecut&amp;#225;ndose, y esto podr&amp;#237;a llevar a que tu servidor se sature si de pronto hay varias peticiones grandes. Para la mayor&amp;#237;a de las aplicaciones el valor default de 110 segundos (minuto y medio) como &lt;strong&gt;executionTimeout &lt;/strong&gt;es suficiente. Especificar valores grandes para el &lt;strong&gt;maxRequestLength&lt;/strong&gt;, de manera similar, expone tu servidor a ser saturado, as&amp;#237; que debes alterar estos valores solo si en verdad lo requieres, y solo para los valores m&amp;#225;ximos que se necesiten para tu aplicaci&amp;#243;n. &lt;/p&gt;

&lt;p&gt;Por &amp;#250;ltimo, la documentaci&amp;#243;n de ASP.NET dice que se debe especificar el valor de &lt;strong&gt;executionTimeout&lt;/strong&gt; debe especificarse como un &lt;strong&gt;TimeSpan&lt;/strong&gt; (p.ej. &amp;quot;00:01:50&amp;quot;), pero en la pr&amp;#225;ctica, no he podido utilizarlo as&amp;#237;. Siempre he tenido que especificarlo como el n&amp;#250;mero de segundos.&lt;/p&gt;

&lt;h3&gt;Conclusi&amp;#243;n&lt;/h3&gt;

&lt;p&gt;El control &lt;strong&gt;FileUpload&lt;/strong&gt; hace que el problema de subir achivos a tu servidor web sea pan comido. Solo necesitas agregarlo a tu p&amp;#225;gina ASPX y agregar un bot&amp;#243;n u alg&amp;#250;n otro control para que invoque la l&amp;#243;gica necesaria para copiar el archivo a tu servidor mediante el m&amp;#233;todo &lt;strong&gt;SaveAs()&lt;/strong&gt;. Solo debes cuidar que la cuenta ASPNET tenga los permisos adecuados, y que la configuraci&amp;#243;n del servidor sea apropiada para los tipos de archivos que vayas a subir.&lt;/p&gt;

&lt;p&gt;Hay muchas mejoras que se le puede hacer al ejemplo de este art&amp;#237;culo. La primera que se me ocurre a mi es proporcionar alg&amp;#250;n tipo de retroalimentaci&amp;#243;n al usuario de que el archivo se est&amp;#225; procesando, o deshabilitar el bot&amp;#243;n inmediatamente despu&amp;#233;s del click para que el usuario no le de click dos veces hasta que termine de subirse el archivo&amp;#8212;estos son problemas bastante comunes cuando quieres subir archivos grandes y ya sea que tu servidor est&amp;#233; algo ocupado o tu usuario sea un neur&amp;#243;tico desesperado que no puede esperar ni los 7 segundos promedio como &lt;em&gt;el resto&lt;/em&gt; de los seres humanos &lt;em&gt;normales&lt;/em&gt;... &lt;img alt="smile_baringteeth" src="http://spaces.live.com/rte/emoticons/smile_baringteeth.gif" /&gt; &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /&gt; pero en fin, esa ya es harina de otro costal, y tendr&amp;#237;a que hablar de ASP.NET AJAX. Quiz&amp;#225; en la pr&amp;#243;xima. &lt;/p&gt;

&lt;p&gt;Enjoy. &lt;img alt="smile_shades" src="http://spaces.live.com/rte/emoticons/smile_shades.gif" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-5117228871729866422?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=HNYDQ1XmMcM:Rw-PRTXYWSo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=HNYDQ1XmMcM:Rw-PRTXYWSo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=HNYDQ1XmMcM:Rw-PRTXYWSo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=HNYDQ1XmMcM:Rw-PRTXYWSo:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/HNYDQ1XmMcM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/5117228871729866422/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=5117228871729866422" title="11 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/5117228871729866422" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/5117228871729866422" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/HNYDQ1XmMcM/cmo-subir-un-archivo-tu-servidor-web.html" title="Cómo subir un archivo a tu servidor web mediante el control FileUpload de ASP.NET" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/12/cmo-subir-un-archivo-tu-servidor-web.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-6359862575241219791</id><published>2007-11-19T10:18:00.001-07:00</published><updated>2007-11-19T10:18:11.727-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term=".net framework 3.5" /><title type="text">¡Visual Studio 2008 ya está disponible!</title><content type="html">&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/subscriptions/bb608344.aspx"&gt;Ya est&amp;#225; disponible Visual Studio 2008 para suscriptores de MSDN&lt;/a&gt;.&amp;#160; Y si no has gastado los miles de d&amp;#243;lares en una suscripci&amp;#243;n, pues de perdis puedes jugar utilizando las versiones Express que son gratuitas.&amp;#160; Ya liberaron &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# 2008 Express Edition&lt;/a&gt; y &lt;a href="http://www.microsoft.com/express/vb/"&gt;Visual Basic 2008 Express Edition&lt;/a&gt;&amp;#8212;ambas con soporte para desarollar WPF, naturalmente&amp;#8212;y &lt;a href="http://www.microsoft.com/express/vwd/Default.aspx"&gt;Visual Web Developer 2008 Express Edition&lt;/a&gt; que no solo trae las mejoras que &lt;a href="http://www.dotnetero.com/2007/11/ya-ests-listo-para-visual-studio-2008.html"&gt;hab&amp;#237;a comentado previamente&lt;/a&gt;, sino que tambi&amp;#233;n trae soporte para Popfly&amp;#8212;para aquellos que gustan de los mashups y cosas de esas.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-6359862575241219791?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=yHdZTHDjgM4:N0nDzrMW70Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=yHdZTHDjgM4:N0nDzrMW70Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=yHdZTHDjgM4:N0nDzrMW70Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=yHdZTHDjgM4:N0nDzrMW70Y:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/yHdZTHDjgM4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/6359862575241219791/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=6359862575241219791" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6359862575241219791" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6359862575241219791" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/yHdZTHDjgM4/visual-studio-2008-ya-est-disponible.html" title="¡Visual Studio 2008 ya está disponible!" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/11/visual-studio-2008-ya-est-disponible.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-9051596839325821801</id><published>2007-11-06T10:58:00.000-07:00</published><updated>2007-11-06T11:03:39.503-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term=".net framework 3.5" /><title type="text">¿Ya estás listo para Visual Studio 2008?</title><content type="html">&lt;p&gt;Con el anuncio ayer que hizo Microsoft de que &lt;a href="http://reddevnews.com/news/article.aspx?editorialsid=9216"&gt;Visual Studio 2008 y el .NET Framework 3.5 estar&amp;#xE1;n disponibles para suscriptores de MSDN a finales de este mes&lt;/a&gt; (can you say: &lt;em&gt;wohoo! &lt;img alt="thumbs_up" src="http://spaces.live.com/rte/emoticons/thumbs_up.gif" /&gt;) &lt;/em&gt;es hora de comenzar a prepararse para varias novedades que trae.&lt;img id="id" alt="Tecnolog&amp;#xED;as en las diferentes versiones del .NET Framework" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/AdditiveVersionsoftheNETFramework-S.png" align="right" /&gt; &lt;/p&gt;  &lt;p&gt;En lo personal me tiene emocionado el lanzamiento porque creo que le agregaron cosas que ya &lt;em&gt;urg&amp;#xED;an&lt;/em&gt;.&amp;#xA0; Comenzando por el soporte nativo a las tecnolog&amp;#xED;as de .NET 3.0 y ASP.NET AJAX&amp;#x2014;no m&amp;#xE1;s andar instalando extensiones y adiciones por separado.&amp;#xA0; Por ejemplo, me acaban de dar una m&amp;#xE1;quina nueva en el trabajo, y solo de Visual Studio tuve que instalar:&amp;#xA0; Visual Studio 2005, Visual Studio 2005 SP1, .NET 3.0 Framework Runtime, Windows SDK February 2007 update, Visual Studio Extensions for WCF &amp;amp; WPF November 2006 CTP (que no funciona muy bien), Visual Studio Extensions for WF, ASP.NET AJAX y ASP.NET AJAX Control Toolkit.&amp;#xA0; Cu&amp;#xE9;ntalas: OCHO cosas que se reducir&amp;#xE1;n a uno o dos.&lt;/p&gt;  &lt;p&gt;Adem&amp;#xE1;s, finalmente le agregaron soporte decente para CSS y un editor y debuggeador de JavaScript excelente, lo cual es m&amp;#xFA;sica para los o&amp;#xED;dos de desarrolladores web como yo.&lt;/p&gt;  &lt;p&gt;&amp;quot;&amp;#xA1;Pero a&amp;#xFA;n hay m&amp;#xE1;s!&amp;quot;, como dir&amp;#xED;an los vendedores: LINQ&amp;#x2014;una tecnolog&amp;#xED;a que promete cambiar c&amp;#xF3;mo lidean los programadores con el acceso a datos, sin tener que salirse del paradigma de C# o VB&amp;#x2014;, soporte para Silverlight y m&amp;#xE1;s &lt;em&gt;(whew!)&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;En fin, como una im&amp;#xE1;gen dice m&amp;#xE1;s que mil palabras, &lt;a href="http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf"&gt;aqu&amp;#xED; est&amp;#xE1; un poster (PDF) que pueden descargar e imprimir de los tipos y espacios de nombre m&amp;#xE1;s com&amp;#xFA;nes con .NET 3.5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Adem&amp;#xE1;s, el 14 de noviembre&amp;#x2014;&amp;#xA1;osea en menos de dos semanas!&amp;#x2014;tendremos en Ciudad Ju&amp;#xE1;rez el &lt;a href="http://www.mslatam.com/spanish/msdn/mexico/tour2007/"&gt;Tour Tecnol&amp;#xF3;gico 2007&lt;/a&gt; de Microsoft.&amp;#xA0; Este es un evento como el &lt;a href="http://comunidadnetjuarez.org/photos/reunion_mensual/category1215.aspx"&gt;CodeCamp que tuvimos en abril de este a&amp;#xF1;o&lt;/a&gt; o el &lt;a href="http://www.dotnetero.com/2006/10/fotorecuento-del-mdcd-cd-jurez.html"&gt;Community Dev Day del a&amp;#xF1;o pasado&lt;/a&gt; as&amp;#xED; que no te lo pierdas.&amp;#xA0; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://www.mslatam.com/spanish/msdn/mexico/tour2007/"&gt;&lt;img id="id" height="503" alt="Tour Tecnol&amp;#xF3;gico Microsoft 2007" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/Tour_Tecnologico.jpg" width="570" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;La agenda es:    &lt;br /&gt;&lt;strike&gt;8:30&amp;#xA0; Registro      &lt;br /&gt;8:45 Bienvenida       &lt;br /&gt;9:00&amp;#xA0; &lt;/strike&gt;&lt;strike&gt;&lt;strong&gt;Caracter&amp;#xED;sticas principales de VS 2008 y el .Net framework 3.5        &lt;br /&gt;&lt;/strong&gt;10:00 &lt;strong&gt;Construyendo Clientes inteligentes usando Visual Studio 2008, WPF y Expression Blend&lt;/strong&gt;       &lt;br /&gt;11:00 Receso       &lt;br /&gt;11:30 &lt;strong&gt;Construyendo aplicaciones m&amp;#xF3;viles usando Visual Studio 2008 y el .NET Compact Framework 3.5&lt;/strong&gt;       &lt;br /&gt;12:30 &lt;strong&gt;Introducci&amp;#xF3;n al ciclo de desarrollo con Visual Studio Team System&lt;/strong&gt;&lt;/strike&gt;&lt;/p&gt;  &lt;p&gt;Para registrarte ve a esta direcci&amp;#xF3;n: &lt;a title="http://www.mslatam.com/spanish/msdn/mexico/tour2007/" href="http://www.mslatam.com/spanish/msdn/mexico/tour2007/"&gt;http://www.mslatam.com/spanish/msdn/mexico/tour2007/&lt;/a&gt; luego selecciona &lt;strong&gt;Lista de Eventos &amp;gt; Chihuahua &amp;gt; Cd. Ju&amp;#xE1;rez&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;OJO, que en esta ocasi&amp;#xF3;n el evento ser&amp;#xE1; en uno de los edificios de la UACJ (el que est&amp;#xE1; por la Avenida del Charro), NO ser&amp;#xE1; en el Tec de Monterrey, donde normalmente tenemos las reuniones y eventos.&lt;/p&gt;  &lt;p&gt;Espero verlos ahi. &lt;img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Actualizaci&amp;#xF3;n, 6 Noviembre 2007, 10:56AM:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Acabo de recibir un correo que la agenda cambi&amp;#xF3;.&amp;#xA0; Esta es la nueva agenda:&lt;/p&gt;  &lt;p&gt;8:30&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Registro    &lt;br /&gt;8:45&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; Bienvenida     &lt;br /&gt;9:00&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;strong&gt;Caracter&amp;#xED;sticas principales de VS 2008 y el .Net Framework 3.5&lt;/strong&gt;     &lt;br /&gt;9:45&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;strong&gt;Construyendo Clientes inteligentes usando Visual Studio 2008, WPF y Expression Blend&lt;/strong&gt;     &lt;br /&gt;10:30&amp;#xA0;&amp;#xA0; Receso     &lt;br /&gt;11:00&amp;#xA0;&amp;#xA0; &lt;strong&gt;Construyendo aplicaciones m&amp;#xF3;viles usando Visual Studio 2008 y el .NET Compact Framework 3.5      &lt;br /&gt;&lt;/strong&gt;11:45&amp;#xA0; &lt;strong&gt;Introducci&amp;#xF3;n al ciclo de desarrollo con Visual Studio Team System      &lt;br /&gt;&lt;/strong&gt;12:30&amp;#xA0;&amp;#xA0; &lt;strong&gt;Desarrollo de aplicaciones interactivas con Windows Live      &lt;br /&gt;&lt;/strong&gt;1:00&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0; &lt;strong&gt;Interoperabilidad de documentos con OpenXML&lt;/strong&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-9051596839325821801?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=GaxRx0_3LLU:WFVkExfEu8g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=GaxRx0_3LLU:WFVkExfEu8g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=GaxRx0_3LLU:WFVkExfEu8g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=GaxRx0_3LLU:WFVkExfEu8g:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/GaxRx0_3LLU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/9051596839325821801/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=9051596839325821801" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/9051596839325821801" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/9051596839325821801" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/GaxRx0_3LLU/ya-ests-listo-para-visual-studio-2008.html" title="¿Ya estás listo para Visual Studio 2008?" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/11/ya-ests-listo-para-visual-studio-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-8652081271850570559</id><published>2007-11-05T22:19:00.001-07:00</published><updated>2008-03-25T11:42:46.185-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo web" /><category scheme="http://www.blogger.com/atom/ns#" term="los mejorcitos" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title type="text">Ya están disponibles las presentaciones y archivos de ASP.NET</title><content type="html">&lt;p&gt;Ya ten&amp;#xED;a un buen sin poder escribir por andar con las carreras del trabajo, pero de alguna forma tuve tiempo de dar el tema y el taller del mes de &lt;a href="http://comunidadnetjuarez.org/blogs/comunidad/archive/2007/09/13/reunion-de-septiembre.aspx"&gt;Septiembre&lt;/a&gt; y de &lt;a href="http://comunidadnetjuarez.org/photos/reunion_mensual/tags/Taller+Septiembre+2007/default.aspx"&gt;Octubre&lt;/a&gt; de la Comunidad, donde el tema fue, primero ASP.NET &amp;quot;para novatos&amp;quot;, y luego ASP.NET &amp;quot;intermedio&amp;quot;.&lt;/p&gt;  &lt;p&gt;El primer tema surgi&amp;#xF3;, porque hab&amp;#xED;a muchas personas interesadas en comenzar a aprender ASP.NET pero que solo necesitaban una orientada de por d&amp;#xF3;nde empezar.&amp;#xA0; As&amp;#xED; que ese fue el esp&amp;#xED;ritu de la reuni&amp;#xF3;n.&amp;#xA0; Vimos los conceptos fundamentales, basicotes pero necesarios para que entendieran qu&amp;#xE9; estaba sucediendo.&amp;#xA0; Vimos algunos de los controles b&amp;#xE1;sicos, manejo de eventos, y hasta algo de DataBinding con controles como el GridView y DetailsView para hacer una p&amp;#xE1;gina maestro/detalle.&amp;#xA0; Para la presentaci&amp;#xF3;n tom&amp;#xE9; prestadas algunas de las diapositivas del material que viene en el Desarrollador Cinco Estrellas (que la verdad est&amp;#xE1; excelente), pero le agregu&amp;#xE9; algunas otras ilustraciones que a mi me ayudaron mucho.&amp;#xA0; Eventualmente, si Diosito me da licencia lo convertir&amp;#xE9; en uno o dos art&amp;#xED;culos para este blog porque el rollo que mareador que yo tiro no sale en los archivos jejeje.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img id="id" src="http://comunidadnetjuarez.org/photos/reunion_mensual/images/1012/500x375.aspx" /&gt;&amp;#xA0; &lt;/p&gt;  &lt;p&gt;Como la gente se qued&amp;#xF3; &amp;quot;picada&amp;quot;, votaron por un tema &amp;quot;intermedio&amp;quot;.&amp;#xA0; As&amp;#xED; que en la siguiente reuni&amp;#xF3;n les platiqu&amp;#xE9; acerca de controles de usuario (user controls), que son controles compuestos a partir de otros controles, de Master Pages, que es una manera de aplicar elementos comunes a todo tu sitio y tambi&amp;#xE9;n sobre todo el armaz&amp;#xF3;n de seguridad que agregaron con ASP.NET 2.0.&amp;#xA0; Escog&amp;#xED; esos temas porque creo que son de los m&amp;#xE1;s &amp;#xFA;tiles y pr&amp;#xE1;cticos en la chamba del d&amp;#xED;a a d&amp;#xED;a.&amp;#xA0; En el taller vimos con detalle y calma c&amp;#xF3;mo instalar la base de datos de membres&amp;#xED;a, c&amp;#xF3;mo aplicar seguridad a diferentes &amp;#xE1;reas del sitio y c&amp;#xF3;mo utilizar todos los controles de membres&amp;#xED;a y navegaci&amp;#xF3;n que vienen con Visual Studio.&lt;/p&gt;  &lt;p&gt;En fin, me divert&amp;#xED; bastante.&amp;#xA0; Si no pudiste asistir, a&amp;#xFA;n puedes descargar las presentaciones y las soluciones de los talleres desde &lt;a href="http://comunidadnetjuarez.org/files/folders/presentaciones/tags/ASP.NET/default.aspx"&gt;&amp;#xE1;rea de descargas del sitio de la Comunidad&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-8652081271850570559?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=RDM0_waUJjo:ZtFFr8beykQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=RDM0_waUJjo:ZtFFr8beykQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=RDM0_waUJjo:ZtFFr8beykQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=RDM0_waUJjo:ZtFFr8beykQ:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/RDM0_waUJjo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/8652081271850570559/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=8652081271850570559" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8652081271850570559" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/8652081271850570559" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/RDM0_waUJjo/ya-estn-disponibles-las-presentaciones.html" title="Ya están disponibles las presentaciones y archivos de ASP.NET" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/11/ya-estn-disponibles-las-presentaciones.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-6599372993135659354</id><published>2007-09-02T15:04:00.001-06:00</published><updated>2007-09-02T15:37:48.747-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bloguear" /><category scheme="http://www.blogger.com/atom/ns#" term="office" /><title type="text">Problemas para publicar en Blogger con Word 2007</title><content type="html">Desde hace rato quería probar la capacidad de Word 2007 para publicar entradas este blog, que está hospedado en &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;. Sin embargo, cada vez que quería registrar la cuenta, me daba el mensaje: "&lt;em&gt;Word cannot register your account".&lt;/em&gt;&lt;span xmlns=""&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/wordcannotregisteryouraccount.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/screenshots/wordcannotregisteryouraccount.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Ummm, &lt;em&gt;gracias&lt;/em&gt; por no decirme nada útil en el mensaje de error—bueno, al menos no me dijo &lt;em&gt;"General protection fault" &lt;/em&gt;¿verdad?  Así que hice lo que muchos y traté de &lt;em&gt;googlear&lt;/em&gt; el problema. Al parecer &lt;a href="http://knownissues.blogspot.com/2007/01/word-2007s-new-blogger-support-does-not.html"&gt;en un principio Blogger y Word 2007 sí tenían una bronca&lt;/a&gt;, pero lo habían arreglado desde febrero. De ahí, lo más acercado que encontré fue &lt;a href="http://support.microsoft.com/kb/928336"&gt;un artículo en el knowledge base de Microsoft&lt;/a&gt; que dice que el mensaje puede ser arrojado cuando estás tecleando mal tu usuario y password.  Pero después de estar completamente seguro que ese no era el caso, me quedé perplejo por varios meses, desistí de la idea de usar Word y me quedé &lt;a href="http://www.dotnetero.com/2006/08/juguetes-nuevos-para-bloguear.html"&gt;&lt;em&gt;bloggeando&lt;/em&gt; con Windows Live Writer&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Hoy, por azares del destino, se me ocurrió cambiar mi password de Google/Gmail/Blogger/etcétera y el problema desapareció misteriosamente.  La causa: el password original contenía un carácter especial: "+" (el signo de más). No sé si el problema sea de Word o de Blogger, pero les comento por si les pasa lo mismo algún día.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-6599372993135659354?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=VS9JgRhka8Y:QPDNeCrH2eI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=VS9JgRhka8Y:QPDNeCrH2eI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=VS9JgRhka8Y:QPDNeCrH2eI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=VS9JgRhka8Y:QPDNeCrH2eI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/VS9JgRhka8Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/6599372993135659354/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=6599372993135659354" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6599372993135659354" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6599372993135659354" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/VS9JgRhka8Y/problemas-para-publicar-en-blogger-con.html" title="Problemas para publicar en Blogger con Word 2007" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/09/problemas-para-publicar-en-blogger-con.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-22529781.post-6574835222897811960</id><published>2007-08-23T18:32:00.001-06:00</published><updated>2007-08-23T18:32:40.218-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cotorreo" /><title type="text">Pagándole al Evil Mastermind</title><content type="html">&lt;p&gt;El sábado pasado me tocó dar el taller mensual de la &lt;a href="http://comunidadnetjuarez.org"&gt;Comunidad .NET de Cd. Juárez&lt;/a&gt;.&amp;nbsp; El tema fue &lt;span style="font-style: italic"&gt;Introducción a Cascading Style Sheets&lt;/span&gt; (puedes ver más detalles, ver fotos, bajar la presentación, los demos y los ejercicios &lt;a href="http://comunidadnetjuarez.org/blogs/comunidad/archive/2007/08/23/material-y-fotos-de-la-reunion-y-taller-de-agosto-disponibles.aspx"&gt;en esta página&lt;/a&gt;). &lt;/p&gt; &lt;p&gt;&lt;img title="Your Code is Suboptimal" style="float: right; margin: 0pt 0pt 10px 10px" alt="Your Code is Suboptimal" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/YourCodeIsSuboptimal.png" border="0"&gt;Así que aproveché la ocasión para llevarme puesta mi &lt;a href="http://www.sourcegear.com/TEM/TEMshirt.html"&gt;camiseta del Evil Mastermind&lt;/a&gt;. Digo, no todos los días puedes geekear agusto.&amp;nbsp; Y como lo anticipé, alguien me preguntó que qué onda con el mono de la camiseta diciendo "Your code is suboptimal". Entonces ya les solté la sopa de que era parte de &lt;a href="http://www.sourcegear.com/TEM/TEMads.html"&gt;una campaña publicitaria&lt;/a&gt; que traen los vatos de SourceGear para promocionar la nueva versión de &lt;a href="http://www.sourcegear.com/vault/"&gt;Vault&lt;/a&gt;.&amp;nbsp; El Evil Mastermind es un personaje de un "comic" bastante cura que puedes &lt;a href="http://www.sourcegear.com/TEM/TEMcomic.html"&gt;bajar de aquí&lt;/a&gt; (Si eres fan de los comics, reconocerán rápidamente algunos chascarrillos como la parodia de los &lt;a href="http://cagle.msnbc.com/hogan/features/atlas.asp"&gt;anuncios del Charles Atlas&lt;/a&gt;). &lt;/p&gt; &lt;p&gt;Vault en mi humilde opinión es lo que SourceSafe siempre debió haber sido.&amp;nbsp; Es decir, es una herramienta de control de código que se parece mucho a SourceSafe, pero jala bien padre para equipos distribuidos y se integra muy agusto con Visual Studio (no sé si recuerdes que en alguna ocasión escribí acerca de &lt;a href="http://www.dotnetero.com/2007/06/diferencias-en-herramientas-de.html"&gt;cómo configurar su herramienta de diferencias con VS&lt;/a&gt;).&amp;nbsp; Actualmente es la herramienta que utilizamos en la chamba como controlador de código y jala super padre a pesar de que tenemos un equipo de desarrolladores que está disperso en todas las zonas horarias y geográficas de Estados Unidos. &lt;/p&gt; &lt;p&gt;&lt;img title="" style="float: right; margin: 0pt 0pt 10px 10px" alt="" src="http://i110.photobucket.com/albums/n109/carlosrubalcava/blog-images/EvilMastermindt-shirt.jpg"&gt;SourceGear, además, es una de las compañías que me cae extremadamente bien por la actitud que tiene su CEO, &lt;a href="http://software.ericsink.com/"&gt;Eric Sink&lt;/a&gt;.&amp;nbsp; Ésta actitud se transmite con varias decisiones quizá poco usuales. Por ejemplo, puedes conseguir &lt;a href="http://software.ericsink.com/entries/SingleUserStillFree.html"&gt;una copia de Vault para una persona gratis&lt;/a&gt;. &lt;a href="http://sourcegear.com/diffmerge/downloads.html"&gt;DiffMerge ahora es gratis&lt;/a&gt;. La camiseta no me costó nada, solo tuve que mandarles un e-mail y me la enviaron gratis; el "pago" consiste en tomarte una foto con la camiseta y postearla en tu blog, así que aquí está: &lt;/p&gt; &lt;p&gt;(Ya sé, ya sé, no hice &lt;a href="http://www.pluralsight.com/blogs/craig/archive/2007/03/19/46507.aspx"&gt;la pose adecuada&lt;/a&gt;, pero se me hizo demasiado)&lt;/p&gt; &lt;p&gt;También vale la pena echarle un ojo al blog de Eric (&lt;a href="http://software.ericsink.com"&gt;http://software.ericsink.com&lt;/a&gt;).&amp;nbsp; Yo estoy suscrito a él desde hace un par de años y he aprendido cosas bien interesantes&amp;nbsp;desde &lt;a href="http://www.ericsink.com/scm/source_control.html"&gt;estilos de control de código&lt;/a&gt; hasta &lt;a href="http://software.ericsink.com/Marketing_for_Geeks.html"&gt;maketing para geeks&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;En fin, creo que ya desquité el precio de la camiseta con tanta promoción jejeje&amp;nbsp;&lt;img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22529781-6574835222897811960?l=www.dotnetero.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=3yepbJnbhIk:V46G1-7odPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=3yepbJnbhIk:V46G1-7odPs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?i=3yepbJnbhIk:V46G1-7odPs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ElOtroLado?a=3yepbJnbhIk:V46G1-7odPs:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ElOtroLado?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ElOtroLado/~4/3yepbJnbhIk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.dotnetero.com/feeds/6574835222897811960/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=22529781&amp;postID=6574835222897811960" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6574835222897811960" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22529781/posts/default/6574835222897811960" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ElOtroLado/~3/3yepbJnbhIk/pagndole-al-evil-mastermind.html" title="Pagándole al Evil Mastermind" /><author><name>Carlos Rubalcava</name><uri>http://www.blogger.com/profile/10848793413989996197</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd="http://schemas.google.com/g/2005" name="OpenSocialUserId" value="13627419634570448365" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.dotnetero.com/2007/08/pagndole-al-evil-mastermind.html</feedburner:origLink></entry></feed>
