NHibernate: Generar Entities C# 3.0

Durante estos días he estado metido en un proyecto para una universidad del Perú, la solución está basada en .Net y entre tantas reuniones que tuvimos para definir la arquitectura del proyecto, nos decidimos por usar: Spring .Net, NHibernate y algunos controles de AjaxToolkit. No entraré mucho en detalle en las partes que usamos de Spring .Net, pero pronto les daré una buena noticia al respecto.

Al punto al que iremos hoy es NHibernate, todos sabemos que Hibernate es para Java y NHibernate para .Net, por lo cual muchas veces encontramos más información para la versión de Java. Otro problema que tenemos siempre es el generar las entidades y los xml para mapear nuestra BD, sabemos (y lo sabemos muy bien) que el mapear con NHibernate es realmente pesado, tenemos diversas formas de hacerlo, manejar una "herencia", llaves compuestas, entre otras cosas. Pero gracias a Dios siempre tenemos algunos generadores de entidades y xml, que no debemos tomarlos como absolutos, pues todo generador puede tener errores.

Uno bueno que encontré fue el MyGeneration(1.3), que me permite ver varios templates de NHibernate e incluso poder modificarlos a nuestras necesidades. Llegué a probar todos estos y el que más me convenció fue el "Nhibernate Sharp 1.4", todo estaba bien, pero.......encontré que para cada entidad me generaba una interfaz e implementaba algunas cosas más que de repente no eran tan necesarias para mí. Otro punto en contra fue, estamos usando el framework 3.5, aprovechémoslo al máximo, utilicemos los constructores anónimos y la nueva forma de definir propiedades (más info aquí).

Entonces, teniendo la necesidad de eliminar algunas cosas que uno de repente no usa y actualizando la definición de la clase, además de tener la posibilidad de poder modificar el template, por qué no hacerlo? Ya que no encontraba ninguno por internet, me decidí a modificarlo y logré una versión "beta" por así decirlo de un generador de mapeos NHibernate que te genera, aparte de los xml, las entidades con lo básico que uno necesita, así como también utiliza el estilo de C# 3.0 que te permite tener constructores anónimos. El archivo lo pueden bajar de este link:

NHibernate C#3.0

Como podrán notar es solo un archivo de texto, lo único que tienen que hacer es, abrir el template de "Nhibernate Sharp 1.4", backupear el template (por si las dudas), y pegar el txt que han bajado del link, luego le dan grabar y listo.
Con esto ya tendrían listo su generador de entidades NHibernate basado en C# 3.0, pero OJO, lo repito, es una versión "beta", si obtienen algún error o algo por el estilo (que sea causado por el template), pueden escribir acá al respecto y si pueden dar recomendaciones o modificaciones que se deban hacer al template.

Cualquier actualización que llegue a realizar de este template lo colocaré avisando que hay nueva versión. Espero les sirva a todos este generador tal como me está sirviendo a mí.

Gracias por las visitas y los comentarios, me animan bastante a seguir colocando las cosas que investigo o vivo como Informático.

Enjoy it


Shinji

Lima Agile Day 2009

Se puede empezar este post con una frase (para aquellos que desarrollan software in-house o outsourcing), “El uso de procesos ágiles es lo mejor para Uds y para sus clientes”

El día de hoy fue realmente muy importante para mi vida profesional y la de muchos, pues nos permitió conocer un poco más sobre el mundo Agile.

Vamos con el reporte del Lima Agile Day 2009

El evento, tal como lo mencionan en su página Agile Perú, estaba dirigido para todos aquellos interesados en conocer y entender cómo aplicar las llamadas Metodologías Ágiles de Desarrollo de Software.

Se realizó en el auditorio de Cibertec, a donde llegué a las 9:02am, me dieron la bienvenida en la entrada y me dieron mi nombre para pegármelo, así como un par de tacos de hojitas para pasar preguntas a los ponentes(para hacerlo de forma ágil).

Al entrar al auditorio pude ver la introducción al evento, así como explicación básica de lo que era Agile, luego de esto se empezó con el primer item de las exposiciones:

Scrum, una nueva forma de desarrollar Software (Deusdit Correa)

Fue realmente importante este item para aquellos que no conocían mucho sobre Scrum, como yo, como son términos, historia y demás. Se trató al inicio un poco de dónde provenía Scrum (relacionado con el rugby Scrum), para luego mencionar sobre las metodologías ágiles existentes ( Lean, Scrum, Crystal y XP). Entre las categorías de términos se mencionaron las de Roles del Scrum(Product Owner, Scrum Master, Team), Reuniones de Scrum(Spring Planning, Daily Scrum, Definición de Done, Sprint Review, Sprint Retrospective, Story Time Meeting), Artefactos(Product Backlog, Sprint Backlog). A las finales se habló un poco de Scrum en la vida real, las empresas que lo usan, entre otras cosas. Aunque fue muy teórico el tema, de repente para algunos algo agotador ver demasiado texto(un poco de imágenes despierta la atención del público), el expositor estuvo muy preparado en el tema y, al momento de responder las preguntas del público, hizo notar claramente su experiencia en el tema.

¿Qué es y qué no? Scrum Master y Product Owner (Raúl Uribe y Gustavo Véliz)

La exposición estuvo realmente entretenida para la vista del público, empezando con algunas imágenes de los años maravillosos, IT Crowd y, no podía faltar, The Big Bang Theory xD. Esta item tocó temas interesantes respecto a las funciones que tenían los roles de Scrum Master y Product Owner, lo que deben y no deben de hacer, las cualidades que deberían de tener. Así también, hablaron un poco sobre sus experiencias en esos roles y cómo se equivocaron y aprendieron de estos errores(eso es muy bueno para todos).

Fundamentos de la Agilidad: Gente y Colaboración (Gustavo Quiroz)

El punto más importante de un desarrollo de software, ¿cuál es?: La gente. Ese fue el tema sobre el cuál trató este item, que se inició con una frase importante “Ninguna herramienta o metodología ha creado jamás, por sí sola, software”. Con esto se dio pase a hablar sobre la colaboración que es un punto esencial en el desarrollo de software, así como la identificación y retención de personas, el cultivar equipos de desarrollo de alto rendimiento, entre otros. Luego se mencionó lo que se debe de evitar en lo posible: Procesos impuestos, multitasking (que tiene un costo de task-switching, además dio un ejemplo muy claro de contar números y letras), Micromanagement (cuando tienen alguien casi siempre detrás suyo viendo lo que hacen), Crunch Time (muy conocido por la gente de nuestra área), Recompensar Individuos (puede generar mala competencia interna), espacios de trabajo inadecuados (cubículos como los de Dilbert XD), presión excesiva (la clásica frase “Para hoy, o sino….”), castigar equivocaciones (no nos permite innovar), entre otras. Así como se menciona lo que se debe evitar, mencionó lo que en verdad alenta: Auto-Organización, ambientes de trabajo adecuados, procesos creados por la gente, tolerar errores (nos permite investigar, equivocarnos en alguna tecnología y demás), slack, entre otros. En eso comenzaron a apurar al ponente (a mi parece debió tener un poco más de tiempo). Se terminó explicando las fases por las que pasa un equipo al momento de desarrollar software(forming, storming, norming y performing). Así también habló sobre su experiencia como Scrum Master y cómo pudo notar q el equipo aprendió a Auto-organizarse. Entre las preguntas que hizo el público se mencionó sobre un tipo de test social (por así decirlo) sobre “el buen samaritano”(no encontré link al respecto de la historia, si alguno de los asistentes tiene un link, se lo agradeceré ), en sí con esta historia trataba de explicar que cuando uno tiene el tiempo demasiado ajustado y una presión muy fuerte para hacer algo, no lo hace bien, no hace lo correcto. El expositor, está demá decirlo, tiene una buena experiencia como Scrum Master en varios proyectos, está bien empapado en el tema, así que sirvió muchísimo este item del Lima Agile Day 2009.

¿Por dónde comenzar? - Primeros pasos aplicando técnicas ágiles (Abner Ballardo)

