¿Dónde está la película mexicana que sería la competencia de Coco?

La película “Día de muertos” del estudio mexicano Metacube ha estado a la sombra de Coco desde que la película de Pixar fue anunciada. En lo que parece más una estrategia de publicidad, las menciones de esta película mexicana se multiplicaron después del anuncio de Coco. La película mexicana, con anterioridad prácticamente desconocida por el público en general, saltó a los reflectores en, lo que yo considero, la peor forma posible de hacerte publicidad.

Read More

Advertisements

Compilar waifu2x en Debian Stretch

[Advertencia:] Las instrucciones en este post no funcionan para tarjetas de video NVIDIA. Si tienes una tarjeta de video AMD, sigue leyendo.


Si la versión web de waifu2x no es suficiente para ti, puedes intentar compilar tu propia versión. En este post intentaré compilar uno de los forks de waifu2x para tarjetas de video AMD.

El repositorio oficial de waifu2x incluye código que está diseñado para funcionar usando la tecnología CUDA de NVIDIA, lo cual está indicado como un requisito, por lo que no puedo siquiera intentar compilar el código ya que tengo una vieja tarjeta de video AMD. Así que en lugar de usar el código original opté por uno de los forks que ofrecen soporte para tarjetas AMD, en particular el fork waifu2x-converter-cpp. Si eres usuario de Windows puedes bajar ejecutables precompilados desde la sección releases o puedes bajar waifu2x-caffe. En Linux, sin embargo, tenemos que compilar manualmente el código.

Read More

Waifu2x

waifu2x es un algoritmo para incrementar la resolución de imágenes lineart, artwork o estilo anime usando redes neuronales y deep learning. El resultado es sin duda mejor que cualquier otra alternativa que yo conozca. Ahora puedo convertir aquellos viejos mangas hentai descargados en los 90s y verlos en todo su esplendor 😛 .

SNAG-0003

Imagen original (402×642)

SNAG-0003_waifu2x_art_noise1_scale_tta_1

Imagen procesada por waifu2x (804×1284)

Ripear un DVD con FFmpeg usando named pipes, parte 2

En el post anterior usamos named pipes para ripear un DVD pero tal vez te estés preguntando por qué es necesario abrir dos ventanas de terminal. En realidad esa es sólo una forma de hacerlo. Verás, la consola de Linux es una caja de sorpresas. Si quieres ripear un DVD con el método descrito en los posts anteriores pero usando una sola ventana de terminal, puedes hacerlo de la siguiente manera.

Read More

Ripear un DVD con FFmpeg usando named pipes

En el post anterior escribí las instrucciones para ripear un DVD usando FFmpeg y este es el ejemplo perfecto para hablar sobre las named pipes de Linux. Las named pipes nos permiten enviar datos de una aplicación a otra. Muy probablemente has visto antes el carácter de pipe en Linux (‘|’) que cumple el mimso objetivo pero que en algunos casos puede ser difícil de usar si una de las aplicaciones no soporta entrada desde stdin, por ejemplo. Las named pipes pueden facilitar enviar datos de una aplicación a otra gracias a que las puedes usar simplemente como un archivo más, es decir, envías la salida de un programa a un archivo de tipo pipe y después usas ese archivo como la entrada para el otro programa.

Read More

Descarga -y comparte- la película The Man from Earth: Holocene

Los creadores de la película The Man from Earth: Holocene, secuela de The Man from Earth de 2007, han puesto la película disponible para su descarga usando bittorrent. Descarga y comparte la película y, si te gusta, puedes hacer una donación voluntaria a los creadores en la página oficial ManFromEarth.com.

The Man from Earth: Holocene puede ser descargada desde The Pirate Bay, en varios formatos y de forma legal, haciendo click aquí.

Ripear un DVD con FFmpeg

Cuando se trata de ripear un DVD con Linux, la forma más sencilla es tal vez usando Handbrake, que se puede instalar desde el gestor de paquetes. Entonces, ¿por qué querrías ripear un DVD usando FFmpeg? Bueno, en realidad tal vez no haya ninguna razón; si Handbrake funciona bien, ¡úsalo!. En este caso en particular, encontré una imagen de DVD que tenía problemas para ripear con Handbrake -sigue leyendo para descubrir cuál era el problema- así que decidí hacerlo a la antigua y usar FFmpeg.

