|
|
 |
|
 |
|
|
|
|
La Bitácora de Dúnadan Raptor
|
|
|
|
|
Author: |
Dunadan Raptor |
Created: |
Wednesday, March 01, 2006 |
 |
|
Experiencias con el área de desarrollo de software en ASP.NET |
By Dunadan Raptor on
Saturday, April 14, 2007
En la versión 4.5 de Dotnetnuke es increíblemente fácil actualizar un módulo de Dotnetnuke para que funcione con AJAX. En esta entrada se describe las dos maneras de aplicar AJAX en módulos Dotnetnuke.
Usando Control Definitions
Suponiendo que el servidor web en el que corre Dotnetnuke tiene AJAX instalado, al habilitar un control específico de un módulo para usarlo, el módulo completo es envuelto en un UpdatePanel. Esto se logra de dos maneras:
1) Al instalar el módulo agregar en el nodo Control este valor:
<code><supportspartialrendering>true</supportspartialrendering></code>
2) Con el módulo instalado ingresar a Host>Module Definitions>, seleccionar el módulo deseado y seleccionar el control para el que se habilitará AJAX y marcar el campo Supports Partial Rendering.

Cuando Partial Rendering está habilitado, se puede aprovechar la librería de AJAX de Microsoft y el Control Toolkit de Microsoft.
Para probar con un ejemplo simple, en una página con un par de controles de etiqueta (Label) y un Botón. La segunda etiqueta y el botón dentro de un UpdatePanel, la primera etiqueta fuera.

Luego, agregar un evento click vacío Click al Button, un timer y una actualización a los datos de las etiquetas.
<code>
System.Threading.Thread.Sleep(3000)
Label1.Text = DateTime.Now()
Label2.Text = DateTime.Now()
</code>
Al hacer click, la hora solo se actualizará la etiqueta que está dentro del panel y la otra permancerá sin cambios.

El desarrollador al control
Hay que recordar que solo puede existir un objeto ScriptManager en cada página, como Dotnetnuke es en realidad una página, lógicamente la responsabilidad de agregarlo dinámicamente debe recaer en el framework y no en los módulos. De eso precisamente se encarga la clase Dotnetnuke.Framework.Ajax. La clase presenta ocho métodos:

- AddScriptManager: usada internamente por el framework para agregar un control ScriptManager a la página.
- ContentTemplateContainerControl: Devuelve una referencia al control ContentTemplateContainer dentro de un UpdatePanel
- CreateUpdatePanelControl: crea una instancia de un control UpdatePanel de manera dinámica en la página
- IsInstalled: Retorna un valor de tipo boolean para determina si AJAX se ha instalado en el servidor.
- RegisterScriptManager: se usa para instruir al framework que AJAX es requerido para la página.
- RemoveScriptManager: Remueve el control ScriptManager durante el evento de Page Render si el método RegisterScriptManager no fue llamado.
- ScriptManagerControl: devuelve una referencia al control ScriptManager de la página.
- SetScriptManagerProperty: asigna valores a las propiedades del control ScriptManager usando reflection.
Usando IsInstalled() es posible determinar si AJAX se encuentra instalado en el servidor, al combinarlo con RegisterScriptManager se podrá instruir a Dotnetnuke que agregué el control ScriptManager para que el control del módulo puede acceder a Ajax. De esta manera el resultado del ejemplo anterior es exactamente el mismo sin necesidad de habilitar partial rendering en el control.
<code>If DotNetNuke.Framework.AJAX.IsInstalled() Then
DotNetNuke.Framework.AJAX.RegisterScriptManager()
'Do some stuff
End If
</code>
|
By Dunadan Raptor on
Monday, February 26, 2007
No tomar en cuenta los valores nulos en una aplicación puede causar estragos. En un datagrid, al obtener información que proviene directamente de una base de datos, hay que manejarlos vía código antes de que sean enlazados al control. Obviamente ayuda tener un par de clases utilitarias que manejen estos casos, pero igualmente es pesado hacerlo cada vez.
Con la introducción del control Gridview, es posible configurar declarativamente el comportamiento del control en caso de que reciba un dato cuyo valor es DBNullEsto se logra gracias a la propiedad NullDisplayText que los campos BoundField e ImageField pueden usar. Adicionalmente ImageField puede usar NullImageURL.
NullDisplayText, hace que el campo muestre un texto específico y NullImageURL una imagen.
|
By Dunadan Raptor on
Monday, February 19, 2007
En Scrum, el Propietario del Producto (PdP), es responsable de controlar que el proyecto retorne más valor que los recursos que se invierten en el. En otras palabras, el retorno sobre la inversión (ROI) del proyecto es su responsabilidad. En la práctica, el PdP resulta ser la persona que encarga el proyecto, ya sa comercial o internamente y luego recibe los entregables.
El PdP deberá tener un entendimiento a alto nivel y priorizar los requerimientos funcionales, no-funcionales y creativos del proyecto. Si controla adecuadamente que la funcionalidad sea priorizada, desarrollada e implementada para cumplir con los requerimientos de la organización, el proyecto debe obtener un beneficio directo en términos de ROI. Para lograrlo, el PdP tiene las siguientes responsabilidades relacionadas con el proyecto:
- Define las características del producto, la fecha de lanzamiento y contenidos,
- Reune información de los usuarios, involucrados y otros interesados para obtener una lista de requerimientos priorizados para el desarrollo del producto
- Retorno sobre la Inversión (ROI),
- Priorizar las característica de acuerdo al valor de mercado,
- Ajustar, si es necesario, las características y prioridad cada 30 días,
- Aceptar/Rechazar resultados.
El PdP es responsable de la ceremonia de la Planificación de Sprint.
Anterior: Parte 2: Preparación de un Proyecto con Scrum
Siguiente: Parte 4: Roles - Scrum Master
|
By Dunadan Raptor on
Monday, February 05, 2007
La diferente sintaxis de los nuevos controles compuestos (composite controls) de .net 2.0 suele provocar dolores de cabeza a quienes están acostumbrados a los de .net 1.X. Esta serie mostrará diferencias entre la forma de escribir algunas rutinas en un datagrid y el gridview. En esta primera entrada la diferencia entre distintos eventos Command y RowCommand.
Read More »
|
By Dunadan Raptor on
Sunday, February 04, 2007
Todo proyecto que usa Scrum empieza con la Preparación. El objetivo de la preparación es colocarse en un mínimo tiempo en una posición en la que el ciclo iterativo Scrum pueda empezar. Normalmente esta etapa es conocida como Sprint 0
Los elementos de la Preparación:
- Todo proyecto requiere un Caso de negocios y Recursos. Esto es independiente del método que se elija para ser realizado. Es importante entender el valor que un proyecto va a proveer a la organización, pero sabiendo que las estimaciones de esta etapa no son exactas por la naturaleza de alto nivel.
- Expresar la Visión del Proyecto ayuda a que el equipo comprenda la esencia de lo que el proyecto o producto intentan conseguir. La visión debe ser tan corta como sea posible pero debe comunicar la sustancia y caracter del emprendimiento.
- El primer Sprint provienen de la lista priorizada de la Lista de Tareas de Producto. Esta lista puede ser elaborada usando un documento de requerimientos, del Caso de Negocios o creada por el Propietario de Producto.
- No siempre todos los items de la Lista de Tareas de Producto pueden ser implementadas en la primera versión entregada. Y aunque fuese así, se pierde el beneficio de retroalimentación temprana de funcionalidad. Por ello en la Preparación se completa un Plan Inicial de Lanzamientos, que lista normalmente características prioritarias para ser incluidas en cada versión. Esta lista por supuesto esta sujeta a cambios. (Nota: cuando se implementa Scrum en medio de un proyecto, he encontrado muy útil el uso de una herramienta de control de cambios llamada Gemini).
- La Identificación de Involucrados potenciales debe realizarse lo antes posible. Es ideal que todo el que vaya a ser impactado por el proyecto debería recibir comunicación sobre él. En general se elabora un plan de comunicaciones sobre como se planea comunicar detalles del proyecto, incluyendo tiempos, contenido, tipo de comunicación. Una vez terminado el plan, se habla con los involucrados.
- Cuando se ha concluido con la identificación de roles y conformado el equipo, este debe ser convocado a una Reunión de Equipo. En ella se cubre:
- Alcance del proyecto
- Revisión de alto nivel de la Lista de Tareas.
- Discusiones técnicas
- Acuerdo inicial sobre la forma de trabajo. Ej, tiempos Scrum aplicables.
- Algunas tareas de Logística al iniciar el proyecto incluyen:
- Cuarto de reuniones para el equipo
- Reuniones entre Involucrados y Equipo de desarrollo
- Establecer, planificar y agendar reuniones con usuarios.
- Verificar disponibilidad de recursos (PC's, conexiones, permisos, software, etc).
- Comunicaciones. Si los equipos son dispersos, coordinar equipos de de colaboración como teléfonos, video conferencias y otros.
Al concluir la fase de Preparación el equipo debería estar listo para iniciar el Sprint 1. En la siguiente parte daremos un vistazo a los Roles que se usa en la metodología Scrum.
|
By Dunadan Raptor on
Thursday, February 01, 2007
Esta entrada inicia la documentación del proceso de implementación de Team System con uno de mis clientes.
Para empezar un par de definiciones:
Scrum es un proceso liviano de desarrollo ágil (Agile Development en inglés). Se usa para la administración y control del desarrollo de productos y software con prácticas iterativas e incrementales. En pocas palabras genera beneficios de manera rápida con implementación sencilla. Usa tres roles, tres ceremonias y tres artefactos:
- Roles: Propietario de Producto, Maestro Scrum, Equipo
- Ceremonias: Planificación de Sprint, Revisión de Sprint, y Reunión Diaria Scrum;
- Artefactos: Tareas de Producto, Tareas de Sprint, Cartel de Ejecución.
Visual Studio Team System es una solución de Microsoft para administrar el ciclo de vida de una aplicación en la empresa. Comprende herramientas para administradores de proyectos, arquitectos, desarrolladores, equipo de pruebas y profesionales de base de datos.
En toda metodología es crítica la recopilación de datos y repositorio de información administrativa del proyecto. Gracias al uso de VSTS, la aplicación de Scrum se ve facilitada. En esta serie del Blog, iré enlazando los distintos elementos de manera práctica y explícita.
|
By Dunadan Raptor on
Thursday, December 21, 2006
Después de algunos intentos manteniendo un sitio para la comunidad de desarrolladores, vi que no hay interés ni siquiera de algunos vendors. Por ello y una manera más tradicional, he decidio empezar a escribir en este Blog tanto en inglés como en español mis experiencias, consejos y trucos.
Read More »
|
By Dunadan Raptor on
Tuesday, December 19, 2006
Acabo de enterarme que en el sitio de www.asp.net, donde soy moderador, me concedieron el rango de estrella (Star) por las contribuciones al sitio. Espero llegar pronto a AllStar. Estoy en la posición 25 entre más de 88.000 miembros de la comunidad mundial de desarrolladores.
Lo bueno es que no tengo que preocuparme por paparazzi ni salir de juerga encubierto. La figura muestra mi posición y puedes ver el listado de los 25 primeros haciendo click en ella.

|
By Dunadan Raptor on
Saturday, June 10, 2006
Formo parte de un selecto grupo de desarrolladores que han sido invitados a moderar el Foro Oficial de Microsoft para ASP.NET. Desde el 2003 que participo como hooligannes y estoy entre los primeros 25 participantes. Es algo especial y me siento orgulloso de estar dentro de ese grupo y más, tomando en cuenta que soy el único de mi país y el único de latinoamérica, incluso de iberoamérica.
Diariamente dedico algunos minutos a revisar, aprobar y responder mensajes de usuarios de todas partes del mundo. Es una comunidad en la que se distingue los caracteres generales según los orígenes. Por ejemplo, los nórdicos y germanos tienden a ser bruscos, mientras los indios (hindúes) son sumamente insistentes y demandan respuestas al mismo tiempo que agradecen casi besando los pies. Los asiáticos tienden a ser muy educados. Pocos hispanolatinoamericanos participan y la mayoría se disculpa de antemano por su inglés. Notablemente no he reconocido a casi nadie de Africa.
Es una experiencia enriquecedora porque es verdaderamente como dicen. Una de las mejores formas de aprender es enseñando y me agrada poder ayudar y conocer nuevas cosas. He hecho amigos de todo el mundo: Australia, España, India, Estados Unidos, Irlanda, Italia, Alemania, Argentina, Paraguay, Inglaterra.
Es curioso que no haya una comunidad latinoamericana oficial de ese nivel. Mis recursos no dan para una iniciativa de ese calibre, pero le dedico unos minutos semanales a la comunidad boliviana manteniendo y actualizando el de boliviadev, un pequeño sitio para desarrolladores bolivianos. Espero que vaya creciendo de a poco. A la fecha hay 60 registrados y las visitas no han pasado de un promedio mensual de 600 desde enero de este año.
|
|
|
 |
|
 |
|