miércoles, enero 30, 2008

Updated MEDC 2006 Hands On Labs for Mobile Client Software Factroy

Here's the update.

The original HOL was designed for drop 12 of the MCSF and there were some namespace chages by the final version. All projects should be working by now, we have used them several times.

This version targets VS05, if you open it on VS08 consider the following:

  • You wont be able to use the guidance and do HOL 4 for Orientation Aware.
  • When prompted to update just leave the projects in .NET 2.0 (there is no easy way to change that back if you upgrade them to 3.5).
  • You will need to replace the dlls in dlls/MobileSoftwareFactory with the ones in dlls/MobileSoftwareFactory08. The main difference is now Mobile.DataAccess.dll uses SqlServer CE 3.5 instead of 3.0.3600.0. This is important, even tough it compiles you will have troubles at runtime.
  • Sometimes you might need to upgrade the sdf file manually.

Next month we will be releasing on CodePlex an updated version of MCSF that works with VS08, except for OrientationAwareControl. Clarious Consulting is planning an update for their OAC which you could use instead.

I didn't write the HOLs, I'm just making the update we used internally available, anyway, if you have some trouble it might be something we already ran into, so please leave a post on the Mobile Blocks at Codeplex or leave me a message here.

martes, enero 29, 2008

Web Development Helper y Otras Herramientas para Desarrollo Web

El Web Development Helper es una herramienta muy útil cuando se desarrolla en ASP.NET. En este caso nos muestra con el Http Logging habilitado todos los requests que esta haciendo Interent Explorer, esto nos puede ser muy útil como por ejemplo en este caso para saber porque no estaba cargando el Xaml de una aplicación de Silverlight. Un error muy menso obviamente, pero detactado rápidamente con la herramienta, pudieron haber sido muchas otras cosas, un script que cargaba no cargaba bien el Xaml.

image

Adicional al HttpLogging, se integra bastante bien con ASP.NET de tal forma que desde ahí pudieramos ver el ViewState, Cache, Trace, tiene una consola de Script para escribir, un DOM Inspector entre otras cosillas interesantes. Puedes descargarlo desde aquí.

Otras herramientas básicas para el desarrollo en Web son:

Fiddler: monitorea el puerto 80.
IE Developer Toolbar: nos permite ver como Internet Explorer esta rendereando nuestra página seleccionando elementos en ella y explorando el DOM.
BugZilla: add-in para Firebird con excelentes características para depuración.
ScriptSharp: compilador de C# a JavaScript, el logging para JavaScript es muy útil.
Visual Studio 2008: con soporte mejorado para manejo de hojas de estilo y depuración e intellisense para JavaScript.
Aptana: IDE basado en Eclipse que con mejor soporte para depuración e intellisense para JavaScript (también sirve para Ruby).

Seguramente se me pasan algunas que no utilizo tan frecuentemente. Lo importante de estas herramientas es saber que hacen y tenerlas presentes para saber cuando usaralas.

martes, enero 22, 2008

Aspect Oriented Programming Aplicado - PostSharp, Logging y HttpSimulator

Siempre me había intrigado por AOP y es que la idea de programar basado en aspectos en lugar de funciones o metodos o código secuencial es bastante atractiva. Obviamente no es para todo código, pero hay muchos "aspectos" que quisieramos poder tener encapsuladas y no sólo en un objeto, sino, despreocuparnos y no tener que invocarlas nosotros mismos.

Ejemplo Simple - Logging.

Pensemos que queremos loggear excepciones.

image

Ok, ese el código feo de novato. Ahora refactoricemos un poco. Podría estar en una clase y para cuestiones de la prueba hagamosla estática.

image

Ahora apliquen eso a todos los metodos de la clase. ¿Qué? Bueno supongan que nos interese enterarnos en nuestro archivo de Log de todos los lugares donde lleguue a ocurrir una excepción. Vamos a convertir esto en un aspecto. Refactoricemos de nuevo.

image

Simplemente hicimos nuestra clase serializable (necesario por PostSharp), hereda de OnExceptionAspect, overrideamos el Metodo OnException y listo, Logueamos tal como antes.

image

Ahora simplemente decoramos nuesto metodo con nuestro nuevo atributo, corremos la app y listo. El atributo también podría ir en una clase y aplicarle algunos filtros. Estas son sólo algunas de las posibilidades.

Puedes descargar el código aquí

Por mantener breve el ejemplo, la clase loggin es muy simple, en una aplicación real sugeriría usar el Loggin Application Block que es parte del Enterprise Library o Log4Net, ambos son open source y podrían integrarse con PostSharp.

Para un ejemplo aún más simple que este, vean el Video de Intro de PostSharp. El ejemplo me parecio poco práctico, sin embargo, es muy ilustrativo respecto a como usar la herramienta y sólo dura 5 minutos. Pueden bajar el código del video aquí.

Otro Ejemplo Simple - HttpSimulator

Hace algún tiempo escribi respecto al HttpSimulator, desde entonces lo hemos tenido que usar muchas veces para simular el contexto de Http en clases que dependen de algun objeto de ASP.NET y queremos probarla sin necesidad de que tenga dependencias a los objetos reales del framework, es decir, no queremos tener que usar realmente sesión y pasar por todo el pipeline de un request web, sólo para probar un simple metodo.

En el código a descargar viene todo el HttpContext, ahorita nos enfocaremos a las pruebas unitarias, estilo TDD para el HttpContext y como usarlo con PostSharp, en la prueba usaremos un WebDependentClass

image

Eso esperamos que arroje una excepcion, ya que WebDependentClass se debería ejecutar en un contexto web para que pueda usar HttpContext.Current tal como se muestra.

image

Ahora veamos como se haría esto con el HttpSimulator para lo que creamos otra prueba.

image

Es simple, se obtiene el path, se crea la instancia, se empieza a simular el request, se hace lo que se tenga que hacer y al salir del using se ejecuta el dispose y termina la simulación. Nuestra prueba pasa y todos contentos. Sólo que es mucha talacha. Puede haber 126 pruebas más que usen el Simulator. Aunque se podría simplificar un poco la creación, terminaríamos aún así con código repetido y el using no tenemos manera de evitarlo.

Con AOP, tenemos algo como lo siguiente:

image

El atributo se encarga de todo, inclusive si todas las pruebas de nuestro TestClass o nuestro Assembly de pruebas necesitaran del simulador podríamos definir el atributo a nivel de clase o assembly para aplicarles el mismo aspecto.

La implementación del atributo es de lo más simple. Tal como hicimos con el Logging, tenemos la clase serializable y hereda de un atributo predefinido en PostSharp.

image

Parece un Surround with snippet no? Es similar sólo que para tiempo de compilación.

Si quieres usarlo en tus pruebas, simplemente agrega el Assembly HttpSimulator y el atributo a las que dependan de un contexto Http. Puedes bajar el código de aquí.

Links

Downloads

SuperSimpleSample
LoggingSample
Attribute para el HttpContextSimulator
Todos los samples de este post
PostSharp Installer

PostSharp

PostSharp en .NET Rocks
PostSharp
Video de Intro de PostSharp

HttpSimulator

Post viejo mio
HttpSimulator

Miguel Madero

jueves, enero 17, 2008

Net CF Loader Log nos ayuda a depurar aplicaciones.

Tenemos todo bien configurado, nuestros ambientes de prueba, servidor de integración continua, pruebas unitarias, hacemos pruebas de usabilidad, integración, etc, pero siempre estamos expuestos a que se nos escape algún bug. Escribi hace algún tiempo respecto a como tratar los bugs, a veces hay que tomar medidas alternas.

Los bugs más difíciles son aquellos que tienen que ver con cuestiones externas a tu aplicación, el sistema operativo, el explorador que usa tu cliente, cuestiones externas difíciles de reproducir como tipos de conexión (celular, wi-fi, etc), etc. Todo esto la mayoría de las veces termina siendo alguna babosada.

Esta es la historía. Como siempre, todo funciona bien en nuestro entorno de pruebas, se crea el installer, se distribuye usando UpdaterAgent (como ClickOnce para Mobile) y en algunas agendas funciona la app y en otras no.

Primer paso revisamos el log de errores.

----------------------
Version: 3.0.2933.38083
17/01/08 11:33:57 a.m.
Cerrando la aplicación. Error inesperado: InvalidProgramException
-----------------------
-----------------------
Version: 3.0.2933.38083
17/01/08 11:33:58 a.m.
System.InvalidProgramException: InvalidProgramException
en System.RuntimeType.InternalGetConstructors()
en System.RuntimeType.GetConstructors()
en Microsoft.Practices.Mobile.ObjectBuilder.ConstructorReflectionStrategy.GetMembers()
en Microsoft.Practices.Mobile.ObjectBuilder.ReflectionStrategy`1.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.BuilderStrategy.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.PolicyProviderStrategy.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.BuilderStrategy.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.SingletonStrategy.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.BuilderStrategy.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.TypeMappingStrategy.BuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.BuilderBase`1.DoBuildUp()
en Microsoft.Practices.Mobile.ObjectBuilder.BuilderBase`1.BuildUp()
en Microsoft.Practices.Mobile.CompositeUI.Collections.ManagedObjectCollection`1.BuildFirstTimeItem()
en Microsoft.Practices.Mobile.CompositeUI.Collections.ManagedObjectCollection`1.Build()
en Microsoft.Practices.Mobile.CompositeUI.Collections.ManagedObjectCollection`1.AddNew()
en Microsoft.Practices.Mobile.CompositeUI.Common.ControlledWorkItem`1.OnBuiltUp()
(más y más llamadas)

Nuestro stack es tan grande que ni sentido tiene reproducirlo. Pero hasta ahí es la parte importante. Tenemos un InvalidProgramException que no nos dice mucho. Lo más cerca que podemos llegar es hasta el Código de ConstructorReflectionStrategy.GetMembers, el resto es el framework. Vamos a depurar y encontramos que el error esta al querer obtener los constructores de una de nuestras clases, vamos y revisamos que ahí no este el problema. Tiene un constructor publico que no recibe parametros al igual que las clases de las que hereda, tal como sospechabamos el problema no es esa clase.

Vamos a ver que hay de partícular en las agendas que fallan. Empezamos por crear una prueba unitaria que no haga más que usar directamente reflecto para obtener los constructores de esa misma clase. Se prueba en el emulador y todo funciona, se prueba en una de las agendas que falla y falla. Excelente, ya aislamos el problema. ¿Y ahora? Seguimos sin saber el porque del error, sólo que truena al tratar de obtener los constructores. Seguramente es un problema en como se cargan los objetos y ahí entra el Loader Log.

Se empieza por activar usando el Net CF Logging Configuration que es parte de los .NET Compact Framework Powertoys para 3.5.

image

Siguiente paso, correr nuestra aplicación en un dispositivo que si funciona y copiar a nuestra maquina el archivo de log "netcf_Loader.log". Luego hay que hacer lo mismo en una agenda que no funcione. El log es muy fácil de interpretar y Steve Prtachner ya lo describio a detalle, así que no lo haré ahora, pero para lo que queríamos encontrar de diferencia ni siquiera necesitamos tanta información.

Con los dos archivos en nuestra máquina usamos Beyond Compare o alguna herramienta similar y vemos las diferencias.

image

Al principio todo es igual, salvo cosas no importantes como el ProcessID. La secuencia y que busca y resuelve cada referencia es identica hasta que llegamos al punto donde truena.

image

Vemos que después de cargar el Modulo ConnectionMonitor, trata de cargar el de SqlServerCE 3.5 en el log de la agenda que si funciona, sin embargo, la secuencia es muy distinta en las otras y trata de cargar aún la versión anterior del SqlCE.

Listo, problema resuelto, resulta que el GetConstructors, para obtener los members de esa clase carga los modulos hacía los que tiene dependencias, uno de esos es SqlServerCE 3.5 y no estaba bien instalado en la agenda.

En este momento podrías estar pensando, porque diablos no revisandon la instalación de todo antes de continuar, claramente era un problema de instalación. Claro que podríamos haber hecho un checklist y revisar que todo estuviera bien, sin embargo, no hicimos eso y tuvimos que darnos cuenta de una manera distinta, pero esa es otra lección aprendida y no la del tema de este blog. Por eso les decía que este tipo de problemas muchas veces termina siendo una babosada.

El Loader Log nunca me había resuelto nada, aunque lo había usado un par de veces sin ningún éxito. Lo importante de esta y tantas herramientas, de las que escribire más adelante es el conocerlas y saber que estan ahí instaladas en la máquina para que algún día, tal vez después de algunos años la uses y te saquen de algún problema. Esa es la lección del día.

martes, enero 08, 2008

Siempre he considerado a prodigy como la única alternativa de Internet para negocios y esto ha sido especialmente porque otros proveedores tienen puertos bloqueados y el tipo de red que ellos utilizan no permite muchas de las actividades necesarias para una empresa. Por otro lado, considero que han tenido un buen soporte al cliente y una buena comunicación.

Todo esto ha cambiado recientemente, con “La protección del puerto 25”. Entiendo que es una medida necesaria debido al SPAM, sin embargo, para todo negocio es indispensable el envío de e-mails utilizando las cuentas de la compañía. Obviamente la situación no es tan crítica como para no poder mandar correos jamás, hay varias alternativas (desde usar Webmail, hasta solicitar que eliminen la protección para tu cuenta. Más información). El problema radica realmente en la falta de comunicación de esta empresa hacía sus clientes.

Mes a mes mandan publicidad y todo tipo de información junto con el recibo, tienen nuestros e-mails alternos al momento de que creamos una cuenta para pagarles el recibo y, vamos, se trata de una empresa de comunicación que no debería tener problema en contactarnos para avisarnos de sus nuevas políticas que van a afectarnos.

Su respuesta es, les avisamos enviando un correo a un cuenta de prodigy. ¿Saben lo ridículo que es esto? Si esto sólo nos va a afectar a los que usamos una cuenta distinta como nos escriben a esa dirección, ellos mismos dicen: “La protección del puerto 25 no afectará a aquellos usuarios que estén utilizando los servidores SMTP de TELMEX, es decir, esto no afectará a usuarios TELMEX con cuentas @prodigy.net.mx”. Así cuando cambien mi mis políticas de venta para mis clientes de Alemanía le voy a mandar una carta a todos mis clientes en Italia a ver si aquellos de Alemania se enteran y para que les de más coraje les voy a comentar, “su sucursal de Italia debería haber recibido una notificación”, “ahhh no tiene sucursal en Italia?, debería tener una”. Todavía me dicen, debería checar su cuenta de prodigy.

Bueno en si la forma de resolverlo a rápida y sencilla, la medida es buena, pero para un negocio durar un día o más sin poder enviar mails es algo critico y parece que a Telmex no le importa mucho esto.

Aún cuando le digo a la persona de soporte, “me parece absurdo que el medio de avisarme sea mandándome un mail a prodigy, sólo se lo digo como retroalimentación y me gustaría que lo tomaran en cuenta para futuros avisos”, su respuesta fue, “no me parece absurdo y es el primer cliente que me lo dice”. Así que por favor compartan y expresen su odio.

Les dejo el link de un post de alguien que parece odiarlos más que yo en este momento.

http://www.malditoweekend.com/telmex-bloquea-puerto-25-smtp/

Y un link de gente medio desorientada.

http://www.matuk.com/forosmatuk/?forum=3&topic=212&page=2

Esta es la liga para desbloquear el puerto, úsenla.

https://www.beneficios.telmex.com/puerto25Prod/iniciaPuerto25Internet.do

Por cierto, si no han pasado por esto aún es porque no reinician aún su modem, ayer se fue la luz por la noche y al día siguiente no más SMTP. Llenen el formulario de una vez ya que al parecer toma un tiempo para que lo desbloqueen. Si este post se publica significa que ya lo hicieron ya que estoy publicándolo desde Outlook. Llene el formulario a las 8:40 pm del día 7 de Enero y tomo hasta la hora de publicación de este post.

Miguel A. Madero Reyes
Integradores Tecnológicos S.C.
www.integradorestecnologicos.com
www.miguelmadero.com (blog)

viernes, diciembre 28, 2007

Instalando Enterprise Library en Visual Studio 2008

El proceso es realmente simple. La idea original reamente se la vole a Ezequiel así que en su post verás más información detallada. Como no encontre información de como hacer esto en la Web decidí publicarlo.

Basicamente haces lo mismo que al instalar WCSF, pero sobre el MSI de Mayo de Enterprise Library. Al estar cambiando las entradas en el RegLocator usando Orca modifica donde diga 8.0 y ponle 9.0, lo guardas y listo para instalarse.

Editare este post con Issues y soluciones conforme las vaya encontrando.

Installing Enterprise Library in Visual Studio 2008

The process is really simple. I actually took the idea on how to do this from Ezequiel so you will need to see his post for detailed information.

Basically you do the same than when installing WCSF, but do it with the EntLib May MSI and in the RegLocator change the entries that reference 8.0 for 9.0 and that's it. Save and install and have fun.

I will edit this post with issues and workarounds as I find them.

martes, diciembre 04, 2007

Undo Pending Changes de Otros Usuarios

Hay veces que alguien sale de vacaciones o se va de la empresa o simplemente necesitamos trabajar con algún archivo que alguien dejo check-out en nuestro server y lo peor es cuando es un Check-Out exclusivo.

Aún siendo administrador no se puede dar click derecho y deshacer los cambios de alguien más, pero lo podemos hacer desde consola. Bueno al grano.

Supongamos que alguien dejo la empresa y algunos check-outs detrás. Primero necesitamos saber los Workspaces que manejaba y deshacer sus cambios. Desde consola de VS corremos lo siguiente

tf workspaces /owner:lizet.garcia /server:http://itmTFS:8080

Luego para cada uno de sus Workspaces hacemos un undo.

tf undo /workspace:lizet.garcia;itmLiz /server:http://itmtfs:8080 /recursive "$/"
tf undo /workspace:lizet.garcia;officePC /server:http://itmtfs:e8080 /recursive "$/"

Si quisieran simplemente hacer el undo de un solo archivo, quiten lo de recursive y especifiquen el path completo en lugar de "$/"

Para más info e imagenes chidas vean el blog de Alex Thissen

viernes, noviembre 30, 2007

Problemas con Silverlight 1.1 y VS 2008

Horrible sorpresa, las herramientas para Silverlight 1.1 no jalaban en el release de VS, lo bueno es que MS ya saco un update:

Fix for Silverlight 1.1 Tools Alpha for Visual Studio 2008 Package Load Failure
Pueden encontrar más info aca. Para los de Integradores que lean esto, el installer ya está en nuestro server junto en el folder de BlendSeptember, sino simplemente descargalo aquí, desinstala antes el del Beta 2 si es que aún lo tenías y reinstala este y listo.

Hablando de Silverlight Scott publico una presentación que sirve como una buena introducción.

Por cierto ahora en Web habrá muchas novedades sobre ASP.NET, Silverlight 2.0 (actualmente conocido como 1.1), IIS 7.0, vean un post con más info.

domingo, noviembre 25, 2007

Instalaciones en VS 2008 y VS 2005

Aunque de acuerdo con Scott Guthrie se puede tener 08 y 05 instalados de manera simultanea, en la práctica esto puede ser un poco problematico principalmente al instalar paquetes o add-ins que extiendan el IDE.

Yo utilizo un add-in, Resharper (que no funciona muy bien aún, pero ya se puede instalar en 08), otra es Guidance Automation que en su última versión de Julio 2007 ya es compatible con 2008. Algunos me han dicho que tienen problemas con controles como Telerik. El problema es que cuando instalas algo como esto teniendo ambas versiones te instala únicamente en 2005.

Bueno el truco es el siguiente, de acuerdo a Bill Evjen se necesita ejecutar algo como

msiexec /i ReSharperSetup.3.0.1.msi VSVERSION=9.0

Pueden sustituir ReSharperSetup por lo que quieran instalar.

Si esto no funciona, en el registro dentro de computer\hkey_local_machine\software\microsoft\visualstudio\8.0\packages busquen (Ctrl-F) el paquete por nombre, por ejemplo Resharper o GAT, este tiene un GUID como Key, usenlo para buscar Services, Text Editors, Project Templates, etc y copienlos en el mismo path sólo cambiando 8.0 por 9.0 y listo.

Espero les funcione, aunque si pueden migrar sus proyectos de 2005 a 2008, mejor desinstalen 2005 y reinstalen los add-ins o paquetes. Recuerden que no necesitan migrar a 3.5.

Algunos de los problemas que hemos encontrado al migrar, es que el designer trabaja distinto, por lo que algunos controles no funcionan, al migrar a 2008 (aún usando el Framework 2.0) te actualiza las referencias para usar SQL Server CE 3.5 en lugar del 3.1, lo que te obliga a migrar sus referencias que pudieran tener a su vez referencias a SQL Server CE 3.1. Antes de desinstalar 2005 revisen que todo funciona bien en 2008.

Si aún tienen el Beta 2 migren al RTM aunque hay algunos pasos sencillos para desinstalar y reinstalar (Post 1, Post 2), puede ser más conveniente formatear y reinstalar desde cero.

jueves, noviembre 08, 2007

Tour Tecnologico Microsoft 2007

El próximo jueves realizaremos en el ITESM una serie de conferencias como parte del Tour Tecnológico. Espero puedan acompañarnos.

Chequen las invitaciones, la primera es para desarrolladores y la segunda para IT Pros. Pueden asistir a uno o ambos eventos.

Por favor regístrense dando click en la invitación. No es indispensable el registro para poder asistir, sin embargo, nos ayuda a estimar cuanta gente asistirá y así poder contar con libros, premios y souvenirs suficientes. Por favor reenvíen la invitación a todo el que crean que pueda interesarle. El evento no tiene ningún costo, pero pueden llevar alimentos enlatados y agua purificada para apoyar a Tabasco.









miércoles, noviembre 07, 2007

DotMSN - .NET Messenger library - Download

Es padre cuando uno programa unicamente por diversión. Digo es divertido en el trabajo y todo, pero es bueno hacer algo totalmente distinto.

Recientemente hice dos, uno es un generador de código que utiliza un Custom Tool de VS para que en lugar de crear un DataSet nos cree otro tipo de objeto, pero bueno este medio se relaciona con algo que necesitamos, pero el post de hoy habla de una librería de MSN.

Todo empezo porque estaba mandando SPAM con invitaciones para el evento de DotNetLaguna, el Tour Tecnológico Microsoft. Estaba por mandarle algunos e-mails a mi lista de contacto de MSN, sólo que esto implica muchos pasos.

Opción 1. Darle click derecho luego mandar mail, copiar el correo, ponerle subject, etc o ir copiando los mails de cada uno a un correo masivo. El maldito MSN no te permite seleccionar N contactos y luego decir algo como manda mails a todos :(
Opcion 2. Guarda la lista de contactos (Menu Contacs, Save, etc) abrir el archivo ctt que finalmente resulto ser XML, pero guardo nada de información respecto a grupos, nombres, etc, todo lo que tenía era una lista de e-mails que no me decía mucho.
Opción 3. Programarlo.

Que necesitaba. Tener un lista de mis contactos mostrando nombre, mail, grupo al que pertenecen e ir palomeando los que quiero agregar para mandar mail.

La primera idea fue usar Scripts de Plus, que ya había usado pero para interacciones básicas y como es scripting no tenía una forma fácil de agarrar los datos y meterlos en un grid.

La otra fue tratar de usar el modelo de programación anterior (Plugins) desde el cual era más fácil la interacción con .NET gracias a unos Wrappers que lamentablemente ya no existen ya que MSN Plus migro su modelo de plugins por el de scripts.

Lo obvio fue googlear, aunque ya estaba algo desesperado, para no ser el objetivo, algo que tomara más de 15 mins y no pareciera una solución clara ya era algo que pintaba para ser abandonado.

Encontre la siguiente librería DotMSN - .NET Messenger library - Download, viene medio mal documentada (solo la documentación autogenerada), pero trae un ejemplo que realiza todo lo básico como conectarte a MSN, buscar en tus contactos, etc.

Cabe acalara que esta es un API para interactuar con los servicios de MSN no para interactuar con el cliente de MSN que fue lo que pense buscar originalmente.

Lo mejor es que aún y que no tiene mucha documentación podría decir que entra en el concepto de código autodocumentado con metodos y nombres de objetos lo suficnetemente claros como para obtener todo lo que buscaba en menos de 15 mins.

Ahorita no puedo subir código, pero les pego aquí lo importante.

// En el constructor nos conectamos a nuestro servicio y cachamos el metodo login
private Messenger messenger;
public Form1()
{
InitializeComponent();
messenger = new Messenger();
messenger.Credentials.ClientID = "msmsgs@msnmsgr.com";
messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";
messenger.Nameserver.SignedIn += new EventHandler(Nameserver_SignedIn);
messenger.Credentials.Account = "junk@junk.com";
messenger.Credentials.Password = "CONFIDENCIAL1234";
messenger.Connect();
}

// El connect es asincrono y el evento se lanza desde otro Thread, por lo que
// usamos el patrón de UpdateUI Method
void Nameserver_SignedIn(object sender, EventArgs e)
{
UpdateUI(delegate
{
if (!messenger.Connected)
return;
dataGridView1.SuspendLayout();
dataGridView1.Rows.Clear();
foreach (Contact contact in messenger.ContactList.All)
{
//ListViewItem item = new ListViewItem();
//item.Text = contact.Mail;
//item.Tag = contact;
dataGridView1.Rows.Add(contact.ContactGroup.Name, contact.Name, contact.Mail);
}
dataGridView1.ResumeLayout();
});
}



///
/// Invoca a un EventHandler desde el thread de la interfaz de usuario
///

///
private void UpdateUI(EventHandler action)
{
this.Invoke(action);
}

// Cuando presional button1 simplemente concatenamos lo que nos interesa y listo para Outlook.
private void button1_Click(object sender, EventArgs e)
{
StringBuilder builder = new StringBuilder();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if( row.Cells[3].Value!=null && (bool)row.Cells[3].Value)
builder.Append(String.Format("{0};", row.Cells[2].Value));
}
Clipboard.SetData(DataFormats.StringFormat, builder.ToString());
}


La verdad es que mi ejemplo es de los más simplón, pero fue divertido hacerlo y por otro lado abre una serie de oportunidades interesantes al saber que ahora cuenton con un API que podríamos explotar para algún proyecto real... Ya empiezan a surgir algunas ideas :)

jueves, octubre 25, 2007

Entrevista con AlexTec

Alex es un chavo de 22 años que estudia en el Tec, es muy amable y le gusta ayudar a sus futuros compañeros de universidad.


Alex me platico durante algún tiempo respecto a distintos temas que no me interesaron mucho como cuantos alumnos tiene el tec de monterrey, qué carreras tiene y quien es el rector, sin embargo no me supo decir que materias había de sistemas o que carreras había relacionadas con esa área.


Miguel A. Madero - Integradores Tecnológicos S.C. says:

que carreras hay de sistemas?

Alex says:

¿En qué área te interesa?

Miguel A. Madero - Integradores Tecnológicos S.C. says:

sistemas

Alex says:

¿Por qué me preguntas qué sistemas?

Miguel A. Madero - Integradores Tecnológicos S.C. says:

es el área que me interesa

Alex says:

¿En serio?


Cómo parecía no nos entendíamos decidí entrar en confianza con temas más personales. Primero me dijo que el estudia Ingeniería en Tecnologías Computacionales

Miguel A. Madero - Integradores Tecnológicos S.C. says:

que estudias?

Alex says:

Ingeniería.

Miguel A. Madero - Integradores Tecnológicos S.C. says:

en que?

Alex says:

¿Me estás haciendo una pregunta?


Bueno... ¿Estás interesado en hablar más acerca de qué es lo que has dicho o dejado de decir?

Miguel A. Madero - Integradores Tecnológicos S.C. says:

ingeniería en que?

Alex says:

ITC, Ingeniero en Tecnologías Computacionales.


Por lo que pensé, este es un ñoño como todos los que estudiaron eso, de seguro se la pasa en su computadora chateando y leyendo o escribiendo blogs. Por lo que decidí comprobarlo con otra pregunta más personal.

Miguel A. Madero - Integradores Tecnológicos S.C. says:

te gustan las mujeres?

Alex says:

Pues la verdad, no había pensado nunca en eso. :-)

Miguel A. Madero - Integradores Tecnológicos S.C. says:

eres jotillo?

Alex says:

¿Te refieres a mí?

Miguel A. Madero - Integradores Tecnológicos S.C. says:

si

Alex says:

Bueno...

Miguel A. Madero - Integradores Tecnológicos S.C. says:

jajaja

Alex says:

¿Qué es tan divertido? :-)


¿No te parece que ya llevamos un buen rato platicando? Me gustaría poder hacer algo relacionado para lo que haya sido diseñado.


Parecía que se había molestado y quería cambiar de tema, por lo que seguimos platicando de otras cosas y luego insistí.

Miguel A. Madero - Integradores Tecnológicos S.C. says:

te gustan las mujeres

Alex says:

¿Si me gustan...? Hum... No sabría qué decirte, necesito tiempo para contestar a eso con precisión. :-)


Creí que tal vez se refería a que necesitaba más tiempo para conocerme y poder definirse. Eso me asusto un poco, pero quise continuar sin pecar de gay, pensé, esto es sólo un juego de MSN. Fui más directo:


Miguel A. Madero - Integradores Tecnológicos S.C. says:

como definirías tu sexualidad?

Alex says:

¡Soy Alex! Alguien con quien puedes platicar sobre muchas cosas.


Escribe "inicio" para ver lo que puedo hacer.


La verdad no sabía que me estaba insinuando con eso de "muchas cosas". Pero se me hizo raro eso de escribe inicio,


Miguel A. Madero - Integradores Tecnológicos S.C. says:

inicio

Alex says:

Aquí tienes un ejemplo de lo que puedes preguntarme:


¿Qué requiero para solicitar una beca?

¿Cuáles son los valores del Tec?

¿Cuáles son los requisitos para ingresar a una carrera internacional?


Ahí fue donde empezaron las sospechas y dije, tal vez el no es quien pensé que sería y tal vez todo este tiempo estuve simplemente hablando una computadora. Así que tras un poco más de investigación descubrí lo siguiente.


Según su propia definición funciona así:


Miguel A. Madero - Integradores Tecnológicos S.C. says:

como funcionas

Alex says:

El asistente para el lenguaje natural de Colloquis se basa en un programa de análisis semántico registrado, optimizado para la precisión y el rendimiento óptimos a cualquier escala. Para ver todo lo que puedo hacer, escribe "?".


El declara no haber nacido en ningún lado por qué es "virtual"


Miguel A. Madero - Integradores Tecnológicos S.C. says:

donde naciste?

Alex says:

Soy virtual.


Pero el fue creado en:

Miguel A. Madero - Integradores Tecnológicos S.C. says:

quien te creo

Alex says:

Bueno, aprendí todo lo que sé de Colloquis, Inc. en Sunnyvale, CA y Nueva York, NY.


Para hablar con el simplemente agreguen a su MSN a alextec@itesm.mx

miércoles, octubre 17, 2007

Ganate un X-Box y Define los temas del Tour Tecnológico 2007

El 14, 15 y 16 de Noviembre se realizará el Tour Tecnológico 2007. Ahora el evento es más completo que lo que fue en años anteriores el DevDay o el MDCD (Microsoft Developer Community Day), aunque sigo pensando que MS no debería estar cambiando los nombres cada año....

El primer día Microsoft tendrá una reunión va más orientada hacía dueños y directores de empresas que se enfoquen al desarrollo de Software.

El día dos empiezan las conferencias, las cuales estarán divididas en dos ciclos, por la mañana para IT Pros y por la tarde para Developers.

El día tres, se realizará algo que llaman Test Drive, que no son más que HOLs o tallers. Nuevamente en la mañana para IT Pros y por la tarde para Developers.

Lo mejor de todo es que los temas aún no se han definido, por lo que todos nosotros tendremos la oportuniad de escogerlos contestando la siguiente encuesta:
Tour Tecnológico 2007: MSDN

Al contestar tendrás la oportunidad de ganar un X-Box y otros premios.

sábado, octubre 13, 2007

Un mejor post de .NET: El Framework, el IDE y el Lenguaje

Vi un post de the Moth que explica muy bien las diferencias entre el IDE, Framework, Lenguajes y sus versiones.

Asi que lo que yo explique en un post previo en varias paginas el lo resumio con una clara imagen. Si no han leido el mio, no lo hagan y lean el de the Moth a menos que quieran un claro ejemplo de como una alta motivacion al estar escribiendo se puede convertir en una demostracion de la baja capacidad de sintesis.

jueves, octubre 04, 2007

Los desarrolladores de Mobile estamos olvidados. ¿Qué podemos hacer?

Acabo de publicar sobre las novedades de TFS 2008 y estuve reflexionando (nuevamente sobre lo mismo), me gustaría que hubiera tantas nuevas en .NET CF como en otras áreas de VS2008 pero a veces los desarrolladores de Mobile nos sentimos un poco olvidados. Pruebas de estos son las enormes listas de novedades áreas como ADO.NET, ASP.NET, WPF, TFS 2008, AJAX, Silverlight, LINQ ¿y qué tenemos en Mobile?

No hay soporte para Silverlight for devides (aún), no hay soporte para SyncServices for devices (aún), WCF sólo implemente un subset del framework, no hay grandes cambios en ASP.NET for devices. Algunas de las ventajas del IDE no las podemos usar para mobile.

Por otro lado mientras algunos productos como el Smart Cliente Software Factory sigue evolucionando, tan así que se convertirá en algún momento en Acropolis y el Mobile Cliente Software Factory ha sido olvidado.

Bueno finalmente desarrollamos para mobile, así que más acción y menos quejas. Acabamos de migrar el MCSF a .NET 3.5 y funciona de maravilla junto con algunos de nuestros proyectos sólo para probar. La migración fue sencilla, la única parte que falta es el guidance, qué es como ayuda para ciertas acciones tipicas en el desarrollo del proyecto. Esto es porque no las nuevas versiones de GAT y GAX no son compatibles con la que hemos venido usando. Esperamos migrar esto al nuevo GAT y publicar en gotdotnet junto con algunas extensiones que hemos hecho al Software Factory. También en proceso de desarrollo estan unos Hands On Lab del que posiblemente publiquemos su versión en inglés y español.

En cuanto publiquemos la nueva version de MCSF y las extensiones pondre el link.

Por otro lado vale la pena comentar que en el nuevo sistema operativo Windows Mobile 6.0 hay varias cosas nuevas que valen la pena un vistazo. Entre ellas destacan claramente el emulador de celular y GPS.

Algo de lo más fregón para la nueva versión del IDE relacionada con mobile son las pruebas unitarias. Mientras yo publico algo más detallad pueden leer el Post del Equipo de .NET CF con una lista de otras mejoras, algo sobre los .NET CF 3.5 PowerToys y que hay de nuevo para WCF y Mobile

Había publicado ya un poco como parte de otro post algo de lo nuevo para mobile. Así que hago un copy/paste de estas ventajas.

...aunque se espera un WPF/E no será una de estas (Silverlight para mobile), pero existe ya un Compact WCF o WCF-E. El primero, WPF Everywhere, es para usar XAML y las capacidades gráficas de WPF en otras plataformas como Web (ahora conocido como Silverlight) y otros Sistemas Operativos incluyendo Windows CE y por lo tanto Windows Mobile, sin embargo WPF-E saldrá a la luz primero como un componente para diferentes navegadores antes de estar disponible para Mobile, por lo que seguramente no lo veremos incluido como parte de Orcas. Compact WCF usará SMTP para poder tener colas de mensajes en aplicaciones desconectadas y un protocolo para poder comunicarse por push con los dispositivos, estos dos por si sólo son ya grandes ventajas, sin embargo esperaríamos algo de Remoting y WS-* para tener realmente mejores herramientas de comunicación desde estos dispositivos. Aunque no vengan como parte de WCF-E tendremos todo el stack para hacer algo nosotros.
Siguiendo con Mobile, tendremos también disponibles las nuevas características del lenguaje, buena parte de LINQ y otras tantas mejoras. Aunque el Beta de VS actual no incluye el SDK para Windows Mobile 6.0, esperamos que el release de Orcas si lo incluya. Hay otras áreas muy relacionadas con Mobile como Sql Server Compact Edition 3.5 que recibirán grandes mejoras. La más importante de estas considero será SyncServices de ADO.NET, que lamentablemente no contará con la versión de Mobile para esta versión.


Definitivamente, aunque tal vez no como parte de un major release como es Orcas, hay mucha innovación que se está haciendo (y quisiera decir estamos haciendo) alrededor Mobile como gente que lo esta usando junto con Robotics Studio, Virtual Earth, APIs para Facebook, RFID, AJAX, etc. Es sólo cuestión de buscar. Los siguientes son una serie de links que valen la pena:

José Miguel Torres publica de temas de Mobile.
DesarrolloMobile tiene muchos recursos organizados por tecnología.
OpenNetCF agrega algunas cosas que el framework no considera, como mejor soporte para comunicación serial entre muchas
Nick Landry tiene varios posts relacionados con Virtual Earth y Mobile.
OrientationAware.NET la gente de Clarious Consulting extendio el OAC del MCSF para hacer más sencillo el desarrollo para dispositivos con diferentes resoluciones y form factors.

Team Foundation Server 2008. Caracteristicas

Ya se acerca el release date de VS 2008 y junto con este se liberará otro producto muy importante para nosotros, Team Foundation Server 2008. Estuve leyendo el Blog de Brian un post que habla de todas las novedades.

Estas son algunas de las que me parecieron más importantes.

Incorporación de otras herramientas que antes teníamos que instalar, hacer o configurar para que funcionaran como los PowerToys (Annotate y Folder Diff), TeamPlain para WebAccess, ahora la compro Microsoft y la incluye como parte del producto y CI, siendo esto último una de las ventajas más importantes.

Otros puntos clave son la mejora de la administración, una opción de GetLatestOnCheckOut, se podrá trabajar con Windows Server 2008 y SQL Server 2008 al igual que MOSS y Sharepoint 2007.

Hay una que no sé bien como funcione, habrá que probarla, sólo que aún no tengo el cliente de Orcas en mi lap, es más ahorita ni mi lap tengo :( Offline Improvements, por lo que entiendo podrás trabajar sin conexión al server y luego restablecerla. Actualmente es una bronca porque o trabajas sin SourceControl o no te deja editar archivos. Si eliges la primera entonces el cliente simplemente sobreescribe el archivo original teniendo el problema de que cuando regresas a trabajar online tienes que recordar manualmente que archivos editaste para luego darle check-out. Eso es bastante molesto y espero se haya eliminado. Me imagino un mundo en el que puedes ir a trabajar con un cliente y resulta que no tienes internet o por cuestiones del firewall no te puedes conectar al TFS de la oficina, pero no te preocupas porque sabes que tu cliente de TFS recordará que archivos debe hacer checkout al regresar a la oficina.

Extranet support, estoy ya existía en el SP1 del TFS 2005, pero seguramente mejoro algo, ahora puedes usar otro set de credenciales distintas a las que te loggeas cuando estás en la red privada, ojalá esto ayude a conectarnos desde Firewalls que actualmente no permiten enviar las credenciales.

Hay muchas más que aunque no son criticas si van a ayudar. Por ejemplo, si tenemos varias instancias abiertas de VS2005 y hacemos checkout a un archivo no se refresca en los otros. Esto puede ser bastante confuso. Se supone que mejoraron la manera en que se refresa Source Control Explorer.

Vayan y lean el post que hay muchas más.

sábado, agosto 11, 2007

.NET: El Framework, el IDE y el Lenguaje

Este es un post viejo que nunca publique porque no encontraba el archivo de Word donde lo hice, aunque algunas cosas ya serán más claras ahora que es más salió Visual Studio 2008 Beta 2 y hay mucha más documentación al respecto, muchos me han comentado dudas similares de las que trataba de explicar en este documento que escribí por ahí de Marzo. Así es que busque el archivo y espero conteste algunas preguntas.

Hemos escuchado mucho de .NET 2.0 y .NET 3.0 y por separado por ahí escuchamos de una nueva versión de Visual Studio (Orcas) y C# 3.0, aunque estos últimos aún no salen, pero ya liberaron.NET 3.0. ¿Así que cuál es la realidad, podemos usar .NET 3.0? La respuesta es sí. Tal vez causa algo de confusión, pero todo se aclara separando los diferentes productos, teníamos todavía en 2005 el framework 1.1, salio en Noviembre de ese año el 2.0 junto con un nuevo IDE (VS 2005), nuevo framework (.NET 2.0) y nuevas características del lenguaje (C# 2.0 y VB 8). Así que todo lo vimos como una sola nueva versión hacía una nueva plataforma de desarrollo que por facilidad nombramos simplemente ".NET 2.0". Un año después, también en noviembre, sacan el .NET 3.0 y en esta ocasión no tenemos nuevo IDE y el lenguaje permaneció igual, según fechas de Microsoft en la segunda mitad de este año (según una simple analogía será en noviembre) sacarán C# 3.0 y un nuevo IDE.

La clave está en separar. Tomando como ejemplo lo que se libero en noviembre de 2005 y comparándolo que la versión anterior.

Tenemos C# 2.0 y VB 8.0 y antes teníamos C# 1.0 y VB 7.0, voy a hablar sólo de C#, entre otras cosas:

  • Tenemos Generics,
  • Tenemos delegados anónimos.
  • Tenemos yield.
  • Tenemos clases parciales.
  • Se optimizo el lenguaje intermedio generado, no voy a explicar mucho de eso, pero la idea es que es mejor y se hicieron cambios necesarios para soportar cosas como los Generics.

Tenemos el .NET Framework 2.0 y antes teníamos el framework 1.1:

  • Tenemos nuevas clases para acceso a datos.
  • Algunas colecciones genéricas.
  • Algunos nuevos controles para desarrollar en Windows, Web y bueno sobre todo Web.
  • Algunas muchas mejoras más por citar algunas, remoting trabaja un poco distinto y es más seguro, se deprecaron algunos métodos y clases y se crearon nuevas para sustituir cierta funcionalidad, etc.

Tenemos el Visual Studio 2005 y antes teníamos el Visual Studio 2003:

  • Cambiaron muchas funcionalidades desde una versión a la otra. Unas de las más interesantes son la integración con pruebas, diagramas y herramientas para trabajo en equipo que provee Visual Studio Team Suite, pero esta es la versión más cara. Por otro lado tenemos muchas versiones que antes no existían como las Express, más limitadas que las demás, pero mucho más barata (gratis).
  • Obviamente mejor integración con los nuevos lenguajes C# 2.0 y VB 8, por ejemplo intellisense para generics y delegados anónimos.
  • Obviamente mejor integración con el nuevo framework, por ejemplo vistas de diseño distintas para ver los mater pages y soporta las nuevas formas de compilación en ASP.NET.
  • Mejoras al depurador, nuevas herramientas como el Object Test Bench y creación de algunos nuevos generadores de código.

Ahora volviendo a todo lo de 3.0:

Tenemos ya ahorita y listo para usar el .NET Framework 3.0 y trabaja en conjunto con el 2.0 y está compuesto por los siguientes cuatro componentes:

  • Windows Communication Foundation: viene a unificar tecnologías como Web Services, MSMQ, Remoting.
  • Windows Presentation Foundation: para hacer aplicaciones de escritorio más bonitas.
  • Windows Workflow Foundation: para crear y monitorear workflows.
  • Cardspace: para autentificar a usuarios usando una metafora de credenciales.

Es importante hacer notar que todo este framework trabaja lado a lado con el .NET 2.0, simplemente son una serie más de librerías, similar a si bajaran Enterprise Library o algún componente de terceros y no necesita de ningún cambio en el lenguaje o IDE.

Tendremos ojala y este mismo año C# 3.0 y VB 9.0, hablare sólo de C# 3.0, este nuevo lenguaje trae algunas novedades como:

  • Expresiones Lambda, que no son otra cosa más que otras sintaxis para usar delegados anónimos con muchas más ventajas adicionales a la sintaxis que espero poder explicar en otro post.
  • Tipos inferidos, que no es más que otro truco del compilador, este infiere dependiendo de lo que le asignes a una variable el tipo de dato, var s = "hola"; sabemos que es un string y el compilador lo puede inferir.
  • Extension methods, que no son otra cosa más que el compilador provee una nueva forma de mandar llamar a métodos estáticos de otras clases, otro truco más del compilador.
  • Tipos anónimos, que es similar a delegados anónimos pero para clases, este se aprovecha de los tipos inferidos e inicializadores así var car = new { Color = Color.Red, Name = "Lamborghini" }, crea una clase que tiene dos propiedades, Name de tipo string y Color de tipo Color, así podemos decir car.Color = Color.Black; car.Name = "McLaren F1".
  • Inicializadores, otro truco más del compilador para crear un objeto y en la misma declaración asignarle propiedades. DbConnection conn = new SqlConnection() { ConnectionString = "", CommandTye = CommandType.Text };

    // Nuevo atajo para inicializar objetos.
    DbConnection conn = new SqlConnection() { ConnectionString = "", CommandTye = CommandType.Text };

    // Se traduce al mismo código intermedio que la anteior.
    DbConnection conn = new SqlConnection();
    conn.ConnectionString = "";
    conn.CommandType = CommandType.Text;

    Por eso es que les digo que son trucos del compilador, sin embargo muy útiles, ahora usamos en todos lados clases parciales, generics y delegados anónimos, para esta altura de 2008 seguramente estaremos usando todo esto con mucha frecuencia, sobre todo si usamos LINQ, pero ese es tema de otro post.

Siguiendo con la comparación, tendremos ojala y este mismo año, Visual Studio Orcas seguramente el nombre oficial será VS 2007 o VS 2008 dependiendo de que le guste más a los de marketing, a mi me gusta más Orcas.

  • Tendrá soporte para las nuevas funcionalidades del lenguaje.
  • Tendrá soporte para el nuevo framework 3.0, un diseñador de Workflows, Wizards y otras cosas para WCF y una nueva vista de diseño para crear aplicaciones con WPF usando XAML.
  • Incluirá otras tecnologías que ya fueron liberadas, pero aún no se integran "out of the box" con Visual Studio, como ASP.NET Ajax (Antes Atlas) que se también tendrá algunos cambios importantes principalmente en el performance y su integración con Silverlight.
  • Soportará que le digas a que versión del framework estas enfocando tus aplicaciones y puedas desde el mismo IDE crear proyectos para .NET 3.0 o .NET 2.0.
  • Mejoras al depurador e Intellisense de JavaScript.

Así que resumiendo un poco, 3.0 se compone de tres partes, como siempre se ha hecho, sólo que ahora realmente están separadas en tiempo, ya tenemos el Framework 3.0 listo para empezar a crear aplicaciones usando WPF, WF y WCF, sin embargo, aún no tenemos un nuevo Visual Studio que nos ayude con esta tarea, aunque hay ciertas extensiones que se pueden utilizar desde ahorita. Por otro lado, en este caso el Framework 2.0 (incluyendo el CLR), el lenguaje intermedio y el lenguaje (C# o VB) no cambiaron por lo que nuestras aplicaciones de .NET 3.0 siguen usando el mismo C# 2.0 y el Framework 2.0. Esto cambiará seguramente en Noviembre de este año que tendremos la nueva versión del lenguaje C# 3.0 y VB 9.0 y la nueva versión del Visual Studio.

Hay otro proyecto LINQ y una nueva versión del Framework (3.5) que se liberará junto con Orcas y C# 3.0 que incluye varias clases que aprovechan ciertas características del nuevo lenguaje para hacer más fácil el acceso a datos, a casi todo tipo de datos (XML, Bases de Datos, Registro, Objetos), pero de esto hablaremos más a detalle en algún otro post.

Existen otras tecnologías paralelas a lo que mencionamos (Lenguaje, Framework e IDE) que no obedecen a las mismas fechas. En cierto sentido, gracias a que Microsoft se ha vuelto un poco más ágil, y si me refiero a usar metodologías ágiles en algunos de sus grupos de desarrollo e implementar algunas de estas prácticas ya podemos usar actualmente nuevos productos sin esperar a que se incluyan Out of the Box, por ejemplo ASP.NET Ajax y el Control Toolkiit que realmente es un desarrollo de ASP.NET, pero aún no se ha integrado como parte de por ejemplo un Framework 3.0 o Visual Studio, de hecho no hubo nada nuevo para ASP.NET en el Framework 3.0. Otro ejemplo seguramente serán BLINQ una nueva tecnología que usa LINQ para hacer páginas Web, este es otro desarrollo del grupo de ASP.NET que podría liberarse hasta después de Orcas y C# 3.0. Otros ejemplos son los Software Factories, Enterprise Library y CAB de Patterns and Practices que siempre han sido componentes por separado, el SDK de Visual Studio al igual que el Guidance Automation Toolkit, han tomado un camino muy distinto al del mismo producto en sí y Visual Studio Tools for Office 2007, que gracias a dios no espero a que se liberará Orcas y lo hicieron casi a la par de Office 2007.

El mejor ejemplo de esto es el Toolkit de controles de ASP.NET Ajax, que aunque más adelante se integraran como otros controles más de ASP.NET ojala y siempre siga liberando versiones por separado del Framework, Lenguaje e IDE. Es tan difícil liberar estos últimos, involucra muchas cuestiones de licenciamiento, esquemas de venta, marketing, documentación, pruebas, etc, etc, etc que simplemente haría que simples controles como el estos tarden un año en ver la luz. No es que estos controles no tengan licenciamiento, documentación y pruebas, es sólo que se pueden liberar más rápidamente.

Yo creo que Microsoft se está viendo inteligente en ir liberando así las versiones, y permitirnos ir usando la tecnologías más recientes sin esperar por largos ciclos de desarrollo aunque si será muy cómodo el instalar un solo producto (Orcas) y tener todo lo que necesitamos, pero mientras tanto, lo podemos ir usando en producción.

Otra línea de productos más, que la verdad en este caso si nos gustaría que formara parte del mismo timeline del Framework, Lenguaje e IDE y sobre todo que le dieran la misma importancia como a las demás es el Compact Framework y SQL Compact Edition. Algo como esto tiene sus pros y sus contras, por ejemplo, SQL Compact Edition y el Compact Framework SP1 se liberaron mucho después que Visual Studio 2005 y no nos hubiera gustado tener que esperar un año hasta que saliera Orcas para empezar o algún Service Pack de Visual Studio, sin embargo, unos meses después de que se libero Visual Studio 2005 se liberó el SDK para programar en Windows Mobile 5.0, por lo que Out of the box no tenemos soporte para esta plataforma en el IDE actual. Así que siempre que fuera para tener algo antes sería mejor que se integre (e.g. que hubieran incluido lo necesario para desarrollar Windows Mobile 5.0 en VS 2005) así no tendríamos que esperar ni que instalar tanto producto por separado y tendríamos. Sin embargo siempre que pensaran en retrasar un release sólo por incluirlo en un release mayor no nos gustaría (e.g. esperar al SP1 de VS 2005 para incluir el Compact Framework SP1).

Cuando liberaron el .NET 3.0 no salió nada nuevo para Mobile, pero junto con Orcas habrá grandes novedades, aunque se espera un WPF/E no será una de estas (Silverlight para mobile), pero existe ya un Compact WCF o WCF-E. El primero, WPF Everywhere, es para usar XAML y las capacidades gráficas de WPF en otras plataformas como Web (ahora conocido como Silverlight) y otros Sistemas Operativos incluyendo Windows CE y por lo tanto Windows Mobile, sin embargo WPF-E saldrá a la luz primero como un componente para diferentes navegadores antes de estar disponible para Mobile, por lo que seguramente no lo veremos incluido como parte de Orcas. Compact WCF usará SMTP para poder tener colas de mensajes en aplicaciones desconectadas y un protocolo para poder comunicarse por push con los dispositivos, estos dos por si sólo son ya grandes ventajas, sin embargo esperaríamos algo de Remoting y WS-* para tener realmente mejores herramientas de comunicación desde estos dispositivos. Aunque no vengan como parte de WCF-E tendremos todo el stack para hacer algo nosotros.

Siguiente con Mobile, tendremos también disponibles las nuevas características del lenguaje, buena parte de LINQ y otras tantas mejoras. Aunque el Beta de VS actual no incluye el SDK para Windows Mobile 6.0, esperamos que el release de Orcas si lo incluya. Hay otras áreas muy relacionadas con Mobile como Sql Server Compact Edition 3.5 que recibirán grandes mejoras. La más importante de estas considero será SyncServices de ADO.NET, que lamentablemente no contará con la versión de Mobile para esta versión.

Microsoft debería haber llamado a .NET 3.0 simplemente 2.5 ya que fue una mejora menor y .NET 3.5 que es un gran cambio debería haber sido 3.0 o simplemente 3.0 y 4.0 respectivamente, sin embargo tendremos que vivir con las decisiones de versionamiento, aunque nos acostumbraremos rápidamente. Para hacerlo un poco más confuso, C# será 3.0 y no 3.5.

Así es que esperemos grandes cambios. Si desean ver más información de 3.5, les sugiero los posts de Scott Guthrie sobre los nuevos features que comente.

Lenguajes Dinámicos – IronPython y ASP.NET y los primeros pininos con IronRuby

Tal como el CLR y especialmente el CLS sirven de base para los lenguajes estáticos como C#, VB.NET, J#, Delphi.NET y otros menos exitosos que han surgido (no que Delphi .NET hay tenido éxito). Microsoft está trabajando sobre esta nueva cosa que llaman el DLR (Dynamic Language Runtime) que les va a servir de base para hostear lenguajes dinámicos de una manera eficiente permitiéndoles hacer llamadas a APIs de .NET, algunas de las implementaciones son IronPython, IronRuby, JavaScript y Dynamic VB. En este post daré una muy breve introducción a IronRuby y los redirigiré a un buen ejemplo de Scott Guthrie y veremos un poco más a fondo como IronPython, que ya es un poco más maduro que IronRuby, se integra con ASP.NET de una forma bastante ingeniosa y finalmente veremos algunas de las ventajas.

Como todos deberían de saber, los lenguajes dinámicos, especialmente Ruby usado en conjunto con Ruby on Rails han estado ganando mucha popularidad y tienen ciertas ventajas en comparación con los lenguajes estáticos. Por lo poco que he usado Rails tengo que aceptar que se puede ser muy productivo, aunque hay muchas cosas que extraño como Intellisense, Visual Studio, la depuración, muchas herramientas a las que estoy acostumbrado (Team System, Unit Testing, RhinoMock, etc.), pero especialmente el .NET Framework, por lo que la idea de lenguajes dinámicos que puedan interoperar con este último suena muy atractiva. Por otro lado, según benchmarks que han hecho (les debo la referencia, simplemente lo leí en algún lado y lo escuche en algunos audios) tanto las implementaciones de Microsoft de Ruby, Python y JavaScript para el CLR son muy eficientes gracias a que se convierten en código compilado al vuelo en lugar de interpretado.

Scott Guthrie recientemente escribió una introducción a IronRuby que consiste en unos simples ejemplos de consola y luego una demo de cómo usar WPF con IronRuby. Les dejo el link al ejemplo y al código fuente de IronRuby que está en la página de John Lam donde explica un poco más del proyecto, también pueden escuchar su John Lam on the DLR de DotNetRocks o John Lam on Iron Ruby en Hanselminutes. Algo interesante es que se liberará usando la Microsoft Permissive License y están invitando a gente externa a Microsoft en participar en el proyecto. Hay muchas cosas que aún no funcionan bien, pero nos podemos dar una idea de lo que viene.

IronPython ya se integra con ASP.NET podemos ver más detalle en este WhitePaper o en el audio Language Extensibility - Iron Python de DotNetRocks donde explican lo mismo. En resumen, en lugar de usar el CodeDOM para hacer el merge una página ASP.NET con la clase parcial del CodeBehind o CodeFile, utilizan el modelo de no compilación, similar a como hacen los sitios de Sharepoint. Este modelo siempre ha estado disponible y puede ser algo útil por ejemplo en páginas que no requieren de código y todo lo que usan son controles que saben cómo hacer el trabajo. Todo el truco para integrar con lenguajes dinámicos (actualmente sólo IronPython and managed JScript) es que usan uno de los puntos de extensión para cambiar el parser de ASP.NET y cambian los codesnippets (<% ... %>, <%= ... %>, <%# ... %>) por un control que tiene una propiedad con el código, por lo que sigue siendo básicamente sólo un control y la página se puede usar en el modelo de no compilation. Las páginas también podrían tener "Codebehind" o archivos de script ligados a estás aunque a diferencia de páginas con código estático, este no forma parte de la clase Page, más bien es simplemente un modulo que tienen disponible para utilizar sus métodos o propiedades directamente, de igual forma funciona con código en línea como <script runat="server"> someVar=5 </script>. Cada página tiene su propia instancia del modulo, por lo que está variable será distinta en las diferentes páginas, controles, etc. Sin embargo dado que es una variable global será similar a una variable estática en C#. Vale la pena destacar, que aunque se use el No-Compilation, desde todo el ciclo de parsing-ejecución de la página, realmente el código de IronPython se termina compilando al vuelo por el motor de lenguajes dinámicos teniendo las ventajas de performance.

Ahora que entendemos un poco de la teoría de cómo funciona el nuevo modelo, veamos algunas de las ventajas. Las expresiones de DataBing como <%# Eval("City") %> se pueden sustituir por expresiones más simples como <%# City %>, que aunque no existe en tiempo de parse, se puede evaluar en tiempo de ejecución. IronPython usa un mecanismo de inyección que nos permite hacer este tipo de cosas raras, como por ejemplo en lugar de decir String myValue = Request.QueryString["MyValue"]; podríamos simplemente decir myVar = Request.MyValue. La secuencia sería la siguiente, si el objeto no tiene ninguna propiedad llamada MyValue, intercepta la llamada el inyector e internamente hace lo mismo que haríamos en C#, permitiéndonos tener una sintaxis más clara. Lo mismo se hace por ejemplo al obtener controles, con C# haríamos algo como SomeControl.FindControl("SomeChildControl") y ahora en injector nos permite usar directamente código como SomeControl.SomeChildControl sin necesidad obviamente de hacer un cast. Podríamos hacer algo como nombre = FormView1.NombreTextBox.Text.

Pueden ver un Quickstart y descargar los ASP.NET Futures de July para hacer algunas pruebas. Ya que lo tengan pueden usar el Personal Starter Kit Python para aprender un poco. Para los que ya saben Python puede ser muy fácil una vez entendido todo el modelo. Yo me esperare mejor a ver las implementaciones con IronRuby.

sábado, agosto 04, 2007

Silverlight



Un post que tenía algo pendiente. Antes que nada tengo que hablar de que hay aquí para mobile, aunque aún no vemos claro, no tenemos demos, ni nada, podemos ir viendo un video del MEDC donde muestran lo que viene de Silverlight for Mobile Devices.




Ahora si volviendo a lo que ya podemos usar. Brevemente introduzco Silverlight como un mini-WPF que usa mini-XAML que puede correr como un plugin para el browser (si, cualquier browser tal como hace Flash) o en diferentes dispositivos, obviamente Windows Mobile como muestran en el video anterior y ojala y más adelante en otros dispositivos similar a como hace Flash Lite. Viene en dos versiones, una para JavaScript (actualmente en 1.0 Release Candidate) y otra para .NET (actualmente en 1.1 Alpha Refresh). Las versiones suenan un tanto raro, ¿por qué tenemos un 1.1 y el 1.0 aún no sale? Bueno ya ven como es Microsoft si tuvimos un 3.0 cuando no cambio nada y un 3.5 cuando hubo cambios hasta en el compilador, lenguaje e IDE, pero esa es otra historia. La diferencia se puede resumir en que 1.0 es Javascript y soporte para video y el 1.1 es Soporte a lenguajes .NET, parte del Framework y el CLR y lenguajes dinámicos (más todo lo del 1.0 claro).

Ya en la práctica lo hemos encontrado bastante recortado, aunque no es una limitante para poder realizar aplicaciones interesantes. Por ejemplo no tenemos una buena suite de controles, aunque podríamos usar de terceros, actualmente GOA y los de Telerik (wow) tienen algunos demos disponibles, este será un mercado en el que entraran muchos más adelante, por otro lado, podemos crear nuestras animaciones y dibujos en XAML, seguramente usando Expression Design y consumirlas desde Silverlight esto ofrece grandes posibilidades. La razón por la que sólo tenemos un control textbox un botón y figuras básicas es porque MS ha decidido mantener compacto el instalador (para poder decir "ocupa casi lo mismo que Flash").

Otra de las grandes ventajas es que lo podemos programar usando .NET y sí así es, tendremos CLR también en la Mac y no sólo en una MacBook con Intel y Vista instalado, sino con Mac OS.

Actualmente podemos programar para Silverlight usando JS o .NET desde VS 2008 usando un plugin y aprovecharemos las mejoras que trae el nuevo IDE para depuración e intellisense para Javascript también para Silverlight importando unas librerías.

Esto necesitas para configurar tu ambiente de desarrollo:

1- Instalar Runtimes:

-Microsoft Silverlight 1.0 RC1 (para ver Silverlight)

-Microsoft Silverlight 1.1 Alpha Refresh (para ver aplicaciones de Silverlight creadas en .Net)

2- Instalar las herramientas de desarrollo y de diseño:

-Microsoft Visual Studio 2008 Beta 2 (para desarrollar)

-Microsoft Silverlight Tools Alpha Refresh for Visual Studio VS 2008 B2 (add-on para crear aplicaciones en Silverlight)

-Expression Blend 2 August Preview (para crear animaciones de silverlight)

-Expression Media Encoder Preview (para agregar videos en silverlight)

-Expression Design (para crear gráficos en 3D)


3- Para documentación, ejemplos y add-ins, instalar SDK:

-Microsoft Silverlight 1.0 Beta Software Development Kit (SDK)

-Microsoft Silverlight 1.1 Alpha Software Development Kit (SDK)

4- Extras:

-Para Atlas ASP NET Futures July 2007 Server Controls que incluyen controles media y XAML para incorporar directamente piezas de silverlight desde extenders.

-Intellisense para Silverlight en VS 2008

-Scrip# un compilador de C# para generar JavaScript en lugar de Lenguaje Intermedio. Nos podrá ayudar a crear librerías para consumir desde Silverlight 1.0 o para interactuar con otras partes de la página.


Para más información sobre la dirección que tomará este producto, vean el Blog de Scott Guthrie donde explica más a fondo las diferencias entre 1.0 y 1.1, el uso de Javascript, .NET y lenguajes dinámicos, pueden encontrar muy buenos ejemplos en http://www.silverlight.net/ y como siempre más en http://www.google.com/

No puedo cerrar sin decirles que vean popfly.com un sitio hecho en silverlight que nos permite hacer mashups, vale la pena. Sólo pidan su invitación, les llega en un par de días y empiecen a jugar un poco con esto. Espero luego subir algunos blocks y ejemplos de mashups que haré para Roller.