lunes, 10 de agosto de 2009

Unir archivos PDF

Hoy en la mañana necesitaba imprimir varios archivos PDF en secuencia. Puesto que tenía que hacer otras cosas más importantes, le pedí ayuda a la secretaria para que me los imprimiera. Lo que tenía que hacer era imprimir todos los archivos en orden, mientras yo hacía otras cosas más trascendentales. Tristemente, se rehusó. Así que me dispuse a encontrar alguna manera de hacerlo yo, y ahorrar tiempo.

Lo que encontré fue el paquete pdftk (PDF ToolKit) que permite unir archivos PDF y mucho más. Lo instalé (afortunadamente está en los repositorios de mi distribución de GNU/Linux), lo ejecuté para unir todos los archivos PDF que necesitaba imprimir y simplemente mandé a imprimir ese archivo. Eso satisfizo mi necesidad.

viernes, 1 de mayo de 2009

El lado capitalista de ubuntu

Por favor, lean El lado oscuro de Ubuntu antes de continuar aquí...

Mi experiencia:
Hace ya bastante tiempo probé a usar ubuntu en su live-cd pero la descarté casi de inmediato. Era la versión 7.10 creo, y me disgustó mucho la manipulación del usuario root, que es, sinceramente, bien rara respecto de las demás distribuciones. Además, estaba prejuiciado porque tenía la idea que era Linux para idiotas (y aunque yo no sabía mucho, no me consideraba un idiota). Así que dejé de prestarle atención.

Sin embargo, desde hace un tiempo para acá, me volví usuario de ubuntu (en particular de la versión 8.04) por varias razones:
.- El atractivo aspecto del gnome que trae por defecto (nunca había visto el gnome con dos páneles) me impactó. Me parece mucho más agradable que el escritorio kde 3.5.
.- El soporte para diversos tipos de hardware es súper fácil de usar (hasta entonces, había tenido problemas hasta para conectar discos duros externos y no hablemos de otros tipos de dispositivos).
.- Trae instalado por defecto una aplicación que es para mí, indispensable: scim, que es una aplicación para poder escribir en otros alfabetos sin tener que cambiar la configuración del teclado a nivel de sistema operativo (yo suelo escribir mucho en Esperanto y me gusta jugar con el alfabeto cirílico). En otra distribución de linux, logré instalarla pero quedó con un comportamiento muy extraño, en particular al usarla con openoffice.org, lo cual para mí, fue inaceptable.
.- La extensa documentación que hay en internet resuelve casi todos los problemas y/o dudas que uno pueda tener (aunque hay que reconocer que la mayoría de los post de ayuda son del tipo no preguntes por qué, sólo hazlo).
.- Todo el software (todos los paquetes) que he llegado a necesitar, está en los repositorios (eso incluye los códigos de Esperanto para scim, virtualbox ose, bibliotecas de funciones gráficas para c, python y otros lenguajes, toda clase de editores de código fuente, compiz, emuladores de todo tipo, incluyendo emuladores de hardware, servidores de todo tipo, además de los controladores bluetooth del wiimote).
.- La mecánica de actualizaciones menores es sencilla y sin dolor (si se tiene algo mejor que un pentium 4, claro), en comparación con la horrorosa, molesta y estúpida mecánica de otras distribuciones como openSuSE o Fedora.

He encontrado, por supuesto, algunas cosas desagradables:
.- Hay aplicaciones que de veras no funcionan (ni siquiera arrancan y no dan ningún mensaje de error), igual que en otras distribuciones GNU/Linux. Aunque se trata de aplicaciones no soportadas por Canonical.
.- Es bastante complicado actualizar aplicaciones hacia versiones todavía no incluídas en los repositorios (es difícil tener la última versión de todo lo que uno quiere). No me han dado conflictos serios, pero me queda la sensación que el sistema se queda parcheado y que puede colapsar en cualquier momento.
.- Las actualizaciones hacia nuevas versiones de la distribución a veces no funcionan bien. Quedan medio malosas (una vez, incluso se me arruinó el administrador de ventanas tras una actualización de la 8.04 a la 8.10), por lo cual, tuve que volver a instalar todo de cero.
.- Una vez instalé (por probar) un nucleo de servidor en una instalación de escritorio, y me estropeó la configuración gráfica, del escritorio y de la resolución. Desinstalé el nucleo en cuestión pero todo quedó estropeado. No lo pude arreglar, así que tuve que reinstalar.
.- Efectivamente no corre aceptablemente en máquinas con algo como Pentium 4 con 256MB de RAM, y con menos que eso es impensable que funcione.

