Trooveler

Los vientos del cambio siguen soplando para mí, y ahora me llevan hasta Troovel , una startup cuyo producto es una aplicación web para planificar viajes. Es una gran oportunidad para mí ya que me permitirá trabajar con un equipo de experimentados desarrolladores web en una aplicación enfocada al público internacional.

Logo de Troovel

Logo de Troovel

Uno de los puntos fuertes de la aplicación será el uso de una inteligencia artificial para averiguar los gustos del usuario, y así poder sugerirle lugares afines a él. Como en tus dos anteriores viajes visitaste museos, ahora seguramente querrás ver más museos, así que te los presento en primer lugar. Para esta funcionalidad se ha trabajado en colaboración con la Universidad Politécnica de Valencia, y los lugares, fotografías y comentarios sobre éstos se obtienen de distintas fuentes como Destinia, Trip Advisor, Wikimedia y Panoramio.

Estoy seguro de que voy a aprender mucho aquí.

  • Facebook
  • Twitter
  • Google Plus
  • Delicious
  • Meneame
  • StumbleUpon

Fichado por AlabazWeb Pro

Logo de PrestaShop

Logo de PrestaShop

Ya va siendo hora de hacer público que el pasado 22 de mayo entré a formar parte de la plantilla de la empresa AlabazWeb Pro.

Esta compañía se dedica principalmente a la creación y mantenimiento de tiendas online que utilizan el software libre PrestaShop. De momento mis funciones pasan por desarrollar y mantener módulos y temas para PrestaShop 1.4, 1.5 y 1.6; y por atender problemas de los clientes en su uso cotidiano de la herramienta. Resulta interesante ver la variedad de tiendas que pueden encontrarse hoy en día en la red: desde granjas de hormigas como AntHouse.es , hasta tiendas especializadas en un producto muy concreto como Cubretacones.com . Además, este trabajo me da la oportunidad de ganar experiencia profesional demostrable en el desarrollo web, lo cual podría venirme bien en el futuro. Sin embargo, de ahora en adelante voy a disponer de bastante menos tiempo para mis otros proyectos, como Jargonaut, en el que tengo puesta mucha ilusión.

Pero hay que trabajar para vivir para trabajar, ¿no?

  • Facebook
  • Twitter
  • Google Plus
  • Delicious
  • Meneame
  • StumbleUpon

Publicando Jargonaut

Estos últimos meses he estado trabajando en un nuevo proyecto en JavaScript. Después de romperme la cabeza para encontrarle un nombre, he acabado llamándolo Jargonaut: “jargon” significa jerga o argot en inglés, y “jargonaut” es quien está acostumbrado a escuchar o utilizar jerga.

Jargonaut es un intérprete de lenguaje Jargon, definido mediante un juego de instrucciones ampliable, que se vuelven cada vez más específicas con cada plugin que añadas. El código se escribe mediante XML, aunque implementar soporte para JSON sería muy sencillo. La librería del intérprete se carga en una página web, y al instanciarlo se le indica el fichero con el programa para que lo cargue mediante AJAX. El programa Hola Mundo sería:

<?xml version="1.0" encoding="UTF-8" ?>
<function id="MAIN_FUNCTION">
	<alert>¡Hola Mundo!</alert>
</function>

Inicialmente, el proyecto surgió de un experimento para programar un juego del género novela visual, que son unos juegos con mucho texto y algunas imágenes, centrados en contar una historia de forma parecida a como hacen los libro juegos. Poco a poco el experimento fue creciendo, y me di cuenta de que podía generalizar el motor para que pudiera realizar otras tareas menos específicas. Así cree un núcleo y una serie de plugins, ofreciendo cada uno nuevas instrucciones para permitir realizar distintas acciones.

El intérprete se apoya en las librerías de software libre jQuery y jQuery UI para el crossbrowsing y los efectos visuales sobre una página web. El lenguaje Jargon tiene una sintaxis muy simple: soporta variables locales y globales, estructuras de control y bucles, funciones e hilos simulados, pero no orientación a objetos. Utiliza el lenguaje subyacente, JavaScript en esta implementación del intérprete, para realizar diversos cálculos aritméticos y acciones más complejas.

Ayer me entretuve en subir a GitHub los distintos componentes de Jargonaut, incluyendo un par de librerías que ya utilizaba en CanvasBooster, que he aprovechado para mejorar. Podéis seguir los links a los repositorios desde la página del proyecto.

  • Facebook
  • Twitter
  • Google Plus
  • Delicious
  • Meneame
  • StumbleUpon

Plantilla POO para JavaScript

Últimamente estoy programando mucho en JavaScript. Este lenguaje se basa en prototipos en lugar de en la instanciación de clases como C++ o Java, y resulta un cambio de paradigma un tanto extraño para el que está acostumbrado a esos otros lenguajes. Desde que empecé a usar en serio JavaScript, hace unos tres años, he ido puliendo una pequeña plantilla para la creación de prototipos que creo que está lo bastante decente como para compartirla con el mundo:


// --- %Package%/%Class%.js ------------------------------------------------------

// --- Constants ---

// %Package%.%CLASS%={};

// --- Class ---

%Package%.%Class%=function(%param%){

// --- Attributes ---

// --- Reset ---

	this.reset=function(%param%){
// 		%Package%.%Class%.prototype.reset.call(this);

// 		// Inheritance protection
// 		if(%param%!==undefined){
// 			// Initialization
// 
// 		}
	};

// --- Other methods ---

	this.toString=function(v){
		var
			r='[object '+this.className
		;
		if(v===true){
			r+=' '+JSON.stringify(this);
		}
		return r+']';
	};

// --- Reset call ---

	this.reset(%param%);

};

