lunes, 28 de noviembre de 2011

Windows Azure Camps en Tenerife

WINDOWS AZURE CAMPS

HOTEL SILKEN ATLÁNTIDA
Avda. Tres de Mayo, Esq. Aurea Díaz Flores
Santa Cruz de Tenerife 38002
España
Idiomas: Español.
Productos: Windows Azure.
Público: Diseñador y Programador/desarrollador de programas.

¿Eventos prácticos?
Si, la idea es que traigáis vuestros equipos y nos ensuciemos las manos =) Tras una breve introducción a la plataforma para los no iniciados tendremos varios laboratorios paso a paso que podréis seguir y sobre los que podremos discutir posibles dudas. Se entregarán cuentas de evaluación y se plantearán diferentes laboratorios que podréis realizar paso a paso mientras aprovechamos a resolver dudas.

Algunos de los temas que cubren los laboratorios:
  • Empezando con Windows Azure
  • Windows Azure Storage
  • Entendiendo SQL Azure
  • Seguridad, autenticación y federación
  • Interoperabilidad

Requisitos
Tendréis que traer vuestro propio portátil con algunas cosas instaladas. Tendremos algún USB con los requisitos por si a alguien se le olvida, pero intenta venir preparado, porque si no, te vas a perder la mitad del laboratorio con las instalaciones.

Para los laboratorios más genéricos

Windows Vista SP2, Server 2008 SP2, Server 2008 R2 o Windows 7

IIS con ASP.NET habilitado:
  • .NET Framework 4.0
  • Visual Studio 2010
  • SDK de Windows Azure
  • SQL Server 2008 Express
  • SQL Server Management Studio 
Para los laboratorios de federación:
  • Runtime de Windows Identity
  • SDK de Windows Identity 
Y si estás interesado en el de PHP:
  • Eclipse con herramientas de Azure
¿Cuentas gratis?
Matizando… tendremos cuentas de evaluación, son unas cuentas de Azure especiales que tienen una validez de X días y que tienen ciertos recursos asignados (límite de computación, límite de BBDD…)

Si sois suscriptores MSDN, partners o emprendedores, tenéis una suscripción con recursos gratuitos… os recomendamos que traigáis los datos para que os podamos ayudar a activarla o para que os familiaricéis con vuestros propios despliegues y resolvamos dudas concretas.

Temática
Los laboratorios serán variados y de todos los niveles, tendremos el laboratorio básico de activación de la cuenta, laboratorios de HolaMundo, de NOSQL con tablas de storage, federación con proveedores de internet, SQL Azure, PHP con eclipse, etcétera…

De todos modos si se te ocurre alguna idea de un laboratorio que pueda ser interesante, no dudes en comentarlo en este post o enviarnos un mensaje a través de twitter o facebook.

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032500082&culture=es-ES

viernes, 25 de noviembre de 2011

Namespaces en javascript (1 de 2)

Según la wikipedia, javascript se define como un lenguaje de programación orientado a objetvos, basado en prototipos, imperativo y débilmente tipado. Se utiliza principalmente en su forma del lado del cliente (client-side), implementado como parte de un navegador web permitiendo mejoras en la interfaz de usuario y páginas web dinámicas, aunque existe una forma de JavaScript del lado del servidor (Server-side JavaScript o SSJS). Su uso en aplicaciones externas a la web, por ejemplo en documentos PDF, aplicaciones de escritorio (mayoritariamente widgets) es también significativo.



Cuando comenzamos a programar en javascript sin tener mucha idea de lo que hacemos, es frecuente declarar  variables globales sin ton ni son, que luego iremos usando según nuestra necesidades. Sin embargo, la bibliografía moderna nos recomienda reservar el uso de este tipo de variables a aquellos objetos que tienen un impacto general en el entorno de nuestra aplicación. Evitando las variables globales reducimos el riesgo de colisión entre ellas a la vez que evitamos ambigüedades.

Resumiento, hay que evitar la creacion de variables y funciones globales, salvo que sea absolutamente necesario.

Para ilustrar esto, hay que recordar que en Javascript, cualquier variable global se asigna inmediatamente a un namespace (contexto) general: el objeto window. Esto permite que podamos acceder a ella directamente por su nombre, o como una propiedad del objeto general.
var foo = 'bar'; // Definimos la variable como global  
console.log( foo ); // Usamos la variable directamente por su nombre
console.log( window.foo ); // Usamos la variable como un método

Partiendo de la premisa anterior vemos que se hace necesario buscar alguna estrategia para evitar el uso de variables globales. Para ello, lo ideal es crear pequeños objetos que encapsulen estas variables globales. La primera aproximación que se nos puede ocurrir es la siguiente

var myContext = {}  

myContext.foo = 'Foo';  
myContext.bar = 'Bar';  
myContext.getMessage = function() {  
  return myContext .foo + ' ' + myContext .bar;  
}  
 
console.log( myApp.getMessage () ); // Foo Bar

Hemos creado un único objeto global, myContext, que utilizamos como contenedor para el resto de variables y funciones. De este modo, ganamos legibilidad al poder identificar de un solo vistazo, aquellas partes de código que trabajan conjuntamente. A la hora reutilizar el código, sólo tendríamos que preocuparnos de llevarnos aquellas funciones cuyo prefijo coincida con su contexto.