Terminando las exposiciones, en este item se dieron las recomendaciones para dar los primeros pasos aplicando tecnologías ágiles. Se trataron recomendaciones para la parte de desarollo: Refactoring, patrones, Xunit, controlador de versiones, entre otros; para los Jefes de proyecto: Procesos iterativos, Documentación necesaria, escuchar y motivar; y por último al Usuario(nuestro gran amigo): Comprometerse, priorizar, entre otros. La exposición sirvió como base para alguien que piensa iniciar aplicando tecnologías ágiles, aunque algunos ya aplican todas estas cosas sin haber conocido el significado de Agile.

Terminando las exposiciones se sortearon algunos libros de regalo y un polo(yo quería el polo T_T). Luego de esto se realizó una retrospectiva solicitando a los asistentes escribir, en los papelitos que nos dieron al inicio, lo que nos pareció bueno, lo malo y las recomendaciones que teníamos (yo coloqué que debía haber Broadcasting del evento), estas notas debíamos colocarlos en la parte delantera del auditorio y luego de eso cada uno colocaría una rayita sobre las ideas que nos parecían correctas. El resultado de esto pueden encontrarlo de forma resumida en Agile Perú muy pronto.

Ahora la parte crítica, a mi parecer fue un evento que hizo notar en buena parte la organización del ambiente, regalos, registrados, entre otros, pero el tiempo de exposición de cada uno de los expositores debió haber tenido unos 15 minutos extras por si se prolongaba con preguntas u otros. En lo que son expositores, no puedo negar que la experiencia fue lo esencial ahí, todos demostraron su capacidad al exponer y lo preparados que estuvieron con presentaciones que atraían bastante al público. Por último, el sorteo donde se regalaron algunas cosas al público asistente fue un gran plus pues los regalos tenían que ver con el tema “Agile”.

Muy recomendable de mi parte, para todos aquellos que leen este blog, que asistan al próximo evento que pueda realizar Agile Perú. Así también, recomiendo visitar con frecuencia la página de los organizadores Agile Perú, donde podrán suscribirse a la lista de interés y estar al tanto de cualquier noticia de este grupo.

Espero les haya agradado el reportaje, así como el primer cambio de Theme que se realiza al blog, intentaré realizar más posteos no solo de código, sino de cosas que uno descubre día a día.

Saludos a todos


Actualización: Acá las fotos del evento


Enjoy it

Shinji

Política de Privacidad

Holas a todos, siento la falta de publicaciones de mi parte, cuando se ordenen los proyectos en los que estoy y haya un poco más de tiempo este sitio web pasará su información a otro sitio web que se tendrá en un hosting pagado por quien les habla.

Mas bien, tengo el deber de publicar esta política de privacidad en el sitio web debido a unas cosas que han pedido en el Adsense de Google.

Google utiliza empresas publicitarias asociadas para publicar anuncios cuando visita nuestro sitio web. Es posible que estas empresas usen la información que obtienen de sus visitas a este y otros sitios web (sin incluir su nombre, dirección, dirección de correo electrónico o número de teléfono) para ofrecerle anuncios sobre productos y servicios que le resulten de interés. Si desea obtener más información sobre esta práctica y conocer sus opciones para impedir que estas empresas usen esta información, haga clic aquí.

Christian Palomares Peralta

Shinji

User Controls

A partir de hoy intentaré escribir un artículo en mi blog sobre cómo resolver ciertas situaciones con las cuales uno se puede llegar a encontrar en el trabajo.

Para empezar, muchos de nosotros en el mundo de la programación nos encontramos en casos donde necesitamos repetir ciertos fragmentos de páginas web. Hablo de los obvios casos como el formulario para el logueo, el muy conocido:

Pero muchas sabemos que en el día a día de los trabajos, de los freelos que nos salen, nos encontramos con que no solo debemos construir algo así, sino que también debemos repetir ciertos componentes como “recuperar password”, “noticias del día”, “calculadora”(para casos como login a bancos) y demás.

Debido a esta necesidad que tenemos, en ASP.Net tenemos la oportunidad de construir nuestros propios controles, que son llamados “User Controls”.

