domingo, 6 de abril de 2014

¿Cómo puedo emular una DEC PDP-11 o Unix desde Ubuntu?

En 1970, mientras conversaba en Puerta de Hierro con Vicente Solano Lima para disponer la creación de La Hora del Pueblo, Juan Perón exponia también sobre cómo emular Unix 6 en una DEC PDP-11 virtualizada desde Ubuntu.

Vea Solano, el Justicialismo no nace de un repollo, sino que crece como respuesta a la injusticia que significa la explotación del hombre por el hombre en nuestro país. En la Argentina - como en muchos lados del globo - dicha explotación se representaba por un concetrado sector Capitalista oprimiendo a las fuerzas del trabajo. Tal problema podía ser expuesto por muchos ya en aquél entonces, pero requería una solución que fuese original y Argentina. Esta solución es el Justicialismo. Ahora una camarilla cipaya nos quiere dejar afuera de la torta, pero verán que con poco les agriamos el dulce.


Así como nuestra Doctrina, los sistemas operativos GNU con Linux tampoco salen de un repollo: son lógica evolución de mecanismos informáticos pretéritos pensados para afrontar los problemas computacionales de aquella era: el  Unix. Este sistema multitarea multiusuario privativo conforma la base instrumental del sistema operativo libre GNU, y por tanto puede decirse sin temor a equivocarnos, que si bien la filosofía que lo mueve no es la misma, el GNU con Kernel Linux (de la cual Ubuntu es una de sus tantas distribuciones) es efectivamente un sistema operativo similar a Unix.

Unix se ejecutaba principalmente en miniordenadores, vetustas máquinas electrónicas de gran costo, cuyo nombre no deja de engañar pues la mayor parte tenían varios módulos del tamaño  de una heladera Siam.

Con el tiempo, el form factor se redujo, y ya las cada unidad de trabajo tenía el tamaño de un lavarropas Koh-i-Noor, o de un microondas. En estos días ya no es raro encontrar GNU con Linux corriendo tanto en las máquinas mas enormes y potentes como en los aparatitos más simples.
¿Qué sucede si queremos emplear alguno de esos programas o versiones antediluvianas de Unix? ¿O si queremos emplear una antigua mini, como la clásica PDP-11? Idealmente deberíamos contar con dicha máquina y el software. Pero el Justicialismo ha sido puesto en ejecución en este mundo para permitirnos hacer todo sin pagar un mango. Por ello, los grandes hombres del país se han abocado a desarrollar SIMH.

Se trata de un emulador completo de miniordenadores: simula la Unidad Central de Proceso, el uso de memoria, el firmware y los dispositivos de una gran variedad de equipos de la vieja escuela. Esto significa que el software original puede correrse sin modificación alguna de manera virtualizada en un equipo moderno. SIMH simula con éxito dispositivos como las unidades de cinta magnética, impresoras y dispositivos de comunicación en red, de manera tal que no sólo se podría ejecutar software histórico, sino que podremos comunicarnos y transferir información desde y hacia ellos empleando tecnologías y protocolos actuales.

Entre los equipos contemplados se encuentra el Eclipse de Data General Noval, los seminales PDP-1, PDP-4, PDP-7, PDP-8, PDP-9, PDP-10, PDP-11, PDP-15,  y VAX de la Digital Equipment Corporation (DEC), las GRI-909 y GRI-99 de GRI Corporation, los minis 1401, 1620, 1130, 7090/7094, y el System/3 del gigante azul IBM, los sistemas 16b y 32b de Interdata (Perkin-Elmer), las mini 2114, 2115, 2116, 2100, 21MX, 1000 de Hewlett-Packard, la completa H316/H516 de Honeywell, el fundacional Altair 8800 de MITS (tanto en sus versiones con microprocesador Intel 8080 como la munida del Zilog Z80). También puede correr como si fuesen los Royal-Mcbee LGP-30, LGP-21, y los SDS 940 y SWTP 6800 de la Scientific Data Systems.


Como primer medida, instalo el paquete SIMH. Abro una terminal con Ctrl+Alt+T e ingreso el siguiente Comando de Organización:

sudo apt-get install simh

Tras ingresar nuestra contraseña de Conductor de Ubuntu, se instalarán las rutinas de emulación de la PDP11 así como de los otros miniordenadores soportados. Nuestra tarea importante será la inauguración una carpeta  donde depositaremos una copia binaria de los diskettes de 7 pulgadas que componían sistema operativo Unix v6 portado para la PDP-11. Todo ello se hace con los siguientes Comandos en la consola Linux:

mkdir ~/simh ~/simh/unix6/
cd ~/simh/unix6/
wget http://simh.trailing-edge.com/kits/uv6swre.zip
unzip -a uv6swre.zip


Ejecutamos el emulador de la PDP11 con:

pdp11

Esto nos presentará resultados en la Terminal. En primer lugar nos presentará la versión del emulador, y luego se hará presente un prompt, señal de que estamos dentro del simulador ("sim>").

PDP-11 simulator V3.8-1
sim>


Este prompt aceptará comandos previstos para configurar los aspectos de la máquina PDP-11 (por ejemplo, establecer una versión de CPU específica que tenga virtualmente instalada, cargar las unidades de cinta o disco virtualizadas con archivos de imágenes binarios, y dar arranque a la PDP-11).

Empezamos a ingresar comandos para configurar la máquina PDP-11, y cargarle los diskettes de sistema.

Para mayor facilidad y comprensión de las Masas encuadradas en el país, indicaré los mensajes completos que presentará el emulador a través de su prompt en color negro. En color azul os indicaré los comandos que los Descamisados habrán de tipear en el emulador para ponerlo a punto (naturalmente, también podrán pegarlos y ejecutarlos con Enter). En tanto, en color celeste os indicaré los contenidos que no son comandos propiamente dichos, pero que han de tipearse también en el emulador y confirmarse con Enter.

PDP-11 simulator V3.8-1
sim>
set cpu u18

