La próxima Copa de la Imaginación

imaginecup

La copa de la imaginación es un torneo mundial que cada año reta a los mejores estudiantes y entusiastas de tecnologías Microsoft a proponer una solución optima y plena basada en el tema de la competencia que cada año cambia al igual que su seda.

Este año la sede será Egipto, y de la misma manera nos proponen tratar de resolver los problemas mas complejos que se han tratado de resolver, los cuales son los objetivos del milenio de la ONU, en mi caso en particular estoy participando en la 2da ronda en la eliminatoria de mi país, con el proyecto Dialekto.

Dialekto es proyecto que intenta facilitar la educación para niños con capacidades diferentes, al igual que su forma de socializar, basándose en el concepto de comunicación y educación universal. Esperamos pasar a las finales de la competencia en México y claro porque no, irnos a Egipto.

Algunos miembros de esta comunidad de geeks, ya han participado en este gran torneo, y obviamente compartiendo sus experiencias del mismo.

Un gran saludo a Miguel Llopis (España) e Ivana Tilca (Argentina).

Y por supuesto los invito y los animo a participar en Imagine Cup 2009 y vernos en Egipto. =)

Visita: www.imaginecup.com

Porque amo Windows 7, odio Linux, y pienso que Mac es patético

pc-mac-lin Después de recibir un enlace que me envió mi MSP Lead acerca de un articulo escrito en zdnet, y en el mismo hablaban del porque Windows 7 es muy superior a los sistemas actuales en diferentes aspectos, y bueno eso me hizo recordar algunos años atrás de cuando yo también usaba Linux, en particular era fan de la distribución Slackware, y lo utilice hasta su versión 12.

Y en aquel entonces yo pensaba que mientras mas horas pasaba frente al PC configurando un driver, era mas “gurú de Linux”, y creo que ese fue un punto determinante para que me cambiara un tiempo al Mac OSX Tiger, el cual se podía instalar en un Pentium 4 con SSE3, porque lamentablemente las Mac son muy caras, y créanme cuando les digo que el sistema era muuuuy lento.

Sin mencionar, que durante un tiempo también probé el sistema operativo Solaris en su versión 10, que me llamo mucho la atención su interfaz y lo que me ofrecía como desarrollador, pero tuvo el mismo final que el Mac, la lentitud.solaris10

Desde aquel entonces soy ferviente usuario y promotor de sistemas Windows, sistemas hechos para nosotros los usuarios que preferimos la productividad y la eficiencia de un sistema que nos simplifica muchas tareas para hacernos mas fácil la vida.

Por ahora Windows 7 tiene una gran estabilidad de la que goza Windows Vista, tiene un estilo y diseño bastante mas intuitivo y llamativo que realmente impresiona, y por supuesto que mantiene toda la infraestructura de la que gozan todos los Windows, podemos instalar todos los programas que queramos de forma muy sencilla, además que su performance se mantiene hasta en los equipos con requerimientos mínimos, y eso ya es poco de lo que puede dar Windows 7.

Bueno esa ha sido mi experiencia resumida en algunos sistemas que he probado, ¿que opinan ustedes?, ¿Han probado otros sistemas?.

¡Ahora si!, me presento en Geeks.ms

me Como algunos de habrán de dato cuenta ya he escrito algunos artículos en geeks.ms sin tener una obligada presentación, la idea era postear algo de lo que pienso escribir en este blog.

Y bueno, me llamo Miguel Ángel Justo, soy Microsoft Student Partner de Microsoft México, y por supuesto evangelista de programas académicos para universidades de tecnologías de la información. Me gusta aprender y compartir acerca de nuevas tecnologías de desarrollo, escribo en mi blog en Netwiz acerca de cosas relacionadas con Windows Live, en mi blog personal en Live Spaces y por supuesto ahora escribiré en este blog acerca de nuevas tecnologías que voy aprendiendo, en este caso en particular estaré  estoy escribiendo acerca de Windows Azure, como implementarlo, desarrollar con los SDK y aprovecharlo al máximo.

Estoy seguro que compartiré mucho con esta gran comunidad de especialistas, y de igual manera espero aprender mucho de ustedes.

Un gran saludo a todos.

PD: Como un gran blogger dijo alguna vez:

Coméntame que yo te comentare

Creando un nombre de Autoridad para SQL Data Services en Windows Azure