Pero qué es un “user control”? Según la definición del mismo Microsoft, un user control es un tipo de control compuesto que trabaja como una página web ASP.NET, porque en este podemos agregar controles ya existentes (TextBox, Buttons, Grids, etc), definir propiedades y métodos para el control. Y además se pueden embeber dentro de una página ASP.NET para que trabajen unidas.

Entonces, particularmente podemos definir algunas características del User Control

- Permite reutilizar componentes como TextBox, Button, ListBox, CheckBox, etc.

- Permite definir propiedades y métodos

- Permite reutilizar otros user controls existentes

- La extensión de un user control es “.ascx”

- Permite manejar muchos eventos de la clase “Page” (como el Page_Load y otros)

Esas son solo algunas características que puedo mencionar. Pero vamos al grano, osea lo que le gusta más a la gente, el código.

Empezaremos con un ejemplo simple. Varios que ven este tema de User Controls, conocerán el clásico User Control que enseñan al inicio que es el de Login (http://www.15seconds.com/Issue/020319.htm). Pero, imaginemos un poco, si tenemos login, también podemos tener un “recuperar password”. Así que hagamos eso como primer ejemplo simple. Para esto, imaginemos, un requerimiento de nuestro cliente, es que el usuario pueda recuperar su contraseña por “usuario” o por “E-mail”, entonces para esto tenemos que colocar en nuestro User Control un “dropdownlist”, donde se colocará “usuario” o “E-mail”, un textBox donde colocará su información y, por último, un Button.

Para esto asumiremos que ya hemos creado nuestro Web-site y dando click derecho a la raíz seleccionamos “add New Item”, dentro de la ventana que nos sale seleccionamos “Web User Control”, le colocamos de nombre “wucRecoveryPass”.

Al darle click a “Aceptar” nos encontraremos con algo parecido a las directivas de una página web ASP.Net normal, algo así:

Jugando un poco con este user control, se pueden dar cuenta que es muy parecido a crear una página web común y corriente.

Entonces, luego de familiarizarnos con esto, procedemos a agregarle una tabla para darle forma y luego los controles que necesitamos. Finalmente tenemos el sgte código:


<table style="width: 100%;"> <tbody><tr> <td colspan="4"> <b> Si olvidó su contraseña, coloque sus datos necesarios para enviársela por E-mail </b> </td> </tr> <tr> <td> <asp:literal runat="server" id="ltrUsername" text="Usuario(o E-mail)"></asp:literal>
</td> <td> <asp:textbox id="txtDato" runat="server"></asp:textbox>
</td> <td> <asp:dropdownlist runat="server" id="ddlTipo"> <asp:listitem value="0" text="Usuario"> <asp:listitem value="1" text="E-mail"> </asp:listitem> </asp:listitem></asp:dropdownlist>
</td> <td> <asp:button runat="server" id="btnAceptar" text="Enviar E-mail"></asp:button>
</td> </tr> </tbody></table>

Teniendo este código, necesitamos alguna forma de acceder a los componentes (TextBox y DropDownList). Entonces procedemos a crear nuestras propiedades.


public partial class wucRecoveryPass : System.Web.UI.UserControl {
private int entero; public string DatoUsuario { get { return txtDato.Text; } } public string TipoDato { get { return ddlTipo.SelectedValue; } } protected void Page_Load(object sender, EventArgs e) { } }


Ahora sí tenemos todo lo necesario para poder utilizar nuestro control. Para eso creamos una nueva página web llamada “frmUsingUserControl.aspx”. Para utilizar este control tenemos que colocar algo muy simple en la parte superior de nuestro aspx.

Finalmente nuestro form queda de la sgte forma


<form id="form1" runat="server"> <style="width: 500px;"> <wuc:recoverypass id="wucRecov" runat="server"> </wuc:recoverypass></div> </form>

Hasta ahí tenemos algo muy simple. Pero cada uno puede ir experimentando muchas cosas como agregarle un evento al boton en la parte del diseñador del User Control. En ese caso verán que el evento se crea dentro del code behind de éste, pero si desean controlarlo desde la página misma, deberán de crear un delegado, asignárselo al evento del botón y listo. Con eso tienen todo el control que deseen sobre sus user controls, utilizarlos en sus proyectos, tenerlos para reutilizarlos en más de un proyecto, entre otras cosas.

Termino este pequeño artículo dándoles para pensar, cómo harían esas calculadoras que pueden variar de posición sus números cada vez que entran? Un claro ejemplo www.scotiabank.com.pe. Y para el sgte artículo, les dejo la pregunta, cómo harían de una forma dinámica crear un User Control que tenga varios TextBox, los cuales pueden variar dependiendo de un parámetro. Posteen sus ideas y en el sgte artículo les daré algunos tips que he descubierto utilizando los user controls.

Aparte, si es que llego a ir a la conferencia de Microsoft de este miércoles, les estaré informando al respecto.

Nos vemos

cya :3

P.d. Acá les dejo un link con el código fuente de lo explicado, así también el cómo agregarle un evento al botón de forma directa. Código Fuente

Shinji

Spring Community Day Lima 2008

Hoy se realizó el Spring Community Day en el auditorio de Cibertec, llegué a eso de las 9:05, felizmente no había empezado a la hora exacta, porque consideran a la gente algo tardona como yo XD

Bueno, al llegar me encontré con unos amigos que trabajan en Antartec y me senté a lado de ellos. Luego de eso llegó un amigo que, si mal no recuerdo, trabaja en siscom y se sentó a mi lado y conversamos sobre aquellos expositores.

Entonces la conferencia empezó muy bien....pero no, no iré contando todo como un relato, daré mi punto de vista, es decir, mi opinión sobre cada uno de los puntos que se trató. Así también diré lo que me pareció bien y lo que me pareció mal, para así, de repente, se pueda hacer un feedback =)!!!

