Aplicaciones Creando Aplicaciones

Published on Author lopezLeave a comment

En todos estos años, he estado trabajando en diferentes aproximaciones para hacer que programas creen programas. Este post es un resumen y revisión de los caminos que he tomado, y en los que sigo trabajando, como un Work in Progress. Pienso que hay maneras interesantes de hacer programación, listas para ser exploradas.

Aplicaciones Dinámicas

Algo que hace unos años no hubiera encarado. Pero la ductilidad que da JavaScript me trae de nuevo a esta idea. Todo se basa en describir una aplicación (entidades, relaciones, vistas, código), y ejecutarla en un programa especializado (generalmente en páginas web) que conozca cómo interpretar y ejecutar la definición de la aplicación. Escribí una demo de la idea para la competición Knockout del año pasado:

Más información en mi post Aplicaciones Dinámicas en Node.js.

[View:http://www.youtube.com/watch?v=GQdyyNWCasI]

La aplicación pudo ser descripta usando una simple estructura: en este ejemplo, es un objeto JavaScript sencillo que puede ser serializado a JSON. La misma estructura puede ser interpretada por diferentes programas “host”: una aplicación web (la demo de arriba), o una aplicación web SPA (de Single Page Application), una aplicación mobile (Phonegap o nativa). Y hasta podría usarla como base para generar código en una tecnología concreta, como Sinatra, PHP, Express+Node.js+MongoDB, etc.

Generación de Código

Ya saben, uno de mis temas preferidos. He estado creando tareas, plantillas y modelos de libre definición para generar aplicaciones en Express/Node.js y en otras tecnologías (Sinatra, Django, Flask, PHP, todo Work in progress). Tengo implementaciones de mi herramienta de generación de código en C#, Ruby y Node.js. Pero mis últimos trabajos usan la de Node.js:

https://github.com/ajlopez/AjGenesisNode

Pueden ver un ejemplo en:

https://github.com/ajlopez/AjGenesisNode-Express

Una aplicación generada:

 

Estoy trabajando en crear un sitio en línea donde cualquiera pueda definir el modelo, y elegir una serie de opciones de tecnología. El sitio generaría código, listo para bajarse en un .zip.

Tarjetas

En el proyecto:

https://github.com/ajlopez/SimpleCards

Describo cada aplicación como un conjunto de “cards” (o sea, tarjetas, en un “deck”, mazo). Una tarjeta puede tener valores simples, o un valor que sea a su vez una tarjeta o un mazo de tarjetas. Por ejemplo, una tarjeta puede tener un id, un nombre, un título como valores simples, e información adicional, otros valores. Una tarjeta puede tener un valor que a su vez sea un mazo de tarjetas (por ejemplo, una tarjeta de Elementos Químicos, puede tener un mazo de tarjetas, una por cada elemento químico a describir). Cada tarjeta/mazo puede ser mostrado en diferentes contextos: desde una aplicación web, una SPA, una aplicación móvil (podría implementarse para PhoneGap o para nativo). Una cosa es la estructura y contenido de una tarjeta, y otra es el mostrar la tarjeta. Esto de mostrar depende del contexto de la aplicación que alberga las tarjetas.

Un ejemplo simple

https://github.com/ajlopez/SimpleCards/blob/master/samples/deck/js/model.js

var model = {
    title: "My Deck",
   
    cards: [
        { title: "Card 1", text: "This is the card 1" },
        { title: "Card 2", text: "This is the card 2" },
        { title: "Card 3", text: "This is the card 3" }
    ]
}

Otro ejemplo, con pantallas:

https://github.com/ajlopez/SimpleCards

El contenido de un tarjeta pueden ser valores con texto simple, texto largo, una URL, la URL a una imagen, o la descripción de algún componente especializado a ser mostrado (por ejemplo, un Google Maps). La descripción de la tarjeta y su contenido puede ser estático o puede ser generado en el momento. Por ejemplo, podría implementar leer un “feed” y transformarlo en un mazo de tarjetas. O podría recuperar la descripción de un mazo o una tarjeta desde una API REST. Una tarjeta puede tener algunos valores parciales (por ejemplo, id, título), para ser mostrado en el mazo, y cuando uno entra y quiere ver la tarjeta completa, un componente adicional puede RESOLVER la tarjeta y conseguir los datos adicionales, por ejemplo usando su id. Un ejemplo: una tarjeta tiene título y id. El id es la URL de la página en la Wikipedia. Cuando una tarjeta necesita ser vista, el programa adicional toma el id, y resuelve la tarjeta, bajando el contenido de la página, extrayendo texto, enlaces relacionados, imágenes.

Mucho para hacer, y muy interesante.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *