Encuesta sobre TFS. Resultados.

Carl Rogers ha publicado en su blog los resultados de una encuesta realizada durante el TechEd EMEA Developers 2007 para conocer el nivel de adopción que de TFS y conocer el punto de vista de los equipo sobre el proceso de desarrollo.


A modo de resumen…



  • Disponer de requisitos pobres es el principal problema en los proyectos de software.

  • Los retrasos en las entregas es una segundo factor clave en los proyectos.

  • La mayoría de los participantes creen que sus proyectos sufren de falta de pruebas y de una metodología formal.

  • Los equipos pequeños sufren más la falta de una metodologías, más que los grandes.

  • El 68% de los encuestados usan TFS y habitualmente se usa en equipos de menos de 10 integrantes.

  • La característica que más se usa de TFS es el gestor de fuentes, con un 89%, seguido de Team Build, con un 56%.

Los resultados completos los podéis ver aquí.

La depuración remota existe!

La depuración de las aplicaciones es un aspecto normal de nuestro día a día pero me sorprende muchas veces lo poco que usamos la depuración remota. No es algo nuevo, es algo que existe hace mucho pero que me da la sensación de que no se usa tanto como debería.


Cierto es que es más cómodo depurar la aplicación en local si tenemos todo en nuestra máquina pero tan cierto como que en muchas ocasiones no es posible reproducir o montar el mismo escenario dónde se da el error en nuestra máquina….o es posible montarlo, pero el coste no merece la pena.


Por este motivo, es importante conocer bien los pasos a realizar para poder depurar la aplicación de forma remota y usar este sistema cuando lo necesitemos.


Para poder depurar de forma remota tenemos que tener funcionando el monitor de depuración remota, msvsmon.exe


Lo podemos instalar en la máquina o simplemente lanzarlo accediendo a la máquina dónde está el visual studio a través de un recurso compartido.


En el equipo que está el Visual Studio la aplicación está en:



Microsoft Visual Studio 8Common7IDERemote Debuggerx86


Si lo queremos instalar en la máquina, en los CDs de Visual Studio hay una carpeta llamada «Remote debugger» que tiene el instalador.


Una vez instalado tienes que asegurarte de dos cosas….que tienes permisos de depuración remota sobre la máquina ( Permisos de depuración remota ) y que la comunicación entre ambas máquinas permite la depuración. ( Cómo configurar manualmente el Firewall de Windows XP para la depuración remota o Cómo configurar manualmente el Firewall de Windows Vista para la depuración remota )


Una vez que has arrancado el monitor de depuración y te has asegurado que tiene los permisos necesarios y que la comunicación está permitida, tendrás que conectarte desde el Visual Studio al proceso que deseas depurar. Cómo conectarse a procesos en ejecución

Encriptando los ficheros de configuración…

Un aspecto a tener en cuenta en el despliegue de las aplicaciones cuando las ponemos en producción es la encriptación de las secciones que puedan contener datos sensibles.


Con .NET 2.0 se pueden encriptar secciones del fichero Web.Config con la utilidad de línea de comandos «aspnet_regiis.exe«. Por defecto, el framework 2.0 viene con dos proveedores para realizar la encriptación: RSAProtectedConfigurationProvider y DPAPIProtectedConfigurationProvider.


La encriptación del fichero de configuración es transparente para la aplicación, por lo que no habrá que cambiar nada en ésta después de encriptar las secciones que nos interesen.


Por ejemplo, para encriptar las cadenas de conexión del fichero WebConfig la línea de comandos sería algo así.



aspnet_regiis -pe «connectionStrings» -app «/IISVirtualDir»


La utilidad aspnet_regiis la podéis encontrar en :



%WINDIR%Microsoft.NETFrameworkv2.0.50727


Uno de los problemas que le veo a la utilidad, es que no viene preparada para encriptar secciones de los ficheros App.Config. La utilidad aspnet_regiis buscar siempre el fichero Web.Config por lo que a priori no encripta los ficheros App.Config.


Realmente si renombrais el fichero App.Config por Web.Config podréis encriptarlo sin problemas, pero me parece un poco cutre.


En mi caso, ante la necesidad de encriptar tanto ficheros Web.Config como App.Config, he optado por hacerme una utilidad para realizar esta operación y no usar la que nos proporciona el framework…aspnet_regiis.


