Servicios Web en Windows Phone 7

Hace unos días, impartí un Webcast para un curso propio de Windows Phone 7 que se impartió en la UCLM campus de Albacete, aquí os lo dejo para que podais aprender todos un poquito sobre el tema. En el webcast vimos como crear un servicio web y como consumir datos de OpenData

 
 



 

 
 

Excel, ASP.net y Windows server 2008 R2

Hace unos días añadimos una nueva funcionalidad a una aplicación departamental programada con ASP.net MVC para que crease unos informes y los sacase en un documento de Microsoft Excel 2010 para poder ser tratados más tarde.
En el equipo de desarrollo todo iba como la seda, se parametrizaban los datos a sacar y al ejecutar el informe nos devolvía sin ningún problema el fichero de Excel y podíamos abrirlo. Cuando hicimos el paso a producción vino nuestro quebradero de cabeza, primero fue que office 2010 se negó a instalarse a la primera, lo solucionamos pero cuando la aplicación empezó a usarse y a sacar los primeros informes… FALLO!

Para ser exactos nos daba un bonito error “[UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005.

Era un bonito error de COM y buscando por el ancho y largo internet encontré multitud de páginas donde daban soluciones, desde que no se usase office en un Windows Server 2008 hasta “hacks” del registro de Windows. Después de leer multitud de páginas y páginas con todo tipo de soluciones y observar que el problema es que por defecto Microsoft Excel como objeto COM solo puede activarse por las cuentas: Administrador, System e Interactive, me decidí por cambiar los permisos del objeto COM de Microsoft Excel en el servidor tal y como explica esta pagina http://blog.crowe.co.nz/archive/2006/03/02/589.aspx en ella lo explica para Windows XP y Windows Server 2003, pero sirve también para Windows Server 2008.

Pero al intentar ejecutar la solución…. ERROR! no aparecía por ningún sitio el objeto COM “Microsoft Excel Applications” y por mas que le daba vueltas no había forma de ver como poder solucionar esto, pensamos que lo mismo no estarían instalados los “Primary Interop Assemblies” de Office 2010 por alguna rara razón y los instalamos de nuevo, reiniciamos un montón de veces el servidor, lo actualizamos todo lo actualizable y nada de nada, hasta que se nos ocurrió ejecutar la Microsoft Management Console en modo 32 bits haciendo un “mmc.exe -32″ y añadiendo el complemento de COM y FUNCIONÓ todo.

Windows Phone SDK 7.1 Offline

Cuando nos vamos a la pagina oficial de windows phone y descargamos el sdk se descarga una pequeña herramienta que es la que realmente realizará la descarga posteriormente cuando decidamos instalarlo, por tanto necesitaremos tener el ordenador conectado a internet.

Si necesitais el instalador completo para instalarlo en un ordenador que no esté conectado a la red solo tenemos que descargarnos el Windows Phone SDK 7.1 Offline Installer que ocupa unos 730Mb.

Windows Phone SDK 7.1 Offline Installer Inglés

Windows Phone SDK 7.1 Offline Installer Español

The application cannot start. Ouuuch!

Esta mañana al llegar al trabajo, necesitaba recompilar una aplicación que esta desarrollada con Visual Studio 2010 y me cuando intentaba arracanr el VS2010 me salía un bonito mensaje de error que decía “The application cannot start” y de repente el pánico se ha apoderado de mi!

He pensado que lo mismo reseteando la configuración del VS con un típico “devenv /resetuserdata” se solucionaría la cosa, pero no ha sido así. Después de darle unas cuantas vueltas al asunto y recordar que ayer necesité instalar el Microsoft SQL Server Management Studio Express para poder hacer unas modificaciones a una base de datos y que eso era lo único distinto que había dado que ayer si funcionaba el VS2010.

Despues de dar unas cuantas vueltas he dado con la solución al error, “simplemente” hay que volver a registrar una serie de librerías para que todo vuelva a funcionar correctamente.


C:Program Files (x86)Common Filesmicrosoft sharedMSEnv> regsvr32 DTE100.OLB
C:Program Files (x86)Common Filesmicrosoft sharedMSEnv> regsvr32 DTE80.OLB
C:Program Files (x86)Common Filesmicrosoft sharedMSEnv> regsvr32 DTE80a.OLB
C:Program Files (x86)Common Filesmicrosoft sharedMSEnv> regsvr32 DTE90a.OLB
C:Program Files (x86)Common Filesmicrosoft sharedMSEnv> regsvr32 DTE90.OLB

Uso de URL rewrite

El URL rewrite es una extensión del IIS que nos permite entre muchas otras cosas hacer las url mas amigables y fáciles de recordar, tanto para nosotros pobres usuarios como para los buscadores.

Hoy he estado investigando un poquito sobre el tema para ayudar a Cesar en la migración de la bloguera.net desde el community server, la antigüa plataforma del servidor, hacia WordPress que gestionará a partir de ahora toda la comunidad de blogs.

Nuestro problema básicamente es que los buscadores tienen indexados ya nuestros antiguos blogs y al hacer el cambio hemos cambiado radicalmente las direcciones, por tanto necesitabamos algo que nos ayudase a que los buscadores encontrasen de nuevo los blogs que ya tenian indexados.

El primer cambio es hacer que los feeds esten bien dirigidos por tanto teniamos que pasar de algo como “http://labloguera.net/blogs/nombre/rss.aspx” a algo como “http://labloguera.net/nombre/rss2” por tanto he creado una regla que hace una redirección eliminando “blogs” y “rss.aspx” y sustituyendo esto ultimo por rss2 que es lo que utiliza wordpress. Por tanto hemos creado una expresion regular que es “ ^blogs/([_0-9a-z-]+)/rss.aspx “ para la url de entrada y la salida la hacemos mediante una redireccion permanente ( http 301) hacia http://labloguera.net/{R:1}/rss2 donde {R:1} es el “nombre” del blog.

 

issurl1

El segundo caso que queríamos solucionar es el de las visitas a los blogs antiguos, es decir cuando alguien pone en su navegador “http://labloguera.net/blogs/nombre” ahora debe direccionarse a una url sin la palabra “blogs” por tanto hemos tenido que crear una regla adicional para que se modifique esto, la entrada será “^blogs/([_0-9a-z-]+)” y la salida “http://labloguera.net/{R:1}/

La verdad que la potencia que tiene url rewrite es inmensa para poder hacer un monton de cambios cuando tocamos nuestros sitios webs, podeis encontrar mucha información sobre el tema en la pagina web de la extension url rewrite dentro del sitio de IIS.net

Haciendo definitivo el SP1 de Windows 7

Igual que os contaba hace un tiempo para Windows Vista en Windows 7 también podemos hacer definitiva la instalación del SP1 y eliminar todas las copias de los parches que hubiéramos instalado anteriormente en nuestro sistema.

Que implica esto, pues básicamente liberar mucho espacio de nuestro disco duro, la verdad que en estos tiempos que tenemos 1TB de espacio nos parece que este es infinito, pero no viene bien quitar las cosas que “sobran” en el sistema.

Para hacerlo solo tenemos que abrir una ventaba de consola con privilegios de administrador y ejecutar el siguiente comando:

DISM /online /cleanup-image /spsuperseded

Después de un tiempo, mas o menos largo, depende mucho de tu maquina, en mi caso ocupó unos 6 minutos, veremos como nos dice que ha completado la limpieza del Service Pack.

image

El Service Pack ha salido hoy día 16 de Febrero para los suscriptores de MSDN y Technet, para el resto de los mortales estará disponible a partir del día 22 de Febrero.

Introducción a la programación con Windows Azure

imageHace unos días, Alberto y yo, dimos una charla en la Universidad de Alcalá de “Introducción al Cloud Computing”, si queréis ver la primera parte solo tenéis que acercaros por el Blog de Alberto para ver ese post

Lo que yo os dejo hoy aquí, es la parte practica de esa charla en la que veremos que necesitamos para hacer una aplicación con Windows Azure y como se despliegan en la plataforma. Espero que os guste y no dudéis en preguntar las dudas que tengáis.

 

Codificando PDF417

Todos nosotros vemos a diario ese tipo de códigos de barras, si es un código de barras aunque tenga un aspecto mas parecidos a puntos, en nuestras tarjetas de embarque, en nuestra declaración de la renta, en muchas de las cartas que recibimos de nuestros bancos.

¿Pero que es exactamente este código y que almacena?

Es una especificación de código de barras de dos dimensiones que puede almacenar como máximo 1.800 caracteres alfanuméricos (ASCII) o 1,100 códigos binarios por cada símbolo (cada rectángulo en forma de “nube de puntos”). Si la cantidad de información a almacenar es mayor de la que cabe en un símbolo, pueden enlazarse varios hasta superar el espacio de almacenamiento necesario.

pdf417sd

Ahora lo difícil sería saber como codiificar nuestra información para imprimirla en ese formato o hacer una imagen con la misma. Pues gracias a la librería itextsharp de la cual ya empecé ha hablar en otro de mis post podemos hacerlo sin problemas.

Una vez que hemos referenciado la librería itextsharp en nuestro proyecto solo tenemos que añadir los using necesarios para poder utilizarla y que el intelisense la reconozca.

using iTextSharp.text.pdf;
using iTextSharp.text;

Cuando tenemos hecho esto instanciamos un nuevo objeto PDF417 y le damos las opciones que necesitemos en nuestro caso y procedemos a guardar una imagen del mismo lista para usar en donde la necesitemos.

string texto;
BarcodePDF417 codigobarras = new BarcodePDF417();
codigobarras.Options = BarcodePDF417.PDF417_USE_ASPECT_RATIO;
codigobarras.ErrorLevel = 8;
texto="ETKT: 099843838838392122982|FLIGHT: KLM9999 CIA:KLMDUTCH |";
texto+= "FROM: MAD | TO: AMS | DATE: 2010-12-23| HOUR:11:00 | SEAT: 20D |";
texto += "SMOKING: NO | PASS: APELLIDO1APELLIDO2/NOMBRE | ID: 00000000X***";
codigobarras.SetText( texto); 
System.Drawing.Bitmap bm= new Bitmap( codigobarras.CreateDrawingImage(Color.Black,Color.White));
bm.Save("codigo.bmp");

Como habéis visto en la variable texto hemos puesto una simulación de una tarjeta de embarque y el código que obtendríamos sería el siguiente:

codigo

Evidentemente este código no nos serviría para pasar los controles de seguridad ni para conseguir realmente volar, ya que las compañías aéreas han implementado métodos para que no sea tan sencillo hacer un código que nos permita colarnos en sus vuelos como introducir dentro del código de barras en cuestión una firma digital del contenido que es verificado online por sus sistemas.

Si tenéis curiosidad por los datos que hay en nuestras tarjetas de embarque, como codifican las cosas simplemente podéis visitar la web de la IATA y buscar el documento del BCBP ( Bar Coded Boarding Pass").

Beneficios del Cloud Computing

Hace unos días, me llamaron para ver si me interesaba hacer una ponencia sobre Cloud Computing en entornos de investigación universitaria dentro de la “V Edición Jornadas REDIMadrid” que se iban a celebrar en la Universidad de Alcalá y sin pensármelo 2 veces dije que sí.


A la hora de ponerle el nombre se me ocurrió el de “Beneficios del Cloud Computing en proyectos de investigación universitarios


Hoy han sido las Jornadas en cuestión y la verdad que después de dar mi ponencia y ver la respuesta del público, y el turno de preguntas / reflexiones interesante que ha habido, he salido muy satisfecho. Creo que a algunas personas que había en la sala les he enseñado que era esta famosa “nube” de la que todo el mundo habla a todas horas, otros han visto la distinta oferta que hay y otros muchos, conocedores del tema, se han quedado igual que estaban en un principio.


En esta ponencia, aparte de explicar que es el “cloud computing”, he dado una visión muy general de posibles usos que pudiera tener en entornos de investigación o de ámbito universitario en general.


Las preguntas y reflexiones han venido de la mano de Dña Covadonga Rodrigo San Juan, Vicerrectora de Tecnología de la UNED además de Doctora Ingeniera de Telecomunicación por la UPM  y de D. Eugenio Fernández, Director de los Servicios Informáticos de la Universidad de Alcalá, la primera tratando sobre uso en supercomputación del Cloud Computing y el segundo sobre los problemas de protección de datos personales en entornos de cloud computing. Creo que ambos han salido satisfechos con las respuestas obtenidas por mi parte.


Para responder a estar pregunta sobre protección de datos me ha servido mucho un video que esta en la plataforma de Channel 9 de “Implicaciones legales del Cloud Computing” que es muy aclaratorio sobre el tema a tratar, además de muy importante.


Para que podáis ver la ponencia os dejo el fichero de la misma subido a mi cuenta de skydrive para quien quiera verla.


Si tienes cualquier duda, pregunta, sugerencia… deja un comentario e intentaré ayudarte lo mejor que sepa.


Quiero agradecerle a Alberto Marcos la ayuda que me ha dado para preparar esta ponencia aunque el único que estuviera en el estrado fuera yo, también es un poco suyo este trabajo.

Escribiendo en PDF–primera parte

En uno de los desarrollos que tengo ahora mismo bajo mi supervisión en el trabajo necesitábamos que los documentos que generábamos se creasen en formato PDF, pudiéramos trabajar con plantillas  y se guardasen para su posterior consulta o impresión.

Uno de los requisitos era que la librería para generarlos fuera totalmente gratuita, o por lo menos que tuviera una licencia de ese tipo en el ámbito en el que nos movemos, después de repasar un poco el panorama que había y las distintas funcionalidades que nos ofrecía cada uno de ellos, nos decantamos por itextsharp que es una port de la libreria itext para java que nos ofrece la generación de pdf’s con datos desde un xml o una base de datos, sirve los pdf’s generados dinámicamente desde paginas web, nos permite numerar, poner marcas de agua e incluso firmar electrónicamente los documentos generados.

En esta primera parte os voy a contar como con unas poquitas líneas de código podemos crear nuestro primer documento e insertarle contenido.

Básicamente, después de añadir a nuestro proyecto, ya sea web o windows form, la librería itextsharp.dll podremos empezar a utilizarla simplemente haciendo los imports necesarios.

using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;

Una vez hecho esto, en este ejemplo he creado un método para encapsular la creación del fichero PDF y meterle el contenido.

private static void GenerarPdf()
{
 // definimos un nuevo documento
 var documento = new Document(PageSize.A4, 25, 25, 25, 25);
 // creamos la instancia para escribir el pdf
 PdfWriter writer= PdfWriter.GetInstance(documento, new FileStream("prueba.pdf", FileMode.OpenOrCreate));
 // abrimos el documento
 documento.Open();
 // añadimos unas propiedades al documento
 documento.AddCreationDate();
 documento.AddAuthor("Autor del documento");
 documento.AddTitle("Documento de prueba");
 // Empezamos a rellenar el documento con nuestro texto
 documento.Add(new Paragraph("Mi primer documento pdf con itextsharp"));
 var texto = new Chunk("Esto es mas texto", FontFactory.GetFont("Calibri",14, BaseColor.BLUE));            
 documento.Add(new Paragraph(texto));
 documento.NewPage();
 documento.Add(new Paragraph("Mi primer documento pdf con itextsharp"));
 // Cerramos el documento, ya estará en nuestro disco guardado
 documento.Close();               
}

Podremos ver como por arte de magia se crea un nuevo documento pdf en el directorio donde estemos ejecutando nuestra aplicación de windows form.

Las posibilidades de la librería son casi infinitas, pero lo mejor es que vayas descubriéndolas tu con el uso poco a poco, de todas formas iré añadiendo mas información sobre como realizar algunas cosas en este mismo blog.