En esta entrada veremos una características mas de Windows Azure es precisamente el SQL Services. Los cuales son una suite de características de SQL Server basadas en la nube y ofrecen la posibilidad de procesamiento de consultas de servicios de bases de datos para producir nuevas aplicaciones o integrar el servicio en las ya existentes, ofreciendo flexibilidad, escalabilidad, y por supuesto un desarrollo ágil.

Una autoridad en SQL Data Services es el nivel mas alto en la jerarquía de contenido, dentro de una autoridad se crean Containers y dentro de los Containers se encuentran las Entities.

En la REST API, el nombre de Autoridad corresponde a un nombre de DNS que resuelve una localización de datos, por ejemplo el nombre de autoridad “smithjt1” se resolvería de la siguiente manera.

https://smithjt1.data.database.windows.net/v1/

Ahora bien, para crear un nombre de Autoridad es necesario crear un proyecto de aplicación de Consola de Windows en Visual Studio, y en el archivo app.config, modificarlo de la siguiente forma.

Captura

En el campo de authority ubicamos el nombre de autoridad que necesitemos, este debe de ser único y solo se permiten caracteres alfanuméricos, en el nombre de usuario y password ubicamos los datos de nuestra solución cuando la creamos con el código de invitación de Azure, en un articulo sobre el SDK de Azure, ya escribí algo sobre estos datos  y como conseguir los códigos de invitación.

Ahora solo necesitaremos agregar un método a la clase Program.cs, y este seria como el siguiente.

Captura2

Agregaremos la siguiente clase a nuestra solución.

   1: using System;
   2: using System.Configuration;
   3:  
   4: public class SsdsConfig
   5: {
   6:     public Uri ServiceUri { get; set; }
   7:     public string Authority { get; set; }
   8:     public string Username { get; set; }
   9:     public string Password { get; set; }
  10:  
  11:     /// <summary>
  12:     /// Generates the appropriate configuration information from the app.config 
  13:     /// settings.  Use this to construct the necessary details for credentials
  14:     /// and http service locations.
  15:     /// </summary>
  16:     /// <returns></returns>
  17:     public static SsdsConfig Create()
  18:     {
  19:         return new SsdsConfig
  20:         {
  21:             ServiceUri = new Uri(ConfigurationSettings.AppSettings["serviceUri"]),
  22:             Authority = ConfigurationSettings.AppSettings["authority"],
  23:             Username = ConfigurationSettings.AppSettings["username"],
  24:             Password = ConfigurationSettings.AppSettings["password"]
  25:         };
  26:     }
  27:  
  28:     /// <summary>
  29:     /// Get the proper Authority URI based on configuration settings
  30:     /// </summary>
  31:     /// <returns></returns>
  32:     public Uri GetAuthority()
  33:     {
  34:         return new Uri(
  35:             String.Format("https://{0}.{1}/v1/", this.Authority, this.ServiceUri.Host)
  36:             );
  37:     }
  38:  
  39:     /// <summary>
  40:     /// Creates a URI for a container based on configuration settings
  41:     /// </summary>
  42:     /// <param name="container">container name</param>
  43:     /// <returns></returns>
  44:     public Uri GetContainer(string container)
  45:     {
  46:         return new Uri(
  47:             String.Format("{0}{1}", this.GetAuthority(), container)
  48:             );
  49:     }
  50:  
  51:     /// <summary>
  52:     /// Creates a URI for an entity based on configuration settings
  53:     /// </summary>
  54:     /// <param name="container">container name</param>
  55:     /// <param name="entityId">entity ID</param>
  56:     /// <returns></returns>
  57:     public Uri GetEntity(string container, string entityId)
  58:     {
  59:         return new Uri(
  60:             String.Format("{0}{1}/{2}", this.GetAuthority(), container, entityId)
  61:             );
  62:     }
  63: }

Después a nuestros método principal agregaremos el siguiente código.

Captura3