Introducción a Spring Framework 2.5
Fue muy buena la presentación de Spring en general, donde se señaló una de las mejores características de este framework (IOC, inversion of control), señalando como inicio la clásica frase de Hollywood que se encuentra en varios libros "no nos llames, nosotros te llamaremos", con esta explicación y el primer ejemplo se me despejaron muchiiisimas dudas que tenía acerca del concepto de IOC, el nivel de visibilidad que tienen las clases POJO y demás temas. Pero no, esto no fue suficiente para el expositor, sino que también pudo mostrar lo nuevo de Spring 2.5, utilizando el potencial de las anotaciones en lugar de llenarnos más y más y muchiiiisimo más de un xml que se volvería un mounstro si no fuese por las anotaciones. La verdad me pareció muy bueno este módulo de la conferencia, en especial porque se equivocó en una parte, a mi parecer, siempre tiene que ocurrir eso, porque sino no se despierta la atención de los asistentes (sí, ya sé que salen silbidos, pero eso tb los despierta XD). En resumen, una buena explicación, muy bien el hecho de haber colocado ejemplos para cada parte, demostró la gran potencia de una de las características de Spring.


Spring MVC y Spring Portlet MVC
El estilo de explicación del expositor fue a lo "auto-pregunta y respuesta", me parece bueno debido a que así uno se ahorra en preguntar ciertas cosas xD.Me agradó bastante la introducción de por qué utilizar un framework en sí. La teoría mostrada sobre portlet MVC fue la más interesante, a mi parecer, pues se podía ver todo lo que se reducía con el hecho de utilizar Spring Portlet MVC y no hacerlo desde "cero". Lo que sí me pareció que faltó ahí para colocarle la cereza al postre, era mostrar un ejemplo donde se haya aplicado esto, o algún pequeño ejemplo preparado por el expositor, pero en todo lo demás muy buena, clara y rápida la exposición.


Spring Security
El expositor estuvo muy preparado en el tema, se notaba que tenía un amplio conocimiento al respecto. No sé todo lo que abarque Spring security, pero al hablar con algunos asistentes, me contaron que fue bastante amplia la explicación. Lo único que podría decir como críticaes que hubiese sido bueno un ejemplo, no una grandeza, para mostrar cómo se aplica esa seguridad en una aplicación algo simple, pues, creo yo, que si uno como no usuario de Spring ve todos esos temas de seguridad podría llegar a pensar algo como "Tengo que hacer TODO eso para colocar seguridad? No podría usar solo un poco de eso?". De repente me estoy equivocando, pero esto no opacó en nada el amplio conocimiento de seguridad departe del expositor.


