jueves, 29 de mayo de 2008

Tiempo de Arranque Inicial en Aplicaciones .NET

Para un proyecto en desarrollo estamos evaluando la posibilidad de hacer todo en C++ en lugar de una combinación C++/C# (queremos usar WPF). La razón de esta decisión es una: nuestra aplicación debe iniciarse al iniciar la PC y el tiempo de arranque de .NET es demasiado largo para la experiencia de usuario que queremos lograr. Nuestro caso es muy drástico, ya que buscamos tiempos de arranque virtualmente instantáneos. Si nos decidimos por C++ de forma exclusiva vamos a perder bastante productividad en el proyecto al abandonar WPF.

El problema de lentitud en el primer arranque de una aplicación en .NET (cold start) no es nuevo. Es tan importante que una de las principales mejoras que .NET 3.5 SP1 ofrecerá próximamente es precisamente la disminución de ese tiempo. El arranque después de la segunda vez (warm start) es mucho más rápido y no es un problema tan grave. Además de lo que pueda hacer Microsoft, hay diversas técnicas para mejorar la velocidad de arranque la primera vez (cold start) de una aplicación WPF. Las principales son:

  • Mejora la percepción del usuario utilizando una pantalla de arranque (splash screen) que puede ser en código nativo. http://blogs.msdn.com/jgoldb/default.aspx
  • Pospón cualquier inicialización que no sea indispensable.
  • Coloca cualquier ensamblado con "strong-name" en el GAC.
  • Examina la posibilidad de pre compilar tu aplicación con NGEN
  • Si usas authenticode, evalúa si realmente lo necesitas. Todo el código authenticode debe ser verificado con la autoridad certificadora y eso toma tiempo. Es posible deshabilitar este proceso a partir de .NET 3.5 así:


     

    <configuration>

    <runtime>

    <generatePublisherEvidence enabled="false"/>

    </runtime>

    </configuration>


     

    Info aquí: http://msdn2.microsoft.com/en-us/library/bb629393.aspx


     

  • Minimiza el uso de serialización. Si la necesitas, trata de usar BinaryFormatter en lugar de XmlSerializer.
  • Configura el servicio "PresentationFontCache" para que arranque automáticamente. Este servicio es utilizado por la primera aplicación WPF que corre en la PC e incurre en un tiempo de arranque.

Como siempre tratándose de temas de desempeño es fundamental mediar el impacto que tenga cada cambio que hagas. Adivinar no funciona.

jueves, 22 de mayo de 2008

Una Primera Vista al SDK de Apple para la iPhone……o No

Ayer descargué el SDK de Apple para el iPhone. Durante años he estado involucrado con el desarrollo de sistemas móviles y embedded por lo que me interesó darle una revisada. Me parece que el éxito del iPhone es innegable en el mercado. Parece ser el teléfono que todo mundo "quiere tener" y hay que reconocer que Apple sabe hacer muy bien las cosas cuando se trata de experiencia de usuarios y facto "cool". Además el universo de gente con iPhone (sobre todo en América Latina dónde aun no sale oficialmente a la venta) es un interesante grupo de early adopters de la tecnología y de tomadores de decisiones. Pronto será más relevante en América Latina dados los acuerdos (estos si ya oficiales) que Apple anunció recientemente con los principales operadores de telefonía celular en la región incluyendo a América Móvil (Telcel en México). También será más relevante en espacios corporativos dada su anunciada funcionalidad ActiveSync, licenciada de Microsoft, para interconectarse a servidores Microsoft Exchange.

Desde hace algún tiempo la comunidad hacker había encontrado la forma de romper los candados de seguridad del iPhone para poder instalarle software de terceros, cosa que originalmente no era aprobada por Apple (sólo podías hacer aplicaciones que corrieran dentro del navegador de Internet). De hecho, los kits de desarrollo de la comunidad hacker exponen más funcionalidad de la que expone el SDK "oficial" de Apple aun hoy. Sin embargo, estos kits hacker están pobremente documentados por lo que creo que la mayoría de los desarrolladores hacia adelante gravitarán más hacia el SDK oficial aunque esté un poco más limitado. Una desventaja importante del SDK oficial es que requiere una Mac Intel con Leopard (OS X 10.5) para poder desarrollar, mientras que con los kits hacker puedes desarrollar en una PC con Windows o Linux.

Quisiera hablarles más del SDK pero…..al bajarlo Apple te hace aprobar un acuerdo que básicamente dice que todo lo que veas está bajo NDA. Así que cada quien tendrá que bajar el suyo de http://developer.apple.com/iphone/index.action y revisar la documentación por sus cuenta (o en foros privados de Apple con colegas cercanos que también hayan bajado el SDK).