Finalmente lo que haremos será realizar una petición HTTP para crear nuestro nombre de autoridad usando el REST API. Para esto agregamos el siguiente código a al método CreateAuthority() después del Console.WriteLine(). Quedando de la siguiente manera.

   1: public static void CreateAuthority(SsdsConfig config)
   2:     {
   3:         //create xml to represent the HTTP payload
   4:         var xml = new XElement(Constants.ns + "Authority",
   5:             new XElement(Constants.ns + "Id", config.Authority)
   6:             );
   7:  
   8:         Console.WriteLine(xml);
   9:         var request = HttpWebRequest.Create(config.ServiceUri);
  10:  
  11:         request.ContentType = "application/x-ssds+xml";
  12:         request.Method = "POST";
  13:  
  14:         string authToken = String.Format("{0}:{1}", config.Username, config.Password);
  15:         byte[] credentialBuffer = new UTF8Encoding().GetBytes(authToken);
  16:  
  17:         request.Headers.Add(HttpRequestHeader.Authorization,
  18:                             "Basic " + Convert.ToBase64String(credentialBuffer));
  19:  
  20:         var bytes = new UTF8Encoding().GetBytes(xml.ToString());
  21:  
  22:         using (var stream = request.GetRequestStream())
  23:         {
  24:             stream.Write(bytes, 0, bytes.Length);
  25:         }
  26:  
  27:         var response = (HttpWebResponse)request.GetResponse();
  28:         if (response.StatusCode == HttpStatusCode.Created)
  29:         {
  30:             Console.WriteLine("Success: {0}", config.GetAuthority());
  31:         }
  32:     }

Si compilamos nuestra solución, podremos notar que efectivamente nos crea nuestro nombre autoridad.

Dibujo

Y si visitáramos la url que nuestra aplicación nos ha creado, veremos que justamente se encuentra creado nuestro nombre de Autoridad para empezar a crear contenedores y entidades.

Dibujo2

Este sitio al ingresar nos pedirá unas credenciales para autentificarnos las cuales son el nombre de nuestra solución y nuestro password. Aun en esta versión beta de Azure no se permite el acceso de usuarios anónimos a nuestra definición del servicio.

En mi próxima entrada escribiré algo acerca de como crear entidades y contenedores para realizar consultas en LINQ y poder interactuar con SQL Data Services.

¡MSP Summit México 09 Todo un Éxito!

El pasado 16 de Enero se llevo acabo la reunión anual de todos los estudiantes de México con el reconocimiento de Microsoft Student Partner. El lugar fue la maravillosa ciudad de Guadalajara México. Yo por mi parte llegue muy temprano el día viernes (5 AM para ser exactos) y así que tuve la oportunidad de platicar con algunos MSP’s mientras se registraban.

Durante el primer día se realizaron todas las charlas acerca de programas académicos de Microsoft México que se están realizando en las universidades mexicanas, la primer platica fue a cargo del Gerente General de Desarrollo Académico y MSP Lead Rubén Mugartegui y posteriormente Armando Halbinger dio una interesante charla acerca de la simplicidad en el marketing digital.

P1040751Mi participación inicio durante la realización del concurso de demos, el cual es un concurso donde participan MSP’s para demostrar como se realiza el efecto Wow! en la audiencia, por mi parte participe con una demostración de Web Services utilizando Windows Azure, frente a otras demostraciones muy buenas de mis compañeros Norberto, Erick, Felipe y Ángel.

En realidad me sorprendí al ser nombrado como el primer lugar de la contienda después de ver el excelente trabajo que realizaron los demás participantes y con muchísima capacidad técnica. El premio para el primer lugar fue un Palm Treo Pro (La cual es muy bonita y útil).

Después del concurso de demos, se siguieron realizando platicas acerca de programas como DreamSpark a cargo de Karla Jaimes y el nuevo portal para la difusión y control de los Student Clubs en el país por parte de Astrid Espinoza.

Al finalizar el día se llevo acabo una gran cena por parte de la organización del evento y el segundo día fue un poco mas relajado, ya que el objetivo era convivir todos en un gran tour por la ciudad de Tequila Jalisco y donde tuve la oportunidad de conocer mas acerca de mis compañeros y no solo información técnica que tengo de ellos.

im Al finalizar el día y después de ver como se lleva acabo el proceso de elaboración del tequila, la guía del tour nos permitió firmar una tapa de un barril de tequila (la cual se la llevo Edison Daniel) y en donde yo puse una frase muy característica.

Todas las fotos del evento, así como las del tour se encuentran en el Flickr de Alejandro Martínez, y bueno yo desde aquí les mando saludos a todos aquellos que conocí en este gran evento, y un saludos al equipo de desarrollo académico de Microsoft por su excelente organización, y por supuesto a aquellos de los que no me pude despedir por problemas de tiempo.

Saludos a mis colegas y amigos Janiel, Félix Cortes (Crenz), Juan Posadas (Hinago), Octavio Díaz, Cristóbal Arturo (SliktFata), Edison Daniel (MrEdison), José David, Cristina y a los que no recuerdo, ¡reclámenme! 😀

ASP.NET en Windows Azure