El código necesario para realizar esta operación es muy sencillo..



string provider = «RsaProtectedConfigurationProvider«;


Configuration config = ConfigurationManager.OpenExeConfiguration(configPath);


ConfigurationSection section = config.GetSection(«connectionStrings«);



if (section != null & !section.SectionInformation.IsProtected)
{
      section.SectionInformation.ProtectSection(provider);
      section.SectionInformation.ForceSave = true;
      config.Save(ConfigurationSaveMode.Modified);
}


Si se quiere descomprimir lo único que habría que hacer es llamar a UnprotectSection en lugar de a ProtectSection.


Y si queremos que esta utilidad valga también para ficheros Web.Config, el código sería exactamente el mismo pero usando WebConfigurationManager.OpenWebConfiguration para abrir el fichero de configuración.


Espero que os sea de utilidad..


La información completa sobre cómo encriptar y desencriptar la podéis encontrar en los siguientes enlaces:



Cómo: Cifrar secciones de configuración en ASP.NET 2.0 mediante RSA



Cómo: Cifrar secciones de configuración en ASP.NET 2.0 mediante DAPI

Cambio de aires..

Pues nada, después de casi 7 años en Panda Security ha llegado el momento de afrontar nuevos retos en otra empresa; Avangroup.

El día 22 de febrero será mi último día en Panda Security, una empresa en la que he tenido la suerte de conocer grandes profesionales de este mundo tan complejo en el que nos movemos…He conocido muchos y también dejo muchos amigos allí que no se librarán tan fácilmente de mí.

Seguramente, si hace 7 años no hubiera entrado a trabajar en esta empresa no estaría escribiendo hoy en día en geeks ni hubiera tenido la suerte de conocer a mucha gente de la que he tenido el placer de conocer..así que mirando hacia atrás ya sólo me acuerdo de los buenos momentos y de las cosas buenas que he vivido estos años.

Ahora me llega el momento de afrontar nuevos retos. Seguiré ligado a tecnología Microsoft, así que nos os vais a librar tan fácil de mí y seguiré intentando escribir mis experiencias en este vuestro blog…( bueno, intentaré escribir más, lo prometo 🙂 )

Avangroup

¿Es el desarrollo de software un proceso industrial?

Como cada mes desde ya hace un tiempo me llega la revista DotNetMania, a cual estoy subscrito. Es una revista que me gusta especialmente por la calidad de sus artículos y por la capacidad técnica de las personas que escriben en ella.


Como todos los meses, esta semana he recibido la subscripción del mes de febrero. La he abierto con gran interés para conocer los contenidos de este mes pero en esta ocasión lo que más me ha llamado la atención no ha sido ningún artículo sino uno de los anuncios que ella se hace….


En la última página de la revista aparece un anuncia de Alhambra Eidos; El lema principal de la publicidad es: «Apostamos por la industrialización del software«. Dentro de la misma publicidad comentan como dentro de esta empresa realizan un auténtico proceso de fabricación gracias a sus certificaciones en ISO 9001 y CMMI, que les garantiza unos niveles excelentes de calidad…Alhambra-Eidos tiene un método industrial de construcción del software que es gestionada con una estricta planificación, lo que parece que les garantiza el éxito.


Otro tema que me parece gracioso del anuncio es el dibujo que con él se incluye. El idioma representa una especie de cadena de montaje con diferentes operarios trabajando sobre ella y cada uno haciendo su parte de trabajo….haciendo software en cadena.


Justo el día 14 de febrero celebramos un evento en Artalde.NET sobre las metodologías de desarrollo. Es una pena que el autor de esta publicidad no haya acudido al evento, porque hubiera sido un evento aún más entretenido de lo que fue.


Pensar que la creación de software es cómo la creación es cualquier otro producto industrial me parece un tremendo error. Hacer software no es cómo hacer coches y no cómo hacer zapatos. No me imagino a una empresa de software haciendo un producto dentro de una cadena de montaje…1 + 2 no siempre no 3 en este mundo.


Creer que los procesos de software son universales y que son totalmente reproducibles independientemente del cliente o proyecto que hagas es uno de los errores más grandes que se pueden cometer pero esta forma de pensar es más habitual de lo que gustaría. Señores, hacer software no es cómo hacer un puente, no es cómo hacer un coche…analizad los últimos proyectos en los que habéis intervenido y pensad si realmente todos son iguales y si a través de procedimientos y reglas universales los prodrías sacar adelante con mejor calidad.


