Siguiendo con el impulso que le estamos dando a Windows Azure desde nuestra subsidiaria colombiana, me permito invitarlos a nuestro Windows Azure Tech Day. Que se realizará en Bogotá el día 17 de Junio y en Medellín el día 22 de Junio.
Para registrarse gratuitamente en sus respectivas ciudades hagan click en la imagen correspondiente!
Otra de las preguntas frecuentes que tengo por ahí generalmente de personas que aún tienen que trabajar con desarrollos .net de legado (versión < 4.0), es: cuáles son las ventajas de hacer el cambio, sobre todo para tratar de convencer a sus líderes, para migrar.
Lastimosamente ocurre una situación bastante particular, y es que cada versión del Framework ha hecho su trabajo muy bien. Así que una vez se termina una aplicación en determinada versión del Framework, no se ve la necesidad de evolucionar. Pero luego nos damos cuenta de que empezamos a limitar las implementaciones avanzadas que podríamos hacer a las que sí tendríamos acceso con la última versión.
Es por esto que escribo este post, en el que hago un recorrido por la historia del Framework para que podamos ver rápidamente de qué nos estamos perdiendo, de acuerdo a la versión del Framework que tengamos instalada.
En la mayoría de casos (Excepto cuando se trata de pasar del 1.0 0 del 1.1 a cualquier otra versión del Framework) El paso es transparente y la migración no es muy compleja. Sin embargo es claro que siempre hay temores en las migraciones y puede hacerse complicado comenzar a disfrutar de las características de la última versión. Sin embargo, nada como estar trabajando con ella, de manera que ya vamos a tener disponibles todas las últimas características y sobretodo disfrutar de todas las nuevas tecnologías que siempre se enfocan a la última versión.
Así que si no tiene el Framework 4.0. Que está esperando?
La versión 2012 de Sql Server ya está muy evolucionada. Nuestro servidor de Base de Datos ahora está ahora enfocado nativamente a trabajar con Cloud Computing y tiene unas mejoras que siempre hemos esperado y además sorpresas en su funcionamiento que nos hacen nuestro trabajo cada vez más fácil y agradable. La siguiente, es una guía de instalación de este producto que en su momento tuvo el nombre código Denali.
Ha sido preparada por un gran amigo muy querido por toda la audiencia técnica de Latinoamérica. Se trata de Guillermo Taylor, quien muy amablemente me ha permitido invitarle a postear su guía en mi blog. Guillermo es reconocido sobretodo por los IT Pros. Y es que SQL Server es una tecnología que une ambos mundos: Desarrollo y IT de una manera muy fluida. Es por esto que aprovecho este post, para anunciar el estreno del blog para IT Pros Colombianos. Que estará tratando temas específicos de esta área y donde encontramos como regalo de bienvenida dos excelentes libros para IT Pros. Además, este post también estará allí, para que la audiencia de IT lo encuentre en un ambiente más especializado para ellos.
Sin más preámbulos, aquí los dejo con esta excelente guía.
Compilado por Guillermo Taylor para el evento IT Camp 2011 – Track SQL Server 2012
Este documento recopila los pasos realizados para instalar SQL Server 2012 Evaluation en un sistema Windows 7 Ultimate SP1. Durante el paso a paso, se incluirán imágenes que aclararán mejor este; sin embargo no todos los pasos incluyen o tienen una imagen asociada, principalmente en donde estime que no es conveniente. De igual manera, no asumo responsabilidad alguna por algún paso realizado erróneamente o que no se tuvo en cuenta o que no aplica para un sistema operativo diferente. Por último, este documento se hace para efectos ilustrativos de cómo realizar una instalación del producto SQL Server 2012 Evaluation y de ninguna manera me compromete con los resultados obtenidos al seguirlo.
Antes de instalar y de configurar SQL Server 2012 y particularmente Reporting Services en un PC corriendo Windows 7 SP1, validé, particularmente por trabajo realizado en servidores, que tuviese al menos el Internet Information Server corriendo.
Este es un servicio que generalmente no se habilita en desktops o laptops, pero que para efectos de lo que quiero hacer, tengo que activarlo. Para esto, hay dos maneras de hacerlo; la manual, que es la que describiré en este post y la automática, la cual contempla la instalación mediante Microsoft Web Platform Installer y que además permite instalar SQL Server Express y Visual Web Developer Express, entre otras herramientas.
El método manual es el siguiente, solo para habilitar el IIS en Windows 7; si ya lo tienen habilitado, sugiero no hacerlo.
Primero, hay que abrir el panel de control de Windows 7:
Seleccionar la opción "Programs":
Y dar clic en la opción "Turn Windows features on or off", recordando que si no son administradores en esta máquina, ésta les pedirá que eleven los privilegios para ejecutar esta opción.
La ventana que me apareció, puede ser diferente en su caso en cuanto a opciones habilitadas o no, fue ésta:
A continuación, las opciones que se pueden habilitar:
En este punto, hago el popular disclaimer de "instalen lo que necesiten y si lo instalan todo, a mí no me echen la culpa si algo no funciona". Si quieren saber qué hace alguna opción en particular, hagan "mouse hovering" sobre el elemento deseado y ahí les aparece un pequeño mensaje. Sin embargo, si les resalto lo que instalé en mi PC:
Luego de la selección de las características, fui a la parte inferior de la ventana y presioné el botón de OK.
Luego de algunos pocos minutos, sale el panel de control y IIS está instalado. Para validar que en efecto es así, abran una instancia de su navegador Internet y escriban en la barra de direcciones http://localhost. Debe verse algo similar a:
Listo. Para abrir el IIS Manager, búsquenlo por la caja de búsqueda de Windows 7 ingresando inetmgr o Internet Information Services; yo no lo encontré en alguna de las opciones del menú Start, tal vez no busqué bien:
A continuación, los pasos a seguir para instalar el producto.
Dirigirse a la ubicación del SQL Server 2012.
Ejecutar SETUP.EXE. Como estoy como usuario, voy a correr el archivo con privilegios elevados. Para ello, doy clic derecho sobre el programa SETUP.EXE y en las opciones que aparecen, selecciono "Run as administrator".
Aparece la siguiente ventana:
En el panel izquierdo, ir a "Installation" y dar clic en la opción "New SQL Server stand-alone installation or add features to an existing installation":
Presionar OK. Esperar que se procese la operación:
Para este RC, no hay actualizaciones…
Presionar Next para que aparezca la siguiente pantalla:
Como el Firewall está habilitado, sale ese aviso de precaución… Luego se indicará que hacer para que el Firewall esté debidamente configurado, sobre todo porque esta instalación contiene una instancia. Presionar Next para que aparezca esta pantalla:
Presionar Next.
En esta pantalla se deben aceptar los términos de licenciamiento. Es opcional lo de enviar utilización del producto hacia Microsoft. Presionar Next
Seleccionar la primera opción, "SQL Server Feature Installation". Presionar Next
Las características a seleccionar son:
Si al presionar Next, les aparece esta pantalla:
Es porque esta versión de SQL Server requiere el SP1 de Visual Studio 2010; esto porque el encontró rastros de la instalación anterior, es decir la de CTP3.
Así que instalen el SP1 de Visual Studio 2010 para continuar con la instalación…
Presionar Next
El nombre de la instancia es sugerido. Y particularmente generé una instancia porque tengo una instancia por omisión de SQL Server 2008 R2 SP1.
Presionar Next para que aparezca la pantalla de configuración del servidor
Además de agregar la cuenta de instalación, agrego una de administración; esto porque como mejor práctica la cuenta de instalación no debe quedar registrada como administradora… De hecho, es muy probable que sea incluso una cuenta creada específicamente para dicho fin, por lo cual después se elimina…
Se dejan los directorios de datos por omisión y se habilita FILESTREAM…
Seleccionar Multidimensional and Data Mining Mode… Y agregar las mismas cuentas de administración…
Luego de presionar Next, aparece la pantalla de configuración de SSRS. Seleccionar la opción de instalar y configurar.
Presionar Next para que aparezca la pantalla de "Ready to Install":
Presionar Install y esperar a que termine el proceso…
Presionar Close.
Ya en el menú principal del servidor, aparecen las opciones para ejecutar SQL Server 2012 RC0:
Al correr el SQL Server Management Studio, tal vez les aparezca esta opción si tienen configurado un SQL Server 2008 o 2008 R2, como es mi caso:
Yo indiqué que no…
Ahora bien, la instalación de las bases de datos de ejemplo para SQL Server 2012 no tiene el instalador al que nos acostumbramos para versiones anteriores, por lo menos no por ahora… Así que hay que descargar los archivos y adjuntarlos a mano; no es difícil si se siguen las instrucciones.
CREATE DATABASE AdventureWorks2008R2 ON
(FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\AdventureWorks2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG
GO
CREATE DATABASE AdventureWorksDWDenali ON
(FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\AdventureWorksDWDenali_Data.mdf')
Estaba revisando mi Facebook y por allá alguien dijo a propósito de la salida de su creador James Gosling de Oracle:
“Es que Java le lleva mucha ventaja a .NET!”
OMG!
Abrió la caja de pandora… y entonces comenté algo similar a lo siguiente, dado que soy NINJA (Not INcluding JAva):
En lo personal me parece que decir que Java le lleva ventaja a .NET, ni siquiera aplica. Java es solo un lenguaje. Más bien tendríamos que comparar JDK con .NET aunque tampoco me parece muy apropiado... .NET es toda una tecnología. Una tecnología basada en código administrado. En eficiencia; en productividad en hacer todo desde un solo lugar. En confiar en un solo esquema de librerías bien conocido, documentado y creado bajo los mismos principios. Alguién más apuntó:
“…he programado en los dos lados y eso de que java le lleva a .net mucha ventaja lo discuto.. JAVA cambia sus paradigmas a toda hora… o será muy fácil pasar de EJB 2 a 3 o integrar plugins y librerías en Eclipse: Algo así EJB 2.0 Hibernate jax-ws y jboos 5… eso es un show con una pila de errores que a veces ni idea y después te das cuenta que solo era por una versión menos de alguna librería x ... en fin Calidad de vida mata Esquizofrenia(enfermedad generada por apagar el modo NINJA)…”
No tengo que importar paquetes extraños. Todo me lo resuelve el IntelliSense. Aún SDKs de Javascript tan robustos como JQuery se resuelven en segundos y me dejan programar a la velocidad del.. hum... sí.. del programador .NET... que sin ser exagerado caballeros, siempre será más alta que la de java. A .NET no le gusta "echar pedal" (y no mencionemos la velocidad de ejecución).”
Pero Java es multiplataforma!
Y .NET no? Solo hablemos de Mono y ya. O de Silverlight que ahora me permitirá correr la misma aplicación en Linux,. MAC o Windows en modo full trust out of browser o en otras palabras, en modo escritorio... Y me pregunto... cuándo con Java podremos crear algo aunque sea ligeramente parecido a Silverlight? A WPF?
Además, pienso que la interoperabilidad no es correr sobre todos los sistemas operativos (cosa factible con .NET) Sino más bien la capacidad de interoperar con otras aplicaciones existentes... y .NET está super preparado para esto con WCF que hoy día da amplias capacidades de interconexión comenzando por REST, JSon, OData, y los otros viejitos como SOAP, WSDL...
Pero Java es gratis!!!
Y .NET no? Toda la especificación de .NET es abierta. Y tenemos herramientas altamente sofisticadas y SOPORTADAS que son free... si no, pregúntenle a las versiones Express de Visual Studio. Existe también el sitio http://codeplex.com donde miles de desarrolladores comparten su código de manera OPEN SOURCE y se encuentran proyectos geniales de código libre.
Pero Java es Java!!!
Sí... los programadores se enorgullecen de saber Java... no digo que sea malo... por el contrario rescato la idea original que se tuvo de la JVM y del código administrado y del lenguaje altamente formal y completamente orientado a objetos que en gran parte le dieron vida a mi amado C#...
Pero C# pertenece a .NET y .NET es una cosa con vida propia que permite crear nuevos lenguajes orientados a su funcionalidad (F#, IronPython, IronRuby. APL.NEXT) y además permite la inclusión de elementos avanzados como expresiones lambdas, métodos y clases parciales, métodos extendidos, LINQ, lenguajes dinámicos, automatización en la generación de capas de datos, de negocio y hasta de interfaz de usuario; MVC, Entity Framework, Cloud Services desde su proyecto en Visual Studio derechito pa’ la nube… En integración transparente con Office, con XNA para hacer videojuegos, con Robotics, con Sharepoint, Biztalk y servidores de DB de toda índole. Con todo eso un simple Enterprise Library (lo que más se compara con la mega colección de paquetes de Java) no es nada… es solo una pequeña porción de todo lo que tiene .NET. Sin olvidar el poderoso C++ que aún está disponible para ejecutar aplicaciones que realmente vuelan porque no son administradas. Además hoy día tenemos librerías específicas para hacer programación en paralelo y hypercomputing sin necesidad de hacer un curso para usarlas! en fin... esta cajita de pandora llamada .NET, me daría para escribir un montón de líneas más....
Para estos días que estamos de lanzamiento de la nueva ola de nuestra plataforma: Visual Studio 2010 (que además ahora incluye modelamiento UML y un manejo de arquitectura que ni en mis sueños me imaginaba) .NET Framework 4.0, Silverlight 4.0, Sharepoint 2010, Windows Azure para Colombia y muchos otros... podría decir que en mis años de experiencia con .NET jamás había presenciado una oleada tan grande de innovaciones que nos va a permitir verdaderamente desarrollar todo nuestro potencial antes de tener que pelear para únicamente mostrar un botón en la interfaz gráfica…
Y ahí terminó la discusión… luego Willy remató con un brillante chascarrillo acerca del asunto:
Michael Schumacher llega a casa después de un duro día de entrenamiento en el circuito. Su mujer le recibe con un beso y le pregunta: - "¿Cómo ha ido hoy el día, cariño?" - "Bueno, cuando he llegado al circuito, he ido a boxes y el F1 no estaba en su sitio. En su lugar había un burro." - "¿Cómo?", se sorprende la mujer. - "Si, así es. Le he preguntado al jefe de equipo y me ha confirmado que habían cambiado el monoplaza por el burro." - "¿Y tu que le has contestado?" - "Pues yo le he dicho que quizás no seria tan rápido como el F1. Él ha dicho que ciertamente es así, pero que ahora tenemos una ventaja y es que podremos correr en todo tipo de circuitos: F1, rally, motocross, trail sin... Y bueno, al menos hoy he podido venir montado en él hasta casa, cosa que no podía hacer con el F1." - "Ya. Pero si tu sólo corres en F1, ¿para que quieres poder correr en otros circuitos?" - "Pues no lo se, la verdad. Además, después de montarme en el burro le he dicho al jefe de equipo que no era ni la mitad de cómodo que el monoplaza." - "¿Qué ha respondido el?" - "Simplemente ha dicho que eso no importa porque ahora podemos correr en todo tipo de circuito." - "¡Ay Señor!, ¿Y no corres más riesgo de hacerte daño si te caes?" - "En realidad no, porque le han puesto al burro las mismas protecciones que tiene la cabina del F1. A pesar de que hace que todavía vaya un poco mas lento. Según el jefe eso ya no tiene tanta importancia, porque ahora podemos correr en todo tipo de circuito." - "Esta bien, enséñame el burro." Tras salir al jardín y quedarse estupefacta con la imagen de un burro pintado de rojo, con el escudo de Ferrari pegado en la frente y una protección de F1 encima de la silla de montar, la mujer le pregunta a Michael: - "¿Y como se llama el animal?" - Se llama .... - Se llama .... - Se llama .... - Se llama .... - Se llama .... - Se llama .... JAVA !!!!!!!! X-DDDDD Según apunta Willy además no es cierto que Ferrari use Java. Los leguajes oficiales para desarrollo en el equipo Ferrari son VB.NET y C++, tal y como se indica en una entrevista concedida a CNET NEWS" http://tiny.cc/42f73
Y ahora otro más cortesía de @Caycedo:
- Knock Knock... -Who's there? . . . . . . . . . . . . . . . . . . - Java! :P
A lo cual le agregué el siguiente escenario (un poco más abstracto):
Knock Knock... -Who's there? -Dont worry, I'm Just Leaving (espero aquí sepan de quien estoy hablando)
.NET Rocks!!! Felices lanzamientos 2010!!!
Ya a estas alturas del partido, sabrás que con Windows 8 vienen grandes innovaciones dentro de este sistema operativo. Eso, si es que no lo has probado por tu propia cuenta, bajándolo gratuitamente de aquí. Cualquier máquina que corra Windows 7, te servirá para probarlo.
La innovación más grande por su puesto es la inclusión del ambiente de Interfaz Moderna
En pocas palabras, el ambiente de Interfaz Moderna está orientado a ser amigable en dispositivos con touch screen. Específicamente Tablet PCs y Slates:
Ojo: que esto no quiere decir que el desktop tradicional haya desaparecido. Este sigue existiendo y también ha evolucionado con muchas mejoras como un Explorer con Ribbon, copia de archivos optimizadas, soporte a USB3 para velocidades de transferencia impensables y otras más que pueden encontrar en el blog oficial de Windows para usuarios finales.
Desde el punto de vista de un desarrollador, el ambiente desktop no tiene muchos cambios radicales a nivel de presentación de nuestras aplicaciones. Habría que tener sin embargo en cuenta las novedades de la nueva versión del Framework .NET que viene con Windows 8, que es la 4.5 y que entre otras cosas interesantes, tiene la inclusión de Async, que nos permite crear interfaces fluidas de una manera más sencilla. Sin embargo, básicamente podemos pensar en estos cambios como sencillamente un par de librerías más por aprender.
El cambio radical está en la interfaz Moderna: aunque es radical solo en estructura; pues como veremos, la programación es la misma. De hecho, si ya sabes .NET y XAML o HTML y Javascript, ya sabes programar para Windows 8 en Interfaz Moderna!
Pero antes de describir estos cambios estructurales consideremos el por qué de aplicaciones de Interfaz Moderna o Windows Store Apps, como son más conocidas, ya que estas apps solo van a estar disponibles a través de una tienda online llamada el Windows Store. Es evidente que la movilidad se ha vuelto supremamente importante hoy en día y que todos queremos tener un sistema operativo fácil de transportar. Hemos visto que estas características son ofrecidas por los tablets y slates. Que estos en general no poseen teclado, sino que son muy basados en touch. Entonces, necesitábamos una versión de Windows adecuada para estos escenarios. Esto sin mencionar que la durabilidad de la batería es súper importante. Queremos que nuestro dispositivo aguante aunque sea todo un día de trabajo sin necesidad de ser conectado a la electricidad. Pero para lograr esto, requerimos de procesadores y discos duros que no consuman tanta energía y de un diseño de aplicaciones que las permita suspender de manera óptima para ahorrar hasta el último vatio cuando no se estén usando.
Existe un tipo de procesador que tiene un consumo supremamente bajo de energía y que fácilmente puede garantizar 8 horas de funcionamiento. Es el procesador ARM.
Cómo pueden garantizar esto? Pues teniendo un conjunto de instrucciones reducido en comparación con los procesadores de arquitectura x86 o x64 a los que estamos acostumbrados en nuestras PCs. Es un precio que hay que pagar para lograr durabilidad. Pero si lo vemos bien, un rediseño del sistema operativo pensando en aplicaciones fácilmente suspendibles y en la eliminación de características que no son muy necesarias en un dispositivo móvil, sumado a la inclusión de hardware especial como los discos duros de estado sólido, nos permite tener un aparato que funciona como lo necesitamos y con la duración requerida. Como si fuera poco, por añadidura cuando logramos esto, tenemos un sistema operativo que arranca y está listo para usarse en tiempo de solo 3 segundos!!! Lo cual es una característica súper importante para la movilidad.
En síntesis, se requería un ambiente de aplicaciones amigables al tacto, que corrieran de manera óptima en procesadores ARM (y por ende en procesadores de arquitectura tradicional) y que además ofreciera muchas facilidades para tener una experiencia de usuario impactante.
Y precisamente eso es lo que ofrece la interfaz Moderna.
Esta gran iniciativa nuestra no para con la creación del sistema operativo y la habilitación de excelentes dispositivos móviles que lo usan. También dispondremos de un marketplace: Windows Store. Diseñado específicamente para enriquecer el ecosistema de Windows Store Apps que se van a empezar a requerir bajo este nuevo esquema. Aplicaciones innovadoras, muy atractivas para el usuario que van a poder ser vendidas y compradas de una manera muy sencilla a través del store. Cualquier desarrollador desde su casa va a poder crear su aplicación, subirla al atore y empezar a recibir ganancias por ella, muy al estilo de Windows Phone. Y en este caso, para Colombia tenemos garantizado el acceso al store. Somos uno de los pocos países de Latinoamérica con este privilegio.
Visto lo visto, supongo que ahora estarás preguntándote cómo crear estas Windows Store Apps…
Como te dije antes, si sabes .NET; en especial Silverlight, entonces ya sabes crearlas!!! Además, no necesitas ser un desarrollador experimentado en .NET para lograrlo. Si sabes HTML y Javascript, también el desarrollo de este tipo de aplicaciones está a la mano. Así que si has desarrollado sitios web por algún tiempo con cierta carga de Javascript, también estás listo para arrancar! De hecho si tu experiencia es en C++, también hay cabida para ti.
Lo único necesario es aprender un par de librerías más; tarea nada difícil, teniendo en cuenta que el intellisense es completo para todos los lenguajes aceptados en la plataforma de desarrollo para Interfaz Moderna.
Entonces, ya sabiendo que a nivel de desarrollo todo funciona de una manera familiar, entremos un poco más y aprendamos realmente cuál es la plataforma sobre la que están las Windows Store Apps.
WinRT es la abreviación de Windows Runtime. Y es la plataforma sobre la cual se programan aplicaciones de tipo Interfaz Moderna para Windows 8.
WinRT NO está basada en .NET. De hecho, WinRT está al nivel del API nativa de Windows por excelencia que es Win32. WinRT accede nativamente al Kernel de Windows, ofreciendo gran velocidad de ejecución por un lado y por otro una abstracción muy útil para poder acceder a todos los recursos del sistema a través de un paradigma orientado totalmente a objetos, de una manera extremadamente sencilla.
.NET tradicional trataba de solventar esta tarea… pero alguna vez trataron de acceder a la webcam de su máquina para obtener una sencilla foto? Si es así de seguro recordaran lo divertido que es hacer los DLLIMPORT requeridos para traer APIs de WIN32.
Con WinRT estos llamados ya no son necesarios, pues la conexión ya es directa y se logra completamente a través de objetos ya existentes en la plataforma.
WinRT está basado en 33 APIs nativas con las que se puede acceder al core de sistema operativo. Como se aprecia, están divididas en 5 grandes grupos: Fundamentales, Dispositivos, Media, Comunicaciones y Datos e Interfaz de Usuario.
En general WinRT se presenta como la base sólida y eficiente para construir Windows Store Apps.
De acuerdo a lo anterior, si equiparamos a WinRT con .NET tradicional, tendríamos una gráfica como la siguiente:
Como lo había mencionado vemos que WinRT (la zona verde) accede directamente al Kernel de Windows, de igual forma que lo hace .NET, Win32 e Internet Explorer. Vemos sin embargo que estos últimos van a estar destinados para las aplicaciones de escritorio tradicionales, con los conocimientos que ya tenemos.
WinRT está basado en un modelo de aplicaciones (Application Model) en el cual cada aplicación es una clase como tal (contenedora de otras clases), que son instanciadas por el proceso WWAHost.exe que es el encargado de administrar funciones como la suspensión. Cada aplicación es instanciada por un WWAHost independiente, a través del ejecutable de la aplicación que aparece como miaplicación.exe, pero tiene el comportamiento particular de luego lanzar el Host:
Esto me recuerdo mucho el viejo esquema de COM; y efectivamente muchos de los conceptos de WinRT provienen de allí, excepto que ya no usamos un acercamiento basado en interfaces sino basado en objetos. Además tenemos variedad de lenguajes gracias a las proyecciones y también nos podemos olvidar del DLL Hell, gracias a la metadata que aún conservan los componentes de WinRT, que son una gran herencia de .NET, que por su puesto sigue su camino en aplicaciones de escritorio convencionales, así como en las capas de backend y servicios en los sistemas n-layer.
Vemos que sobre este modelo de aplicaciones tenemos todas las apis que describí anteriormente y que básicamente nos permiten acceder a los recursos del sistema y a librerías que nos facilitan el desarrollo de nuestras aplicaciones.
Sobre las apis, ya podemos extender nuestras proyecciones de lenguaje que nos permiten acceder a ellas de distintas maneras, de acuerdo a nuestros gustos. Si somos familiares con Silverlight y .NET, usamos VB o C#. También podemos usar C++ o si venimos del mundo Web, podemos usar Javascript que usa el motor Chakra. El mismo de Internet Explorer.
Finalmente, sobre estas proyecciones de lenguaje ofrecemos los lenguajes de marcado para poder crear interfaces declarativamente. No es más que el típico XAML que conocíamos de WPF, Silverlight y WP7 para cuando usemos C#, VB e interesantemente C++. SI algo recuerdo con pena y dolor de C++, es la creación de interfaces gráficas a punta de C++. Era algo completamente dispendioso, complicado y propenso a errores. Ahora tenemos todo el poder nativo de C++, complementado por el poder declarativo de XAML para la UI.
En el caso de Javascript, naturalmente el lenguaje de presentación viene a ser HTML acompañado de CSS para la definición de estilos. Esto obviamente hará muy fácil traducir aplicaciones HTML5 para web, a aplicaciones HTML para Windows Store.
Ya vimos que básicamente estos son dos stacks distintos dentro de Windows. Sin embargo, dado que WinRT ofrece proyecciones de lenguaje para C# y VB, el resultado es que la mayoría de librerías de .NET tienen su equivalente en WinRT. Algunos métodos tienen diferencias sutiles y encontramos nuevas librerías en WinRT que mejoran el acceso a dispositivos y recursos del sistema. De hecho es posible para nosotros crear componentes en .NET que puedan ser consumidos por WinRT, siempre y cuando usen las librerías del Namespace Windows.
En WinRT podemos crear componentes que pueden ser reutilizados en otras apps WinRT. Todos los componentes y aplicaciones generan una metadata que permite un versionamiento transparente y la garantía de que las aplicaciones correrán correctamente en el futuro.
Es muy sencillo y free, solo tienes que bajarte tu versión de desarrollador de Windows 8 que además incluye las herramientas de desarrollo que en este caso es Visual Studio 2011, de este link.
Además para más recursos y videos instructivos, les recomiendo visitar el sitio oficial de Windows para desarrolladores: http://buildwindows.com y http://dev.windows.com. Para saber más de Windows Store Apps: http://msdn.microsoft.com /windows/apps. Para comentar y resolver dudas: http://forums.dev.windows.com. Para saber más del marketplace: http://blogs.msdn.com/b/windowsstore; para saber más de características de usuario final de sistema operativo, visiten el blog oficial. Y para obetener la información de primera mano desde las redes sociales:
Facebook (developer)
http://fb.windows.com/developers
Twitter (@b8)
http://twitter.com/BuildWindows8
Twitter (@windevs)
https://twitter.com/windevs
YouTube (developer)
http://www.youtube.com/user/WindowsVideos
Veamos en esta cortísima demo de 5 minutos, las características más importantes de Windows 8, que a nosotros como desarrolladores nos han de importar, para poderlas aprovechar a la hora de generar nuestras apps.
&amp;amp;amp;amp;#160;
Hace poco me preguntaron acerca de cómo se debería de abordar el manejo de excepciones para una aplicación grande.
Me sentí agradado de que esa persona estuviera concientizada de que no es un tema que se puede dejar al azar y que hay que tener ciertos temas en cuenta.
Básicamente, su duda era acerca de cómo capturar unificadamente todas las excepciones producidas en su aplicación; luego de alguna investigación, llegó a saber de Application.ThreadException; un evento al que se le puede poner un manejador y allí tomar las acciones necesarias. Sin embargo, personalmente no recomiendo esta solución. Por qué?
1. La notificación de la excepción ocurre muy tarde: cuando se recibe la notificación, la aplicación ya no podrá responder a la excepción.
2. La aplicación terminará abruptamente si la excepción ocurre en el hilo principal o en cualquier otro hilo que sea iniciado por código no administrado (el hilo principal de la aplicación obviamente es ejecutado por Windows – no administrado)
3. No tenemos acceso a ninguna información valiosa acerca del error, excepto la excepción misma. No se podrán cerrar conexiones a bases de datos, hacer rollback de transacciones ni nada útil.
Así que mi recomendación es nunca basar el manejo de excepciones en los eventos Application.ThreadException ni AppDomain.UnhandledException. Ellos deben ser usados y existen como las redes de seguridad de los acróbatas; su función es la de hacer un registro de la excepción en algún mecanismo de log, para alguna examinación futura. Así que hay que darse la pela y manejar cada excepción en su sitio y actuar en concordancia.
Esta última invitación conlleva a tener en cuenta otra serie de factores que generalmente se omiten cuando uno comienza a desarrollar “en forma”:
1. El código metido entre try, catch se ejecuta muy lento. Consume muchos recursos. Así que sólo manejemos excepciones cuando realmente se necesite. Cuándo es eso? Las excepciones están construidas para manejar condiciones que no se pueden controlar con la lógica de la aplicación. Por ejemplo que se cae la conexión con el servidor, o que el disco está lleno, o que el hardware falló… Antes de lanzar excepciones por todo, fijémonos si realmente es necesario. Evitemos también poner mucho código en el try; solo afectemos con el try el código que realmente puede fallar. Por ejemplo es preferible:
if (conn.State != ConnectionState.Closed) { conn.Close(); }
a:
try { conn.Close(); } catch (InvalidOperationException ex) { Console.WriteLine(ex.GetType().FullName); Console.WriteLine(ex.Message); }
2. No emita Exception(). O es que eso le da mucha información? El framework .net tiene un número de excepciones que nos permite controlar argumentos y operaciones inválidas, timeouts, conexiones, overflows, etc. Usemos esas excepciones que realmente nos indican qué fue lo que sucedió.
3. Use bloques try/finally. Recuerde que las instrucciones en el Finally siempre se ejecutan independientemente de si se produjo o no la excepción. Esto es muy útil para liberar recursos, cerrar conexiones, etc.
4. Siempre use un catch para cada tipo de excepción que se pueda generar y ordénelos desde el más específico hasta el menos específico. Esto ayuda a identificar plenamente el error que se generó y no terminar con excepciones como: “Object reference not set to a instance of an Object”.
5. Cuando cree excepciones propias del aplicativo, asegúrese de distribuir el Assembly a una ubicación compartida para todos los posibles dominios que tengan que ver con ellas.
6. De acuerdo a como el mecanismo de excepciones funciona, es muy importante siempre que creemos excepciones propias, proveerlas al menos con los tres constructores de excepciones básicos.
7. Siempre es recomendable usar las excepciones de .Net. Las personalizadas solo tendrán que ver con escenarios programáticos.
8. Siempre se ha pensado que para las excepciones personalizadas se debería heredar de ApplicationException; sin embargo en la práctica se ha demostrado que no se agrega valor significativo y además se pierde cierto performance. Así que es mejor heredar siempre de Exception.
9. Use mensajes gramáticamente correctos.
10. Las excepciones pueden incluir propiedades. Estas propiedades pueden ser accedidas programáticamente para tomar acciones. Incluya información extra relevante en estas propiedades cuando sea útil.
11. En vez de retornar null, lance excepciones en la mayoría de casos. Eso evita inconvenientes que a veces son difíciles de detectar. Evite también retornar códigos de error.
Estas son solo unas pocas recomendaciones a la hora de manejar excepciones. Hay muchas más que se aprenden con el pasar de las líneas de código.
Para finalizar, me parece importante mencionar también que igual existe un Application Block en Patterns And Practices para el manejo de Excepciones. Incluyéndolo en nuestras aplicaciones ya de por sí garantizaremos varias buenas prácticas; eso sí, usandolo tal y cual se explica en los lineamientos.
Está es una gran noticia que me da mi gran amigo, remarcable MVP en Silverlight, Rodrigo Díaz. Quien desde La Liga Silverlight ha traducido al idioma español el contenido original de todos los tutoriales para el desarrollo de aplicaciones en Windows Phone, disponibles en App Hub.
¡Son un total de 27 tutoriales!
Este material de entrenamiento completamente gratuito y en español te servirá para iniciar en el mundo de la programación de la nueva versión del sistema operativo móvil de Microsoft: Windows Phone 7, o si ya eres desarrollador para este dispositivo estos tutoriales sin duda alguna te ayudarán a reforzar tus conocimientos.
Cada tutorial trata un tema específico, por lo que no están vinculados directamente uno con otro pero definitivamente les recomiendo que los sigan en el orden establecido. Los tutoriales comienzan con temas básicos de XAML y Silverlight, y posteriormente se van analizando conceptos más a detalle acerca de esta plataforma de desarrollo.
La lista completa de tutoriales es la siguiente:
También pueden ver el índice completo en esta página de La Liga Silverlight.
¡Esperamos que les sean de utilidad!
Ya en este punto sabemos mucho del mundo de nuevas cosas que se vienen con Windows 8.
Comencemos citando entonces que tendremos dos grandes divisiones en las que tendremos Windows 8. La x86/64 y la WOA (Windows on ARM –los procesadores de bajo consumo energético). En ambas se podrán usar touchscreens, así como mouse y teclado cuando se desee.
Así que para x86/64 el nombre del OS será Windows 8. Y para estos sistemas, tendremos sólo 2 versiones: Windows 8 y Windows 8 Pro. La primera para uso de hogares y pequeñas empresas y la segunda para usos más profesionales con integración a dominios y demás (Ver al final la tabla de características)
Para el mundo de WOA llega Windows RT como el nuevo miembro de nuestra familia Windows. Y sólo estará disponible pre-instalada en PCs y tablets que tengan procesadores ARM. Vendrá con versiones optimizadas para touch de Microsoft Word, Excel, PowerPoint y OneNote.
Aquí les muestros las características especiales que podremos encontrar en cada edición.
Característica
Windows 8
Windows 8 Pro
Windows RT
Upgrades from Windows 7 Starter, Home Basic, Home Premium
x
Upgrades from Windows 7 Professional, Ultimate
Start screen, Semantic Zoom, Live Tiles
Windows Store
Apps (Mail, Calendar, People, Messaging, Photos, SkyDrive, Reader, Music, Video)
Microsoft Office (Word, Excel, PowerPoint, OneNote)
Internet Explorer 10
Device encryption
Connected standby
Microsoft account
Desktop
Installation of x86/64 and desktop software
Updated Windows Explorer
Windows Defender
SmartScreen
Windows Update
Enhanced Task Manager
Switch languages on the fly (Language Packs)
Better multiple monitor support
Storage Spaces
Windows Media Player
Exchange ActiveSync
File history
ISO / VHD mount
Mobile broadband features
Picture password
Play To
Remote Desktop (client)
Reset and refresh your PC
Snap
Touch and Thumb keyboard
Trusted boot
VPN client
BitLocker and BitLocker To Go
Boot from VHD
Client Hyper-V
Domain Join
Encrypting File System
Group Policy
Remote Desktop (host)
Si no lo has visto en acción, dascarga una version de prueba de aquí!
Nota: Para las empresas con SOftware Assurance, como siempre tendremos la versión Windows 8 Enterprise, con aún más features para el manejo corporativo.
Ya vimos en este post los conceptos de Software as a Service (Saas), Software + Services (S+S) y Plataform as a Service (PaaS) y de cómo Windows Azure es la alternativa que Microsoft nos ofrece para desplegar este tipo de conceptos que lideran hoy el desarrollo del software.
En este otro post vimos toda la teoría acerca del funcionamiento de Windows Azure y los conceptos sobre los cuales se construye.
Pues bien, ya con esto en nuestro conocimiento, hoy les traigo ya para que comencemos de lleno, un video que nos muestra cómo comenzar a programar para Windows Azure y cómo desplegar nuestras aplicaciones en la nube, sobre este esquema.
Para poder hacer este despliegue, es necesario tener una cuenta en válida en Windows Azure, que nos permita hacer deployment de aplicaciones.
Aunque lo más obvio y normal es que estas cuentas tengan un costo, hasta el mes de Julio de 2010 tenemos una promoción que nos permite probar la plataforma bajo ciertas restricciones y de manera gratuita.
En el siguiente video les muestro como aprovechar esta promoción, para adquirir una cuenta válida:
Links mencionados en este video:
Luego de que tengamos nuestra cuenta, podemos proceder a crear y publicar nuestras aplicaciones en la nube, tal como se muestra en el siguiente video (si no tenemos una cuenta, el video también es útil para aprender a programar para Azure, pero no tendremos la posibilidad de publicar la aplicación):
Muy bien, espero que con este par de videos, se animen para comenzar a ser productivos con Windows Azure. Ya vendrán más videos con los que les mostraré aplicaciones más avanzadas.
UPDATE: Ya tenemos disponible el video del Keynote del lanzamiento de la Surface ayer en los Ángeles. Aquí esta:
Ahora, un video de la tablet, porque vale mucho más que miles de palabras!!!
Ahora imágenes! Muchas imágenes!
La Surface, no viene con un docking. Viene con un forro que incluye teclado y pad multitouch (Touch Cover)! Además tiene un soporte en la parte trasera, que permite ajustar el ángulo de visualización.
Forros con colores para todas las personalidades
Un diseño sin precedentes!!!
También se puede incluir un Type Cover que trae un teclado más físico que el del Touch Cover.
El mejor tamaño que puede haber para una tablet de este estilo!
No les inspira rediseñar su espacio en torno a este aparato?
El VaporMg Case es una total innovación que brinda elegancia, comodidad y ligereza gracias al magnesio con el que está construido.
Todo el poder para una conectividad real!
Que más hay que decir, que toda esta maravilla fue develada hoy a las 6.45pm hora Colombiana en Los Angeles, en un sitio que no fue develado sino hasta el día de hoy, a un grupo de selectos periodistas y bloggers quienes fueron avisados del evento solo hasta el viernes pasado.
La Microsoft Surface Tablet, vendrá en dos versiones. Aquella para Windows RT, y aquella para Windows 8 Pro. Se diferencian básicamente en la cantidad de espacio en disco (SSD): 64Gb máx y 128Gb max, la pro vendrá con un Stylus especial, el tipo de pantalla y sobretodo el procesador. la primera vendrá con ARM y la segunda con el Ivy Bridge de GBIntel, l que presumiblemente nos permitirá seguir teniendo el desktop tradicional.
Otras especificaciones:
OS: Windows RT
Light: 676 g
Thin: 9.3 mm
Clear: 10.6” ClearType HD Display
Energized: 31.5 W-h
Connected: microSD, USB 2.0, Micro HD Video, 2x2 MIMO antennae
Productive: Office ‘15’ Apps, Touch Cover, Type Cover
Practical: VaporMg Case & Stand
Configurable: 32 GB, 64 GB
OS: Windows 8 Pro
Light: 903 g
Thin: 13.5 mm
Clear: 10.6” ClearType Full HD Display
Energized: 42 W-h
Connected: microSDXC, USB 3.0, Mini DisplayPort Video, 2x2 MIMO antennae
Productive: Touch Cover, Type Cover, Pen with Palm Block
Configurable: 64 GB, 128 GB
Se espera la llegada de la Surface Windows RT en el RTM de Windows 8 y la Windows 8 Pro, aparecerá tres meses después.
Mañana mismo podremos ver el video del lanzamiento aquí.
Para terminar, solo me resta citar unas palabras:
“I love this company.
I love that we have brilliant engineers with brilliant ideas. I love that we aren’t afraid to make big bold bets. I love that we are persistent – after all it’s our passion and tenacity that bring our dreams to life. And right now, I love how so much of our hard work, passion and tenacity are coming together in the products we are bringing to market…
… I’m incredibly proud of the work this company is doing and incredibly optimistic for what’s ahead. “
Steve Ballmer, al equipo de Microsoft.
Quieres ganarte DOS BOLETAS PLATINO para ver a AEROSMITH en Bogotá este 20 de Mayo?
Sólo debes crear una aplicación y subirla a Windows Azure.
En este POST de mi blog encontrarás los pasos a seguir para crear una cuenta en Windows Azure válida en Colombia y la guía para subir dicha aplicación.
Envía un mail a devcol@microsoft.com con el asunto “Windows Azure” e incluye los siguientes datos: URL de tu aplicación, Nombre, Cédula y teléfono.
El sorteo se realizará el Martes 18 de Mayo a las 5PM entre los mails que hayamos recibido hasta ese momento y nos comunicaremos directamente con el ganador.
*Sólo serán válidas las cuentas creadas en Colombia
** El sorteo será realizado por un jurado de 5 personas en la hora y fecha indicadas.
www.microsoftactiva.com
Yendo directamente al grano, SCALE UP hace referencia a lograr escalabilidad a nivel de servidor, incrementándole sus recursos de hardware, antes de mejorar la escalabilidad usando otro servidor. Por ejemplo, aumentando su cantidad de memoria, o la capacidad/velocidad de los discos o la cantidad de núcleos de cómputo del servidor.
En un enfoque SCALE OUT, la escalabilidad se logra “sacando” la carga a otros servidores.
Al principio el enfoque SCALE UP puede parecer el menos costoso y más sencillo para muchos casos. Pero cuando las exigencias siguen aumentando con el tiempo, lo que sí es seguro, es que se llegará a un límite práctico en el que no será posible “agrandar” más el servidor para ponerle por ejemplo 500 núcleos de procesamiento de manera que pueda satisfacer una fuerte demanda. En estos casos, es fácil observar cómo puede resultar mucho más barato, eficiente y productivo un enfoque de SCALE OUT. Además, un SCALE UP generalmente genera tiempo de baja, mientras se cambian o mejoran las partes de hardware. Mientras que con un SCALE OUT, solo es cuestión de levantar más máquinas independientes.
Windows Azure es tan flexible, que nos permite ambos tipos de escalamiento. El SCALE UP se logra a través del ajuste que podemos hacer a las instancias que creamos para correr nuestros servicios (recordemos que una instancia es cada uno de los servidores virtuales que ordenamos crear para desplegar nuestras aplicaciones de Windows Azure). Estas instancias vienen en cuatro tamaños. Así que al mejor estilo SCALE UP podemos hacer que el tamaño de cada instancia crezca. Estas son las posibilidades de tamaño que tendríamos:
Así que podríamos escalar desde 1.6 hasta 10.4 GHz en CPU, desde 1.75GB hasta 14GB de RAM y desde 225MB hasta 2TB de disco duro.
En cuanto a la alternativa SCALE OUT, tenemos servidores que se aprovisionan muy rápido y pueden comenzar a trabajar en equipo manipulando solo unos elementos de configuración. Así pues, tenemos la ventaja de poder adicionar más y más instancias a nuestro despliegue, las cuales se ajustarán automáticamente con solo un despliegue inicial.
El SCALE OUT no aplica solo a los servidores de presentación o cómputo (web o worker roles), sino también de SQL Azure como tal. No obstante, en SQL Azure no tenemos la posibilidad de hacer SCALE UP.
SQL Azure ofrece una gran cantidad de ventajas sobre todo al tener que escalar bases de datos de una manera elástica y rápida, dado que tenemos casi que ilimitada capacidad para levantar nuevas bases de datos para satisfacer cualquier demanda. En SQL Azure, no tenemos una relación física uno a uno entre servidores y bases de datos como en SQL Server tradicional. Pero la abstracción que se nos brinda es perfecta para que la mayoría de las veces el manejo que se le da a estos conceptos sea el mismo que on-premises. Sin embargo, cuando tenemos una cuenta de SQL Azure, tenemos la posibilidad de generar todas las bases de datos que queramos, las cuales residirán en servidores distintos (a veces coincidencialmente residirán en el mismo servidor). Pero esta distribución es ejecutada por los balanceadores de carga automáticos de Azure que se encargan de determinar cómo distribuir las cargas de peticiones a la plataforma.
Entonces en SQL Azure no vamos a tener la posibilidad por ejemplo de aumentar la memoria de un server dado, sino que sencillamente levantamos otra base de datos. Con esto, podemos tomar una base de datos que requiera ser escalada y segmentarla o particionarla en otras bases de datos más pequeñas y con mejor rendimiento.
Comprendido ya el concepto de SCALE OUT, veamos ahora que por ejemplo cuando hablamos de bases de datos, existen dos formas para hacer este tipo de escalamiento: Vertical y Horizontal. Estos tipos de escalamiento se ejecutan particionando las tablas que conforman la base de datos horizontal como verticalmente. Luego de estar particionadas, obviamente se generan más tablas y éstas a su vez se pueden ubicar en distintas bases de datos, lo que nos daría el escalamiento buscado.
Consiste en dividir las tablas verticalmente a través de columnas. Así pues, uno por ejemplo podría escoger dejar las columnas más importantes en una tabla y las menos usadas en otras. Por ejemplo dejar en una tabla T1 de la base de datos D1 los datos del cliente y su dirección principal, y en otra T2 en la base de datos D2, otra tabla con las direcciones secundarias. Entonces para lograr un correlacionamiento correcto entre T1 y T2, en T2 deberíamos tener un mecanismo de llaves foráneas hacia T1.
Otro ejemplo de particionamiento vertical se observa por ejemplo cuando dejamos una tabla completa (o conjunto de ellas) en una sola base de datos. Y otras tablas en otras bases de datos. Por ejemplo, tiene mucho sentido en una aplicación de negocios, tener la tabla de clientes en una sola base de datos, para obtener el mayor rendimiento posible para ésta.
Lo que es más, se puede combinar ese particionamiento para lograr aún más escalabilidad y eficiencia, de manera que podremos poner la tabla de clientes en su propia base de datos, y luego particionar sus columnas en distintas tablas, pero dentro de la misma base de datos.
Este escalamiento comprende la distribución de los datos de una tabla a través de varias tablas con la misma estructura, cada una de las cuales generalmente se encuentra en una base de datos distinta y en ocasiones aún en instancias y/o servidores distintos. Es un excelente acercamiento para circunstancias en las cuales la variabilidad de la carga de trabajo en el servidor de base de datos es muy alta, pues en SQL Azure por ejemplo, es muy fácil aprovisionar y desaprovisionar servidores; además siempre resulta mucho más barato que tener un servidor de muy altas prestaciones siempre encendido esperando por picos de carga de trabajo.
En cada versión de la tabla se almacena un conjunto de datos que tienen como dato común el valor de una columna que generalmente se conoce como PartitionKey. Entonces cada versión de la tabla se llama Partition. Este es el tipo de particionamiento que se hizo popular con SQL Server 2005.
Para poder tener “conciencia” de dónde están ubicados los datos con una PartitionKey determinada, existe una tabla maestra donde reside esta información.
Por ejemplo; en una aplicación comercial, se puede decidir dejar en una base de datos diferente cada las ventas de cada ciudad. En este caso la ciudad sería la PartitionKey para identificar cada tabla. Sin embargo, una clave de partición, podría estar conformada por más campos dependiendo de la naturaleza de la aplicación y el tipo de carga de trabajo.
1. Escoger una llave de partición adecuada, tras un profundo conocimiento del negocio. En general es más recomendable usar una llave natural que una numérica en estos casos. En el caso anterior, haber escogido la ciudad como llave de partición es mucho más eficiente por ejemplo que haber escogido por ejemplo el Id de la venta.
2. Administración de particiones: Es una de las tareas más complejas luego de haber definido las particiones; generalmente implica consideraciones en el desarrollo de la aplicación que debe saber dónde insertar o modificar nuevos datos así como dónde buscar los existentes. La idea es escoger un tipo de partition key que no vaya a requerir una posterior reubicación de datos cuando el negocio eche a andar, lo que probablemente significaría un tiempo de baja del servicio.
3. Evitar cross-database joins: Aparte de ser bastante ineficiente, algunas plataformas como SQL Azure no soportan consultas distribuidas. Por eso es mejor que todos los datos que requiere una tabla dada, estén en la misma DB. De lo contrario habrá que escribir el código necesario para poder ejecutar consultas asíncronas a través de varias particiones que retornen datos separadamente que luego tendrán que ser unidos en la capa de aplicación.
4. Alta disponibilidad: Cuando se escoge un acercamiento de este tipo de escalabilidad, es requerido que todos los servidores a través de los cuales está particionada la base de datos tengan unos índices de disponibilidad bastante altos. Estos índices son provistos por SQL Azure. Es así como cada vez que creamos una base de datos, SQL Azure crea automáticamente tres copias de la misma, para asegurar esta alta disponibilidad. Cada copia es creada en servidores físicos distintos dentro de la misma ubicación geográfica. La sincronización entre estas bases de datos es automática también. En caso de falla, SQL Azure automáticamente redirige las peticiones a una de las copias de seguridad y vuelve a levantar una tercera copia para futuras eventualidades. Todo esto ocurre sin intervención humana y sin caídas del servicio.
5. Administración: El escalamiento horizontal puede llegar a generar alta complejidad en la administración dado que hay que aplicar updates, ejecutar patching, ajustar un plan de recuperación de desastres, etc. y todo esto para cada servidor usado en el escalamiento. Afortunadamente SQL Azure se encarga de todas estas tareas automáticamente por nosotros. De las únicas tareas de administración que un DBA debería tener en cuenta son: creación de esquemas, afinamiento de índices, optimización de consultas, logins, usuarios y administración de la seguridad.
A pesar de que el particionamiento puede ayudar a mejorar el performance, la escalabilidad y los costos, puede llegar a ser bastante complejo implementar un esquema de particionado exitoso. Algunas aplicaciones tienen un esquema de particionamiento natural del cual se puede tomar ventaja mientras hay otras aplicaciones que requieren ser re - arquitecturadas para volverlas escalables; cosa que vale la pena la mayoría de las veces. Windows Azure y SQL Azure proveen una plataforma sobre la cual las aplicaciones pueden hacer SCALE-UP/SCALE-OUT en el caso de Windows Azure al permitir “agrandar” las instancias y al permitir usar varias instancias con el mismo despliegue. Y en el caso de SQL Azure con SCALE-OUT al permitir pasar de una o dos bases de datos a decenas o cientos de bases de datos de una manera muy sencilla sin incurrir en fuertes costos de infraestructura. Además, los clientes no pierden inversión si necesitas reducir nuevamente la infraestructura, ya que todo estaba en arriendo en el esquema de plataforma como servicio.
El objetivo de esta serie de posts, es tender una escalera a la nube (Azure), de tal manera que nosotros, desarrolladores hispanoparlantes tengamos una manera rápida de comenzar con todo lo relacionado con esta tecnología.
Para introducirnos rápidamente en el mundo de Azure, primero que todo es necesario que entendamos los conceptos de SOA, SaaS y S+S. Para este fin, he preparado este video que nos dejará muchas cosas claras:
Luego del video, es mucho más fácil entrar en materia:
Al principio todo era código estructurado. Y miles de líneas de código se entrecruzaban como espagueti dentro de aterradores GoTo’s y Labels. Y la interoperabilidad de aplicaciones era así:
Todos los sistemas estaban altamente acoplados y hacer un arreglo o un cambio era toda una pesadilla. Era la época de oscuridad en el desarrollo de software. Se desarrollaba sin ciencia. Se administraba con sufrimiento.
Después nació el servicio. Y los programadores se dieron cuenta de que era bueno. No tenían que pasar días tratando de hacer un cambio, porque las funcionalidades estaban bien distribuidas independientemente. Además tampoco se duplicaban. Entonces, nació SOA o Arquitectura Orientada a Servicios. Con la cual se hizo mucho más fácil la administración del software y los procesos más eficientes.
El milagro de SOA hizo que las empresas progresaran mucho y que cada vez requirieran más servicios; sus sistemas de software crecían y obviamente así el hardware que los soportaban. Y el crecimiento de hardware trajo consigo un purgatorio para el personal de IT. Administrar decenas de servidores y estar pendientes de los nuevos requerimientos de infraestructura para estos grandes sistemas de software se hizo cada vez más doloroso. Los costos también aumentaban exponencialmente cada vez que crecían los sistemas. Además el negocio en crecimiento obligaba a viajar a los empleados de las empresas, quienes en sus viajes de negocio requerían tener acceso al software. Pero el software estaba internado en el centro de datos empresarial. Los empleados estaban atados a la ubicación física de la empresa. Todo fue un caos!
Entonces apareció el evangelista promulgando el uso de los servicios de Hosting. Empresas encargadas de mantener los centros de datos para otras empresas sumergidas en el caos del manejo de IT. Y aparecieron grandes centros de datos que a pesar de estar fuera de las instalaciones de los clientes, podían albergar todas sus soluciones de software. Las empresas se ahorraron costos y dolores de cabeza, porque ya no tenían que estar pendientes de la administración de IT. La comunicación entre el servicio de hosting y las empresas fue posible gracias a la explosión de internet y el ancho de banda; así que los empleados ya no estaban atados a la casa matriz; todo mundo se olvidó de los detalles no funcionales y se dedicó más enfocadamente a su negocio… Los gerentes vieron que todo esto era muy bueno! Así que se dedicaron solo a producir servicios para ser hosteados y ese fue el origen del SaaS (Software as a Service) o software como servicio.
Entonces todo mundo comenzó a adorar al nuevo modelo de conexión al software (la internet). Y nadie volvió a conectarse al interior de la empresa. Siempre era necesario tener internet para poder trabajar. Así que si había un problema de conectividad, se perdía la productividad. Además las aplicaciones tuvieron que estandarizarse para poder visualizarse desde todos los browsers y se perdieron las características especiales y únicas de las aplicaciones de escritorio. Entonces los negocios que un día crecieron vertiginosamente, comenzaron a decaer por la limitante de funcionalidad. Esto sumado a que los proveedores de servicios de hosting también estaban a tope y tardaban mucho en escalarse, empeoró aún más la situación. El oscurantismo cayó de nuevo por el uso excesivo de una novedad.
El desarrollador reflexionó; y se dio cuenta que el modelo de software tradicional instalado al interior de la empresa que había desechado, tenía grandes ventajas sobre el nuevo ídolo. Y que sin embargo SaaS también conservaba características brillantes. Entonces observó que la solución no era irse por un único camino. Sino tomar el mejor camino de acuerdo a cada tipo de aplicación. Así decidió que parte de su software iba a ser software como tal y otra parte iba a ser servicio. Esto dio origen a S+S: Software más Servicios. Desarrolladores y gerentes se dieron cuenta que esto era bueno y se mantiene hasta nuestros días.
Microsoft también observó que todo esto era bueno. Y decidió hacerlo aún mejor! Así que está poniendo a disposición de sus clientes los servicios de hosting, almacenamiento y procesamiento de datos; tal cual como lo hacen los actuales proveedores; pero esta vez, ofreciendo estadios completos de servidores que hacen más fácil lograr la escalabilidad y disponibilidad que requieren algunas de las aplicaciones de misión crítica de los clientes. En síntesis, Azure cubre la parte de software como servicio; pero como se observa al mirar en detalle la tecnología, se ofrece todo un framework para poder conectarnos con las aplicaciones al interior de la empresa y otras hospedadas por los proveedores de servicios de hosting convencionales que seguirán trabajando con muchas de las aplicaciones que actualmente manejan sin problemas. Concluyendo, la nueva tecnología Azure basa su desarrollo en la interoperabilidad limpia y eficiente con las fuentes de software que han demostrado ser muy adecuadas hasta ahora: al interior de las empresas (Software – On Premises) y hosteadas por terceros (Servicios).
Una vez recorrido el camino necesario para entender la historia y el porqué de Azure, esperen en próximos blogs una inmersión especial a la plataforma y todas sus características!
Es preocupante ver como ciertos periodistas y no solo ellos sino en general la gente en medios de divulgación siempre aprovecha ciertos acontecimientos para “acomodarlos” de manera tal que parezcan una chiva sin importar las implicaciones sociales que esto pueda llegar a tener.
Es el caso a mi modo de ver de una señora periodista muy bloguera ella, quien hizo unas conclusiones en su blog a raíz de unas declaraciones de Bob Muglia, presidente de la división de Server and Tools en Microsoft.
Muglia le afirmó: “Silverlight is our development platform for Windows Phone … Silverlight also has some “sweet spots” in media and line-of-business applications”
Esta sumada a otras frases desafortunadamente extraídas del contexto hizo parecer el artículo como una clara afirmación del presidente, en la que se indicaba que básicamente Silverlight entraba en decadencia. Sin mencionar que el PDC estuvo muy concentrado en la novedad IE9+HTML5.
A partir de entonces se inició una revolución en el social media que durante todo este tiempo ha estado precedida por aquellos que de un modo u otro sienten amenazada a la plataforma Silverlight por el advenimiento de HTML5 y el fuerte apoyo demostrado abiertamente por Microsoft a esta tecnología. En esta euforia los desertores de Silverlight comenzaron a publicar por los cuatro vientos que era el fin de la plataforma y demás…
Ya en varios medios menos formales que este, yo había comentado el total desacuerdo con todas esas opiniones y enumerado ciertos motivos para estas afirmaciones.
Hoy Bob Muglia anunció oficialmente cual es nuestra postura al respecto y por ende me permito hacer más públicas y formales mis apreciaciones al respecto que como es de esperarse van en favor del futuro de Silverlight, de la mano de los intensos avances que hemos tenido en HTML5 tras la persecución de nuestra meta de ser los mejores implementadores de HTML5 en el mercado; cosa que ya estamos logrando con resultados muy positivos aún en pruebas tan estrictas y objetivas como la de W3C en la cual estamos en el primer lugar con Internet Explorer 9 en el Platform Preview número 6.
No se mencionó mucho, la verdad… pero son de esas cosas que pasan. Silverlight va por su buen camino al éxito y para este evento desafortunadamente no hubo un nuevo release. Pero señores: En qué tecnología se hizo el streaming del evento? No fue exitosa esta transmisión? Todo el mundo pudo estar siguiéndolo en tiempo real gracias a Silverlight. Con un reproductor inigualable que difícilmente se puede lograr usando mero HTML5 en el cual podíamos ecoger hasta el audio de la traducción simultánea o intercambiar entre la presentación y el speaker para ver a uno u otro más grande. Todo esto apoyado por el Smooth Streaming de IIS7 que nos permite ver videos Silverlight aún en dispositivos que no aceptan ni siquiera Flash como el IPhone (si tienes IPhone chequea: http://iis.net/iphone para comprobarlo). Si quieren crear reproductores tan avanzados como este lo pueden hacer sin ningún problema gracias a que hay todo un framework gratuito y disponible para generarlos muy fácilmente: Silverlight Media Framework 2.0
Es Silverlight. Microsoft que es quien ha avanzado más en el tema de HTML5, aún no logra toda la versatilidad que tiene Silverlight y de hecho no lo hará, porque HTML5 siempre tendrá la desventaja de tener que reducir sus funcionalidades a un mínimo común denominador, para permanecer estándar. Y esto sucederá con todos los proveedores de HTML5.
Hoy en día. Silverlight provee experiencias Premium en cuanto al manejo multimedia que difícilmente se podrán encontrar en HTML5 como estándar pasados varios años:
Otros escenarios más simples sí son soportados por ambas tecnologías sin problemas… pero que hay del rendimientos y la calidad?
Silverlight es el runtime más veloz en la web gracias a estar basado en el CLR.
Miren como se ve la misma figura trazada con HTML5 en varios browsers
En mucho menos tiempo del que HTML5 ha estado en desarrollo sin ni siquiera la primera versión, Silverlight ha sacado a flote 4 versiones y aún hoy en día sigue sin conocerse cuando se oficializará HTML5 y de acuerdo a todo lo que se necesita para lograrlo, todavía falta más que un poco.. mientras tanto Silverlight seguirá en producción activo en los sistemas operativos y browsers más populares y progresando cada vez más.
Silverlight no es solo un plugin… es todo un concepto y una plataforma para lograr interoperabilidad no solo a nivel de sistemas operativos o browser, sino de dispositivos también. Silverlight se puede hospedar en el browser o fuera de él como una aplicación de escritorio no solo en Windows sino en MAC o Linux. Soporta todos los browsers más populares y por si fuera poco, es la plataforma de desarrollo para el Windows Phone 7 y el futuro es muy prometedor para otras plataformas, como los mismos dispositivos para nuestras salas de estar, por no decir televisores que reproducirán contenido Silverlight gracias a tecnologías ya existentes como Systems-on-a-chip (SoC) que nos han permitido generar demos completamente funcionales con TVs, BluRay y otros dispositivos de consumidor final.
Así que si como desarrollador tú aprendes Silverlight, de inmediato de conviertes en un desarrollador para móviles y para electrodomésticos de consumo masivo, uniéndote a los más de 600.000 desarrolladores en el mundo que saben programar con esta tecnología que ya está en cerca del 65% (a pesar de su corto tiempo de vida) de las máquinas en el mundo: 600.000.000.
La cantidad de dispositivos diversos en el mundo está creciendo exponencialmente. Así que tener una implementación “propietaria” en todos es casi imposible. En este caso es mucho más conveniente que todos esos dispositivos estén preparados para ejecutar un estándar global como lo pretende ser HTML5. Como tarde o temprano esto va a suceder, Microsoft se ha propuesto ser el mejor implementador de este estándar para cuando esto suceda; pero recordemos que alcanzar un nivel de estandarización tan alto requiere que la tecnología se baje a un mínimo común denominador… que en el caso de HTML5 no es tan mínimo pues la idea es que soporte muchas funcionalidades de presentación gráfica avanzada, pero que comparadas con las que tiene Silverlight, son muy difíciles de igualar.
En palabras de Muglia “Silverlight nunca ha querido reemplazar a HTML en ninguna de sus versiones, pero su objetivo sí es hacer las cosas que no puede hacer HTML y otras tecnologías y hacerlo en una manera que es muy fácil e implementar para los desarrolladores. Hoy en día está instalado en 2/3 de los computadores del mundo y 600.000 desarrolladores la usan actualmente. No se equivoquen, nosotros continuaremos invirtiendo en Silverlight y habilitando a los desarrolladores para construir aplicaciones grandiosas con esta tecnología en el futuro… bob”.
Go Silverlight, go! ( hand in hand with HTML5 )
A continuación les presento un conjunto de recursos acerca de Windows Azure que aplica sobretodo a la audiencia hispana.
La primera, es una presentación de PowerPoint que da un recorrido global sobre la plataforma. El segundo recurso precisamente es un video donde hago la presentación de estos slides, de tal manera que les permitirá tener un mayor sentido de la presentación.
El tercer punto presenta todos los artículos de este blog, relacionados con Windows Azure, desde el último hasta el primero. En general es buena idea que si están comenzando con esta plataforma, comiencen a leer desde el primero, ya que progresivamente va subiendo el nivel técnico de estos artículos.
Herramientas
Para finalizar, si tienen preguntas acerca de Windows Azure, tras algún evento, este es el post en el que en los comentarios las pueden anotar, y con mucho gusto trataré de resolverlas!
Gracias por Asistir!
Esta es una de las dudas que se presenta frecuentemente con respecto a las tecnologías de Windows Azure.
Aquí va rápidamente la respuesta:
Transact-SQL es un lenguaje que contiene comandos que se utilizan para administrar instancias de SQL Server, incluyendo la creación y administración de todos los objetos de una instancia de SQL Server e insertar, recuperar, modificar y eliminar todos los datos en tablas. Las aplicaciones pueden comunicarse con una instancia de SQL Server mediante el envío de instrucciones Transact-SQL al servidor.
Microsoft SQL Azure admite un subconjunto de Transact-SQL para SQL Server.
El soporte para Transact-SQL en SQL Azure puede ser descrito en tres categorías principales:
Las siguientes características de Transact-SQL son compatibles o parcialmente soportadas por Sql Azure:
Las siguientes características de Transact-SQL no son soportadas por SQL Azure:
Para información detallada, visiten MSDN
Nosotros developers en determinado momento tenemos que lidiar con hojas de calculo. Aquí un pequeño tip que nos puede ayudar mucho. Como llenar un conjunto disperso de celdas vacías con un valor o formula dado? Por ejemplo con ceros? En este video se muestra de una manera muy rápida. Enjoy!
Cada mes acostumbro a cambiar el header de mi Blog usando una fotografía tomada por mí.
Para este mes quise poner una foto del Palacio de Justicia ubicado en la Plaza de Bolívar en Bogotá.
En esta foto fue difícil ubicar el título de mi blog, dado los colores de fondo. Así que la alternativa fue ponerle un color de fondo sólido al título.
Sin embargo, un color sólido arruina la fotografía de fondo, pues no la deja ver para nada. Allí fue donde me nació la duda de cómo hacer un div transparente, para así poder modificar el estilo del blog.
Investigando un poco, encontré que esto se hace distinto para distintas versiones de navegador. En especial, para Firefox se usa:
opacity:0.6;
Luego vi que esto no funcionaba en IE, pues me seguían apareciendo los fondos sólidos. así que investigando un poco, encontré que esto se hace distinto para IE:
filter:alpha(opacity=60);
De esta manera, un estilo escrito así:
#title { opacity:0.6; filter:alpha(opacity=60); }
Produce este resultado independientemente del navegador:
A veces queremos saber de algo, sin tener que dedicarla el 100% de atención o tiempo… tal vez hacerlo mientras vamos en el transporte público o conduciendo… o sencillamente no tenemos tiempo para leer un extenso artículo y preferimos ver un video o tal vez oír al respecto.
Este video – podcast está basado en este artículo de Windows Azure el cual tiene una presentación que hago siempre a mis entrenados. Se brinda una introducción avanzada a la plataforma para conceptualizarla y poder comenzar a trabajar de lleno con ella.
Enjoy!
Abierta la convocatoria únicamente para personas que deseen ser MCS en Infraestructura. En este caso, enviar sus correos a itprocol@microsoft.com!!!
Microsoft Community Specialist (MCS) es un nuevo programa creado por el Developer Evangelist de Microsoft Colombia (por ahora solo aplica en Colombia) para entusiastas de nuestras tecnologías que aparte de el gran provecho que toman de ellas, están interesados en compartir ese conocimiento con la comunidad y además acceder a un conjunto de beneficios adicionales que desde Microsoft les reconocemos por su invaluable labor. Es un programa basado en puntos. Estos puntos se ganan por actividades ejecutadas y representan ascensos en una distribución de tres niveles y también premios y regalos que incluyen Hardware Microsoft (XBOX, Kinect, Wndows Phone 7, Headsets, Mouse Presenter, etc.), participación VIP en nuestros eventos y cursos, vouchers de certificación y mucha visibilidad en la industria y al interior de Microsoft.
La primera vez que una persona ingresa a nuestro programa, recibe como mínimo estos beneficios por pertenecer al mismo. Si una persona al ingresar por primera vez a nuestro programa entra a un nivel más avanzado, recibe estos beneficios más los adicionales que se describen en cada nivel de MCS.
Este kit solo se da la primera vez que un usuario está en un nivel.
XBOX, cata de vinos, pizza, etc.
7. Visibilidad ante partners y clientes de Microsoft Este es uno de los beneficios más importantes pues Microsoft mismo recomienda a sus especialistas ante clientes y otros partners que acuden a nosotros en búsqueda de profesionales que les ayuden a resolver sus necesidades en tecnología.
El único compromiso requerido, es mantener mínimo un balance de 500 puntos MCS al trimestre. Excepto cuando el especialista es MVP. Los MVPs automáticamente se ubican en el nivel Gold y permanecen en este siempre y cuando mantengan su calidad de MVP. Si la pierden, deberán demostrar un balance de 500pts. Para mantenerse en el nivel. Cuando no se demuestre este balance de puntos, se descenderá un nivel en el programa. Y si un especialista en nivel member no lo demuestra, tendrá que aplicar de nuevo al programa para ser aceptado.
1. Por invitación de un Evangelist de Microsoft 2. Solicitando ser incluido o por invitación de un MCS
a. Se envía un correo a devcol@microsoft.com indicando el deseo de participar y la o las tecnologías sobre las cuales se posee conocimiento y se desea hacerse especialista b. Se entra a un período de prueba despues del cual se envía un reporte de actividades al Evangelist. Este reporte es evaluado para determinar si es aceptada la persona como MCS. Se puede requerir de una reunión adicional entre el Evangelist y el postulado para la aceptación.Además se hace una entrevista con el Evangelist para determinar el nivel al que se ingresaría, pues de acuerdo al nivel de especialización, se podría entrar de inmediato al nivel Silver.
a. Se envía un correo a devcol@microsoft.com indicando el deseo de participar y la o las tecnologías sobre las cuales se posee conocimiento y se desea hacerse especialista
b. Se entra a un período de prueba despues del cual se envía un reporte de actividades al Evangelist. Este reporte es evaluado para determinar si es aceptada la persona como MCS. Se puede requerir de una reunión adicional entre el Evangelist y el postulado para la aceptación.Además se hace una entrevista con el Evangelist para determinar el nivel al que se ingresaría, pues de acuerdo al nivel de especialización, se podría entrar de inmediato al nivel Silver.
Un MCS puede serlo solo teniendo buenas capacidades de comunicación escrita, a través de blog posts o foros. Es un valor agregado importante claro está, si es una persona a quien le gusta mucho grabar videos en los que oralmente explica un tema y más aún si se siente cómodo y expresa muy bien sus ideas en eventos presenciales.
El Nivel de Conocimiento en una tecnología dada, en Microsoft se mide desde 0 donde no se sabe nada a 400 donde se es experto. El nivel 100 indica que una persona tiene un conocimiento básico de la herramienta/tecnología. 200 indica que la persona puede trabajar con esa herramienta/tecnología. 300 indica que la persona domina esa herramienta/tecnología y el 400 como se especificó indica que la persona es experta.
El programa MCS tiene tres niveles de acuerdo al grado de especialidad y colaboración del especialista.
Cada nivel tiene un conjunto de requisitos para recibir en él a algún integrante. De igual manera ofrece un regalo de bienvenida y beneficios distintos. Así mismo, el programa de niveles maneja un esquema de puntos para permitir la graduación de nuestros especialistas así como el reconocimiento a sus actividades.
Este es el nivel de entrada al programa MCS. Son candidatos estándar para pertenecer a él Microsoft Student Partners (MSPs). Desarrolladores Junior y en general entusiastas que estén comenzando con nuestras tecnologías. Requiere Un conocimiento Nivel 100 en una o más de nuestras tecnologías/herramientas. A parte de todas las colaboraciones libres hechas en foros, blogs, webcasts, etc., el especialista puede ganar puntos y visibilidad profesional ya que Microsoft lo recomendaría para eventos académicos, o aquellos en los que el nivel de conocimiento no deba ser muy profundo. Esto garantiza que podemos ir ofreciendo oportunidades de experiencia para que el especialista pueda ir ascendiendo en el programa.
El mismo que se describe en los beneficios generales.
Aquí tenemos a especialistas que ya llevan un tiempo trabajando con nosotros, o que tienen un conocimiento entre 200 y 300 de sus tecnologías elegidas. A parte de todas las colaboraciones libres hechas en foros, blogs, webcasts, etc., el especialista puede ganar puntos y visibilidad profesional ya que Microsoft lo recomendaría para eventos académicos, visitas a clientes, ejecución de proyectos y demás que requieran un nivel de conocimiento 200-300. Esto garantiza que podemos ir ofreciendo oportunidades de experiencia para que el especialista pueda luego ascender al tope de nuestro programa.
El mismo que se describe en los beneficios generales y adicionalmente: Un elemento de Hardware de Microsoft (cámara, headset, mouse) + Suscripción a MSDN por un año.
Aquí tenemos al top de nuestros especialistas que ya llevan un tiempo trabajando con nosotros, o que tienen un conocimiento entre 300 y 400 de sus tecnologías elegidas o que tienen el distintivo de MVP. A parte de todas las colaboraciones libres hechas en foros, blogs, webcasts, etc., el especialista puede ganar puntos y visibilidad profesional ya que Microsoft lo recomendaría para eventos académicos, visitas a clientes, ejecución de proyectos y demás que requieran un nivel de conocimiento 300-400. Esto garantiza que podemos ir ofreciendo oportunidades de experiencia para que el especialista si no lo es, se pueda convertir en un MVP o llegar a tal punto que pueda trabajar como consultor independiente.
El mismo que se describe en los beneficios generales y adicionalmente: Un elemento de Hardware de Microsoft (cámara, headset, mouse) + Suscripción a MSDN por un año + Nominación MVP
Si un MCS hace al menos 3000 puntos en un trimestre, se convierte automáticamente en candidato de ascenso. El comité de DPE en Microsoft estudiará su caso y aprobará su ascenso. De esta manera para ascender de Member a Silver se requiere tener mínimo 3000 puntos, de Silver a Gold se requieren mínimo 6000 puntos. Los puntos siempre se acumulan, de manera que a mayo experiencia y colaboración, más puntos.
Cada trimestre se ejecutan los MCS Awards Q Edition; que premian a los contribuyentes más activos durante dicho trimestre. El especialista que haya acumulado más puntos en el trimestre se lleva un voucher de certificación y Microsoft Hardware. El segundo puesto, se lleva Microsoft Hardware.
Además, al finalizar el año, se lleva a cabo el MCS Award Y Edition que premia al entusiasta con más puntos acumulados durante todo el año.
Así que desde ahora están bienvenidos a postularse o recomendarle a alguien que piensen estaría agradado de estar en este rol. En poco tiempo comenzaremos los trabajos en el portal de MCS Colombia para tener plenamente identificados a todos nuestros miembros y establecer todo el Web 2.0 que se merecen.
· En este post quiero recopilar todas las preguntas que me hacen por medios escritos acerca del tema y su respectiva respuesta:
1. La arquitectura de la aplicación a migrar se fundamenta en la exposición de componentes (COM+)a través de Windows Communication Foundation, mediante una serie de servicios (SVC) publicados en un sitio de IIS. El modelo propuesto por Azure soporta la publicación de componentes COM+? Como se realiza el registro de los componentes en la plataforma? (Es decir, Windows Azure provee un administrador de componentes?)
Esta publicación sí es posible a través de SartUpTasks en las que al iniciarse un role, se accede cómo administrador y se ejecutan los batch de instalación de estos COM. Luego se pasa a usuario normal el role queda funcionando de manera segura. Se realiza a través de operaciones en batch y StarUptasks. Aquí hay instrucciones: http://msdn.microsoft.com/en-us/wazplatformtrainingcourse_advancedwebandworkerroles_topic3
2. Que puedo usar para crear aplicaciones para Azure, WebForms?, WPF?, SilverLight?, se puede usar MVC?
Todo lo que mencionaste y más, se puede usar con Azure. También puedes usar WinForms, Java, PHP, Ruby, etc.
3. Hola WarNov, estamos a punto de iniciar un software y no sabemos si usar AZURE, nos asalta la duda de si podemos usar sockets en AZURE o si existe alguna manera de implementarlos.
En #Azure claro que se pueden usar sockets. Desde la versión 1.2 de la plataforma es posible abrir puertos a conexiones remotas
4. Sabemos que no se factura por el ancho de banda de entrada a azure, solo el de salida, usando VMRole cuando me conecto por remote desktop me factura algo? de ser asi hay alguna forma de predecir ese costo?
Se factura el consumo de salida en la conexión RDP y la única forma de averiguarlo es estar mirando la facturación actual en el portal y extrapolar.
5. En cuanto a VMRole, yo tengo q configurar la maquina en mi Hyper-V local, esa licencia sw WS2008R2 que le instalo tiene q correr por mi cuenta?
No.. la licencia que le instalas no es problema
6. cual seria la mejor forma, de reemplazar mis variables de sesión y cache de mi aplicación WEB al pasarla a AZURE, tamos en ese proceso, y es una duda que nos asalta, de antemano gracias
Una buena forma es usando registros en las tablas de Azure. Es rápido y barato. La otra es usando APPFABRIC que tiene módulos de cache y sesión.
7. WarNov, buenas tardes, de casualidad tienes links de recursos sobre el manejo de variables de sesión y cache para azure?, tamos migrando nuestra aplicacion de asp.net a azure y este es uno de nuestros primeros problemas
Claro. Te recomiendo hacer el capítulo de APPFABRIC que viene en el Windows Azure Training Kit. Allí enseñan como usar este módulo para el manejo de sesiones y cache.
8. Quiero montar un ESB en .net, Windows Azure que puede hacer por mi?. Azure podria ser en si un ESB ??. Puedo hacer que Azure sea privado, es decir, que solo corra en mi datacenter ???
Azure provee plataforma tecnológica para desplegar aplicaciones orientadas a cloud computing. Azure por sí mismo no es un ESB. Se puede construir un ESB y orientarlo a Cloud Computing y subirlo a Azure. Azure privado aún no sale al público pero empresas como eBay lo están probando. Esto se llama Azure Appliance y permitirá comprar un contenedor con Azure para poner el el datacenter local. También se espera a futuro que Azure tenga su propio módulo de orquestación de servicios.
9. WarNov tengo un proyecto con un reporting y funciona localmente pero cuando lo subo a la nube me sale el siguienet error: An error occurred during local report processing.Could not find file 'E:\approot\_WASR_\0\Report2.rdlc'. gracias por tu ayuda
En Windows Azure no hay un sistema de archivos como en una máquina local. Debes asegurarte de guardar el reporte en un blob y luego referenciarlo con la dirección del blob.
10. Será cierto eso que dicen que para migrar una base de datos de Sql Server 2008? a Windows Azure se realiza con MiWiza? y funcionara para todos sin problema?
Nunca he oido hablar de esa aplicación de Migración. En cambio conozco por ejemplo SQL Azure Migration Wizard v3.6 que es de código libre y está en codeplex: http://sqlazuremw.codeplex.com/ Aunque en algunas ocasiones hace un trabajo impecable, no siempre es suficiente. Algunas características avanzadas de la DB no estarán disponibles o habrán de sermodificadas a mano. Pero En general sirve muy bien y es una gran herramienta. Para bases de datos sencillas la migración casi siempre es 100%
11. Hola WarNov. No quiero usar mas Sql Azure, ¿puedo sacar una copia de todos mis datos para luego restaurarlos en una sql local?. Es fácil?
Si es muy fácil... con el SQL Server Management Studio te conectas y haces un backup por ejemplo.. o bajas los datos con Integration Services, etc. Las cadenas de conexión de SQL Azure son las mismas de cualquier servidor SQL Server.
12. WarNov en Azure para instalar un App con envío de correo masivo tiene que ser a través de una cuenta determinada o puedo usar un servidor SMTP cualquiera, adicional a esto el firewall de Azure me permite realizar esta tarea o existe alguna limitación?
Hola. Azure permite usar cualquier servidor SMTP y no impone ninguna limitación de conectividad entre la aplicación y el servidor SMTP.
13. Hola WarNov, la pregunta es como puedo configurar Azure para que tome una instancia de SQL Server ya instalada y no busque por defecto a .\SQLExpress?
Hay un tool llamado DSInit; este viene con el SDK de Windows Azure. Así ke si abres el command prompt de Windows Azure, allí la encuentras y pones DSInit /sqlInstance:[Nombre de la Instancia] por ejemplo DSInit /sqlInstance:. te levantaría la instancia por defecto (MSSQL)
14. Hola; quería preguntarle como puedo montar una aplicación Azure en un dominio que haya comprado
La idea no es que montes la app en un dominio comprado, sino que montes la aplicación como siempre y luego hagas que el dominio que compraste apunte al dominio de Windows Azure. Las instrucciones específicas las encuentras aquí: http://blog.smarx.com/posts/custom-domain-names-in-windows-azure
15. Es posible desarrollar una aplicación para azure y para una intranet... donde simplemente el cliente decida en donde quiere hospedarla??
Si es una aplicación creada con esto en mente, claro que sí es posible. Solo sería necesario establecer un par de variables de configuración y listo
16. WarNov en Azure puedo instalar aplicaciones como VisualSorucesafe para el manejo de versiones, un bugtracker para registro de bugs y tener un ambiente de pruebas para las aplicaciones, pues nos queremos ahorrar la compra de cualquier clase de servidor ?
Lo puedes poner en un VMRole, pero debes tener en cuenta la licencia del producto que estás instalando. Lo más seguro es que aún no diga nada acerca de trabajar el servidor en la nube y tal vez te genere problemas legales. Por otro lado, Microsoft en poco tiempo lanzará su servicio de TFS como servicio. Una excelente opción.
17. Actualmente tengo una aplicación de consola que lee docs de Excel para cargar la información a la base de datos y eso lo hace todos los dias a media noche, ¿de que forma puedo ejecutar una aplicación de consola en Windows Azure cada cierto tiempo teniendo
Hay que subir la aplicación de consola a un worker role que la ejecute. En ese worker role podemos poner dentro del loop infinito un chequeo e la hora e acuerdo a un archivo de agenda tal vez, que en determinadas horas dispare la aplicación de Consola.
18. Hola WarNov nosotros utilizamos aplicaciones en asp .net framework 3/3.5 hosteadas en sevidores externos, para migrar estas aplicaciones a Winazure debemos modificar la arquitectura de nuestras aplicaciones? que tan complejo es el cambio en codificacion
Si la aplicaicón ya está diseñada en capas, el cambio es muy sencillo. Lo único necesario es añadir una nueva capa entre la capa de servicios o negocio y la capa de presentación. Esta capa manejará la comunicación entre los Web Roles y Worker Roles. En general, las capas de negocio permanecen intactas. Si tenemos un proyecto web con todas las capas en el mismo, este se puede pasar tal cual a un Web Role y no hay problema. Solo que se dejarían de aprovechar algunas características especiales de Azure, pero igual otras como la escalabilidad y automatzación quedarían disponibles.
19. Si no puedo realizar la migración de la bd MySQL a SQL Server, ¿como puedo acceder a la bd MySQL desde una app Web que se encuentra en Windows Azure?. ¿Haciendo uso de Azure AppFabric para conectarme a la bd o por algun puerto o por una app Win Cliente?
La conexión desde Azure a My SQL es idéntica a cualquier aplicación ASP.NET a My SQL. Solo basta poner la cadena de conexión y listo. No es necesario APP Fabric
20. Se conoce algo respecto al tema de costos que tendra VMRole cuando deje de ser beta?
Será el mismo de cualquier otro Role. No habrá que pagar licencias del server tampoco, porque al igual viene incluida. Hay que tener cuidado con el software adicional que se instale, pues se podrían estar infringiendo términos de licencia de dicho software al ponerlo en la nube.
21. Hay algún tutorial para implementar mi dominio en la aplicación que estoy montando en azure?
Claro que sí.. Con este post yo aprendí a hacerlo: http://blog.smarx.com/posts/custom-domain-names-in-windows-azure
22. WarNov, tengo una cuenta en sql azure y me muestra una db llamada master que asumo Aue es la misma cuando uno trabaja localmente. el tamaño de esa base de datos es incluido como tamaño de la cuenta contratada.
No. Ese tamaño no se cobra. Tampoco se cobran los logs.
23. Con una cuenta trial de windowsazurepass puedo trabajar VMRole son problema? o tiene alguna limitacion respecto a este tema?
El VM Role aún está en Beta. Para poder usarlo hay que solicitar el servicio. Desde CUALQUIER cuenta de Windows Azure se puede solicitar este servicio, pero se entra a una cola de espera que puede ser de un par de semanas.
24. Las transacciones entre windows azure y sql azure, no se cobra la transaccion del windows pero si el in/out del sql? Gracias
Es correcto. El único cobro relacionado a SQL Azure es el del ancho de banda empleado en transacciones ejecutadas por fuera de la nube y el del tamaño de la base de datos como tal.
25. hola estoy tratando de probar la plataforma Windows Azure, pero tengo inconveniente con lo de la Tarjeta de Crédito, no se puede de otro tipo diferente a los posibles o una alternativa a que no haya que ingresarla??. Agradezco tu ayuda.
Claro que sí... puedes pedir una cuenta en windowsazurepass.com
26. Es posible desarrollar software de Inteligencia Artificial con C# 4.0 y Windows Azure?
En Azure puede desarrollarse todo lo que se dedarrolla en .NET. Azure es .NET
27. Instalé el sdk de azure, al crear el proyecto me sale que es de FW 3.5... Azure funciona sobre 4.0 o toca sobre 3.5?
Azure funciona sobre cualquiera de esas dos versiones del framework.
28. Hola WarNov, estoy trabajando en un proyecto en el cual estoy utilizando Silverlight (EF4,RIA sevices,MEF)y quiero probarlo en Windows Azure, pero al querer subir me marca un error de Abortado, ya asocie el web rol, o se necesita una configuración?
Muy seguramente tienes un error en el despliegue; por ejemplo te falta subir alguna DLL que se requiera para el funcionamiento de la aplicación o algo así.
29. Como puedo saber cuanto consume un usuario en computo de Windows Azure en una hora?
Los recursos de las máquinas de Windows Azure son todos dedicados al usuario. Por ende, no importa cuánto se gaste en cómputo, así que no hay forma de medir cuanto se gasta un solo usuario. La idea es que Azure cobra solo el tiempo no el consumo.
30. Hola, es muy interesante este tema Windows Azure, pero si me puedes colaborar sacándome de una duda. Yo tengo una aplicación de escritorio sobre la plataforma .NET. Podría aprovechar solamente el SQL Azure de la nube?
Puedes tener una app fuera de la nube en corriendo sobre cualquier plataforma y conectarla a SQL Azure. No hay problema. Azure te da el poder de elegir.
31. Los logs de transacciones afectan el costo de SQL Azure?
No. Lo único que afecta el costo de SQL Azure es el tamaño de la base de datos solicitado, así como el ancho de banda usado en su operación.
32. Pueden los clientes acceder a los logs de SQL Azure?
No. No es posible para un ente externo a la nube acceder a estos logs.
33. Hay alguna restricción con respecto al tamaño de los log y alguna operación automática para reducir sus tamaños?
La administración de logs es completamente automatizada. La base de datos corre siempre en modo de recuperación completa (“Full Recovery Mode”) y los logs son respaldados y truncados regularmente. La única restricción acerca de los logs, es que una transacción sencilla contra la base de datos no puede exceder 1GB de datos en el log.
34. Solicito su colaboración para validar de que forma se puede evitar la vulnerabilidad de Inyección de SQL en SQL Azure, si aparte de las buenas practicas en programación existen herramientas que me ayuden a controlar esto desde la plataforma
Basta con las mismas prácticas convencionales en ASP.NET para evitar el SQL Injection. Por ende Windows Azure no tiene herramientas ni políticas especiales para evitar esta práctica. Si no conoce estas buenas prácticas remítase a este artículo.
35. Actualmente se realiza el cargue de archivos desde una aplicación Web y se almacena en los servidores locales y existe un servicio Windows que realiza las validaciones de los archivos cargados, la duda es: ¿Que tan complejo es migrar el servicio Windows a un proyecto de tipo Worker Role para subirlo a la plataforma Azure y que implicaciones tiene esto?
En Windows Azure actualmente no se pueden instalar servicios porque requieren permisos de administración. A futuro estará disponible el VM Role con permisos de administración pero no será PaaS sino IaaS lo que conlleva necesidades de administración.
La labor de un Windows Service claramente se puede llevar a cabo con un Worker Role que corre infinitamente leyendo mensajes de la cola por ejemplo. Sabiendo cómo programar un worker role no habrían dificultades. Esto lo puede aprender en el laboratorio: Introduction to Windows Azure que encuentra en el training kit, referenciado en http://bit.ly/wazure.
36. Existe alguna forma o herramienta automatizada, que determine en tiempo real cuanto ha sido el consumo que han tenido mis servicios en Windows Azure en una fecha determinada, es decir como una especie de reporte que muestre el consumo total en términos de (Transacciones, almacenamiento, transferencias de datos de entrada y salida, etc.) Y así saber si me he excedido en el consumo mucho antes de que se genere la facturación, para poder controlar este consumo.?
Hola Julián; por ahora no hay dentro de Azure una utilidad por defecto con esta información. Sin embargo tenemos:
1. El API de diagnostico; sobre el cual podemos construir aplicaciones que nos indiquen el uso de Azure. Ya hay varias implementaciones de terceros...
2. Para las suscripciones por paquetes, hay correos que nos indican cuando vamos en 75%, 100% y 125% de nuestro paquete. Observa más detalles en: blogs.msdn.com/.../notificaciones-de-consumo-para-usuarios-de-windows-azure.aspx
3. En el portal de Microsoft Online Services está disponible la factura para poder ver el consumo diario.
37. Actualmente estoy trabajando en una migración de una aplicación Web y quisiéramos realizar dicha migración a Windows Azure, pero la base de datos es MySQL. ¿se puede subir la base de datos a Azure o de que forma puedo hacer esta labor?
Una base de datos es fácilmente Migrable a SQL Azure. Primero es necesario pasarla a SQL Server. Luego de allí generar los scripts, y luego usar una herramienta que nos ayuda a optimizar esos scripts a SQL Azure. La herramienta es esta: http://sqlazuremw.codeplex.com/ Luego es fácil subir los datos usando Integration Services o Management Studio.
También se puede decidir ejecutar MySQL en Azure. (Ver la siguiente pregunta)
38. Qué opciones hay para ejecutar MySQL en Windows Azure?
Como sabemos, MySql se puede instalar como servicio, o como un ejecutable. En el primer caso, se requieren permisos de administrador, que Windows Azure (WAZ) por ahora no nos brinda. Por ende solo podemos recurrir a la segunda opción. En cuyo caso lo que se hace es subir el ejecutable con sus a un Worker Role que lo inicializa y lo deja ejecutando infinitamente. Además faltaría escribir código para hacer un pipeline de todos los llamados. Esto afortunadamente está ya pre-escrito en algo que llamamos MySQL Accelerator. Los Accelerators de WAZ son proyecto pre escritos que tienen todo para correr servicios o aplicaciones especiales en WAZ; tales como MySQL, Tomcat o PHP.
El Accelerator de MySQL se puede bajar de aquí
Sin embargo personalmente recomiendo que solo se use este accelerator en casos extremos en los que sea imposible migrar a SqlServer. Por qué? Pues como les mencioné se requiere un Worker ejecutándose indefinidamente para tener el MySQL. Ejecutar el worker rol más pequeño nos vale US$0.12 la hora. Esto como mínimo nos vale US$0.12x24x30=$86.4 GB al mes. Mientras que una giga del ya muy confiable SQL Azure al mes nos vale tan solo US$10. Entonces es mejor hacer buenos cálculos antes de decidir quedarse con MySQL.
39. Que limitantes tiene la instalación de MySQL en Windows Azure a través del Accelerator?, ¿sobre esta se puede trabajar una base de datos de producción?
No conozco la estructura interna de MySql. Pero diría que operativamente son iguales, de acuerdo a lo que he trabajado en MySQL. La diferencia es que el ejecutable hay que iniciarlo manualmente con código. El servicio siempre está andando con el server. El Accelerator sin embargo ya trae el código que ejecuta la inicialización del .exe de MySQL
40. Si no puedo realizar la migración de la bd MySQL a SQL Server, ¿como puedo acceder a la bd MySQL desde una app Web que se encuentra en Windows Azure?. ¿Haciendo uso de Azure AppFabric para conectarme a la bd o por algún puerto o por una app Win Cliente?
La conexión desde Azure a My SQL es idéntica a cualquier aplicación ASP.NET a My SQL. Solo basta poner la cadena de conexión y listo. No es necesario APP Fabric.
41. ¿Como se pueden montar aplicaciones de consola a Windows Azure?
La inicialización de un programa de consola se ejecuta tal como la de MySQL o PHP en sus Accelerators. Pueden copiarse el código. Para subir la aplicación, solo basta agregar el ejecutable a un proyecto que esté asociado a un Worker Role y este subirá en el root de esa aplicación luego del despliegue. Estaré posteando posteriormente los detalles de esta operación.
42. ¿Hay alguna forma de realizar la programación de las aplicaciones de consola como tareas programadas?
Se puede crear un worker rol infinito que en determinados lapsos de tiempo lance la consola. Esos tiempos pueden ir por ejemplo en un archivo de configuración o una tabla. También el worker podría más bien responder a mensajes puestos en las colas de Azure y reaccionar ante dichos mensajes para ejecutar el aplicativo.
43. ¿Una de esas aplicaciones de consola lee archivos en Excel 2003/2007 por medio de las librerías de Interop de Excel, esta funcionalidad se maneja de la misma forma en la plataforma Windows Azure?
No. Iterop como su nombre lo indica interopera con Office. Office no está instalado en la nube de Azure. Así que no funcionará. Si necesitas interactuar con documentos de Excel o en general de Office, te aconsejo usar archivos .xlsx (o los equivalentes para los otros aplicativos) que soportan el estándar Open XML y que por tanto pueden ser accedidos usando el SDK.
44. WarNov en Azure para instalar un App con envío de correo masivo tiene que ser a través de una cuenta determinada o puedo usar un servidor SMTP cualquiera, adicional a esto el firewall de Azure me permite realizar esta tarea o existe alguna limitación?
45. WarNov en Azure puedo instalar aplicaciones como VisualSorucesafe para el manejo de versiones, un bugtracker para registro de bugs y tener un ambiente de pruebas para las aplicaciones, pues nos queremos ahorrar la compra de cualquier clase de servidor.
No. Esas opciones hoy no están disponibles en Azure; tal vez a futuro. Hoy Azure actúa como PaaS (Plataforma como Servicio) Así que allí solo puedes poner a correr aplicaciones como tal (bueno; y uno que otro servidor sencillo como un TomCat). Pero otros tipos de servidores como Team System o un Oracle por ejemplo, solo podrían instalarse en un esquema de IaaS, con todas las desventajas que ello conlleva; por ejemplo encargarse de las actualizaciones, administración, patchs y todo eso que es lo que evita el PaaS y puntualmente Azure.
46. Hola WarNov nosotros utilizamos aplicaciones en asp .net framework 3/3.5 hosteadas en servidores externos, para migrar estas aplicaciones a Winazure debemos modificar la arquitectura de nuestras aplicaciones? que tan complejo es el cambio en codificación
Si la aplicación ya está diseñada en capas, el cambio es muy sencillo. Lo único necesario es añadir una nueva capa entre la capa de servicios o negocio y la capa de presentación. Esta capa manejará la comunicación entre los Web Roles y Worker Roles. En general, las capas de negocio permanecen intactas. Si tenemos un proyecto web con todas las capas en el mismo, este se puede pasar tal cual a un Web Role y no hay problema. Solo que se dejarían de aprovechar algunas características especiales de Azure, pero igual otras como la escalabilidad y automatización quedarían disponibles.
Update: Hoy 6 de Octubre salió al aire el Beta 2 de WebMatrix. Se espera la versión final para fin de año. En conmemoración les comparto un libro que se está editando y nos enseña la sintaxis Razor, y además la presentación que uso cuando muestro este producto.
Visual Studio .NET es la herramienta mas poderosa para desarrollar virtualmente cualquier tipo de aplicaciones para computadores. Pero cuando somos novatos en la programación, entrar a un Visual Studio a desarrollar se siente como meterse a la cabina de un Airbus A380 a pilotearlo…
Para aprender a pilotear, sería mejor en un Cessna que tiene solo los controles básicos y nos permite ir aprendiendo sin abrumarnos con tantos controles.
Hoy en día Microsoft tiene para nosotros un conjunto de herramientas GRATUITAS que nos permiten entrar al mundo de desarrollo Web de una manera bastante sencilla y rápida.
WebMatrix
Contiene todo lo necesario para desarrollar aplicaciones web:
•Free
•Liviano
•IIS Developer Express como Servidor Web
•ASP.NET como framework tecnológico ahora presentando a RAZOR: una sintaxis para programar de una manera más sencila
•SQL Server® Compact como motor de base de datos
•IDE para edición de páginas web.
A continuación para mostrar la agilidad de la herramienta, les muestro un video en el cual construyo una aplicación que accede a Twitter y nos muestra el feed de una persona en particular. Más adelante vendrán más posts mostrando más características de WebMatrix.
Update: Hoy 6 de Octubre salió al aire el Beta 2 de WebMatrix. Se espera la versión final para fin de año. En conmemoración les comparto un libro que se está editando y nos enseña la sintaxis Razor, y además la presentación que uso cuando muestro este producto:
Para aprender más de WebMatrix no se pierda nuestro Web Camp Colombia 2010.
REST se fundamenta en seis principios básicos: • Cliente y Servidor plenamente identificados y separados • No hay almacenamiento de estado en las transiciones (Stateless) • Respuestas “cacheables” (Para mejorar las interacciones y el performance) • Capas: Pueden haber varias capas de servidores intermedios • Código por demanda: La funcionalidad de un cliente se puede extender con código trasmitido por el servidor (por ejemplo con JavaScript). Este es el único requerimiento opcional. • Interfaz uniforme: La misma que se discutió anteriormente.
Los principios anteriormente mencionados, están diseñados para lograr los siguientes objetivos: • Escalabilidad de componentes • Generalidad de Interfaces • Distribución Independiente de componentes • Existencia de componentes intermediaros que reducen latencia, aumentan la seguridad y encapsulan sistemas de legado.
Los recursos se definen como fuentes de información específica y son muy importantes en REST. Un cliente accede a los recursos que el servidor dispone. Imagine una aplicación empresarial con información de recursos humanos. En este caso, la lista de empleados es un recurso del servidor y para acceder a ellos, se requiere un identificador único (por ejemplo una URI), que es usado por el cliente para referenciarlo y una interfaz de comunicación estandarizada (por ejemplo HTTP). Obviamente, aparte de tener claro el objeto de una acción, se debe tener clara la acción a ejecutar sobre ese objeto. Así pues, una aplicación interactúa con los recursos sabiendo su identificador único y la acción a ejecutar sobre este. Por ejemplo: Recurso: Empleado con Id:3520. Acción: Borrar. Los recursos generalmente son transmitidos entre el servidor y el cliente usando formatos como HTML, XML o JSON. No obstante, los recursos también pueden ser imágenes, texto plano o cualquier otro formato.
No son más que servicios WEB implementados usando HTTP y los principios de REST que comprenden una colección de recursos de acuerdo a los siguientes aspectos:
Entonces por ejemplo si se quisiera eliminar el empleado con ID 3520 se haría un request con DELETE a la siguiente URL desde el cliente:/span> http://example.com/miservicio/empleados/3520
REST, que es una arquitectura y no un protocolo como SOAP, se basa en acciones sobre recursos, para permitir la interacción de un cliente con un servidor. La implementación sobre HTTP es la más común y ha permitido la creación de otras tecnologías. Por ejemplo Microsoft, que se ha basado en este tipo de implementación REST para generar el estándar OData (Open Data) sobre el cual se construyó WCF Data Services (antes conocido como ADO.NET Data Services), y que permite simplificar el acceso interoperable a las capas de datos en aplicaciones n-tier.
Nuevamente, eso no implica que todo lo desplegaremos en Azure. La idea no es tener únicamente SaaS sino también S+S. Así que por ejemplo las aplicaciones que hoy en día corren dentro de una organización (on-premises) podrían almacenar datos en la nube o usar otros servicios de la misma. Aplicaciones que corren en el escritorio o teléfonos móviles pueden usar los servicios de la nube para hacer sincronización de datos.
Toda esta maravilla requiere de aplicaciones que la exploten! Y para lograr dichas aplicaciones, necesitamos de una plataforma para construirlas. Esta plataforma es provista por Windows Azure y está compuesta por un grupo de tecnologías que nos proveen servicios a nosotros como desarrolladores.
Componentes de Azure
En Windows Azure básicamente encontramos tres componentes principales:
Windows Azure
Ambiente basado en Windows (en esta edición es Server 2008), para ejecutar aplicaciones y almacenar datos en los centros de datos de Microsoft.
SQL Azure
Provee servicios de datos basados en SQL Server
.NET Services
Infraestructura distribuida para usar con aplicaciones locales y hospedadas en la nube.
Estos componentes los podemos apreciar en la siguiente ilustración. En este post exploraremos en detalle el componente Windows Azure (Cómputo y Storage) y posteriormente observaremos Sql Azure y .NET Services.
Comencemos entonces con Windows Azure:
Como podemos observar en la gráfica, este componente se subdivide en tres elementos: la estructuta principal o Fabric, el componente de cómputo y el componente de almacenamiento (storage). Empecemos viendo en detalle el componente de cómputo.
Servicios de Cómputo
Windows Azure corre sobre una gran cantidad de máquinas, todas ubicadas en los datacenter de Microsoft y accesibles vía internet. Todas estas máquinas conforman un todo que le da el poder y escalabilidad necesarios. Aunque al principio solo se iban a poder ejecutar aplicaciones .NET hoy en día, esta plataforma permite ejecutar aplicaciones nativas de Windows (esto lógicamente comprende todos los lenguajes de programación tradicionales que hoy en día sirvan para correr aplicaciones sobre Windows Server 2008). En Windows Azure, una aplicación típicamente tiene múltiples instancias y cada una corre una copia de todo o una parte de la aplicación. Cada instancia corre en su propia máquina virtual. Estas VMs están sobre Windows Server 2008 x64. Las aplicaciones se instancian en uno de dos roles, según escoja el desarrollador. Web Role, o Worker Role:
El Web Role corre sobre IIS7 y acepta los llamados HTTP o HTTPS (tecnologías: ASP.NET, WCF, todas las que trabajen con IIS). El balanceo de carga es automático, gracias al Load Balancer incluido en la plataforma. El Worker Role no puede aceptar peticiones directas desde el mundo exterior. Típicamente estos roles adquieren sus entradas a través de colas en el Windows Azure storage. Estos mensajes sí pueden provenir de una aplicación exterior o de un Web Role. Son procesados y la respuesta se puede poner en una cola, o enviarse directamente al mundo exterior (esto último sí es permitido). Independientemente del tipo de rol en una VM, siempre existe un Agente de Azure que permite la interacción del rol con el resto de la aplicación y la plataforma. Aunque es algo que puede cambiar en el futuro, en la actualidad Windows Azure mantiene una relación 1:1 entre VMs y cores físicos de procesador. Esto obviamente garantiza el performance de la aplicación que sea predictible (cada instancia tiene su propio core dedicado; esto también significa que no hay un límite arbitrario en el tiempo de proceso concedido a una instancia en especial). Sin embargo si se desea aumentar el performance, el dueño de la aplicación podría decidir crear más instancias de la misma, solo modificando el archivo de configuración. De esta manera, Windows Azure detecta el requerimiento y ajusta una nueva VM con su respectivo core. Si en algún momento alguna instancia falla, Azure lo detecta e inicia una nueva.
Esto genera una notoria implicación: Para ser escalable, las instancias de Windows Azure Web role, deben ser stateless (no manejar estado en sesión o aplicación por ejemplo). Todo estado requerido ha de ser escrito en los mecanismos de storage de Windows Azure, o pasados al usuario final por medio de cookies por ejemplo. Además debido al load balancer, no hay forma de garantizar que múltiples peticiones de un mismo usuario sean enviadas a un mismo Web Role. Este tipo de implicaciones hace que el pasar aplicaciones a la nube o crearlas destinadas para ellas, no sea completamente transparente comparado con el modelo on-premises. Sin embargo, los cambios son muy sutiles (usar ADO.NET Data Services –compatible con Azure Storage-, tener en cuenta el modelo de colas para los Worker Role, etc.) Por esto, para los desarrolladores, trabajar con Windows Azure, es muy similar a crear aplicaciones tradicionales Windows. Microsoft provee templates para Visual 2008 que permiten crear Web Roles, Worker Roles y combinaciones de los dos. Los desarrolladores son libres de usar cualquier lenguaje de programación Windows. Todo esto viene en un SDK de Azure que también contiene una versión de ambiente Windows Azure que corre en la máquina del desarrollador. Este ambiente es conocido como Windows Azure Development Fabric e incluye Windows Azure Storage, un agente Windows Azure y todo el resto de tecnologías que requiere una aplicación para correr en la nube. Un desarrollador puede crear y depurar su aplicación usando este simulacro local y luego desplegar la aplicación a Windows Azure, cuando ésta esté lista, aunque en la nube hay cosas que son realmente diferentes. Por ejemplo, no es posible hacer el attach de un debugger a una aplicación en la nube. Así que básicamente para hacer el debugging de una aplicación en la nube, el mecanismo principal sería la escritura a los logs de Windows Azure, vía el agente de Azure. Otros servicios provistos incluyen por ejemplo el envío de mensajes desde los agentes a Windows Azure, quien los captura y reenvía por medio de emails, mensajería instantánea o cualquier otro mecanismo especificado. Además también se puede especificar a Windows Azure que detecte fallas automáticamente y envíe alertas. También está disponible información acerca de consumo de recursos tales como tiempo de proceso, ancho de banda entrante y saliente y almacenamiento.
Cuando el desarrollador ha depurado completamente su aplicación de manera local, ésta ha de ser instalada en un proceso de dos etapas. Primero se sube la aplicación al área de staging en Azure. En este momento, la aplicación queda identificada con un nombre DNS que tiene la forma <GUID>.cloudapp.net, donde <GUID> representa un identificador asignado por Windows Azure. Este nombre es asociado con una dirección IP virtual (VIP) que identifica al balanceador de carga a través del cual la aplicación será accedida. En el momento en que se decide pasar ya la aplicación a producción, se usa el portal de Windows Azure para solicitar el paso a producción. En este caso, Azure automáticamente cambia la entrada en sus servidores DNS para asociar la VIP con el nombre de producción que el desarrollador ha escogido; por ejemplo: myapp.cloudapp.net. (Es posible usar un nombre de dominio personalizado, sencillamente creando un DNS alias usando un CNAME estándar). Otro punto para resaltar aquí: las IPs reales de las aplicaciones jamás son reveladas.
Esto brinda un fuerte componente de seguridad.
Servicios de Almacenamiento
Esta parte de la plataforma también provee un tipo de almacenamiento: Azure Storage. Que es distinto a SQL Azure (otra parte de la plataforma). El almacenamiento Azure no es relacional. Su lenguaje de consulta tampoco es SQL. Es un almacenamiento mucho más sencillo, pero más escalable y más rápido que un almacenamiento relacional. Básicamente hay tres tipos de almacenamiento Azure:
1. BLOBS: (Binary Large Objects). Prácticamente, archivos. Los requerimientos de File System de nuestras aplicaciones en la nube, se suplen con los blobs. Un blob puede ser de hasta 50Gb de espacio y se encuentra dividido en bloques, de manera que cuando se hacen transferencias y ocurren fallos, la transferencia puede continuar desde el último bloque transferido correctamente.
2. Tablas: Los Blobs son la opción justa para algunas situaciones. Pero para otras son muy poco estructurados. Son muy sencillos de entender; pero para permitir a las aplicaciones trabajar con datos de una manera más formal se proveen las tablas. Estas tablas no son tablas relacionales y tienen su complejidad: De hecho, a pesar de que se llaman tablas, los datos que ellas contienen realmente se encuentran almacenados en una jerarquía simple de entidades que contienen propiedades. Cada propiedad tiene un nombre, un tipo y un valor. Varios tipos son permitidos incluidos: Binary, Bool, DateTime, Double, GUID, Int, Int64 y String. Una propiedad puede tomar diferentes tipos dependiendo de los valores almacenados en ella. De hecho, no hay obligación de que todas las propiedades en una entidad tengan el mismo tipo. El tamaño para cada entidad puede ser de hasta 1MB y siempre es accesada como una unidad. Cuando se lee una entidad se retornan todas sus propiedades y al escribir una, esto se hace atómicamente de manera que se reemplazan todas sus propiedades. Y en vez de usar SQL, una aplicación accesa los datos de una tabla usando las convenciones definidas por ADO.NET Data Services (no ADO.NET convencional), o REST. La razón para este tipo de solución, es que nos permite escalar el almacenamiento de una forma tal, que podemos distribuir nuestros datos en distintas máquinas (muchas más de las que se posibilitan con bases de datos relacionales tradicionales); de hecho, una sola tabla en SQL Azure puede ser de terabytes!
3. QUEUES: Los blobs y las tablas están enfocados en almacenamiento y acceso de datos. La tercera opción en Windows Azure son las colas, que tienen un propósito muy distinto. Una función principal de las colas es proveer un mecanismo para que las instacias de tipo Web Role se puedan comunicar con las instancias de tipo Worker role. En la siguiente gráfica, se describe el funcionamiento de las colas. En un escenario típico, un rol acepta trabajos de los usuarios (paso 1). Para pasar esos requerimientos a los worker role, se escribe un mensaje en la cola (paso 2). Este mensaje, puede ser de hasta 8kb y es posible usarlo para que contenga URIs apuntanto a blobs o entidades en tablas en caso de que se requiera transmitir más información. El worker lee los mensajes de su cola (paso 3) y ejecuta el trabajo como tal. Una vez leído el mensaje, éste no se borra. En vez de esto, el mensaje se hace invisible a otros lectores por un período de tiempo (por defecto 30 seg). Cuando el worker ha completado su trabajo, en ese momento se borra explícitamente de la cola. (paso 5) Separar las instancias web de las worker tiene sentido porque libera al usuario de tener que esperar a que una tarea larga sea procesada y también hace la escalabilidad más simple, dado que solo sería necesario agregar más instancias. Pero por qué hacer que las instancias borren explícitamente los mensajes? Esto se hace para manejar fallos. De esta manera si un worker que está haciendo el trabajo indicado falla, el mensaje no se borrará de la cola. Así que cuando vuelva a estar visible, el mensaje reaparece en la cola para ser leído por otro worker. Y de esta manera se proteje el mensaje de fallos.
Independientemente del tipo de almacenamiento, todo dato almacenado es replicado tres veces, para garantizar redundancia de datos y tolerancia a fallos.
El storage de Windows Azure puede ser accedido por aplicaciones de Windows Azure o cualquier otra. En ambos casos, todos los tres tipos de storage pueden consultarse a través de REST. Todo es nombrado usando URIs y accesado con operaciones HTTP estándares. No obstante, un cliente .NET podría usar ADO.NET Data Services o LINQ para acceder más cómodamente a esta información. Pero un cliente java usaría REST estándar. Por ejemplo, un blob puede ser leído con un HTTP GET contra un URI formateado así:
http://<StorageAccount>.blob.core.windows.net/<Container>/<BlobName>
De manera similar, una consulta sobre una tabla sería:
.table.core.windows.net/?$filter=http://<StorageAccount>.table.core.windows.net/<TableName>?$filter=<Query>
y una cola se accesaría:
.queue.core.windows.net/http://<StorageAccount>.queue.core.windows.net/<QueueName>
La Estructura (Fabric)
Todas las aplicaciones de Windows Azure y todos sus datos en el Storage, residen en alguno de los centros de datos de Microsoft. Dentro de ese centro de datos, el conjunto de máquinas dedicadas a Windows Azure se organizan en una fábrica tal como lo muestra la siguiente gráfica:
Tal como se aprecia, la Estructura Azure es un gigantesco grupo de máquinas administrado por un componente de software llamado Fabric Controller. Este controlador es replicado a través de un grupo de 5 a 7 máquinas y es dueño de todos los recursos en la estructura: computadoras, switches, balanceadores de carga y más. Dado que el controlador se comunica con un “Fabric Agent” en cada máquina, también tiene información de cada aplicación en la estructura. Como punto a resaltar, puedo mencionar que el Storage también aparece ante el controlador como una aplicación más. Así que el controlador no conoce los detalles del storage; esto último indica obviamente que el almacenamiento es autocontrolado. Es decir; el Storage, es solo una aplicación más dentro de la estructura, que se administra autónomamente.
Este amplio conocimiento le da la capacidad al Fabric Controller de cumplir múltiples funciones como monitorear todas las aplicaciones que están corriendo y de esta manera ser capaz de dar información en vivo, de qué es lo que está pasando en la estructura. Administra los sistemas operativos teniendo en cuenta aspectos como las actualizaciones de los Windows Server 2008 que corren en las VMs de Azure. También decide dónde deben correr las aplicaciones, escogiendo los servidores físicos para optimizar la utilización del hardware. Para lograr esto, el controlador depende del archivo de configuración que es subido con cada aplicación a la nube. Este archivo provee una descripción basada en XML de las necesidades de la aplicación: cuántos roles web necesitará, cuantos roles de trabajo y otros detalles. Cuando el controlador recibe una nueva aplicación, éste usa su archivo de configuración para determinar cuántos roles de cada tipo ha de crear. Una vez creadas estas VMs, el controlador las monitorea. Si una aplicación requiere 5 instancias de Web Role y una muere, el controlador automáticamente reiniciará una nueva.
Esta creación de instancias debe realizarse inteligentemente. Por ejemplo, suponiendo que además de las 5 instancias web el desarrollador pide cuatros instancias worker. Una asignación ingenua podría poner todas estas instancias en máquinas en el mismo rack servidos por el mismo switch. Si el rack o el switch fallara, la aplicación entera quedaría no disponible. Dadas las metas de alta disponibilidad de Windows Azure, hacer que una aplicación dependa de puntos sencillos de falla como este, no es una buena idea.
Para evitar esto, el controlador agrupa las máquinas en conjuntos llamados “Dominios de Falla”. Cada dominio es parte de un data center que independizaría las fallas únicamente a su contenido. Eso se ilustra en la siguiente gráfica:
En este ejemplo sencillo, la aplicación está corriendo en dos instancias Web y el datacenter está dividido en dos Dominios de Falla. Cuando el controller despliega la aplicación, se establece una instancia de Web Role en cada uno de los dominios. Este arreglo significa que una falla en el hardware no va a provocar que toda la aplicación se caiga.
Hasta aquí vimos todo lo relacionado al componente de Windows Azure. En mi post Stairway to Azure (4): Sql Azure y .NET Services, veremos la descripción de estos otros dos componentes.