Ya disponible en papel

Ayer comentaba sobre el libro “De los que creían en la felicidad”, mi primer novela corta (O cuento, dependiendo como lo cataloguemos), y su salida en formato electrónico para Kindle.

Hoy ya está disponible la versión en papel. Existen varios sitios dentro de la red de Amazon los que proponen diferentes tarifas, tanto en el valor del libro como en el envío.

Si quieres la versión para Kindle, entrá aquí.

Para adquirir una copia en papel desde CreateSpace, entra aquí.

Para hacerlo desde Amazon, aquí.


Libro–De los que creían en la felicidad

Tapa

En el 2013, en medio de un viaje por las sierras de Córdoba, mientras filosofábamos en el auto, decidí explicarle a mi familia una idea que tenía dando vueltas en mi cabeza. Idea que tocaba el tema que discutíamos y que de alguna forma reflejaba mi visión sobre algunos hechos pasados y posiblemente, futuros.

En ese momento fue cuando dije: Tengo que escribirlo, pero como contando un cuento.

Claro, me tomó bastante poder arrancar. Hacía años que no escribía algo literario. Si bien había publicado un par de libros, todo se limitaba a instrucciones de computadora, con poca creatividad.

Debo haber mirado el documento en blanco durante tres o cuatro meses. Escribía algo y lo borraba. No había forma de encontrar las palabras para arrancar.

Al mismo tiempo, leyendo las sugerencias de autores y editores por medio de sus libros, descartando aquellas que me resultaban poco interesantes, tomando otras.

Al final, y mientras volvía a leer obras de los grandes escritores contemporáneos, opté por escribir de la forma en que a mí me gustaría leer. Posiblemente se transformaría en una novela para mí, pero no fue el caso. Por el contrario, se transformó en mi forma de transmitir algo por medio del texto, mi forma de contar una historia.

Luego de un año de trabajo, con períodos de cortes, semanas sin tocar nada, o días detrás de un solo párrafo, en Diciembre de 2013 terminé el borrador.

Mi meta era costear el valor de la impresión de unos 200 ejemplares, ya que como escritor novato, el camino para conseguir que una editorial te mire es tortuoso. Decidí entonces recaudar mediante un sistema de Crowdfunding (Interés de la comunidad en el proyecto), pero solo llegó al 20% de lo esperado. Cosas que pasan.

Con el libro sin corregir aún, me contacté con varias editoriales. Algunas ni siquiera me devolvieron el mail diciendo: – No gracias – Incluso un: – Esto es un asco – Hubiese ayudado mucho. Otras, simplemente dijeron: – Nos interesa – Pero nunca más se contactaron.

Al final, me di cuenta que la mejor forma de saber si lo escrito resultaba interesante para alguien y si tenía sentido seguir con esto o archivarlo en algún disco duro externo y olvidarme del asunto, era dárselo a leer a aquellos que me habían dado el soporte desde el principio.

Con sus respuestas entendí que tenía sentido seguir adelante, así que esperé un poco más a alguna que otra editorial. Esto hizo que se retrase todo, dos meses. Pero nuevamente el “Sí, nos interesa, ya te vamos a contactar” de varias terminó, en mi cabeza, por ser un “No nos molestes”.

Así es que anoche, terminando de editar, arreglar, crear tapas, controlar errores, el trabajo de más de un año fue publicado en Amazon.

Como escritor, el deseo es que el libro sea leído. Y como escritor, por lo menos en mi caso, es que este libro sea leído por todos, claramente no me interesa lucrar con el mismo. Lamentablemente Amazon espera unos valores mínimos por los servicios que brinda, por lo que no hay chances de no desembolsar algo. Pero siempre habrá alguna forma de conseguir el mismo de forma gratuita.

Ahora sí. Si te interesa saber que hay dentro de “De los que creían en la felicidad”, entra a la tienda de Amazon.

 

Si tienes un Kindle, puedes conseguirlo aquí: http://www.amazon.com/dp/B00JOYWDS0

La versión impresa estará disponile en unos días.

 

Matías Iacono


jsGFwk se va a Windows Phone 8

austin

jsGFwk sigue creciendo, evolucionando. Ahora, de la mano de Windows Phone 8 y el soporte que brinda sobre HTML5, sumado a que ya contamos con plantillas de desarrollo con un navegador embebido, crear juegos para el celular escribiendo en JavaScript y con jsGFwk resulta muy fácil.

Veamos, entonces, los pasos que necesitamos para poder crear un juego en Windows Phone 8.

Leer el resto de esta entrada »


Blog de la materia Programación III

Como una propuesta dentro del curso que doy en UTN. Los alumnos han comenzado un blog donde irán publicando diferentes trabajos y tareas.

Para ver el blog: http://prog3news.wordpress.com/


Lista de video juegos

Hace tiempo que vengo creando diferentes video juegos. Bastánte simples debo reconocer, pero algunos han sido muy interesantes y atrapantes.

Por lo tanto, he creado una sección en el blog donde colocaré todos los juegos que vaya creando para que puedan ser jugados online, y así no tengan que navegar por los post para poder verlos.

Si quieres jugar a estos juegos: http://miacono.wordpress.com/juegos-creados/


Optimización de código–Parte II

Continuando con el post anterior, vamos a ver un par de soluciones. Por supuesto, estas aplican principalmente a JavaScript y su forma de trabajo. Tal vez, otros lenguajes requieran de otro acercamiento, lo que nos lleva una cuestión crucial: Necesitamos saber cómo usar el lenguaje.