Esto me parece una de las ideas menos afortunadas que he visto recientemente. Ya me he encontrado con algunos blog posts de expertos en desarrollo para iPhone que se han tenido que quitar por "violar el NDA". Para un ejemplo: http://www.cocoamachine.com/blog/ Creo que uno de los elementos más poderosos que tenemos como desarrolladores es participar en las comunidades de colegas. ¿Cuántas veces no encontramos un ejemplo resuelto en algún post de otro colega? Apple al limitar esto en mi opinión dificulta innecesariamente la construcción de aplicaciones para su plataforma. ¿Ustedes que opinan?

Microsoft es mucho, mucho más abierto hacia los desarrolladores. Vale la pena que los adoradores de Apple reflexionen un poco sobre esto.


 

jueves, 15 de mayo de 2008

¿Que hay de nuevo en .NET 3.5 SP1?

Hace unos días Microsoft libero la versión Beta del service pack 1 para .NET 3.5. Todos los detalles están en el blog de Scott Guthrie (en inglés), vicepresidente de la division de herramientas de desarrollo de Microsoft.

A continuación un breve resumen:


Mejoras a desarrollo web con ASP.NET:

  • Soporte de "andamiaje de datos". Mejoras a los controles de datos de ASP.NET para facilitar la construcción de aplicaciones simples de datos. Tutoriales de Scott Hanselman aquí.
  • Sistema de ruteo dinámico que te permite controlar totalmente como se ven tus URLs.
  • Integración desde ASP.NET AJAX con los botones de "Back" y "Forward" de tu navegador.
  • Combinación de scripts en una página con el elemento .
  • Mejor desempeño en el diseñador web.
  • Opciones para formatear JavaScript en el editor de código como tu quieras.
  • Mejor soporte IntelliSense en JavaScript para librerías comunmente utilizadas como JQuery, Prototype, Scriptaculous, y ExtJS.
  • Mejor soporte de refactoring para servicios WCF. Ahora Visual Studio corrige las referencias en tu web.config y las referencias SVC.
  • La versión gratis Visual Web Developer 2008 Express Edition ahora te permite desarrollar proyectos de librería de clases y web applications.

Mejoras a desarrollo de smart clients:

  • Arranque inicial más rápido de aplicaciones .NET la primera vez que cargan
  • Nueva instalación de .NET más ligera para clientes. Esta versión de .NET no incluye por ejemplo todas las librerías web que normalmente no se usan en un cliente, entre otras. Por lo tanto, es más pequeña, su descarga es más rapida y facilita el despliegue. En Visual Studio puedes marcar que deseas soportar este subconjunto de .NET y se verificará que tu codigo no use algo fuera de este.
  • Nuevo y mejorado instalador de .NET (bootstrapper) que puedes incluir en el instalador de tus aplicaciones, simplificando el despliegue.
  • Múltiples mejoras a ClickOnce incluyendo soporte desde Firefox.
  • Nuevos controles de Windows Forms: Imagenes vectorizadas, forma de impresión y repetidores de datos (para reportes principalmente).
  • Mejor desempeño de WPF (Windows Presentation Foundation) en muchos escenarios de dibujo y animación y mejor escalabilidad en controles que manejan datos como ListBox, ListView y TreeView.
  • Mejoras multiples al Data Binding de WPF.
  • Soporte a efectos de sombreado (distorsiones) que corren en el procesador gráfico. Los puedes programar tu mismo.
  • Interoperabilidad entre WPF y Direct3D.
  • Mejoras al editor de XAML de Visual Studio.

Mejoras en el acceso a datos:

  • Soporte a SQL Server 2008 en todos los diseñadores de Visual Studio
  • Nuevo ADO Entity Framework y LINQ to Entities. Esto es todo un tema, puedes encontrar un tutorial aqui en inglés.
  • Librería ADO.NET data Services para crear servicios REST facilmente.

Mejoras a WCF (Windows Communication Foundation):

  • Mejoras a escalabilidad
  • Soporte al ADO.NET Entity Framework (mencionado arriba) en contratos WCF

Mejoras a VB y C#:

  • Deducción de un esquema XSD de cualquier fuente XML directamente en VB.
  • Mejor detección de errores de semantica en tiempo de edición (antes de compilar) en C#.

También hay muchas mejoras a Team Foundation Server y solución de muchos bugs. Recuerda que esta es una versión beta así que ten cuidado al usarla. Microsoft planea liberar la versión final este verano (yo estimo agosto-septiembre). Mientras puedes bajar el beta de aquí.