Mi opinión:
Ciertamente hay que evitar, a toda costa, caer en el posible monopolio que se vislumbra en el artículo del que puse el enlace al principio de este post. Pero eso no significa que hay que usar sólo distribuciones en las que hay que compilar manualmente cada cosa queramos usar.

Esas distribuciones tienen su lugar, al igual que las distribuciones orientadas al escritorio, orientadas a hacerle la vida simple al usuario normal (que no sabe practicamente nada de computación). Estas últimas también pueden ser muy apreciadas por usuarios informáticos que no se dedican a administración de sistemas. A los que se dedican a programación de alto nivel, no les interesa el funcionamiento interno del S.O., sólo les interesa que las herramientas que están usando sean libres y que funcionen (que no haya que pasar días enteros haciendo funcionar una instalación).

Obligar a todos los usuarios a aprender a configurar manualmente todos los componentes del S.O. es un error. La única manera de difundir ampliamente el uso de sistemas GNU/Linux es disminuir la cantidad de conocimientos técnicos necesarios para su uso y administración (obviamente también hay que hacer trabajo de concientización). Afirmo esto, puesto que la mayoría de usuarios de computadoras no son técnicamente competentes.

Por otro lado, aquellos que sí somos técnicamente competentes, tenemos la responsabilidad de llegar más al fondo, de aprender todo lo que podamos para poder ofrecer soluciones más eficientes.

Mi conclusión:
  1. Voy a seguir usando ubuntu por la simplicidad de uso que implica para mí, como usuario de computadoras; pero voy a permanecer al tanto de otras distribuciones o nuevas versiones de las que ya conozco, para no quedarme amarrado a Canonical Inc. y migraré cuando lo considere conveniente.
  2. Voy a seguir aprendiendo todo lo que pueda acerca de la configuración manual del sistema en varias distribuciones, según el tiempo, para depender cada vez menos de los entornos gráficos.

...
Estas son algunas distribuciones alternativas muy parecidas a ubuntu ya que también se basan en debian:
http://www.redstarlinux.com.ar/
http://www.ututo.org/
http://www.linex.org/
http://www.gnewsense.org/
...

Redirección de puertos con virtualbox

Una característica más que me encanta de VirtualBox es la siguiente: Uno puede ejecutar aplicaciones servidor en las máquinas virtuales y dar la ilusión de que se ejecutan en la máquina anfitrión.

Para hacerlo, procedemos de la siguiente manera:
.- Primero debemos tener clara la siguiente información:
  1. Si el protocolo a usar es TCP o UDP (protocolo)
  2. El nombre de la máquina virtual (nombre_mv)
  3. El puerto huésped (puerto_huésped)
  4. El puerto anfitrión (debe ser mayor que 80 si no se ejecuta como root) (puerto_anfitrión)
.- También hay que elegir un nombre descriptivo para la redirección (nombre_redirección)
.- Ejecutamos los siguientes comandos en consola:
$ VBoxManage setextradata "nombre_mv" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/nombre_redirección/Protocol" protocolo

$ VBoxManage setextradata "
nombre_mv" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/nombre_redirección/GuestPort" puerto_huésped

$ VBoxManage setextradata "
nombre_mv" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/nombre_redirección/HostPort" puerto_anfitrión

.- Luego se reinicia la máquina virtual (el huésped).

Una vez hecho esto, se pueden acceder a los servicios proporcionados por el huésped desde su puerto indicado, a través de la máquina base (el anfitrión) desde el puerto especificado. Recuérdese que por defecto las máquinas virtuales son invisibles desde la red en la que está la máquina base.

Para consultar las redirecciones agregadas a una máquina virtual, ejecutamos:
$ VBoxManage getextradata "nombre_mv" enumerate