Sobre el tema de las certificaciones y el valor de las mismas no creo que merezca la pena volver sobre eso. Mucho se ha hablado sobre la validez de las mismas y cómo realmente tener una certificación no significa nada. Por ejemplo, puedes tener una certificación CMMI y tener cientos y cientos de páginas con tus requisitos pero que realmente tu captura de requisitos sea malísima…tener miles de análisis y diseños explicando tu aplicación no significa nada si no la tienes actualizadas y señores, seamos realista, esta documentación nunca está actualizada….


El dibujo de la publicidad también me hace pensar sobre lo fácil que sería tener un pool de programadores….si todo esta procedimento, si todos los procesos son claros y útiles, los programadores podrían ser cómo piezas intercambiables, ya que el proceso industrializado lo permite; peones/operarios del software.. 


El hecho de que «tengas» todo procedimentado y escrito en infumables documentos, no significa que éstos sean conocidos por el personal de los grupos de desarrollo ni que éstos sigan estos procedimientos. Claro, lo primero que se hace siempre que se llega a un nuevo trabajo es pedir los procedimientos, estudiarlos y hasta que éstos no los tienes grabados en la memoria no empiezar a hacer nada…


También me gustaría preguntarles si los recursos con lo que cuentan son también como piezas industriales, como máquinas que hay que engrasar de vez en cuando. Y sí, cómo veréis he hablado de recursos y no de personas, porque con tanta certificación, industrialización y procedimientos no sé si ha sitio para pensar en esto del desarrollo de software el factor clave no deja de ser la persona…sí, la persona. Por cierto, ¿dónde encaja en esa método industrial el talento, la iniciativa o la creatividad?


Ya por último, y tampoco por alargarme mucho más, (que podría), sólo quería puntualizar que cada empresa es libre de hacer lo que quiera y hacer la publicidad de la mejor manera que considere para conseguir sus clientes…..tengo que reconocer que esto es un negocio y que la idea que se transmite puede servir para llegar o convencer a algunas clientes, aunque la realidad pueda ser otra. Por mi parte, considero que el contenido de esta publicidad plasma unas ideas sobre el desarrollo de software bastante discutibles y en mi opinión personal, erróneas y posiblemente, perjudiciales.

Pruebas de carga con WCF

En CodePlex hay una nueva herramienta para facilitar hacer pruebas de carga sobre aplicaciones WCF.


A partir de una traza de WCF y de un proxy o de una interfaz WCF, es capaz de generar un unittest que repite la misma secuencia de llamadas que se ha encontrando en la traza. El código es fácilmente modificable por lo que permite hacer cambios de una manera sencilla para adaptarse a nuestras pruebas.


Se genera código tanto para Visual Studio 2005 como 2008. En ambas versiones incluye una wizard para generar la traza y procesarla dentro de Visual Studio.


Las características principales son:



  • Replay of captured scenario in a unit test that can be included in a load test.

  • Support for the DataContractSerializer.

  • Support for message contracts.

  • Support for proxies generated using svcutil.

  • Support for clients that create proxies at run time from contract interfaces.

  • Supports calls to multiple services in a single scenario.

  • Supports multiple calls to the same service operation.

  • Filtering by SOAP action of which messages in the trace to replay.

  • Readable and modifiable code is generated.

  • Automatic association of trace message with proxy method (requires all operations to have a unique SOAP action).

  • Support for client and server side traces.

  • A command line tool for processing traces and generating code.

  • Visual Studio 2005/2008 integration (Team Developer, Team Test, Team Suite and for 2008 also Professional)) that can be used instead of the command line tool.

Podéis ver toda la información aquí.

[Artalde.NET] Ven a llorar con nosotros sobre….metodologías de desarrollo

Ya tenemos nuevo evento en Artalde!!, el grupo de usuarios del País Vasco.

Esta vez hemos preparado un evento abierto a la participación de todos los asistentes para hablar y comentar todas las dudas que surjan sobre el tema de metodologías de desarrollo.

Anteriormente ya preparamos un evento con la misma fórmula, un "Ven a llorar con nosotros sobre arquitectura", que gustó bastante, así que hemos vuelto a optar por esta misma fórmula.

