• Monster Masins: La película

    Uno de los múltiples proyectos inacabados era hacer una película stop-motion. Las películas stop motion consisten en ir sacando fotografías, una detrás de otra, mientras vas moviendo poco a poco cada uno de los personajes o elementos que aparezcan en la escena (desde vehículos hasta árboles), para luego ponerlas una detrás de otra muy rápidamente para que las imágenes que capturen nuestras retinas sean procesadas por el cerebro como imágenes en movimiento.

    Fotograma de Monster Masins: La película

    Nuestra frecuencia de barrido de imágenes cerebral es de 24 imágenes o fotogramas por segundo. Si tomamos más imágenes/segundo (como hacen las televisiones más modernas), el movimiento nos parecerá más suave (aunque sin mucha mejora adicional), pero si nos quedamos cortos (por ejemplo, 10 frames/segundo) entonces nuestro cerebro procesará las imágenes y parecerá que los objetos van dando saltos en el espacio-tiempo.

    Esto implica que hacer una película de animación basada en stop motion sea complicado, ya que se requieren muchísimas imágenes en donde los objetos / personajes se muevan milimétricamente. Una vez realizadas las fotografías, puede ser que cada uno de los elementos que aparezcan en ellas se muevan o muy rápido (esto no tiene solución, quizá haciendo morphing entre fotogramas…) o muy despacio (esto tiene solución fácil, se reduce la duración de cada fotograma), lo que requiere un post-procesado adicional.

    Por tanto, y para hacer una película un poco en condiciones junto con Bruno, hemos tenido que tener en cuenta lo siguiente:

    • Las primeras pruebas de película no tienen que llevarnos varios meses. Tenemos que ser capaces de hacerlas en una mañana como mucho. Para ser exactos en menos de un par de horas, ya que es el tiempo en el que cualquier chico de 5 años es capaz de estar sin saltar, correr, gritar… en el mejor de los casos.
    • Como en ese tiempo no vamos a poder hacer muchas fotografías, vamos a ver si con 15 frames/segundo nos sobra… Al final veremos que no es que dé para muchos segundos de animación (aspecto a solucionar en Monster Masins 2: El retorno)
    • Igualmente, como es una prueba ni siquiera tiene un guión que enganche al espectador. Es más, ni siquiera tiene guión.
    • Tampoco tiene decorados. No nos ha dado tiempo a pintar ninguno.
    • Hemos decidido que en esta primera película de prueba no aparezca ningún muñeco / click de Playmobil. Son muy difíciles de mover poco a poco y que se mantengan estables sin caerse (lo que arruinaría la toma y haría que tuviéramos que volver a sacar muchas fotografías). En la próxima película seguro que ya aparece algún personaje con cabeza, piernas y brazos, pero en esta de momento sólo aparecerán vehículos.
    • Al principio íbamos a poner varios vehículos, pero visto que cuesta mucho irlos moviendo todos, sólo hemos animado dos de ellos.
    • El título lo tenía que poner Bruno. Monster Masins es porque quería que fuera de monstruos, y masins es una palabra que se ha inventado. Resulta que en tailandés significa muebles. Genial para un anuncio del IKEA. Los créditos de inicio y fin (que son los mismos) los ha escrito él letra a letra.
    • La música es Kongos - Come with me now, una de las canciones favoritas de Bruno. Como al final no nos ha salido la película tan larga como pensábamos, hemos tenido que alargar los créditos de fin y el título inicial para que sonara algo de música.

    Como medios / recursos disponibles que hemos utilizado son los siguientes:

    • Una cámara de fotos reflex con disparador a distancia (para evitar tocar la cámara y que se pueda mover de su sitio al pretar el botón de disparo), con su correspondiente tarjeta SD.
    • Cinco coches metálicos a escala.
    • KDEnlive como software de edición de vídeo (bajo Linux)
    • Youtube como plataforma para mostrar al mundo la película

    Asimismo, tenemos más ideas para la siguiente película:

    • Incluir decorados, e igual hasta algún efecto con croma
    • Incluir efectos de sonido. Se requiere un micrófono y creatividad para hacer sonidos con la boca o con objetos caseros como un vaso para hacer reverberaciones
    • Utilizar nuevos efectos de cámara en las persecuciones (como la cámara de Dios, o seguir los vehículos desde diferentes ángulos, saltos colgando de un hilo de pesca transparente, explosiones, zooms y desenfocados…)
    • Crear un guión previamente, con su storyboard
    • Incluir personajes humanos o animales

    Y ahora ya llega lo importante: Monster Masins: La película. Esperamos que os guste y que os dé tiempo a probar las palomitas de maíz…

  • PHP sucks

    Muchos desarrolladores, programadores e informáticos piensan, maldicen y gritan que PHP es el peor lenguaje de programación, y lo peor de todo es que intentan convencerte de lo mismo. Que si no es (era) lenguaje tipado, que si los nombres de funciones / métodos / clases dan risa, que si la gente que programa en PHP no tiene ni idea de programación, que si… Lo curioso de ello es que el 82% de los sitios web conocidos de Internet lo usan, y no son cualquier sitio (por ejemplo, Facebook, Twitter, Wikipedia, Baido, Weibo… con millones de visitas diarias cada uno de ellos). Pero claro, PHP es el peor lenguaje de programación… qué voy a saber yo.

    PHP

    Realmente PHP es un lenguaje de programación con muy mala fama. Su facilidad para hacer cosas sin tener ni idea de programación hace que cualquiera pueda programar algo y eso hace que haya mucho código en PHP que sea basura. Pero oye, que sin tener ni idea de programación tú y cualquiera puede programar algo que funcione, aunque sea basura el código escrito. Otros lenguajes (Java, C#, C++, Go, node.js…) igual te permiten hacer cosas de forma más eficiente, e igual de forma más ordenada, e igual con estructuras más bonitas o ajustadas para lo que tienes que hacer… pero claro, sólo si sabes cómo hacerlo. Y lo que te pueden facilitar para realizar ciertas tareas otros lenguajes quizá te estén introduciendo complejidad adicional en otros aspectos o partes del código.

    Realmente los lenguajes de programación ni son buenos ni son malos. He visto código en Java, Python, Perl… que da vergüenza ajena. Y código que ha sido escrito por gente respetable. Pero oye, que como no es PHP todo es maravilloso. Pero ojo desarrolles algo útil en PHP o en un lenguaje que no esté de moda (p.e. node.js), que te echarán los perros encima.

    Lo realmente importante es poder hacer y desarrollar cosas. Da igual el lenguaje de programación que utilices siempre y cuando consigas desarrollar lo que quieres desarrollar. A mi personalmente sí me gusta PHP, a pesar que tiene muchas cosas muy mejorables (al igual que el resto de lenguajes también tienen cosas muy mejorables):

    • Tiene una gran comunidad detrás: Hay muchos desarrolladores de los que aprender, mucho código disponible para desarrollar prácticamente cualquier cosa.
    • No es un lenguaje de programación hype: Muchos desarrolladores eligen lenguajes de programación porque están de moda ese mes. A los dos años muchos de esos lenguajes ya no existen o apenas tienen repercusión y dejan de evolucionar.
    • Es muy fácil de aprender. Sí, esto hace que cualquiera puede programar en PHP, aun sin tener ni idea de cómo organizar su código o utilizar los mecanismos que el propio lenguaje te ofrece.
    • Cualquiera puede programar en PHP. Hay una gran cantidad de recursos en la web, la mayor parte libres, que permiten aprender y realizar aplicaciones asombrosas.
    • Es un lenguaje que ha evolucionado mucho en los últimos años: Cada nueva versión ofrece nuevos artefactos ya disponibles en otros lenguajes más modernos y fabulosos.

    Así que mi consejo de hoy es: No dejes que nadie te diga lo que puedes o no puedes hacer. Piensa por ti mismo. Elige lo que creas más conveniente.

    UPDATE 2017-08-23

    Si vas a programar en cualquier cosa, utiliza buenas herramientas (desde pantallas, teclados, ordenadores… hasta el IDE de programación). Si tienes que programar en PHP, invierte dinero en un IDE como PHPStorm. Tu salud mental lo agradecerá y quizá PHP ya no te parezca tan mal lenguaje de programación.

  • 3D

    Una de las cosas que tenía ganas de hacer desde que mi amigo César (¡hola!) me enseñó lo que era capaz de hacer con la impresión 3D y me recomendó el libro Makers de Chris Anderson es aprender a diseñar cosas en 3D (para luego imprimirlas y poder hacer algún invento que otro).

    Openscad

    Programar estos objetos 3D es bastante sencillo, al menos utilizando openscad (que además está disponible para Linux / Windows / Mac de forma gratuita). De momento he programado unos par de objetos bastante sencillos (un dado, y una caja con tapa…), pero con tiempo y paciencia se puede diseñar prácticamente cualquier cosa (sólo hay que visitar Thingiverse.com en cualquiera de sus galerías para ver lo que es capaz de hacer la gente).

    En el fondo, es ir indicando si quieres un cubo, una esfera, un cilindro, un texto, otros objetos importados, etc… para luego trasladarlos en el espacio, rotarlos, escalarlos, y empezar a combinar estos elementos anteriormente creados (uniéndolos, restándolos para quitar material, o interseccionándolos). Asimismo, se puede programar para hacer cosas en lote (por ejemplo, hacer 10 agujeros en una sola línea, en vez de hacerlo 10 veces…), y un montón de cosas más (solo hay que ver el cheatsheet con las funciones y opciones disponibles en openscad)

    Por ejemplo, para diseñar un cubo de tareas para ver a quién le toca hacer cosas, basta con escribir el siguiente código en nuestro fichero .scad:

    // Usamos una fuente de texto a medida (tiene que ser TTF y estar en el mismo directorio que este fichero .scad)
    use <Play-Bold.ttf>;
    text_font="Play:style=Bold";
    lado = 24; // En mm
    
    lado_inner = lado * 0.8; // Lado interior del cubo (vamos a quitar material interior para que sea dado más barato)
    radio = lado / 2;
    text_depth = 2;
    text_width = lado / 1.4;
    
    // Definimos los textos de cada una de las 6 caras (no tocar resto de coordenadas de rotación)
    array_text = [[0,0,0, "Bruno"], [0,90,0, "Martina"], [0,180,0,"Jorge"], [0,270,0,"Sonia"], [0,90,90,"Todos"], [0,90,270,"Nadie"] ];
    
    // Vamos a crear varios objetos y los vamos a restar (difference) entre sí para quitar material,
    // de manera que queden los textos como si estuvieran cincelados en cada cara del cubo
    difference() {
        // Creamos el cubo. Interseccionamos un cubo y una esfera para 
        // que los vértices del cubo sean "redondeados"
        intersection() {
            cube( lado, center=true);
            sphere( d=lado*1.5 );
        }
        
        // Eliminamos parte interior del cubo para gastar menos material 
        // (haciendo diferencia entre cubo anterior y este más pequeño)
        intersection() {
            cube( lado_inner, center=true);
            sphere( d=lado_inner*1.5 );
        }
    
        // Textos de cada cara, de forma programática. Hay que rotar el texto (para cada cara), 
        // trasladarlo a la cara que le corresponda, hacerlo profundo y cambiarle el tamaño,
        // de manera que al hacer la diferencia entre estos textos y el resto de objetos queden
        // como cincelados en cada cara
        for(i_text=array_text)
            rotate( [i_text[0],  i_text[1], i_text[2]] )
                translate( [radio - text_depth* 2 ,text_depth * 2, radio - text_depth] )
                    linear_extrude(height = ( text_depth * 1.1 )) 
                        resize(newsize=[ text_width ,  text_width / 3, text_width  ] )
                            text(i_text[3], font = text_font, halign = "right" , valign = "top" );
    } 
    

    Una vez creado, se puede renderizar y exportar el objeto creado a un fichero STL. Estos ficheros se pueden compartir en Thingiverse.com, a la vez que desde esa plataforma puedes descargar otros modelos creados por otros usuarios, modificarlos, compartirlos de nuevo, combinarlos y aprender de ellos. Mis diseños los puedes encontrar (los que llevo hasta el momento y los que vaya haciendo) en mi perfil de Thingiverse.com

    En el caso de no tener impresora 3D, podemos subir nuestros ficheros generados a la plataforma 3D HUBS, en donde podremos encontrar un listado de precios de tiendas, laboratorios y gente que por un módico precio (o no tan módico, según los materiales escogidos) te lo imprimirán y te lo enviarán a tu casa.

    Si sí que tienes una impresora 3D, una vez hayas generado el fichero STL tendrás que convertirlo a formato gcode (que es el formato que reconocen las impresoras de este tipo para saber en cada coordenada X, Y, Z del espacio la cantidad de material que tiene que utilizar). Para ello, utilizamos uno de los muchos programas que existen para tal efecto, como puede ser Cura. Tras seleccionar nuestra impresora y las diferentes opciones de impresión (de forma que podamos ahorrar material, etc…), podremos enviar a la impresora nuestro objeto, y lo imprimirá. En este punto, solo hay que armarse de paciencia porque según el diseño y la impresora le puede costar varias horas…

    Actualización 2017-01-09

    Ya he recibido un dado que diseñó Bruno. Este modelo se puede descargar desde mi perfil de Thingiverse.com

    Dado emoticonos

    Actualización 2017-02-15

    En ITERNOVA hemos adquirido una impresora 3D para hacer pequeños prototipos, y de paso aprender un poco más sobre la fabricación de productos y el uso de dichos dispositivos. De momento, hemos creado varios complementos para la propia impresora (robots fabricándose a sí mismos), y una caja para encapsular un Arduino / estación meteorológica. La estación meteorológica está ahora mismo situada en el municipio de Las Pedrosas.