<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/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:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7063378937475897674</id><updated>2011-11-27T17:21:25.771-08:00</updated><category term='SQLConnection'/><category term='templates'/><category term='Visual Studio'/><category term='Rollap'/><category term='mef'/><category term='SQL'/><category term='Windows Storage Server'/><category term='código'/><category term='VB.NET'/><category term='Utilidades'/><category term='events'/><category term='generación'/><category term='CodeDom'/><category term='Función'/><category term='dzone'/><category term='RowUpdated'/><category term='Hugo Bernachea'/><category term='.NET Tools'/><category term='powershell'/><category term='mygeneration'/><category term='cast'/><category term='Design Pattern Framework 4'/><category term='Eventos'/><category term='Asp.NET 2.0'/><category term='libro'/><category term='configurar'/><category term='SQLData'/><category term='codeproject'/><category term='.NET 3.5'/><category term='Cube'/><category term='dynamic casting'/><category term='web.config'/><category term='codigo'/><category term='wikileaks'/><category term='conversión'/><category term='type'/><category term='MySQL'/><category term='leer'/><category term='XML'/><category term='Strategy'/><category term='eggheadcafe'/><category term='TableAdapter'/><category term='pdf'/><category term='GPL'/><category term='PostgreSQL'/><category term='Table'/><category term='insurance'/><category term='OOP'/><category term='CSharp'/><category term='Firebird'/><category term='Bernachea'/><category term='app.config'/><category term='castle windsor'/><category term='DBNull.Value'/><category term='.NET'/><category term='ioc'/><category term='articles'/><category term='Transact-SQL'/><category term='Bases de Ejemplo'/><category term='casteo'/><category term='. libro'/><category term='dynamic'/><category term='delegados'/><category term='SQL Server'/><category term='Visual Studio 2005'/><category term='OOD'/><category term='Nothing'/><category term='Visual Basic.NET'/><category term='RowUpdating'/><category term='CodeSmith'/><category term='event'/><category term='aes256'/><category term='generacion de codigo'/><category term='Visual Studio 2010'/><category term='Programming'/><category term='isnumeric'/><category term='Ado.net'/><category term='tasks'/><category term='diferencias'/><category term='webparts'/><category term='.net 4.0'/><category term='tipos'/><category term='DDex'/><category term='Visual Basic'/><category term='reactive'/><category term='Web Parts'/><category term='casting'/><category term='ConnectionString'/><category term='ADO'/><category term='entity frameworks'/><category term='SQL Server 2008'/><category term='OpenXML'/><category term='Arquitectura'/><category term='orientación al objeto'/><category term='convert'/><category term='system.net'/><category term='Inversion of Control'/><category term='delegates'/><category term='button'/><category term='OpenSource'/><category term='2005'/><category term='Refactor'/><category term='C#'/><category term='dofactory'/><category term='.NET Data Provider'/><category term='dynamically'/><category term='generated'/><category term='Patterns'/><category term='Patrones'/><category term='registros'/><category term='password'/><category term='CodePlex'/><category term='Utilities'/><title type='text'>Logicamente NET !  - LogicaNET</title><subtitle type='html'>Tecnologías .NET - C# - Visual Basic .NET - Visual Studio 2005 / Visual Studio 2008 - Artículos - Links - Tips - Tricks</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-7631948565361142419</id><published>2011-02-19T16:26:00.000-08:00</published><updated>2011-02-19T16:35:07.614-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Pattern Framework 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Design Pattern Framework 4 - Nuevo !!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-m5Kx8crIBf0/TWBgW2Au3jI/AAAAAAAABhs/Q85kZ7B81Cc/s1600/DesignPatternFramework_mundoeva_4.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 282px; height: 306px;" src="http://4.bp.blogspot.com/-m5Kx8crIBf0/TWBgW2Au3jI/AAAAAAAABhs/Q85kZ7B81Cc/s400/DesignPatternFramework_mundoeva_4.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5575562284256648754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/416108784/DesignPatternFrameworkCS_4.0_1User.zip.html"&gt;http://rapidshare.com/files/416108784/DesignPatternFrameworkCS_4.0_1User.zip.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ramin97.dl.rapidbaz.com/hX9g/DesignPatternFrameworkCS_4.0_1User.zip"&gt;http://ramin97.dl.rapidbaz.com/hX9g/DesignPatternFrameworkCS_4.0_1User.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-7631948565361142419?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7631948565361142419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7631948565361142419'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2011/02/design-pattern-framework-4-nuevo.html' title='Design Pattern Framework 4 - Nuevo !!'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-m5Kx8crIBf0/TWBgW2Au3jI/AAAAAAAABhs/Q85kZ7B81Cc/s72-c/DesignPatternFramework_mundoeva_4.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-1183726962296193025</id><published>2011-01-21T13:16:00.000-08:00</published><updated>2011-01-21T13:18:01.473-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='powershell'/><category scheme='http://www.blogger.com/atom/ns#' term='libro'/><title type='text'>Powershell - Libro Gratuito de Microsoft</title><content type='html'>&lt;div class="post-body entry-content"&gt; &lt;a href="http://3.bp.blogspot.com/_qjUj6Bhew2E/TTn3fkANHFI/AAAAAAAABeE/hjH3ObCY5Jg/s1600/PowerShell%2BProgress_63173619-d8f5-4b95-b8ae-25d4f7321b01.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 353px; height: 300px;" src="http://3.bp.blogspot.com/_qjUj6Bhew2E/TTn3fkANHFI/AAAAAAAABeE/hjH3ObCY5Jg/s400/PowerShell%2BProgress_63173619-d8f5-4b95-b8ae-25d4f7321b01.png" alt="" id="BLOGGER_PHOTO_ID_5564750936205499474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La gente de Microsoft publicó hace algún tiempo un libro electrónico en inglés sobre Windows PowerShell. &lt;p&gt;El libro ha resultado ser un éxito. Sus casi 50 páginas ayudan a  aquellos que quieren conocer Windows PowerShell.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;A continuación ustedes tienen los enlaces correspondientes:&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Acceder al &lt;a class="" href="http://download.microsoft.com/download/a/9/4/a94270c7-ed16-4c72-8280-658c66315719/Windows%20Powershell%20-%20EN.zip" target="_blank"&gt;libro electrónico en inglés&lt;/a&gt; (aproximadamente 2 Mb).&lt;/li&gt;&lt;li&gt;Acceder a los &lt;a class="" href="http://download.microsoft.com/download/a/9/4/a94270c7-ed16-4c72-8280-658c66315719/PowerShell-Demofiles.zip" target="_blank"&gt;ejemplos y documentación adicional&lt;/a&gt; (aproximadamente 5 Mb).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Alguna documentación interesante mas ejemplos, scripts y artículos en los siguientes links:&lt;br /&gt;&lt;a href="http://technet.microsoft.com/es-ar/library/ee221100%28en-us%29.aspx"&gt;http://technet.microsoft.com/es-ar/library/ee221100%28en-us%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/es-es/scriptcenter/dd742419"&gt;http://technet.microsoft.com/es-es/scriptcenter/dd742419&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-1183726962296193025?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1183726962296193025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1183726962296193025'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2011/01/powershell-libro-gratuito-de-microsoft.html' title='Powershell - Libro Gratuito de Microsoft'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qjUj6Bhew2E/TTn3fkANHFI/AAAAAAAABeE/hjH3ObCY5Jg/s72-c/PowerShell%2BProgress_63173619-d8f5-4b95-b8ae-25d4f7321b01.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-2930414857389921084</id><published>2010-12-09T14:19:00.000-08:00</published><updated>2010-12-09T14:21:00.405-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='insurance'/><category scheme='http://www.blogger.com/atom/ns#' term='aes256'/><category scheme='http://www.blogger.com/atom/ns#' term='wikileaks'/><title type='text'>¿Fue buena idea usar AES256 con el archivo INSURANCE de Wikileaks?</title><content type='html'>&lt;p&gt;&lt;em&gt;Por Fernando Acero&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Desde hace tiempo, estoy recibiendo correos de gente que me pregunta sobre la posibilidad de decodificar el archivo &lt;a href="http://www.unelected.org/2010/07/31/wikileaks-posts-encrypted-insurance-file/"&gt;INSURANCE&lt;/a&gt; de Wikileaks, que presuntamente (el nombre lo pone) está codificado usando el algoritmo AES256.  Al margen de &lt;a href="http://www.kriptopolis.org/descifrar-wikileaks-insurance"&gt;las discusiones morales, prácticas y éticas&lt;/a&gt;,  derivadas de decodificar a las bravas un archivo que presuntamente  sirve para salvar la vida de alguien, nos podemos centrar en el estudio  de la parte técnica de este asunto de la decodificación del AES, que  todo hay que decirlo, es un asunto que me interesa mucho más...&lt;/p&gt; &lt;p&gt;De todos modos, ¿alguien se imagina lo que me pasaría si yo dijera en  este momento: “Señores, durante una noche de insomnio y usando mi  batería de tarjetas NVIDIA, he logrado decodificar el archivo INSURANCE  de Wikileaks”?. Puede que en la puerta de mi casa encontrase tantos  agentes secretos vigilando mis movimientos y tanta gente atacando mis  sistemas informáticos, como periodistas en la final del mundial de  fútbol y eso no me apetece en absoluto ¿y a ustedes?.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h2&gt;El ALGORITMO AES&lt;/h2&gt; &lt;p&gt;El algoritmo &lt;a href="http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf"&gt;AES (Advanced Encryption Satandard)&lt;/a&gt;, también conocido como Rijndael, es un sistema de cifrado por bloques simétrico, pensado para sustituir al obsoleto &lt;a href="http://es.wikipedia.org/wiki/Data_Encryption_Standard"&gt;DES&lt;/a&gt;  y optimizado para las transmisiones seguras de mensajes a través de las  redes de telecomunicaciones. AES es muy rápido, tanto en  las  implementaciones de software, como en las de hardware  y además de ser  relativamente fácil de implementar, requiere poca memoria para realizar  los cálculos. Como nuevo estándar de cifrado, se está utilizando a gran  escala por todo el mundo, lo que le parece muy interesante a los amigos  de asuntos conspiratorios. El AES/Rijdael, fue desarrollado por dos  criptólogos Belgas, llamados Daemen y Rijmen, cuando eran estudiantes de  la Universidad Católica de Leuven. &lt;/p&gt; &lt;p&gt;La principal diferencia entre el AES y el DES al que sustituye, es que el AES usa una &lt;a href="http://www.criptored.upm.es/descarga/Laredo_jgg2.zip"&gt;red de sustitución-permutación&lt;/a&gt; (serie de sustituciones y permutaciones, que se suceden unas a otras sobre una matriz), en lugar de una &lt;a href="http://es.wikipedia.org/wiki/Red_de_Feistel"&gt;red de Feistel&lt;/a&gt;.  El AES utiliza un bloque de tamaño fijo de 128 bits (originalmente  podía usar bloques de varios tamaños) y las claves pueden ser de 128,  192 y 256 bits. Al igual que el DES, el procedimiento de codificación se  basa en una operación básica llamada "ronda", que se repite un número  fijo de de veces dependiendo del tamaño de la clave.  Así, con las  claves de 128 bits, se usan 10 rondas, 12 rondas con las de 192 bits y  14 rondas, para las claves de 256 bits. AES trabaja sobre una estructura  conocida como el "estado AES", que es simplemente una reordenación del  bloque básico, usando una matriz de 4×4 y por lo tanto, es un sistema  que tiene una descripción matemática bastante simple, aunque para la  mayoría de los comunes mortales, es más sencillo verlo como operaciones  con bytes en una matriz de datos. &lt;/p&gt; &lt;p&gt;Los bloques básicos del  AES son:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;SubBytes - Una sustitución no lineal en el estado AES.&lt;/li&gt;&lt;li&gt;ShiftRows - Realiza un desplazamiento sobre las filas del estado AES.&lt;/li&gt;&lt;li&gt;MixColumn - Mezcla columnas del estado de AES, haciendo cada celda una combinación de otras celdas. &lt;/li&gt;&lt;li&gt;AddRoundKey - Mezcla la clave con el estado AES. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Una codificación AES consiste en la realización de los siguientes pasos sencillos:&lt;/p&gt; &lt;p&gt;1. Ronda Inicial:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;AddRoundKey &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;2. R-1 Rondas:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;SubBytes &lt;/li&gt;&lt;li&gt;ShiftRows &lt;/li&gt;&lt;li&gt;MixColumns &lt;/li&gt;&lt;li&gt;AddRoundKey &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;3. Ronda final&lt;/p&gt; &lt;ul&gt;&lt;li&gt;SubBytes &lt;/li&gt;&lt;li&gt;ShiftRows &lt;/li&gt;&lt;li&gt;AddRoundKey &lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;El proceso de decodificación sin embargo, es más complicado que con  el DES, en el que simplemente había que volver a “codificar” un mensaje  ya “codificado”, usando por supuesto, la misma clave. En el caso del  AES, es necesario definir las operaciones inversas para ShiftRows,  SubBytes y MixColumns. Hay que señalar, que para  la operación  AddRoundKey no se requiere una inversa, puesto que basta con aplicarla  otra vez con la misma clave, para obtener su inversa.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h2&gt;SEGURIDAD REAL DEL AES&lt;/h2&gt; &lt;p&gt;Se dice que un sistema criptográfico está roto cuando existe algún  ataque más rápido que una búsqueda exhaustiva (ataque por fuerza bruta),  aunque este ataque sea solamente teórico, y no sea viable por la  cantidad de datos, tiempo, o memoria necesaria. &lt;/p&gt; &lt;p&gt;Algunas personas han dicho que el AES está roto por los resultados  obtenidos con una clave de 64 bits, que fue llevado a cabo por &lt;a href="http://www.distributed.net/Main_Page/en"&gt;distributed.net&lt;/a&gt;,  pero la realidad es que solamente fue un ataque por fuerza bruta de una  clave muy pequeña de 64 bits, por lo que no lo podemos considerar como  una ruptura del AES. &lt;/p&gt; &lt;p&gt;De hecho, el AES, a pesar de ser un algoritmo público y de uso  público, está considerado como la NSA (Agencia de Seguridad Nacional de  los EEUU) desde el año 2003, como algoritmo seguro para proteger  información clasificada de nivel SECRETO usando claves de 128 bits y de  ALTO SECRETO, si se usan claves de 192 o 256 bits. No deja de  sorprender, teniendo en cuenta el amor-odio del Gobierno de los Estados  Unidos con los sistemas de cifrado, que el gran público pueda tener  acceso a un sistema de cifrado considerado apto por la NSA, para  proteger información sensible del más alto nivel, lo que no deja de  levantar muchas suspicacias. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h2&gt;LOS ATAQUES POSIBLES&lt;/h2&gt; &lt;p&gt;La forma más asequible de ver si es posible realizar un ataque a un  codificador de bloques, es intentar atacarlo mediante la reducción del  número de rondas utilizadas en la codificación. Si recordamos, el AES  usa 10 rondas para las claves de 128 bits, 12 rondas para claves de 192  bits, y 14 rondas para claves de 256 bits. Hasta el año 2005, los  mejores ataques conocidos tuvieron éxito sobre versiones reducidas a 7  rondas para claves de 128 bits, de 8 rondas para las claves de 192 bits,  y de 9 rondas, para las claves de 256 bits. &lt;/p&gt; &lt;p&gt;Sin embargo, también es cierto que en estos ataques se evidencia una  escasa diferencia entre las rondas reales y las de los mejores ataques  conocidos, por lo que con una pequeña mejora en los ataques, cabría la  posibilidad de romper un cifrado que use todas las rondas. Está claro,  la mejor vacuna para el problema, sería aumentar el número de rondas sin  cambiar el algoritmo. Sin embargo, esta solución también tendría un  impacto en la eficiencia del algoritmo y sobre todo, en la actualización  de los sistemas basados en hardware. Hay que señalar, que se conocen  algunos ataques exitosos sobre determinadas implementaciones del AES,  que se basan en el canal auxiliar, pero estos ataques no atacan al  algoritmo en sí mismo, sino a una implementación específica del mismo,  por lo que tampoco son aplicables a la decodifcación del archivo de  Wikeleaks. &lt;/p&gt; &lt;p&gt;En esta línea de investigación, en el año 2009, Alex  Biryukov  y   Dmitri Khovratovich, de la Universidad de Luxemburgo, publicaron &lt;a href="http://www.impic.org/papers/Aes-192-256.pdf"&gt;este interesante artículo,&lt;/a&gt;  con dos ataques contra el algoritmo de cifrado AES, que mejoran de  forma impresionante los resultados anteriores.  Biryukov y Khovratovich  anunciaron un ataque contra  AES de 256  completo, es decir, con sus 14  rondas. El ataque tiene una complejidad computacional de solamente  2^96  operaciones,  es  decir,  romper la seguridad de un AES256/14 sería tan  difícil como probar 2^96 claves. No cabe la menor duda de que está  fuera del alcance de la mayoría de los mortales,  pero  ver  un   algoritmo  de  256 bits  con una fortaleza equivalente a la de uno de  solamente 96 bits, no dice mucho a favor del algoritmo. Pero  tranquilidad, que esta afirmación tiene trampa, solamente funciona con  determinadas claves “podridas”, es decir, con una clave de cada 34.000  millones. ¿Habrá usado Wikileaks una de esas claves podridas de forma  voluntaria o involuntaria?. Sin duda es una buena pregunta, ya que no  sabemos exactamente lo que pretende Wikileaks con este archivo, si que  no lo abra nadie, o que solamente lo abran los que están “retratados” en  él, para darles miedo.&lt;/p&gt; &lt;p&gt;Sin embargo, el otro ataque de Biryukov y Khovratovich, aunque es  menos “efectivo” que el anterior, funciona con cualquier clave y  demuestra otros datos preocupantes sobre el AES. El ataque contra el  AES-128/10, tendría una complejidad matemática de 2^123 datos (claves),  2^176 en tiempo y de 2^152 en memoria, así que aunque curioso, esto no  es nada preocupante por el momento. Sin embargo, el ataque contra el  AES-256/14 es mucho más efectivo, ya que solamente se necesitan 2^119 en  datos y tiempo y 2^77 en memoria. Dicho de otro modo, el AES-256 tiene  la misma fortaleza que un teórico AES-119/14, por debajo del AES-123/10  que se obtendría con el ataque a un AES-128/10 y esto, con independencia  de la clave que usemos. Es evidente que esto sigue estando fuera del  alcance de cómputo de la mayoría de los mortales, pero ¿lo está del  alcance de una superpotencia?, sobre todo, si tenemos en cuenta además,  que los autores dicen que pueden mejorar el ataque al AES-256/14 a una  complejidad de solamente 2^110,5?. Dicho esto, aunque la NSA dijo que el  AES-128/10 era seguro para los SECRETOS y el AES-192/12 y el AES-256/14  para los ALTOS SECRETOS, lo cierto es que visto lo anterior, el  AES-128/10 es más seguro que el AES-256/14 en igualdad de condiciones. &lt;/p&gt; &lt;p&gt;Pero si lo anterior no nos preocupa demasiado, hay &lt;a href="http://eprint.iacr.org/2009/374.pdf"&gt;otro interesante artículo&lt;/a&gt;,  fechado el 19 de agosto de 2009, y firmado por unos reputados Alex  Biryukov, Orr Dunkelman, Nathan Keller,  Dmitry Khovratovich, y Adi  Shamir. En este articulo comentan algo mucho más preocupante sobre el  AES-256, ya que lograron ataques contra el AES-256/9 con una complejidad  matemática de solamente 2^39 operaciones, contra el AES-256/10 con una  complejidad de solamente 2^45 y consideran que el AES-246/11, podría  tener una complejidad de solamente 2^70, valores todos ellos, muy por  debajo de los logrados por Biryukov Khovratovich. &lt;/p&gt; &lt;p&gt;Está claro, no se está hablando del AES-256/14, pero es evidente, que  hay un problema y grave con el AES-256, aunque solamente hayan llegado a  las 10 rondas y especulado un poco sobre las 11 rondas. De nuevo me  pregunto ¿está esto fuera del alcance de la NSA con todos sus medios  técnicos y sus miles de matemáticos en plantilla?. &lt;/p&gt; &lt;p&gt;Bueno, para ser justos, hay otra trampa en el plantemiento de Shamir y  sus amigos, estos ataques no son prácticos con el archivo de Wikileaks,  pero solamente desde nuestro lado, ya que el que el que tiene los  mensajes en claro (aunque no sepa exactamente los que son). Es decir, el  Gobierno de los EEUU, lo tiene complicado, pero no tanto como nosotros,  que no tenemos nada para empezar a trabajar. Los ataques anteriores se  denominan de “claves relacionadas”, es decir, que se supone que el  criptoanalista dispone de acceso a una serie de textos en claro, que han  sido codificados mediante varias claves distintas, las cuales, tienen  una relación específica entre ellas. &lt;/p&gt; &lt;p&gt;Parece demostrado en el caso del AES, que a mayor tamaño de la clave,  menor es la dificultad para romperla. Algo que puede significar que no  se eligió un número de rondas adecuado para el tamaño de cada clave,  puede que por un compromiso entre la seguridad y la velocidad, pero que  al final, ha comprometido la seguridad las versiones de AES 192/12 y  256/14. Los dos “paper” que hemos revisado anteriormente dicen lo mismo  con distintas palabras, en este momento, es más seguro el AES-128/10 que  el AES-256/14 y en términos estrictos lo podemos considerar roto, desde  los primeros resultados de Biryukov y Khovratovich, ya que su fortaleza  en ciertas condiciones es inferior a la de un ataque por fuerza bruta. &lt;/p&gt; &lt;p&gt;Teniendo en cuenta que Bruce Shneier &lt;a href="http://www.schneier.com/blog/archives/2009/07/another_new_aes.html"&gt;ya recomendaba en su blog el día 30 de julio de 2009&lt;/a&gt;,  que se usase AES-128/10 en lugar de AES-256/14, es curioso y no menos  inquietante, que los responsables de Wikileaks, tan preocupados por la  seguridad como están, hayan decidido proteger su archivo “salvavidas”  con un roto AES-256. &lt;/p&gt; &lt;p&gt;Si me hubieran preguntado, si buscase la seguridad absoluta de que el  archivo no sería abierto en un tiempo razonable y mi vida fuera en  ello, yo no hubiera optado por el AES-256/14 ni por asomo, que hablando  claro, en este momento, lo podemos considerar seguro, aunque menos  seguro que el DES que pretende sustituir.&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;"Copyleft 2010 Fernando Acero Martín. Verbatim copying,  translation and distribution of this entire article is permitted in any  digital medium, provided this notice is preserved. Quotation is  allowed."&lt;/p&gt; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-2930414857389921084?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.kriptopolis.org/wikileaks-insurance-aes-256' title='¿Fue buena idea usar AES256 con el archivo INSURANCE de Wikileaks?'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2930414857389921084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2930414857389921084'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/12/fue-buena-idea-usar-aes256-con-el.html' title='¿Fue buena idea usar AES256 con el archivo INSURANCE de Wikileaks?'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-7516936501954871033</id><published>2010-11-12T08:46:00.001-08:00</published><updated>2010-11-12T08:46:58.329-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='entity frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='libro'/><title type='text'>Libro Gratuito de Entity Framework !</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_qjUj6Bhew2E/TMMDE8YHycI/AAAAAAAABXc/9Yk1xj_b4qU/s1600/Entity_Frameworks_MundoEva.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 399px; height: 330px;" src="http://4.bp.blogspot.com/_qjUj6Bhew2E/TMMDE8YHycI/AAAAAAAABXc/9Yk1xj_b4qU/s400/Entity_Frameworks_MundoEva.png" alt="" id="BLOGGER_PHOTO_ID_5531268150802762178" border="0" /&gt;&lt;/a&gt;&lt;span style="visibility: visible;" id="search"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zeeshan Hirani ha escrito y compartido &lt;/span&gt;gratis un libro sobre entity frameworks que lo pueden descargar desde:&lt;a href="http://cid-245ed00edb4c374e.skydrive.live.com/self.aspx/Public/entity%20framework%20learning%20guide.pdf"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href="http://cid-245ed00edb4c374e.skydrive.live.com/self.aspx/Public/entity%20framework%20learning%20guide.pdf"&gt;http://cid-245ed00edb4c374e.skydrive.live.com/self.aspx/Public/entity%20framework%20learning%20guide.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-7516936501954871033?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cid-245ed00edb4c374e.skydrive.live.com/self.aspx/Public/entity%20framework%20learning%20guide.pdf' title='Libro Gratuito de Entity Framework !'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7516936501954871033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7516936501954871033'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/11/libro-gratuito-de-entity-framework.html' title='Libro Gratuito de Entity Framework !'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qjUj6Bhew2E/TMMDE8YHycI/AAAAAAAABXc/9Yk1xj_b4qU/s72-c/Entity_Frameworks_MundoEva.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-1686108960187088679</id><published>2010-10-22T09:31:00.000-07:00</published><updated>2010-10-22T09:37:24.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arquitectura'/><category scheme='http://www.blogger.com/atom/ns#' term='.net 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='orientación al objeto'/><title type='text'>Espectacular Libro de arquitectura n-capas para .NET 4.0 en Español !!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qjUj6Bhew2E/TMG9cZKu9jI/AAAAAAAABXU/djhEVfM7lx8/s1600/TapaLibro_MundoEVA.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 400px; height: 296px;" src="http://3.bp.blogspot.com/_qjUj6Bhew2E/TMG9cZKu9jI/AAAAAAAABXU/djhEVfM7lx8/s400/TapaLibro_MundoEVA.png" alt="" id="BLOGGER_PHOTO_ID_5530910112877573682" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Guía de arquitectura n-capas orientado al Dominio en .NET 4.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;By Microsoft - Spain&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using .NET 4.0 C#, Entity Framework 4.0 Implementing typical DDD architecture &amp;amp; desing patterns&lt;br /&gt;&lt;br /&gt;El libro lo bajan de acá&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/2/2/1/221AD022-E701-488F-B070-7A0B87DFE789/Guia_Arquitectura_N-Capas_DDD_NET_4_%28Borrador_Marzo_2010%29.pdf"&gt;http://download.microsoft.com/download/2/2/1/221AD022-E701-488F-B070-7A0B87DFE789/Guia_Arquitectura_N-Capas_DDD_NET_4_(Borrador_Marzo_2010).pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Presentaciones las bajan de acá:&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/D/D/4/DD432B58-183D-46F1-91AA-8A80CDC45D6F/Foro_Arquitectos_XXV_Arquitecturas_18_05_13.zip"&gt;http://download.microsoft.com/download/D/D/4/DD432B58-183D-46F1-91AA-8A80CDC45D6F/Foro_Arquitectos_XXV_Arquitecturas_18_05_13.zip&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;y la aplicación de ejemplo la bajan de acá:&lt;br /&gt;&lt;a href="http://microsoftnlayerapp.codeplex.com/"&gt;&lt;br /&gt;http://microsoftnlayerapp.codeplex.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-1686108960187088679?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://microsoftnlayerapp.codeplex.com/' title='Espectacular Libro de arquitectura n-capas para .NET 4.0 en Español !!'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1686108960187088679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1686108960187088679'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/10/espectacular-libro-de-arquitectura-n.html' title='Espectacular Libro de arquitectura n-capas para .NET 4.0 en Español !!'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qjUj6Bhew2E/TMG9cZKu9jI/AAAAAAAABXU/djhEVfM7lx8/s72-c/TapaLibro_MundoEVA.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-892814652654274003</id><published>2010-10-12T17:03:00.001-07:00</published><updated>2010-10-12T17:03:55.123-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Seis caracteristicas interesantes del Visual Studio 2010</title><content type='html'>&lt;a href="http://amazedsaint.blogspot.com/2010/04/6-cool-vs2010-quick-tips-you-should.html"&gt;http://amazedsaint.blogspot.com/2010/04/6-cool-vs2010-quick-tips-you-should.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-892814652654274003?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://amazedsaint.blogspot.com/2010/04/6-cool-vs2010-quick-tips-you-should.html' title='Seis caracteristicas interesantes del Visual Studio 2010'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/892814652654274003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/892814652654274003'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/10/seis-caracteristicas-interesantes-del.html' title='Seis caracteristicas interesantes del Visual Studio 2010'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4095179563066935604</id><published>2010-10-12T16:58:00.001-07:00</published><updated>2010-10-12T17:00:22.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dzone'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>DZone y sus tarjetas</title><content type='html'>Calculo que muchos ya conocerán dzone con sus famosas tarjetas y resumenes de tecnologías, .NET, C#, sharepoint, patterns, WCF, etc, etc, pero si no lo conocen aquí está e link:&lt;br /&gt;&lt;a href="http://refcardz.dzone.com/"&gt;http://refcardz.dzone.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Altamente recomendado !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4095179563066935604?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://refcardz.dzone.com/' title='DZone y sus tarjetas'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4095179563066935604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4095179563066935604'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/10/dzone-y-sus-tarjetas.html' title='DZone y sus tarjetas'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-800303652843854944</id><published>2010-10-12T16:53:00.000-07:00</published><updated>2010-10-12T16:55:34.893-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamic'/><category scheme='http://www.blogger.com/atom/ns#' term='reactive'/><category scheme='http://www.blogger.com/atom/ns#' term='mef'/><category scheme='http://www.blogger.com/atom/ns#' term='.net 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='tasks'/><title type='text'>4 librerías  .NET 4.0  que usted debiera conocer mas</title><content type='html'>Una interesante nota (en inglés) sobre las librerias,&lt;a href="http://amazedsaint.blogspot.com/2010/05/4-net-40-libraries-you-should-know.html"&gt; MEF, Reactive, Tasks and &lt;/a&gt;&lt;br /&gt;&lt;a href="http://amazedsaint.blogspot.com/2010/05/4-net-40-libraries-you-should-know.html"&gt;Dynamic&lt;/a&gt;&lt;br /&gt;&lt;a href="http://amazedsaint.blogspot.com/2010/05/4-net-40-libraries-you-should-know.html"&gt;http://amazedsaint.blogspot.com/2010/05/4-net-40-libraries-you-should-know.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-800303652843854944?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://amazedsaint.blogspot.com/2010/05/4-net-40-libraries-you-should-know.html' title='4 librerías  .NET 4.0  que usted debiera conocer mas'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/800303652843854944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/800303652843854944'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/10/4-librerias-net-40-que-usted-debiera.html' title='4 librerías  .NET 4.0  que usted debiera conocer mas'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4215546417837423656</id><published>2010-09-15T06:31:00.000-07:00</published><updated>2010-09-15T06:34:14.334-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='entity frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='. libro'/><title type='text'>Libro de Entity Frameworks</title><content type='html'>El amigo &lt;span style="visibility: visible;" id="search"&gt;Zeeshan Hirani ha escrito y compartido &lt;/span&gt;gratis un libro sobre entity frameworks que lo pueden descargar desde:&lt;br /&gt;&lt;a href="http://cid-245ed00edb4c374e.skydrive.live.com/self.aspx/Public/entity%20framework%20learning%20guide.pdf"&gt;http://cid-245ed00edb4c374e.skydrive.live.com/self.aspx/Public/entity%20framework%20learning%20guide.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4215546417837423656?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://weblogs.asp.net/zeeshanhirani/archive/2008/12/18/my-christmas-present-to-the-entity-framework-community.aspx' title='Libro de Entity Frameworks'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4215546417837423656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4215546417837423656'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/09/libro-de-entity-frameworks.html' title='Libro de Entity Frameworks'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-6293940851099126610</id><published>2010-09-11T18:44:00.001-07:00</published><updated>2010-09-11T18:50:46.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='ioc'/><category scheme='http://www.blogger.com/atom/ns#' term='Inversion of Control'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='castle windsor'/><title type='text'>Inversion de Control (IOC) usando Castle Windsor - Justificación</title><content type='html'>Algunos cuantos artículos explicando el por qué necesitamos utilizar IOC (inversion of control) , en estos ejemplos tenemos la implementación de IOC usando Castle Windsor:&lt;br /&gt;&lt;br /&gt;Un excelente artículo que explica claramente los por qué y que es el que primero hay que leer para empezar a entender este tema:&lt;br /&gt;&lt;a href="http://leomicheloni.blogspot.com/2008/07/qu-es-la-inversin-de-control-inyeccin.html"&gt;http://leomicheloni.blogspot.com/2008/07/qu-es-la-inversin-de-control-inyeccin.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Otros artículos interesantes de leer:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ihenrysmith.blogspot.com/2010/03/contenedor-ioc.html"&gt;http://ihenrysmith.blogspot.com/2010/03/contenedor-ioc.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.darioquintana.com.ar/category/ioc/"&gt;http://blog.darioquintana.com.ar/category/ioc/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kartones.net/blogs/coco/archive/2009/11/27/inversi-243-n-de-control-ioc.aspx"&gt;http://kartones.net/blogs/coco/archive/2009/11/27/inversi-243-n-de-control-ioc.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La página del proyecto Castle:&lt;br /&gt;&lt;a href="http://www.castleproject.org/"&gt;http://www.castleproject.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-6293940851099126610?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.castleproject.org/' title='Inversion de Control (IOC) usando Castle Windsor - Justificación'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6293940851099126610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6293940851099126610'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/09/algunos-cuantos-articulos-explicando-el.html' title='Inversion de Control (IOC) usando Castle Windsor - Justificación'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-5516967759992336691</id><published>2010-08-07T12:18:00.000-07:00</published><updated>2010-08-07T12:22:37.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Storage Server'/><title type='text'>Cual es el password predeterminado del Windows Storage Server 2008??</title><content type='html'>&lt;p&gt;Como poseedor de una subscripción MSDN me descargué el Windows Storage Server 2008 e inmediatamente me armé una máquina virtual para probarlo.&lt;/p&gt;&lt;p&gt;El tema es que cuando finalizó la instalación me apareció la ventana de login y no tenía la menor idea cual era la pass de logueo.&lt;br /&gt;&lt;/p&gt;Bueno, luego de arduas investigaciones (llamé a un amigo que ya lo había instalado) pude obtener la tan ansiada password: &lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;wSS2008!&lt;/span&gt;  (el signo de admiración es parte del password también).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-5516967759992336691?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/5516967759992336691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/5516967759992336691'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/08/cual-es-el-password-predeterminado-del.html' title='Cual es el password predeterminado del Windows Storage Server 2008??'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8165197343852971095</id><published>2010-07-30T17:16:00.000-07:00</published><updated>2010-07-30T17:23:55.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='codeproject'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Artículos seleccionados</title><content type='html'>&lt;a href="http://www.codeproject.com/KB/IP/SIPIntroduction.aspx"&gt;Introduction to SIP for Java, C# and VB Developers&lt;br /&gt;This article is a technical  overview of the Session Initiation Protocol and is designed for Java, C#  and VB programmers who want a quick low-level guide to the workings and  details of the protocol&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/showcase/RescoBuildMobileApp.aspx"&gt;&lt;span style="font-size:100%;"&gt;Build a Mobile Application in just 4 Minutes&lt;/span&gt; - Part 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/showcase/Resco-Mobile-App.aspx"&gt;&lt;span style="font-size:100%;"&gt;Build a Mobile Application in just 4 Minutes&lt;/span&gt; - Part 2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8165197343852971095?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8165197343852971095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8165197343852971095'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/07/articulos-seleccionados.html' title='Artículos seleccionados'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-3419420782324958867</id><published>2010-06-27T10:16:00.001-07:00</published><updated>2010-06-27T10:17:02.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patrones'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='OOD'/><category scheme='http://www.blogger.com/atom/ns#' term='orientación al objeto'/><title type='text'>Excelentes artículos sobre Orientación al objeto</title><content type='html'>&lt;a href="http://www.oodesign.com/"&gt;http://www.oodesign.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"&gt;http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-3419420782324958867?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/3419420782324958867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/3419420782324958867'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2010/06/excelentes-articulos-sobre-orientacion.html' title='Excelentes artículos sobre Orientación al objeto'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8826112826939747783</id><published>2009-11-16T14:33:00.000-08:00</published><updated>2009-11-16T14:45:06.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hugo Bernachea'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='leer'/><category scheme='http://www.blogger.com/atom/ns#' term='Asp.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='system.net'/><title type='text'>Como leer un archivo pdf desde un aplicativo web form / asp.net</title><content type='html'>Aquí les dejo un método que les permitirá leer un archivo pdf (adobe) desde un aplicativo Web Asp.NET.&lt;br /&gt;&lt;br /&gt;Deben utilizar el siguiente imports:&lt;br /&gt;&lt;br /&gt;using System.Net;&lt;br /&gt;&lt;br /&gt;A continuación el método:&lt;br /&gt;&lt;br /&gt;private void LeerArchivoPdf(string NombreArchivoPDF)&lt;br /&gt;{&lt;br /&gt;    string ruta = NombreArchivoPDF;&lt;br /&gt;    WebClient client = new WebClient();&lt;br /&gt;    Byte[] buffer = client.DownloadData(ruta);&lt;br /&gt;    if (buffer != null)&lt;br /&gt;    {&lt;br /&gt;         Response.ContentType = "application/pdf";&lt;br /&gt;         Response.AddHeader("content-length", buffer.Length.ToString());&lt;br /&gt;         Response.BinaryWrite(buffer);&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.linkedin.com/in/bernachea"&gt;Hugo Bernachea&lt;/a&gt;&lt;br /&gt;MCT - MCSD &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8826112826939747783?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8826112826939747783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8826112826939747783'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/11/como-leer-un-archivo-pdf-desde-un.html' title='Como leer un archivo pdf desde un aplicativo web form / asp.net'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-5335487390431863443</id><published>2009-10-16T12:59:00.000-07:00</published><updated>2009-10-16T13:02:39.230-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='app.config'/><title type='text'>A namespace does not directly contain members such as fields or methods - App.Config</title><content type='html'>Si les aparece el siguiente error en el app.config:&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255); font-weight: bold;"&gt;A namespace does not directly contain members such as fields or methods&lt;/span&gt;&lt;br /&gt;O su equivalente es castellano, y ustedes verifican y se aseguran que su app.config está correctamente configurado, si verifican el contenido del app.config un par de veces y ven que el contenido del app.config es ok, lo mejor que pueden hacer es copiar el contenido del app.config en un archivo de texto, guardar dicho archivo de texto, eliminar el app.config y volver a agregar un app.config en blanco y nuevamente copiar el contenido del app.config anterior. Con eso se suele corregir ese error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-5335487390431863443?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/5335487390431863443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/5335487390431863443'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/10/namespace-does-not-directly-contain.html' title='A namespace does not directly contain members such as fields or methods - App.Config'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4119248567609586796</id><published>2009-10-16T12:17:00.000-07:00</published><updated>2009-10-16T12:20:04.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='isnumeric'/><category scheme='http://www.blogger.com/atom/ns#' term='Función'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Función IsNumeric en C#</title><content type='html'>Csharp (C#) no cuenta con una función isnumeric al estilo Visual Basic, pero se pueden implementar diferentes soluciones para lograr el objetivo, uno es hacer una función como la siguiente:&lt;br /&gt;&lt;br /&gt; public bool IsNumeric(object Expression)&lt;br /&gt;  {&lt;br /&gt;      bool esnumero;&lt;br /&gt;      double returnNumero;&lt;br /&gt;&lt;br /&gt;    esnumero= Double.TryParse(Convert.ToString(Expression),  System.Globalization.NumberStyles.Any,System.Globalization.NumberFormatInfo.InvariantInfo, out returnNumero);&lt;br /&gt;   return esnumero;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;La otra solución es crear una librería (Dll) en visual basic.NET y directamente referenciarla en C#, que yo pienso que es quizás la mejor opción.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4119248567609586796?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4119248567609586796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4119248567609586796'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/10/funcion-isnumeric-en-c.html' title='Función IsNumeric en C#'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-2375475802115117614</id><published>2009-08-01T13:48:00.000-07:00</published><updated>2010-01-07T19:07:44.054-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Table'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.5'/><title type='text'>.NET 3.5 - Usando el Nuevo tipo SqlDbType.Structured para pasar parámetros de tipo Table a Stored Procedures en SQL Server 2008</title><content type='html'>&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;En SQL Server 2008 se ha agregado la posibilidad (largamente esperada) de pasar un parámetro de tipo Table a un Stored Procedure, pueden ver una explicación &lt;a href="http://sqldata.blogspot.com/2009/08/mejoras-en-t-sql-de-sql-server-2008-el.html"&gt;aquí:&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sqldata.blogspot.com/2009/08/mejoras-en-t-sql-de-sql-server-2008-el.html"&gt;http://sqldata.blogspot.com/2009/08/mejoras-en-t-sql-de-sql-server-2008-el.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La pregunta es como hacer desde .NET 3.5 para invocar este tipo de stored procedures, lo cual se resuelve fácilmente con el nuevo sqltype de tipo Structured&lt;br /&gt;&lt;br /&gt;El código que viene a continuación es un ejemplo de lo dicho, como verán todo esto es código conocido, la única novedad es que pasamos directamente un datatable completo al value del parámetro, definido como Structured, veamos el ejemplo:&lt;br /&gt;&lt;br /&gt;      //creo un  data table para almacenar algunos registros de ejemplo&lt;br /&gt;        DataTable dtClientes = new DataTable("Clientes");&lt;br /&gt;        DataColumn dcNombre = new DataColumn("nombre", typeof(string));&lt;br /&gt;        DataColumn dcApellido = new DataColumn("apellido", typeof(string));&lt;br /&gt;        DataColumn dcEmail = new DataColumn("Email", typeof(string));&lt;br /&gt;        dtClientes.Columns.Add(dcNombre);&lt;br /&gt;        dtClientes.Columns.Add(dcApellido);&lt;br /&gt;        dtClientes.Columns.Add(dcEmail);&lt;br /&gt;        //agrego un cliente&lt;br /&gt;        DataRow drCustomer = dtClientes.NewRow();&lt;br /&gt;        drCustomer["nombre"] = "aaa.net";&lt;br /&gt;        drCustomer["apellido"] = "XYZ";&lt;br /&gt;        drCustomer["Email"] = "info@kyriosdata.com.ar";&lt;br /&gt;        dtClientes.Rows.Add(drCustomer);&lt;br /&gt;        //Agrego otro cliente&lt;br /&gt;        drCustomer = dtClientes.NewRow();&lt;br /&gt;        drCustomer["nombre"] = "bbb.net";&lt;br /&gt;        drCustomer["apellido"] = "XYZ";&lt;br /&gt;        drCustomer["Email"] = "info@kyriosdata.com.ar";&lt;br /&gt;        dtClientes.Rows.Add(drCustomer);&lt;br /&gt;        //Y otro cliente mas&lt;br /&gt;        drCustomer = dtClientes.NewRow();&lt;br /&gt;        drCustomer["nombre"] = "ccc.net";&lt;br /&gt;        drCustomer["apellido"] = "XYZ";&lt;br /&gt;        drCustomer["Email"] = "info@kyriosdata.com.ar";&lt;br /&gt;        dtClientes.Rows.Add(drCustomer);&lt;br /&gt;        //Creo la conexion, recuerde modificar el connection string&lt;br /&gt;        // y modifique server e indique SU servidor&lt;br /&gt;        // y modifique en base de datos e indique SU base de datos&lt;br /&gt;        SqlConnection conn = new SqlConnection("server=.;database=Ejemplo;Integrated Security=true");&lt;br /&gt;        conn.Open();&lt;br /&gt;        //Lo tradicional, creamos un comando que invoque al store "Agrega clientes"&lt;br /&gt;        // que está definido y se pueden encontrar en el enlace siguiente:&lt;br /&gt;&lt;a href="http://sqldata.blogspot.com/2009/08/mejoras-en-t-sql-de-sql-server-2008-el.html"&gt;            // http://sqldata.blogspot.com/2009/08/mejoras-en-t-sql-de-sql-server-2008-el.html&lt;/a&gt;&lt;br /&gt;        SqlCommand cmdCustomer = new SqlCommand("AgregaClientes", conn);&lt;br /&gt;        cmdCustomer.CommandType = CommandType.StoredProcedure;&lt;br /&gt;        //Aquí en realidad se encuentra lo único distinto con respecto&lt;br /&gt;        // a la lógica que veníamos usando en .NET&lt;br /&gt;        // y es crear el parámetro pero usando el nuevo sqldbtype Structured&lt;br /&gt;       // el cual puede recibir un datatable completo&lt;br /&gt;       // el s.p. matchea con un parámetro de tipo table, ver el link&lt;br /&gt;        SqlParameter paramCustomer = cmdCustomer.Parameters.Add("@ClientesTVP", SqlDbType.Structured);&lt;br /&gt;        paramCustomer.Value = dtClientes;&lt;br /&gt;        //Ejecutamos&lt;br /&gt;        cmdCustomer.ExecuteNonQuery();&lt;br /&gt;&lt;br /&gt;Y si revisamos la tabla Clientes debiéramos encontrar los nuevos registros agregados a la tabla cliente.&lt;br /&gt;&lt;br /&gt;Nuevamente y por si a alguien se le escapó el detalle, la información acerca de este nuevo tipo de parámetros como asimismo la definición del Stored Procedure se encuentra en el siguiente enlace:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlexperto.com.ar/index.php?topic=20.msg21#new"&gt;&lt;/a&gt;&lt;a href="http://www.sqlexperto.com.ar/index.php?topic=20.msg21#new"&gt;http://www.sqlexperto.com.ar/index.php?topic=20.msg21#new&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-2375475802115117614?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/2375475802115117614/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=2375475802115117614&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2375475802115117614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2375475802115117614'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/08/usando-el-nuevo-tipo.html' title='.NET 3.5 - Usando el Nuevo tipo SqlDbType.Structured para pasar parámetros de tipo Table a Stored Procedures en SQL Server 2008'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4030007979013890717</id><published>2009-07-21T12:30:00.000-07:00</published><updated>2009-07-21T12:44:27.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='delegates'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='diferencias'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><category scheme='http://www.blogger.com/atom/ns#' term='delegados'/><title type='text'>Diferencias entre Eventos y Delegados - En qué son distintos?</title><content type='html'>&lt;p&gt;Eventos versus Delegados (Events vs Delegates)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Es la típica pregunta acerca de la diferencia entre eventos y delegados, considerando que uno siempre podría imitar la funcionalidad de un evento utilizando un delegado. Esto considerando que un evento siempre está relacionado a un delegado.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Un evento es parecido a un multicast delegate en algún sentido.&lt;br /&gt;&lt;br /&gt;Veamos el siguiente ejemplo donde tenemos  &lt;i&gt;msgNotifier&lt;/i&gt; (evento) y  &lt;i&gt;msgNotifier2&lt;/i&gt; (delegado simple) que aparentan comportarse exactamente igual en todo sentido.&lt;br /&gt;&lt;br /&gt; &lt;div class="code"&gt;using System;  &lt;p&gt;namespace EventAndDelegate&lt;br /&gt;{&lt;br /&gt;  delegate void MsgHandler(string s);&lt;br /&gt; &lt;br /&gt;  class Class1&lt;br /&gt;  {&lt;br /&gt;    public static event MsgHandler msgNotifier;&lt;br /&gt;    public static MsgHandler msgNotifier2;&lt;br /&gt;    [STAThread]&lt;br /&gt;    static void Main(string[] args)&lt;br /&gt;    {&lt;br /&gt;      Class1.msgNotifier += new MsgHandler(PipeNull);&lt;br /&gt;      Class1.msgNotifier2 += new MsgHandler(PipeNull);&lt;br /&gt;      Class1.msgNotifier("test");&lt;br /&gt;      Class1.msgNotifier2("test2");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    static void PipeNull(string s)&lt;br /&gt;    {&lt;br /&gt;      return;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;&lt;br /&gt;Si vemos el código IL para el método Main vemos que ambos &lt;i&gt;msgNotifier&lt;/i&gt; y &lt;i&gt;msgNotifier2&lt;/i&gt; son usados de la misma manera.&lt;br /&gt;&lt;/p&gt;&lt;div class="code"&gt;.method private hidebysig static void  Main(string[] args) cil managed&lt;br /&gt;{&lt;br /&gt;   .entrypoint&lt;br /&gt;   .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )&lt;br /&gt;   // Code size       95 (0x5f)&lt;br /&gt;   .maxstack  4&lt;br /&gt;   IL_0000:  ldsfld     class EventAndDelegate.MsgHandler  EventAndDelegate.Class1::msgNotifier&lt;br /&gt;   IL_0005:  ldnull&lt;br /&gt;   IL_0006:  ldftn      void EventAndDelegate.Class1::PipeNull(string)&lt;br /&gt;   IL_000c:  newobj     instance void EventAndDelegate.MsgHandler::.ctor(object,&lt;br /&gt;                                                                            native int)&lt;br /&gt;   IL_0011:  call       class [mscorlib]System.Delegate [mscorlib]System.Delegate::Combine(class [mscorlib]System.Delegate,&lt;br /&gt;                                                                                              class [mscorlib]System.Delegate)&lt;br /&gt;   IL_0016:  castclass  EventAndDelegate.MsgHandler&lt;br /&gt;   IL_001b:  stsfld     class EventAndDelegate.MsgHandler EventAndDelegate.Class1::msgNotifier&lt;br /&gt;   IL_0020:  ldsfld     class EventAndDelegate.MsgHandler EventAndDelegate.Class1::msgNotifier2&lt;br /&gt;   IL_0025:  ldnull&lt;br /&gt;   IL_0026:  ldftn      void EventAndDelegate.Class1::PipeNull(string)&lt;br /&gt;   IL_002c:  newobj     instance void EventAndDelegate.MsgHandler::.ctor(object,&lt;br /&gt;                                                                            native int)&lt;br /&gt;   IL_0031:  call       class [mscorlib]System.Delegate [mscorlib]System.Delegate::Combine(class [mscorlib]System.Delegate,&lt;br /&gt;                                                                                              class [mscorlib]System.Delegate)&lt;br /&gt;   IL_0036:  castclass  EventAndDelegate.MsgHandler&lt;br /&gt;   IL_003b:  stsfld     class EventAndDelegate.MsgHandler EventAndDelegate.Class1::msgNotifier2&lt;br /&gt;   IL_0040:  ldsfld     class EventAndDelegate.MsgHandler EventAndDelegate.Class1::msgNotifier&lt;br /&gt;   IL_0045:  ldstr      "test"&lt;br /&gt;   IL_004a:  callvirt   instance void EventAndDelegate.MsgHandler::Invoke(string)&lt;br /&gt;   IL_004f:  ldsfld     class EventAndDelegate.MsgHandler EventAndDelegate.Class1::msgNotifier2&lt;br /&gt;   IL_0054:  ldstr      "test2"&lt;br /&gt;   IL_0059:  callvirt   instance void EventAndDelegate.MsgHandler::Invoke(string)&lt;br /&gt;   IL_005e:  ret&lt;br /&gt;} // end of method Class1::Main&lt;br /&gt;&lt;/div&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Si vemos en el MSDN&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfeventpg.asp"&gt;keywords list&lt;/a&gt; vemos que los &lt;i&gt;event&lt;/i&gt; son solo modificadores (modifier).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La pregunta es que cosa exactamente modifican?&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Valor agregado de un &lt;i&gt;evento&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;u&gt;Eventos e interfaces&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Un evento puede ser incluido en la declaración de una interface mientras que un campo no.&lt;br /&gt;&lt;/p&gt;interface ITest&lt;br /&gt;&lt;div class="code"&gt; {&lt;br /&gt;     event MsgHandler msgNotifier; &lt;i&gt;// compila&lt;/i&gt;&lt;br /&gt;     MsgHandler msgNotifier2; &lt;i&gt;// error &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cscomp/html/vcerrCompilerErrorSC0525.asp"&gt;CS0525&lt;/a&gt;: Interfaces cannot contain fields&lt;/i&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class TestClass : ITest&lt;br /&gt;{&lt;br /&gt;     public event MsgHandler msgNotifier; &lt;i&gt;// cuando se implementa una interface se debe implementar el evento también.&lt;/i&gt;&lt;br /&gt;     static void Main(string[] args) {}&lt;br /&gt;}&lt;/div&gt;  &lt;p&gt;&lt;br /&gt;&lt;u&gt;Invocation de un evento&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Un evento solo puede ser invocado en la clase en la que se declaró, mientras que un delegado puede ser invocado desde cualquier parte.&lt;/p&gt;&lt;p&gt;Ejemplo:&lt;/p&gt;  &lt;div class="code"&gt;using System;  &lt;p&gt;namespace EventAndDelegate&lt;br /&gt;{&lt;br /&gt;  delegate void MsgHandler(string s);&lt;br /&gt; &lt;br /&gt;  class Class1&lt;br /&gt;  {&lt;br /&gt;    public static event MsgHandler msgNotifier;&lt;br /&gt;    public static MsgHandler msgNotifier2;&lt;/p&gt;  &lt;p&gt;    static void Main(string[] args)&lt;br /&gt;    {&lt;br /&gt;      new Class2().test();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  class Class2&lt;br /&gt;  {&lt;br /&gt;    public void test()&lt;br /&gt;    {&lt;br /&gt;      Class1.msgNotifier("test"); &lt;i&gt;// error &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cscomp/html/vcerrCompilerErrorSC0070.asp"&gt;CS0070&lt;/a&gt;: The event 'EventAndDelegate.Class1.msgNotifier' can only appear on the left hand side of += or -= (except when used from within the type 'EventAndDelegate.Class1')&lt;/i&gt;&lt;br /&gt;      Class1.msgNotifier2("test2"); &lt;i&gt;// compiles fine&lt;/i&gt;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;Esta restricción es muy fuerte y aún las clases derivadas no pueden invocar dicho evento (salvo un método protected virtual que lo dispare).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Accesores de Eventos&lt;/u&gt;&lt;br /&gt;Eventos disponen de métodos &lt;i&gt;add&lt;/i&gt; y  &lt;i&gt;remove&lt;/i&gt;.&lt;br /&gt;Esto es similar al get y set de las properties.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Firma del evento&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt; el .NET framework agrega una restriction en la firma de los delegados que pueden ser usados como eventos. La firma tienen que ser en este estilo &lt;i&gt;foo(object source, EventArgs e)&lt;/i&gt;, donde &lt;i&gt;source&lt;/i&gt; es el objeto que dispara el evento y e contiene información específica a este evento.&lt;/p&gt;  &lt;p&gt;Estas serían a  mi entender algunas diferencias entre eventos (events) y delegates (delegados)&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4030007979013890717?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.monstuff.com/archives/000040.html' title='Diferencias entre Eventos y Delegados - En qué son distintos?'/><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/4030007979013890717/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=4030007979013890717&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4030007979013890717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4030007979013890717'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/07/diferencias-entre-eventos-y-delegados.html' title='Diferencias entre Eventos y Delegados - En qué son distintos?'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-6800695408035038215</id><published>2009-06-21T15:06:00.000-07:00</published><updated>2009-06-21T15:30:28.752-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RowUpdating'/><category scheme='http://www.blogger.com/atom/ns#' term='Hugo Bernachea'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='TableAdapter'/><category scheme='http://www.blogger.com/atom/ns#' term='Bernachea'/><category scheme='http://www.blogger.com/atom/ns#' term='RowUpdated'/><title type='text'>Como exponer los eventos RowUpdated y RowUpdating en un TableAdapter?</title><content type='html'>Bueno, después de dar un par de vueltas e investigar un poco, acá les dejo la solución a como exponer los eventos RowUpdated y RowUpdating de un TableAdapter de los generados con diseñador de Dataset fuertemente Tipados.&lt;br /&gt;&lt;br /&gt;Tanto en C# 2005 como en C# 2008 tienen que ir al Dataset tipado (xsd).&lt;br /&gt;Identifican al TableAdapter (NO el datatable) que van a modificar y clickean con boton izquierdo.&lt;br /&gt;Van a la ventana de propiedades para el tableadapter y ponen la propidad ConnectionModifier en PUBLIC.&lt;br /&gt;&lt;br /&gt;Después clickean con el botón derecho en el mismo TableAdapter y van a la opción Ver Código (View Code) y en la ventana de código agregan la clase parcial necesaria para incorporar el código que expone el dataadapter interno.&lt;br /&gt;&lt;br /&gt;El código a continuación es un ejemplo de como debiera queda la clase&lt;br /&gt;&lt;br /&gt;namespace WinCon.DataSet1TableAdapters //obviamente acá va el namespace de ustedes&lt;br /&gt;{&lt;br /&gt;        using System.Data;&lt;br /&gt;           using System.Data.SqlClient; //acá va el provider de la base que ustedes están usando&lt;br /&gt;                                                                                                                                               // en caso que no sea SQL Server&lt;br /&gt;&lt;br /&gt;                public partial class EjemploTableAdapter //de nuevo, el nombre exacto de su tableadapter&lt;br /&gt;               {&lt;br /&gt;                            public System.Data.SqlClient.SqlDataAdapter Adapter2 //el nombre que se les ocurra&lt;br /&gt;                           {&lt;br /&gt;                                        get&lt;br /&gt;                                        {&lt;br /&gt;                                                    this.Adapter.SelectCommand = this.CommandCollection[0];&lt;br /&gt;                                                    return this.Adapter;&lt;br /&gt;                                       }&lt;br /&gt;                           }&lt;br /&gt;               }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Hasta acá la modificación, si lo estuvieran invocando por ejemplo desde un windows forms, podrían ejecutar lo siguiente (&lt;span style="font-style: italic;"&gt;ojo que ahora el código que viene a continuación está adentro de un windows forms que utiliza al tableadapter&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;DataSet1TableAdapters.EjemploTableAdapter da = new WinCon.DataSet1TableAdapters.EjemploTableAdapter();&lt;br /&gt;       DataSet1 ds = new DataSet1();&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;       public Form1()&lt;br /&gt;               {&lt;br /&gt;                           //atacho los eventos y digo que lo gestionan&lt;br /&gt;                           // los métodos metodo y metodo2 respectivamente.&lt;br /&gt;                            da.Adapter2.RowUpdating += metodo; //fijensé que uso la propiedad Adapter2&lt;br /&gt;                                                                                                // que creé  adentro del TableAdapter.&lt;br /&gt;                            da.Adapter2.RowUpdated += metodo2;&lt;br /&gt;                           InitializeComponent();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que a alguien le sea de utilidad.&lt;br /&gt;&lt;br /&gt;Hugo Bernachea&lt;a href="http://www.linkedin.com/in/bernachea"&gt;&lt;br /&gt;http://www.linkedin.com/in/bernachea&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-6800695408035038215?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/6800695408035038215/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=6800695408035038215&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6800695408035038215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6800695408035038215'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/06/como-exponer-los-eventos-rowupdated-y.html' title='Como exponer los eventos RowUpdated y RowUpdating en un TableAdapter?'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-7483493178436826172</id><published>2009-06-19T16:09:00.000-07:00</published><updated>2009-06-19T17:13:26.425-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Data Provider'/><category scheme='http://www.blogger.com/atom/ns#' term='DDex'/><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Firebird con Visual Studio 2005</title><content type='html'>********* Consejo Dado "AS IS" "ASI COMO ESTA", sin garantias y bajo la total y absoluta responsabilidad de quien lo aplica, como todos los consejos, tipos y sugerencias dados en este sitio *********&lt;br /&gt;&lt;br /&gt;Firebird como base de datos "free" no es tan conocida como otras bases de datos mas populares como MySQL y PostgreSQL, pero lo cierto es que Firebird tiene una serie de características que la hacen muy interesante a la hora de realizar desarrollos de programas "empaquetados".&lt;br /&gt;Una de las características es que esta base puede ser embebida en el producto final, con lo cual no se le instala un servidor al cliente. Además Firebird tiene Stored Procedures, Triggers, Funciones y todas las características que presentan las bases de datos comerciales y que MySQL recién está empezando a adoptar desde su ultima versión. Obviamente Firebird es muy superior a SQL Lite e incluso es superior a las versiones express de SQL Server y su licencia comercial permite utilizarlo incluso en programas comerciales sin restricciones.&lt;br /&gt;&lt;br /&gt;La idea de utilizarlo con .NET viene pronto a las manos y por lo tanto voy a describir como hacerlo funcionar en Visual Studio 2005.&lt;br /&gt;&lt;br /&gt;Pasos a seguir:&lt;br /&gt;1. Ir a la página de Firebird y descargar el provider para .NET 2.&lt;br /&gt;2. Descargue el Visual Studio 2005 SDK (NO el SDK del framework please) desde el sitio de descargas de Microsoft. Recuerden que el SDK del Visual Studio NO es parte de la instalación, es una descarga adicional.&lt;br /&gt;3. Verifique y en caso de no estar previamente agragado, agregue el provider de firebird para .net 2 (el archivito FirebirdSQL.Data.FirebirdClient.dll) a la Global Assembly Cache (GAC) con gacutil.exe -i FirebirdSQL.Data.FirebirdClient.dll.&lt;br /&gt;4. Ejecute  gacutil.exe /l FirebirdSql.Data.FirebirdClient y fíjese los números que indica esta ejecución, particularmente el número de version, el publickeytoken y cultura.&lt;br /&gt;5. Ubique el machine.config y fíjese en los siguientes tags:&lt;br /&gt;Desdpués de configuration -&gt;configSections agregue lo siguiente (todo seguido)&lt;br /&gt;&lt;br /&gt;add &amp;lt;section name="firebirdsql.data.firebirdclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=SU_NUMERO_DE_VERSION, Culture=neutral, PublicKeyToken=EL_PublicKeyToken_DE_SU_DLL_EN_SU_GAC"&gt;&lt;br /&gt;&lt;br /&gt;6. En &amp;lt;system.data&gt; -&gt; &amp;lt;dbproviderfactories&gt; agregar&lt;br /&gt; &amp;lt;add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".Net Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=ACA_VA_SU_NUMERO_DE_VERSION, Culture=neutral, PublicKeyToken=DE_NUEVO_ACA_VA_SU_PUBLIC_KEY_TOKEN"&gt;&lt;br /&gt;&lt;br /&gt;7. Abra el archivo FirebirdDDEXProvider.reg y reemplace la variable %Path% con la ruta exacta donde se encuentra la dll del provider, por ejemplo C:\Program Files\FirebirdClient, recuerde de agregar doble barra, por ejemplo C:\\Program Files\\FirebirdClient. Guarde el archivo .reg y con un doble click agregue esa información en el registro.&lt;br /&gt;&lt;br /&gt;Si hizo todo de la manera correcta ya tiene disponible la opción para abrir el VS 2005 y usar firebird como cualquier otra base de datos, incluso agregando la conexion en el server explorer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-7483493178436826172?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/7483493178436826172/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=7483493178436826172&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7483493178436826172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7483493178436826172'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/06/ddex-firebird-y-net.html' title='Firebird con Visual Studio 2005'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8410769842794510404</id><published>2009-01-05T15:59:00.000-08:00</published><updated>2009-01-05T16:24:28.178-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bernachea'/><category scheme='http://www.blogger.com/atom/ns#' term='SQLData'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeDom'/><title type='text'>Haciendo Generadores de Codigo con CodeDom</title><content type='html'>A los que están interesados en realizar sus propios generadores de código en .NET (C# o VB.NET), les dejo un ejemplo para utilizar Codedom (los imports mínimos son: System.CodeDom y System.CodeDom.Compiler )&lt;br /&gt;Lo bueno de CodeDom es que permite generar código de manera genérica pero de implementación concreta, esto es, podemos hacer generadores de código para cualquier de los lenguajes de .NET (c++, C#, Vb.NEt, etc).&lt;br /&gt;&lt;br /&gt;Aquí vá el ejemplo que pueden utilizar y probar, este código genera un string con el código de una clase en C# y en VB, con una propiedad llamada ID y un constructor predeterminado. Ideal para comenzar a probar y experimentar.&lt;br /&gt;&lt;br /&gt;Dim ns As CodeNamespace 'definiendo un namespace para nuestra clase&lt;br /&gt;&lt;br /&gt;   Private Sub GeneraClase&lt;br /&gt;       'defino un namespace base&lt;br /&gt;       ns = New CodeNamespace("PrimerCodeDom")&lt;br /&gt;&lt;br /&gt;       'agrego los imports correspondientes&lt;br /&gt;       'aca pueden agregar todos los imports necesarios&lt;br /&gt;       ns.Imports.Add(New CodeNamespaceImport _&lt;br /&gt;        ("System"))&lt;br /&gt;       ns.Imports.Add(New CodeNamespaceImport _&lt;br /&gt;          ("System.Diagnostics"))&lt;br /&gt;       ns.Imports.Add(New CodeNamespaceImport _&lt;br /&gt;          ("System.Text"))&lt;br /&gt;&lt;br /&gt;       'creo la clase en si misma&lt;br /&gt;       Dim clase As New CodeTypeDeclaration("Clase_Clientes")&lt;br /&gt;       'agrego la clase a la colección de tipos&lt;br /&gt;       ns.Types.Add(clase)&lt;br /&gt;&lt;br /&gt;       'defino un campo privado&lt;br /&gt;&lt;br /&gt;       Dim campo As New CodeMemberField("integer", "_ID")&lt;br /&gt;       campo.Attributes = MemberAttributes.Private&lt;br /&gt;&lt;br /&gt;       'agrego el miembro privado a la clase&lt;br /&gt;&lt;br /&gt;       clase.Members.Add(campo)&lt;br /&gt;&lt;br /&gt;       'defino un campo público&lt;br /&gt;&lt;br /&gt;       Dim p As New CodeMemberProperty()&lt;br /&gt;&lt;br /&gt;       ' le doy un nombre a la propiedad&lt;br /&gt;       ' ID en este caso&lt;br /&gt;       p.Name = "ID"&lt;br /&gt;&lt;br /&gt;       ' lo hago público&lt;br /&gt;       p.Attributes = MemberAttributes.Public&lt;br /&gt;       p.Type = New CodeTypeReference("System.Int32") 'es integer&lt;br /&gt;       p.HasGet = True&lt;br /&gt;       p.HasSet = True 'si fuese false, sería solo lectura&lt;br /&gt;&lt;br /&gt;       'esto que viene es obligatorio&lt;br /&gt;'tengo que decirle que cosa devuelve el get de la propiedad&lt;br /&gt;       p.GetStatements.Add( _&lt;br /&gt;               New CodeMethodReturnStatement( _&lt;br /&gt;               New CodeFieldReferenceExpression( _&lt;br /&gt;               New CodeThisReferenceExpression(), "_ID")))&lt;br /&gt;      'esto también es obligatorio&lt;br /&gt;'tengo que decirle como se asigna el valor del set&lt;br /&gt;           p.SetStatements.Add(New CodeDom.CodeAssignStatement( _&lt;br /&gt;              New CodeFieldReferenceExpression( _&lt;br /&gt;              New  CodeDom.CodeThisReferenceExpression, "_ID"),  _&lt;br /&gt;              New CodeDom.CodePropertySetValueReferenceExpression))&lt;br /&gt;&lt;br /&gt;       'agrego la propiedad a la clase&lt;br /&gt;       clase.Members.Add(p)&lt;br /&gt;&lt;br /&gt;       'defino un constructor público&lt;br /&gt;&lt;br /&gt;       Dim constructor As New CodeConstructor()&lt;br /&gt;       constructor.Attributes = MemberAttributes.Public&lt;br /&gt;       clase.Members.Add(constructor)&lt;br /&gt;&lt;br /&gt;        'defino los providers para los lenguajes en los que voy a generar mi clase&lt;br /&gt;       Dim csProvider As New Microsoft.CSharp.CSharpCodeProvider&lt;br /&gt;       Dim vbprovider As New VBCodeProvider&lt;br /&gt;&lt;br /&gt;       'en .net 3.5 este código tira un warning por obsoleto,&lt;br /&gt;'pero igual funciona perfecto.&lt;br /&gt;       Dim codigo As ICodeGenerator&lt;br /&gt;&lt;br /&gt;       codigo = vbprovider.CreateGenerator()&lt;br /&gt;       Dim vbCod As String = generaCode(codigo)&lt;br /&gt;&lt;br /&gt;       codigo = csProvider.CreateGenerator&lt;br /&gt;      dim csCod as String  = generaCode(codigo)&lt;br /&gt;&lt;br /&gt;      'en este punto, en las variables vbCod y csCod&lt;br /&gt;'tienen el código de la clase correctamente generada.&lt;br /&gt;&lt;br /&gt;   End Sub&lt;br /&gt;&lt;br /&gt;  'metodo complementario&lt;br /&gt; Private Function generaCode(ByVal CodeGenerator As ICodeGenerator) As String&lt;br /&gt;&lt;br /&gt;       Dim options As New CodeGeneratorOptions()&lt;br /&gt;&lt;br /&gt;       ' defino la identación del código&lt;br /&gt;       options.IndentString = Space(3)&lt;br /&gt;&lt;br /&gt;       ' creo un StringWriter&lt;br /&gt;       Dim sb As New StringBuilder()&lt;br /&gt;       Dim sw As StringWriter = New StringWriter(sb)&lt;br /&gt;&lt;br /&gt;       ' genero&lt;br /&gt;       CodeGenerator.GenerateCodeFromNamespace(ns, sw, options)&lt;br /&gt;&lt;br /&gt;       ' devuelvo el string con el código generado&lt;br /&gt;       Return sb.ToString()&lt;br /&gt;   End Function&lt;br /&gt;&lt;br /&gt;Una utilidad interesante podría ser utilizar este código para generar un mapeador de clases contra tablas de una base de datos, para lo cual debemos recorrer las tablas de una base de datos, ver código SQL aquí: &lt;a href="http://sqldata.blogspot.com/2009/01/como-obtener-todas-las-tablas-de-una.html"&gt;http://sqldata.blogspot.com/2009/01/como-obtener-todas-las-tablas-de-una.html&lt;/a&gt; y por cada tabla recorrer los campos con el Script SQL listado aquí: &lt;a href="http://sqldata.blogspot.com/2009/01/como-obtener-todos-los-campos-de-una.html"&gt;http://sqldata.blogspot.com/2009/01/como-obtener-todos-los-campos-de-una.html&lt;/a&gt;  y aplicar el codigo codedom correspondiente para generar un mapeador de clases contra tablas.&lt;br /&gt;O sea, por cada tabla generar la clase en codedom y por cada campo generar dentro de la clase correspondiente las propiedades que necesitemos.&lt;br /&gt;&lt;br /&gt;Con eso tienen lo necesario para generarse un mapeador de clases si se ponen manos a la obra.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.linkedin.com/in/bernachea"&gt;&lt;br /&gt;Hugo Bernachea&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8410769842794510404?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/8410769842794510404/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=8410769842794510404&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8410769842794510404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8410769842794510404'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2009/01/haciendo-generadores-de-codigo-con.html' title='Haciendo Generadores de Codigo con CodeDom'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4811116381688755724</id><published>2008-12-26T05:35:00.000-08:00</published><updated>2008-12-26T05:38:18.749-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Bases de Ejemplo'/><title type='text'>Donde están las bases de ejemplo de SQL Server 2008??</title><content type='html'>Si instalaron SQL Server 2008 y notaron que no se instaló ninguna base de datos de ejemplos, a no desesperar, las mismas se encuentran en el sitio opensource de Microsoft, codeplex, mas exactamente en:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeplex.com/MSFTDBProdSamples/Wiki/View.aspx?title=Installing%20Databases&amp;amp;referringTitle=Home"&gt;http://www.codeplex.com/MSFTDBProdSamples/Wiki/View.aspx?title=Installing%20Databases&amp;amp;referringTitle=Home&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4811116381688755724?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.codeplex.com/MSFTDBProdSamples/Wiki/View.aspx?title=Installing%20Databases&amp;referringTitle=Home' title='Donde están las bases de ejemplo de SQL Server 2008??'/><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/4811116381688755724/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=4811116381688755724&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4811116381688755724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4811116381688755724'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/12/donde-estn-las-bases-de-ejemplo-de-sql.html' title='Donde están las bases de ejemplo de SQL Server 2008??'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-1103364461040051949</id><published>2008-12-23T04:45:00.000-08:00</published><updated>2008-12-23T12:00:26.143-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Utilidades'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeSmith'/><category scheme='http://www.blogger.com/atom/ns#' term='Refactor'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Tools'/><title type='text'>Utilidades Imprescindibles para .NET</title><content type='html'>Aquí publico un listado de utilidades, frameworks y otros programas que yo considero imprescindibles para los desarrolladores .NET y espero que ustedes puedan agregar las que crean que faltan en el listado:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) .NET Reflector:&lt;/span&gt; &lt;a href="http://www.red-gate.com/products/reflector/"&gt;http://www.red-gate.com/products/reflector/&lt;/a&gt;&lt;br /&gt;Un clásico. Permite descompilar y analizar ensamblados .NET, analizar las clases constituyentes, ver sus métodos, MSIL.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qjUj6Bhew2E/SVDe000BpCI/AAAAAAAAAXg/7FTbWa1e-E4/s1600-h/Reflector.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 319px; height: 382px;" src="http://3.bp.blogspot.com/_qjUj6Bhew2E/SVDe000BpCI/AAAAAAAAAXg/7FTbWa1e-E4/s400/Reflector.gif" alt="" id="BLOGGER_PHOTO_ID_5282967362017010722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;2) &lt;span style="font-weight: bold;"&gt;Autocode&lt;/span&gt;: &lt;a href="http://www.devprojects.net/"&gt;http://www.devprojects.net/&lt;/a&gt;&lt;br /&gt;Gratuito.&lt;br /&gt;Es un add-in para Visual Studio .NET que automatiza tareas repetitivas y permite generar código, refactorizar, ejecutar acciones del IDE o cualquier otro comando. Altamente recomendable, una herramienta imprescindible para .NET.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qjUj6Bhew2E/SVDgk7-gSWI/AAAAAAAAAXo/PKF2FSf0lOc/s1600-h/AutoCodeDemo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 252px; height: 304px;" src="http://2.bp.blogspot.com/_qjUj6Bhew2E/SVDgk7-gSWI/AAAAAAAAAXo/PKF2FSf0lOc/s400/AutoCodeDemo.gif" alt="" id="BLOGGER_PHOTO_ID_5282969288085358946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3) &lt;span style="font-weight: bold;"&gt;CodeSmith&lt;/span&gt;:&lt;a href="http://www.codesmithtools.com/"&gt; http://www.codesmithtools.com/&lt;br /&gt;&lt;/a&gt;Otro clásico, templates (plantillas) para generar código en distintos lenguajes y con distintos objetivos. ( C#, Java, VB, PHP, ASP.NET, SQL, etc.).&lt;br /&gt;No es gratis, pero es muy util.&lt;br /&gt;&lt;br /&gt;4) &lt;b&gt;.NET Memory Profiler:&lt;/b&gt;&lt;span style="font-weight: bold;"&gt;  &lt;a href="http://memprofiler.com/"&gt;  &lt;/a&gt;&lt;/span&gt;&lt;a href="http://memprofiler.com/"&gt;http://memprofiler.com/&lt;/a&gt;&lt;br /&gt;Tampoco es gratis, pero permite determinar y optimizar el uso de la memoria en programas realizados en .NET.&lt;br /&gt;&lt;br /&gt;5) &lt;span style="font-weight: bold;"&gt;QuickCode.NET&lt;/span&gt;:  &lt;a href="http://www.mobzystems.com/"&gt;http://www.mobzystems.com/&lt;/a&gt;&lt;br /&gt;Además de QuickCode, Gratuito, la página tiene un montón de utilidades mas, muy interesantes la mayoría de ellas, recomiendo mirar la página.&lt;br /&gt;&lt;br /&gt;6) &lt;span id="_ctl0_headerPlaceHolder_HeaderControl1_pageNameLabel" class="title"&gt;&lt;span style="font-weight: bold;"&gt;Snippet Compiler&lt;/span&gt;: &lt;/span&gt;&lt;a href="http://www.sliver.com/dotnet/SnippetCompiler/"&gt;http://www.sliver.com/dotnet/SnippetCompiler/&lt;/a&gt;&lt;br /&gt;Gratuito.&lt;br /&gt;&lt;br /&gt;7) &lt;span style="font-weight: bold;"&gt;FxCop&lt;/span&gt;: &lt;a href="http://blogs.msdn.com/fxcop/archive/2008/08/19/fxcop-1-36-released.aspx"&gt;http://blogs.msdn.com/fxcop/archive/2008/08/19/fxcop-1-36-released.aspx&lt;/a&gt;&lt;br /&gt;Gratuito. Otro imprescindible y clásico.&lt;br /&gt;FXCop es una herramienta de análisis de código para &lt;a href="http://es.wikipedia.org/wiki/.NET" title=".NET" class="mw-redirect"&gt;.NET&lt;/a&gt; desarrollada por &lt;a href="http://www.gotdotnet.com/" class="external text" title="http://www.gotdotnet.com" rel="nofollow"&gt;GotDotNet&lt;/a&gt;. Lee ensamblados (dll o exe) directamente para hacer el análisis.&lt;br /&gt;En la actualidad está migrándose a la &lt;a href="http://es.wikipedia.org/wiki/MSDN" title="MSDN"&gt;MSDN&lt;/a&gt; y se está integrando con la versión 2008 del &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Visual_Studio_.Net" title="Microsoft Visual Studio .Net" class="mw-redirect"&gt;Microsoft Visual Studio .Net&lt;/a&gt; (ORCAS), pero se puede usar desde cualquier versión de Visual Studio.&lt;br /&gt;&lt;br /&gt;8) &lt;span style="font-weight: bold;"&gt;NUnit&lt;/span&gt;: &lt;a href="http://www.nunit.org/index.php"&gt;http://www.nunit.org/index.php&lt;br /&gt;&lt;/a&gt;Gratuito. La implementación .NET del Framework de testing de java unit, imprescindible en la arquitectura TDD.&lt;br /&gt;&lt;br /&gt;9) &lt;span style="font-weight: bold;"&gt;NDoc&lt;/span&gt;: &lt;a href="http://ndoc.sourceforge.net/"&gt;http://ndoc.sourceforge.net/&lt;/a&gt;&lt;br /&gt;Gratuito. Genera documentación para los ensamblados .NET.&lt;br /&gt;&lt;br /&gt;10) &lt;span style="font-weight: bold;"&gt;NAnt&lt;/span&gt;: &lt;a href="http://nant.sourceforge.net/"&gt;http://nant.sourceforge.net/&lt;/a&gt;&lt;br /&gt;Gratuito. Portado del Ant de Java, permite automatizar los procesos de compilación y Builds de los aplicativos.&lt;br /&gt;&lt;br /&gt;11) &lt;span style="font-weight: bold;"&gt;PInvoke.NET add-in&lt;/span&gt;: &lt;a href="http://www.pinvoke.net/"&gt;http://www.pinvoke.net/&lt;/a&gt;&lt;br /&gt;Permite encontrar y determinar las llamadas a win32 y apis desde código manejado (.Net).&lt;br /&gt;&lt;br /&gt;12) &lt;span style="font-weight: bold;"&gt;Regulator&lt;/span&gt;:&lt;a href="http://sourceforge.net/projects/regulator/"&gt; http://sourceforge.net/projects/regulator/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://regulator.sourceforge.net/"&gt;http://regulator.sourceforge.net                         &lt;/a&gt;&lt;br /&gt;Herramienta de testeo de expresiones regulares, muy bueno.&lt;br /&gt;&lt;br /&gt;13) &lt;span style="font-weight: bold;"&gt;Asp.NET Version Switcher&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://www.denisbauer.com/NETTools/ASPNETVersionSwitcher.aspx"&gt;http://www.denisbauer.com/NETTools/ASPNETVersionSwitcher.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;14) &lt;span style="font-weight: bold;"&gt;Resharper&lt;/span&gt;: &lt;a href="http://www.jetbrains.com/resharper/"&gt;http://www.jetbrains.com/resharper/&lt;br /&gt;&lt;/a&gt;No solo refactoriza código, es una herramienta multipropósito.&lt;br /&gt;&lt;br /&gt;15) &lt;span style="font-weight: bold;"&gt;NHibernate&lt;/span&gt;: &lt;a href="http://www.hibernate.org/343.html"&gt;http://www.hibernate.org/343.html&lt;/a&gt;&lt;br /&gt;Framework de persistencia de datos, heredado del Hibernate de Java, con soporte para múltiples bases de datos. Ya se que existe Linq, pero todavía está verde, en cambio Hibernate ya viene con un camino recorrido y además es una tecnología abierta multiplataforma, multi-base de datos. Además parece que Linq to SQL está moribundo, de modo que yo me sigo quedando con Hibernate, además como también programo algunas cosas en Java, con Hibernate puedo programar exactamente lo mismo en un lenguaje (C#) que en otro (Java).&lt;br /&gt;&lt;br /&gt;Hasta aquí la lista, espero que puedan agregar las herramientas que crean conveniente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hugo Bernachea&lt;br /&gt;http://www.linkedin.com/in/bernachea&lt;br /&gt;MCSD / MCDBA / MCT&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-1103364461040051949?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/1103364461040051949/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=1103364461040051949&amp;isPopup=true' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1103364461040051949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1103364461040051949'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/12/utilidades-imprescindibles-para-net.html' title='Utilidades Imprescindibles para .NET'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qjUj6Bhew2E/SVDe000BpCI/AAAAAAAAAXg/7FTbWa1e-E4/s72-c/Reflector.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4988050717739572313</id><published>2008-10-26T15:46:00.000-07:00</published><updated>2008-10-26T15:56:41.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Nothing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='DBNull.Value'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic.NET'/><title type='text'>Nothing y DBNull.Value en Visual Basic.NET</title><content type='html'>&lt;span style="font-family: arial;"&gt;&lt;span style="font-weight: bold;"&gt;Que diferencia hay entre Nothing y DBNull.value???&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mucha gente está bastante confundida acerca de este tema y no son pocos ciertamente los que lo están. Vamos a tratar de esclarecer en forma rápida y concreta este tema.&lt;br /&gt;&lt;br /&gt;La palabra clave Nothing sirve para especificar o asignar que un variable de tipo referencia no está apuntando a nada, no está instanciado objeto alguno para dicha variable.&lt;br /&gt;&lt;br /&gt;DBNull.Value en cambio es un objeto que se usa para indicar que un tipo (type) de un campo de base de datos es de valor nulo (Null).&lt;br /&gt;&lt;br /&gt;Yo creo que esta común confusión tiene su origen en las versiones anteriores de VB, ya que contaba con un sinnumero medio de especificar estados de variables (nothing, empty, null, ismissing, "", etc).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4988050717739572313?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/4988050717739572313/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=4988050717739572313&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4988050717739572313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4988050717739572313'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/10/nothing-y-dbnullvalue-en-visual.html' title='Nothing y DBNull.Value en Visual Basic.NET'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4511027117600529420</id><published>2008-10-02T12:27:00.001-07:00</published><updated>2008-10-02T12:32:41.642-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamic'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic casting'/><category scheme='http://www.blogger.com/atom/ns#' term='conversión'/><category scheme='http://www.blogger.com/atom/ns#' term='cast'/><category scheme='http://www.blogger.com/atom/ns#' term='tipos'/><category scheme='http://www.blogger.com/atom/ns#' term='casting'/><category scheme='http://www.blogger.com/atom/ns#' term='casteo'/><category scheme='http://www.blogger.com/atom/ns#' term='convert'/><title type='text'>Casteo Dinámico de tipos (type)</title><content type='html'>Estaba haciendo un código con un toque de reflection.&lt;br /&gt;Necesitaba un casteo entre tipos que se iban a resolver solamente en tiempo de ejecución, de modo que el casteo común y corriente no me servía. Después de dar un par de vueltas fuí a los mas simple, la clase Convert y su método ChangeType, tal como aparece a continuación.&lt;br /&gt;&lt;br /&gt;string tipo = &lt;span style="color: rgb(255, 0, 0);"&gt;"System.Int16"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; objeto1 = &lt;span style="color: rgb(255, 0, 0);"&gt;"345"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt; objeto2 = &lt;span style="color: rgb(0, 0, 255);"&gt;Convert&lt;/span&gt;.ChangeType(objeto1, &lt;span style="color: rgb(0, 0, 255);"&gt;Type&lt;/span&gt;.GetType(tipo));&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;Type&lt;/span&gt; t = objeto2.GetType(); &lt;span style="color: rgb(0, 128, 0);"&gt;// y aca tengo el tipo del system.int16 nuevamente&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Comentarios:&lt;br /&gt;objeto.GetType devuelve el tipo de un objeto existente.&lt;br /&gt;gettype(type) devuelve el tipo de un tipo indicado especificamente&lt;br /&gt;y&lt;br /&gt;Type.GetType(String) devuelve el tipo que le indicamos en el string.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4511027117600529420?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/4511027117600529420/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=4511027117600529420&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4511027117600529420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4511027117600529420'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/10/casteo-dinmico-de-tipos-type.html' title='Casteo Dinámico de tipos (type)'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4439417673227068641</id><published>2008-09-21T07:52:00.000-07:00</published><updated>2008-09-21T07:54:25.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mygeneration'/><category scheme='http://www.blogger.com/atom/ns#' term='generación'/><category scheme='http://www.blogger.com/atom/ns#' term='código'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo'/><category scheme='http://www.blogger.com/atom/ns#' term='templates'/><category scheme='http://www.blogger.com/atom/ns#' term='generacion de codigo'/><title type='text'>Generación de Código con MyGeneration</title><content type='html'>&lt;h3 class="post-title entry-title"&gt; &lt;a href="http://rodcode.blogspot.com/2007/08/generadores-de-codigo.html"&gt;Generadores de Codigo&lt;/a&gt; &lt;/h3&gt; &lt;div class="post-header-line-1"&gt;&lt;span class="post-author vcard"&gt; por &lt;span class="fn"&gt;Rodrigo&lt;/span&gt; &lt;/span&gt; &lt;/div&gt;  Un generador de código permite agilizar el desarrollo de aplicaciones, yo lo estoy utilizando con un proyecto pequeño para ver que resultados obtengo.&lt;br /&gt;Hasta ahora he logrado ahorrar tiempo y a la vez programar dentro de todo algo prolijo, es una buena forma de no caer en la típica programación con toda la logica pegada a la interfaz al estilo VB6 cuando necesitas hacer algo rápido. Asi queda algo elegante sin que ello nos involucre horas y horas de programar capas.&lt;br /&gt;La aplicación que utilice para hacer esto se llama &lt;a href="http://www.mygenerationsoftware.com/portal/default.aspx"&gt;MyGeneration&lt;/a&gt; esta aplicación permite utilizar distintos templates que escriben código, vos podes armar el tuyo o usar alguno de los que ofrece entre ellos &lt;span id="dnn_ctr367_ContentPane" align="left"&gt;&lt;span id="dnn_ctr367_HtmlModule_HtmlHolder" class="Normal"&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://www.mygenerationsoftware.com/portal/dOOdads/dOOdadsOverview/tabid/63/Default.aspx"&gt;&lt;span style="font-size: 85%;"&gt;dOOdads&lt;/span&gt;&lt;/a&gt; y &lt;/span&gt;&lt;/span&gt;&lt;span id="dnn_ctr367_ContentPane" align="left"&gt;&lt;span id="dnn_ctr367_HtmlModule_HtmlHolder" class="Normal"&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;a href="http://www.mygenerationsoftware.com/phpBB2/viewtopic.php?t=1505" target="new"&gt;&lt;span style="font-size: 85%;"&gt;NHibernate&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 85%;"&gt;, el último es muy conocido en el mundo de java.&lt;br /&gt;Yo opte por probar con dOOdads, que por medio de una jerarquia de herencia te permite crear clases que mapean contra las tablas de tu base de datos para que después puedas usarlas de esta forma:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="dnn_ctr383_ContentPane" align="left"&gt;&lt;span id="dnn_ctr383_HtmlModule_HtmlHolder" class="Normal"&gt;&lt;pre class="pre"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; Load and Save&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Employees emps &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Employees();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(emps.LoadByPrimaryKey(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;42&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;))&lt;br /&gt;{&lt;br /&gt;emps.LastName &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Just Got Married&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;emps.Save();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; Add a new record&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Employees emps &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Employees();&lt;br /&gt;emps.AddNew();&lt;br /&gt;emps.FirstName &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Mr.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;emps.LastName &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;dOOdad&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;emps.Save();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; After save the identity column is already here for me.&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; emps.EmployeeID;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: lucida grande;"&gt;Les comento a grandes rasgos los pasos que hay que hacer para que salga andando:&lt;br /&gt;1) bajar MyGenerator desde sourcefoge que es donde esta la última version del generador y del template.(acá el link &lt;a href="http://sourceforge.net/projects/mygeneration"&gt;http://sourceforge.net/projects/mygeneration ) &lt;/a&gt;&lt;br /&gt;2) Una vez instalado el programa necesitaras tener una base de datos bonita y lista para mapear hacia objetos.&lt;br /&gt;3) La arquitectura de oddododos (o como se escriba) tiene los siguientes modulos:&lt;br /&gt;a- un proyecto que tiene las clases bases que van a implementarse luego por el generador de código&lt;br /&gt;b- los procedimientos almacenados que utilizan las clases para guardarse en la base de datos&lt;br /&gt;c- un conjunto de vistas en la base de datos que debes crear para utilizar datos relacionados de forma eficiente.&lt;br /&gt;4) Entonces para que esto ande primero tenemos que agregar a nuestro proyecto el proyecto de arquitectura de dOOdads, el mismo se encuentra en C:\Program Files\MyGeneration\Architectures\dOOdads\CSharp para la version C#.&lt;br /&gt;5) Una vez que elegimos cual es la base de datos a usar tenemos que marcar la clases de la carpeta C:\Program Files\MyGeneration\Architectures\dOOdads\CSharp\MyGeneration.dOOdads\DbAdapters que vamos a usar (ver los prefijos) para que compilen. Para ello la seleccionamos y en el cuadro de propiedades la maracamos para incluirla en el build.&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_PwIR68_h27I/Rs9GRGQzCtI/AAAAAAAAAmU/HR9El2e2k-0/s1600-h/dibugoBuild.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_PwIR68_h27I/Rs9GRGQzCtI/AAAAAAAAAmU/HR9El2e2k-0/s320/dibugoBuild.JPG" alt="" id="BLOGGER_PHOTO_ID_5102374162386848466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En la imagen muestro las dos clases que abría que cambiar la propiedad "Build Action" para que compile un proyecto con base de datos SQL Server 2000 o 2005.&lt;br /&gt;&lt;br /&gt;6) una vez que tenemos el proyecto referenciado, vamos a generar nuestras clases de negocio. Para ello iniciamos mygeneration configuramos la cadena de conexión hacia la base de datos que vamos a mapear y procedemos a buscar en el arbol de la izquierda los templates a usar.&lt;br /&gt;&lt;br /&gt;7) para crear las clases de negocios usamos el template dOOdads Business Entity que se encuentra bajo la rama c# de dOOdas. Este template les genera clases abstractas, si quieren las concretas también hay que hacerlo con el mismo método.&lt;br /&gt;La idea de las clases concretas bobas es que ahí metamos el código especifico de nuestras aplicaciones.&lt;br /&gt;Si van a usar vistas para obtener datos relacionados con joins también se generan desde ese apartado.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_PwIR68_h27I/Rs9IjmQzCuI/AAAAAAAAAmc/idnQs7qsJ7Q/s1600-h/templatebrowsermygeneration.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_PwIR68_h27I/Rs9IjmQzCuI/AAAAAAAAAmc/idnQs7qsJ7Q/s320/templatebrowsermygeneration.JPG" alt="" id="BLOGGER_PHOTO_ID_5102376679237683938" border="0" /&gt;&lt;/a&gt;8) Tambien necesitamos crear los procedimientos almacenados para eso elegimos la base de datos correspondiente en el arbol de template (por ejemplo Microsoft SQL Server) y corremos el template de dOOdad Stored Procedures. Esto escupe un monton de stores por cada tabla que son necesarios para correr las clases generadas por MyGeneration.&lt;br /&gt;Aca esta bueno tocarlos un poco para que hagan lo que nosotros querramos, por ejemplo en mi caso modifique los deletes para que no borren sino que marquen un campo de baja, y toque también el procedimiento que trae todo para que solo traíga aquellos que no estan marcados como borrados.&lt;br /&gt;TIP: si a cada columna le agregan un campo RowVersion de tipo timestamp, el template va a utilizarla para manejar la concurrencia de los updates y puede llegar a generarles una sentencia TSEQUAL que no compila en 2005, no se hagan drama cambienlo por un igual y sale con frítas.&lt;br /&gt;9) Agregamos todo el código generado a nuestra solución de C#&lt;br /&gt;10) Configuramos &lt;span style="font-weight: bold; font-style: italic;"&gt;TransactionMgr &lt;/span&gt;para que obtenga una query string válida para nuestro aplicativo en la fúncion &lt;span style="font-style: italic; font-weight: bold;"&gt;private IDbConnection CreateSqlConnection(BusinessEntity entity)&lt;/span&gt;, donde pueden traerla directamente del app.config o web.config.&lt;br /&gt;&lt;br /&gt;Y con eso ya tendríamos andando una elegante capa de datos completa en no mas de 30 minutos.&lt;br /&gt;Cualquier cosa no duden en preguntar... en la página de mygeneration hay un pdf de 6 paginas que dice básicamente lo mismo que acá y esta práctico para ver como usar bien toda la interfaz que te da.&lt;br /&gt;Por ejemplo tiene un generador dinámico de querys muy piola.&lt;br /&gt;&lt;br /&gt;Eso es todo por ahora hasta la próxima espero que le sea útil a alguien....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rodcode.blogspot.com/2007/08/generadores-de-codigo.html"&gt;nota original en: http://rodcode.blogspot.com/2007/08/generadores-de-codigo.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4439417673227068641?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://rodcode.blogspot.com/2007/08/generadores-de-codigo.html' title='Generación de Código con MyGeneration'/><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/4439417673227068641/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=4439417673227068641&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4439417673227068641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4439417673227068641'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/09/generacin-de-cdigo-con-mygeneration.html' title='Generación de Código con MyGeneration'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_PwIR68_h27I/Rs9GRGQzCtI/AAAAAAAAAmU/HR9El2e2k-0/s72-c/dibugoBuild.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-234435991701441626</id><published>2008-08-30T17:27:00.000-07:00</published><updated>2008-08-30T17:31:48.144-07:00</updated><title type='text'>Conversor de .NET a JAVA - Grasshopper</title><content type='html'>La empresa MainSoft (&lt;a href="http://dev.mainsoft.com/"&gt;http://dev.mainsoft.com/&lt;/a&gt;) ha desarrollado una serie de productos, basicamente plugins para Visual Studio.NET, para convertir un aplicativo .NET en un aplicativo JAVA listo para ser instalado en Linux sobre un servidor Apache Tomcat.&lt;br /&gt;&lt;br /&gt;Pueden encontrar el plugin listo para ser descargado en la página de MainSoft: &lt;a href="http://dev.mainsoft.com/Default.aspx?tabid=177"&gt;http://dev.mainsoft.com/Default.aspx?tabid=177&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Realmente este producto permite desarrollar en la herramienta de mayor conocimiento, usando el lenguaje de mayor experiencia y luego todo ese desarrollo migrarlo a Java en Linux con facilidad, incluso para aquellos que poseen escasa experiencia en esas plataformas.&lt;br /&gt;&lt;br /&gt;Muy interesante !.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-234435991701441626?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dev.mainsoft.com/' title='Conversor de .NET a JAVA - Grasshopper'/><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/234435991701441626/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=234435991701441626&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/234435991701441626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/234435991701441626'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/08/conversor-de-net-java-grasshopper.html' title='Conversor de .NET a JAVA - Grasshopper'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8199077761295303444</id><published>2008-07-14T17:34:00.000-07:00</published><updated>2008-07-14T17:51:37.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamically'/><category scheme='http://www.blogger.com/atom/ns#' term='generated'/><category scheme='http://www.blogger.com/atom/ns#' term='Asp.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='button'/><title type='text'>Como manejar los eventos de botones creados dinámicamente en asp.net</title><content type='html'>&lt;p&gt;Un amigo me consultó hace un par de días acerca de un problema que el estaba teniendo con una página en la que dinámicamente generaba unos botones, les atachaba los eventos click mediante addhandler pero en tiempo de ejecución la página aspx ignoraba olímpicamente dicha codificación.&lt;br /&gt;&lt;/p&gt;La codificación era del siguiente estilo:&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Dim btnBoton As New Button&lt;br /&gt;btnBoton.Text = "Click en este botón"&lt;br /&gt;Page.Controls.Add(btnBoton)&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Una vez que el botón está en la página no hay forma de hacer que responda al evento click.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;No podía creer que algo tan sencillo no funcionase, de modo que empecé a buscar en todo internet, aunque me imaginaba que si agregaba un campo oculto y registraba la propiedad correcta todo iba a funcionar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Entonces, primero hay que registrar un campo oculto en la página.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;&lt;span style="font-family:Courier New;"&gt;Page.ClientScript.RegisterHiddenField("BotonOculto", "")&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;Despues definimos el botón en forma dinámica.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-weight: bold;"&gt;Dim miBoton As New Button&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;miBoton.Text = "Click en este boton"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Y el secreto agregar desde el lado servidor un attribute al lado cliente que directamente envie el submit de la página mas el botón clickeado&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-weight: bold;"&gt;objButton.Attributes.Add("onClick", &amp;amp; _ "document.forms[0].BotonOculto.value='" &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;miBoton.UniqueID &amp;amp; "';document.forms[0].submit();")&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Bien drástico y concreto, uso el Dom y envio el submit desde el evento onClick previamente registrado.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Finalmente agrego el control a la coleccion de controles de la página.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;&lt;span style="font-family:Courier New;"&gt;Page.Controls.Add(miBoton)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Lo unico que resta es tomar en el postback que genera dicho botón el valor del item correspondiente y listo.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Entonces en el postback:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-weight: bold;"&gt;If Page.IsPostBack Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     If Request.Item("botonOculto").Length &gt; 0 Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;           Response.Write("Usted clickeó en el botón " &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;              Request.Item("botonOculto") )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;   End If&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;End If&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Línea mas, línea menos, así es como debiera quedar la cosa.&lt;/p&gt;&lt;p&gt;Y problema resuelto !&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8199077761295303444?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/8199077761295303444/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=8199077761295303444&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8199077761295303444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8199077761295303444'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/07/como-manejar-los-eventos-de-botones.html' title='Como manejar los eventos de botones creados dinámicamente en asp.net'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8943493638345223451</id><published>2008-06-19T19:51:00.000-07:00</published><updated>2008-06-19T19:52:46.566-07:00</updated><title type='text'>Dot NET - News</title><content type='html'>&lt;a href="http://www.dotnet-news.com/gma/interpreter+le+html+en+c%23"&gt;http://www.dotnet-news.com/gma/interpreter+le+html+en+c%23&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Una mas que interesante página dedicada a .net, con mucho material sobre parseo html y xml.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8943493638345223451?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dotnet-news.com/gma/interpreter+le+html+en+c%23' title='Dot NET - News'/><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/8943493638345223451/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=8943493638345223451&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8943493638345223451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8943493638345223451'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/06/dot-net-news.html' title='Dot NET - News'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-2039380126754530352</id><published>2008-01-08T12:12:00.000-08:00</published><updated>2008-01-08T13:02:24.851-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web.config'/><category scheme='http://www.blogger.com/atom/ns#' term='webparts'/><category scheme='http://www.blogger.com/atom/ns#' term='configurar'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Parts'/><title type='text'>configurando Web.Config para Web Parts</title><content type='html'>Recuerden que para trabajar con WebParts deben crear la base aspnetdb por medio del utilitario de línea de comando: aspnet_regsql&lt;br /&gt;Una vez creada dicha base de datos debemos agregar las siguientes líneas en el web.config:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qjUj6Bhew2E/R4PfjNE28RI/AAAAAAAAAFk/ujYu480PN60/s1600-h/Graphic1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 636px; height: 462px;" src="http://bp3.blogger.com/_qjUj6Bhew2E/R4PfjNE28RI/AAAAAAAAAFk/ujYu480PN60/s320/Graphic1.jpg" alt="" id="BLOGGER_PHOTO_ID_5153208194540433682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(En caso de no poder visualizar la imagen clickear sobre la misma, lo cual provocará que se cargue la imagen por completo).&lt;br /&gt;&lt;br /&gt;Con todo esto ya debieran funcionar nuestros webs con web parts&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-2039380126754530352?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/2039380126754530352/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=2039380126754530352&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2039380126754530352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2039380126754530352'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2008/01/configurando-webconfig-para-web-parts.html' title='configurando Web.Config para Web Parts'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_qjUj6Bhew2E/R4PfjNE28RI/AAAAAAAAAFk/ujYu480PN60/s72-c/Graphic1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-5700862893465678672</id><published>2007-12-09T11:22:00.001-08:00</published><updated>2007-12-09T11:37:26.968-08:00</updated><title type='text'>Hands On Labs on Enterprise Library</title><content type='html'>Entendiendo las enterprise libraries, en la siempre excelente página de Willy Marroquín:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.willydev.net/Descargas/HOL/WillyDev_HOL221.pdf"&gt;http://www.willydev.net/Descargas/HOL/WillyDev_HOL221.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-5700862893465678672?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/5700862893465678672/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=5700862893465678672&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/5700862893465678672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/5700862893465678672'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/12/hands-on-labs-on-enterprise-library_09.html' title='Hands On Labs on Enterprise Library'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-6037489639090611763</id><published>2007-11-28T18:03:00.000-08:00</published><updated>2007-11-28T18:06:12.877-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSource'/><category scheme='http://www.blogger.com/atom/ns#' term='GPL'/><category scheme='http://www.blogger.com/atom/ns#' term='CodePlex'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>CodePlex - Proyectos OpenSource para .NET</title><content type='html'>Proyectos OpenSource para .NET en:&lt;br /&gt;&lt;a href="http://www.codeplex.com/"&gt;http://www.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para entrar y revisar y descargar lo que consideremos mas util.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-6037489639090611763?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/6037489639090611763/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=6037489639090611763&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6037489639090611763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6037489639090611763'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/11/codeplex-proyectos-opensource-para-net.html' title='CodePlex - Proyectos OpenSource para .NET'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-862318148398853173</id><published>2007-11-27T19:07:00.001-08:00</published><updated>2007-11-27T19:09:16.081-08:00</updated><title type='text'>Criptograma del FBI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_qjUj6Bhew2E/R0zbldDNwGI/AAAAAAAAADk/lEn1IU5Xf_U/s1600-h/code091207a.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_qjUj6Bhew2E/R0zbldDNwGI/AAAAAAAAADk/lEn1IU5Xf_U/s320/code091207a.jpg" alt="" id="BLOGGER_PHOTO_ID_5137722711422648418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Este es un código cifrado que se encuentra publicado en la página del FBI (&lt;a href="http://www.fbi.gov/page2/nov07/code112107.html"&gt;http://www.fbi.gov/page2/nov07/code112107.html&lt;/a&gt;) . Alguién se anima a descifrarlo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-862318148398853173?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/862318148398853173/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=862318148398853173&amp;isPopup=true' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/862318148398853173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/862318148398853173'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/11/criptograma-del-fbi.html' title='Criptograma del FBI'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_qjUj6Bhew2E/R0zbldDNwGI/AAAAAAAAADk/lEn1IU5Xf_U/s72-c/code091207a.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-1874129664892597823</id><published>2007-11-24T09:24:00.000-08:00</published><updated>2007-11-24T09:25:02.441-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patrones'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Otra buena con Patterns</title><content type='html'>&lt;a href="http://www.designpatternsfor.net/"&gt;http://www.designpatternsfor.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-1874129664892597823?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/1874129664892597823/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=1874129664892597823&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1874129664892597823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1874129664892597823'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/11/otra-buena-con-patterns.html' title='Otra buena con Patterns'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-1457809273759851036</id><published>2007-11-24T08:52:00.000-08:00</published><updated>2007-11-24T08:54:42.808-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patrones'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='dofactory'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Patterns en .NET - Listado y ejemplos</title><content type='html'>En :&lt;br /&gt;&lt;a href="http://www.dofactory.com/Patterns/Patterns.aspx"&gt;http://www.dofactory.com/Patterns/Patterns.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tenemos un listado de patterns categorizados por creacionales, estructurales y de comportamiento, junto con un ejemplo en C# de cada uno de ellos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-1457809273759851036?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/1457809273759851036/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=1457809273759851036&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1457809273759851036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/1457809273759851036'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/11/patterns-en-net-listado-y-ejemplos.html' title='Patterns en .NET - Listado y ejemplos'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-6165934320362792625</id><published>2007-11-24T08:46:00.000-08:00</published><updated>2007-11-24T08:58:35.538-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Strategy Pattern</title><content type='html'>Todos los desarrolladores .NET conocerán la importancia de los patterns de desarrollo para optimizar el modelo de un aplicativo, para facilitar su mantenimiento, para hacer más dinámico y flexible dicho modelo.&lt;br /&gt;&lt;br /&gt;Existen unos cuantos artículos al respecto, uno de ellos en la espectacular página de willy Marroquin:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.willydev.net/descargas/WillyDev_FDO_Strategy_Csharp2.0.pdf"&gt;http://www.willydev.net/descargas/WillyDev_FDO_Strategy_Csharp2.0.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-6165934320362792625?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/6165934320362792625/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=6165934320362792625&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6165934320362792625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/6165934320362792625'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/11/strategy-pattern.html' title='Strategy Pattern'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8221142469351603695</id><published>2007-11-18T17:35:00.000-08:00</published><updated>2007-11-24T08:58:05.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO'/><category scheme='http://www.blogger.com/atom/ns#' term='ConnectionString'/><category scheme='http://www.blogger.com/atom/ns#' term='SQLConnection'/><category scheme='http://www.blogger.com/atom/ns#' term='Ado.net'/><title type='text'>Todas las cadenas de Conexion !!</title><content type='html'>Si quieren saber como conectarse a un Servidor de bases de datos y no encuentran la cadena de conexión, pueden ir a la página:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.connectionstrings.com/"&gt;http://www.connectionstrings.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En esta página se encuentran todas (o casi todas) las posibilidades de configuración de cadenas de conexión a distintas bases de datos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8221142469351603695?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.connectionstrings.com/' title='Todas las cadenas de Conexion !!'/><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/8221142469351603695/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=8221142469351603695&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8221142469351603695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8221142469351603695'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/11/todas-las-cadenas-de-conexion.html' title='Todas las cadenas de Conexion !!'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-4608978832354510201</id><published>2007-10-22T21:17:00.001-07:00</published><updated>2007-11-24T08:57:39.654-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Asp.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Parts'/><title type='text'>Web Parts en Asp.NET 2.0</title><content type='html'>En el siguiente enlace hay un lindo tutorial (en Inglés) sobre Web Parts en Asp.NET:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ondotnet.com/pub/a/dotnet/2005/01/10/liberty.html"&gt;http://www.ondotnet.com/pub/a/dotnet/2005/01/10/liberty.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-4608978832354510201?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/4608978832354510201/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=4608978832354510201&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4608978832354510201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/4608978832354510201'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/10/web-parts-en-aspnet-20.html' title='Web Parts en Asp.NET 2.0'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-8201092800804793093</id><published>2007-04-10T11:41:00.001-07:00</published><updated>2007-11-24T08:57:23.589-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='registros'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenXML'/><category scheme='http://www.blogger.com/atom/ns#' term='2005'/><category scheme='http://www.blogger.com/atom/ns#' term='eggheadcafe'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>OpenXML en SQL Server 2000</title><content type='html'>&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;Pasando multiples registros de  datos a SQL Server 2000 por medio de XML y OpenXML&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; &lt;/span&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://www.eggheadcafe.com/articles/20030627c.asp"&gt;http://www.eggheadcafe.com/articles/20030627c.asp&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; &lt;/span&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; &lt;/span&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-family:Arial;"&gt;Desde ya que en SQL Server 2005 existe el tipo de datos  xml que permite longitudes de datos de hasta 2Gigas. En SQL Server 2000 NO  existe este tipo de datos y el varchar es limitado en cuanto a longitud de  datos.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; &lt;/span&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt; &lt;/span&gt;&lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-8201092800804793093?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/8201092800804793093/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=8201092800804793093&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8201092800804793093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/8201092800804793093'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/04/openxml-en-sql-server-2000.html' title='OpenXML en SQL Server 2000'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-2794918532335243603</id><published>2007-04-10T11:26:00.001-07:00</published><updated>2007-11-24T08:56:43.050-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rollap'/><category scheme='http://www.blogger.com/atom/ns#' term='Transact-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Cube'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Server - Instrucciones Cube y Rollup</title><content type='html'>&lt;div&gt;&lt;span style="font-family:Arial;"&gt;Aquí tenemos un pdf para descargar con excelentes ejemplos  de cuando y como utilizar las instrucciones Cube y Rollap usando Ansi SQL  (compatible con Transact-SQL)&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;a href="http://www.willydev.net/DUGdirectory/dirHitting.asp?id=1622&amp;amp;url=http://www.willydev.net/Descargas/Prev/CubeRollup.PDF"&gt;http://www.willydev.net/DUGdirectory/dirHitting.asp?id=1622&amp;amp;url=http://www.willydev.net/Descargas/Prev/CubeRollup.PDF&lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;Como siempre, excelente la página de Willy  Marroquín.&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-2794918532335243603?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/2794918532335243603/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=2794918532335243603&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2794918532335243603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/2794918532335243603'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/04/sql-server-instrucciones-cube-y-rollup.html' title='SQL Server - Instrucciones Cube y Rollup'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7063378937475897674.post-7909696682559212446</id><published>2007-04-10T10:57:00.000-07:00</published><updated>2007-04-10T11:01:52.388-07:00</updated><title type='text'>Hola !</title><content type='html'>Hola !, Soy román, soy MCSD, experto en tecnologías .NET y en SQL Server.&lt;br /&gt;Este es mi blog sobre acerca de las tecnologías .NET, los lenguajes C# y Visual Basic.NET y también sobre SQL Server y las tecnologías relacionadas.&lt;br /&gt;&lt;br /&gt;Acá es donde voy a exponer mi experiencia personal, mis conocimientos y las noticias mas destacadas acerca de .NET y SQL Server desde el punto de vista de los desarrolladores.&lt;br /&gt;&lt;br /&gt;Espero que este sea un ámbito de comentarios e intercambios de información entre desarrolladores de habla hispana.&lt;br /&gt;&lt;br /&gt;Hola a todos y bienvenidos a mi Blog !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7063378937475897674-7909696682559212446?l=logicanet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logicanet.blogspot.com/feeds/7909696682559212446/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7063378937475897674&amp;postID=7909696682559212446&amp;isPopup=true' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7909696682559212446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7063378937475897674/posts/default/7909696682559212446'/><link rel='alternate' type='text/html' href='http://logicanet.blogspot.com/2007/04/hola.html' title='Hola !'/><author><name>Román</name><uri>http://www.blogger.com/profile/04425855912922732902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
