Resumen de la charla sobre Javascript

image

Ayer di una charla sobre Javascript.

El objetivo principal era poder mostrar el poder de este lenguaje de programación o similares, y al mismo tiempo, implantar la idea de que, para programar en Javascript, es necesario pensar en OO ligeramente diferente a la forma tradicional.

Si quieres bajar la presentación y el código que hicimos ayer, puedes hacerlo desde el siguiente link.

Anuncios

Inyección de funcionalidad (II)

Si has visto los post anteriores, habrás notado que uno de los principales problemas que remaqué sobre algunos patrones y su aplicación, y en especial en lenguajes con lazos por tipos de datos, era que la infraestructura para realizar determinadas acciones era mucho más cara que la solución.

Por otro lado, los lenguajes dinámicos nos permiten quitarnos esos costos, o por lo menos, pensar la solución de otra forma.

Imaginemos que tenemos una clase, con una función:

public class MyClass
{
    public void Show(string message)
    {
        Console.WriteLine(message);
    }
}

Luego, creamos una instancia de esta clase y ejecutamos dicha función:

var o = new MyClass();
o.Show(“Hello World”);

Luego nos piden que debemos agregar información de depuración, de tal forma que al momento de realizar la llamada a la función Show, primero realice determinado comportamiento (No viene al caso) y recién luego, haga lo que la función Show original debía hacer. Si esto te parece simple, la condición es que NO PUEDES modificar el código de la clase MyClass. Ahora seguramente no te parece tan simple.

Aquí es donde uno podría pensar una gran estructura para solucionar este problema, nuevas clases, interfaces, patrones varios. Pero, el costo es más grande que la solución.

Que pasa con un lenguaje como Javascript (Nuestro lenguaje de juguete). Repliquemos lo anterior:

function MyClass() {
    this.show = function(message) {
        console.log(message);
    };
}

var o = new MyClass();
o.show(“Hello World”);

El resultado, hasta este punto es el mismo. Pero la idea sigue en el aire. En definitiva, necesitamos inyectar funcionalidad. Meternos en medio de las llamadas y hacer que se ejecute, primero, lo que necesitamos.

var oldShow = o.show;

o.show = function(message) {
    console.log(“Log information!”);
    oldShow(message);
};

Lo que hacemos, para este caso, es tomar la referencia a la función original del objeto y la remplazamos por nuestra definición. Nuestra función realiza las acciones que necesite, como en este caso, mostrar un mensaje adicional, y luego, delega el mando a la función original.

image

El desarrollador no notará la diferencia, pero nosotros hemos podido inyectar nueva funcionalidad sin modificar el flujo esperado.

El punto a favor de esto es que podemos dar de baja o alta funcionalidad bajo demanda. Por ejemplo, un paquete de funcionalidades de depuración que solo está activo cuando depuramos, pero simplemente no existe cuando implementamos en su destino final.

Posiblemente sobre esto último puedas pensar que para esto existen directivas de pre procesador, o condicionantes al momento de compilar. Y es, bajo cierto punto de vista, una forma de solucionarlo, pero hay que tener en cuenta que nuevamente el costo de la infraestructura será superior al beneficio, ya que en un punto necesitaremos escribir directamente sobre las clases, mientras que bajo el modelo de un lenguaje como Javascript, siempre, se puede hacer desde fuera del módulo a ser intervenido. O sea, no será necesario hacer ninguna línea de código ya que los objetos pueden ser inspeccionados e intervenidos desde el que intenta modificarlos.


Framework para desarrollo de juegos (III)

Para los que siguen estas publicaciones, habrán visto, en los anteriores post, que la idea del framework era hacer algo chiquito, simple, que sirviera como base no se muy bien para que.

Por cuestiones que van pasando, seguí desarrollándolo, al punto que en este momento ya es un framework bastante completo. Por supuesto, siempre intentando mantener lo simple y que no intente hacer todo, si no, que provea las herramientas para que las cosas se puedan hacer como uno quiera.

Para esto, y gracias a los comentarios que me llegaron, las ideas propuestas, tomé el camino de crear pseudo plug ins para que la funcionalidad sea inyectada y no dependiente del framework. De esta forma, el “core” del mismo se mantendría limpio, pero cualquier aditamento funcionaría por fuera.

Actualmente el framework cuenta con 6 plug ins:

– jsGFwkCollision.js: Este plug in implementa, por el momento, dos modelos de colisión. El primero, por bounding boxes y el segundo mediante distancias radiales. El próximo paso será incorporar Ray Casting.
– jsGFwkEffects.js: Este componente permite rotar sprites en base a ángulos.
– jsGFwkIO.js: Uno de los primeros plug ins orientado al manejo del teclado y el mouse. Pronto, posibilidad de touch.
– jsGFwkRM.js: Manejador de recursos gráficos y de sonido. Un pre cargador clásico.
– jsGFwkSprites.js: Ideado para recortar y manipular de forma independiente recursos gráficos. Esto sirve para aliviar la carga de cálculos hacia el desarrollador cuando quiere interactuar con sprite sheets.
– jsGFwkDebugger.js: Esta librería permite ver en pantalla datos de cada objeto del juego, como sus coordenadas, definiciones de bounding boxes, o la asignación del radio para la colisión mediante este mecanismo.

Pero, como comentaba al principio, estos elementos no son parte del framework en si mismo, si no que pueden estar o no, bajando la carga de ejecución y transferencia de datos. Por ejemplo:

//Include external component libraries
jsGFwk.include(“ResourceManager”);
jsGFwk.include(“IO”);
jsGFwk.include(“Collisions”);
jsGFwk.include(“Debugger”);
   
jsGFwk.Debugger.on = true;
//************************************

Las líneas anteriores incluyen los componentes en el proceso de ejecución.

image

El debug activado.

Por supuesto, han habido otros cambios. En especial optimizaciones, mejor soporte para plug ins y muchos otros chiches.

Si quieres probarlo, o piensas que se podría mejorar o adicionar algo, soy todo oidos.

Para descargar el códig: https://github.com/MatiasIac/jsGFwk


Evento en Córdoba–JavaScript

Les dejo el afiche oficial.

Afiche Informatica JAVA SCRIPT 2013_MAIL


Evento en Córdoba–JavaScript

Les dejo la invitación al próximo evento que realizaremos con el MUG e IES. En esta oportunidad, JavaScript.

En este evento vamos a ver diferentes formas de manejarnos con JavaScript.

Para más información y para inscribirte: http://www.mug-it.org.ar/Event.aspx?Event=92

Córdoba – JavaScript: Lo que creías saber pero nunca te habían contado

Javascript se ha convertido en uno de los lenguajes de programación más usados en el desarrollo de aplicaciones Web. Esta rápida masificación no ha dado tiempo suficiente para poder comprender el funcionamiento y la forma de desarrollar para el mismo.

Fecha y hora: Jueves 19 de septiembre, comienza a las 19:00 hs. Acreditación desde las 18:30 hs. Duración: 2 hs.

Lugar: Colegio Universitario IES XXI, Rondeau 165, Córdoba Capital.

Orador: Ing. Matías Iácono

Contenidos:

– Creación de objetos

– Closure en Javascript

– Métodos, funciones, módulos y otros artefactos

– Inyección de funcionalidad

– Punteros y referencias


Evento en Córdoba–Node.js

CUPO COMPLETO!

 

Córdoba – Node.js for Startups Bootcamp
Friday, September 20, 2013
Lugar: Salón de las Artes, Entre Rios 70, 1er piso, Hotel Dorá, Córdoba
Aparecen cosas nuevas a diario y es dificil encontrar el tiempo para explorarlas todas. Que mejor que dedicar un día entero a meterte de lleno en el MEAN stack de la mano de gente que lo está utilizando en producción?

Orador: Matías Woloski – José F. Romaniello
@woloski – @jfroma

Horario: De 9:00 a 18:00 hs. Acreditación a partir de las 8:30 hs. Duración de la jornada: 8 hs.

Audiencia: Desarrolladores de software web.

Modalidad: Al comenzar el workshop descargarán el contenido a sus máquinas el cual tiene todos los ejercicios de cada módulo. Cada módulo se compone de una introducción teórica de 30 minutos y una parte práctica en donde se resolverán varios ejercicios. Cada ejercicio significa una iteración sobre el producto que estamos desarrollando y nos acerca a la solución final.

Nos sumergiremos en el MEAN stack de la mano de gente que lo está utilizando en producción. En este bootcamp experimentarás como es trabajar con: Node.js, MongoDB, GitHub, Auth0 y la nube, desarrollando una aplicación real.

Gracias al apoyo de empresas sponsors hemos logrado reducir el arancel a un valor muy bajo, entendemos que las vacantes se cubrirán rápidamente. Sugerimos confirmar tu inscripción cuanto antes, no dejes pasar esta oportunidad.

Sponsors: GitHub, 10gen, StrongLoop y Auth0

Agenda:

9:00 Café – Bienvenida

9:30 Node.Js y Express

10:30 Lab: Creando una aplicación Node con Express

11:30 Break

11:45 Guardando datos. DBs No SQL.

12:15 Lab: Utilizando MongoDB

13:00 Almuerzo (Brunch)

13:30 Autenticación en Cloud y Mobile con Individuos y Empresas.

14:30 Lab: Autenticando con Social Providers, User/Password y Enterprise.

15:30 Break

15:45 Cloud Computing IaaS, PaaS. Ventajas y desventajas.

16:15 Lab: Deploy de la App a un PaaS (Heroku o Windows Azure).

17:15 GitHub Workflow: Code Review. Multiple Branches. Pull Requests.

18:00 Cierre.

Aranceles
Abonando hasta el Martes 10 de septiembre de 2013:
Público en general: $ 150.-
Socios del MUG: 100.-

Pasada esa fecha el arancel será:
Público en general: $ 250.-
Socios del MUG: 200.-

El arancel incluye el refrigerio al medio día.

Las vacantes se confirman abonando el arancel. Las reservas no abonadas caducan el Martes 10 de Septiembre de 2013. Benefíciese obteniendo el descuento por pago anticipado y asegure su vacante. Vacantes limitadas.

REGÍSTRESE AQUI

IMPORTANTE:

Requisitos: Para participar del workshop es necesario concurrir con la laptop propia con el siguiente software preinstalado:

– node.js http://nodejs.org/download/

– Un editor de Text. Recomendamos:

Sublime Text 2 http://www.sublimetext.com/2

Textmate (solo OSx) http://macromates.com/

E-TextEditor (solo Windows) http://www.e-texteditor.com/

– Git (remember to setup your user name and email)

windows: https://help.github.com/articles/set-up-git#platform-windows

linux: https://help.github.com/articles/set-up-git#platform-linux

mac: https://help.github.com/articles/set-up-git#platform-mac

Para mas información visitar este link: https://github.com/auth0/node-workshop-cordoba