Otra forma de definir nuestro objeto global es mediante la notación literal. Con esta forma podemos evitar hacer referencia a dicho objeto cada vez que necesitemos crear un nuevo método. Partiendo del ejemplo anterior, el resultado sería:

var myContext = {  
  foo : 'Foo',  
  bar : 'Bar',  
  getMessage : function() {  
    return this.foo + ' ' + this.bar;  
  }  
};

Como vemos es una forma muy sencilla y directa de declarar objetos.

Existe otro patrón llamado módulo. Este patrón se configura a partir de una función que actua como contexto dentro de nuestra aplicación. Este función se autoejecuta y devuelve el objeto que representa la interfaz pública. Este módelo se asemeja a la programación clásica orienta a objetos ya que distingimos entre métodos públicos y métodos privados ya que como sabemos javascript no implementa el concepto de clases de forma nativa, sino que creamos funciones que actuan como tales.

Para nuestro ejemplo la declaración sería de la siguiente manera
var myContext = (function() {
  var foo = 'Foo';
  var bar = 'Bar';

  var privateMethod = function() {
    return 'Private Method';
  }

  return {
    getMessage: function() {
      return foo + ' ' + bar;   
    }
  }
})();
console.debug(myContext.privateMethod()); // Uncaught TypeError: Object #<Object> has no method 'privateMethod'
console.debug(myContext.getMessage()); // Foo Bar

Este este ejemplo el método 'privateMethod' no se ha incluido en el objeto return por lo que permanece oculto y visible únicamente dentro de su contexto. Vemos que no hace falta referenciar las variables 'foo' y 'bar' con this ya que estás comparten el contexto.

Uno de los problemas que plantea este patrón es que accedemos de manera diferente a los métodos según sean públicos o privados.

var myContext = (function() {
  var foo = 'Foo';
  var bar = 'Bar';

  var getFoo = function() {
    return foo;
  }

  var getBar = function () {
    return bar;
  }

  return {
    join: function () {
      return getFoo() + " " + getBar();
    },

    getMessage: function() {
      return join();      // ERROR: Uncaught ReferenceError: join is not defined
      return this.join(); // CORRECTO
    }
  }
})();

En el ejemplo anterior la llamada al método join desde el método getMessage nos da un error. Para hacer la llamada correctamente debemos usar this. Esto no ocurre con las llamadas a los métodos 'getFoo' y 'getBar' desde el método 'join'.

Con esto acabamos la introducción a los namespace en javascript. Para la próxima dejaremos el contexto dinámico y el patrón proxy de James Edwards

jueves, 24 de noviembre de 2011

Webcast TechNet: [AUGES] - ASP.NET MVC + HTML5 + CSS3 + Jquery = La union perfecta

Webcast TechNet: [AUGES] - ASP.NET MVC + HTML5 + CSS3 + Jquery = La union perfecta

Idiomas:  Español.
Productos:  Hypertext Markup Language 5, Microsoft ASP.NET y Microsoft Visual Studio.
Público:  Generalista de IT.

ASP.NET MVC + HTML5 + CSS3 + Jquery = La union perfecta

Descripción:
Las aplicaciones web modernas nos exigen cada vez más utilizar estándares para dotar a nuestra aplicación de una vistosidad y usabilidad nunca visto hasta el momento. Con ASP.NET MVC podemos separar las responsabilidades de nuestra aplicación de una forma sencilla y con HTML5 y CSS3 podemos obtener los mejores resultados independientemente del navegador gracias a librerías como modernizr.

En esta charla lo que veremos es como de una forma totalmente práctica y con Visual Studio 2010 podemos crear una aplicación web totalmente funcional.

¿Qué utilizaremos en esta práctica?

ASP.NET MVC v.3: Es una plataforma gratuita, Open Source y está incluida en .NET 4.0. Nos sirve para realizar aplicaciones ASP.NET utilizando el patrón MVC, separando las responsabilidades ofreciéndonos beneficios como desarrollo orientado a pruebas “TDD”, mejor soporte de SEO con URLs más limpias, etc.

HTML v.5: La quinta revisión del veterano HTML no finalizada, pero los navegadores se han lanzado a una lucha frenética para adaptar sus especificaciones. Esta versión ha tenido en cuenta las nuevas necesidades y nos ofrece una web semántica.

CSS3: La tercera revisión de la hoja de estilos en cascada, que nos permite separar la estructura del documento de su presentación.

JQuery: Librería script que encapsula la complejidad de JavaScript y nos permite realizar animaciones, interactuar con el DOM y extender la aplicación de una manera muy sencilla y viene incluido en los proyectos ASP.NET MVC.

Modernizr: Librería que nos permite validar si el navegador soporta alguna de las nuevas funcionalidades de HTML 5 y nos permite actuar en consecuencia. Para hacer nuestra aplicación realmente cross-browser.

Como siempre, podéis asistir desde casa o el trabajo (es un Webcast online), y la asistencia al evento es totalmente gratuita. Para acceder, simplemente debéis registraros en la siguiente dirección:

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032500294&Culture=es-ES

Todo esto de la mano de Marc Rubiño (http://mrubino.net) - Fundador de LoNetCamp y MVP de ASP.NET. Twitter @Marc_Rubino