Para mayor información, refiérase a los siguientes posts (o a la documentación oficial de Virtualbox en su página de descargas):
post 1
post 2
post 3

La utilidad que tiene esto es muy alta. Puede servir para muchas cosas; desde hacer pruebas de instalación y configuración de aplicaciones servidor sin poner en riezgo la instalación base; hasta para instalar un servidor virtual que puede responder normalmente a las peticiones de red, al que se le pueden hacer copias de respaldo simplemente copiando un archivo (el .vdi) y al que se le pueden tomar snapshots (y eventualmente revertirlas) para disminuir significativamente los efectos de cometer un error en la configuración.
-

sábado, 17 de enero de 2009

De .mov a .avi y Partir archivos .avi

Desde hace varios meses tenía que subir a internet unos videos de un viaje que hice. Logré subirlos casi todos, pero me topé con el problema de que youtube tiene dos restricciones sobre los archivos (a parte de las restricciones de formato): No pueden ser de más de 1GB y no pueden durar más de 10min. Y lamentablemente, algunos de los videos que tenía que subir, no cumplian con tales requisitos, por lo que tuve que posponer su subida hasta que encontrara una solución.

Nunca he sido muy diestro (porque nunca lo he necesitado) con lo que tiene que ver con multimedia, pero sí sé que hay muchos editores que podría haber usado en Windows (craqueados, por supuesto)... sin embargo, desde que migré completamente a GNU/Linux, me he empecinado en no tomar el sendero ancho (o sea en windows) sino en buscar una solución viable en el mundo del software libre.

Pasé un buen rato buscando, leyendo y probando, y finalmente encontré una solución con software libre en GNU/Linux: mencoder.

Pueden encontrar las instrucciones de partido de archivos avi en wikipedia y en este blog.

No sé si es que no tengo los codecs necesarios en mi máquina, pero no pude partir con esta herramienta archivos .mov, por lo que primero tuve que cambiarlos de formato. Eso lo logré así:
$ mencoder video.mov -o video.avi -ovc lavc -oac mp3lame

-ovc significa Output Video Codec y -oac es Output Audio Codec.

miércoles, 14 de enero de 2009

Carpetas compartidas en virtualbox

Ya llevo bastante rato trabajando con virtualbox, y he aprendido un montón de cosas interesantes, como la redirección de puertos TCP entre máquina huésped y máquina anfitrión, la manipulación remota de máquinas virtuales, etc.

La compartición de carpetas entre huésped y anfitrión es algo muy simple de configurar del lado de la máquina anfitrión (al menos con la interfaz gráfica por defecto), sin embargo, no es tan obvio del lado de la máquina huésped.

En el caso de un huésped windows xp, basta con seguir un par de indicaciones:
Se hace clic derecho en la opción Mis sitios de red del menú inicio (o donde sea que aparezca). Se elige la opción Conectar a unidad de red... del menú contextual. Se asigna una letra para la nueva unidad y se hace clic en explorar... . Luego, se despliega el grupo Virtualbox Shared Folders y se elige la deseada. Se acepta y ya.

Desde hace mucho tiempo me había propuesto averiguar cómo hacerlo con los GNU/Linux que tengo virtualizados, pero no me había quedado chance de hacerlo. Finalmente lo encontré:

Simplemente se monta como un sistema de archivos especial de virtualbox:
# mount -t vboxsf nombre_de_carpeta_compartida /punto/de/montaje
(Nota: para que exista el tipo de sistema de archivos vboxsf es necesario haber instalado los Guest Additions en el sistema huésped)

El nombre de la carpeta compartida es el nombre que se indica en la interfaz gráfica de virtualbox.

Yo pensaba que tenía que conectarse por samba... lo cual no domino todavía. Pero afortunadamente estaba equivocado. Luego explico lo de la redirección de puertos...

¿Cómo saber la distribución de GNU/Linux que se está usando?

Hace unos meses unos estudiantes me preguntaron cómo saber desde la consola, la distribución de linux en la que se está (es decir, cómo puede un programa, escrito en c, por ejemplo, saber en qué distribución está corriendo).

