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 :)