Read More

Tarea de programación Java – Cantidad a números romanos

El código Java para esta tarea es prácticamente idéntico al código C del post anterior, sólo tenemos que ponerlo dentro de un método de una clase. En este caso podemos usar la clase TareasProgramación que ya hemos usado en posts anteriores.

public class TareasProgramacion {
    private static final String ROMANOS_UNIDADES[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    private static final String ROMANOS_DECENAS[]  = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    private static final String ROMANOS_CENTENAS[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    private static final String ROMANOS_MILES[]    = {"", "M", "MM", "MMM"};

    public static String cantidadNumerosRomanos(String s) {
        StringBuilder result = new StringBuilder();
        BigDecimal totalBigDecimal = new BigDecimal(s).setScale(2, BigDecimal.ROUND_DOWN);
        long parteEntera = totalBigDecimal.toBigInteger().longValue();

        if (parteEntera < 1 || parteEntera > 3999)
            throw new IllegalArgumentException("El número a convertir debe estar entre 1 y 3999.");

        int m = (int)parteEntera / 1000, c = (int)(parteEntera % 1000) / 100, d = (int)(parteEntera % 100) / 10, un = (int)parteEntera % 10;
        result.append(ROMANOS_MILES[m]);
        result.append(ROMANOS_CENTENAS[c]);
        result.append(ROMANOS_DECENAS[d]);
        result.append(ROMANOS_UNIDADES[un]);

        return result.toString();
    }
}

Una ejecución de un programa de prueba para el código anterior luce como la siguiente:

Escribe un número entre 1 y 3999: 
12
XII
Escribe un número entre 1 y 3999: 
1999
MCMXCIX
Escribe un número entre 1 y 3999: 
2018
MMXVIII
Escribe un número entre 1 y 3999: 
3888
MMMDCCCLXXXVIII
Escribe un número entre 1 y 3999: 
3999
MMMCMXCIX

Para obtener el código completo visita el repositorio de github de monstruosoft.

Tarea de programación C: Cantidad a números romanos

Una clásica tarea de programación, convertir una cantidad a números romanos. Normalmente verás esta tarea soportar valores en el rango de 1 a 3999 por obvias razones. Esta es la versión en lenguaje C, la versión Java en el siguiente post.

// Tarea de programación - Números romanos
#include <stdio.h>
#include <stdlib.h>

const char *miles[]    = {"", "M", "MM", "MMM"};
const char *cientos[]  = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const char *decenas[]  = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const char *unidades[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};

int main() {
    int a;

    printf("Escribe un numero entre 1 y 3999: ");
    scanf("%d", &a);

    if (a < 1 || a > 3999) {
        printf("Debes escribir un número entre 1 y 3999.\n");
        exit(0);
    }

    int m = a / 1000, c = (a % 1000) / 100, d = (a % 100) / 10, un = a % 10;
    printf("El número %d se escribe así en números romanos: %s%s%s%s\n",
            a, miles[m], cientos[c], decenas[d], unidades[un]);
}

 

En corto No. 7 – Librería Java RXTX en Debian Stretch

Después de actualizar a Debian Stretch descubrí que mis programas Java que usaban la librería RXTX ya no detectaban ningún puerto serial. En una más de esas ocasiones en que algo que funcionaba antes en Debian deja de funcionar cuando actualizas, tuve problemas tratando de averiguar cual era la causa. La mayor parte del tiempo, es difícil encontrar una solución que no sea críptica o que no requiera conocimientos avanzados de Linux (algo que un usuario normal nunca podría hacer sin ayuda de Internet) o simplemente la solución es difícil de encontrar si no sabes los términos correctos para usar en una búsqueda en Google.

Por suerte, en esta ocasión, la solución fue relativamente simple aunque no resulta obvia al inicio a pesar de que ahora que la encontré veo que tiene sentido. Para que la librería RXTX detecte correctamente los puertos seriales de la PC, el usuario debe tener permisos para acceder a dichos puertos. Para agregar los permisos correspondientes debes usar la ventana de Usuarios y Grupos y habilitar los permisos de usuario para Usar modems. Como alternativa, también puedes agregar al usuario al grupo dialout.

Después de hacer esto, la librería RXTX debería encontrar los puertos sin problemas.