Supuse que debía haber una manera de saberlo, pero no la conocía, así que les dije que me imaginaba que podría ser una variable de entorno o algo así... ahora sé que no hay tal variable y en su lugar, se averigua ese dato y otros con el comando lsb_release.

El comando tiene varias opciones, y debo suponer que está relacionado con el LSB (Linux Standard Base). Las opciones específicas pueden consultarse, como es usual en los comanos unix, con la opcción --help.

Con la siguiente instrucción se obtiene información, primero, de los módulos lsb del sistema, y después, despliega el nombre de la distribución, el nombre completo, la versión y el nombre clave.

$ lsb_release -a

Al ejecutarlo en ubuntu 8.04 (conocido como Hardy Heron), aparece lo siguiente:
Distributor ID: Ubuntu
Description: Ubuntu 8.04.1
Release: 8.04
Codename: hardy

en openSuSE 10.3:
Distributor ID: SUSE LINUX
Description: openSUSE 10.3 (i586)
Release: 10.3
Codename: n/a

en Fedora 8:
Distributor ID: Fedora
Description: Fedora release 8 (Werewolf)
Release: 8
Codename: Werewolf

y en Knoppix 5.3:
Distributor ID: Debian
Description: Debian GNU/Linux lenny/sid
Release: lenny/sid
Codename: n/a

... no lo he probado en otras distribuciones, pero supongo que funciona en muchas... debido al LSB.

lunes, 12 de enero de 2009

Partir archivos grandes

Recuerdo cuando apareció el WinRAR (para windows)... una de las grandes novedades que traía era la opción de partir el archivo comprimido resultante en pedazos de tamaño configurable... lo cual fue una gran cosa en aquel tiempo, porque la mayoría de los servidores de correo electrónico sólo permitían archivos de 2MB.

Cuando me pasé a Linux no sabía cómo hacer eso... y la verdad ni siquiera entendía el modelo de funcionamiento de "los programas para comprimir" del mundo GNU... posteriormente entendí que esos programas no son más que Front-Ends para comandos de consola (principalmente para tar), pero seguí sin saber cómo partir los archivos.

Algún tiempo después, "descubrí" por casualidad el comando split (andaba buscando otra cosa). Este comando permite dividir un archivo arbitrario, por líneas o por bytes. Fue una gran alegría encontrarlo, ya que en ese mismo tiempo comencé a trabajar con máquinas virtuales (y sus discos duros son archivos bien grandes que necesitaba dividir para transportarlos). Pero inmediatamente después, me surgió la duda correspondiente: ¿Cómo unirlos después?

Bueno, seguí buscando y leyendo, y encontré que un comando que yo "conocía" de antaño era la respuesta: el comando cat.

El comando cat, concatena archivos y los despliega en la salida estándar. Entonces para unir los pedazos, se procede así:
$ cat pedazo-01 pedazo-02 ... > archivo-unido
El comando cat concatena los archivos pedazo-01, pedazo-02, etc. y con el redireccionador de flujo de salida del bash (>), la salida estándar de cat se redirige al archivo archivo-unido que obviamente será sobreescrito si ya existe.

Introducir el caracter EOF

Hay muchos comandos en linux que reciben su entrada de datos directamene de la entrada estándar (por ejemplo more, less, tail, grep, etc.), y su funcionamiento termina cuando encuentran el caracter de fin de archivo, típicamente conocido como EOF.

Cuando la entrada de estos comandos se redirecciona desde un archivo (con <) o desde otro comando a través de una tubería (con |), el funcionamiento es muy natural... pero ¿y si los queremos usar directamente con la entrada estándar??

Bueno, en ese caso el problema se resuelve a saber cómo introducir, con el teclado, el dichoso caracter de fin de archivo. Durante mucho tiempo, eso fue un misterio para mí, hasta que lo descubrí por casualidad en un manual de Python:

El caracter de fin de archivo se inserta en la terminal con la combinación Ctrl+D.

Primera entrada

Bien, finalmente me decidí a hacer otro blog, pero especializado en temas relacionados con GNU/Linux... y helo aquí.

Ciertamente no tengo mucho tiempo para hacer publicaciones demasiado elaboradas, así que trataré que sean concisas pero útiles.