Break.......
Sí, luego de eso vino el Break gracias a JoeDayz y estuvo muy rico :D


Spring Batch
Durante toda la exposición se atrajo la atención del público debido al tema de Batch, porque creo que muchos, como yo, se preguntaban...."batch? esto no son los bat y los sh?" y era obvio que la mayoría de los asistentes no conozcamos al respecto, pues, tal como mencionó el expositor, es un tema nuevo, es algo reciente, así que la posibilidad de que alguien lo conozca era mínima. Pero debo decir que la conferencia se dejó seguir muy bien, pues ese flujo que se mostró explicaba muy bien las cosas. Para este caso obviamente creo que no era necesario un ejemplo pues mas son temas teóricos, alcances de este nuevo tema y demás. Muy buena exposición la verdad.


Extreme Testing con Spring
Lamentablemente Gustavo Quiroz no pudo asistir debido a que se encuentra en Buenos Aires, asistiendo a unas conferencias de metodologías Ágiles. Pero.........qué más puedo decir? Bastante original la exposición, en todo momento supo cómo captar la atención del público con comentarios muy ciertos y a la vez chistosos sobre todos "nosotros" desarrolladores. Fuera de eso, los temas que abarcó fueron muy amplios en lo que es el testeo, trató bien el porqué del testeo, las facilidades que se nos da al testear y demás temas que mostraron que debemos de testear. No solo, sino que también hubo una muestra bastante práctica de JUnit. Luego de esto se hizo una muestra más pesada sobre JUnit con EasyMock (framework para lo que son mocks), aunque a mi parecer, fue......demasiado largo ese ejemplo XD. Al fin y al cabo, se mostró un principal caso que se tiene al usar mocks que sirvan para Request y Response. Muy buena la exposición, no se puede negar.


Spring Dynamic Modules
Qué es esto? El servidor de Spring (2 versiones, libre y otra que es pagada con soporte), la verdad dejó impresionados a todos el tema de manejar nuevos tipos de paquetes llamados "par" (así como hay war y ear, algo así). Aparte se trataron de temas como el concepto de un módulo y el agregar/remover módulos del servidor de aplicaciones en caliente, es decir, sin bajarse el servidor. La explicación de las capacidades, características, mediciones y demás del server fue bastante completa. Y el hecho de ver una aplicación funcionando en este nuevo servidor fue muy agradable para todos los asistentes :)!!!!


En resumen, fue de bastante agrado el ambiente ahí en la conferencia, las exposiciones en cuestión de conocimiento de temas fue bastante amplio, en relación a ejemplos, muy buenos y explicativos, aunque faltaron algunos ejemplos que hubieran ilustrado de una mejor forma el tema que trataban.

Estoy seguro que todo esto mejorará con el tiempo, pues para ser la primera vez han captado a muchos participantes.

Y, lo que me falta decir es FELICITACIONES a Lennon Shimokawa en especial porque, tal como lo dijo Abner en su exposición, fue el que hizo que esta conferencia se lleve a cabo, espero estas organizaciones sigan con un mayor apoyo y auspicio. Obviamente, no dejo de lado al felicitar también a los conferencistas que se esforzaron bastante para darnos una buena vista de lo que es Spring.

Mucho éxito a este grupo que ha puesto todo de sí en este Spring Community Day 2008

Acá el enlace del grupo 

http://www.springperu.org/

Y por último una foto de los expositores:


Pronto subiré más fotos de la conferencia =) <--- Ya fueron subidas las demás fotos

Información sobre el evento en la página del organizador (Lennon Shimokawa), ppts del evento, fotos, entre otros en el sgte link

Así también el blog de Lennon

Saludos a todos
cya :3

Shinji

P.d. Gracias por los comentarios =)