Si lo anterior no lo tenemos, o sea, si no conocemos el lenguaje que usamos, es posible que estemos haciendo código para resolver tareas cuando ya existe una solución para ese caso.

Un ejemplo muy simple puede ser lo siguiente:

var r;
var a = 10;
var b = 11;
if (a < b) {
   r = a;
} else {
   r = b;
}
console.log(“El número menor es: “ + r);

El código anterior puede ser reducido muy fácilmente:

var a = 10;
var b = 11;
var r = Math.min(a, b);
console.log(“El número menor es: “ + r);

Lo importante es entender que no reducimos código quitando variables o quitando líneas en blanco. El código se reduce bajando la cantidad de ciclos o procesos de análisis que se tienen que hacer para ejecutar determinada tarea. Y si bien remover variables u objetos no utilizados ayuda y siempre que podamos deberemos hacerlo, hablamos principalmente de que tan óptimo es nuestro código.

Pero retomemos el desafío original. Algunas de las propuestas que me llegaron se centraron en la reducción de variables, y la ejecución de código en una sola línea. Esto es, ahorrar la asignación de datos de una variable a la otra. Esto claramente aumenta la performance de nuestro código. Evitar el ida y vuelta a la memoria, el boxing y unboxing (Si fuese aplicable), mejorará el funcionamiento.

Un ejemplo:

this.doTask = function (v) {
    return (stack.pop())(v);
};

En este caso, al momento de quitar un elemento de la pila, en vez de asignarlo a una variable y luego ejecutar la función, se hace todo en un solo paso (Quitar, ejecutar, retornar resultado de ejecución).

Nos ahorramos una variable, un par de asignaciones (Idas y vueltas). Una mejora interesante.

Pero aún podemos compactar más el código. Veamos otro ejemplo:

function worker2() {
    var self = this;
    var stack = [];
    this.addToStack = function (f) {
        stack.push(f);
    };
    this.canUnStack = function () {
        return (self.doTask = stack.pop());
    };   
    this.doTask = function () {    };
}

Como decía antes, puede que solo sea aplicable a JavaScript o lenguajes similares, de cualquier manera, vemos que este código elimina absolutamente el código de la función doTask, e incluso compacta (Brutalmente) el código de canUnStack.

Ahora canUnStack se encarga de quitar elementos de la pila de funciones y modificar la referencia devuelta a la función doTask. Con esto, el programador estaría ejecutando la función específica cada vez que llama a doTask, y no ejecutando un proceso intermedio de selección. También, la asignación, quitado de la pila y verificación de si puede o no quitar elementos de la misma, se hace en un solo paso dentro de canUnStack.

Para comprobar que efectivamente hubo una mejora, usé JsLitmus a modo de prueba. Donde el primer test prueba el código optimizado, y el segundo prueba el código sin optimizar.

Untitled

Si bien JsLitmus tiene sus cosas y podemos dudar un poco de los resultados, la diferencia en operaciones realizadas por segundo es abrumadora.

En resumen: Optimizar el código siempre será una buena práctica. Conocer el lenguaje que utilizan, otra.


Optimización de código

Uno de los temas principales que siempre abordo cuando doy clases de desarrollo de software, es el de forzarnos a nosotros, como programadores, a buscar la forma más óptima de crear código.

Y si bien esto aplica a todas las áreas de desarrollo, en el caso de video juegos es crucial. De hecho, es tan crucial que unas líneas equivocadas pueden hacer que perdamos 1 o 2 FPs, algo que podría ser usado para colocar más objetos en pantalla, mejores texturas o simplemente tener animaciones más fluidas.

Pero, como decía, si bien en video juegos se puede ver fácilmente la diferencia, no es excluyente de ellos. Un código compacto, depurado, limpio, puede también hacer que su tamaño decrezca.

Así es como llegamos a un ejemplo que, entre conceptos de TDD y algo de programación intermedia en JavaScript, necesitamos resolver.

var w = new worker();
w.addToStack(function () { return 10; });
w.addToStack(function (val) { return val; });
w.addToStack(function (val) { return val – 10; });

var counter = 20;

while (w.canUnStack()) {   
    var result = w.doTask(counter);
    counter = result;
   
    if (result !== 10) {
        console.log(‘Test fail’);
        break;
    }
}

El código anterior representa un hipotético caso de pruebas para un objeto que deberemos crear. La tarea es simple: Crear la “clase” worker.

No es difícil darse a la tarea de su construcción. Una primera versión podría ser similar a la siguiente:

function worker() {
    var self = this;
    var stack = [];

    this.addToStack = function (f) {
        stack.push(f);
    };

    this.canUnStack = function () {
        return stack.length > 0;
    };
   
    this.doTask = function (v) {
        var f = stack.pop();
        return f(v);
    };
}

Como vemos, algunas funciones y poco código. Pero la pregunta que debemos hacernos es si este código es realmente óptimo. Por lo que la siguiente tarea será intentar reducir más aún el mismo, no solo por cuestiones de ahorrarnos líneas, si no, con el objetivo de hacerlo más óptimo.

En el siguiente post mostraré una posible solución, y las diferencias de velocidad entre este código y su versión optimizada.

Si aceptas el desafío, deja tus respuestas en los comentarios.


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 368 seguidores