jueves, 25 de junio de 2026

¿Cómo emulo el SAIL WAITS en Ubuntu?

Interrogado por el director Pino Solanas en Puerta de Hierro, Juan Perón expone cómo instalar y emular el mítico sistema operativo de tiempo de cómputo compartido WAITS, del Laboratorio de Inteligencia Artificial de Stanford en Ubuntu.

(...) 

¡Trabajadores!

Los movimiento revolucionarios suelen ser gregarios, construidos por un realizador tras el cual cien mil predicadores caminan, que es como lo hemos hecho nosotros. En eso - sin que yo perdiese la conducción - me he preocupado de ir conformando, por simbiosis, una organización  para que en el momento en que yo desaparezca, quienes desean la organización y los grupos que desean ser gregarios, puedan elegir su método de conducción en el momento oportuno.

Si aparece un hombre que pueda reemplazarme a mí, no habrá problema. Si ese hombre no aparece, será necesario reemplazarlo con una organización revolucionaria que permita al Movimiento - a través de organismos - ir conformando y cumpliendo los objetivos que nosotros hemos trazado hace muchos años, más los objetivos que las nuevas circunstancias vayan planteando. Hemos tratado de alcanzarlo y creo que - en este momento - tenemos una organización.

El hombre no vece al tiempo, lo único que puede vencer al tiempo es la organización. Pues bien, un sistema de cómputo responde a las mismas premisas. Por este motivo yo he creado los sistemas operativos de tiempo compartido, que sí pueden vencer al tiempo, merced de la organización de sus tareas de cómputo.

WAITS fue precisamente uno de los sistemas de tiempo de cómputo compartido concebido como extensión del software MONITOR que corría en las minicomputadoras DEC PDP-6, y luego ampliado a lo largo de sucesivas versiones en el rango de máquinas PDP-10 con memoria virtual. Fue concebido orgánicamente en la primer encarnación del Laboratorio de Inteligencia Artificial de Stanford (SAIL) a partir de 1966 tras un cisma producido por John McCarthy, Lester Earnest y Arthur Samuel. Merced de la organización, pudo sobrevivir a estos y la comunidad hacker crearon, funcionando de manera continuada incluso hasta 1991. Fue así que las particularidades de este entorno de cómputo en mainframe dieron apoyo a lo que podríamos llamar "la Era de Oro de la investigación de la Inteligencia Artificial", donde la telemática, la robótica, la síntesis de sonido y voz colocaron a Stanford como frontispicio, y unieron a esta a otras instituciones a través de la red de datos Arpanet.

Podríamos decir que esto coloca a WAITS - retrónimo de Western Artificial Intelligence Time Sharing - en el mismo pedestal que otros míticos sistemas operativos de tiempo de cómputo compartido aplicables a los 36 bits de la PDP-10 de los que ya os he hablado, tales como el ITS, o el TOPS-20 "TWENEX". A diferencia de aquellos y de manera única, el sistema de archivo de SAIL WAITS ha sido preservado al completo como imagen de sistema, y - gracias a los esfuerzos de varios investigadores - es capaz de correr, aún bajo emulación en un sistema del Tercer Mundo, como nuestro moderno GNU.

Os demostraré entonces como obtener la imagen 6.17 del SAIL WAITS (1974) y ejecutarla con SIMH, así como correr un programa de inteligencia artificial de dicha época, escribir un programa corto, y utilizar su consola de operación para presentar gráficas vectoriales del período.

Primero instalamos las dependencias en nuestro sistema GNU con Linux. Para ello abrimos una terminal con Ctrl+Alt+t e ingresamos:

sudo apt install cmake unzip libsdl2-dev git

En segundo término, clonamos el repositorio y nos dirigimos a él y lo compilamos mediante el siguiente bloque de comandos de organización:

mkdir ~/.simh/ ;
cd ~/.simh/ ;
git clone https://github.com/timereshared/stanford-waits-simh-quickstart.git ;
mv stanford-waits-simh-quickstart/ waits/ ;
cd ~/.simh/waits/ ;
./build.sh

Esto guion de intérprete de comandos se encargará de preparar el emulador OpenSimH para funcionar como una DEC PDP-10-ka virtualizada, tras lo cual descargará una copia de las imágenes de disco con el sistema operativo WAITS del SAIL, y le aplicará algunos ficheros de sistema faltantes. Todo se indicará como salida en la pantalla del terminal de GNU:

Una vez finalizado la compilación nos lo advertirá indicando algo como:

DART VERSION 5  TAPE TRAILER
Goodbye

simh and WAITS have been set up.. 

Concluido esta puesta en forma, podremos dar arranque al mítico entorno multiusuario de la Costa Oeste en nuestro emulador. Para ello lo ejecutamos con:

cd ~/.simh/waits/ ;
./run.sh 

Aparecerá una ventana con una pantalla de terminal III que funcionará como consola gráfica de framebuffer para la operación del WAITS en la DEC PDP-10. Esta indicará el incentivo a los hackers natural a este tipo de entornos multiusuario ("Tómame, soy toda tuya").

En tanto, en la consola de GNU nos aparecerá la consola de administración del Stanford WAITS.

Como esta es una imagen de un sistema WAITS vivo, ya tiene configuradas varias cuentas de usuarios históricos. Usemos por ejemplo la cuenta REG otrora perteneciende al usuario Ralph Gorin (programador de sistemas en el Laboratorio de Inteligencia Artificial de Stanford durante el período). Podremos loguearnos a ella usando el comando LOGIN, que bien podremos abreviar con L. Para ello, presionamos la tecla de Retorno de Carro - la actual tecla Intro - para que WAITS nos presente su prompt de comandos consistente en un punto ".". Ante él, ingresamos:

L 1, REG

...y presionamos Intro.

Nos será posible apreciar que la ausencia de contraseñas demostraba por entonces  la liberalidad del entorno de programación hacker de mediados de los setentas. Si nos logueamos sin errores, SAIL imprimirá EXIT y ^C, denotando la finalización del proceso de logueo, y presentará el punto del prompt de comandos.

Para permitir el ingreso de mayúsculas y minúsculas en nuestra terminal, ingresamos el comando:

TTY FULL

Ante cualquier eventualidad podremos cerrar la sesión de usuario que estamos empleando con:

logout

En tal caso, nos volvemos a loguear. Si somos peritos en el uso de TOPS-10, veremos que la interfaz de WAITS opera de manera familiar. La mayoría de los comandos de éste operan de hecho, de forma similar. Tipeando DIR obtendremos un listado de directorio, al cualk podremos operar con comodines para expander o limitar la búsqueda. Ante la noción de desear encontrar todos los programas de SAIL (cuya extensión es .sai) podríamos ingresar:

