Posted By Néstor Sánchez on
Tuesday, February 24, 2009
El gerente de producto de la división de desarrolladores de Microsoft, Jason Zander, reveló en su blog algunas pantallas de la nueva apariencia de Visual Studio 2010.
Cada cierto tiempo la imagen de VS cambia. Lo que hace esta ocasión interesante es que se está usando como base el WPF del .NET Framework 4.0’s. Esto es completamente nuevo para mi ya que no descargué la versión beta de 2010 cuando estaba a punto de expirar en Enero y me parecía que era demasiado cargoso usar la máquina virtual con fecha atrasada.
Puedes ver las pantallas en el blog de Zander. A mi me gustan estos dos cambios:
- Mejores indicadores de agrupación de código
- Ventanas flotantes de documentos que pueden colocarse fuera del IDE (fantásticas para quienes trabajan con múltiples monitores)
No es un rediseño completo desde cero por lo que la interface se ve suficientemente familiar, probablemente preparando un cambio más drástico ahora que el cimiento WPF está en su lugar. Dudo que un cambio impresionante vea la luz en el próximo lanzamiento, lo más posible es que sea uno después. Con respecto al ciclo de VS 2010, cuando salga el nuevo beta contaré más sobre él.
|
Posted By Néstor Sánchez on
Friday, December 19, 2008
Me parece que la gente de más de 30 años no deja de sorprenderse con lo que es posible hacer estos días usando Internet. Ayer tuve una conversación con Don Worthley, creador de un módulo de DotNetNuke que vuelve simple la tarea de publicar contenido en módulos de DNN. Don es miembro del equipo del proyecto Blog de DotNetNuke, tiene 5 hijos y me lleva 3 años de edad.
Es engorroso estar usando más de un tipo de aplicación o interface para tareas similares y desde que el módulo Blog soporta la API MetaWeblog, tengo pocas excusas para no compartir información e ideas sobre una miríada de temas. Desde que es posible publicar contenido al modulo Blog de DotNetNuke desde Word/OneNote, estoy escribiendo más frecuentemente en mis blogs. Sin embargo, cuando se trata de sitios web estoy muy centrado en usar DotnetNuke y obviamente ees imposible no darse cuenta que la mayoría de los módulos no soporta la API MetaWeblog. Aunque existen razones válidas para esto, el modulo de Don, llamado metaPost, viene al rescate para usuarios que como yo necesitan o quierren agregar contenido rico a sus sitios web desde una aplicación de escritorio sencilla y poderosa como Windows Live Writer, o los mencionados Word/OneNote.
Estoy en proceso de implementar metaPost en el sitio de mi empresa y compartiré la experiencia en este blog. Mientras, puedes conocer más de metaPost en los enlaces de arriba. Asegúrate de ver los videos que explican la característica de Expanders, que permiten agregar contenido rico en tu sitio.
|
Posted By Néstor Sánchez on
Tuesday, October 23, 2007
¿Cuántos parámetros podemos adjuntar a un procedimiento almacenado?
Según MSDN: pueden ser hasta 2100!!!
|
Posted By Néstor Sánchez on
Tuesday, September 18, 2007
Visual Studio team System es la solución de Microsoft para el manejo del ciclo de vida de aplicaciones. Para manejar un proyecto de creación de un directorio en asp.net para RockAndBol.com decidí usar este sistema y luego documentar mis experiencias en el Blog a modo de referencia para otros.
|
Posted By Néstor Sánchez on
Tuesday, September 18, 2007
Tal como los miembros de la Alianza Agil (Agile Alliance) previnieron, mucha gente piensa que las metodologías de desarrollo ágil equivalen a métodos livianos (en el sentido de light), provocando una falsa visión respecto a su seriedad o utilidad.
Jim Highsmith, uno de los fundadores resume en su sitio la esencia de la Agilidad, comprendida como aproximación al desarrollo:
"El futuro de la ecomomía de nuestra Era de la Información le pertenece a los Ágiles, aquellas organizaciones que tienen la capacidad de crear cambio, e incluso un poco de caos, para sus competidores. Si puedes innovar mejor y más rápido--puedes crear cambio para los competidores. Si puedes responder rápidamente a iniciativas competiticas, nueva tecnología, y requerimientos de clientes-- creas cambio para los competidores. Si eres más lento, menos innovador, tu respuesta es menor - entonces estás condenado a estrategias de sobrevivencia en un mar de caos impuesto por otros. Va a ser tu compañía la que imponga el ritmo de cambio, o serán los competidores quienes lo hagan? En un mundo de constante cambio, los rigorosos y tradicionales métodos de administración de proyectos y desarrollo de software son insuficientes para el éxito." (Jim Highsmith).
Dos de los preceptos del Manifiesto para el Desarrollo Ágil de Software afirman que son a) las herramientas y los procesos los que deben adecuarse a la gente y sus interacciones y b)que el principal énfasis está en la producción de software funcional antes que enfocarse en documentación exhaustiva.
Dentro de las tareas del día a día es fácil olvidar esta perspectiva, pero he encontrado que enfocarme en los dos primeros a toda costa me ha ayudado a cumplir con tiempos de entrega; enfrentando menos errores y logrando mayor satisfacción del cliente.
De manera obvia el resultado de alinear los objetivos del proveedor con los del cliente es una colaboración permanente que minimiza, como consecuencia, la discusión de términos contraactuales. El uso de metodologías Ágiles contribuye a que esto suceda de manera natural.
Finalmente la familiarización con un cambio constante, implica adaptarse al cambio y ser muy rápido para reaccionar. La programación que se basa en métodos ágiles implica ser capaces de abandonar planes para poder reaccionar a tiempo.
En siguientes entradas publicaré anotaciones de mi experiencia con aplicación de la Agilidad en proyectos del mundo real.
Son bienvenidas preguntas, comentarios y sugerencias, pero via el foro de discusión.
|
Posted By Néstor Sánchez on
Thursday, September 13, 2007
Al usar un Panel Extender el posicionamiento es correcto en Firefox pero en las versiones de Internet Explorer solamente se puede asegurar un lugar fijo incluyendo los items dentro de un panel al que se le asigna un estilo. Por ejemplo al panel:
<code><asp:Panel ID="pnlMyPanel" Height="100px" width="80px" CssClass="pnlPanelExtender" runat="Server"></code>
Y en la hoja de estilos o una etiqueta style:
.pnlPanelExtender{position:relative;}
|
Posted By Néstor Sánchez on
Friday, August 03, 2007
Este artículo en la revista Dr Dobb's Journal describe cuatro señales que indican cuando una persona está microadministrando:
- Ignorar momentos de reportes acordados y pedir reportes de estado más frecuentemente.
- Enojarse porque las personas fallan en las entregas.
- Cambiar constantemente asignaciones/tareas de trabajo.
- Dictar implementaciones en vez de requerimientos.
Uno de los resultados es que la administración de un proyecto falla en proporcionar "Empoderamiento" al equipo. El empoderamiento es uno de los tres elementos básicos de la administración de software según Mark I. Himelstein. Los otros dos son Ejecución y Comunicación.
Para Himelstein el administrador de software "tiene que dar una oportunidad a la gente para que pueda hacer su trabajo en un ambiente positivo. Los problemas deben ser enfocados como cosas a resolver. Es necesario engendrar confianza para obtener la verdad cuando se pide un [reporte de] estado. Empoderamiento también significa dejar que los empleados ayuden a desarrollar sus propios horarios. Mientras el administardor pone una meta para el lanzamiento, se deben rectificar diferencias entre las metas para el contenido del lanzamiento, las metas para los tiempos del lanzamiento y los recursos a mano"
Precisamente en uno de los podcasts de The McCarthy Show, Jim McCarthy que trabajó para Microsoft por años, habla de tres elementos que son comunes a todos los proyectos de software: Funcionalidad, Tiempo y Presupuesto y que cuando uno de ellos debe ser cambiado, necesariamente debe alterarse los otros dos. Himelstein, en su artículo, aunque no habla de presupuesto, se refiere a Recursos -es decir desarrolladores-, y Calidad.
Ajustar el equilibrio de estos elementos, es uno de los trabajos del administrador del proyecto. En la industria del software es regla general el "se necesita para ayer", que resulta en cronogramas irreales. Una de las comunes es que el administrador termina metiéndose en todos los detalles posibles sin poder hacer su propio trabajo bien.
¿Qué piensas? ¿Cuál es tu experiencia? Házmelo saber en el foro que acabo de abrir para discutir experiencias.
|
Posted By Néstor Sánchez on
Thursday, May 31, 2007
Una de las funcionalidades que ayuda a recuperar tiempo con Visual Studio es la de poder ver de inmediato cuando se abre un proyecto, los archivos más recientes con los que se estab trabajando. Pero si algún archivo se corrompe, es posible que Visual Studio no pueda iniciarse porque el archivo no se puede abrir. En este caso, es posible removerlo desde el registro. La clave FileMRUList tiene la lista de los archivos que estaban abiertos la última vez que se trabajó con el proyecto:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\FileMRUList
Removiendo el archivo de la lista VS vuelve a abrirse. No he experimentado si el orden de los archivos altera en algo el comportamiento así que si aplicas este truco, mejor pruebas reordenando los números de archivo.
|
Posted By Néstor Sánchez 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>
|
Posted By Néstor Sánchez 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.
|
Posted By Néstor Sánchez 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
|
Posted By Néstor Sánchez on
Saturday, February 10, 2007
A medida que pasan los años algunos reconocimientos te empujan a seguir porque con ellos te das cuenta que algo estás logrando. Eso es lo que acaba de pasar con este Blog. Las entradas de la sección ASP.NET según Dúnadan Raptor serán agregadas en los blogs en español de www.asp.net el sitio oficial de Microsoft para la tecnología de desarrollo de aplicaciones web.
Mi primera entrada agregada es Transformando Datagrids en Gridviews: Parte 1, ahora, además de ser moderador de los foros y uno de los 25 primeros en puntaje, es un honor destacar de latinoamérica al mundo. A pesar de que el sitio de asp.net en español tiene mucho camino por recorrer, es reconfortante formar parte de un grupo selecto de desarrolladores.
|
Posted By Néstor Sánchez 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.
|
Posted By Néstor Sánchez 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.
|
Posted By Néstor Sánchez 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.
|
Posted By Néstor Sánchez 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.

|
Posted By Néstor Sánchez 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.
|