// --- Inheritance ---

// %Package%.%Class%.prototype=new %ParentPackage%.%ParentClass%;
// %Package%.%Class%.prototype.parent=%ParentPackage%.%ParentClass%;
%Package%.%Class%.prototype.constructor=%Package%.%Class%;

// --- ClassName ---

%Package%.%Class%.prototype.className='%Class%';

// --- Static ---

// %Package%.%Class%.prototype.=function(){};

Utilizo los caracteres de porcentaje para poder hacer reemplazos rápidos después de un copia y pega. Incluso podrías generarte un script que te pregunte por las sustituciones y genere el archivo ya listo para usar.

Como véis, el prototipo se genera mediante una función, que se llama constructora. Al hacer un new de esa función obtendremos un nuevo objeto con las características especificadas en la función. Podemos crear métodos y propiedades asignándoselos a this, que representa a la instancia generada. De esta forma, las propiedades y métodos creados serán accesibles desde cualquier otro punto de nuestro programa, como cuando en otros lenguajes les atribuimos visibilidad public. Para hacerlos inaccesibles desde el exterior como si fueran private, hay quien utiliza la palabra reservada var, que define variables. Personalmente no lo recomiendo porque esas propiedades y métodos no serán heredables. Realmente, JavaScript no está preparado para ese tipo de ocultación, aunque hay quien sigue la convención de nombrar a las propiedades y métodos que deberían ser privados empezando con un guión bajo, por ejemplo: this._propiedadPrivada. No impedirá que se acceda desde el exterior, pero indicará a los programadores humanos que no tendrían que estar haciéndolo.

Las líneas de código tras la función sirven para asignar un prototipo del que heredar propiedades. Mirad un momento el comentario de “Inheritance protection” dentro del método reset. Utilizo ese if para no inicializar el objeto cuando otro prototipo se defina como heredero de éste, cosa que se hace al igualar el prototipo propio al del padre. Mirad la línea de código justo después del comentario “— Inheritance —”.

Tengo también la costumbre de incluir una propiedad llamada className en el prototipo para ayudarme a identificar los objetos. Cualquier cosa que se asigne directamente al prototipo de la clase será compartida inmediatamente por todas las instancias de la misma, algo que puede resultar muy útil, pero que a mí me parece un poco caótico y sólo lo hago en este punto. También serán propiedades o métodos accesibles sin necesidad de instanciar un objeto, por lo que los métodos se parecen a los static de otros lenguajes.

JavaScript es un lenguaje que puede resultar extraño si nunca has salido de los tradicionales lenguajes basados en la instanciación de clases, pero es muy potente si eres capaz de cambiar el chip y aprendes a usarlo como toca. Espero que mi plantilla os ayude a entenderlo mejor.

  • Facebook
  • Twitter
  • Google Plus
  • Delicious
  • Meneame
  • StumbleUpon

ImageMagick por Línea de Comandos e Impresiones Desatendidas con Java

Recientemente he estado desarrollando una pequeña aplicación para mi padre, encargada de facilitarle la creación e impresión de etiquetas para supermercados.

La aplicación se divide en un archivo BAT y un programita en Java:

  1. El archivo de procesamiento por lotes se encarga de leer un fichero CSV con la descripción de las etiquetas, a modo de base de datos. Va componiendo una a una cada etiqueta y después las combina en varias páginas de 3 columnas y 8 filas. Para ello realiza llamadas a los programas por línea de comandos del paquete de software libre ImageMagick. Es una biblioteca de funciones para trabajar con imágenes, muy útil y popular, que suele utilizarse para generar miniaturas, previews, marcas de agua y muchos otros efectos en páginas web y programas.

    Etiqueta de muestra

    Etiqueta de muestra con datos falsos. Aunque la biblioteca ImageMagick es capaz de realizar muchos efectos visuales, esta apariencia era suficiente para el proyecto.

    Os dejo aquí el código del BAT por si tenéis interés. Está publicado como dominio público, así que podéis hacer con él lo que queráis, aunque estaría bien que dejárais un comentario por aquí si os resulta útil.

  2. Una vez generadas las páginas con etiquetas, es necesario imprimirlas. Debía hacerlo desde MS-DOS y de forma desatendida, es decir, sin mostrar ventanas de configuración de página e impresión. Estuve buscando en Internet algún programa que ya hiciera esto, pero tras un par de horas infructuosas decidí implementarlo yo mismo. Escogí Java porque ya lo conozco y he trabajado previamente con el IDE NetBeans, aunque de tener tiempo me hubiera gustado utilizar Python.

    Tuve que inspirarme un poco en los ejemplos que encontré por Internet, pero el resultado fue aceptable. El programa recibe por parámetros la imagen a imprimir, el nombre de la impresora a utilizar, y un fichero XML de configuración de página y trabajo de impresión. De esta forma el proceso queda desatendido, y pueden lanzarse cientos de trabajos sin intervención del usuario.

    Pego a continuación el código por si a alguien le interesara. ¡Dejad algún comentario si os resulta útil!

La aplicación ya está en producción y mi padre más feliz que una perdiz. :)

  • Facebook
  • Twitter
  • Google Plus
  • Delicious
  • Meneame
  • StumbleUpon