follow Fernik at http://twitter.com
Fernik en Geeks·ms

Fernik en Geeks·ms

Entre Desarrollo y Testing, y todo el universo que hay entre ambos
TechDays 2009 >> Demo Code

Este post es sólo para publicar la aplicación de ejemplo que mostramos con Daniel Montero en TechDays 2009 en la sesión de "Cómo Desarrollar Aplicaciones .NET que aprovechen las nuevas características de Windows 7". Les recuerdo que el foco de la aplicación es destacar todas las features de la Taskbar, aunque les va a resultar útil si se quieren familiarizar con el control Ribbon para WPF y Linguistic Services.

Al control Ribbon administrado para WPF lo pueden descargar de http://msdn.microsoft.com/en-us/office/aa973809.aspx haciendo click en "License the Office UI".

 

Office 2010 Technical Preview >> Developer Review

Afortunadamente he tenido la oportunidad de ser invitado para evaluar un Technical Preview de Office 2010(léase pre-beta). Si bien hay muchas novedades en lo que se refiere a experiencia de usuario y a los Office servers(de los cuales no tengo permiso para publicar información), quiero hacer foco en las herramientas de desarrollo de las aplicaciones clientes de Office 2010. Con esto pretendo abarcar las herramientas de extensibilidad para el desarrollador profesional(que emplea Visual Studio) como para el  usuario avanzado(que se vale de macros).

Todas las aplicaciones clientes de Office 2010 incorporan en su instalación un componente conocido como "Visual Studio Tools for the Office System 4.0 Runtime" el cual permite ejecutar las soluciones que desarrollemos con Visual Studio 2010 Beta 1.

 

Las soluciones Office son muy utilizadas a nivel empresarial. Visual Studio 2010 además de instalar el mismo runtime, proporciona herramientas integradas para crear soluciones con código administrado que utilizan la interface de usuario de Microsoft Office.  Realmente no hay diferencia con la versión 3.0 de Visual Studio Tools for Office que encontramos en Visual Studio 2008 SP1, ya que se incluye el mismo set de  plantillas para crear soluciones desde Visual Studio. En este aspecto esperaba plantillas para Publisher, OneNote y Access. Las únicas nuevas características anunciadas tienen que ver con la instalación de soluciones Office más que con su desarrollo concreto, pueden encontrar más información aquí

Con respecto a la extensibilidad de los clientes Office en sí, todos excepto InfoPath 2010 siguen valiéndose de Visual Basic for Applications 6.5. 

InfoPath 2010 no incorpora ninguna novedad en cuanto a extensibilidad ya que conserva el mismo Visual Studio Tools for Applications 1.0(basado en el .NET Framework 2.0) que incorporó en su versión 2007. 

Luego de describir las pocas novedades en extensibilidad de Office 2010 me doy cuenta de la cantidad de código de legado que depende de VBA, si bien yo no desarrollo en Visual Basic 6.0 desde el 2000 es increíble la aceptación y la extensibilidad que ha porporcionado este lenguaje a la suite Office a través de la IDE de VBA. Microsoft ya no vende VBA a nuevos clientes, además no lo recomienda a sus partners como mecanismo de extensibilidad en aplicaciones de escritorio(leer http://msdn.microsoft.com/en-us/isv/bb190538.aspx) y al mismo tiempo fomenta el uso de VSTA. Actualmente VSTA está en su versión 2.0 y proporciona un IDE similar al de VS 2008 con soporte para el .NET Framework 3.5. 

Evidentemente tenemos el patrón "Haz lo que yo digo pero no lo  que yo hago". Creo que que es momento de habilitar a la suite Office con .NET en este sentido, así de a poco VSTA y .NET se convertirán el el mecanismo de extensibilidad por defecto. Comparativamente las aplicaciones clientes Office están muy desacopladas de .NET, lo que aspiro es un nivel de acoplamiento similar al de los sistemas Windows con .NET. Sin discontinuar el soporte para VBA, ya que sino muchos add-ins, plantillas y macros no funcionarían.

Me gustaría conocer las opiniones que tienen los lectores de este artículo respecto de la extensibilidad de Office y si realmente valorarían y utilizarían un mecanismo de extensibiliad basado en VSTA y .NET.

Imagine Cup Web Slice y People’s Choice Award

Hola, quería compartir 2 novedades. La primera es que en http://www.ieaddons.com/en/details/news/Imagine_Cup_2009/  van a encontrar el Web Slice de Imagine Cup 2009 para Internet Explorer 8. Realmente el creador de este slice se lució. Utiliza Silverlight y ASP.NET como frontend y toda la lógica de backend se realiza a través de un .NET Web service hosteado en Windows Azure que se encarga de administrar la sincronización con las fuentes de datos del slice. Simplemente combina la última tecnología y proporciona un web slice único. El creador es Sergei Golubev por si quieren visitar su blog.

La segunda novedad es que esta final el público en general va a poder votar en la competencia más importante que es Software Design. Navegando en http://peopleschoice.imaginecup.com/default.aspx van a poder ver los videos de todos los finalistas de Software Design y emitir su voto. El proyecto ganador recibirá el premio People’s Choice Award. Cabe destacar que  las votaciones a través de  la web no influyen para nada en el criterio de los jueces al seleccionar los proyectos ganadores. Pero resultará interesante comparar ambos resultados una vez conocidos los ganadores.

image

 

Posted: 29/6/2009 17:38 por Fernik | con no comments
Archivado en: ,
Rumbo a la final de Imagine Cup 2009 en Cairo

  Luego de mucho tiempo sin postear, quiero compartir la alegría que siento por haber sido seleccionado para integrar el distinguido panel de jueces para la final de Imagine Cup 2009 en Cairo, Egipto. El evento tendrá lugar en el hotel Intercontinental Citystars Cairo desde el 2 al 8 de julio.

Voy a tratar de transmitir en el blog el día a día con fotos y reporte de actividades durante los 5 días de intensa competencia. También voy a escribir sobre los proyectos más innovadores que encuentre y si tengo suerte entrevisto a Ray Ozzie que va a estar presente(así que se aceptan preguntas y sugerencias). Mi intención es priorizar los proyectos de todos los finalistas de países hispano parlantes así que nos buscamos en Cairo así traemos la exclusiva de Imagine Cup a geeks.ms.

Posted: 25/6/2009 23:34 por Fernik | con 2 comment(s) |
Archivado en: ,
Materiales del LiveMeeting de Visual Studio 2010 con el Bruno

Para los que no pudieron asistir al LiveMeeting de Visual Studio 2010 con el Bruno, les dejo los materiales(slides y replay) del evento.

 

Fernik

Posted: 19/3/2009 2:21 por Fernik | con 2 comment(s) |
Novedades en Visual Studio Team System 2010 con el Bruno (actualizado)

Actualización: Por razones de fuerza mayor hemos pasado el LiveMeeting de VSTS 2010 al próximo miércoles 18/03/2009 a la misma hora y accediendo por la misma URL de reunión. Nos vemos la semana que viene. Cualquier consulta me escriben un email o me contactan por Messenger.

  Calendario del evento para Outlook: http://visualstudio2010.events.live.com/event.ics

Facebook RSVP:  http://www.facebook.com/home.php?#/event.php?eid=82661308568

También les dejo el horario para las principales ciudades de habla hispana actualizado, ya que que muchos países en esta semana atrasan 1 hora sus relojes por el fin del horario de verano, con lo cual el horario local del evento se ve afectado. De todos modos verifiquen el horario correspondiente a su cuidad aquí si no se encuentra listada.

Ciudad

País

Hora

Lima

Peru - Lima

16

PM

Santiago

Chile

17

PM

La Paz

Bolivia

17

PM

Sao Paulo

Brazil - São Paulo

18

PM

San Pedro Sula

Honduras

15

PM

San Salvador

El Salvador

15

PM

Montevideo

Uruguay

18

PM

Caracas

Venezuela

16:30

PM

Panama

Panama

16

PM

Asuncion

Paraguay

17

PM

Santo Domingo

República Dominicana

17

PM

Bogota

Colombia

16

PM

San Jose

Costa Rica

15

PM

San Juan

Puerto Rico

17

PM

Buenos Aires

Argentina

18

PM

Guatemala

Guatemala

15

PM

Miami

U.S.A. - Florida

17

PM

Quito

Ecuador

16

PM

Madrid

España

22

PM

El programa académico Microsoft Student to Business e Ineta Latam (comité académico) te invitan a una sesión con el Bruno que va a estar en vivo y en español el próximo miércoles 18 de marzo del 2009 a las 21:00 GMT/UTC.

LiveMeeting: Novedades en Visual Studio Team System 2010
Descripción: La próxima versión de Visual Studio Team System incluye muchas primicias y grandes cambios dentro de la misma. En los 90 minutos de la sesión, repasaremos las nuevas herramientas dentro de Visual Studio, las novedades en TFS 2010, los cambios que se han incluido dentro de las nuevas versiones de C# y Visual Basic.Net y muchas más cosas (siempre teniendo en cuenta el límite de tiempo, porque en realidad, VSTS 2010 posee material para varias sesiones)

Presentador: Bruno Capuano
Bruno es un experimentado y proactivo desarrollador y arquitecto de software con una probada trayectoria de construcción de soluciones basadas en tecnología Microsoft. Durante sus 7 años en la industria del software ha pasado por roles en desarrollo, análisis de sistemas y administración de proyectos usando tecnologías como .Net, C#, XML, SOA en un gran número de proyectos de gran envergadura en diversos países. Además ha participado de varios eventos importantes de la industria.
Bruno es también el webmaster de la comunidad Microsoft: El Bruno (www.elbruno.com), donde comparte su conocimiento acerca de tecnologías Microsoft, en su experiencia diaria. También comparte sus hobbies tecnológicos y las pruebas que realiza en productos en fase beta.
MVP profile: https://mvp.support.microsoft.com/profile/Bruno.Capuano

Link de la reunión: https://www.livemeeting.com/cc/microsoft/join?id=936SZF&role=attend

Como siempre voy  a estar 1 hora antes del evento para asistir con cualquier problema de audio o de inicio de sesión en LiveMeeting, cualquier consulta les dejo mi dirección de messenger para que me encuentren OnLine fhualpa@REMOVERMAYUSCULASmsn.com.

Nos vemos

Fernik

Posted: 5/3/2009 18:58 por Fernik | con 5 comment(s) |
Testing Windows 7: PC SafeGuard

windows-7-logoSi bien me parece un excelente movimiento que Microsoft haya hecho pública y masiva la Beta 1 de Windows 7 hay ciertos aspectos que no se tuvieron en cuenta y que pueden agregar mucho valor al momento de testear Windows 7. Por ejemplo si bien los bits pueden ser descargados todavía desde Microsoft Connect en https://connect.microsoft.com/Downloads/Downloads.aspx?SiteID=704, no hay una manera de retroalimentación, agrupación ni votación como lo hay en la beta del Service Pack 2 de Vista/Server 2008 en donde hay una beta pública y otra privada. Sólo los suscriptores de MSDN y Technet tienen acceso a un mini sitio en Connect que permite votar y proporcionar feedback acerca de los bugs. Lo mejor está en la beta privada en donde hay muchos más recursos y todos podemos compartir los casos de prueba y experiencias de desarrollo con las nuevas APIs. Como me han permitido postear siempre y cuando lo que escriba contribuya a un mejor Testing por parte del público en general, pues aprovecharé esta ocasión para hablar de PC SafeGuard el cual parece que nadie sabe de su existencia y que está necesitando feedback urgentemente.

Windows 7 incorpora nativamente la funcionalidad que se encuentra en Windows SteadyState pero se la ha rebautizado PC SafeGuard. Cabe destacar que SafeGuard no es SteadyState al 100% pero lo importante es que es una característica que está destinada a quedarse, y en versiones posteriores de Windows se alineará por completo con la visión de SteadyState.

steadyState

Esencialmente PC SafeGuard es como la característica InPrivate Mode + Protected Mode de Internet Explorer 8, pero con un alcance más amplio ya que abarca todo el sistema operativo Windows. SafeGuard tiene como target o como audiencias primarias al comprador de su primer PC, a la PC de familia y a la PC pública. El comprador de su primer PC siempre se enfrenta con la resistencia a interactuar con el sistema por miedo a romper algo, la PC de familia siempre está expuesta al uso por partes de terceros ya sean invitados, niños, personas mayores, etc. Finalmente la PC pública que se encuentra en cualquier escuela o biblioteca, o en un Internet Café es la más promiscua de todas. SafeGuard apunta a que el usuario principiante desarrolle la confianza necesaria y se sienta cómodo para aprender a utilizar Windows en un ambiente temporal con la trnaquilidad de que no se producirán cambios destructivos o escrituras a disco no autorizadas y que los usuarios más avanzados tengan la garantía de que pueden utilizar Windows en un ambiente transitorio sin exponer su información de manera casual.

Para utilizar SafeGuard, debemos estar loguados con un usuario con privilegios administrativos proceder de la siguiente manera:

  • Crear una cuenta de usuario Standard.

userAccounts

accountName

  •  Seleccionar la cuenta de usuario Standard creada para habilitar SafeGuard.

accouuntChange

SafeGuardEnabled

Para usar la cuenta SafeGuard realizar los siguientes pasos:

  • Cerrar la sesión actual e iniciar sesión con la cuenta SafeGuard.

login

Luego de iniciar sesión con la cuenta SafeGuard el perfil de usuario es reseteado y cargado. Windows se encarga de informar al usuario sobre SafeGuard.

safeguardDesktop

Finalmente, el usuario está en condiciones de intractuar con Windows cambiando las fuentes, el background, el protector de pantalla, instalando software y escribiendo datos en el directorios ajenos al del perfil del usuario. Windows 7 notificará al usuario constantemente de los posibles riesgos de almacenar datos en cualquier unidad bloqueada por SafeGuard pero en forma no intrusiva.

fileTest

Si posteriormente se cierra la sesión, toda la información almacenada en los directorios del perfil de usuario se perderá y el sistema volverá a un estado inicial intacto, por eso al usar SafeGuard siempre utilizar almacenamiento externo para trabajar con documentos.

El concepto de diseño de SafeGuard es proveer un entorno Windows que no se dañe cuando se comparte con terceros, por eso:

  • No se permiten cambios de configuracion en el sistema.
  • No se permiten instalaciones de software.
  • No se permite la escritura fuera de los directorios del perfil de usuario.
  • Los datos en el perfil de usuario son limpiados.
  • Es compatible con Windows Parental Control.
  • PC SafeGuard User = Windows Standard User Account + Atribución SafeZone. SafeGuard se manifiesta en el sistema a través de la atribución de cuenta de usuario SafeZone.  La atribución  SafeZone, permite a los usuarios utilizar el ordenador en modo exploratorio, el cual automáticamente descartará cambios y acciones al cerrar la sesión o desloguearse. La atribución SafeZone sólo se puede activar para la cuenta de usuario standard en Windows 7. Al activarse esta atribución, la cuenta de usuario es añadida a un grupo local de usuarios llamado "SafeZone". Para evitar cambios a nivel de sistema, SafeGuard bloquea todas las unidades de disco locales y carpetas aplicando un ACL de negacion de escritura.  Es importante destacar que el hecho de agregar una cuenta de usuario Windows al grupo SafeZone no garantiza que esa cuenta posea la atribución SafeZone. La atribución SafeZone involucra otras cosas aparte de agregar un usuario a un grupo específico con diferentes permisos, por eso siempre activar SafeGuard desde el panel de control.
  • El volúmen de sistema siempre se bloquea. Otros volúmenes NTFS son bloqueados por defecto y pueden ser desbloqueados mediante la configuracion avanzada "Lock Disk Drives".

lockedDrives

Para cerrar les dejo una tabla comparativa de las funcionalidades soportadas por las cuentas SafeGuard y por las cuentas Guest. Analizándola se deduce que una cuenta SafeGuard es más flexible y permisiva(color verde), lo que la hace ideal para ser la nueva cuenta de invitados en Windows para PCs de hogar. Mientras que una cuenta Guest es más restrictiva(color rojo), lo que la hace ideal para ser la cuenta de invitados en un ambiente empresarial.

safeguardvsguest

A continuación les proporcionaré algunos escenarios de prueba para que se entretengan con esta nueva característica, miren que es importante encontrar bugs, sobre todo si son bugs que demuestran que SafeGuard no elimina los rastros de los usuarios que interactuaron con Windows, como aplicaciones instaladas, controles ActiveX, documentos, archivos varios, etc.

Escenario 1: Crear y usar una cuenta de usuario Standard con Safeguard 

  1. Comenzar en el escritorio de Windows 7 con un usuario que posea privilegios administrativos.
  2. Visualizar las cuentas de usuario Standard definidas en nuestro ordenador.
  3. Crear una nueva cuenta de usuario Standard.
  4. Activar PC Safeguard en la nueva cuenta de usuario.
  5. Cerrar la sesión actual e iniciar sesión nuevamente pero con la cuenta con PC Safeguard.
  6. Ejecutar cualquier aplicación instalada previamente y almacenar datos en el escritorio de Windows 7.

Escenario 2: Navegar por la Web utilizando una cuenta SafeGuard

  1. Comenzar en el escritorio de Windows 7, luego dehaber iniciado sesión con una cuenta SafeGuard.
  2. Navegar por la WWW con cualquier navegador.
  3. Instalar múltiples add-ons en el navegador (como Silverlight, Adobe Reader, Adobe Flash, etc.).
  4. Tratar de utilizar los add-ons instalados(como ejecutar una aplicación Silverlight application en http://www.silverlight.net/Showcase/, ver un archivo PDF desde la Web con Adobe Reader, etc.) y verificar que funcionen como se espera.

Escenario 3: Instalar una nueva aplicación utilizando una cuenta SafeGuard

  1. Comenzar en el escritorio de Windows 7, luego dehaber iniciado sesión con una cuenta SafeGuard.
  2. Instalar una nueva aplicación, como por ejemplo un juego de MSN Game(http://zone.msn.com).
  3. Ejecutar la aplicación para verificar que funciona como se espera.

A BetaTestear!!!

Fernik

Posted: 1/3/2009 13:03 por Fernik | con 3 comment(s) |
Reportando Bugs en Windows Vista: Internet Explorer

winlogoEste es el último post del conjunto de artículos dedicados al testing del Service Pack 2 de Windows Vista y Windows Server 2008. En esta ocasión voy a hablar sobre Internet Explorer. El navegador es la llave para abrir la Web, si el mismo presenta fallas y la experiencia de usuario es frustrante,  los usuarios/sesarrolladores se alejarán e incluso peor, no desarrollarán aplicaciones que se ejecuten en forma optimizada. Internet Explorer no es una aplicación más, es en sí una platafoma ya que es el navegador que más APIs expone para el uso de terceras partes y esto hace que cada vez la simbiosis que tiene con Windows sea más profunda y que los chicos malos(Unión Europea y Opera) se enojen cada vez más. De heccho es asombrosa la cantidad de aplicaciones de escritorio que como requerimiento necestian una versión determinada de Internet Explorer previa a su instalación.

Pero antes de tratar a Internet Explorer, quiero hablar un momento sobre la importancia de reportar bugs. Es realmente fácil y cómodo sentarse usar un programa descubrir un bug y pensar "Es Microsoft, no lo van a arreglar" o "Esto no sucede en....". Lo importante es hacer llegar este bug, ya que si hay mucha gente que reporta un problema en escenarios semejantes, este escenario toma protagonismo, los bugs son agrupados y es priorizado por Microsoft. Por ello es necesario nuestra participaión activa para ayudar a cubrir cosas que no se saben o desconocen.

Volviendo al tema que nos convoca, una de las nuevas características tanto de de IE7 e IE8 son las extensiones TLS. TLS es el sucesor de SSL, y como se imaginan es de vital importancia en transacciones comerciales en la Web por eso es necesario que opere efectivamente. Las extensiones TLS  son una manera  de comunicar informacion adicional en el handshake SSL, y hay algunos servidores dando vueltas por ahí que no manejan esto correctamente. Si este es el caso Microsoft trata de contactar a estos sitios para que actualicen su software de servidor y manejen bien las extensiones TLS. De todos modos es importante reportar todos aquellos sitios que no funcionen con la opción TLS. Si se deshabilita TLS y el sitio funciona correctamente, es necesario reportarlo a Microsoft y al mismo sitio.

TLSoption

Otro problema que aparece frecuentemente es que muchos sitios explícitamente bloquean la cadena de User Agent de IE7, es el caso en el que un sitio reporta que no soporta su navegador y que se actualice a IE 5 o IE6. Esto se arregla contactando a Microsoft y al propietario del sitio solicitando que soporte IE7. Adicionalmente podemos modificar el registro de manera que IE7  impersone en el sitio como IE6, para ello hay un script en http://www.fiddlertool.com/useragent.aspx que automáticamente setea eso por nosotros y podremos navegar ese sitio sin problemas. Ahora si luego de impersonar como IE6 el sitio no funciona correctamente, reportar un bug.

Respecto de CSS, muchos sitios usan CSS hacks para lograr la apariencia deseada, sin embargo a veces esto no alcanza en IE7, y se reporta el bug como un screenshot y la dirección de la pagina a revisar. Siempre es importante resaltar qué parte del screenshot no se renderiza como se espera, esto es fácil ya que con cualquier editor de imágenes podemos destacar el área desprolija lo cual ayuda mucho a focalizarse en la parte de la página a examinar para corregir el bug.

También es importante disponer de información sobre la configuración de IE7, ya que hay clases de bugs que suceden cuando hay ciertos Add-ons intalados y no suceden cuando estos no están. Los Add-ons impactan profundamente en el estado de IE(especialmente las toolbars de Google, Yahoo y MSN), por eso también es útil enviar una captura de la ventana "Manage Add-ons" con las siguientes columnas de datos como muestra la imagen:

addons

Internet Explorer 7 en Windows Vista ofrece una característica conocida como "Potected Mode", que incluso cuando ejecutamos IE7 como administradores, IE7 no se ejecuta con priviliegios de administrador, sino con el menor privilegio posible. Lo bueno es que cualquier vulnerabilidad de seguridad que surja y trate de ser explotada, está contenida, o sea el daño que puede hacer es minimizado o nulo. La parte desagradable es que hay muchos sitios, Add-ons y escenarios de uso que asumen que tienen privilegios totales(sí como en MS-DOS) en nuestro ordenador, aunque no sean sitios maliciosos están diseñados con otro criterio de seguridad. Por eso es necesario que siempre ejecuten IE7 en modo protegido y reporten bugs sobre problemas que surjan en ese modo.

protectedmode

Internet Explorer 7 soporta OpenSearch(desarrollado por el equipo A9 de Amazon), que permite agregar proveedores de búsqueda  al combo de búsqueda de la esquina superior derecha, sin tener que ejecutar ni instalar código externo en nuestro ordenador. La idea es desarrollar proveedores de búsquedas, escribiendo descriptores OpenSearch de nuestros sitios favoritos utilizando la documentación disponible en http://www.opensearch.org/Specifications/OpenSearch/1.1. Aparentemente esta nueva forma de proporcionar Add-ons para navegadores basándose en descriptores o manifiestos en XML en vez de código compilado que tiene que ser descargado está teniendo mucha aceptación. Sin embargo no significa que esté excenta de bugs ya que todo lo que usa XML tiene sus problemas del encoding/overflow/parsing, etc y es necesario considerar eso al momento de testear.  Finalmente la búsqueda en un navegador es sobre los usuarios y sobre cómo los usuarios quieren buscar en Internet y no sólamente para un par de grandes motores de búsquedas. Por eso he desarrollado un Search Provider para Geeks.ms el cual es descubierto automáticamente por IE7/IE8 cuando ingresan a este blog, ya que el combo de búsqueda cambia a color naranja como lo muestra la siguiente imagen:

discoveredprovider

Luego, al hacer click en el combo, pueden observar el nuevo proveedor de búsqueda destacado, para agregarlo simplemente hacemos click en "Geeks.ms" desde el submenú "Add Search Providers", luego click en "Add Provider" y estamos listos para buscar en Geeks.ms desde Internet Explorer.

addsearchprovider acceptprovider searchproviderinstalled

Hoy por hoy todos los navegadores detectan feeds RSS y proporcionan una representación para la misma. Al testear RSS, es importante filtrar por categorías, fechas, tags, etc y ver como funciona y se adapta a la representación elegida. Por ejemplo una buena prueba sería hacer una búsquedda en Ebay, obtener el RSS correspondiente y probar todas las posibles maneras de filtrar, ordenar y buscar ese feed RSS. La otra parte de RSS en Internet Explorer es Windows RSS Platform, es una API que que permite que nos suscribamos y manipulemos una feed RSS con Internet Explorer. Al ser una API pública que agrega valor a Windows, cualquier otra apicación puede hacer uso de esta API sin recurrir a librerías de terceros o a una implementación propia. Empleando esta API, hay oportunidad para escenarios de sincronizacion en la nube, etc.  Es desafío es ver qué programas podemos escribir contra esa API que hagan cosas asombrosas como así reportar cualquier bug en la misma.

Espero que estos 4 posts sobre testing hayan abierto la cabeza o desarrollado un criterio adicional sobre la naturaleza del software(concretamente un sistema operativo)  y sobre cómo el mismo está conectado en un ecosistema del cual se nutre y debe nutrirlo para que exista un equilibrio aceptable y todos ganemos.  

 

Fernik

Colaborando con WIMIT

wimitlogo En este post les voy a presentar a WIMIT, un software de colaboración web que está teniendo bastante aceptación en estos días. WIMIT permite crear reuniones para capacitaciones, seminarios, presentaciones, educación, webcasts,  etc. Su interfase es 100% web, y no requiere prácticamente instalación de software adicional (léase requiere Flash player, pero quién no tiene instalado Flash, incluso en ambientes empresariales es uno de los controles ActiveX permitidos). WIMIT es el producto estrella de una empresa Argentina llamada Wormhole IT, que nació de uno de los equipos finalistas de Imagine Cup 2007 en la competencia de Software Design.

Para utilizar WIMIT, es necesario tener credenciales para ingresar al sitio de administración de reuniones, lo cual se logra ya sea contratando el servicio o solicitando una versión de prueba del mismo en http://www.wimit.net. Una vez adentro es posible administrar el calendario de reuniones así como agendar nuevas reuniones y subir documentos a las mismas. Las reuniones siempre generan 2 links uno para los presentadores y otro para los participantes.

adminpage

wimitsalas

agendarreunion setmeeting

meetinglinks docuploadbefore

Con los links generados, podemos ingresar a la reunión a partir de la fecha y hora de comienzo agendadas. En la pantalla de ingreso deberemos ingresar el nombre con el cual seremos identificados por los demás participantes de la reunión. Luego hacemos click en "Ingresar a la Sala" y se abrirá una ventana prácticamente en modo fullscreen donde se realizarán una serie de chequeos de requerimientos (versión de Flash player instalada y conectividad) y se permitirá ajustar la configuración del audio y video. Luego de cumplir exitosamente todos los requerimientos y configurar el micrófono y la cámara, ingresamos automáticamente a la reunión.

entradareunion bienvenido conf sala2

Como pueden apreciar el layout de la reunión es muy simple, hay una ventana que es el área de colaboración o pizarrón donde se exponen documentos y presentaciones, la cual puede ser maximizada. Alrededor de esta área se encuentran:

  • Ventana de Opciones de Navegación: Permite cambiar el layout, compartir documentos durante la reunión, configurar opciones de transmisión en caso de ser presentador, ocultar/mostrar las ventanas de usuarios y de chat como así también abandonar la reunión.
  • Ventana de chat: Permite gestionar toda la comunicación textual como chat público o privado con cada uno de los participantes.
  • Ventana de usuarios: Permite habilitar/deshabilitar el audio/video/pizarrón a los usuarios o atender las notificaciones de los mismos.
  • Vantanas de Audio y Video: Las cuales permiten ajustar el audio en caso de ser presentador o de habilitar la recepción de audio y video o sólo audio por parte de los asistentenes, en el caso de que no haya el sufuciente ancho de banda para recibir una transmisión fiel.

docuploadatmeeting docsharing docedit docshowing pptshowing

Para ser un nuevo player dentro de la categoría de software de colaboración en la nube, WIMIT es realmente muy sencillo de configurar y administrar como presentador, no requiere habilidades técnicas más allá de familiarizarce con los conceptos de sala, reunión y participantes, conceptos que son comunes a este tipo de software. Desde le punto de vista de los participantes mis pruebas con gente aleatoria que recluté por msn para una evaluación espontánea y sincera monstraron aceptación y facilidad de uso por parte de los mismos. Es más los pocos problemas encontrados fueron con actualizar la versión de Flash, lo cual los mismos usuarios sabían como solucionar eso y no fue necesario asistencia por parte del presentador. Finalmente lo que a mí me parece más innovador es la flexibilidad del modelo de negocios (leer http://www.lanacion.com.ar/nota.asp?nota_id=1007966) ya que se adapta a las realidades sociales de muchos países y escala para cualquier tipo de organización ya sea comercial o no . Finalmente quiero felicitar al equipo emprendedor de Wormhole IT, ya que tener una idea, pues todos la tenemos, escribir y desarrollar sobre esa idea, pues algunos están más dispuestos que otros, pero convertir esa idea en una oferta real es muy difícil y más en estos tiempos de crisis.

Fernik

Posted: 5/2/2009 22:04 por Fernik | con 3 comment(s) |
Archivado en: ,,
Reportando Bugs en Windows Vista: Networking

winlogoContinuando con los posts sobre el testing del Service Pack 2 de Windows Vista y Windows Server 2008, ahora voy a hablar un poco sobre cómo Microsoft administra una característica o feature que agrega a sus sistemas operativos. La calidad es el objetivo primario cuando se agrega una nueva característica en Windows. Una cosa es  tener muchos e interesantes escenarios por soportar al momento de agregar una característica, pero es peor si se agrega algo que no trabaja bien a que no se agregue. Por eso siempre menos es más, porque si se proporciona una nueva característica o tecnología y no funciona total o parcialmente, el usuario se alejará con la impresión de que no funcionó. En cambio si la característica funciona aunque no cumpla con todas las expectativas esperadas, el usuario va a quedarse con la impresión de que sabe que funciona pero le gustaría que además pudiera hacer X, pero X tal vez venga en el próximo release del sistema. Por eso es importante concentrarse en esto al momento de testear Networking y las tecnologías de transición de IPv4 a IPv6.

Como Windows es una plataforma realmente amplia y hay tanta gente que desarrolla, lo extiende y lo usa de infinidad de maneras diferentes lo que hace imposible para Microsoft conocer cada situación y ser capaz de testear de la manera que trabaja cada uno. Precisamente es aquí donde todos entramos en juego para ayudar y validar que lo que hace Microsoft funciona en todos los escenarios y en la infinidad de maneras en que Windows puede ser utilizado. Es importante siempre reportar qué parte de la experiencia no funcionó o qué se esperaba versus qué es lo que se obtuvo. Para reportar bugs en Networking lo primero que se necesita es el Mapa de Red, al cual se llega haciengo click en el "Network and Sharing Center" en el Panel de control.

 Luego clickear en el link que dice "View Full Map".

 

Este mapa es una representación de la red a la que pertenecemos, el cual es nuevo en Windows Vista. Así que utilizar el Mapa de Red para describir nuestro esquema de red incluyendo el tipo de conexión. En algunos escenarios, es posible que el mapa de red no muestre toda la información relevante sobre nuestra red, de ser así por favor hacer saber sobre las computadoras o dispositivos faltantes siguiendo las instrucciones detalladas que aparecen al clickear en el área resaltada en la siguiente figura:

Un verdadero reporte de bug de Networking necesita contener toda información relevante incluyendo fabricante de hardware y versión del driver como así también la versión del firmware para cualquier hardware de red como placas de red, access points y routers. Para ello necesitamos la información provista por ipconfig, Desde la consola y con privilegios administrativos ejecutamos "ipconfig /all":

Información como direcciones IP, direcciones MAC, fabricantes de NIC y mucho más aparecerán en la consola. Toda esta información es necesaria incluirla en el reporte de bugs de Microsoft Connect como un archivo adjunto junto con cualquier screenshot. Esta información es necesaria para cualquier tipo de conexión incluyendo pero no limitado a conexiones wired, wireless, VPN y dial-up.

En Windows Vista se ha agregado soporte para la próxima generación de protocolos de Internet, conocidos como IPv6. Esta información se incluye como parte del reporte de "ipconfig /all" si IPv6 está habilitado en nuestra red. Cabe destacar que en Windows Vista IPv6 está hablitado por defecto, sin embargo no todo el hardware de red soporta IPv6 todavía. Durante 1970, IPv4 fue inventado pero pasó mucho tiempo antes que la red Internet que conocemos actualmente fuera concebida y creada. Si bien IPv4 ha sobrevivido todo este tiempo hay ciertas cuestiones  que necesitan ser corregidas. Entre ellas la escasez de direcciones IP, esto es particularmente muy visible en Asia y Europa, que entraron tarde al juego de Internet y como resultado no recibieron la asignación de direcciones IP que USA obtuvo. Actualmente USA tiene el 8% de la población mundial mientras que posee el 75% de las direcciones IPv4.

Por lo tanto, esencialmente, IPv6 apunta a la visión de que todos los dispositivos que se conecten(inalámbricamente o no), ya sean celulares, cámaras, etc. permitirles participar en Internet como ciudadanos de primera clase. IPv6 apunta a satisfacer esa necesidad y es por eso que en  Windows Vista está habilitado por defecto. Esto significa que los desarrolladores ahora tienen que escribir sus aplicaciones para que sean agnósticas de protocolo de red y las empresas necesitan empezar a crear un plan de cómo van a implementar IPv6 en el tiempo. En Windows Vista hay muchas tecnologías que permiten que esta transición suceda sin tener que actualizar toda la red, entre ellas Toredo, ISATAP, PortProxy para más información les recomiendo leer el excelente paper sobre tecnologías de transición de Networking  en http://technet.microsoft.com/en-us/library/bb726951.aspx. Por eso se recomienda empezar con las aplicaciones y las tecnologías de transición y posteriormente a medida que los patrones de tráfico cambien evaluar como actualizar la red a IPv6.

Para reportar bugs de Networking es necesario lograr reproducir el bug en un contexto de tracing. Esto realmente consiste en 3 pasos básicos:

  1. Tener habilitado tracing antes de testear.
  2. Ejecutar los pasos necesarios para reproducir el bug.
  3. Deshabilitar tracing.

Por ejemplo , para el caso de una conexión cableada en una LAN:

  1. Habilito tracing desde la consola en como Administrador: netsh lan set tracing mode=yes
  2. Luego voy paso a paso para reproducir el problema. Supongamos que estoy testeando conectividad IPv6 en la LAN.
  3. Finalmente, una vez reproducido el bug de forma exitosa deshabilitar tracing con: netsh lan set tracing mode=no

En "C:\Windows\tracing\wired" encontraremos un archivo llamado wired.cab con todo el reporte de tracing. Este archivo habrá que adjuntarlo al reporte de bugs en Microsoft Connect. Los logs generados por tracing son críticos para debugear el bug  por parte del Windows Beta Team, es por ello que siempre que sea posible reproducir un bug de Networking hay que enviar toda la información de contexto de tracing.

Si probamos IPv6 sobre VPN, los logs generados encuentran en "C:\Windows\tracing", son varios archivos con la extensión .log.  Los comandos para habilitar y deshabilitar tracing son:

  • netsh ras set tracing * enabled
  • netsh ras set tracing * disabled

Para una conexión  wireless, los logs se almacenan en "C:\Windows\tracing\wireless" y concretamente habrá un archivo wireless.cab que contiene todo el reporte de tracing a adjuntar. Los comandos para habilitar y deshabilitar tracing son:

  • netsh wlan set tracing yes
  • netsh wlan set tracing no

Finalmente adjuntar todos las trazas sobre cualquier tipo de conexión que reportemos un bug, como cualquier otro bit de información que ayude debugear la conectividad de la red. 

Fernik

Reportando Bugs en Windows Vista: Windows User Shell

winlogoContinuando con la serie de posts acerca del testing de Windows Vista Service Pack 2, el cual también se puede extender a Windows 7 Beta 1(que parece que todo el mundo lo tiene instalado). En esta ocasión analizaré algo muy familiar para todos los usuarios: el Shell.

Un Shell, es la porción de software de un sistema operativo que provee una interface al usuario, ya sea un shell de línea de comandos o un shell gráfico. El Windows User Shell se manifiesta en un sistema Windows desde que encendemos el ordenador hasta que nos logeamos e ingresamos al escritorio y vemos el menú inicio, la barra de tareas, Windows explorer, el panel de control, todo eso se considera el Shell. Es un conjunto muy variado de características de Windows. Asegurarse que el Windows Shell esté libre de bugs asegura una experiencia de usuario fluida. No sólo es conveniente reportar bugs sino también sugerir mejoras, ya que por ejempllo una importante mejora desde Windows 3.11 a Windows 95 fue la desactivación de los protectores de pantalla cuando se realizan tareas intensivas de CPU y datos, como es el caso de una defragmentación. Esto evitó agregar la carga de ejecutar el protector de pantalla cuando se realizaban este tipo de tareas. Si bien es una mejora simple, agrega mucho valor a nivel de experiencia de usuario, sobre todo si tenemos que tomar decisiones en base a los datos que se actualizan por pantalla constantemente.

Como regla general, la cual no siempre garantiza encontrar la causa del bug en el Shell o de una aplicación que falla, lo recomendable es ejecutar la aplicación "Feedback Data Collector" para recolectar información del estado del sistema. Al reportar bugs en el windows Shell vamos a reportar problemas o crashes de las aplicaciones, como lo muestra la siguiente imagen: 

FDCShell

La herramienta Feedback Data Collector reunirá información genérica del sistema(principalmente logs) y les informará sobre ello.

FDCShell2

Como esta herramienta no es ni tiene que ser lo suficientemente inteligente para determinar qué tipos de archivos o información extra de contexto buscar(sobre todo si durante una sesión de usuario más de una aplicación ha crasheado) es necesario ayududarla usando criterio e inteligencia. Para ello es útil adjuntar los siguientes archivos a través del botón "Add..":

%WINDIR%\Logs\CBS\CBS.log
%WINDIR%\Logs\CBS\CBS.persist.log
%WINDIR%\Panther\setupact.log
%WINDIR%\Panther\setuperr.log

Una vez adjuntados los archivos adicionales,  Feedback Data Collector almacenará todos estos archivos en un archivo Reports.cab el cual habrá que adjuntar al reporte de bugs en Microsoft Connect.

Para el caso de reportar un crash, desde el Panel de Control ir al ícono de "Problems Reports and Solutions".

problemreports

 Luego hacer click en "View Problem history". 

ptoblemstocheck

Posteriormente buscar la aplicación que ha crasheado en la lista y clickear en "View problem details".

problemdetails

 En este punto hay que hacer click en "Copy to Clipboard" y pegar el reporte en el area de descripción de nuestro bug en Microsoft Connect.

problemlinks 

bugreport

Ahora bien, algunos crashes pueder tener un dump file o volcado de memoria asociado el cual puede ser reconocido por sus extensiones .mdmp o .hdmp. Para encontrarlos hacer click en "View temporary copy of these files". Luego seleccionar estos archivos y copiarlos a una ubicación accesible, como por ejemplo el escritorio. Luego adjuntar estos archivos, el archivo Reports.cab y cualquier otro archivo relevante al reporte de bugs en Microsoft Connect.

problemfiles

No olvidarse de que los screenshots o capturas de pantallas son bienvenidos siempre que ayuden a repoducir el bug.

Para concluir quiero que se comprenda que el comportamiento actual del Shell de Windows el resultado de la interacción de todos los actores de un ecosistema de software, el Shell es una parte importante de la plataforma Windows y es necesario hablar sobre cómo se relaciona con los usuarios, las aplicaciones de legado, las aplicaciones nuevas, etc. Hay ocasiones en que reportar bugs del Shell es algo puramente técnico, pero hay otras ocaciones en que hay que aplicar el sentido común y la heurística para mejorar la interactividad del Shell con los usuarios. En este sentido hay una gran oportunidad para mejoras. Así que aprovechen esta oportunidad para que Microsoft conozca cuales son sus preferencias como "Me gustaría que no se activara... cuando...", "Me molesta que Windows notifique....", "Sería útil parametrizar......", y así sucesivamente. 

Fernik

Posted: 17/1/2009 20:42 por Fernik | con no comments |
Imagine Cup 2009: Qué estás esperando ?

En estos tiempos de crisis e incertidumbre económica me encuentro con mucha gente, sobre todo estudiantes a punto de recibirse que me comentan que se les dificulta conseguir trabajo ya que no están capacitados y ni siquiera se los considera juniors. Si bien Microsoft Latinoamérica, Microsoft Argentina y el programa S2B proveen de muchos programas académicos y no académicos, personalmente creo que lo mejor es Imagine Cup.

Más allá de ser una competencia en la que tienes que emplear tecnología Microsoft, la cual debes dominarla con cierto grado, genera en sus participantes espíritu emprendedor, responsabilidad profesional para cumplir los milestones requeridos y actitud hacia la industria del software que se nota en futuras entrevistas laborales. Así que si no tienes trabajo, deja la lloradera y ponte en marcha todavía estás a tiempo para participar en ciertas competencias como MashUp, Short Film, Photography, Design. MashUp es relativamente fácil así que es una buena oportunidad para destacarse. Si no se animan con una competencia están los Imagine Cup Awards que consisten en proporcionar soluciones más concretas en los temas de Parallel Computing, Design for Development, MultiPoint Education, Interoperability, realmente son una buena opción con el poco tiempo que quedan para las finales.

Ahora seguro se estarán preguntando, de dónde obtengo el software Microsoft para desarrollar? Pues de Imagine Cup Software Access, ahí se explica cómo obtener el software que necesitan y no son versiones trials así que no abusen y no conviertan este recurso en un puerto pirata.

En fin, la opotunidad está, el software también, falta la actitud y eso depende de cada uno.

Fernik

Posted: 3/1/2009 17:41 por Fernik | con 2 comment(s) |
Archivado en: ,
Reportando Bugs en Windows Vista: Hardware y drivers

Frecuentemente me encuentro con gente que lo único que sabe hacer es chillar y quejarse por que Windows Vista tiene problemas al no soportar un determinado hardware o no proveer los drivers necesarios. Pues bien esta es su oportunidad de ayudar a minimizar esta situación, ahora que puedo hablar ya que se ha abierto Windows Server 2008 Service Pack 2 and Windows Vista Service Pack 2 Beta Customer Preview Program (CPP). Uno de los objetivos del SP2, es soportar la mayor cantidad de dispositivos out-of-the-box en PCs de escritorio y portátiles, para ello Microsoft cuenta con los datos que proporcionados por el subsistema Windows Telemetry, el cual recolecta información sobre las fallas del sistema operativo y envía reportes detallados los cuales son utilizados para corregir los problemas que causan las pantallas azules de la muerte, crashes inesperados, etc.

La PC portátil promedio tiene instalados 120 drivers, de los cuales son de entre 30 a 40 empresas diferentes. Esto demuestra que el ecosistema de software de un sistema Windows es muy amplio ya que hay drivers y hardware de muchos OEM y partners. No es como en un sistema Mac OS X en donde sólo hay procesadores Intel Core 2 Duo y placas de video NVIDIA, NVIDIA, NVIDIA, 3 opciones, las 3 NVIDIA. Esta amplitud crea una complejidad mayor en la interacción entre el ecosistema de software de un sistema Windows en donde no siempre se puede asegurar o garantizar que funcione con el nivel de confiabilidad esperado, y menos si se trata de drivers que no cumplen con los requerimientos de Windows Logo Program for Hardware.

Ahora bien como Windows Vista ya tiene más de 2 años en el mercado es suficiente tiempo para disponer de un set de drivers maduros que aseguren la compatibilidad con la mayoría de los dispositivos actuales y dispositivos pre-Vista (léase XP). Pero esto sólo no alcanza, como no es posible cubrir todo el espectro de dispositivos, la idea es tratar de que los usuarios instalen SP2 y evalúen la capacidad para reconocer dispositivos que antes no eran reconocidos y si los dispositivos que antes eran reconocidos continúan funcionando. Desde Windows Vista a Windows Vista SP1, el sistema operativo mejoró evitando un 48% los crashes de sistema reportados por Windows Telemetry. El objetivo para SP2  es mejorar esta marca y asegurar un buen conjunto de drivers para instalar Windows Vista desde cero en y en hardware compatible con Windows XP. Además como Windows 7 asegura compatibilidad binaria con drivers de Windows Vista, de esta manera estamos cubiertos para la siguiente versión.

Suponiendo que se inscribieron en la CPP y que disponen de las últimas versiones de los drivers para los dispositivos que funcionan correctamente, les recomiendo ejecutar los siguientes casos de prueba:

  1. Instalar SP2 y asegurarse de que todos los dispositivos funcionan luego de una instalación exitosa del SP2.
  2. Desistalar SP2 y asegurarse que todos los dispositivos funcionan luego de una desinstalación exitosa del SP2
  3. Asegurarse de que no haya crashes u otros bloqueos durante la instalación o desinistalación del SP2.
  4. Asegurarse de que las configuraciones por defecto de los dispositivos son conservadas durante la instalación/desinistalación del SP2.
  5. Asegurarse de que las configuraciones personalizadas de los dispositivos no son activadas durante la instalación/desinistalación del SP2.

Si cualquiera de los casos de prueba presenta resultados inesperados como: crashes, pérdida de funcionalidad o un sistema inusable luego de actualizar a SP2, deben reportar el bug en Microsoft Connect valiéndose de la herramienta denominada Feedback Data Collector, la cual recolecta información genérica del entorno aunque no siempre precisa ni suficiente. En casos de no ser posible como ser que el sistema queda inusable o que sepan realmente de que se trata de un hardware en particular es necesario reportar los PNP Ids del hardware confictivo junto con la versión y el nombre del driver. De los items anteriores el más difícil de obtener son los PNP Ids, el resto de la información la recolectada por la herramienta Feedback Data Collector. Para obtener los PNP Ids es necesario ubicar el dispositivo en conflicto y examinar sus propiedades:

Luego dirigirse al Tab de Detalles y seleccionar Hardware Ids:

Los Hardware Ids enumerados son los PNP Ids necesarios para incluir en el reporte de bugs en Microsoft Connect.

Adicionalmente es necesario adjuntar en el reporte de bugs en Microsoft Connect los siguientes logs:

%WINDIR%\WindowsUpdate.log
%WINDIR%\Inf\setupapi.dev.log
%WINDIR%\Inf\setupapi.app.log
%WINDIR%\Logs\CBS\CBS.log
%WINDIR%\Logs\CBS\CBS.persist.log
%WINDIR%\Panther\setupact.log
%WINDIR%\Panther\setuperr.log
%WINDIR%\MEMORY.DMP (si existe)
%WINDIR%\Minidump\*.dmp
Dxdiag (el log se obtiene ejecutando la aplicación Dxdiag)
Msinfo32 (el log se obtiene ejecutando la aplicación Msinfo32)

Con esta introducción ya están preparados para instalar SP2 y ser más que el usuario común quejoso y mañoso, personalmente hace 3 meses que lo vengo utilizando en mi PC de escitorio y no he tenido problema alguno con el hardware existente. 

Espero haber proporcionado claridad en torno al tema de la compatibilidad y el soporte, el cual genera guerras religiosas entre sistemas operativos. Quiero que se comprenda que aunque es imposible tener un ecosistema de software que soporte todos los dispositivos posibles con altos niveles de confiabilidad, si es posible crear un ecosistema que soporte un set de dispositivos mainstream o populares en forma confiable, el resto corre por cuenta de los fabricantes de hardware y su compromiso por desarrollar drivers.

Fernik

Certified ScrumMaster en Agiles 2008

Previo al inicio de las jornadas Agiles2008 en Buenos Aires, tuve la oportunidad de asistir a la capacitación oficial "Certified ScrumMaster" de Scrum Alliance con Tobias Mayer (Certified Scrum Coach/Trainer). Realmente el curso fue toda una experiencia de cambio de paradigmas, si bien fueron días intensivos la forma en que Tobias enseñó los principios ágiles y de Scrum fue muy didáctica y lúdica. Realmente es todo un profesional en la transmisión de conocimientos a personas adultas.

Mis compañeros de curso eran un grupo heterogéneo, había gente que tenía nociones básicas de Scrum y otras no, pero todos proveníamos de diferentres backgrounds como orgnizaciones que poseen algún nivel de CMMI, organizaciones que trabajan con equipos distribuidos, otras que hacen mantenimiento de software, otras que tienen su propia metodología y no logran acoplarla con Scrum, etc. En fin había mucha riqueza en la experiencia e historia individual de cada uno y si bien el objetivo del curso no era dar soluciones a cada situación particular todos obtuvimos al menos un conjunto de herramientas y prácticas para convertinos en verdaderos agentes de cambio en las organizaciones a las que pertenecemos. Lo que para mí personalmente fue toda una revelación es la base científica en la que se contruye Scrum, Complexity Science. Al indagar más sobre Complexity Science no sólo me permitió comprender mejor a Scrum sino que me di cuenta que plantea un cambio de paradigma muy grande incluso a nivel científico y de management, el cual va a hacernos replantear la forma mecánica y rígida en que se trabaja en muchas organizaciones. El impacto de este cambio es tan grande como la teoría de la relatividad de Einstein en la ciencia moderna. Es toda una nueva forma de concebir a los sistemas sociales y humanos, y así construir estructuras más adaptables y auto-organizables para maximizar el potencial de las personas y los equipos de trabajo.

Luego, durante las jornadas también asistí a las chalas de Lean Software Development a cargo del matrimonio Poppendieck, la cultura Lean es otro de los movimientos que está emergiendo en la comunidad ágil y pude verificar que sus principios tienen una base científica y matemática probada que se acoplan perfectamente a Scrum prácticamente sin fricción. Así que mi consejo para los que ya están más experimentados con Scrum es que comiencen a aplicar los principios de Lean Software Development, les aseguro que se van a beneficiar bastante al darse cuenta que pueden desarollar software en forma fluída y sin generar tanta basura en el proceso.

Finalmente quiero cerrar este post demistificando un par de falacias que me encuentro vida y en muchas organizaciones y con muchos profesionles constantemente. Mucha gente, especialmente managers que tienen un "MBA" o personas que son realmente profesionales y muy prescriptivas y organizadas en su trabajo, desvaloran todo lo "ágil" porque lo consideran una forma mediorcre o light de trabajar y porque creen que las metodologías ágiles son efectivas empíricamente pero no teóricamente. Lo cierto es que si exploran e investigan a partir de los links del artículo podrán verificar que eso no es cierto y que las metodogías ágiles pueden tener una base tan teórica y matemática como el álgebra. Es más son más adaptables que la forma mecánica en que estamos acostumbrados a producir/trabajar ya que contemplan el riesgo y el cambio en forma innata.

Les dejo fotos del curso y  de las jornadas.


 

Fernik

Posted: 26/10/2008 18:14 por Fernik | con no comments
Archivado en: ,,
Microsoft CodeCamp 2008: El día después

Cerca de 1000 personas entre estudiantes, desarrolladores y profesionales IT se reunieron el sábado 4 de octubre en la Universidad Abierta Interamericana (UAI) en la segunda edición del CodeCamp en Buenos Aires.

CodeCamp es encuentro donde los estudiantes, desarrolladores y profesionales de IT pudieron intercambiar información sobre distintos aspectos del mundo de la tecnología, desde el desarrollo de videojuegos hasta la robótica, pasando por otros temas como la virtualización.

El evento fue organizado por el Programa Académico Microsoft en conjunto con MSDN y la UAI, Hubo conferencias sobre distintos temas (WPF, Videojuegos, Mobile, IT, Ingeniería de Software, Diseño Web, etc) separadas en 4 horarios con 11 charlas en cada horario. También tuvo lugar el Demo Fest, donde hubo stands sobre tecnología en los que los sponsors y las células académicas mostraron a los asistentes desarrollos en tecnologías de punta y los resultados de su trabajo.

Algunos números que ha dejado el Code Camp 2008:


1.      4 meses de planificación

2.      1571 inscriptos vía web

3.      Cerca de 1000 asistentes

4.      44 conferencias a cargo de MVPs, MSPs, FTEs y partners.

5.      4 webcasts

6.      21 stands

7.      14 sponsors

8.      Estudiantes del Programa Académico de 8 provincias (Buenos aires, Mendoza, Córdoba, Santa Fé, Santiago del Estero, Chaco, Salta y Jujuy)

Hay que destacar que unos de los iniciadores y visionarios de esto fue Jonas, MVP Argentino en USA, que trajo a Argentina la idea de CodeCamp, Jonas sos grande!!!

y el equipo de FCC de Microsoft Argentina(verdadero artífice de esto), compuesto por los 2 ADEs y su equipo de colaboradoras super guapas y altamente competentes que se encargó de organizar y gestar todo el evento, los sponsors, los oradores y claro está, los asistentes.

Realmente fue un evento muy enriquecedor en donde se encontró la industria del Software y las Universidades, por mi parte me queda agradecer a la gente de Microsoft Latam y a Inga Bemman por permitirme presentar el programa S2B y DreamSpark(que fue todo un hit).

Fernik

Posted: 7/10/2008 23:55 por Fernik | con 1 comment(s) |
Archivado en: ,,
Replays de ALM con elBruno

Antes que nada, mil disculpas por no publicar los links a los replays de LiveMeeting. He estado muy         ocupado  preparándome para el Microsoft CodeCamp en Buenos Aires y he visto muchos mails reclamando la segunda parte, así que aquí van ambas:

 Gestión del ciclo de vida del desarrollo de aplicaciones con VSTS by elBruno:


Fernik

ALM con elBruno, parte 2

Hola, les recuerdo que el próximo sábado 27 de septiembre a las 15:00(GMT) tenemos la segunda parte de la charla de ALM con VSTS de la mano de elBruno.

El link de la reunión es: https://www.livemeeting.com/cc/microsoft/join?id=VSTSES&role=attend&pw=N-q%2C5gtPf

Nos vemos el sábado y no olviden repasar la primera parte así no se sienten colgados.

El horario de la reunión en otras cuidades es:

Addis Ababa sab 18:00     Guatemala sab 9:00     Nassau * sab 11:00
Adelaide dom 0:30 Halifax * sab 12:00 New Delhi sab 20:30
Aden sab 18:00 Hanoi sab 22:00 New Orleans * sab 10:00
Algiers sab 16:00 Harare sab 17:00 New York * sab 11:00
Almaty sab 21:00 Havana * sab 11:00 Oslo * sab 17:00
Amman * sab 18:00 Helsinki * sab 18:00 Ottawa * sab 11:00
Amsterdam * sab 17:00 Hong Kong sab 23:00 Paris * sab 17:00
Anadyr * dom 4:00 Honolulu sab 5:00 Perth sab 23:00
Anchorage * sab 7:00 Houston * sab 10:00 Philadelphia * sab 11:00
Ankara * sab 18:00 Indianapolis * sab 11:00 Phoenix sab 8:00
Antananarivo sab 18:00 Islamabad * sab 21:00 Prague * sab 17:00
Asuncion sab 11:00 Istanbul * sab 18:00 Reykjavik sab 15:00
Athens * sab 18:00 Jakarta sab 22:00 Rio de Janeiro sab 12:00
Atlanta * sab 11:00 Jerusalem * sab 18:00 Riyadh sab 18:00
Auckland * dom 4:00 Johannesburg sab 17:00 Rome * sab 17:00
Baghdad sab 18:00 Kabul sab 19:30 San Francisco * sab 8:00
Bangkok sab 22:00 Kamchatka * dom 4:00 San Juan sab 11:00
Barcelona * sab 17:00 Karachi * sab 21:00 San Salvador sab 9:00
Beijing sab 23:00 Kathmandu sab 20:45 Santiago sab 11:00
Beirut * sab 18:00 Khartoum sab 18:00 Santo Domingo sab 11:00
Belgrade * sab 17:00 Kingston sab 10:00 Sao Paulo sab 12:00
Berlin * sab 17:00 Kiritimati dom 5:00 Seattle * sab 8:00
Bogota sab 10:00 Kolkata sab 20:30 Seoul dom 0:00
Boston * sab 11:00 Kuala Lumpur sab 23:00 Shanghai sab 23:00
Brasilia sab 12:00 Kuwait City sab 18:00 Singapore sab 23:00
Brisbane dom 1:00 Kyiv * sab 18:00 Sofia * sab 18:00
Brussels * sab 17:00 La Paz sab 11:00 St. John's * sab 12:30
Bucharest * sab 18:00 Lagos sab 16:00 St. Paul * sab 10:00
Budapest * sab 17:00 Lahore * sab 21:00 Stockholm * sab 17:00
Buenos Aires sab 12:00 Lima sab 10:00 Suva dom 3:00
Cairo sab 17:00 Lisbon * sab 16:00 Sydney dom 1:00
Canberra dom 1:00 London * sab 16:00 Taipei sab 23:00
Cape Town sab 17:00 Los Angeles * sab 8:00 Tallinn * sab 18:00
Caracas sab 10:30 Madrid * sab 17:00 Tashkent sab 20:00
Casablanca sab 15:00 Managua sab 9:00 Tegucigalpa sab 9:00
Chatham Island * dom 4:45 Manila sab 23:00 Tehran sab 18:30
Chicago * sab 10:00 Melbourne dom 1:00 Tokyo dom 0:00
Copenhagen * sab 17:00 Mexico City * sab 10:00 Toronto * sab 11:00
Darwin dom 0:30 Miami * sab 11:00 Vancouver * sab 8:00
Denver * sab 9:00 Minneapolis * sab 10:00 Vienna * sab 17:00
Detroit * sab 11:00 Minsk * sab 18:00 Vladivostok * dom 2:00
Dhaka sab 21:00 Montevideo sab 12:00 Warsaw * sab 17:00
Dubai sab 19:00 Montgomery * sab 10:00 Washington DC * sab 11:00
Dublin * sab 16:00 Montreal * sab 11:00 Winnipeg * sab 10:00
Edmonton * sab 9:00 Moscow * sab 19:00 Yangon sab 21:30
Frankfurt * sab 17:00 Mumbai sab 20:30 Zagreb * sab 17:00
Geneva * sab 17:00 Nairobi sab 18:00 Zürich * sab 17:00

Voy a estar en línea 1 hora antes del evento así que cualquier consulta me ubican por msn en fhualpa@REMOVERMAYUSCULASmsn.com.

Fernik

Posted: 25/9/2008 1:29 por Fernik | con no comments
Archivado en: ,,
ALM con elBruno, parte 1

Hola, este post es sólo para sintetizar la primera parte de la sesión de ALM con elBruno. Realmente la sesión fue muy amena ya que hubieron ejemplos prácticos con un miniproyecto y la presentación no se tornó aburrida, pero lo que quiero destacar es que como desarrolladores si bien trabajamos con tecnología pareciera que a veces somos cavernícolas ya que no utilizamos todo el potencial de nuestras herramientas como así también de herramientas de terceros, frameworks, etc. Por eso recomiendo empezar a cambiar de actitud con un hábito muy simple que indicó Bruno, y consiste en dedicarle entre 10 y 15 minutos a una herrmienta nueva para evaluar si realmente agrega valor a nuestro trabajo. Pueden ver las herramientas de desarrollo de referencia que recomienda Bruno en http://geeks.ms/blogs/elbruno/archive/2008/09/22/evento-recursos-del-evento-de-alm-recursos-parciales-como-las-clases.aspx y comenzar a evaluarlas.

Como la gente de Microsoft Latam, se toma su tiempo para publicar el webcast en MediaCenter, les dejo un link del replay del webcast que está en mi SkyDrive, así pueden verlo y estar preparados para la segunda parte el próximo sábado.

Fernik

Posted: 23/9/2008 3:27 por Fernik | con 1 comment(s) |
Archivado en: ,
elBruno en LiveMeeting

Como parte del programa Student to Business en latinoamérica estamos organizando una serie de conferencias técnicas en LiveMeeting con gente que realmente son un referente en la industria. En este caso los quiero invitar a la charla de Gestión del ciclo de vida del desarrollo de aplicaciones con Visual Studio a cargo de Bruno Capuano, conocido como elBruno. Bruno es como elGuille pero muy muy Enterprise, por eso me parece una oportunidad única para asistir a esta reunión virtual en donde él compartirá su experiencia en proyectos empresariales e internacionales de gestión de aplicaciones con Visual Studio Team System. Habitualmente Bruno realiza este tipo de sesiones en eventos presenciales, pero ha accedido a realizarla en Livemeeting en 2 sesiones que tendrán lugar los sábados 20 y 27 de Septiembre del 2008 a las 15:00 GMT, que serían 17:00 en España(GMT +2), 12:00 en Argentina(GMT -3), etc, al final del post publicaré un horario para el resto de los países de habla hispana. Les recuerdo que estas sesiones no son las sesiones típicas de Livemeeting de 1 hora en donde se "vende un producto", esto es realmente una sesión que va más allá de vender un producto sino de empezar a despertar un criterio profesional por eso las hemos estructurado en 2 sesiones de 2 hs(con preguntas y respuestas incluidas) cada una en 2 sábados. Así que les dejo el link de la reunión en LiveMeeting https://www.livemeeting.com/cc/microsoft/join?id=9KB2QC&role=attend&pw=xr.2Ns3%7Ew y el link del evento de Student to Business en facebook http://www.new.facebook.com/event.php?eid=49191092288.

Voy a estar 1 hora antes del evento para asistir con cualquier problema de audio o de inicio de sesión en LiveMeeting, cualquier consulta les dejo mi dirección de messenger para que me encuentren OnLine fhualpa@REMOVERMAYUSCULASmsn.com.

Nos vemos el sábado 20.

Fernik

P.S: Este es el horario de la reunión en las principales cuidades del planeta, cualquier consulta agreguen un comentario al blog.

Addis Ababasab 18:00  Guatemalasab 9:00  Nassau *sab 11:00
Adelaidedom 0:30Halifax *sab 12:00New Delhisab 20:30
Adensab 18:00Hanoisab 22:00New Orleans *sab 10:00
Algierssab 16:00Hararesab 17:00New York *sab 11:00
Almatysab 21:00Havana *sab 11:00Oslo *sab 17:00
Amman *sab 18:00Helsinki *sab 18:00Ottawa *sab 11:00
Amsterdam *sab 17:00Hong Kongsab 23:00Paris *sab 17:00
Anadyr *dom 4:00Honolulusab 5:00Perthsab 23:00
Anchorage *sab 7:00Houston *sab 10:00Philadelphia *sab 11:00
Ankara *sab 18:00Indianapolis *sab 11:00Phoenixsab 8:00
Antananarivosab 18:00Islamabad *sab 21:00Prague *sab 17:00
Asuncionsab 11:00Istanbul *sab 18:00Reykjaviksab 15:00
Athens *sab 18:00Jakartasab 22:00Rio de Janeirosab 12:00
Atlanta *sab 11:00Jerusalem *sab 18:00Riyadhsab 18:00
Aucklanddom 3:00Johannesburgsab 17:00Rome *sab 17:00
Baghdadsab 18:00Kabulsab 19:30San Francisco *sab 8:00
Bangkoksab 22:00Kamchatka *dom 4:00San Juansab 11:00
Barcelona *sab 17:00Karachi *sab 21:00San Salvadorsab 9:00
Beijingsab 23:00Kathmandusab 20:45Santiagosab 11:00
Beirut *sab 18:00Khartoumsab 18:00Santo Domingosab 11:00
Belgrade *sab 17:00Kingstonsab 10:00Sao Paulosab 12:00
Berlin *sab 17:00Kiritimatidom 5:00Seattle *sab 8:00
Bogotasab 10:00Kolkatasab 20:30Seouldom 0:00
Boston *sab 11:00Kuala Lumpursab 23:00Shanghaisab 23:00
Brasiliasab 12:00Kuwait Citysab 18:00Singaporesab 23:00
Brisbanedom 1:00Kyiv *sab 18:00Sofia *sab 18:00
Brussels *sab 17:00La Pazsab 11:00St. John's *sab 12:30
Bucharest *sab 18:00Lagossab 16:00St. Paul *sab 10:00
Budapest *sab 17:00Lahore *sab 21:00Stockholm *sab 17:00
Buenos Airessab 12:00Limasab 10:00Suvadom 3:00
Cairosab 17:00Lisbon *sab 16:00Sydneydom 1:00
Canberradom 1:00London *sab 16:00Taipeisab 23:00
Cape Townsab 17:00Los Angeles *sab 8:00Tallinn *sab 18:00
Caracassab 10:30Madrid *sab 17:00Tashkentsab 20:00
Casablancasab 15:00Managuasab 9:00Tegucigalpasab 9:00
Chatham Islanddom 3:45Manilasab 23:00Tehran *sab 19:30
Chicago *sab 10:00Melbournedom 1:00Tokyodom 0:00
Copenhagen *sab 17:00Mexico City *sab 10:00Toronto *sab 11:00
Darwindom 0:30Miami *sab 11:00Vancouver *sab 8:00
Denver *sab 9:00Minneapolis *sab 10:00Vienna *sab 17:00
Detroit *sab 11:00Minsk *sab 18:00Vladivostok *dom 2:00
Dhakasab 21:00Montevideosab 12:00Warsaw *sab 17:00
Dubaisab 19:00Montgomery *sab 10:00Washington DC *sab 11:00
Dublin *sab 16:00Montreal *sab 11:00Winnipeg *sab 10:00
Edmonton *sab 9:00Moscow *sab 19:00Yangonsab 21:30
Frankfurt *sab 17:00Mumbaisab 20:30Zagreb *sab 17:00
Geneva *sab 17:00Nairobisab 18:00Zürich *sab 17:00

 

Posted: 18/9/2008 9:30 por Fernik | con 9 comment(s) |
Archivado en: ,
SQL Server Data Services, fundamentos

SSDS es un almacén de datos, que utiliza las tecnologías de SQL Server y expone su funcionalidad a través de interfases de servicios Web y protocolos abiertos. Como servicio provee su propio modelo de datos y de provisionamiento para operarlo y está diseñado para ser un servicio Web 2.0 proporcionando interfases SOAP y REST.
La idea de usar un servicio de datos en vez de una base de datos en las premisas del cliente es no tener que lidiar con costos de la tecnología en sí (licenciamiento de software + adquisición de hardware) ni con estimaciones de requerimientos de procesamiento y de planeación de capacidad.

El Modelo de Provisionamiento

El modelo de provisionamiento de SSDS, consiste en un modelo de entidades flexibles. Antes de explicar el modelo de entidades flexibles eviten asociar la palabra entidad con Entity Framework, cuyo modelo de entidad es diferente. Las entidades de SSDS no tienen un esquema asociado con ellas, o sea son schemaless,  no tienen una estructura definida, sino que son un conjunto de propiedades, en donde cada propiedad es una dupla nombre/valor.
El modelo tiene  3 elementos: autoridad, contenedor y entidad, la siguiente figura muestra una analogía del modelo de provisionamiento ACE de SSDE y el modelo de provisionamiento relacional de SQL Server.

Para comenzar a almacenar datos se debe haber creado al menos una autoridad. La creación de una autoridad SSDS crea un nombre de DNS para poder referenciarla.  Por ejemplo: como SSDS está hosteado en data.beta.mssds.com, si creamos una autoridad (base de datos) llamada fernik, SSDS crea la autoridad y la hace accesible en fernik.data.beta.mssds.com, lo cual revela que los nombres que elijamos para autoridades deben seguir las reglas y convención de nombres de DNS, así que olvidándose de elegir nombres con notación camel. Además la autoridad es una unidad de geo-ubicación, esto quiere decir que si se crean 2 autoridades como fernik.america.data.beta.mssds.com y fernik.europa.data.beta.mssds.com se han creado en diferentes datacenters en donde está hosteado SSDS. La idea de crear autoridades en diferentes datacenters es de disponer los datos lo más cerca posible de los usuarios que consumirán el servicio. Actualmente hay un datacenter de SSDS en Norteamérica (data.beta.mssds.com).

Como en el modelo relacional una base de datos es una colección de tablas en el modelo de SSDS, una autoridad es una colección de contenedores. La diferencia es que cuando se crean contenedores no se define o adjunta un esquema, en cambio cuando se crea una tabla hay que proporcionar información sobre la estructura de la misma. Esta independencia de los contenedores respecto de un esquema permite almacenar en ellos entidades tanto homogéneas como heterogéneas. Lo cual no es el caso de una tabla relacional la que sólo nos permite almacenar filas homogéneas.  Así se plantean 2 modelos de uso según las necesidades de la aplicación:

  • Modelo Homogéneo:  El contenedor almacena entidades del mismo tipo. En este modelo el contenedor se comporta como una tabla en una base de datos relacional.
     
  • Modelo Heterogéneo:  El contenedor almacena entidades de diferentes tipos. En este modelo el contenedor se comporta como una base de datos que almacena entidades de todo tipo.

En el release actual de SSDS  las consultas tienen ámbito de contenedor, todavía no es posible realizar consultas entre contenedores (lo que equivale a consultas entre tablas en el modelo relacional), pero como los contenedores pueden almacenar entidades heterogéneas es posible almacenar todas nuestras entidades en un único contenedor y realizar la consulta sobre el mismo.

Una entidad es el equivalente a una fila en el modelo relacional. Consiste en un conjunto de propiedades en forma de  pares nombre/valor (como un objeto Dictionary o un array asociativo).  El valor puede ser un tipo escalar simple, actualmente los siguientes tipos escalares son soportados: string, binary, boolean, decimal y datetime.
Una entidad es el objeto más pequeño que puede ser actualizado. Esto implica que se puede obtener una entidad, agregar/actualizar/eliminar propiedades y luego reemplazar la entidad original con la modificada. Las actualizaciones parciales no son soportadas por ahora.

El Modelo de Datos

La entidad flexible es el concepto fundamental en SSDS. Tanto autoridades, contenedores como entidades son entidades flexibles. Cada una de estas entidades consiste en propiedades en forma de pares nombre/valor se agrupan en 2 categorías: Metadatos y Flexibles.

  • Propiedades de Metadatos: Cada entidad posee in conjunto fijo de propiedades (Id, Version y Kind). Estas propiedades se denominan propiedades de metadatos. La propiedad Id identifica unívocamente a la entidad y debe ser única dentro del contenedor en el que existe, pero diferentes contenedores pueden contener entidades con el mismo Id. La propiedad Version actúa como un timestamp o marca de tiempo y se emplea para identificar la versión actual de la entidad. El valor de la propiedad Version se actualiza con cada operación que se realiza sobre la entidad. El valor de la propiedad Kind es definido por el usuario y se utiliza para categorizar entidades similares. No hay que olvidarse de que como no existe un esquema asociado a las entidades, por lo que tener entidades con el mismo valor de la propiedad Kind no garantiza la misma estructura.
  • Propiedades Flexibles: Además de las propiedades de metadatos, una entidad puede tener 0 o más propiedades flexibles adicionales. Estas propiedades es en donde se almacenan los datos de la aplicación. Las propiedades flexibles pueden tener cualquier nombre y valor de los siguientes tipos escalares: string, decimal, bool, datetime y binary.

Para verificar que toda autoridad, contenedor y entidad es una entidad flexible vamos inspeccionar el modelo de objetos de SSDS. Para ello es necesario agregar una referencia a al servicio SSDS.

Luego, si inspeccionamos el modelo de objetos con Object Browser se aprecia  que la clase Entity del modelo ACE es en sí la entidad flexible, ya que se emplea para modelar el resto de las entidades del modelo ACE.

Ahora bien, si observamos el código  del proxy generado las propiedades de metadatos son realmente propiedades definidas explícitamente, es decir tienen un nombre propio y un tipo, responden a un esquema. Sin embargo a lo que llamamos propiedades flexibles se las modela como un Diccionario genérico parametrizado con <string, object>, o sea que las propiedades flexibles están definindas como pares nombre/valor que son miembros de una colección. Al implementar las propiedades flexibles de esta forma se alcanza una flexibilidad similar a la del DataSet/DataTable no tipado pero al costo que tiene cualquier abstracción no tipada: verificación en tiempo de ejecución.

También es importante destacar el uso del atributo KnownTypeAttribute, para especificar contrados de datos equivalentes en tipos derivados. Por lo tanto se deduce que tanto Authority como Container derivan de Entity. Pero para que quede claro y no haya dudas, vamos a generar un diagrama de clases a partir de este código el cual representará la relación existente entre autoridad, contenedor y entidad desde un punto de vista estático.

Ahora sí se puede apreciar que aunque una autoridad y un contenedor son contenedores lógicos de entidades, ellos son clases hijas del la clase Entidad que es la entidad flexible en sí, y que se diferencian por las parametrizaciones de sus propiedades de metadatos y propiedades flexibles. La siguiente tabla muestras las posibles combinaciones de propiedades de metadatos y propiedades flexibles para crear autoridades, contenedores y entidades:

SQL Server Data Services es un servicio que todavía está en pañales, hay planes para ofrecer crear entidades con esquemas e incluso poder hostear una instancia en las premisas del cliente. Independientemente de los planes y mejoras futuras me parece interesante considerar esta tendencia que iniciaron Amazon con SimpleDB y Google con AppEngine de publicar los datos en la gran nube que es Internet. En ciertos escenarios no lo considero factible, sobre todo si se trata de información financiera o de información crítica para que el negocio funcione diariamente, pero para ciertas aplicaciones como mashups, perfiles de usuario, etc. creo que tiene un muy buen potencial. Ahora lo que nadie dice es que por más que confiemos en nuestro provedor del servicio ya sea Microsoft, Amazon o Google y que nuestros datos estén en un cluster diseñado para proveer servicios de datos, se experimentan tiempos de baja en el servicio y es ahí donde no tenemos acceso a la infraestructura y nuestro negocio puede depender de ello. Por ello finalizo este post con una de las tantas notificaciones que se reciben de SSDS y un consejo final, si están dispuestos a aceptar este tipo de notificaciones de interrupción en su negocio u aplicación, pues adelante sino a montar su propoia infraestructura de datos.

En los próximos posts escribiré sobre las interfases SOAP y REST de SSDS así como de características únicas como consultas basadas en LINQ.

Hasta la próxima,

Fernik

Posted: 8/9/2008 4:48 por Fernik | con 1 comment(s) |
Más artículos Página siguiente >