dir *.sai 

De la misma forma, nos será posible contemplar los contenidos de los ficheros recurriendo al comando type. De este modo, para ver el contenido del programa fortune.sai del WAITS, podremos indicar:

type fortun.sai 

Esta operatoria influyó a TOPS-10, éste a CP/M, y este al QDOS, que afectaría de manera similar al MS-DOS y sus interfaces gráficas posteriores, permeando incluso a GNU. Podremos ver el listado de comandos asignado a WAITS simplemente ingresando HELP.
Y no solo eso, también podremos ver qué hacen cada uno de ellos (en una breve descripción en línea, claro), con HELP HELPER
Esta imagen histórica de WAITS contiene un sistema operativo WAITS de 1974 con varios comandos disponibles para correr, creados por los investigadores del Laboratorio de Inteligencia Artificial de Stanford. Un ejemplo clásico entre ellos es Parry, un intento del psiquiatra Kenneth Colby para simular el comportamiento de un paciente con paranoia esquizoide. Podremos invocarlo con el comando de ejecución r. Realizará algunas interrogantes para configurar los parámetros de interacción y nos dejará hablarle a Parry. Para salir del mismo debemos presionar Ctrl+c.
El ambiente WAITS tenía como misión primordial la de volverse una incubadora de programación, y a tal fin incorporaba un ensamblador de macros con depurador en vivo, intérpretes de Fortran, y múltiples facilidades que le fueron montando y lo volvieron famoso (LISP, RAID, FAIL, DART, y otros entornos de programación. Usaremos el ambiente de WAITS para crear un programa de Hola Tercer Mundo en Fortran 4. Para eso daremos empleo al editor SOS con el fin de redactar el código fuente, lo guardaremos, y luego lo compilamos y lo ejecutamos.

Para ello ingresamos

create holam.f4

y creamos un nuevo fichero y nos podrá en el editor. Como es un fichero nuevo, el editor SOS nos permitirá ingresarle texto de manera inmediata. Precederá automáticamente toda línea con un número de línea (el cual no es una etiqueta de Fortran, por cierto). De modo que la pantalla adquirirá esta apariencia:

.create holam.f4
00100

Le introducimos el siguiente programa (donde vemos el signo  debemos presionar la tecla Tab).

	DO 1 J=1,5
1 	WRITE(5, 2)
2 	FORMAT(' HOLA TERCER MUNDO!')
	END

Presionando la tecla Esc sandrá del modo de entrada de texto indicándolo con un "$", y nos pasará al modo Alt (de comandos), presentándonos el prompt de comandos "*". En él, presionamos g para activar el Generador Rápido de Programas de WAITS, encargado de guardar el fichero e invocar la correcta secuencia de comandos que compilarán y ejecutarán el programa. La pantalla debería parecer algo así:

.create holam.f4

00100           DO 1 J=1,5
00200   1       WRITE(5, 2)
00300   2       FORMAT(' HOLA TERCER MUNDO!')
00400           END
00500   $
*g


FORTRAN:  HOLAM.F4
LOADING

LOADER 5K CORE
EXECUTION

HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
HOLA TERCER MUNDO!
EXIT
^C
.

El programa aún permanecerá en la memoria de núcleo, por lo que si queremos conservar una copia permanente en el tambor (disco) debemos recurrir al comando save que allí la depositará (en este caso, de manera emulada en nuestro disco duro).

.save HOLAM
JOB SAVED IN 4K

^C

Si deseamos usar el comando dir, ahora podremos ver los ficheros creados por el proceso de compilación de WAITS:

.dir HOLAM.*

26-JUL-74  1122
FILNAM  EXT   SIZE LAST WRITTEN

   [1,REG]
HOLAM   F4      19  26-JUL-74
HOLAM   DMP    3.5  26-JUL-74
HOLAM   REL     57  26-JUL-74
        TOTAL=   3.6

EXIT
^C

El fichero .rel es el código objeto y el fichero .dmp es el ejecutable, que puede correrse nuevamente ingresando:

run HOLAM

(en WAITS debemos recurrir RUN en lugar de R, puesto que R se utiliza para dar ejecución a los programas incorporados con el sistema operativo).

Usando la terminal de operación

Hasta ahora, hemos hecho uso de la consola de gestión, pero probablemente hayamos notado la terminal de vectores que ha aparecido al iniciar SIMH, con el prompt de bienvenida: 

/images/waits/waits-iii-prompt.png  

Ahora nos loguearemos nuevamente como REG en la terminal vectorial de operación, de la misma manera que en el caso anterior. El WAITS permitía para esta varias tipografías vectoriales escalables.

Veremos que en lugar de cursor actual, en la pantalla vectorial el WAITS indica la posición del caracter recurriendo a un índice visual de estilo teletipo (formado por un triángulo pequeño que se desplaza lateralmente).  

Todos los programas de línea de comandos y de inicio de sesión que hemos utilizado hasta el momento funcionarán también en esta terminal. Pero esta es una terminal de vectores que puede dibujar texto y gráficos junto con un teclado, que puede ingresar más caracteres que los típicos de los teletipos.

Esta vez nos loguearemos con BGB, el archivista principal del sitio saildart.org. Ingresamos:

L 1, BGB 

y luego intentaremos algunos comandos.


Notaremos que al presionar Delete, borraremos propiamente el último caracter en lugar de reimprimirlo como lo hacían las teletipos; de hecho, existe un editor de líneas de comando extensible que observaremos más adelante. Aún así, el sistema emulado no maneja los buffers de forma prístina como lo hace UNIX, y resulta mejor mecanografiar lentamente.

El terminal de video puede hacer más que ofrecer una mera interacción con el monitor de líneas de comando. Presionando F2,w  aparecerá un presentador dinámico del uso de sistema en la parte superior de la pantalla, la que se conoce como línea WHO. Si presionamos F3,w la apagamos. También podremos invocar WHO para ofrecernos un conjunto más extenso de información del sistema (debemos presionar cualquier tecla para salir).


A continuación, ingresaremos:

copy mon  moncom.sh[s,doc]

(La flecha  podremos obtenerla presionando la tecla Flecha Izquierda de Cursor, y luego mecanografiar tv mon.

Esto abrirá el editor TV en una copia del manual del comando monitor. Presionando Ctrl+p avanzaremos página a página y con Ctrl+- y luego Ctrl+p retrocedemos. Presionamos Ctrl+Alt+e para volver al Prompt de WAITS.

/images/waits/waits-tv-editor.png

También tendremos varias demos gráficas de WAITS, incluyendo la del brazo robot de McCarthy. Podremos probar ejecutarlas con el comando r, por ejemplo, r dazzle. Probemos estas:

  • armdpy
  • dazzle
  • hypno
  • petal
  • repent

Cuando termine de ver cada una de las demos, presione F1,F1 y luego escriba core 0 y presione la tecla Intro a fin de borrar el buffer de video.

El WAITS no era ajeno a algunos juegos para divertir a los desarrolladores del Laboratorio de Inteligencia Artificial. Que mejor que una partida para dos jugadores en la red de datos ARPANET. Para ello podremos recurrir al Go con el comando r IIIGO o bien al Monopolio IA, con el comando r monply.


Detener WAITS 

No existe un procedimiento para desconectar el sistema operativo, que quedó encendido ininterrumpidamente desde 1966 hasta 1991. Para desloguearnos de cualquier terminal, podremos ingresar k, abreviación de kjob, o tal vez podramos obtener un deslogueado más personalizado ingresando:

k/me 

Esto presentará en el terminal de operación el indicador de asesinato de procesos del usuario.

Para hacerlo desde nuestra consola de control, podemos presionar Ctrl+e para interrumpir la emulación, y cuando aparezca el prompt del emulador SIM>, presionar la letra q para salir de él (lo que nos devolverá a nuestro intérprete de comandos de GNU).

Para mayor información, podremos recurrir a la documentación corta del Monitor de Comandos del Laboratorio de Inteligencia Artificial de Stanford (SAIL).

De esta manera ¡habremos logrado Vencer al Tiempo, convirtiéndonos en uno de los Amos del Mainframe, reviviendo el mítico Stanford WAITS, cenáculo de la Inteligencia Artificial!

jueves, 7 de mayo de 2026

¿Cómo calibro un Joystick en Ubuntu?

En su Mensaje a la Juventud para el trunco Encuentro de la Juventud Peronista de Febrero de 1967 en Montevideo, Juan Perón expone en magnético cómo solucionar los problemas económicos Argentinos tomando la palanca del quehacer nacional, a la vez que enseña cómo calibrar Joysticks en Ubuntu.

(...)

Partimos de la base que en el mundo actual se está produciendo una de sus más profundas transformaciones, que marca el comienzo de una nueva etapa en la evolución de la humanidad. Es así que lo político, lo económico y lo social han de transformar sus estructuras hacia nuevas formas, impulsados por lo cultural, lo científico y lo filosófico. El problema de la juventud, que encarna el futuro, está precisamente en la interpretación justa de esa transformación, que le permita transitar por la historia con la clarividencia que estos momentos exigen a su acción, porque ninguno de los problemas con que tropieza en el porvenir inmediato podrá solucionarse sin la base existencial indispensable. 

Las tareas de gobierno están siempre orientadas hacia dos finalidades esenciales: la grandeza de la Nación y la felicidad de su Pueblo. Algunos gobernantes, encandilados por la grandeza, sacrifican la felicidad popular e, inversamente, otros atraídos por la felicidad, pueden sacrificar la grandeza. Lo justo es trabajar racionalmente por alcanzar la prosperidad, sin que para ello sea preciso sacrificar el mínimo de felicidad a que los pueblos tienen derecho, porque siempre es preferible una pequeña Nación de seres felices a una gran Nación de hombres desgraciados.

Si, como en el caso actual de la Argentina, los seudogobernantes que precedieron al Gobierno Militar, hipotecaron el futuro del país, no es justo ni es honesto que ahora se cargue sobre las espaldas del Pueblo el total de las consecuencias de tal hipoteca. El gobierno tiene en sus manos mil arbitrios y a él le corresponde resolver el problema en forma conveniente, que no puede ser la de transferir ni la responsabilidad ni las consecuencias al pobre Pueblo que no ha hecho otra cosa que aguantar violencias, fraudes, latrocinios y concupiscencias, con los que no han tenido nada que ver. Al gobierno se le pueden tolerar muchas cosas, menos la injusticia.

Afirmar que la situación económica ha de resolverse haciendo economías es desconocer supinamente el problema argentino. Los países, como los hombres, no se hacen ricos con lo que pueden ahorrar sino con lo que son capaces de producir y de ganar. Los malos tiempos económicos, en una economía organizada, pueden superarse con trabajo y buenos negocios. El Pueblo no ha de quejarse porque se le imponga una dura labor para producir, siempre que se haga lo necesario para que el fruto de ese esfuerzo sea bien distribuido entre los que trabajan. Los buenos negocios nacionales completarán el panorama, porque el país -como cualquier otra empresa económica- se enriquece con buenos negocios y, con malos negocios, se funde. La reacción sindical que comienza a aflorar en el ambiente gremial, pese a las amenazas de represión, tiene su explicación racional en el hecho de que la orientación gubernamental está dirigida hacia la injusticia social que el Pueblo argentino no tolera. Si todo un programa de gobierno se encamina a ahorrar sobre la miseria popular para que los ricos puedan ser más ricos a expensas del sacrificio ingenuo de los pobres, es natural que tal sistema no ha de ser recibido con aclamaciones. La solidaridad nacional solo puede ser compartida por todos los argentinos cuando también se comparten los sacrificios, los esfuerzos y los beneficios. Ésa ha sido la principal razón por la cual se han cambiado los sistemas en el mundo actual.

Estos defensores de la economía libre están navegando en el proceloso mar de la inconsciencia: la economía libre y el libre comercio son solo afirmaciones para el consumo de los tontos y de los ignorantes. La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Es cuanto podemos decir al respecto, y hablar de libre comercio en una economía mundial dominada por los mercados comunes es predicar en el desierto. Pero cuando un gobierno que se dice revolucionario, habla en defensa de semejantes cosas, es para echarse a reír. Es que en situaciones como la que le toca vivir a la Argentina, la tecnocracia suele ser funesta cuando se aferra a sus preconceptos aprendidos, olvidando que la economía es una sucesión de casos concretos que han de solucionarse a base de criterio objetivo y no por la aplicación de recetas, a que tan apegados suelen ser algunos técnicos.

La economía liberal ha cerrado su ciclo, y seguir defendiendo y practicando sus postulados es someterse a unas reglas de juego que ya no existen. Y, aunque la situación actual es peor que la que recibimos en 1946, estamos persuadidos de que, así como solucionamos aquélla, resolveríamos ésta, sin imponer a nadie el menor sacrificio.

Lograríamos, como entonces, pasar de una economía de miseria a una economía de abundancia, daríamos el más alto poder adquisitivo a la economía popular, al tiempo que aseguraríamos la justicia social; alcanzaríamos la independencia económica e impondríamos la soberanía nacional hoy perdida. Si entonces aseguramos la felicidad del Pueblo, ¿no sabemos por qué no lo habríamos de hacer ahora?

Desgraciadamente, los hombres a quienes el destino o la casualidad han puesto en situación de decidir, no se interesan por la verdadera solución de los problemas, porque ellos están en otra cosa, que poco tiene que ver con la grandeza de la Patria ni con la felicidad de los hombres del Pueblo. Es así como el problema que se plantea vuelve a lo mismo: la lucha de una minoría contumaz que quiere mantener sus privilegios, contra la mayoría popular que anhela los cambios indispensables a sus más apremiantes necesidades. En otras palabras, lo que viene sucediendo desde 1955 y que ha ocasionado el estado actual de cosas.

(imagen sintétizada generada por IA con un prompt generado por IA Deepseek R1 en base a prompt subhumano

Para esto es consabido y necesario mantener el control del Estado por medio del Pueblo y sus Organizaciones. En 1943 esta palanca estaba formada por la Secretaría de Trabajo y Previsión, y en un futuro otro será otro instrumento análogo, pero en cualquier caso su manejo debe representar fielmente los designios de la Conducción.

Los sistemas GNU con Linux - reflejo de la necesidad de cómputo de un Pueblo Libre - también de responder a idénticas perrogativas: debemos contar con un método de control que sea fiel a los pedidos que le hacemos.

Sabemos que estos bien pueden fungirse con el uso de Joysticks, palancas de mando y control para todo uso, pero que pueden venirnos de perillas en los juegos. Por lo general estos responden a la fórmula de una palanca, unida por un mecanismo de inclinación a dos sensores - normalmente potenciómetros, pero no son ajenos los medidores magnéticos, acelerómetros, inclinómetros anaeroides incorporados en la placa madre, etcétera. Sus lecturas permiten conformar un conjunto de ejes X e Y que - censados con una gran frecuencia, permiten controlar de manera análoga determinados elementos en la computadora. No es extraño tampoco que se provea al dispositivo con distintos botones interruptores.

Para que estos funcionen adecuadamente, debemos calibrar el dispositivo. Esto implica determinar el grado máximo y mínimo de movimiento que el dispositivo es capaz de censar (en otras palabras, llevar la palanca a sus extremos para que pueda saber el centro justo).

Para ello, en primer lugar debemos conectar el dispositivo en nuestro sistema. Normalmente estos vienen provistos con un conector cableado USB al que debemos conectar a uno de los puertos USB de la máquina.


Para calibrar el joystick podremos usar la cómoda interfaz gráfica. Para ello vamos a Sistema / Preferencias / Hardware / Joystick, lo que lanzará la aplicación jscal de Preferencias de Joystick.

En GNU/Linux, cada dispositivo de control tipo Joystick recibe un fichero de dispositivo /dev/input/jsx, siendo x un número que va desde el 0 en adelante. Dependiendo del host de la controladora USB provista en el equipo, el número suele ser asignado por número de puerto USB, o bien por el momento en el cual se conectó. 

En su primer ventana, nos mostrará el identificador del  joystick instalados. Si todo va bien, debería listar la cantidad de ejes y botones que tienen los mismos. En mi caso calibraré dos dispositivos, un Joystick  Thrustmaster T.16000M de 16 botones y 6 ejes (2 X e Y, un eje Z de giro de palanca para timón, mas un eje para control de acelerador, sumado a dos ejes digitales que forman en el control de vistas). También un CH Rudder Pedals Pro de 3 ejes (dos de accion de pedales para freno, mas otro eje de basculación de timón).

Elejimos cual controlador deseamos calibrar, y calibrar y presionamos calibration. Para iniciar la calibración presionamos el botón Start Calibration ("Comenzar Calibración").

El calibrador nos solicitará mover el control en todos sus ejes, desplazando la palanca hacia todas sus posiciones máxima, idealmente de izquierda a derecha, adelante y atrás, y las máximas esquinas. Concluido el trámite debemos volver los controles la posición neutra intermedia. 

Debemos hacer esto con cada uno de los ejes (Si no lo hacemos, el joystick no podrá censar adecuadamente su movimiento). Tras presionar el botón Aceptar, la ventana nos mostrará los valores de los ejes del dispositivo (rango máximo y mínimo, y el valor del centro).

La herramienta de nos permite cambiar el mapeo de botones. Si el Joystick ha sido adecuadamente detectado, esto no suele ser necesario.

Naturalmente, en el caso que nuestros controladores se descalibren por algún motivo (por ejemplo, debido al desgaste o rotación de los potenciómetros), podremos limpiarlos y reajustarlos, y tendríamos que volver a calibrarlos desde Preferencias de Joystick. Este proceso suele pasar desapercibido, puesto que la utilidad gráfica de Preferencias de Joystick sólo opera correctamente por cada sesión de usuario. En otras palabras, deberíamos recalibrar los joysticks cada vez que iniciamos sesión de usuario

Esta tarea puede volverse tediosa, sobre todo si disponemos de varios controladores conectados a la máquina: antes de utilizarlos deberíamos pasar por la secuencia completa de calibración.

Afortunadamente, gracias al Justicialismo es posible generar una calibración general que se retenga entre sesiones. Se trata del programa para terminal jscal-store, que registra el estado de la calibración actual y la almacena en disco, específicamente en el fichero /var/lib/joystick/joystick.state. Más adelante, podríamos cargar este estado con suma facilidad, ahorrándonos tener que recalibrar el joystick toda vez que iniciemos sesión y queramos utilizarlo.

Un ejemplo suele explicarlo todo. Calibraremos adecuadamente dos controladores, en este caso los dispositivos /dev/input/js0 (un joystick Thrustmaster T.16000M), y /dev/input/js1 (pedales CH Products CH Pro Pedals). Los calibramos bien, comprobamos su correcto funcionamiento - si no lo hubiésemos hecho ya - y una vez conforme con su desempeño, abrimos una terminal con Ctrl+Alt+t y almacenamos dicha calibración:

Para el primero debemos ingresar: 

sudo jscal-store /dev/input/js0

...mientras que para guardar las calibración del segundo dispositivo , ingresamos:

sudo jscal-store /dev/input/js1

El fichero /var/lib/joystick/joystick.state generado podría guardar una apariencia similar a la siguiente:

NAME="CH PRODUCTS CH PRO PEDALS USB "
VENDOR="068e"
PRODUCT="00f2"
jscal -u 3,0,1,2,0
jscal -s 3,1,0,180,180,3419455,7158060,1,0,212,212,2840500,12484989,1,0,140,140,4036500,4668300

NAME="Thrustmaster T.16000M"
VENDOR="044f"
PRODUCT="b10a"
jscal -u 6,0,1,5,6,16,17,16,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303
jscal -s 6,1,0,8192,8192,65534,65534,1,0,8192,8192,65534,65534,1,0,128,128,4194176,4227201,1,0,128,128,4194176,4227201,1,0,0,0,536854528,536854528,1,0,0,0,536854528,536854528
 

Una vez hecho este paso, y siempre que no cambiemos de puerto USB los Joystick, podremos recuperar "a mano" dicha calibración almacenada con el programa jscal-restore, introduciendo:

jscal-restore /dev/input/js0
jscal-restore /dev/input/js1

Ahora bien, ambos comandos pueden incorporarse en un fichero único que porte un nombre mucho más cómodo. Por ejemplo, tras ingresar en nuestra terminal:

cat <<EOF > ~/.local/bin/recalibracion
#!/usr/bin/bash
##Carga calibraciones guardadas de joystick1 y joystick2
echo "Cargando calibración guardada de js0 y js1."

jscal-restore /dev/input/js0
jscal-restore /dev/input/js1
EOF

...y tras agregarle a este script de recalibracion, los permisos de ejecución necesarios, mediante:

chmod +x ~/.local/bin/recalibracion

...deberíamos ahora poder cargar dicha calibración ingresando tan sólo:

recalibracion

y ya será suficiente.

No obstante, incluso podríamos facilitar esto aún más. Nuevamente, si no cambiamos los Joysticks de estos puertos USB, podremos agregar este script /home/usuario/.local/bin/recalibracion al listado de aplicaciones de "ejecución al inicio" de nuestro escritorio gráfico. Al obrar de esta manera, la recalibración se realizará de forma automática no bien iniciemos una sesión de nuestro escritorio gráfico.

Para configurarlo así vamos a Sistema / Preferencias / Personal / Aplicaciones al Inicio y cuando aparezca el cuadro Preferencias de las Aplicaciones al Inicio presionamos el botón Añadir.

Aparecerá el cuadro de diálogo Añadir un programa al Inicio, el cuyo campo Comando: introducimos la ruta del script /home/usuario/.local/bin/recalibracion (reemplazando usuario por nuestro nombre de usuario del sistema). Completaremos el resto de los campos del cuadro de diálogo según nuestras preferencias:

...y una vez completo, presionamos el botón Añadir+, lo que sumará la recalibración de joysticks al listado de programas adicionales para iniciar. Cuando se inicie nuestro escritorio gráfico, con esto se recargarán las calibraciones de los dos joysticks. En apretado resúmen, tendremos listas las palancas del Movimiento sin tener que estar perdiendo tiempo.

viernes, 24 de abril de 2026

¿Cómo instalo SETEdit en Ubuntu?

En su Conducción Política, Juan Perón exponía las edificaciones que ha de contemplar el Conductor, a la vez que explica cómo instalar el editor estilo Borland SETEdit en Ubuntu. 

(...)

Es inútil dar a una masa inorgánica y anárquica un conductor. Lo van a colgar. Primero hay que formar esa masa. Sobre ella edificar, y al final, en el vértice de la pirámide, ahí va a estar el conductor, y esa masa lo va a llevar al conductor cuando el conductor no pueda llevarla a ella, porque la conducción no se hace sólo por medio del conductor.

Es decir que la conducción tiene ese fenómeno extraordinario, y el conductor es a veces conducido por los propios elementos de la conducción, cuando ellos están capacitados. Pero, si no lo están, la primera vez que flaquee el conductor se hunde él con todos sus cuadros.

Es decir que yo - al hablar sobre los elementos de la conducción - quiero dar la sensación de que no se conduce ni lo inorgánico ni lo anárquico. Se conduce sólo lo orgánico y lo adoctrinado, que tiene obediencia, disciplina inteligente, y una iniciativa que le permite actuar a cada hombre en su propia conducción.

Esto es simple: un conductor, por genial que sea, no puede llegar a cada uno de los millones de hombres que conduce. Hay una cosa que debe marchar sola, es decir, la doctrina, que pone a todo el mundo a patear para el mismo arco. Ya eso le da una dirección a la masa. Luego está la organización, que le da unidad en la concepción de las cosas y unidad en la ejecución de las cosas. Sin esa unidad de concepción y sin esa unidad de acción, ni el diablo puede conducir. 

Es decir que en la conducción no es suficiente con tener –como algunos creen– un conductor. No. El conductor no es nada si los elementos de la conducción no están preparados y capacitados para ser conducidos. Y no hay conducción que pueda fracasar cuando la masa que es conducida tiene en sí misma el sentido de la conducción. 

Por eso, conducir es difícil, porque no se trata solamente de conducir. Se trata, primero, de organizar; segundo, de educar; tercero, de enseñar; cuarto, de capacitar, y quinto, de conducir.

Nuestro sistema GNU con Linux representa las mismas características generales. De nada sirve contar con la arquitectura de procesador y el software que corra en ella, si no tenemos la doctrina del Software Libre. En nuestro caso la avala la GPLv3, una licencia que protege una comunidad de programadores libres y conscientes, más que al software o a empresas de Capital.

Esto nos ha permitido formar una línea que es capaz de dar los resultados del software que nosotros anhelamos, y no los que otros han digitado para nosotros, con mejor o peor intención. Tal es así que nuestro software, justamente modificado, es capaz de sortear múltiples entornos de ejecución: GNU, y otros similares a UNIX como los BSDs, Solaris, QNX, pero también DOS, Win32, y otros sistemas dinosaurios. Algunas obras de nuestro arte, en particular, pueden adaptarse particularmente bien a todos los gustos.

Una de las más notables es el editor de pantalla SETEdit diseñado por Salvador Eduardo Tropea. Se trata de un editor compañero y amigable, liberado bajo GPLv2+ que puede recordaron a los chamánicos editores que la Borland producía  para la éjida de DOS.

Podremos instalar la versión 0.5.8-1 "Perito Moreno II" de SETEdit en Ubuntu. Para ello abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente Comando de Organización: 

sudo apt install liballegro4.4 libncurses5 ;
cd /tmp ;
wget https://sourceforge.net/projects/tvision/files/UNIX/2.2.1%20Jessie/rhtvision2.2.1_2.2.1-4_amd64.deb/download ;
wget https://sourceforge.net/projects/setedit/files/setedit-unix/0.5.8%20Jessie/setedit_0.5.8-1_amd64.deb ;
wget http://prdownloads.sourceforge.net/setedit/setedit-pdf-0_5_4.zip ;
unzip setedit-pdf-0_5_4.zip ;
sudo dpkg -i rhtvision2.2.1_2.2.1-4_amd64.deb ;
sudo dpkg -i setedit_0.5.8-1_amd64.deb

Para crear un lanzador podremos ir a Sistema / Preferencias / Aspecto y Comportamiento / Menú principal, y en el panel Menús del cuadro Menú Principal seleccionamos Programación y presionamos el botón Nuevo ítem+. Luego en el cuadro de diálogo Crear Lanzador completamos el campo Orden: con setedit %U y presionamos el botón Aceptar.

De esta manera podremos iniciar el programa desde Aplicaciones / Programación / SETEdit.

También podremos iniciarlo indicándole un fichero específico, o bien comenzar en modo directo. En este último caso nos indicará una ventana con "sugerencia del día".

En el caso de Linux por defecto utiliza el cliente para X11; pueden especificarse cualquier número de ficheros después de las opciones, y se cargarán en el editor en el mismo orden listado, ante lo cual podremos trabajar en la edición en pantalla con TUI (interfaz gráfica en modo texto).

SETEdit está diseñado para programadores; su principal objetivo es el código C y C++, aunque también admite Pascal y Clipper. Admite muchos comandos al estilo WordStar, además de algunos comandos CUA.  

El editor cuenta con autoindentado al vuelo así como resaltado de sintaxis de numerosos lenguajes de programación, por lo que destaca como un editor de código fuente.

Entre las funcionalidades típicas de Setedit encontraremos el uso de ventanas ajustables, que podremos acomodar en cascada, enviar a segundo plano, o bien disponer lado a lado. También tendremos las clásicas ventanas de selección de caracteres ASCI/ANSI, una calculadora de escritorio, e incluso un reproductor de ficheros de sonido MP3 que podremos activar desde el mismo entorno IDE, si lo que deseamos es escuchar la más maravillosa música.

Las opciones son intensamente configurables desde el menú Tools&Ops/Opciones. Podremos allí ajustar las codificaciones del texto, y aunque es capaz de mostrar la codificación UTF8 utilizada actualmente con Linux, en aras de compatibilidad suele recurrir a ISO Latin 1 para solventar el español. Además contamos con el botón Original, que vuelve todo el seteo a los valores de fábrica.

Podremos configurar Setedit según con opciones globales (Alt+g) que configuran el comportamiento de todo el editor, o bien configuraciones locales (Alt+l), que configuran únicamente el comportamiento del editor con el documento seleccionado.

La configuración se guarda en ~/.setedit/setenv.dat, un fichero manipulable sólo con el editor. Sólo basta con correr el editor en el directorio ~/.setedit/, configurar el editor, y salir con Alt+x, lo que creará un fichero de configuración .setedit/setenvir.dat adecuado. El fichero de configuración ajustado desde el editor en sí es ~/.setedit/.deflopts.txt.

Podremos recurrir a la documentación en línea.

miércoles, 11 de marzo de 2026

¡Ubuntu Peronista supera los 3 millones de visitas!

Este miércoles 11 de marzo, el blog de adoctrinamiento político-tecnológico Ubuntu Peronista superó los 3 millones de visitas a su plataforma. 

La cifra es acreditada a través las Estadísticas de Blogger.

Operando en superficie desde 2009, Ubuntu Peronista compendia soluciones ofrecidas en ocasión por el mismísimo Juan Perón, Conductor del Justicialismo, con el alto fin de lograr un Software Libre, Justo y Soberano.

Divulgando distintos cursos de acción, el Blog combate al capital no monetizando. Propone soluciones de todo calibre y tenor impuestas por el Primer Programador, a la vez que combustiona una lucha telemática a muerte contra la puta oligarquía gorila y sus medios informáticos privativos.

Ubuntu Peronista cuenta con más de 950 entradas, destacando superación de interrogantes y problemas referidos a todo tipo de uso de sistemas informáticos. Este herramental, ofrecido a las las Masas Obreras, permiten fraguar un firme pilar de lucha que torne una de las distribuciones de sistemas operativos GNU con Linux más populares, el Ubuntu, en un lugar mejor. 

Ubuntu Peronista se consolida así como un notable entre una enorme Comunidad Organizada de blogs en castellano sobre la temática Software Libre. 

Finalmente, desde el Blog queremos hacer llegar a todos nuestros lectores y blogs amigos un saludo muy afectuoso.

sábado, 28 de febrero de 2026

¿Cómo convierto PhotoCD a JPG en Ubuntu?

En sus amplios conceptos pronunciados el 24 de febrero de 1949 ante los representantes de gremios obreros acerca del panorama nacional, Juan Perón expone la necesidad aprender a elaborar y cumplimentar planes, a la vez que amplía sobre la conversión de Kodak PhotoCD a JPG en Ubuntu.

(...) 

Todos mis planes han sido muy sencillos, porque el secreto no está en hacer un gran plan y no cumplirlo, sino en hacer un plan más modesto y cumplirlo

Cuando vinimos aquí no teníamos un centavo; teníamos solamente la verdad, que vale por todos los millones. Yo tenía que hacer todo lo que había que cumplir, que representaban diez mil millones de pesos: ferrocarriles, teléfonos, marina mercante, construcciones que estábamos haciendo, la nacionalización de los seguros, compañías estatales, en fin, todo eso que estaba desordenado, y yo decía: "¿de dónde saco tanta plata?". Convoqué a mis amigos, les planteé la situación y les pregunté qué podíamos hacer. Pensamos mucho sobre el asunto y, al final, alguien pensó que si vendíamos nuestra cosecha a diez veces su valor íbamos a juntar mucha plata. Así surgió la primera idea tan importante. Durante tres años teníamos que vender todo lo que producíamos a diez veces más

¿Cuál es la ventaja económica que eso representa? Muy simplemente, es cuestión de sacar la cuenta: Bunge & Born se llevaba 1.500 millones de pesos al año, 200 a 300 millones se llevaban los ferrocarriles en concepto de beneficio. En concepto de dividendos de los teléfonos, salían del país 100 a 150 millones de pesos por año. Así podríamos seguir sumando; la deuda pública representaba dos millones de pesos diarios y la pagaban ustedes. 

Tengan en cuenta que con tres cosechas hemos pagado 10.000 millones para los ferrocarriles, teléfonos y marina mercante. Todo eso lo llevaban ellos, los fletes insumían 200 a 300 millones de pesos. En cambio, la marina mercante hoy es nuestra.

Es lógico que estén enojados, porque les hemos vendido caro. No obligamos a nadie a comprar; compró el que quiso, y así hemos puesto la economía argentina al día. Antes eran todas compañías extranjeras y hoy son todas argentinas. Pero eso queda ahora acá, lo manejamos nosotros y lo repartimos entre nosotros.

Es lógico que hayamos tenido que desplazar a señores que antes comercializaban la cosecha; han desaparecido los importadores y exportadores, o sea los intermediarios que se quedaban con el santo y la limosna. Esos señores tienen que ser enemigos nuestros; no pueden ser amigos. Tienen que ser enemigos porque sus negocios no marchan.

En el orden internacional quienes antes se llevaban gratis nuestros productos, tienen que pagarlos ahora a buen precio y se comprende que estén disgustados. Pero tampoco hubiera sido admisible que, para no disgustar a esos señores, hubiéramos tenido hambriento a nuestro pueblo en el país de la alimentación. Que se enojen, pero yo quiero que no se enojen los argentinos.

Nadie puede negar todo lo que hemos realizado, porque todo el mundo lo sabe y los obreros conocen la verdad porque hay muchos de ellos en el Gobierno. ¿Quién nos ha dado el dinero? ¿Cómo lo hemos hecho? Todo es nuestro, todo se ha pagado. Esto lo está viendo todo el mundo.

Pero todo lo realizado en el campo político, social y económico ha disgustado a cierta gente que ahora está, lógicamente, en contra de nuestro movimiento. Son los perjudicados, porque no pueden ser todos beneficiados. Si yo hubiera podido beneficiar a ellos y al pueblo, lo habría hecho; pero para poder beneficiar al pueblo tuvieron que perjudicarse ellos que habían perjudicado toda la vida al pueblo.

Todo lo llevado a cabo había que hacerlo con toda decisión. Por ello, actuamos decidida y rápidamente. Han pasado tres años, y ahora ellos se han puesto de acuerdo y han hecho un plan para anular todo lo que nosotros hemos realizado. Los enemigos que he enumerado a lo largo de esta conversación se han puesto de acuerdo para hacernos una zancadilla.

En el cómputo suele acaecer, por decantación, lo mismo que en estas políticas: debemos recurrir a planeamientos lo más simple posibles y cuya realización sea factible. Es así como uno puede - de forma lógica y con un sistema de pequeñas capacidades - afrontar los más grandes problemas de la informática.

Veamos un problema que pueda servirnos de ejemplo, para trazar a partir de él esta máxima y su conclusión. Recientemente, me he propuesto recuperar para el Pueblo algunas imágenes PCD antiguas recurriendo a un sistema Linux, en un reto que ponga en relevancia los estándares abiertos en cualquier tipo de archivo digital.

Vean señores, es sabido que en el mundo de la fotografía, si ha existido un formato de archivo propietario digno de considerar, este ha sido el Kodak Photo CD. Como resultado de varios desarrollos técnicos especialmente tendientes al escaneo digital de diapositivas y negativos, en 1991 la Eastman Kodak Corporation presentó su Kodak Photo CD Image Pac, o PCD, tendiente a convertirse en el formato de imagen preferencial para el franquiciado de laboratorios de fotoacabado profesional.

La idea detrás de la propuesta original era ofrecer comercialmente - junto al revelado y copia - el escaneo de alta resolución de todo tipo de películas fotográficas (desde las emulsiones en formato APS, pasando por el popular 35 milímetros, hasta carretes de formato medio), y lograr su almacenamiento en disco óptico

El sentido era permitir archivar digitalmente con la mayor calidad, a la vez que permitir visualizar instantáneamente las imágenes digitalizadas en un reproductor conectado a un televisor a color. Asimismo, permitir su posterior tratamiento informático y copiado (no bien el adecuamiento tecnológico necesario se hubiese producido, ya que pocas computadoras tenían por entonces la capacidad de visualizar fotografías a todo color y a grandes resoluciones).

La solución para poder abarcar tales propuestas resultaba - al momento de su introducción - divergente en cuanto a los requerimientos técnicos. Por este motivo cada archivo PCD consiste realmente de un contenedor de imagen multirresolución. Consta de una imagen con una resolución de 768x512 pixels a la que se bautizó Base (destinada a su visualización en pantalla televisiva), junto a reducciones de la misma clasificadas como Base/4 y Base/16, concebidas para una veloz revisión de miniaturas en modalidad "hoja de contactos" junto a otras imágenes en pantalla. La cereza en la torta la representaban los registros en alta resolución Base*4 (adecuado para APS), Base*16 (para 35mm) y Base*64 (opcionalmente reservada a tomas realizadas en formato medio, de 6x4,5" o 120mm). Se trataba de escaneos realizados con la resolución óptica nativa del escáner, la mayor permitida. Las equivalencias de tamaño de Base*16 es 3072x2048 pixels (o sea, 6,3 megapíxeles), mientras que el Base*64 logra unos estrafalarios 4096x6144 pixels (25 megapíxeles). Se trataba - y con mucha diferencia - del puntal tecnológico de la industria gráfica en ese momento.

Las peculiaridades no terminaban allí: los diferentes tamaños no se almacenan por separado como lo hacen las miniaturas dentro de los archivos JPEG, sino que cada una de las resoluciones más bajas consisten en un subconjunto albergado dentro de la imagen de tamaño nativo. Cada disco óptico del formato PhotoCD podía almacenar realísticamente un poco más que un centenar de imágenes en Base*16 (algo así como tres carretes de 35 milímetros de 36 exposiciones). En el caso de optar por los formatos medios de 6x4,5 pulgadas o 120 milímetros, gracias a Base*64 podrían almacenarse en un disco compactos hasta tres carretes, un total de 36 exposiciones con la máxima calidad de de 25 megapíxels.

El PCD tiene ventajas para su uso propiciado: recurre a un método de codificación particular denominadao PhotoYCC, que si bien guarda ciertas similitudes al actualmente popularizado método YCbCr, lo supera al ser capaz de representar información de luminancia por encima del 100% de brillo (al que define en términos de un patrón lumínico referencial, con independencia de la escena fotografiada). La latitud de exposición adicional que proporciona este método de codificación resulta particularmente útil a fin de dar cuenta de la representación de imágenes con objetos extremadamente brillantes (por ejemplo, resplandecientes), y - en este sentido - puede considerárselo un precursor de las técnicas utilizadas para abarcar el registro con alto rango dinámico (HDR) popularizadas en la actualidad

En otras palabras, PCD no tenía defectos técnicos de relevancia: para el momento de su lanzamiento, el Kodak PhotoCD implicaba alcanzar calidades prácticas de reproducción muy por encima del uso hogareño típico, y la comparativa instantaneidad que permitía demostró su utilidad al fotoperiodismo de avanzada. Simplemente fue un formato privativo, de proveedor único, y en la medida que los usuarios fueron decantando formatos de imágenes estandarizados, especialmente aquél con compresión JPEG - atendiendo a su empleo en redes de datos de bajo ancho de banda - Kodak perdió el interés en mantenerlo. Como consecuencia, el Kodak Photo CD quedó huérfano, y completamente inutilizado. 

Reproducir estos ficheros constituye entonces un desafío. La compañía dejó de vender el equipamiento utilizado para crear los archivos PCD, por lo que únicamente resta poder utilizar los discos ópticos PhotoCD (compatibles con el formato CD-ROM XA), y poder visualizarlo y tratarlo en equipos modernos. El formato de imagen si bien no es inaudito, es en sí inusual, razón por la cual fue rara la compatibilidad con software de terceros. Las peculiaridades técnicas de avanzada a la hora de diseñar el formato gráfico (definiendo niveles exacerbados de luz tal como existen en la realidad) tuvo cierta responsabilidad, al confundir a muchos desarrolladores, logrando herramientas de baja calidad relativa, cuyos programas tendían a recortar incorrectamente los datos PhotoYCC, produciendo conversiones a formatos de imágen TIFF y JPEG con ciertos niveles de subexposición.

El trabajo original de ingeniería sobre el formato inversa fue realizado por Hadmut Danisch de la Universidad de Karlsruhe (quien descifró el formato estudiando volcados hexadecimales de archivos de Photo CD) y posteriormente escribió hpcdtoppm, que convierte imágenes de Photo CD al formato PPM, a principios de los años 1990. Este se distribuyó ampliamente como parte de varias distribuciones de GNU, pero desde entonces ha sido abandonado casi por completo debido a preocupaciones sobre las restrictivas condiciones de licencia de hpcdtoppm y su falta de gestión del color.

Ted Felix estaba tan descontento con las ofertas de conversión existentes que se dedicó a revisar la antigua documentación publicada por Kodak, dando con una manera de corregir el problema en gran medida: Modificó un fichero propietario de una biblioteca dinámica .DLL para Window$ - que Kodak suministraba a las empresas de software - alterando a mano la tabla de valores que escala los niveles de luminancia del PhotoCD. Dicha biblioteca parcheada por Felix permite reemplazar la original, haciendo posible la creación de software alternativo para la conversión fiable bajo Window$ de 16 bits.

Indudablemente que a pesar de sus limitaciones, la labor de ingeniería inversa de Hadmut Danisch progresó para crear implementaciones de código abierto de decodificadores de Photo CD como la incluida en el mítico ImageMagick, suite de conversión de imágenes con un desarrollo activo. A pesar de contar con los mismos problemas a la hora de gestionar las altas luces, es llano emplearlo. Sólo basta con  instalarlo con:

sudo apt install imagemagick

...y convertir las imágenes PCD a partir de la resolución Base, con sólo ingresar:

convert image001.pcd image001.tiff

A pesar de sus resultados nativos, las imágenes así tratadas suelen resultar más oscuras y opacas de lo necesario. 

En 2009, Sandy McGuffog creó PCDtoJPEG liberándolo bajo GPLv2. El autor reconoce haberse basado en la labor de Danisch y contemplado una modificación similar a la de Felix. PCDtoJPEG permite así decodificar metadatos de Photo CD, gestionar el color y decodificar todas las variantes conocidas de archivos de Photo CD (no sólo la resolución Base), a la vez que maneja mejor los factores de exposición y la curva de gama del fichero obtenido. Lamentablemente, como tal el PCDtoJPEG sólo podría correr en el ambiente Window$.

Nadie duda que los factores de exposición así como las curvas sensitométricas son material de habla sobre los que los fotógrafos pueden discutir días enteros, pero considero contar con un conversor simple que opere adecuadamente con la mítica película registrada en el medio óptico del PhotoCD - aunque no sea nativo a GNU - es una ventaja difícil de soslayar.

Afortunadamente, el Justicialismo ha impuesto capas de abstracción que permite correr cierto tipo de software escrito para Window$ en Ubuntu, como muestra de la política pendular que nos caracteriza. De esta manera, el procedimiento será descargar PCDtoJPEG Window$ (que opera adecuadamente) y usarlo en GNU con Wine. 

Para ello abrimos una terminal e indicamos el siguiente bloque de comandos de Organización:

sudo apt install git wine ;
cd /tmp ;
git clone https://github.com/kmaragos/pcdtojpeg

Si bien no me he visto capaz de compilar nativamente PCDtoJPEG en Linux,  "podremos atar con alambre" y ejecutar el binario precompilado incluído con Wine; indicando el fichero PCD a convertir lograremos hacerlo.

wine /tmp/pcdtojpeg/Binaries/Windows/pcdtojpeg.exe /ruta/origen/IMG0001.PCD /ruta/destino/img0001.jpeg 

Obtendremos así el fichero de destino solicitado, en formato JPEG.

Pues bien señores, si el resultado nos convence podríamos querer automatizar esta funcionalidad e integrarla a nuestro sistema de una manera un poco más efectiva, con un simple guion. Inicialmente copiamos el ejecutable para Window$ al directorio /opt de nuestro sistema GNU:

sudo mkdir /opt/pcdtojpeg/ ;
sudo cp /tmp/pcdtojpeg/Binaries/Windows/pcdtojpeg.exe /opt/pcdtojpeg/

...y hecho esto, creamos un guion ejecutable. Abrimos el editor para crear guion para Linux:

nano /home/$USER/.local/bin/pcdtojpeg 

...y le pegamos el siguiente código que envuelva al programa para Window$ y nos permita ejecutarlo con Wine:

#!/usr/bin/bash
wine /opt/pcdtojpeg/pcdtojpeg.exe $1

Tras guardar los cambios con Ctrl+o y salir con Ctrl+x, otorgamos al guion los permisos de ejecución mediante:

chmod +x /home/$USER/.local/bin/pctojpeg

Y ya con esto, podremos ser capaces de convertir un fichero PCD en nuestro sistema GNU de la siguiente manera:

pcdtojpeg IMG0001.PCD

... y el guion convertirá el PCD de origen al fichero de destino IMG0001.jpg sin más trámite. De esta manera habremos hecho factible y real el hecho de lograr la conversión de un PCD a JPEG en Linux

Existe una moraleja que debemos tener en cuenta. Hoy en día, los principales fabricantes de cámaras digitales utilizan formatos de registro en bruto (RAW), generalmente de único proveedor, y en la mayoría de los casos mal documentado. ¿Qué tan fácil será acceder a esos archivos .SRF, .NEF y .CR2 dentro de 20 años? Incluso el formato DNG de Adobe - independiente del fabricante de cámaras y cuya especificación está disponible públicamente - se desarrolla y publica esclusivamente por el Capital. Solo podemos confiar en que este tipo de herramientas libres, o hacks demenciales sobre código fuente capaz de operar en máquinas compatibles puedan seguir realizando el trabajo.