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í.

Advertisements

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.

Instalar VirtualBox en Debian Stretch

VirtualBox ya no está disponible en el repositorio estable de Debian Stretch debido a que no cumple con las políticas de Debian, sin embargo aún es posible instalarlo desde el repositorio de backports o bien desde el propio repositorio de virtualbox.org. Para agregar el repositorio de virtualbox.org a la lista de repositorios de Debian debemos agregar la siguiente línea al archivo /etc/apt/sources.list.d o bien agregarlo a la lista de repositorios del gestor de paquetes:

deb http://download.virtualbox.org/virtualbox/debian stretch contrib

A continuación descarga y registra el archivo de firma digital que permitirá que apt-get use el repositorio de virtualbox.org:

monstruosoft@debian:~$ wget https://www.virtualbox.org/download/oracle_vbox_2016.asc
--2017-12-15 19:39:16--  https://www.virtualbox.org/download/oracle_vbox_2016.asc
Resolving www.virtualbox.org (www.virtualbox.org)... 137.254.60.32
Connecting to www.virtualbox.org (www.virtualbox.org)|137.254.60.32|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3157 (3.1K) [text/plain]
Saving to: ‘oracle_vbox_2016.asc’

oracle_vbox_2016.as 100%[===================>]   3.08K  18.6KB/s    in 0.2s    

2017-12-15 19:39:19 (18.6 KB/s) - ‘oracle_vbox_2016.asc’ saved [3157/3157]

monstruosoft@debian:~$ sudo apt-key add oracle_vbox_2016.asc 
[sudo] password for monstruosoft: 
OK

Ahora podemos actualizar la lista de paquetes e instalar VirtualBox desde el gestor de paquetes o usando apt-get como se muestra a continuación:

monstruosoft@debian:~$ sudo apt-get update
Get:1 http://download.virtualbox.org/virtualbox/debian stretch InRelease [7,782 B]
Ign:2 http://ftp.us.debian.org/debian stretch InRelease                        
Hit:3 http://security.debian.org/debian-security stretch/updates InRelease     
Hit:4 http://ftp.us.debian.org/debian stretch-updates InRelease                
Get:5 http://download.virtualbox.org/virtualbox/debian stretch/contrib i386 Packages [1,722 B]
Hit:6 http://ftp.us.debian.org/debian stretch Release                
Get:8 http://download.virtualbox.org/virtualbox/debian stretch/contrib amd64 Packages [1,722 B]
Fetched 11.2 kB in 4s (2,666 B/s)   
Reading package lists... Done
monstruosoft@debian:~$ sudo apt-get install virtualbox-5.2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libqt5opengl5 libqt5printsupport5 linux-compiler-gcc-6-x86
  linux-headers-4.9.0-4-amd64 linux-headers-4.9.0-4-common linux-headers-amd64
  linux-kbuild-4.9
Recommended packages:
  linux-image
The following NEW packages will be installed:
  libqt5opengl5 libqt5printsupport5 linux-compiler-gcc-6-x86
  linux-headers-4.9.0-4-amd64 linux-headers-4.9.0-4-common linux-headers-amd64
  linux-kbuild-4.9 virtualbox-5.2
0 upgraded, 8 newly installed, 0 to remove and 52 not upgraded.
Need to get 79.1 MB of archives.
After this operation, 222 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
...

Montar una carpeta compartida de Windows

Si tienes una carpeta compartida en Windows y la quieres montar en Debian Stretch, la forma más fácil es instalar el paquete cifs-utils desde el gestor de paquetes. cifs-utils contiene las utilidades necesarias para montar facilmente recursos compartidos en una red. Una vez instalado, puedes montar una carpeta compartida de Windows usando el comando mount. Por ejemplo, suponiendo que 10.128.0.69 es la IP de la PC con Windows, y Documentos es el nombre de la carpeta compartida en Windows, podemos montar la carpeta en Linux usando el siguiente comando:

monstruosoft@debian:~$ sudo mount -t cifs "//10.128.0.69/Documentos" ~/destino/ -o username="nombre-de-usuario-de-windows"
Password for nombre-de-usuario-de-windows@//10.128.0.69/Documentos:  ******

En Debian, solamente se puede usar el comando mount como root o sudo, así que es probable que tengas que especificar tu id de usuario si quieres tener permisos de escritura en la carpeta compartida, por ejemplo:

monstruosoft@debian:~$ id
uid=1000(monstruosoft) gid=1000(monstruosoft) groups=1000(monstruosoft),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev),114(lpadmin),118(scanner)
monstruosoft@debian:~$ sudo mount -t cifs "//10.128.0.69/Documentos" ~/destino/ -o username="nombre-de-usuario-de-windows",uid=1000,gid=1000
Password for nombre-de-usuario-de-windows@//10.128.0.69/Documentos:  ******

Para desmontar la carpeta compartida simplemente usamos el comando umount:

monstruosoft@debian:~$ sudo umount ~/destino

Instalar Allegro 4 y Allegro 5 en Debian Stretch

En posts anteriores explicaba la forma de compilar Allegro en Debian Jessie debido a que las versiones de Allegro en el repositorio estable de Debian Jessie eran considerablemente viejas pero ese ya no es el caso en Debian Stretch que cuenta en el repositorio estable con la versión 4.4 y 5.2 de Allegro por lo que podemos simplemente instalar los paquetes de Allegro, liballegro4-dev y liballegro5-dev, desde el gestor de paquetes. También puedes instalar desde el gestor de paquetes otros paquetes relacionados con Allegro como por ejemplo libloadpng4-dev, libjpgalleg4-dev, liballeggl4-dev, y los addons de Allegro 5, liballegro-*-dev.

Por supuesto, si quieres usar la versión más reciente de Allegro 5 aún puedes compilarlo manualmente usando las instrucciones publicadas anteriormente en el blog.