En una entrada anterior ya había comentado algo sobre Windows Azure, en esta, ya tratare algo mas de la plataforma, bueno voy a aclarar que Windows Azure es un conjunto de servicios, por lo tanto no se puede tratar algo en especifico para definir a Windows Azure.

Yo utilizo Visual Studio Web Developer Express Edition con las Windows Azure Tools para crear un Web Cloud Service al cual he puesto el nombre de CloudDemo.

Captura

Este tipo de proyecto nos crea una pagina web en ASP.NET por default, le agrego una etiqueta Label llamada text1 y en el code behind le paso una cadena de caracteres.

Captura1 Captura2

Ahora solo agregare el identificar de la aplicación, este identificador es único para cada tester de Windows Azure, y solo se provee a los que utilicen los Hosted Services de Azure.

Captura5

Lo siguiente solo he de publicar nuestro servicio en Azure, es decir subir nuestro paquete de servicio en Windows Azure.

Captura6

Esta acción hará que Windows Explorer nos muestre el path de nuestro paquete de servicio creado por Visual Studio, y esos archivos serán subidos a Azure, el primer archivo es el paquete de servicio del proyecto que creo Visual Studio con las Windows Azure Tools, el segundo archivo es el archivo de configuración del servicio, mantiene el numero de instancias que se ejecutaran de nuestro Web Role.

Captura7 Captura8 Captura9

Subimos los archivos y le ponemos una etiqueta que identifique a nuestro proyecto, en mi caso he puesto Demo1, una vez hecho esto, podremos desplegar nuestro proyecto en la plataforma de Windows Azure.

Captura10

Esperaremos un segundo, mientras se despliega nuestro proyecto, y después lo ejecutaremos.

Captura11

Esta acción, tarda aproximadamente unos 4 o 5 minutos para inicializar nuestro proyecto en la plataforma de Azure.

Captura13

Una vez iniciado nuestro proyecto en Azure, podremos visitar la URL aleatoria que ha generado la plataforma para nuestro proyecto y la cual contiene nuestra aplicación en ASP.NET.

Captura14

Bueno, una cosa que pase por alto fue el icono de Change que aparece en las capturas, este icono nos sirve para cambiar nuestro proyecto de escenario, si una vez subido nuestro proyecto, podemos cambiarlo a modo de produccion, en el cual podremos acceder a nuestro proyecto de forma mas rápida y con una URL mas corta provista por Azure como un subdominio, en mi caso es miguel.cloudapp.net.

Como se habrán dado cuenta, el subir nuestras aplicaciones con Windows Azure es una cosa realmente simple, y de esta misma manera podemos subir nuestros Web Services a los Hosted Services.

En esta entrada trate una de las características de Azure, el hospedaje de servicios, en la próxima entrada ya veré algo acerca de los .NET Services y Live Services.

Hasta la próxima. 😉

Windows Azure Tools para Visual Studio 2008

El SDK  de Windows Azure nos provee unas herramientas que ayudan a extender la capacidad de Visual Studio para la creación, depuración, ejecución y por supuesto el empaquetado de servicios, es decir son un grupo de plantillas de proyecto que nos permitirán crear servicios que se puedan escalar en la “nube”.

cloud

Las plantillas son Cloud Services y paquetes de servicios, hay 2 tipos de Cloud Services, el Web Role y el Worker Role.

  1. Web Role, con este tipo de proyecto podemos crear aplicaciones web para Windows Azure, por ejemplo una pagina en ASP.NET o un Web Service.
  2. Worker Role, es un componente que se ejecuta en segundo plano en Windows Azure.

Las diferencias entre un sistema operativo de la nube y un sistema operativo de escritorio en realidad no son muchas, por ejemplo un Web Role seria algo similar a una DLL en Windows Vista y un Worker Role, seria equivalente a un servicio de Windows.

Al crear un proyecto con Windows Azure Tools, nos crean dos archivos muy importantes, el ServiceDefinition.cscfg y el ServiceConfiguration.cscfg, el primero solo mantiene la estructura de nuestro paquete que será subido a Windows Azure, el segundo mantiene la configuración del servicio, este archivo se sube por separado a Windows Azure, para poder facilitar el cambio de configuración del proyecto una vez este se encuentre en producción.

solucioncloud

En la próxima entrada, ya escribiré acerca de como empezar a utilizar todas las características de Windows Azure, agregando un Web Service y una pagina en ASP.NET.

Enlace: Windows Azure Tools