Rodrigo Corral y yo mismo haremos una pequeña introducción a los principales aspectos de este tema con el fin de romper un poco el hielo y así todos los asistentes puedan animarse a comentar cualquier tema que consideren. Los asistentes podrán ser parte activa del evento y comentar todas sus experiencias.

El evento será el día 14 de Febrero en la Universidad de Deusto. La agenda es la siguiente:

  • 19:00 Registro
  • 19:15 Ven a llorar con nosotros sobre….metodologías de desarrollo.
    ¿Qué son las metodologías?
    ¿Realmente son necesarias?
    ¿Qué eso de las metodologías ágiles?
    ¿Cuál es la mejor?
    ¿Por dónde empiezo?…

Si estáis interesados en acudir al evento no olvidéis registraros aquí.

Ralentización en la carga de ensamblados firmados con un certificado

Hace poco hemos tenido un problema curioso en el grupo de desarrollo en el que trabajo actualmente.


Tenemos un servicio windows que sirve de host para servicios WCF. El servicio sin firmar nos funcionaba sin ningún problema pero los problemas empezaron cuando intentamos firmarlo digitalmente….con el ensamblado firmado no conseguíamos arrancar el servicio windows.


Constantemente obteníamos un error de timeout en el arranque. A esto hay que añadirle, que otros módulos hechos en C++ ( no manejado ) los firmábamos y nos funcionaban correctamente.


Aunque una vez explicado el problema puede tener su lógica, el tema nos llevó bastante tiempo y pruebas hasta que conseguimos dar con el problema, así que espero que si os encontráis en la misma situación os pueda ahorrar algo de tiempo.


La explicación es el siguiente….


Cuando el CLR carga un ensamblado firmado digitalmente con un certificado siempre intenta verificar la firma contra la entidad certificadora. El objetivo de esta comprobación es comprobar si el certificado está revocado o sigue siendo válido. 


El problema de esta comprobación es que supone un coste en el tiempo de carga del ensamblado y puede suponer varios segundos en la carga del mismo. La carga del ensamblado irá más lenta.


Con ensamblados .NET el CLR hace esta comprobación siempre. En cambio, el loader de Windows sólo hace esta comprobación en determinadas circunstancias, por ejemplo, con controles ActiveX. De aquí la diferencia entre nuestros módulos C++ y el ensamblado .NET.


Es importante comentar, que si la comprobación falla, el loader no rechaza el ensamblado y lo carga igualmente. Lo único que no se le dará son los permisos asociados al certificado en «PublisherIdentityPermission».


En nuestro caso, la comprobación fallaba porque nuestra conexión a Internet es a través de un proxy autenticado, por lo que no se podía conectarse a la entidad certificadora. Esto provocaba que el servicio tardase demasiado y diese un error de timeout. Si la aplicación fuese una aplicación windows o de consola sólo hubiéramos notado que la carga del servicio iba más lenta.


A través del fichero de configuración podemos llegar a deshabilitar esta comprobación:



<configuration>



<runtime>


<generatePublisherEvidence enabledfalse«/>


</runtime>



</configuration>


Si queremos usar esta opción con una aplicación que use el framework 2.0 tendréis que descargaros y aplicar este hotfix.  Con la versión 3.0 SP1 o con la versión 3.5 del Framework no es necesario hacer nada adicional.

[Artalde.NET] Domina el código con CodeDom

Ya tenemos aquí el próximo evento del grupo de usuarios del País Vasco.

Domina el código con CodeDom
12 de Diciembre del 2007 – Universidad de Deusto
Agenda:
19:00 Registro
19:15 Domina el código con CodeDom
          ¿Qué es CodeDom?
          Automatizando las tareas de escribir código
          Métodos para automatizar código
          Introducción al grafo de elementos
          Qué no es CodeDom
          En qué ámbitos se usa y en cuáles se puede aplicar
          Futuro, (y compatibilidad con el Framework 3.5)

Ponente: David Martín (Instituto Ibermatica de Innovacion)

URL de registro: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032361768&Culture=es-ES

Lugar:
Universidad de Deusto
Edificio ESIDE, Aula de videoconferencia (2º piso)
Avda Universidades, 24
48007, BILBAO