<?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-16067554</id><updated>2011-12-02T12:21:03.494-03:00</updated><title type='text'>Dario.Net</title><subtitle type='html'>Aqui pienso postear cosas que sean interesantes con respecto a programación, por lo general habrá muchas cosas de .Net y tecnologías similares. Cualquier comentario que desean hacerlo Bienvenidos !!!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16067554.post-115959140612047908</id><published>2006-09-30T01:40:00.000-03:00</published><updated>2007-06-06T02:21:32.470-03:00</updated><title type='text'>Mudanza: Migrando a Wordpress</title><content type='html'>No bloguearé más por este canal...ahora comenzaré a hacerlo en esta direccion:&lt;font style="font-weight: bold;"&gt; &lt;/font&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;a href="http://blog.darioquintana.com.ar"&gt;http://blog.darioquintana.com.ar&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Nos vemos ahí.&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-115959140612047908?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/115959140612047908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=115959140612047908' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115959140612047908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115959140612047908'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/09/mudanza-migrando-wordpress.html' title='Mudanza: Migrando a Wordpress'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-115902952214903659</id><published>2006-09-23T13:38:00.000-03:00</published><updated>2006-09-23T15:01:12.586-03:00</updated><title type='text'>Delegados, Eventos y Métodos anónimos</title><content type='html'>&lt;p&gt;&lt;em&gt;Introducción:&lt;/em&gt; Implementando una interfaz gráfica con windows forms, teniendo un MDI principal y un par de formularios hijos, vi la necesidad que en un momento dado, un formulario hijo realice algo que el padre tiene que interceptar, y tomar cartas en el asunto. En este caso necesitaba setear la propiedad Text del MDI, a partir de alguna acción de un formulario hijo; algo sencillo. &lt;/p&gt; &lt;p&gt;En C# y sin la posibilidad de usar algo análogo al namespace &lt;strong&gt;My&lt;/strong&gt;, que posee la gente de VB.Net, tuve que recurrir a un Eventos y Delegados,...y ya que estamos...Métodos anónimos.&lt;/p&gt;En VB.Net, &lt;strong&gt;estando en formulario hijo&lt;/strong&gt; con el namespace my seria algo bastante tonto: &lt;p&gt;My.Forms.MDIMain.Text = nombredeltitulo&lt;/p&gt; &lt;p&gt;En C# me las arregle con un mecanismo que permita que el padre (MDI principal) se quede a la "escucha" de un evento, y así iniciar acciones, pero con información que le provee el hijo. Es decir:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Los metodos a ejecutar&lt;/strong&gt;: son del MDI principal  &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Y la información necesaria -los parametros-&lt;/strong&gt; : provienen del form hijo.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Ahora bien, como se podrían implementar estos tres conceptos juntos para resolver esto ?&lt;/p&gt; &lt;p&gt;Ahora pasemos a un ejemplo donde se vé una interacción entre los objetos:&lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;pre&gt;&lt;!--  Code highlighting produced by Actipro SyntaxEditor http://www.ActiproSoftware.com/Products/DotNet/  --&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; System;&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; Declaracion del delegado&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;delegate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; EventHandler(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; str);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Program&lt;br /&gt;{&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Main()&lt;br /&gt;  {&lt;br /&gt;      TestHandler tb &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; TestHandler();&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;Tres maneras de hacer lo mismo&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;1- asignacion comun&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;        tb.Evento &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; EventHandler(MetodoStringToUpper);&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;2- asignacion por inferencia de tipos&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;        tb.Evento &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MetodoStringToLower;&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;3- asignacion con metodo anonimo&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;        tb.Evento &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;delegate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; str)&lt;br /&gt;                              {&lt;br /&gt;                              &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; otrostring &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;   String.Format(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;Metodo Anonimo: {0}&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,str);&lt;br /&gt;                              Console.WriteLine(otrostring);&lt;br /&gt;                              };&lt;br /&gt;      tb.Disparar();&lt;br /&gt;    &lt;br /&gt;      Console.ReadLine();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MetodoStringToUpper(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; str)&lt;br /&gt;  {&lt;br /&gt;      Console.WriteLine(str.ToUpper());&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MetodoStringToLower(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; str)&lt;br /&gt;  {&lt;br /&gt;      Console.WriteLine(str.ToLower());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; TestHandler&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;Evento de tipo EventHandler&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;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;event&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; EventHandler Evento;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Disparar()&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; mystring &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, 128, 128);"&gt;Dario.Net&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;            &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;Disparo el evento, con un string de parÃ¡metro&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;        Evento(mystring);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Primeramente declararemos un delegado: &lt;em&gt;&lt;u&gt;EventHandler&lt;/u&gt;&lt;/em&gt;, que podrá apuntar a metodos que contengan como argumentos el tipo &lt;strong&gt;string&lt;/strong&gt; y que no retornen valores (&lt;strong&gt;void&lt;/strong&gt;).&lt;br /&gt;&lt;p&gt; Luego en la clase TestHandler se declara un evento: &lt;em&gt;&lt;u&gt;Evento&lt;/u&gt;&lt;/em&gt;, del tipo EventHandler (nuestro delegado).&lt;/p&gt;Y la funcion: &lt;em&gt;&lt;u&gt;Disparar(&lt;/u&gt;&lt;/em&gt;); se encargará de disparar el evento con un string como argumento: &lt;u&gt;&lt;em&gt;mystring="Dario.Net"&lt;/em&gt;&lt;/u&gt;.&lt;br /&gt;&lt;p&gt;Vayamos al Main(). &lt;/p&gt;Instanciamos un objeto del tipo &lt;u&gt;&lt;em&gt;TestHandler&lt;/em&gt;&lt;/u&gt;, con el operador &lt;strong&gt;+=&lt;/strong&gt; y vamos agregando al evento, todos los métodos que queremos que se ejecuten, uno tras otro.&lt;br /&gt;&lt;p&gt;Luego invocamos a Disparar(). y se invocan, en este orden los tres métodos: MetodoStringToUpper,MetodoStringToLower y el querido metodo anónimo.&lt;/p&gt;Cosas a notar:&lt;br /&gt;&lt;p&gt;El que dispara el evento es el TestHandler, y le pasa un parámetro: &lt;u&gt;mystring&lt;/u&gt;.&lt;/p&gt;Los métodos están en el &lt;u&gt;Main&lt;/u&gt;, pero esos métodos se ejecutarán por el hijo...cosa loca no ?&lt;br /&gt;&lt;p&gt;El método anonimo: es como si fuera un metodo más, pero definido en el momento de su uso, e inline (buenísimo!)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;Bien, ahora que vimos el ejemplo (y espero que lo hayan entendido), imaginemos algo: hagamos de cuenta que &lt;u&gt;Program&lt;/u&gt; es el Main, y TestHandler es el &lt;u&gt;Form1&lt;/u&gt;. Y podemos solucionar facilmente el problema que plantee al comienzo...y muchos más!&lt;br /&gt;&lt;p&gt;Para profundizar les recomiendo este &lt;a href="https://www.microsoft.com/spanish/msdn/articulos/archivo/030506/voices/C20_default.mspx"&gt;artículo&lt;/a&gt;.&lt;/p&gt;Saludos y dejen comentarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-115902952214903659?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/115902952214903659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=115902952214903659' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115902952214903659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115902952214903659'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/09/delegados-eventos-y-mnimos.html' title='Delegados, Eventos y M&amp;eacute;todos an&amp;oacute;nimos'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-115851606046599217</id><published>2006-09-17T15:01:00.000-03:00</published><updated>2006-09-17T15:01:01.673-03:00</updated><title type='text'>Developer Day</title><content type='html'>&lt;p&gt;Ayer, 16 de agosto de 2006 se realizaron las jornadas de desarrollo en la UTN - Facultad Regional Resistencia -&amp;nbsp;Chaco, donde se dieron lugar a interesantes charlas:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Web Semántica &lt;/strong&gt;- &lt;em&gt;Por César Acuña&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Programación en SQL Server 2000 y 2005&lt;/strong&gt; - &lt;em&gt;Por Mariano Minoli&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lo Nuevo de Visual Basic 2005&lt;/strong&gt; - &lt;em&gt;Por Vanina Geneiro y Diego Poza&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Layering y&amp;nbsp;ORM: Un caso real&lt;/strong&gt; - &lt;em&gt;Por Dario Quintana&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;LINQ&lt;/strong&gt; - &lt;em&gt;Por Orlando Canteros y Guillermo Ruffino&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Web Services&lt;/strong&gt; - &lt;em&gt;Por Agustín Casiva y Marcos Ibañez&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;En dichas jornadas estuve compartiendo un tema: &lt;a href="http://uooopaa.googlepages.com/DesarrolloenCapas.zip"&gt;Desarrollo en capas&lt;/a&gt; y &lt;a href="http://uooopaa.googlepages.com/ORM.zip"&gt;Object/Relational Mapping&lt;/a&gt;. Donde se mostró un aplicación&amp;nbsp;real que implementaba estos patrones.&amp;nbsp;La verdad, me gustó mucho dar la charla. Hasta después se mostró algo de db4o también, para poder ejemplificar mejor sobre diferencias entre bases de datos relacionales y orientadas a objetos. &lt;/p&gt; &lt;p&gt;Y despues Orlando y Guillermo hablaron sobre &lt;a href="http://msdn.microsoft.com/data/linq/"&gt;LINQ&lt;/a&gt;, la verdad que está demasiado bueno el tema...y no veo la hora que salga la versión final de este proyecto para empezar a usarlo en serio.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-115851606046599217?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/115851606046599217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=115851606046599217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115851606046599217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115851606046599217'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/09/developer-day.html' title='Developer Day'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-115745675032332904</id><published>2006-09-05T08:45:00.000-03:00</published><updated>2006-09-23T01:43:57.203-03:00</updated><title type='text'>Reflexion + Generación de código = Modelo para AjGenesis</title><content type='html'>&lt;p&gt;Estuve viendo &lt;a href="http://www.ajlopez.com/ajgenesis"&gt;AjGenesis&lt;/a&gt;, que es un generador de codigo escrito por Angel "Java" Lopez, la verdad &lt;strong&gt;muy útil&lt;/strong&gt;. Se puede generar código para cualquier lenguaje que estén escritas las plantillas, y sino están escritas, las podés escribir con mucha facilidad, ya que vienen algunas plantillas de ejemplo como para ir conociendo el lenguaje AjGenesis. Para poder generar código se requiere, como todo generador de cógido: un modelo. Este modelo está escrito en XML. &lt;/p&gt;&lt;p&gt;Por ahora, AjGenesis, no cuenta con una interfaz amigable para un usuario final, pero funciona y genera de lo lindo. Para comenzar a usarlo se haría así:&lt;/p&gt;&lt;pre&gt;&lt;p&gt;&lt;span style="color:#0080ff;"&gt;#AjGenesis.Console.exe Models\Model.xml Tasks\generate.ajg &lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;Donde Model.xml contiene los links a los otros archivos xml que contienen las descripciones de las entidades. Generate.ajg es el archivo de tareas que el generador vá a usar, vendría a ser como el archivo main para generar, él se encargará de buscar los templates. Por lo general el generate.ajg, tendrá un loop que iterará entre todas las entidades de negocio y así ir generando los artefactos en el lenguaje en que esten trabajando.&lt;/p&gt;&lt;p&gt;Ahora bien, como hago para obtener de forma automática el modelo? &lt;/p&gt;&lt;p&gt;En un proyecto que empecé con db4o, y el diseño de las business entities lo hacía con el Class Designer del Visual Studio 2005, se me ocurrió que el modelo de clases lo podía obtener del assembly donde están las clases de negocio. Es decir, tengo un proyecto que tiene adentro solo las clases de negocio, como podrían ser: Clientes, Factura, LineaFactura, etc.&lt;/p&gt;&lt;p&gt;Así nació &lt;a href="http://uooopaa.googlepages.com/GenerateFromAssemblyv0.2.zip"&gt;GenerateFromAssembly&lt;/a&gt;, que es una herramienta muy sencilla, que via Reflexion, itera entre las clases de la dll, y obtiene sus propiedades con sus respectivos tipos de datos. &lt;/p&gt;&lt;p&gt;Actualmente la estoy usando en este proyecto, ya no con db4o, estoy usando NHibernate contra un Sql Server, pero la herramienta funciona igual, y genera el modelo como lo debe hacer.&lt;/p&gt;&lt;p&gt;Cabe destacar que la idea de la herramienta es: A partir del diseño de clases generar un assembly de .Net, y a partir de él, generar el modelo, y con el modelo y los templates de AjGenesis: obtengo mis artefactos, ya sean: Web Services, artefactos de capa de negocio, de capa de acceso a datos, o formularios web/windows.&lt;/p&gt;&lt;p&gt;Existe un issue: los tipos de datos genericos. Por ejemplo, si tengo IList&amp;lt;Cliente&amp;gt;, el CLR los trata como si fueran IList`[Cliente], es una cuestión de nombras, nada más. De modo que en el código final generado con AjGenesis obtendremos los tipos de datos con este último esquema. Se podría hacer otra herramienta, que al codigo final generado, lo masajee con algunas expresiones regulares y exprese los generic tipes segun el lenguaje .Net que estemos usando. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-115745675032332904?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/115745675032332904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=115745675032332904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115745675032332904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115745675032332904'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/09/reflexion-generacin-de-cdigo-modelo.html' title='Reflexion + Generación de código = Modelo para AjGenesis'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-115613029155106755</id><published>2006-08-21T00:18:00.000-03:00</published><updated>2006-09-23T01:41:55.910-03:00</updated><title type='text'>db4o: firsts steps</title><content type='html'>&lt;p&gt;En estos días estuve teniendo mis primeros encontronazos de verdad con db4o, antes habian sido solo pruebas, estoy inscripto al foro hispano oficial, y estuve -para inaugurar- haciendo unas preguntas, que la verdad me sacaron un poco del pozo en el que estaba. Tambien conocí a gente como Alan Lavintman, que me estuvo dando una mano por chat con esta base. Obviamente, yo no podía pasar sin hacer la pregunta que el 90 % de los nuevos que comienzan a usar db4o, viniendo de usar un motor de datos relacional: "como manejo en la inserción la duplicidad de objetos?" ay!...esa pregunta es la del millon! &lt;/p&gt;&lt;p&gt;Este concepto es distinto, no es el mismo que el de un motor relacional, donde se puede manejar una entidad referencial por medio de claves. Por que en una dbms la inserción de los datos en una tabla intermedia -por ejemplo-, se podría implementar por medio de un INSERT INTO y listo, a lo sumo el motor se encargará de lanzar una excepción en el caso de que se viole una regla de integridad, pero no pasa de ahí. Con db4o es muuuuy distinto, creanme, y tiene sus "porques" bien justificados, y no porque db4o lo justifique, es que hablando de objetos...no podría ser de otra forma.&lt;/p&gt;&lt;p&gt;Vean esto, tengo dos clases, &lt;strong&gt;A&lt;/strong&gt; y &lt;strong&gt;B&lt;/strong&gt;, despues tengo una clase &lt;strong&gt;C&lt;/strong&gt; (que vendría a ser si se quiere, como una "tabla intermedia"), en este caso seria un objeto que tiene relación con los otros dos objetos (A y B), en UML sería visto como una &lt;em&gt;asociación como clase&lt;/em&gt;. Ahora, seamos un poco creativos, e imaginemos que tenemos que no tenemos la necesidad de guardar los objetos, por que nuestra memoria es no-volatil y no tengo problemas de capacidad de memoria (ni de velocidad si se quiere), de modo que tengo todos los objetos en memoria, y en vez de insertar, tengo que asociarlos nada más. Entonces tendré que tener en la mano el objeto del tipo C (es el nuevo objeto) y tambien los objetos del tipo A y B para asociarlos. De modo que podriamos ver que la clase de C tendría una propiedad de tipo A y otra propiedad de tipo B (minimamente), tambien podría tener otros atributos, por ejemplo Descripcion.&lt;/p&gt;&lt;p align="left"&gt;La clase C podría declararse así:&lt;/p&gt;&lt;pre&gt;&lt;p align="left"&gt;&lt;b&gt;public&lt;/b&gt; &lt;b&gt;class&lt;/b&gt; C&lt;br /&gt;    {&lt;br /&gt;        &lt;b&gt;private&lt;/b&gt; A _A;&lt;br /&gt;        &lt;b&gt;private&lt;/b&gt; B _B;&lt;br /&gt;        &lt;b&gt;private&lt;/b&gt; &lt;b&gt;string&lt;/b&gt; _Descripcion;&lt;br /&gt;&lt;br /&gt;        &lt;b&gt;public&lt;/b&gt; A A&lt;br /&gt;        {&lt;br /&gt;            &lt;b&gt;get&lt;/b&gt; {   &lt;b&gt;return&lt;/b&gt; _A; }&lt;br /&gt;            &lt;b&gt;set&lt;/b&gt; { _A = &lt;b&gt;value&lt;/b&gt;; }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        &lt;b&gt;public&lt;/b&gt; B B&lt;br /&gt;        {&lt;br /&gt;            &lt;b&gt;get&lt;/b&gt; { &lt;b&gt;return&lt;/b&gt; _B; }&lt;br /&gt;            &lt;b&gt;set&lt;/b&gt; { _B = &lt;b&gt;value&lt;/b&gt;; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;b&gt;public&lt;/b&gt; &lt;b&gt;string&lt;/b&gt; Descripcion&lt;br /&gt;        {&lt;br /&gt;            &lt;b&gt;get&lt;/b&gt; { &lt;b&gt;return&lt;/b&gt; _Descripcion; }&lt;br /&gt;            &lt;b&gt;set&lt;/b&gt; { _Descripcion = &lt;b&gt;value&lt;/b&gt;; }&lt;br /&gt;        }&lt;br /&gt;    }&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p align="left"&gt;Ahora tendriamos que setear las propiedades de C:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;p align="left"&gt;[...]&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;C ObjC = new C();&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;ObjC.A = objA;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;ObjC.B = objB;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;ObjC.Descripcion = "Esto es una descripcion";&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;[...]&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p align="left"&gt;...y así estariamos realizando la asociacion de dichos objetos.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;Ahora olvidando el concepto de &lt;em&gt;object prevalence&lt;/em&gt; (que hablando rapido es: tener todos los objetos en memoria -bien básico-) y volviendo a la realidad... volviendo a nuestra db4o, para tener que hacer una inserción de un objeto que tiene una asociacion con otros objetos, tenemos que:&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;1) Cargar primeramente los otros objetos.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;2) Asociar los objetos, -seteando los campos del objeto a insertar-.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;3) Guardar el nuevo objeto en la base.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;4) Listo, objeto y las referencias ya se han realizado.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;Otra cosa que me pareció interesante destacar, que a db4o le importa muy poco como sobreescribamos los metodos &lt;strong&gt;Equals&lt;/strong&gt;, no realiza comparaciones con él.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;Tambien puede ser de ayuda, el concepto de &lt;strong&gt;callbacks&lt;/strong&gt;, que db4o implementa. Son funciones que se disparan cuando ocurren ciertos eventos. &lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;Por ejemplo, está el callback &lt;strong&gt;ObjectCanNew&lt;/strong&gt; que devuelve un &lt;em&gt;bool&lt;/em&gt;, y se dispara cada vez que se está por insertar un nuevo objeto, si el resultado de la función devuelve &lt;em&gt;true&lt;/em&gt;, se guarda el objeto, de lo contrario no. En esa función tendríamos que agregar el procedimiento de validación.&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;Pero este concepto intrusivo de db4object, particularmente no me gusta mucho, por que tenemos que decorar todas nuestras entidades de negocio con estos metodos.. que son parte del acceso a datos, y poco tiene que hacer en cuanto a una validación de negocios. Pero...es una opción.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-115613029155106755?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/115613029155106755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=115613029155106755' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115613029155106755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/115613029155106755'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/08/db4o-firsts-steps.html' title='db4o: firsts steps'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-114351711578413223</id><published>2006-03-28T00:10:00.000-03:00</published><updated>2006-09-23T01:49:23.523-03:00</updated><title type='text'>Expresiones Regulares en .Net</title><content type='html'>Intentando desarrollar un parser, ya que veremos que parseamos :)  es imposible no caer en este tema de expresiones regulares, a menos de que nos fabriquemos una rutina que caracter a caracter vaya leyendo, almacenando en un buffer y comprobando si es lo que estamos buscando, podría ser una opción si es algo sencillo, pero...hgggssss.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;O podemos ser los programadores duros y construirnos nuestra propia maquina de estados y con ella procesar las expresiones.&lt;br /&gt;&lt;br /&gt;Para los que no saben, o alguno que haya cursado conmigo Sintaxis y Semantica del Lenguaje y no se acuerda de los que nos hablaba el profe Bernal cuando nos hacía hacer la máquina de estados de una expresión regular dada, como aabbcc :P y ver como corrían las letras de un estado al otro, pero bueno...supongo que ese fue el lado oscuro de las Regex :D&lt;br /&gt;Una definición semi-formal: Una expresión regular es una cadena que describe o "matchea" a un conjunto de cadenas,  dado un conjunto de reglas de sintaxis. En sintesis, es una cadena que representa a un patron que se busca en un texto. Un ejemplo más palpable, que por cierto los usamos a menudo, cuando queremos copiar archivos a un directorio: #cp *.cs /home/dario. Estamos aplicando el concepto. Esto en castellano seria como copiar todos los archivos (*)  que tengan la extensión 'cs' a el directorio /home/dario. Es simple.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Las expresiones regulares funcionan de una manera similar. Tienen un conjunto finito de simbolos para la representación de caracteres, numeros, y como tambien simbolos para indicar cardinalidad.&lt;br /&gt;&lt;/div&gt;Vayamos a un ejemplo: todos sabemos que una dirección IP se asemeja a: 10.66.43.141. Es decir, [numero 1-3 digitos][punto][numero 1-3 digitos][punto][numero 1-3 digitos][punto][numero 1-3 digitos]&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Que mejor ejemplo para aplicar expresiones regulares. Aunque las diferencias se den, dependiendo del lenguaje que estamos trabajando, las expresiones regulares no varían mucho de una implementación a la otra. Por lo general todas las implementaciones se parecen bastante a la manera que lo hace &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;Perl&lt;/a&gt;, cuyo motor de expresiones regulares es muy potente, mejor dicho, cuando te nombran Perl, lo primero que se me viene a la cabeza es RegEx, que ha tenido su inspiración en &lt;a href="http://en.wikipedia.org/wiki/Sed"&gt;sed.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si programás en .Net y querés usar RegExs, &lt;a href="http://regex.osherove.com/"&gt;The Regulator&lt;/a&gt; es ideal para armar las cadenas, probarlas y ver si funcionan como queremos, esta herramienta está hecha en .Net (dicho sea de paso).&lt;br /&gt;&lt;br /&gt;Ejemplo: si queremos evaluar una expresión matemática para extraer sus operadores y operandos, y despues convertirla a postfija para su evaluación, primero debemos masajearla un poco.&lt;br /&gt;&lt;div style="text-align: left;"&gt;Entonces, si tenemos una expresion como: &lt;span style="color: rgb(0, 153, 0);"&gt;2.34m&lt;span style="color: rgb(204, 0, 0);"&gt;+&lt;/span&gt;344&lt;span style="color: rgb(204, 0, 0);"&gt;/&lt;/span&gt;444&lt;span style="color: rgb(204, 0, 0);"&gt;*(&lt;/span&gt;variable.value&lt;span style="color: rgb(204, 0, 0);"&gt;+&lt;/span&gt;33.55m&lt;span style="color: rgb(204, 0, 0);"&gt;+&lt;/span&gt;2&lt;span style="color: rgb(204, 0, 0);"&gt;^&lt;/span&gt;234&lt;span style="color: rgb(204, 0, 0);"&gt;)/&lt;/span&gt;2&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;La podríamos evaluar con la siguiente expresión regular, que usa el concepto de grupos, pero no es dificil de entender:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;flotante&gt;&lt;/flotante&gt;&lt;/span&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;entero&gt;&lt;/entero&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;[\d]&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;+&lt;/span&gt;)&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u002e(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;decimal&gt;&lt;/decimal&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;[\d]&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;+&lt;/span&gt;)m)|&lt;br /&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;entero&gt;&lt;/entero&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;d&lt;span style="color: rgb(255, 0, 0);"&gt;+&lt;/span&gt;)|&lt;br /&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;operador&gt;&lt;/operador&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u0028|&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u0029|&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u002a|&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u002b|&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u002d|&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u002f|&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u005e)|&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u0022(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;string&gt;&lt;/string&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.+&lt;/span&gt;)&lt;span style="color: rgb(255, 0, 0);"&gt;\&lt;/span&gt;u0022|&lt;br /&gt;(&lt;span style="color: rgb(51, 51, 255);"&gt;?&lt;variable&gt;&lt;/variable&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;[a-zA-Z0-9\u002d\u002e]&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;+&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;donde:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;\d --&gt; representa un decimal.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[ ] --&gt; uno, cualquiera de los caracteres dentro de los corchetes.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(?&lt;any&gt;  )  --&gt; se utiliza para hacer grupos.&lt;/any&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;\u00xx --&gt; representa un caracter unicode.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;. --&gt;  cualquier caracter, excepto el retorno de carro.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;| --&gt; exclusión.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;a-z --&gt;  cualquier caracter entre a y z.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/theregulator.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 382px;" src="http://photos1.blogger.com/blogger/3699/1511/400/theregulator.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-114351711578413223?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/114351711578413223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=114351711578413223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/114351711578413223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/114351711578413223'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/03/expresiones-regulares-en-net.html' title='Expresiones Regulares en .Net'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-114305678364092104</id><published>2006-03-22T16:01:00.000-03:00</published><updated>2006-09-11T09:48:14.880-03:00</updated><title type='text'>Gmane y NHibernate-Hispano</title><content type='html'>&lt;div style="text-align: justify;"&gt;Si sos un desarrollador de Software, profesional o más bien novaton (en este caso más aún)  es casi imposible que no estes participando de al menos alguna lista de Correos, y si te interesan muchos temas lo más probable es que estés suscripto a varias.&lt;br /&gt;&lt;br /&gt;Hace tiempo que participo en listas de correos, más activas en algunas que otras, y en algunas solamente en modo "listen and learning" (mmm...no sé por qué me acorde de bridges). Por lo tanto, tener una herramienta que gestione los correos y que te facilite la lectura, es importante.&lt;br /&gt;&lt;br /&gt;Bloggeando encontré hace ya hace un tiempo un mailing list archives, que basicamente es un archivador grandote que centraliza información de cientos (y me quedo corto...miles) de listas de correo en un lugar común.&lt;br /&gt;&lt;/div&gt;Dos muy usados son &lt;a href="http://gmane.org/"&gt;Gmane &lt;/a&gt;y &lt;a href="http://www.mail-archive.com/"&gt;The Mail Archive.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;NHibernate-Hispano, que como una bolita de nieve está creciendo de a poquito, me deja muy contento ya que el grupo se está poniendo bueno y muchos están conformes con las cositas que se están posteando. Porque de pronto no entontrabas un bendito ejemplo de NHibernate en la web, y ahora con el Grupo por lo menos entrás y recorrés la bandeja de entrada, encontrás ejemplos o soluciones que quizás te pueden servir, e inclusive, hay para todos lo gustos y colores.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Decidí, para probar, inscribir a nuestro fabuloso grupo en estos archivadores de listas de mail y estas son las direcciones:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dir.gmane.org/gmane.comp.windows.dotnet.nhibernate.user.spanish"&gt;NHibernate-Hispano en Gmane&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mail-archive.com/nhibernate-hispano%40googlegroups.com/"&gt;NHibernate-Hispano en The Mail Archive&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La que más me gusta es Gmane, tiene inclusive un gráfico que te muestra la actividad del grupo en los pasados días.&lt;br /&gt;Gmane, para registrar los tracks del grupo, se infiltra en el mismo como si fuera un miembro más. De modo que todos los mails que se manden al grupo, se manden tambien a Gmane para que él los archive.&lt;br /&gt;&lt;br /&gt;También Gmane te permite revisar tus mails en una vista tipo blog, es decir, te permite ver tu lista como si fuera un super-extenso blog que hasta si querés, podés cambiar el estilo modificando el CSS.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.gmane.org/gmane.comp.windows.dotnet.nhibernate.user.spanish"&gt;NHibernate-Hispano como si fuera un Blog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Y como todo: "Es cuestión de gustos". Porque sino, podés usar Gmail y listo! (que es lo que uso). Lo que no me puedo imaginar es: alguien participando en más de 5 listas de correos muy activas y usando la bandeja de entrada de Yahoo ó Hotmail; la verdad que creo que no debe ser muy cómodo. En fin, creo que Gmail se presta muy bien para esto, y las felicitaciones son para él, pero los aplausos...para Ajax, la verdad este conjunto de tecnologías metidas en una sola, se lleva todos los premios, y como viene la mano...es lo que se viene.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-114305678364092104?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/114305678364092104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=114305678364092104' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/114305678364092104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/114305678364092104'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/03/gmane-y-nhibernate-hispano.html' title='Gmane y NHibernate-Hispano'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113985839049597679</id><published>2006-02-13T15:49:00.001-03:00</published><updated>2006-02-13T16:19:50.496-03:00</updated><title type='text'>Grupo de Usuarios de NHibernate en Español</title><content type='html'>&lt;img src="http://groups.google.com.ar/groups/img/groups_medium_es.gif" alt="Google Groups" height="58" width="150" /&gt; Es un &lt;a href="http://groups.google.com.ar/group/NHibernate-Hispano?hl=es"&gt;Grupo de Usuarios de NHibernate en Español&lt;/a&gt; que está formandose, queremos sumar más gente e ir creciendo en experiencia con respecto a este Framework de Persistencia tan conocido, y con tan poca info en español.&lt;br /&gt;Bueno, nos vemos ahí !!!&lt;br /&gt;&lt;br /&gt;&lt;form action="http://groups.google.com.ar/group/NHibernate-Hispano/boxsubscribe"&gt;&lt;br /&gt; &lt;input name="hl" value="es" type="hidden"&gt;&lt;br /&gt; Correo electrónico: &lt;input name="email" type="text"&gt;&lt;input name="sub" value="Suscribir" type="submit"&gt;&lt;br /&gt;  &lt;/form&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113985839049597679?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113985839049597679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113985839049597679' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113985839049597679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113985839049597679'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2006/02/grupo-de-usuarios-de-nhibernate-en_13.html' title='Grupo de Usuarios de NHibernate en Español'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113518482528227821</id><published>2005-12-21T13:52:00.000-03:00</published><updated>2006-02-21T20:38:57.580-03:00</updated><title type='text'>Patron Proxy en C#</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este es un ejemplo del Patron Proxy adaptado x mí, lo traté de hacer lo suficientemente claro para que no requiera mucha explicación, pero...basicamente es:&lt;br /&gt;&lt;br /&gt;Empleado deriva de IPersona.&lt;br /&gt;Defino los metodos de Empleado (que son los metodos reales)&lt;br /&gt;Despues defino el Proxy que tambien deriva de IPersona, de modo que aun no estando instanciado realmente en memoria, puedo ocupar los metodos, de manera que retraso la instanciación (que es una de las motivaciones de este patron).&lt;br /&gt;Cuando deseo ocupar los metodos de Empleado, no lo trato directamente con él, sino con su delegado, es decir, el Proxy.&lt;br /&gt;&lt;/div&gt; &lt;pre&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;//&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Ejemplo Utilizando el patron Proxy&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;namespace&lt;/span&gt; sampleProxy3&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Class1&lt;br /&gt;{&lt;br /&gt;[STAThread]&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Main(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;{&lt;br /&gt;  IPersona obj = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Proxy();&lt;br /&gt;&lt;br /&gt;  obj.PonerNombre(&lt;span style="color: rgb(178, 34, 34);"&gt;"dario"&lt;/span&gt;); &lt;span style="color: rgb(0, 128, 0);"&gt;//este es el momento en que se crea&lt;br /&gt;                             verdaderamente el objeto pero ya puedo&lt;br /&gt;                             ocupar sus metodos.&lt;/span&gt;&lt;br /&gt;  obj.Imprimir();&lt;br /&gt;  Console.ReadLine();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;interface&lt;/span&gt; IPersona&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; ObtenerNombre ();&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; PonerNombre (&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; nombre);&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Imprimir();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Empleado : IPersona&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; Nombre;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; Empleado(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; nombre)&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; Empleado(){}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt; Miembros de IPersona&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; ObtenerNombre()&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.Nombre;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; PonerNombre(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; nombre)&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Imprimir()&lt;br /&gt;{&lt;br /&gt;  Console.WriteLine(&lt;span style="color: rgb(178, 34, 34);"&gt;"El nombre es: "&lt;/span&gt;+this.Nombre);&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; Proxy : IPersona&lt;br /&gt;{&lt;br /&gt;Empleado emp;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; PonerNombre(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; nombre)&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (emp == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;  {&lt;br /&gt;      emp = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Empleado();      &lt;br /&gt;  }&lt;br /&gt;  emp.PonerNombre(nombre);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Imprimir()&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (emp == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;  {&lt;br /&gt;      emp = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Empleado();&lt;br /&gt;  }&lt;br /&gt;  emp.Imprimir();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt; ObtenerNombre()&lt;br /&gt;{&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (emp == &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;  {&lt;br /&gt;      emp = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; Empleado();&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; emp.ObtenerNombre();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt; Un ejemplo de esto más tangible, es lo que hace el Visual Studio cuando se Agrega una Referencia Web -un Web Service-. Como vamos a necesitar ocupar los metodos del Web Service que lo tenemos en otra parte del mundo, primero te genera un proxy para que vos puedas interactuar con los metodos de las clases originales, sin interactuar con el objeto instanciado. De modo que el Intellisense nos deja ver todo lo que tiene para ofrecernos el Web Service.&lt;br /&gt;&lt;/div&gt; &lt;pre&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113518482528227821?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113518482528227821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113518482528227821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113518482528227821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113518482528227821'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/12/patron-proxy-en-c.html' title='Patron Proxy en C#'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113463094771588213</id><published>2005-12-15T03:45:00.000-03:00</published><updated>2005-12-15T04:22:13.603-03:00</updated><title type='text'>ORM Industria Argentina</title><content type='html'>&lt;div style="text-align: justify;"&gt;Leyendo un poco el mail de las listas del MUG (Grupo de Usuarios de Microsoft) descubri un Framework de Persistencia de Objetos para Punto Net, &lt;a href="http://workspaces.gotdotnet.com/retina"&gt;Retina.Net&lt;/a&gt;, y estuve mirando algunos ejemplos, y está un chiche!!! Actualmente está hosteado en &lt;a href="http://workspaces.gotdotnet.com/retina"&gt;GoDotNet&lt;/a&gt;, e incluye el source y un quickstart que esta muy bueno para comenzar a mapear objetos, donde te muestra en lo que pude ver, como crear tablas, triggers, y como crear una factura y sus lineas, y despues las mappea a todas juntas como parte de la misma factura, la verdad una maravilla !!!&lt;br /&gt;Es increible el trabajo que hizo Andres Vettori, está escrito en C# y aparentemente según lo que dijo lo está migrando al framework 2.0&lt;br /&gt;Con un ritmo constante, Andrés, va realizando actualizaciones, y corrigiendo errorcillos, y agregandoles cosas nuevas.&lt;br /&gt;Actualmente está en la versión 1.0.7 y sería muy interesante probarlo, usarlo y por sobre todo acercar los comentarios a este hombre que con humildad está dispuesto a escuchar.&lt;br /&gt;&lt;br /&gt;Estuve viendo a Retina y tratando de entender su operatoria y la verdad que vale la pena probarlo. Segun lo que ví mapea por medio de atributos, y no por medio de Xml como el NHibernate, pero no creo que esto sea una complicación, la cuestión es que mapea y lo hace bien.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113463094771588213?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113463094771588213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113463094771588213' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113463094771588213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113463094771588213'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/12/orm-industria-argentina.html' title='ORM Industria Argentina'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113263308843505616</id><published>2005-11-22T01:02:00.000-03:00</published><updated>2005-11-22T01:18:08.453-03:00</updated><title type='text'>Los Ingenieros del mañana</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/Parque.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/3699/1511/400/Parque.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Un día de recreación con amigos, celebrando el cumple de mi amigo Diego :)  en el Parque 2 de Febrero de la Ciudad de Resistencia, Chaco.&lt;br /&gt;Aqui, en esta foto, esta lo mejor que tiene la Tecnologica de Resistencia, si !!! esos somos nosotros, ja !&lt;br /&gt;De paso aprovecho para saludar para todos mi amigos, ya que pocas veces tengo tiempo para verlos y juntarnos: Un abrazo gente !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113263308843505616?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113263308843505616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113263308843505616' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113263308843505616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113263308843505616'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/11/los-ingenieros-del-maana.html' title='Los Ingenieros del mañana'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113262558725269405</id><published>2005-11-21T22:59:00.000-03:00</published><updated>2005-11-21T23:13:07.260-03:00</updated><title type='text'>Dario.Net en Google Reader</title><content type='html'>Otra de las Betas de Google Labs es Google Reader, es un lector de noticias (RSS), donde te podes suscribir a sitios por medio del Feed y leer desde ahí.&lt;br /&gt;Está muy bueno, tiene una interfaz web impresionante, tambien tiene un buscardo de Feeds.&lt;br /&gt;&lt;br /&gt;Así se vé Dario.Net en Google Reader&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/googlereader.0.gif"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/3699/1511/400/googlereader.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113262558725269405?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113262558725269405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113262558725269405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113262558725269405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113262558725269405'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/11/darionet-en-google-reader.html' title='Dario.Net en Google Reader'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113260292641612183</id><published>2005-11-21T15:57:00.000-03:00</published><updated>2005-11-21T16:57:50.646-03:00</updated><title type='text'>Una solución orientada a objetos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.db4o.com/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 175px; height: 62px;" src="http://www.db4o.com/img/h_logo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;i&gt;Carl Rosenberg,&lt;/i&gt; fue el creador de esta Base de Datos Embebida Orientada a Objetos. DB4O es una solución en lo aquellos casos donde no necesitamos un Super Motor de Base de Datos con toda la sobrecarga que ello implica.&lt;br /&gt;&lt;br /&gt;Lo bueno de este motor, es que facilita la persistencia de los objetos, o entidades de negocios, haciendolo de una manera mas nativa, o mejor dicho, lo mas nativa posible, ahorrandonos tiempo y complicaciones en la Capa de Acceso a Datos. O sea que si no queremos enfrentarnos con un NHibernate, Ojb.Net, o un Gentle.Net, esta prodría llegar a ser una buena opción.&lt;br /&gt;&lt;br /&gt;Otra cosa que tiene de bueno, es que ya sea para Java o .Net, funciona añadiendo al proyecto un Jar o una Dll respectivamente al proyecto y eso es todo lo que necesitamos  :D  Ademas, la Base de Datos que utilices es un solo archivo ".yap"&lt;br /&gt;&lt;br /&gt;Tambien podemos descargar de la Pagina Oficial el Object Manager, que esta desarrollado en Java y nos permite administrar los objetos de Nuestra Base de Datos.&lt;br /&gt;&lt;br /&gt;DB4O se puede utilizar con &lt;span style="font-weight: bold;"&gt;.Net&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Mono&lt;/span&gt; y &lt;span style="font-weight: bold;"&gt;Java&lt;/span&gt; :D  y esta por la version 5.0 - &lt;a href="http://www.db4o.com/community/ontheroad/downloadcenter/Default.aspx"&gt;Download Center&lt;/a&gt; -&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.db4o.com/img/Screenshot_db4o_ObjectManager.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.db4o.com/img/Screenshot_db4o_ObjectManager.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Tenés dos formas de hacer consultas, con QBE (Query-by-Example) y con S.O.D.A segun dicen, esta última parecer ser más flexible.&lt;br /&gt;&lt;br /&gt;En este ejemplo se utiliza QBE:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;public static void&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Main(&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;string&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;[] args)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;        ObjectContainer &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;objectContainer = &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;Db4o&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.OpenFile(DATABASE_FILE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        objectContainer.Set&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;(new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;Pilot&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);font-family:courier new;" &gt;"Michael Schumacher"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;, 101));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        objectContainer.Set(&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;Pilot&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);font-family:courier new;" &gt;"Rubens Barrichello"&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;, 99));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        objectContainer.Commit();&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;             &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;        ObjectSet &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;objectSet = objectContainer.Get(&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;new &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;Pilot&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;null&lt;/span&gt;, &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;101));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;        while &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(objectSet.HasNext())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;            Console&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.WriteLine(objectSet.Next());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;               &lt;/span&gt;&lt;span style="color: rgb(51, 153, 153);font-family:courier new;" &gt;            Console&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.ReadLine();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            objectContainer.Close();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113260292641612183?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113260292641612183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113260292641612183' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113260292641612183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113260292641612183'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/11/una-solucin-orientada-objetos.html' title='Una solución orientada a objetos'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113237900816955986</id><published>2005-11-19T02:22:00.000-03:00</published><updated>2005-11-19T02:43:28.193-03:00</updated><title type='text'>What  ???!!!</title><content type='html'>&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;Vean lo que es este trozo de codigo, y me parece que habla por si solo. Si... es lo que Uds piensan...es LINQ, Language INtegrated Query.. que te permite hacer consultas en pleno&lt;br /&gt;C# y VB, y no solamente a bases de datos, podes hacerlo como muestra el primer ejemplo, a un simple arreglo.&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; System.Query;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; Danielfe;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;class&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;span style="color:teal;"&gt;Program&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;st1:place st="on"&gt;Main&lt;/st1:place&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] aBunchOfWords = {&lt;span style="color:maroon;"&gt;"One"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"Two"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"Hello"&lt;/span&gt;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color:maroon;"&gt;"World"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"Four"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"Five"&lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; result =&lt;span style=""&gt;    &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; s &lt;span style="color:blue;"&gt;in&lt;/span&gt; aBunchOfWords &lt;span style="color:green;"&gt;// query the string array &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; s.Length == 5&lt;span style=""&gt;     &lt;/span&gt;&lt;span style="color:green;"&gt;// for all words with length = 5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt; s;&lt;span style=""&gt;               &lt;/span&gt;&lt;span style="color:green;"&gt;// and return the string&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:green;"&gt;//PrintToConsole is an Extension method that prints the value&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;result.Print();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style=";font-family:'Courier New';font-size:10;"  &gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;y para que lo vean como funcionaría con un SQL Server, va un ejemplo, y me parece que no hace falta explicarlo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; System.Query;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; Danielfe;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; System.Data.DLinq; &lt;span style="color:green;"&gt;//DLinq is LINQ for Databases&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;using&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; nwind; &lt;span style="color:green;"&gt;//Custom namespace that is tool generated &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:green;"   &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;class&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;span style="color:teal;"&gt;Program&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;st1:place st="on"&gt;Main&lt;/st1:place&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal;"&gt;Northwind&lt;/span&gt; db = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;Northwind&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"&lt;/span&gt;);&lt;span style=""&gt;   &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:teal;"&gt;Table&lt;/span&gt;&lt;&lt;span style="color:teal;"&gt;Customers&lt;/span&gt;&gt; allCustomers = db.GetTable&lt;&lt;span style="color:teal;"&gt;Customers&lt;/span&gt;&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; result = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; c &lt;span style="color:blue;"&gt;in&lt;/span&gt; allCustomers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; c.ContactTitle.Length == 5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt; c.ContactName;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;        &lt;/span&gt;result.Print();&lt;span style=""&gt;   &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style=";font-family:'Courier New';font-size:10;"  &gt;}&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;a href="http://msdn.microsoft.com/netframework/future/linq/"&gt;Proyecto LINQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &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/16067554-113237900816955986?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113237900816955986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113237900816955986' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113237900816955986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113237900816955986'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/11/what.html' title='What  ???!!!'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113225590694966582</id><published>2005-11-17T16:18:00.000-03:00</published><updated>2005-11-17T17:02:01.956-03:00</updated><title type='text'>Npgsql y .NET 2.0</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/pg.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3699/1511/320/pg.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/MyBlog.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/3699/1511/320/MyBlog.jpg" alt="" border="0" /&gt;&lt;/a&gt;Para los que quieren programar con Postgres SQL en .Net, les cuento que a este driver se lo puede Agregar al Toolbar y despues podemos arrastrar el componente hacia los winforms, es pura y exclusiva para programar en .Net. Esto esta muy bueno, y por sobre todo, lo mejor, es que funciona bien en el .Net 2.0.&lt;br /&gt;Veremos si los muchachos sacan una version exclusiva para este nuevo .Net, pero por ahora...Funciona.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php"&gt;&lt;span style="color: rgb(0, 51, 153);font-family:lucida,arial,helvetica;font-size:85%;"  &gt;&lt;b&gt;The npgsql Project&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113225590694966582?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113225590694966582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113225590694966582' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113225590694966582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113225590694966582'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/11/npgsql-y-net-20.html' title='Npgsql y .NET 2.0'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113225311712096433</id><published>2005-11-17T15:39:00.000-03:00</published><updated>2005-11-17T15:45:17.136-03:00</updated><title type='text'>NHibernate y .NET 2.0</title><content type='html'>En estos dias migré el Trabajo de Cliente Servidor que lo tenía realizado en un Visual Studio 2003 Professional, al tan esperado Visual Studio 2005 (Developer).&lt;br /&gt;El Wizard para importar proyectos de versiones anteriores se portó bastante bien (bueno en algunos casos hizo cualquier cosa pero bueno), por lo menos sirvió para presentar de nuevo el trabajo con algunas mejoras, en realidad el cambio surgió que tenía que hacer unos reportes a partir de un Dataset, con el Crystal Report, pero al parecer estaba pinchado, y no funcionaba bien, aparte de unos STOPs Windows XP al querer compilar muchos proyectos de una Solución, que incluso no me dejaban compilar el Enterprise Library 2005.&lt;br /&gt;Bueno entonces lo pasé a  un 2003 Server y donde tenía el VS 2005 y funcionó.&lt;br /&gt;Salvo con algunas problemas con las vistas de Diseño.&lt;br /&gt;&lt;br /&gt;Pero lo mas asombroso fue que funcionó el mapper de Objetos, o sea el NHibernate 1.0 !!!... una maravilla y no tuve que hacer nada respecto a eso. Segun estuve leyendo hay ciertas cosas que no son compatibles...habria que esperar una nueva version que sea totalmente compatible con ADO.NET 2.0.  Este es un link a un blog que habla un poco sobre el &lt;a href="http://frazzleddad.blogspot.com/2005/09/nhibernate-and-net-20-nullables.html"&gt;soporte de null con el NHibernateContrib&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113225311712096433?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113225311712096433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113225311712096433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113225311712096433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113225311712096433'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/11/nhibernate-y-net-20.html' title='NHibernate y .NET 2.0'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113026498006819159</id><published>2005-10-25T16:57:00.000-03:00</published><updated>2005-10-25T16:49:15.910-03:00</updated><title type='text'>NHibernate</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/confluence_logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3699/1511/200/confluence_logo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3699/1511/1600/clip_image001_0003.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3699/1511/200/clip_image001_0003.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;"NHibernate is a .NET based object persistence library for relational databases. NHibernate is a port of the excellent Java &lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);" class="nobr"&gt;&lt;a href="http://www.hibernate.org/" title="Visit page outside Confluence" rel="nofollow"&gt;Hibernate&lt;sup&gt;&lt;img class="rendericon" src="http://wiki.nhibernate.org/images/icons/linkext7.gif" alt="" align="middle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt; relational persistence tool."&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://www.nhibernate.org/"&gt;NHibernate&lt;span style="color: rgb(102, 102, 102);" class="nobr"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a title="Visit page outside Confluence" rel="nofollow"&gt;&lt;sup&gt;&lt;img class="rendericon" src="http://wiki.nhibernate.org/images/icons/linkext7.gif" alt="" align="middle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt; es una poderosa e útil librería para .NET de persistencia de objetos para Bases de Datos Relacionales (DB2, Oracle, SQL Server, PostgresSQL, MySQL entre otros).&lt;br /&gt;&lt;br /&gt;Mi experiencia con NHibernate fue en un proyecto para la Catedra "Desarrollo de Aplicaciones Cliente Servidor" de 4to año de la Carrera de Ing. en Sistemas de la Universidad Tecnológica Nacional, Facultad Regional Resistencia. El Sistema consistía en una aplicacion Cliente/Servidor que contaba con un cliente .NET, y un servidor PostgresSQL 7.4 bajo un SuSE Linux 9.1.&lt;br /&gt;&lt;br /&gt;Para realizar el trabajo y partiendo de 0% de conocimientos en Persistencia de Objetos nos valimos de herramientas que no ayudaron a trabajar con el NHibernate.&lt;br /&gt;&lt;br /&gt;Para la generación de Entidades utilizamos el &lt;span class="nobr"&gt;&lt;a href="http://www.objectmapper.com/Home/Default.aspx" title="Visit page outside Confluence" rel="nofollow"&gt;ObjectMapper&lt;sup&gt;&lt;img class="rendericon" src="http://wiki.nhibernate.org/images/icons/linkext7.gif" alt="" align="middle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt; &lt;/span&gt; que es una Herramienta de Generación de Código que permite extraer el Esquema de la Base de Datos y luego generar las Entidades en C# y los hbm.xml para el NHibernate. Por desgracia no está la posibidad de extraer el esquema de la Postgres automaticamente y se debe realizar a mano, obviamente, el ObjectMapper te permite hacerlo, pero hay mayor probabilidad de errores -nos ha pasado-.&lt;br /&gt;&lt;br /&gt;Otra tool muy útil ,para checkear las Entidades y los Resultados de las consultas en HQL, es el &lt;a href="http://www.ayende.com/projects/nhibernate-query-analyzer.aspx"&gt;NQL -NHibernate Query Analizer -&lt;span class="nobr"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.objectmapper.com/Home/Default.aspx" title="Visit page outside Confluence" rel="nofollow"&gt;&lt;sup&gt;&lt;img class="rendericon" src="http://wiki.nhibernate.org/images/icons/linkext7.gif" alt="" align="middle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt; Con ella podremos saber si nuestras entidades y las relaciones definidas en los hbm.xml estan bien.&lt;br /&gt;&lt;br /&gt;El NHibernate se conecta a la Postgres con un .NET Data Provider, &lt;a href="http://gborg.postgresql.org/project/npgsql/projdisplay.php" title="Visit page outside Confluence" rel="nofollow"&gt; Npsql&lt;sup&gt;&lt;img class="rendericon" src="http://wiki.nhibernate.org/images/icons/linkext7.gif" alt="" align="middle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Se pueden encontrar muchas información en &lt;a href="http://wiki.nhibernate.org/display/NH/Documentation" title="Visit page outside Confluence" rel="nofollow"&gt;NHibernate Documentation&lt;sup&gt;&lt;img class="rendericon" src="http://wiki.nhibernate.org/images/icons/linkext7.gif" alt="" align="middle" border="0" height="7" width="7" /&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113026498006819159?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113026498006819159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113026498006819159' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113026498006819159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113026498006819159'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/10/nhibernate_25.html' title='NHibernate'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16067554.post-113026894002637270</id><published>2005-10-25T16:31:00.000-03:00</published><updated>2007-05-31T19:14:50.690-03:00</updated><title type='text'>Tutoriales de NHibernate</title><content type='html'>&lt;div style="text-align: justify;"&gt;Modifico este post para agregar este tutorial en español:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://darioquintana.com.ar/articles/tutorial-de-nhibernate-primeros-pasos"&gt;Tutorial de NHibernate, primeros pasos&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Este es un muy buen tutorial donde se puede apreciar la potencia de NHibernate en el manejo de los objetos. El ejemplo esta basado sobre en un esquema relacional complejo, incluye el uso de discriminator en atributos, entre otras cosas.&lt;br /&gt;&lt;div style="text-align: center; color: rgb(51, 0, 153);"&gt;&lt;a href="http://www.theserverside.net/articles/showarticle.tss?id=NHibernate"&gt;Tutorial Server Site - 1era Parte&lt;/a&gt;&lt;br /&gt;&lt;/div&gt; &lt;div style="text-align: center;"&gt; &lt;div style="text-align: justify;"&gt;&lt;br /&gt;La segunda parte del Tutorial habla sobre el manejo de Sesiones.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.theserverside.net/articles/showarticle.tss?id=NHibernateP2"&gt;Tutorial Server Site - 2da. Parte&lt;/a&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;br /&gt;Este es un link a un tutorial de NHibernate bastante bueno hosteado en CodeProject. Al ejemplo es sencillo y le vendrían bien unas claves complejas para ejemplificar como se manejan -que muchas veces son un dolor de cabeza-.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.codeproject.com/dotnet/nhibernatept1.asp"&gt;Ejemplo de CodeProject&lt;/a&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16067554-113026894002637270?l=dariodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dariodotnet.blogspot.com/feeds/113026894002637270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16067554&amp;postID=113026894002637270' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113026894002637270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16067554/posts/default/113026894002637270'/><link rel='alternate' type='text/html' href='http://dariodotnet.blogspot.com/2005/10/tutoriales-de-nhibernate.html' title='Tutoriales de NHibernate'/><author><name>Dario Quintana</name><uri>http://www.blogger.com/profile/02691481413697562200</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://uooopaa.googlepages.com/P1010278_comp.jpg'/></author><thr:total>2</thr:total></entry></feed>