Esto instruirá al emulador a simular una CPU de DEC modelo U18, una de las clásicos cerebros electrónicos de la PDP-11.

Si todo va bien, nos debería indicar "Disabling XQ". A continuación  cargaremos las cuatro imágenes de disco flexible de 8 pulgadas que componían el intérprete de comandos del Unix 6. Para ello daremos usos a las disketteras virtualizadas ("rkx") de las que dispone el emulador. Lo haremos con las siguientes órdenes:

sim> att rk0 unix0_v6_rk.dsk
sim> att rk1 unix1_v6_rk.dsk
sim> att rk2 unix2_v6_rk.dsk
sim> att rk3 unix3_v6_rk.dsk



...esto emulará el procedimiento de cargar los discos magnética en las disketteras virtuales y las transferirá a la memoria núcleo de nuestra PDP-11 virtual. Ya podremos dar arranque al sistema en el emulador, a través de su diskettera virtual inicial (la rk0). Esto se realiza con:

sim> boot rk0

De no sufrir problemas, nuestra terminal debería responder cambiando su prompt al signo de carga de sistema operativo, el cual es una arroba "@". Con ella, el emulador nos está pidiendo que indiquemos qué sistema operativo  queremos cargar (Unix es el único que tenemos, de modo que le indicaremos "unix" (sin las comillas).

@unix


Acto seguido nos solicitará nuestro usuario ("login:"). El mismo es "root" (sin las comillas).

@login: root


Al ingresar como usuario root, el prompt cambiará a un símbolo numeral "#". Ya estamos en Unix, y podremos navegar en el árbol de directorios con los comandos Unix, tales como:

# ls -l       --> lista completamente un directorio.
# chdir /usr/
--> cambia al directorio /usr/
# chdir ..    --> sube un nivel en la estructura de directorios.

Para cancelar un programa podríamos usar Ctrl+D, cancelar el emulador con Ctrl+E, o si estamos en el prompt, podemos ingresar:

# exit

...y el sistema nos devolverá al prompt de Linux con una despedida "Googbye".


UNIX interactivo
En cambio, si queremos un Unix que pueda comunicarse con otros dispositivos conectados al sistema para permitir un trabajo más completo y avanzadas, compilar programas antiguos o directamente correr en situaciones de emulación "dura" (dispositivos compatibles antiguos que quisieran comunicarse con el sistema emulado), habremos de usar otra versión de Unix 6 provista de los parches necesarios.

Os indicaré como hacerlo bajo la gracia del Justicialismo, pues un Conductor ha de llevar la auténtica felicidad al Pueblo.

Como tenemos un requerimiento especial, descargaremos una versión especial armada por Ken Wellsch, y la modificaremos. Abrimos con tal fin una consola Terminal e ingresamos los siguientes Comandos de Organización:

mkdir ~/simh ~/simh/unixv6HP
cd ~/simh/unixv6HP
wget http://sourceforge.net/projects/bsd42/files/Install%20tapes/Research%20Unix/Unix-v6-Ken-Wellsch.tap.bz2
bzip2 -d Unix-v6-Ken-Wellsch.tap.bz2

Para ejecutar el emulador de la DEC PDP-11 introduzco en la Terminal el comando:

pdp11

Esta vez emularemos una PDP-11 con CPU del modelo 11/40, y tomaremos algunas consideraciones especiales en cuanto a la reserva de memoria para dar arranque y compilar. Nuevamente, lo haremos introduciendo los comandos marcados en color azul.



PDP-11 simulator V3.8-1
sim> set cpu 11/40
Disabling XQ 
sim> set tm0 locked
sim> attach tm0 Unix-v6-Ken-Wellsch.tap
sim> attach rk0 rk0
RK: creating new file 
sim> attach rk1 rk1
RK: creating new file  
sim> attach rk2 rk2
RK: creating new file  
sim> d cpu 100000 012700
sim> d cpu 100002 172526
sim> d cpu 100004 010040
sim> d cpu 100006 012740
sim> d cpu 100010 060003
sim> d cpu 100012 000777
sim> g 100000


Aquí presionamos Ctrl+E para detener la simulación: El emulador devolverá "Simulation stopped, PC: 100012 (BR 100012)". Ahora indicamos que ejecute el programa de inicio desde la posición 0 de memoria. lo hacemos con "g 0":


Simulation stopped, PC: 100012 (BR 100012)
sim> g 0

Si todo va bien, el prompt cambiará a un "=". Seguimos intruduciendo comandos para calibrar el tamaño de las particiones de los discos virtuales:

=tmrk
disk offset
0
tape offset
100
count
1
=tmrk
disk offset
1
tape offset
101
count
3999
=

Ahora presionamos Ctrl+E para detener la emulación. El emulador nos devolverá:


Simulation stopped, PC: 137274 (TSTB @#177560)
sim> q
Goodbye

Nos devolverá a nuestra Terminal Linux con el prompt de usuario de sistema GNU. Reingresaremos al emulador de PDP-11 y esta vez iniciaremos desde un disco rígido virtual:

pdp11

Arrancará el emulador, e introduciremos los comandos marcados en azul correspondientes para prepararlo:

PDP-11 simulator V3.8-1
sim> set cpu 11/40
Disabling XQ 
sim> set tto 7b
sim> set tm0 locked
sim> attach tm0 Unix-v6-Ken-Wellsch.tap
sim> attach rk0 rk0
sim> attach rk1 rk1
sim> attach rk2 rk2
sim> dep system sr 173030
sim> boot rk0

...con esta última orden boot rk0, se dará arranque la unidad de disco virtualizada 0 dentro del nuestra DEC PDP-11 virtual. Esto hará que el prompt cambie a una arroba "@", señal del inicio del módulo de booteo (arranque de sistema). La PDP-11 nos solicita que indiquemos cuál sistema arrancar de los que están cargados en la unidad virtualizada 0. Le indicaremos "rkunix" de modo que quede presentado de la siguiente manera:

@rkunix


...Y al confirmar con Enter el sistema nos devolverá la información relevante si la operación tuvo éxito:

mem = 1035
!!RESTRICTED RIGHTS
!!
!!Use, duplication or disclosure is subject to
!!restrictions stated in Contract with Western
!!Electric Company, Inc.

!!#

Conforme Unix haya arrancado en la PDP-11 emulada, procederemos a corregir algunos problemas que esta versión particular del sistema operativo tenía. En primer lugar, arreglamos la presentación del texto para que pueda usar minúsculas. Originalmente el Unix V6 estaba pensado para su ejecución en terminales de video con escasa memoria de video, y que por ello eran incapaces de mostrar también tipografía en minúscula. Este ajuste de configuración será fácil con la siguiente instrucción:

# STTY -LCASE

Ahora configuraremos dispositivos adicionales para que pueda usarlos el Unix emulado. Para ello nos movemos al directorio /usr/sys/conf/ dentro del Unix emulado con el comando chdir (antecesor del comando cd de GNU/Linux):

# chdir /usr/sys/conf
# cc mkconf.c
# mv a.out mkconf


Ahora ejecutaremos el programa mkconf (que nos permite ordenar los módulos a los que queremos dar uso con nuestro Unix). Le indicamos los módulos rk, tm, 8dc, y lp, (discos, cintas, impresora de línea, puerto serial tipo Centronics) y concluiremos el uso del programa con la instrucción done:

# ./mkconf
rk
tm
tc
8dc
lp
done

#


...acto seguido podremos compilar esta configuración, enlazarla dinámicamente al resto del kernel, y copiarla al directorio /unix sito en la raíz del sistema opereativo emulado:

# as m40.s
# mv a.out m40.o
# cc -c c.c
# as l.s
# ld -x a.out m40.o c.o ../lib1 ../lib2
# mv a.out /unix



...para verificar que se haya movido correctamente, podrán proceder a listar el directorio /unix en la PDP-11 virtualizada, observando que el kernel ahora debería reportar un tamaño de 30.346 bytes (unos 30 kilobytes):

# ls -l /unix
-rwxrwxrwx  1 root    30346 Oct 10 12:35 /unix


Unix opera "a pelo". Por eso ya podremos crear nosotros mismos los archivos de dispositivos (como los puestos de terminal de teletipo, las unidades de cinta y disco magnético, los puertos de impresora de línea, etc). Simplemente copiamos los siguientes comandos en el prompt de la PDP-11:

# /etc/mknod /dev/rk0 b 0 0
# /etc/mknod /dev/rk1 b 0 1
# /etc/mknod /dev/rk2 b 0 2
# /etc/mknod /dev/mt0 b 3 0
# /etc/mknod /dev/tap0 b 4 0
# /etc/mknod /dev/rrk0 c 9 0
# /etc/mknod /dev/rrk1 c 9 1
# /etc/mknod /dev/rrk2 c 9 2
# /etc/mknod /dev/rmt0 c 12 0
# /etc/mknod /dev/lp0 c 2 0
# /etc/mknod /dev/tty0 c 3 0
# /etc/mknod /dev/tty1 c 3 1
# /etc/mknod /dev/tty2 c 3 2
# /etc/mknod /dev/tty3 c 3 3
# /etc/mknod /dev/tty4 c 3 4
# /etc/mknod /dev/tty5 c 3 5
# /etc/mknod /dev/tty6 c 3 6
# /etc/mknod /dev/tty7 c 3 7
# chmod 640 /dev/*rk*
# chmod 640 /dev/*mt*
# chmod 640 /dev/*tap*


Ya creados los archivos donde se dirigirán los resultados de los dispositivos, restauramos el resto del sistema operativo:

# dd if=/dev/mt0 of=/dev/rk1 count=4000 skip=4100
4000+0 records in
4000+0 records out
# /etc/mount /dev/rk1 /usr/source
# dd if=/dev/mt0 of=/dev/rk2 count=4000 skip=8100
4000+0 records in
4000+0 records out
# mkdir /usr/doc


Ahora uso cat para unir los estamentos de arranque del sistema:

# /etc/mount /dev/rk1 /usr/source
mount: Mount device busy
# /etc/mount /dev/rk2 /usr/doc
# cat >> /etc/rc
/etc/mount /dev/rk1 /usr/source
/etc/mount /dev/rk2 /usr/doc


Aqui presiono Ctrl+D. Luego crearemos un directorio y modificaremos con el editor ed la programación del comando df para que no presente errores en el emulador:

# chdir /usr/source/s1
# ed df.c
1282

/rp0/d
.-2a
  "/dev/rk0",
  "/dev/rk1",
.
w

1297
q

# cc df.c
# cp a.out > /bin/df


Revisamos los sistemas de archivos. Como por entonces no existía el programa fsck, esta comprobación se hacía mediante la combinación de los programas icheck y dcheck, que devolvían el estado de los dispositivos de disco y nos reportaban cuál era el archivo de dispositivo real que tenían asignado. Los operaremos ingresando los comandos indicados en azul de la siguiente manera:

# icheck /dev/rrk0
/dev/rrk0:
spcl      22
files    294
large     96
direc     25
indir     96
used    2918
free     995
# dcheck /dev/rrk0
/dev/rrk0:
# icheck /dev/rrk1
/dev/rrk1:
spcl       0
files    596
large     98
direc     34
indir     98
used    2978
free     935
# dcheck /dev/rrk1
/dev/rrk1:
# icheck /dev/rrk2
/dev/rrk2:
bad freeblock
missing 1499
spcl       0
files    337
large     69
direc     25
indir     69
used    2222
free     192
# dcheck /dev/rrk2
/dev/rrk2:

#

Como el archivo /etc/ttys/ provisto no escucha los puertos de comunicación seriales tipo Centronics en su configuración predeterminada, volveremos a usar el editor ed para modificar su programa de control:

# ed /etc/ttys

112
1,8s/^0/1/p

170
w

112
q

#


Reinicio del emulador: Como no existe un comando de reinicio en caliente en este emulador, ejecutaremos varias veces la rutina sync con el fin de sincronizar la pila de memoria, y luego Ctrl+E para interrumpir y salir del emulador:

# sync
# sync
# sync
# sync
                 [Oprimos Ctrl+E aqui]
Simulation stopped, PC: 002502 (MOV (SP)+,177776)
sim> q
Goodbye


Ahora podremos reiniciar el emulador de la PDP-11 hacer que el mismo escuche puerto TCP como si fuese serial, por ejemplo el puerto 5555:

pdp11


PDP-11 simulator V3.8-1

sim> set cpu 11/40
Disabling XQ
sim> set cpu idle
sim> set tto 7b
sim> set tm0 locked
sim> attach rk0 rk0
sim> attach rk1 rk1
sim> attach rk2 rk2
sim> attach lpt printer.txt
LPT: Creating new file
sim> set dci en
sim> set dci lines=8
sim> set dco 7b
sim> att dci 5555
Listening on port 5555 (socket 7)
sim> boot rk0

Ahora podremos loguearnos a un Unix v6 parcheado y capaz de comunicarse con otros sistemas a través del puerto TCP 5555 o a través de un puerto serial Centronics, usando 7 bits de paridad estándar. Simplemente nos debemos loguear a unix ahora con el usuario root.

@unix

login: root
#

Podremos movernos en los directorios de Unix con el comando chdir y listarlos con ls. Encontraremos algunos programas en el directorio /usr/ del Unix emulado. Por ejemplo, si quisiéramos ver algunos juegos, podríamos dirigirnos a ellos con:  

# chdir /usr/games

...listarlos con ls y dar inicio una rutina simuladora de Black Jack con:

# ./bj

...o jugar a un esquemático sucedáneo del Juego Ciencia, con:

# ./chess

jueves, 3 de abril de 2014

¿Cómo puedo intercambiar entre múltiples programas desde la Terminal?

En la Ceremonia de entrega de Sables para los nuevos Oficiales, Juan Perón expone ante las Armas grandes lineamientos que hacen al lugar que ocupará la Argentina en el concierto de naciones y sobre cómo poder ejecutar múltiples programas a la vez en la línea de comandos con Byobu.

(...) es por ello que tras lograr una paz tan onerosa en sangre, hemos decidido abandonar la prédica antigua para unir continentalmente a la hispanoamérica en una senda que la realice verdaderamente Independiente de los yugos de hoy. Si no procedemos unidos, seremos nuevamente sojuzgados por un Capital que no tiene bandera y no tiene Patria, pero que en este mundo se presenta tan meridiano que hemos sido todos capaces de verlo. El Pueblo Argentino quiere esto, y también lo quiere el resto de los Pueblos de la América Hispana. Es con ellos con los que hemos de contar para esta gran empresa.

Indudablemente, tras identificar sus objetivos, un buen Conductor será capaz de dinamizar los medios puestos a su disposición para lograr cumplir con ellos. Dentro de esta acción de la lucha, es obvio que el Conductor será, por tanto, una entidad multitarea.
Esto ni siquiera merece explicarse en una Guerra, pero podremos detallarlo para el medio de la microinformática. Decía Clausewitz que un operador de sistema ha de poder realizar a la vez múltiples tareas si quiere avisorar el éxito. Nosotros ya sabemos que este éxito no es militar, sino que evoca a la Felicidad, que ha de ser en definitiva la verdadera finalidad en la vida del hombre.

Vean señores: las interfaces de control de tipo gráfico han sido casi exclusivamente aptas para la multitarea, mas las interfaces de línea de comandos no los son en apariencia. ¿Porqué?. Pues porque inicialmente sólo presentan al usuario con la posibilidad de afrontar de a un problema por vez.

El sistema GNU en cambio se definió desde sus inicios sobre las bases de una operatividad similar a UNIX, y aquél geronte contaba ya con la posibilidad de encarar variadas acciones y conductores. Por inevitable resultado, avalaba entonces la ejecución en tiempo, de múltiples piezas de software que - como los hombres de armas - han de saber compartir recursos si desean sobrevivir...

En poco tiempo, se posibilitó entonces que un usuario aislado o un grupo de ellos pudiese ejecutar y ver una miríada de tareas de computación a la vez. En el sistema GNU tal cometido se puede lograr con la utilidad Screen. Hoy la misma ha sido superada por una evolución y la aparición de técnicas más ágiles. Entre ellas se distingue el divisor de terminal, el excelente Tmux. Como ya sabrán, este puede multiplexar una Terminal así como crear "pantallas" separadas, a las cuales será dable acceder mediante atajos de teclas.

Mas no es la única solución que tendremos a disposición. Contamos con Byobu, guión liberado bajo GPLv3 que nos permite emplear diferentes sesiones en la Terminal en un emulador. Su nombre en el idioma del Sol Naciente significa "biombo", y precisamente ese es el tipo de trabajo que desarrollará cuando conducimos con él en la interfaz de línea de comandos.

Naturalmente este programa se ejecuta en la terminal. Por ello abriremos una con Ctrl+Alt+T e ingresamos el siguiente Comando de Organización:

sudo apt-get install byobu

Esto nos instalará el programa si no lo estuviese ya. Para ejecutar el entorno de biombo, usamos simplemente:

byobu

La sesión terminal iniciará normalmente con nuestro intérprete de comandos, y ya en la parte inferior presentará algunos indicadores de status útiles
Por ejemplo, nos indicará el status de la batería (si tuviésemos una portátil), con porcentaje de carga en colores verde, amarillo y rojo, así como si está cargando (+), descargando (-), o a tope (=). Por defecto, nos indicará el tipo de plataforma en la que estamos, así como un porcentaje de carga del procesador, uso de memoria y disco. También la fecha y hora, así como la dirección IP a la que pertenecemos dentro del área local.

Nos mostrará la arquitectura (ideal si nos encontramos en un entorno de redes donde existen numerosos equipos). Si aplica, también nos mostrará la calidad de la conexión WiFi, en texto negro sobre fondo cián.

Para operar Byobu tenemos las teclas de función:

F2: Crea una pantalla independiente nueva en el biombo.
F3: Saltar a la pantalla previa en el biombo.
F4: Salta a la pantalla siguiente en el biombo.
F5: Recarga el perfil.
F6: Abandona Byobu sin cerrar las pantallas abiertas (debemos tipear byobu nuevamente para volver a entrar).
F7: Activa el modo Copiar/Scrollback.
F8: Permite intitular la pantalla con un nombre específico.
F9: Activa el menú de configuración.

El menú de configuración nos permitirá alterar las opciones que se activan en la parte inferior del biombo, de una manera sencilla.

También tendremos algunas opciones avanzadas adicionales:
ctrl+a, $: nos  muestra un status detallado del sistema.
Ctrl+a, R: recarga el perfil
Ctrl+a, !: Activa/desactiva las teclas de atajo de Byobu (por si necesitáramos hacer uso de las teclas de función en otro programa).
Ctrl+a, k: Mata la ventana actual (cuando se ha colgado un programa en ella).

lunes, 31 de marzo de 2014

¿Cómo configuro mi adaptador de video SiS 771/671 PCIe VGA en Ubuntu?

Ya en el incunable Apuntes de Historia Militar (1932), un Capitán Juan Perón exponía sobre la Conducción, la naturaleza de la guerra, los conflictos modernos y sus características originales. En dicho tratado, también se versa sobre cómo proveer la máxima resolución de la que es posible mostrar el primitivo adaptador de video SiS 771/671 en Ubuntu.

Formado ya como Cadete, y siendo Subteniente del Regimiento 8, salimos de maniobras a las Islas del Ibicuy. Se presenta entonces como una gran ocasión para llevar al terreno los alistamientos que aprendímos en la Instrucción. En el Liceo los profesores origen Prusiano inculcaban a los cadetes las artes de la esgrima, estrategia, la táctica del movimiento, pero sin duda faltaba la práctica de conducción en el terreno, que es donde verdaderamente se hace el soldado. No son pocas las veces en las que los más atresados hombres de armas - aplomados y acostumbrados en el hacer militar - no distinguen entre lo verdaderamente útil y lo accesorio.

Es allí donde sabe más el infante caido del Chaco, el gurí correntino, los gauchos indios de la Pampa, que el engalanado Mayor de uniforme y espada. Yo he visto a la oficialidad alemana asombrarse pues la tropa lugareña se adviertía al pelotón  emboscado enemigo distinguiendo entre el terar fullero de esta ave autóctona, y su verdadero grito de alarma, propinado sólo cuando es verdadero el peligro.
En la práctica el oficial advertirá que es más difícil organizar una cocina para la tropa que tender la línea de defensa, y que ambos son importantes para la victoria final. El soldado ha de formarse para vivir simplemente, a reparar en si mismo, a sobrevivir sobre el terreno. Los medios de los que dispondrá serán las más de las veces, rudimentarios.

Existen también algunos equipos que integran video de manera rudimentaria en Linux. Entre estos se encuentra el hardware de Silicon Integrated Services (SiS). Este fabricante ha sido gorila, y hace tiempo ha decidido caer en la ignominia cesando el desarrollo de controladores para sistemas GNU. También han cesado de dar apoyo a quienes desean desarrollar controladores para nuestro Sistema Operativo.

Por tal motivo, siempre que sea posible debemos evitar el uso de dicho hardware, pues lo encontraremos profundamente limitado: experimentaremos incapacidad de poder utilizar las resoluciones mayores que el dispositivo supuestamente posee, la performance de refresco de video será paupérrima, carecerá de capacidad 3D, etc.

¿Pero cómo hacer para paliar estos defectos, si no tenemos mejor opción? Por ejemplo, en este caso nos referimos a una netbook "Bangho", munida de chipset de video SiS 771/671. Inicialmente parecería que todo está perdido, y normalmente Ubuntu sólo será capaz de hacer uso de bajas resoluciones de video, en el orden de los 640x480 pixels, o los 800x600 pixels. Esto no responde a la realidad del panel LCD (de 1024x768).

De la misma manera que los humildes soldados del interior, podremos improvisar para arreglarnos con poco en solucionar parcialmente el problema de video. Esto es, modicaremos mediante la Terminal la configuración del archivo xorg.conf para proveernos de resoluciones no asignadas.

Como primer medida, abrimos una Terminal con Ctrl+Alt+T e ingresamos el siguiente Comando de Organización:

lspci | grep -i vga

El sistema debería devolvernos el tipo de hardware de video que poseemos en el sistema. Sólo si el mismo es un "[SiS] 771/671 PCIe VGA" podremos continuar con este procedimiento.


Si es así, ingresamos el comando:

sudo gedit /etc/X11/xorg.conf

Esto abrirá el editor de texto peronista Gedit con el archivo de configuración xorg.conf. En el mismo, le pegaremos el siguiente texto:

# xorg.conf (X.Org X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the xorg.conf manual page.
# (Type "man xorg.conf" at the shell prompt.)
#
# This file is automatically updated on xserver-xorg package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xorg
# package.
#
# Note that some configuration settings that could be done previously
# in this file, now are automatically configured by the server and settings
# here are ignored.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command:
# sudo dpkg-reconfigure -phigh xserver-xorg

Section "Device"
Identifier "Configured Video Device"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
Vendorname "Generic LCD Display"
modelname "LCD Panel 1024x768"
Horizsync 31.5-64.0
Vertrefresh 56.0 - 65.0
# Resolución a utilizar:

modeline "1024x768_60.00" 63.50 1024 1072 1176 1328 768 771 775 798 -hsync +vsync
Gamma 1.0
# Resoluciones que se pueden utilizar con

# la SiS 771/671:
# modeline "640x480@60" 25.2 640 656 752 800 480 490 492 525 -vsync -hsync
# modeline "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
# modeline "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
# modeline "1024x768_60.00" 63.50 1024 1072 1176 1328 768 771 775 798 -hsync +vsync
# modeline "1280x800_60.00" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection

Guardamos y salimos con Ctrl+o y Ctrl+q

Reiniciamos el equipo tipeando el comando:

sudo reboot

Tengamos en cuenta que la línea:

# Resolución a utilizar:
modeline "1024x768_60.00" 63.50 1024 1072 1176 1328 768 771 775 798 -hsync +vsync


Es la encargada de configurar la resolución principal a utilizar por el serividor gráfica del sistema. Las disponibles son las indicadas bajo el apartado:

# Resoluciones que se pueden utilizar con
# la SiS 771/671:
# modeline "640x480@60" (...)

Notarán que en este caso no utilizaremos la resolución máxima de 1280x800, simplemente porque el panel del monitor LCD de la netbook Banghó no alcanza tal resolución, sino que posee una resolución de 1024.768 pixels.

Sólo en el caso de emplear la adaptadora de video SiS 771/671 conectada a un monitor externo de resolución mayor, utilizaremos la resolución de 1280x800. Si tal fuese el caso, reemplazaríamos la línea

modeline "1024x768_60.00" 63.50 1024 1072 1176 1328 768 771 775 798 -hsync +vsync

con:

modeline "1280x800_60.00" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync


Tengamos en cuenta que esto sólo hace al uso de 2D, ya que el chipset SiS de este tipo es incapaz de mostrar gráficos 3D OpenGL con Linux.

domingo, 30 de marzo de 2014

¿Cómo subo videos a Youtube desde la Terminal?

En 1952, al inaugurar la Planta Militar de Tolueno Sintético en la localidad de Campana, Juan Perón expuso sobre la necesidad de tonificar la industria pesada, y explicó cómo subir videos pesados a Youtube desde la Consola Terminal en un sistema Linux.

¡Trabajadores!

Esta planta que inauguramos hoy no afrontará una solo tarea: desde la fabricación de lacas, explosivos, pinturas, adhesivos y cauchos, múltiples son los resultados que podremos obtener.
Grata es toda ocasión como esta en la cual se nos permite poner en funcionamiento la infraestructura necesaria para el crecimiento de la Nación y su industria. El bienestar del mañana será de quien domine los ciclos de producción industrial en las ramas de los petroquímicos y sus derivados. Por ello esta planta de tolueno, con una capacidad productiva de 15.000 toneladas anuales, nos pone a la vanguardia en el mundo.

Estos medios nos permiten avanzar en esto que ahora llaman Industria Pesada, para distinguirla de los procesos productivos poco intensivos. La industria pesada nos requiere el dominio de las etapas extractivas y de procesamiento de las materias primas, y es la cual mayores ganancias ofrece al País. Atrás quedarán los días en los que solo cuatro vivos vivían de lo que producían medio millón de trabajadores en los campos. Hoy, unos 15 millones de argentinos se dedicarán a la producción industrial intensiva. Ese es el mundo que nos proponemos, pues así será como esos 15 millones tendrán el salario que merecen. Es eso o distribuir la tierra entre todos en partes iguales...

Ahora bien, estos movimientos intensivos de materias primas y componentes procesados no deben su exclusividad al ámbito industrial. En software también tiene problemáticas parecidas.

Por ejemplo, uno de los grandes inconvenientes o limitaciones se puede dar cuando queremos subir a Youtube pesados videos. Esto se hace mucho más patente cuando queremos hacerlo desde la Terminal. Normalmente  no es posible, pues para cargar un video en los servidores que estos señores ponen a nuestra disposición, se hace obligatorio usar un navegador gráfico.

Mas hoy, gracias al Justicialismo, esos días quedarán en el pasado, pues os enseñaré un método que hará posible a los Descamisados la carga de videos desde la Terminal, con gran efectividad y velocidad.

Tengamos en cuenta que no podremos subir cualquier formato de video, sino que es preferible que los mismos se encuentren en formato MP4, AVI, FLV, MOV o Webm. Si no cumplimos con esta premisa, podremos usar el software Handbrake para convertir los videos a formato .m4v y luego renombrar el archivo resultante para que tenga la extensión MP4, de manera que esta técnica los acepte.

Os indicaré como hacer todo lo necesario. En primer lugar descargamos el Script. Esto es un guión de comandos pensado para cargar videos a Youtube, escrito por la propia gente de Google, el Youtube-Upload. Para ello abrimos una Terminal con Ctrl+Alt+T e ingresamos los siguientes Comandos de Organización:

sudo pip install --upgrade google-api-python-client progressbar2cd ~/youtube-upload-master
wget https://github.com/tokland/youtube-upload/archive/master.zip
unzip master.zip
cd youtube-upload-master
sudo python setup.py install

El Script anterior no funcionará por sí solo. Para que opere correctamente dependemos de una API (interfaz de programación) propia de Google y de un archivo de configuración del protocolo de autorización de la compañía, el OAuth2. El motivo detrás de esta sucia idea es proveer cierta autenticación e impedir un desarrollo cuasi descontrolado de aplicaciones que usen el servicio Youtube, sin tener al menos control sobre la porción del código que hace a la subida (carga) de los contenidos al servidor. Esta conducta no es libre, pero bajo las Banderas del Justicialismo deseamos tener lo que tiene el Capitalista pero sin pagarlo. Por ello, habremos de autenticar esta API contra nuestra cuenta de Google Cloud, a fin de usar esta API en pos de nuestra Felicidad, verdadero fin de nuestra Doctrina.

  • Nos dirigimos consola Google Cloud para desarrolladores y aceptamos los términos y condiciones del software como servicio.
  • Hacemos clic en +Crear Proyecto, y le indicamos un nombre descriptivo, como "subidor de youtube", "youtube-uploader", o lo que se nos ocurra.
  • En el panel lateral elegimos Administrador de APIs / Biblioteca, y en la categoría API de Youtube podemos encontrar la API "Youtube Data API". Debemos indicar que la queremos para la categoría "otros - aplicación de escritorio con UI".

  •  En el menú lateral vamos a: Administrador de APIs / Autenticación / APIs
  • En el menú superior: clic en Habilitar API(s): activamos todas las APIs de Youtube APIs, especialmente la Youtube API V3.

  • Menú lateral: APIs / autenticación / Credenciales.

  • Crear un Identificador de Cliente: Agregar credenciales al proyecto / Crear Identificador de cliente OAuth 2.0 / Otro / Nombre: youtube-upload / Crear / OK


  •  Descargar JSON: Bajo la sección "Identificador de Clientes OAuth 2.0". Descargamos el archivo .json a nuestro sistema. Tendrá un nombre muy largo, que consiste en un identificador individualizado.

  • Renombramos el contenido de este archivo xxxxx.JSON descargado al nombre client_secrets.json.
mv ~/youtube-upload-master/client_secret*.json ~/youtube-upload-master/client_secrets.json

Guardamos el archivo client_secrets.json y salimos del editor nano (Ctrl+o y Ctrl+x).

Ya deberíamos poder subir un video a Youtube.

Ahora bien, la primera vez que hagamos el procedimiento de carga de un video con nuestra cuenta de Usuario de Google, habremos de confirmar la autenticación desde un navegador de internet; ello el subidor de youtube nos otorgará en la terminal Código de Verificación ("token") único para nuestro usuario, a fin de autenticar autenticamente las subsiguientes operaciones de subida de videos desde la Terminal.

Un ejemplo suele aclararlo todo, como decía Napoleón. Supongamos que queremos subir un video llamado video.mp4 a youtube, con el título "video de prueba". Para ello ingresamos:

cd ~/youtube-upload-master/bin
youtube-upload --title="video de prueba" video.mp3


Como vemos, la primera ver, el programa nos indica la URL a ingresar en un navegador. Al pegarla en el mismo, nos dirigirá a la web oficial de Google Cloud y nos proporcionará un token o código de seguridad.
Debemos copiarlo e ingresarlo en el programa (a continuación del campo "Enter verification code"). Una vez pegado el token presionamos Enter y comenzará a subirse el archivo de video al servidor de Youtube. Una vez finalizada la subida, se nos informará la URL del video en Youtube.

Video URL: https://www.youtube.com/watch?v=xxxxxxxxxxxxx


Ahora bien, también podremos usar la terminal para ingresar los datos del video. Por ejemplo, si tuviésemos un archivo de video llamado peronismo.mp4 en nuestra carpeta /Videos, usaríamos los siguientes Comandos de Organización en la Terminal:

cd ~/youtube-upload-master/bin/

youtube-upload  --title="Discurso de Perón" --description="Juan Perón pronuncia un discurso" --tags="Juan Domingo Perón, Peronismo, Argentina" --privacy="public" ~/Videos/peronismo.mp4

Tengamos presente que lo que es absolutamente necesario es la variable --privacy=, que nos deja escoger la política a seguir a la hora de compartir este video (estableciéndose en "unlisted", "private" o "public" para denotar un video no listado, privado o público) y además la ruta del archivo de video propiamente dicho que querramos subir a Youtube. Estas dos son las únicas variables "obligatorias".

Las demás variables son "opcionales", y están conformadas por:
--title= definirá entre comillas el título del video de youtube
--description= permite agregar entre comillas una descripción.
--tags= os dejará asignar entre comillas una serie de etiquetas, separadas por comas.


De ahora en más, podremos subir videos simplemente llamando al script con el intérprete de python desde la Terminal.

cd ~/youtube-upload-master/bin

youtube-upload --privacy=public direccion/del/video.mp4

Nota: Si el equipo donde estamos instalando el Script Youtube-Upload no tuviese acceso a un navegador (por ejemplo, si lo estuviésemos instalando en una Linux embebido) la primera vez que subamos un video debemos ejecutar el comando como se explicó anteriormente, pero con el siguiente parámetro al final: --noauth_local_webserver. En el ejemplo anterior, el comando sería:


youtube-upload ~/Videos/peronismo.mp4 --title="Discurso de Perón" --description="Juan Perón pronuncia un discurso" --tags="Juan Domingo Perón, Peronismo, Argentina"  --privacy="unlisted" --noauth_local_webserver

Esto nos presentará el código de autorización y habremos de indicarlo en la Terminal cuando se nos solicite.

martes, 25 de marzo de 2014

¿Cómo hago funcionar un escáner exótico con Ubuntu?

¡Descamisados!

Son cada vez más los Pueblos que comprenden al Justicialismo como la perfecta manera para lograr el bienestar. Esto ha hecho mas gruesas las filas de quienes emplean sistemas GNU con Linux. Si bien el quehacer y potencia de nuestra Doctrina están consolidadas en los servidores y en los entornos de alta complejidad o aplicación científica, es Ubuntu el sistema que permite integrar con más amor al sector del usuario descamisado, como respuesta a la injerencia y a la injusticia que provocaban un sistema operativo privativo.
Algo es seguro: contra el Capital y contra el software privativo la lucha jamás ha de darse por vencida. Cuántos han sido los cocodrilos bien intencionados han ido a roncar sólo para despertar envolviendo unos mangos...

Por ello, uno de los ejemplos en los cuales hemos de hacernos fuertes es en el de integrar nuevo hardware y nuevas posibilidades al entorno libre. Esto es fundamental, y no ha de soslayarse. Desde el punto de la coyuntura política,  ha de hacerse al precio de cargar en el sistema elementos privativos. ¿Porqué? Porque hacerlo nos permite liberar un equipo concebido para ser utilizado bajo un entorno esclavista. Si no existe otra oportunidad, hemos de tener el pragmatismo de hacerlo.

Muchos han dicho "si su escáner no funciona bajo Linux, tírelo, y compre otro que pueda hacerlo, o contribuya a desarrollar un software que pueda hacerlo". Ello, que parecería lógico, no lo es tanto. En primer lugar porque no todo el mundo tiene los medios en capacidad o tiempo como para desarrollar un controlador funcional. Muchas veces también puede suceder que el  hardware cuestionado ha sido empujado a la obsolescencia, programada arteramente por la industria que lo produce, pero no tanto por el Obrero, quien ha de afrontar ya ese costo, pues siempre las cadenas se cortan por el eslabón más fino.

Veamos un ejemplo particular: los escáneres especializados para la exploración de material fílmico en negativo o positivado, exploradores de medios radiográficos médicos u odontológico, etc. Dichos equipos fueron desarrollados en vista de un uso profesional, que no ha de tomarse tan a la ligera en vista de la inversión realizada. ¿Es justo deshacerse de este equipamiento? Aún si este fuese donado, es más importante hacerlo funcionar bajo Linux que arrojarlo a la basura.

Normalmente contamos con aplicaciones para Linux provistas por los fabricantes, o por una librería genérica como la SANE, munida de un programa libre para hacerla funcionar de manera sencilla .

En este caso particular, se trata de un par de escáneres Nikon Coolscan, Minolta-Konica QScan, y Canon: fotográficos los primeros y médico el último. Se conectan al ordenador a través de una interfaz normalizada USB, pero carecen de software propio para Linux y no funcionan con la opción libre.

Para este menester contamos un software cerrado capaz de ejecutarse en un sistema GNU con Linux Justicialista: se trata de Vuescan, de Hamrick Software. Aplicación multiplataforma, cuyo sentido no es otro que reemplazar el software privativo incluido en muchos escáneres. Es completo pero no demasiado más que otras opciones libres. Su principal ventajas radica en habilitar compatibilidad con más de 1.800 modelos de escáner en Linux. Entre las marcas y modelos soportados bajo el Sistema operativo del Pueblo se encuentran los escaners Acer, BenQ, Agfa serie Arcus y Snapscan, Apple Onecolor, Brother, Canon, Dell, Epson, Fujitsu, HP, Kodak, Lacie series Bluscan y SilverScanner, Lexmark, Microtek series ScanMaker, ArtixScan y FilmScan, Minolta-Konica, Mitsubishi, OKI, Panasonic, Pentax, PIE series Primefilm y PowerSlide, Polaroid serie SprintScan, Umax de las series Astra, PowerLook y Vista, Samsung, Syscan Docketport, Visioneer del tipo común, serie con alimentador, series Roadwarrior y XP, así como los Xerox serie Documate con alimentador. Los detalles técnicos de compatibilidad con los modelos específicos de escáner se podrán encontrar en profundidad aqui.

Si no podemos hacer funcionar nuestro escáner con la librería SANE anteriormente mencionada, bien podríamos probar con este paquete privativo. Se distribuye precompilado y empaquetado en varias versiones, y fundamentalmente en dos arquitecturas: 32 y 64 bits.

En el caso de Ubuntu, habremos de descargar el archivo comprimido que contiene el precompilado adecuado. Ello lo podremos hacer abriendo una Terminal con Ctrl+Alt+T e viendo de ingresar los comandos que correspondan:
  • Si queremos descargar e instalar VueScan 9.4 para Linux de 32 bitios, ingresaremos los siguientes Comandos de Organización:
cd ~/Descargas/
wget http://www.hamrick.com/files/vuex3294.tgz

tar -xvzf vuex3294.tgz
mv ~/Descargas/VueScan/ ~/.vuescan
cd ~
  • Si en cambio queremos descargar e instalar VueScan 9.4 para Linux de 64 bitios, ingresaremos:
cd ~/Descargas/ ;
wget https://www.hamrick.com/files/vuex6497.deb ;
sudo dpkg -i
vuex6497.deb

Para ejecutar el programa podríoamos ir a Aplicaciones / Gráficos / Vuescan.

Si no tenemos el lanzador creado podremos hacerlo mediante clic con el botón derecho sobre Aplicaciones (en el panel superior), y del menú contextual que surja, presionamos Editar Menús. En la solapa izquierda hacemos clic sobre la categoría Gráficos, y presionamos el botón + Elemento Nuevo.
Se abrirá el cuadro de diálogo Crear Lanzador. Ya en él podremos escoger el nombre del programa ("VueScan"). En el campo Comando: podremos indicarle /home/usuario/.vuescan/vuescan.

De esta manera podremos ejecutar el asistente de escaneo desde Aplicaciones / Gráficos / VueScan.

VueScan funciona como cualquier programa básico de este estilo: al arrancar podremos escoger las propiedades de el/los escáneres (si estuviesen conectados), especialmente si deseamos escanear un papel, un negativo o una diapositiva o filmina. Completadas las opciones podremos efectuar un escaneo previo. Este paso nos asegurará un correcto funcionamiento del aparato y nos habilitará a marcar un recuadro para delimitar la zona a escanear en detalle. Una vez realizado el escaneo previo, podremos escoger si deseamos escanear a color o en blanco y negro, las propiedades básicas de exploración, y el formato de archivo (JPG o TIFF).

Las funciones son elementales. Podremos cambiar la orientación y actuar básicamente sobre el equilibrio cromático. También podremos escoger una función de "escanear a archivo" (por defecto) o "escanear a impresora", con lo cual podremos realizar rápidas fotocopias si no contamos con un equipo multifunción.

Si deseamos funciones adicionales de corrección de imágen in situ, o el uso de lámpara infrarroja para el escaneo "limpio" de negativos y diapositivas (en aparatos que dispongan de ella), o la función de reconocimiento de texto OCR deberíamos adquirir la versión "completa" del programa.

Aún así, al menos con la versión gratuita podremos hacer uso genérico de una gran panoplia de escáneres y luego realizar las correcciones gráficas o las tareas de OCR en cualquier software libre de aplicación, tal como el Gimp.

Encontrarán la ayuda en línea de Vuescan aqui.