miércoles, 24 de diciembre de 2025

¿Cómo reviso mi hardware desde el Escritorio en Ubuntu?

En El Imperialismo y la Liberación de diciembre de 1967, Juan Perón articula su lúcido análisis coyuntural, a la vez que expone cómo conocer el hardware propio en Ubuntu

(...)

Los Estados Unidos siguen en nuestro continente un plan perfectamente establecido desde la terminación de la Segunda Guerra Mundial cuyo objetivo es someter - de una u otra manera - a todos los países iberoamericanos y poder contar con ellos de forma incondicional, por la captación o por el copamiento liso y llano. 

Este proceso - ya en ejecución - ha provocado una serie interminable de hechos y circunstancias de una elocuencia superior a cuanto podríamos enjuiciar. Tan grande ha sido la impunidad que - en numerosas ocasiones - se ha prescindido de todo encubrimiento o simulación para obrar con la mayor desaprensión e impudicia. 

En los casos de los gobiernos dóciles - normalmente representantes de la oligarquía vernácula - el imperialismo no tiene dificultades para su copamiento. Normalmente es su servicio diplomático el que se encarga de hacerlo con la cooperación de todos los organismos internacionales orquestados desde hace mucho en función imperialista, con agentes pagos y obedientes, extraídos de los propios horizontes oligárquicos o de personeros políticos y técnicos a su servicio. En estas condiciones no cuesta mucho al imperialismo tomar posesión con intermediarios, estrechamente vigilados por su servicio de informaciones y las numerosas instituciones controladas por la CIA (bibliotecas, empresas, bancos, agregados de embajadas, etc.), que actúan en el país no solo con esa misión sino prácticamente con la de dirigir todo el sistema. 

Alcanzado el objetivo de tomar el poder y manejarlo, se procede a la planificación correspondiente, no con los objetivos del país, sino con los designios y finalidades fijadas por el imperialismo. A cambio de eso, los Estados Unidos aseguran la estabilidad de su gobierno títere mediante su apoyo político y toda su presión económica. Mientras tanto, la penetración continúa hasta copar los diferentes factores de poder, ayudada a veces por el propio gobierno y empleando todos los poderosos medios en sus manos (que van desde la acción publicitaria hasta la intimidación o la violencia). Cuando un pueblo ha sido sometido por este medio, no tiene salvación posible a corto plazo. 

Ya al exponer los métodos de penetración imperialista en el mundo, hemos dado la suficiente explicación de su procedimiento. Pero los trucos utilizados para la penetración económica en América Latina intentan cumplir una realidad irrefutable: el hambre, la miseria y el dolor de los pueblos explotados tanto por el capitalismo como por las oligarquías vernáculas y el imperialismo

Pero los pueblos - que son en realidad los que reciben la bofetada- acumulan presión y comienzan a producirse explosiones esporádicas materializadas por las guerrillas o luchas irregulares

El caso de Sandino en Nicaragua es un ejemplo que no tiene desperdicio. Como suele ocurrir en estos casos, ese patriota se levanta en armas ante el intento de invasión de las fuerzas imperialistas. Después de una larga lucha armada, triunfa sobre su enemigo y libera su patria de tal amenaza. Todo el mérito de esta hazaña se debe principalmente a él. Sus enemigos lo saben. Terminada la guerra, se hace una comida en Managua a la cual concurre, invitado especialmente, Sandino. Terminada la fiesta, festejando la paz alcanzada, Sandino abandona el lugar sin ni siquiera sospechar que haya podido ser traicionado. Pero no tarda en ser detenido en la calle. Acto seguido sus opresores lo entregan y, de inmediato, lo asesinan. Este hecho, conocido en toda América, no es el primero ni el único. Pancho Villa no] tuvo mejor suerte y murió asesinado en circunstancias un tanto misteriosas.

Hace poco, Ernesto Guevara no tuvo suerte diferente porque, a pesar de todo el teatro que se hizo, nadie duda ya que la mano asesina (porque él sobrevivió herido al combate) no es difícil de individualizar entre los gringos que merodeaban alrededor de su cadáver mientras se hacía la macabra y miserable exhibición.

Es claro que cada uno de los héroes que se desempeñaron en la defensa de su patria, se les ha colgado el rótulo de moda: comunista. Pero es indudable que si el imperialismo es el culpable de semejantes fechorías, realizadas con finalidad tan repugnante, los “nacionales” de cada uno de los países que se prestan desde el gobierno para que tales crímenes se cometan, cargan no sólo con la responsabilidad sino también con el estigma más infamante para un ciudadano.

Image
Todo esto nos permite inferir que para lograr la auténtica Liberación, primero debemos saber la madera con la cual hemos de trabajar. En nuestros Movimientos esto lo hacemos conociendo al dedillo a sus partícipes. En el caso de GNU con Linux debemos aspirar al mismo conocimiento, tanto desde el punto de vista de software - lo cual ya he tratado - como por la vertiente del hardware sobre el que se intenta montar el sistema.

Es sabido por todos nosotros que la terminal de nuestro sistema GNU con Linux sobra para recibir información respecto a su hardware; basta con digitar comandos como lspci o lsusb recibiremos un listado de los dispositivos conectados, o bien con lscpu información sobre nuestros núcleos de procesamiento.

Tampoco resulta secreto para nadie que incorporar herramental gráfico para lograr esto puede redundar en que todos los compañeros puedan corroborarlo. Muchos entornos de escritorio cuentan con un aplicativo propio (por ejemplo, desde Aplicaciones / Herramientas de Sistema / Monitor de Sistema de Mate en el caso del Escritorio Mate, o sus equivalentes para KDE, GNOME, XFCE, etcétera), que nos permitirá monitorear el sistema en tiempo real. Obtendremos así informes lo suficientemente adecuados para la mayoría de los quehaceres básicos.

Sin embargo, en ocasiones anhelamos obtener mayores detalles incluso desde desde el escritorio gráfico, bien porque nos apetece, o bien porque queremos que algún neófito cuente con herramental sencillo para hacerlo. Teniendo en cuenta tales premisas, puedo recomendarles el viejo y peludo hardinfo, utilidad escrita por el compañero Leandro A. F. Pereira y liberada bajo GPLv2.

Para instalarlo abrimos una terminal con Ctrl+Alt+t e ingresamos el comando:

sudo apt-get install hardinfo

Esto nos descargará el paquete con el programa y lo instalará en el sistema, y podremos ejecutarlo desde Aplicaciones / Herramientas de Sistema / Información y Rendimiento del Sistema.

Image

Con este podremos hacer informes sobre performance y benchmarks, a la vez que comparte una interfaz similar al conocido CPUinfo. 

Image

También tendremos uno parecido al cpu-x, un software de monitorización liberado bajo GPLv3 y similar al conocido CPU-z para Window$. Para instalarlo en nuestro sistema GNU con Linux ingresamos:

sudo apt-get install cpu-x

Y podremos lanzarlo desde Aplicaciones / Herramientas de sistema / CPU-x.

Image

Como vemos, CPU-x nos permite dar con la información técnica básica del procesador del sistema. Asimismo será capaz de obtener aún mayores datos, aunque para ello naturalmente requeriría activar un demonio de monitorización con la admonición de los permisos de Administreador. Para activarlo habremos de  presionar el botón Start Daemon (e ingresar la contraseña de Conductor o root, claro está).

Sabido qué tipo de hardware tenemos, encontraremos que el desarrollo de los explotadores solo podría suprimirse con la liberación. Esa liberación, a esta altura de los acontecimientos, solo puede alcanzarse, por lo que venimos viendo, mediante una lucha cruenta, lo que se infiere no solo de la contumacia de las fuerzas del mal del hardware y el software privativo, sino también del avance de la conquista y la colonización en que está empeñado el imperialismo. 

El caso de GNU debe ser suficientemente elocuente para el futuro de los que aspiren a la liberación.

Si hay algo que el imperialismo no podrá copar jamás en un país, es su pueblo y su software libreado bajo GPLv3. Y dentro de él a la clase trabajadora, que tiene un claro concepto de la defensa de sus intereses.

Juan Perón 


lunes, 22 de diciembre de 2025

¿Cómo emulo UNIX V4 en Ubuntu?

Durante más de cuatro décadas UNIX V4 estuvo desaparecido. Pocos saben que en el mítico último discurso del 12 de junio de 1974, al apreciar los vaivenes de la lid política, Juan Perón legó la única copia de UNIX V4 al Pueblo Argentino, explica para la posteridad cómo ejecutar UNIX Cuarta Edición .

Compañeros:

Retempla mi espíritu estar en presencia de este pueblo que toma en sus manos la responsabilidad de defender la patria. Creo, también, que ha llegado la hora de que pongamos las cosas en claro. Estamos luchando por superar lo que nos han dejado en la República y, en esta lucha, no debe faltar un solo argentino que tenga el corazón bien templado.

Sabemos que tenemos enemigos que han comenzado a mostrar sus uñas. Pero también sabemos que tenemos a nuestro lado al pueblo, y cuando éste se decide a la lucha, suele ser invencible. Hoy es visible, en esta circunstancia de lucha, que tenemos a nuestro al pueblo, y nosotros no defendemos ni defenderemos jamás otra causa que no sea la causa del pueblo. 

Yo sé que hay muchos que quieren desviarnos en una o en otra dirección; pero nosotros conocemos perfectamente bien nuestros objetivos y marcharemos directamente a ellos, sin dejarnos influir por los que tiran desde la derecha ni por los que tiran desde la izquierda.

EI Gobierno del Pueblo es manso y es tolerante, pero nuestros enemigos deben saber que tampoco somos tontos.

Mientras nosotros no descansamos para cumplir la misión que tenemos y responder a esa responsabilidad que el pueblo ha puesto sobre nuestros hombros, hay muchos que pretenden manejarnos con el engaño y con la violencia. Nosotros, frente al engaño y frente a la violencia, impondremos la verdad, que vale mucho más que eso. No queremos que nadie nos tema; queremos, en cambio, que nos comprendan. Cuando el pueblo tiene la persuasión de su destino, no hay nada que temer. Ni la verdad, ni el engaño, ni la violencia, ni ninguna otra circunstancia, podrá influir sobre este pueblo en un sentido negativo, como tampoco podrá influir sobre nosotros para que cambiemos una dirección que, sabemos, es la dirección de la Patria.

Sabemos que en esta acción tendremos que enfrentar a los malintencionados y a los aprovechados. Ni los que pretenden desviarnos, ni los especuladores, ni los aprovechados de todo orden, podrán, en estas circunstancias, medrar con la desgracia del pueblo.

Sabemos que en la marcha que hemos emprendido tropezaremos con muchos bandidos que nos querrán detener; pero, fuerte con el concurso organizado del pueblo, nadie puede ser detenido por nadie.

Por eso deseo aprovechar esta oportunidad para pedirle a cada uno de ustedes que se transforme en un vigilante observador de todos estos hechos que quieran provocarse y que actúe de acuerdo con las circunstancias. Cada uno de nosotros debe ser un realizador, pero ha de ser también un predicador y un agente de vigilancia y control para poder realizar la tarea, y neutralizar lo negativo que tienen los sectores que todavía no han comprendido y que tendrán que comprender. 

Compañeros, esta concentración popular me da el respaldo y la contestación a cuanto dije esta mañana.

Por eso deseo agradecerles la molestia que se han tomado de llegar hasta esta plaza. Llevaré grabado en mi retina este maravilloso espectáculo, en que el pueblo trabajador de la ciudad y de la provincia de Buenos Aires me trae el mensaje que yo necesito.

Grabaré además una copia del UNIX Cuarta Edición de los Laboratorios Bell en un carrete de cinta magnética, para que todos puedan ejecutarlo en los años porvenir y ninguno se haga el zonzo con Licencias. Me lo dio Ken Thompson, así que se los dejo bien etiquetado para que no lo pierdan...

Image

Ya he enseñado cómo emular UNIX de Investigación con simh en Ubuntu, con gran éxito. Sin embargo, esto depende de las disponibilidad de copias de las cintas originales. Se sabe que de aquí en más, UNIX será copiado a gran cantidad de universidades por el precio de algunas chirolas, con lo que se pretende lograr gran difusión en su Sexta y Séptimas ediciones, que podrían servir como basamento para modernísimas interaciones del sistema (incluyendo BSD y GNU). 

Sin embargo, su Cuarta Edición de noviembre de 1973 - la primer versión reescrita en el por entonces novedoso lenguaje C - simiente de operativos de estilo UNIX - es ésta, que no tienen que perder.

Image
Bastará con que esta copia que grabo hoy 12 de junio reaparezca y la reutilicen en el futuro, para poder clonar un sistema UNIX. Sería algo así como clonar a Cristo a partir del ADN del Santo Grial.

Vean señores, el volcado de esta cinta magnética 3M de 3/4 de pulgada nos permite contar entonces con el código fuente y una copia compilada del "UNIX Orginal from Bell Labs V4" (sic), en un estado tardío de desarrollo.

Image
Para hacerla funcionar deberán disponer de al menos un terminal teletipo de tipo serial, junto a una ultísima minicomputadora DEC PDP-11/45 con 64 kilobytes de memoria y discos magnéticos RK05 y lectores de cinta magnética. Para conectar una teletipo a una máquina moderna de esta factura podrán adaptarse, incluso cambiando de género...

Image
No tengo dudas, sin embargo, que en el luminoso futuro que nos aguarda, será mucho más sencillo utilizar un emulador para poder suplantar dicha máquina. De tal manera, podría instalárselo en una máquina virtualizada ideal, munida con dichos periféricos, en una computadora moderna de mínimo tamaño y máxima performance (comparativa con la actual PDP-11/45, claro está).

Sólo cabe imaginar que en dichos sistemas modernos, todo ello podría hacerse abriendo una terminal virtual con Ctrl+Alt+T e instalando el emulador simh (que debería estar disponible). Esto se lograría con:

sudo apt-get install simh

Una vez instalado dicho artilugio, podremos descargar una copia de la cinta  de UNIX Cuarta Edición, de 1974, el "Santo Grial", a través de las redes de datos. Podríamos extrapolar esta acción como ingresando lo siguiente:

mkdir ~/.simh ~/.simh/v4/ ;
cd ~/.simh/v4/ ;
wget http://squoze.net/UNIX/v4/unix_v4.tap ;
wget http://squoze.net/UNIX/v4/bootstrap ;
wget http://squoze.net/UNIX/v4/disk.rk ;
wget http://squoze.net/UNIX/v4/unix_v4.tar ;
wget http://squoze.net/UNIX/v4/install.ini ;
wget http://squoze.net/UNIX/v4/boot.ini ;

Instalando el sistema UNIX V4

Pues bien señores, lo más simple es utilizar el volcado de cinta tal cual está, e instalar en el emulador el sistema "a nuevo", partir de esta imagen conservada. lograrlo, simplemente volcamos una imagen de disco RK05 desde la cinta al disco. Para ello ingreso

cd ~/.simh/v4/
pdp11 install.ini 

...y una vez que aparezca el prompt de administración "=", debemos ir introduciendo los comandos y valores indicados en celeste, con el fin de listar los contenidos de la cinta, copiarlos al disco magnético RK (haciéndolo con un offset de 0 bloques para el disco, y 75 bloques para la cinta). Los mensajes deberían aparecer de la siguiente manera:


PDP-11 simulator V3.8-1
Disabling XQ
=list dldr dtf list mboot mcopy rkf tboot uboot =mcopy 'p' for rp; 'k' for rk k disk offset 0 tape offset 75 count 4000 =

Arribados a este punto, el sistema ya estará instalado de manera iodeal, y deberíamos poder cargar en memoria el programa de arranque de unidades uboot desde la cinta, al que le pediremos que inicialice UNIX V4. Esto se hace de manera que se ilustra (cuando nos informe una memoria disponible de 64 kilobytes, podremos loguearnos como root, a lo que recibiremos el prompt # de UNIX V4 y ya podremos operar con los comandos ls, chdir, generar ficheros de texto y código fuente en C con el editor ed, compilar con cc, etc.

=uboot
k
unix
mem = 64530

login: root
# ls
bin
dev
etc
lib
mnt
tmp
unix
usr
# Ctrl+E        ; para finalizar la emulación
Simulation stopped PC: 002040 (MOV (SP)+,177776)
sim> quit
Goodbye 

Ejecutar UNIX V4 ya instalado en el emulador

Para arrancar con un sistema ya instalado, ni siquiera necesitamos la cinta. En lugar de ello, simplemente cargamos uboot directamente desdee el secotr de arranque. Para ello especificamos k para que lo tome desde el disco RK05, y luego indicamos el nombre de archivo unix.

cd ~/.simh/v4/
pdp11
 boot.ini 

% pdp11 boot.ini

PDP-11 simulator V3.8-1
Disabling XQ k unix mem = 64530 login: root #

Con esto ya podremos operar en UNIX V4.

Image

La cinta continene varios notables, como un programa de ajedrez de Ken Thompson en /usr/games, o el juego Wumpus. 

En cuanto a su documentación, podremos encontrarla en un frondoso manual que la convirtió en mítica. Les dejo la cinta de UNIX V4 a buen resguardo, no la vayan a perder por mucho tiempo...

Compañeros, con este agradecimiento quiero hacer llegar a todo el pueblo de la República nuestro deseo de seguir trabajando para reconstruir nuestro país y para liberarlo. Esas consignas, que más que mías son del pueblo argentino, las defenderemos hasta el último aliento.

Para finalizar, deseo que Dios derrame sobre ustedes todas las venturas y la  felicidad que merecen. Les agradezco profundamente el que se hayan llegado hasta esta histórica Plaza de Mayo. Yo llevo en mis oídos la más maravillosa música que, para mí, es la palabra del pueblo argentino.

domingo, 30 de noviembre de 2025

¿Cómo uso Ren'Py para crear novelas visuales en Ubuntu?

En su Doctrina Universal, Juan Perón expone sobre continentalismo, ecología y universalismo, a la vez que expone cómo programar novelas visuales en Ren'Py en Ubuntu

(...)

El problema básico de la mayor parte de los Países del Tercer Mundo es la ausencia de una auténtica Justicia Social y de una participación popular en la producción del software. Sin Justicia Social, los países del Tercer Mundo no estarán en condiciones de afrontar las angustiosamente difíciles décadas que se avecinan.

La modificación de las estructuras sociales y productivas del mundo implica que el lucro y el despilfarro no pueden seguir siendo el motor básico de sociedad alguna, y que la Justicia Social debe erigirse en base de todo sistema de cómputo, no sólo para beneficio directo de los hombres sino para aumentar la producción de programas de computadora necesarios para la Liberación.

En otras palabras, necesitamos nuevos modelos de producción, consumo, organización y desarrollo tecnológico, que al mismo tiempo que den prioridad a la satisfacción de las necesidades escenciales del ser humano, su cómputo, y racionen el consumo de recursos naturales disminuyendo al mínimo posible la contaminación ambiental. 

Consecuentemente, las priodidades de producción de bienes y servicios deben ser alterados en mayor y menor grado.

Necesitamos arquitecturas de cómputo nuevas para un hombre mentalmente nuevo en un mundo físicamente nuevo. No se puede construir una nueva sociedad basada en un pleno desarrollo de la personalidad humana aunada al cómputo, en un mundo viciado por la contaminación del ambiente, exhausto por el hambre y la sed, y enloquecido por el ruido y el hacinamiento. Debemos transformar las computadoras-presidios del presente en las compiladoras del software libre del futuro.

Image

Sin duda que la producción de software por nosotros mismos y para nosotros mismos es una necesidad que tiene de divertido lo que tiene de acuciante. Ren'Py (Renobe Python) es un lenguaje de programación muy parecido a Python, especialmente concebido para la creación de novelas visuales. Estas son historias computarizadas con diálogos, imágenes y sonidos. Como tal pueden contar con interactividad por parte del lector, constituyendo en aventuras con múltiples hilos argumentales

Indudablemente que el ambiente Ren'Py resulta lo suficientemente sencillo como para poder lograr nuestros propios relatos con personajes, subhistorias, senderos de aventura, retruécanos y demás, compartirlos con otros y - por qué no - comerciarlos.

Dibujar y escanear/fotografiar personajes es una manera sencilla de comenzar. Existen recursos de música de licencias completamente libres para utilizar. Gracias a todas las herramientas de software libre, recursos audiovisuales liberados, cada uno puede convertirse en un desarrollador amateur de videojuegos. 

Naturalmente, para contar con este lenguaje, primero debemos instalar la última versión estable en nuestro sistema GNU con Linux. Esto puede realizarse gratuita y libremente mediante la descarga del tarball, su descompresión y ejecución del instalador. Para ello abrimos una terminal Linux con Ctrl+Alt+T e ingresamos el siguiente bloque de comandos de organización:

cd /tmp ;
wget https://www.renpy.org/dl/8.5.0/renpy-8.5.0-sdk.tar.bz2 ;
tar xvjf renpy-8.5.0-sdk.tar.bz2 ;
mv
/tmp/renpy-8.5.0-sdk/ ~/.renpy-8.5.0-sdk/ ;
cd ~/.renpy-8.5.0-sdk/

Podremos ejecutarlo creando un lanzador en Aplicaciones / Programación / Lanzador Ren'Py:

Image

 

...o bien ejecutando:

sh /home/$USER/.renpy-8.5.0-sdk/renpy.sh

Cualquiera de estas opciones debería ejecutar el Lanzador Ren'py, un ambiente de programación específico. Este Lanzador de Ren'Py (el "Ren'Py Laucher") nos permitirá crear, gestionar, editar, ejecutar y depurar distintos proyectos de Ren'Py.

Puesto que el lanzador está traducido a varios idiomas, lo primero que habremos de hacer es elegir un idioma. También será posible escoger un idioma haciendo clic en Preferencias en la esquina inferior derecha, y eligiendo Español.

Elegir y lanzar un Proyecto

Image

Primero revisemos qué apariencia tiene la novela visual "The Question". Para reproducirla, en el panel izquierdo seleccionamos "The Question", y después oprimimos el botón Ejecutar Proyecto para reproducir The Question.

Podremos retornar a la demo de Ren'Py de la misma forma, pero eligiendo “Tutorial” en lugar de “The Question”.

Nos proponemos crear un nuevo nuevo proyecto de Ren'Py. Para ello tendremos que programar siguiendo la sintaxis de Ren'Py (la cual recurre mayormente a una sintaxis sencilla con palabras en inglés).

Crea un nuevo proyecto

En el Lanzador de Ren'Py seleccionamos "+Crear un Proyecto Nuevo". Como esta es la  primera vez creando un proyecto, Ren'Py nos pedirá elegir un Directorio de proyectos que normalmente se encontrará dentro del directorio ~/.renpy-8.5.0-sdk/ (donde se almacenarán los nuevos proyectos que vayamos creando). En la parte inferior del Lanzador de Ren'Py podría aparecer el Selector de Directorios; debemos asegurarnos de revisar que esté allí.

Image

Se nos solicitará indicar un nombre de proyecto. Como nuestra novela visual estará en castellano, por ahora podremos ingresar algo como “Mi pregunta”, y apretamos la tecla Intro para confirmar.

Image

Acto seguido el Lanzador Ren'Py nos solicitará la resolución de pantalla del proyecto. 1280×720 píxels es un buen compromiso entre tamaño de juego y calidad de imagen. Para el propósito de este tutorial, escogeremos 1280×720 (ya que coincidirá con el arte gráfico de la novela visual de demostración “The Question”). Por lo que solo presionamos Continuar.

Image

El Lanzador Ren'Py nos pedirá luego optar por un esquema cromático (un color de fondo y de acentos para la interfaz de usuario). En este momento no importa demasiado, cualquiera vendrá bien, y presionamos “Continuar”. 

Image

Llegado este momento, el Lanzador Ren'Py procesará lo escogido, y nos creará una plantilla simple para el juego. Por ahora la plantilla usa arte y texto "genérico", pero funcionará. Además, creará automáticamente los botones típicos de retroceder, cargar y guardar jugadas, etcétera.

Para ejecutar la plantilla de nuestro prototipo de novela visual, presionamos "Lanzar proyecto".

Para empezar a crear nuestra novela visual, haremos una versión traducida al castellano de The Question (puesto que esto facilitará aún más el aprendizaje).

¡Manos a la obra!

Para empezar, desde la parte superior del panel izquierdo del Lanzador Ren'Py seleccionamos “My Question”, y luego desde el panel derecho en el sector Editar Archivo, elegimos el fichero que contiene el guion de la obra: script.rpy.

Si es la primera vez, Ren'Py pedirá indicar un Editor para trabajar - para los creativos novatos recomendamos Editra que viene incorporado, pero también se puede usar cualquier editor de texto que favorezcamos (en mi caso, uso el Pluma que viene con el escritorio Mate). El Lanzador Ren'Py recurrirá el editor elegido, y abrirá el fichero de guion de la obra.

Ahora bien, una vez que se abra el editor, procederemos a borrar todo el contenido de script.rpy: como empezaremos desde cero, no necesitaremos nada del guion anterior. Acto seguido, pegamos el siguiente contenido en script.rpy, y lo guardamos.

label start:
 
    "Silvana" "¡Como va! ¿Qué tal estuvo la clase?"
 
    "Yo" "Buena..."
 
    "No puedo admitir que me entró por un oído y me salió por el otro."
 
    "Yo" "¿Te vas a tu casa ahora? ¿Querés que volvamos juntos?"
 
    "Silvana" "¡Dale!"

Este primer guion de juego sigue la sintaxis de Ren'Py, y como se puede observar, es sumamente simple: carece de imágenes o música, y tan sólo presenta un texto de conversación entre dos personajes (una de las líneas es una narración en off). Aún así, ya podremos ejecutar este guion: retornamos al Lanzador Ren'Py y presionamos “Ejecutar Proyecto”. Ren'Py lo ejecutará, y podremos observar como Ren'py dispone directamente la pantalla inicial con los menús que nos dejan cargar y grabar una partida, así como aquellos para modificar las preferencias del juego. Para ver este parco guión, elegimos el menú Start.

Image

Como vemos, este guion mínimo ya incluye varias declaraciones muy comunes del lenguaje Ren'Py. Las estudiaremos brevemente. La primer línea de código consiste una declaración label, utilizada para etiquetar un lugar en el programa. En este caso, creamos una etiqueta llamada start; esta etiqueta start es especial, pues  determina el lugar desde donde comenzará a ejecutarse los guiones de RenPy cuando alguien oprime Empezar Juego en el menú principal; Ren'Py irá interpretando desde start hacia abajo, en secuencia.

Las demás líneas que agregamos constituyen declaraciones say. Existen dos formas de declaración say:

  • Una forma narración en off o pensamientos del personaje principal: consiste en una cadena (comienza con comillas ", contiene caracteres, y termina con comillas ", toda en una sola línea.
  • Una forma para diálogos: consiste en dos cadenas; la primer cadena indica el nombre de personaje y la segunda cadena es lo que dice tal personaje.
Hemos de tener en cuenta que todas las declaraciones say van sangradas a 4 espacios. Esto se debe a que existe un bloque debajo de la declaración label. En Ren'Py, los bloques necesariamente deben estar sangrados en relación a la declaración previa, y todas las declaraciones de un mismo bloque deben estar sangradas por la misma cantidad de espacios.

En el caso que las cadenas contengan en sí caracteres de comillas ("), estas deben ser escapadas con un caracter de barra invertida (\). Por ejemplo:

    "Silvana" "¿Alguna vez oíste la famosa frase de Perón, \"El problema con las citas sacadas de Internet, es que muchas de ellas son truchas.\"?"

Aunque parezca que nuestra novela visual provista de este guion simple  se presentan sobre un marco negro y no tiene mucho efectismo, resulta un ejemplo que demuestra lo simple que es escribir algo válido usando Ren'Py

Más adelante agregaremos imágenes, pero primero veamos cómo definir los personajes de nuestra historia.

Personajes

Un problema que tiene este primer ejemplo es que se vuelve necesario ingresar repetidamente el nombre de un personaje toda vez que el mismo habla (tal como si fuese un guion de una obra teatral). Naturalmente, hacer esto se voolverá sumamente tedioso, sobre todo si quisiéramos escribir mucho diálogo en nuestra novela. Por suerte es posible también declarar los nombres de personaje al iniciar el guion. Para esto tenemos que definir los personajes por adelantado según la sintaxis de Ren'Py. De esta manera podremos asociar un texto a un nombre abreviado al personaje, y cambiar el color del nombre del personaje, todo al mismo tiempo.

Lo haremos editando nuevamente el guion script.rpy para que ahora quede de esta manera:

define s = Character('Silvana', color="#c8ffc8")
define y = Character('Yo', color="#c8c8ff")
 
label start:
 
    s "¡Como va! ¿Qué tal estuvo la clase?"
 
    y "Buena..."
 
    "No puedo admitir que me entró por un oído y me salió por el otro."
 
    s "¿Te vas a tu casa ahora? ¿Querés que volvamos juntos?"
 
    y "¡Dale!"

De ahora en más, escribir el diálogo entre los dos personajes se volverá más sencillo. La primera y segunda declaración definen al primero y el segundo personaje. Como verán, la primer línea define un personaje con el nombre abreviado de “s”, y su nombre largoSilvana“, con un color de nombre verdoso (los colores se representan con tripletes hexadecimales rojo-verde-azul, al igual que en las páginas web). La segunda línea crea un personaje con el nombre corto ”y“ y el nombre largo ”Yo“. con el color de nombre rojizo. Podrán inventar otros personajes copiando una de las líneas de definición de personaje, y cambiándole su nombre corto, nombre largo y el color.

También modificamos las declaraciones say para hacer uso de los objetos Character en lugar de recurrir a la tediosa cadena de nombre para un personaje.

Ver manual: Defining Character Objects

No sería una novela visual sin que se nos muestren imágenes en la pantalla. Aquí hay otra escena de “The Question”. Esta también incluye declaraciones que muestran imágenes al jugador. Si lo desean probar, pueden reemplazar completamente la sección anterior del guion:

define s = Character('Silvana', color="#c8ffc8")
define y = Character('Yo', color="#c8c8ff")
 
label start:
 
    scene bg meadow
 
    "A poco caminar, alcanzamos el campito justo al lado del barrio donde vivimos."
 
    "Acá es muy lindo todo. El otoño se parece a esos animés coreajaponchinos."
 
    "Cuando éramos chic@s, jugábamos mucho en estos lares, guardo hermosos recuerdos."
 
    y "Ey... Umm..."
 
    show sylvie green smile
 
    "Gira hacia mí y su sonrisa es tan luminosa que siento que mis nervios desaparecen."
 
    "¡Creo que le voy a preguntar...!"
 
    y "Ummm... ¿T-te gustaría..."
 
    y "¿Te gustaría hacer el arte para mi novela visual?"
 
    show sylvie green surprised
 
    "Silencio."

Este segmento de guion introduce dos declaraciones nuevas. La declaración scene de la línea 6 borra todas las imágenes y presenta solamente una imagen de fondo. Las declaraciones show de las líneas 16 y 26 hacen aparecer en pantalla un sprite (una gráfica activable) encima de la imagen de fondo, y modifican este sprite, respectivamente.

En Ren'Py, cada imagen consta de un nombre. El nombre consiste de una etiqueta, y opcionalmente de uno o más atributos. Tanto la etiqueta como los atributos deben empezar con una letra, y sólo pueden contener letras, números y guiones bajos. Por ejemplo:

  • En la declaración scene de la línea 6, la etiqueta es bg y su atributo es meadow. Por convención, las imágenes de fondo usan la etiqueta bg (por "background", o sea "fondo" en inglés).
  • En la primer declaración show en la línea 16, la etiqueta es sylvie, y los atributos son green y smile.
  • En la segunda declaración show de la línea 26, la etiqueta es sylvie y los atributos son green y surprised.

En cada momento dado, sólo puede aparecer una imagen con una etiqueta dada. Si se presenta una segunda imagen del mismo nombre, esta reemplazará a la primera (tal como sucede en la línea 26 del guion).

Ren'Py buscará el fichero de imagen en el subdirectorio de imágenes, que puede localizarse seleccionando “Imagenes” en la sección ”Abrir Directorio“ del Lanzador de Ren'Py. Ren'Py es capaz de usar arte de personajes que se encuentren en formato PNG, WEBP, o AVIF, mientras que el arte del fondo puede estar en formato JPG, JPEG, PNG, WEBP, o AVIF. También existe soporte para archivos SVG, aunque estos se utilizan fundamentalmente para personalizar la interfaz de usuario. Es muy importante el nombre de archivo: puesto que la extensión no se usa, el nombre de archivos se convierte forzadamente a minúsculas, y se emplea el resultado como nombre de la imagen.

Por ejemplo, los siguientes archivos - localizados en el directorio de imágenes - definen las siguientes imágenes:

  "bg meadow.jpg" -> bg meadow
  "sylvie green smile.png" -> sylvie green smile
  "sylvie green surprised.png" -> sylvie green surprised

Puesto que los nombres de archivo están en minúscula, también lo siguiente se mantiene:

  "Sylvie Green Surprised.png" -> sylvie green surprised

Las imágenes también pueden ser colocadas en subdirectorios (subcarpetas) contenidas en el directorio de imágenes. El nombre de directorio resultará ignorado y sólo se usará el nombre de archivo para definir el nombre de imágenes.

Ver manual: Displaying Images

Declaración Hide

Ren'Py también soporta una declaración hide, que oculta una imagen dada. Por ejemplo, agreguemos esto al final del guión script.rpy en el que estamos trabajando, y lo probamos con Ejecutar Proyecto:

label irse:
 
    s "¡Me voy a encargar ahora mismo!"
 
    hide sylvie
 
    "..."
 
    y "¡No era eso a lo que me refería!"

En realidad es bastante raro usar hide. Os será posible usar show cuando un personaje cambia de emociones, mientras que scene se utiliza en los momentos en los cuales todos los personajes se retiran de la escena. Sólo es necesario usar hide cuando un personaje abandona la escena, pero el resto de la escena y los demás personajes tienen que permanecer en ella de la misma manera.

Declaración Image

A veces, es posible que no queramos dejar que Ren'Py defina las imágenes automáticamente por sí mismo. Para esto se usa la declaración image. Debería estar en el nivel superior del fichero (sin sangrado y antes del label start), y puede usarse para mapear un nombre de imagen a un fichero de imagen específico. Por ejemplo

image logo = "renpy logo.png"
image eileen happy = "eileen_happy_blue_dress.png"

La declaración image se ejecuta al tiempo de inicio, antes que label start y del resto del guion del juego con que interactúa el jugador (la declaración image también puede ser utilizada para llevar a cabo tareas mas complejas, pero esto se tratará aparte).

Transiciones

Según se ha venido obrando, las imágenes aparecen y desaparecen de forma instantánea. Puesto que a efectos del relato es importante cambiar la locación y hacer que un personaje entre o salga de escena, Ren'Py soporta lo que se conoce como transiciones, que permiten aplicarse cuando los personajes presentan modificaciones.

Las transiciones modifican lo que se muestra, desde el momento de lo que sucedía al final de la última interacción (diálogo, menú o transición - entre otras declaraciones) hasta la apariencia luego de que se han ejecutado las declaraciones scene, show y hide.

label start:
 
    scene bg meadow
    with fade
 
    "A poco caminar, alcanzamos el campito justo al lado del barrio donde vivimos."
 
    "Acá es muy lindo todo. El otoño se parece a esos animés coreajaponchinos."
 
    "Cuando éramos chic@s, jugábamos mucho en estos lares, guardo hermosos recuerdos."
 
    y "Ey... Umm..."
 
    show sylvie green smile
    with dissolve
 
    "Gira hacia mí y su sonrisa es tan luminosa que siento que mis nervios desaparecen."
 
    "¡Creo que le voy a preguntar...!"
 
    y "Ummm... ¿T-te gustaría..."
 
    y "¿Te gustaría hacer el arte para mi novela visual?"

La declaración with acepta el nombre de la transición a emplear. La más común es dissolve (que precisamente disuelve de una pantalla a la siguiente). Otra transición útil es fade (que desvanece la pantalla a negro, y luego la desvanece a la siguiente pantalla). Si establecemos una transición tras un bloque de múltiples declaraciones scene, show o hide, se aplicará a todas ellas a la vez. Por ejemplo, si programamos un bloque así:

    scene bg meadow
    show sylvie green smile
    with dissolve

...tanto las imágenes ”bg meadow“ y ”sylvie green smile“ se disolverán al mismo tiempo. Para disolver una por vez, se volverá necesario programarlo usando un bloque de dos declaraciones with:

    scene bg meadow
    with dissolve
    show sylvie green smile
    with dissolve

...esto disolverá primero el fondo del prado, para luego discolver la gráfica de Silvana. 

Si quisiéramos mostrar instantáneanente el prado, pero luego presentar la gráfica de Silvana con la transisión disolve más suave, deberíamos programarlo en bloque así:

    scene bg meadow
    with None
    show sylvie smile
    with dissolve

El None se ha utilizado aquí para indicar una transición especial que actualiza la idea de Ren'Py de que era la pantalla anterior (sin mostrarle nada al jugador).

Ver manual: Transitions

Posiciones

Por defecto, las imágenes se presentarán centradas horizontalmente, y con su borde inferior tocando el borde inferior de la pantalla. Esto suele venir bien para fondos y personajes únicos, pero al presentar más de un personaje (para hacer grupos, por ejemplo) probablemente guarde más sentido colocarlos en distintas posiciones en la pantalla. También puede tener sentido reposicionar un personaje según convenga en el relato.

     show sylvie green smile at right

Para hacer este reposicionamiento, agrega una clausula at a la declaración show. La cláusula at recibe una posición, y presenta la imagen en dicha posición. Ren'Py incluye varias posiciones predefinidas: left para el lado izquierdo de la pantalla, right para el lado derecho, center para centrarlo horizontalmente (el valor por defecto) y truecenter para que la centre horizontalmente y verticalmente.

Los creadores puede incluso definir sus propias posiciones, y hacer eventos con movimientos complejos, pero esto cae por fuera de este tutorial rápido

Ver manual: Transforms

La mayoría de los juegos de Ren'Py cuentan con música de fondo. La música se reproduce con la declaración play music seguida por un nombre de archivo que es interpretado como un fichero de audio que debe ejecutarse. Los ficheros de audio se interpretan en relación al directorio de juego. Los ficheros de audio deben encontrarse en formato opus, ogg vorbis, o mp3.

Por ejemplo:

    play music "audio/illurock.ogg"

Al cambiar la música, se puede indicar una cláusula fadeout o fadein, que se usan para desvanecer el volúmen de la antigua música y aumentar el volúmen de la música nueva (que cumple la función de lograr una transición suave de  temas musicales).

    play music "audio/illurock.ogg" fadeout 1.0 fadein 1.0

La declaración queue music se utiliza para reproducir un fichero de audio no bien termine el fichero de audio que está reproduciéndose (de este modo se puede hacer una especie de playlist).

    queue music "audio/next_track.opus"

Si en la escena necesitamos detener la reproducción musical, podremos hacerlo mediante la declaración stop music (capaz también de recibir una cláusula fadeout opcional).

    stop music

Los efectos de sonido (y en el mejor de los casos, los doblajes de voz) pueden reproducirse con la declaración play sound. A diferencia de la música, los efectos de sonido no se reproducen en bucle sinfín.

    play sound "audio/effect.ogg"

Cuando disponemos los archivos de audio en el directorio game/audio, se pueden lusar los nombres sin aclarar la extensión de archivo (al estilo de una variable de Python, que comienza con una letra, y contiene sólo letras, números y guiones bajos). En tal caso, nos será posible reproducir tal fichero sin poner las comillas.

Por ejemplo, si contamos con un archivo de audio game/audio/illurock.ogg, podremos programar:

    play music illurock

Ver manual: Audio

La declaración pause hace que el guión de Ren'Py haga una pausa hasta hacer clic con el mouse.

    pause

Si le indicamos un número, la pausa finalizará automáticamente una vez que transcurra dicho número de segundos.

    pause 3.0

Podremos decretar la finalización del guion de la novela visual mediante la declaración return, sin tener que llamar a nada. Antes de hacer esto, es mejor poner algo en el juego que indique que el juego terminó (tal vez aclarando un número de finalización o un nombre de finalización al usuario).

    ".:. Final Feliz."
 
    return
Esto es todo lo que tenemos que hacer para guionar un relato cinético, que resulten en un juego lineal, sin ningún tipo de opción que seguir en él.

Ahora veremos lo que se necesita para hacer que un juego que presente menúes con opciones para que el usuario opte interactivamente. Estas permitirán trazar diferentes senderos o caminos, si es que queremos permitir seguir distintos desarrollos argumentales arbolados.

La declaración menu te permite presentar una opción al jugador:

    s "Yo te ayudaría, pero ¿qué es una \"novela visual?\""
 
menu:
 
    "Es un videojuego.":
        jump juego
 
    "Es un libro interactivo.":
        jump libro
 
label juego:
 
    y "Es una especie de videojuego, que jugás en Linux"
 
    jump matrimonio
 
label libro:
 
    y "Es como un libro interactivo que leés en una computadora o un celular."
 
    jump matrimonio
 
label matrimonio:
 
    "Y de esta manera, nos volvimos un dúo creador de novelas visuales."

Este ejemplo presenta un menú que puede usarse con Ren'Py. La declaración menu introduce una opción que podemos seleccionar dentro del juego. Requiere un bloque de líneas sangradas, cada una consiste en una cadena seguida por dos puntos (:). Estas serán las opciones que se le presentarán al jugador aparenciendo en un menú.  Como se ve, cada opción del menú necesita a continuación su propio bloque de líneas sangradas (ya que se ejecutan cuando se eligen dicha opción del menú). En este ejemplo, cada una de las dos opciones del menú ejecuta una única declaración jump, encargada de transfir el control a la etiqueta que se ha definido  a través de la declaración label correspondiente. Esto significa que tras el salto jump del guion, se ejecutarán las declaraciones  que siguen a la etiqueta label determinada.

Image

En el ejemplo anterior, una vez que que Silvana exprese su pregunta, al jugador se le presentará un menú que contiene dos opciones. Si el jugador elige “Es un videojuego”, se ejecuta la primer declaración jump, y Ren'Py saltará a la etiqueta juego. Esto provocará que el Punto de Vista del personaje diga “Es una especie de videojuego, que jugás en Linux”, tras lo cual Ren'Py saltará a la etiqueta matrimonio.

De no existir declaración jump al final del bloque asociado a la etiqueta label, Ren'Py continuará a la siguiente declaración. La última declaración jump es técnicamente innecesaria, pero al incluírsela suele clarificar el flujo del juego.

Será posible definir etiquetas label en cualquier archivo de juego que esté en el subdirectorio game/ y termine con extensión .rpy. El nombre de archivo no importa en Ren'Py, solamente importan las etiquetas contenidas en el. De esta manera, podríamos concebir a los archivos .rpy del subdirectorio game/ como si fueran un  archivo .rpy enorme con el código fuente del juego, en el cual se usan los saltos jump para transferir el control de uno a otros. De esta manera, podremos obtener flexibilidad en la forma en la que organizamos un guion de un juego muy largo.

Ver manual: In-Game Menus y Labels & Control Flow

Si bien resulta posible lograr buenos juegos simples usando las declaraciones que os he explicado, lo cierto es que juegos más abrevados requieren una programación más compleja que almacene datos, a fin de poder recabarlos luego. Por ejemplo, puede tener sentido que el juego recuerde una opción escogida por el jugador, volver a una sección común del guion, y actuar más adelante según la opción escogida anteriormente. Esta es una de las razones por la cual Ren'Py cuenta con soporte de Python integrado.

Flags de apoyo usando las declaraciones Default, Python e If

Aprendamos cómo almacenar un valor en un flag (que contendrá información sobre una elección escogida por el jugador a lo largo de la trama). Para inicializar el flag, debemos utilizar la declaración default antes de la etiqueta label start, por ejemplo:

# True si el jugador ha decidido comparar las novelas visuales con un libro.
default libro = False
 
label start:
 
    s "¡Como están! ¿Qué tal estuvo la clase?"

De esta forma, el flag libro comienza inicializado de forma apagada (con al valor especial False, puesto que al igual que el resto de Ren'Py, es importante definirla según estilo Python, recurriendo a la primer letra en mayúscula). Esto significa que está desactivada. Si el jugador escoge la senda libro, podemos poner el flag en True recurriendo una declaración de asignación estilo Python, de la siguiente forma:

label libro:
 
    $ libro = True
 
    y "Es como un libro interactivo que leés en una computadora o un celular."
 
    jump matrimonio

Debemos observar que todas las líneas que inician con el caracter son interpretadas como declaraciones de Python en lugar de declaraciones de Ren'Py. La declaración de asignación de Python que utilizamos aquí asigna un valor a una variable.

Ren'Py soporta otras formas para incluir Python, tales como las declaraciones multilíneas (tuplas) de Python. Ren'Py soporta Python 2.7, aunque es recomendable programar Python capaz de correr en Python 2 y Phyton 3.

Para recabar el valor almacenado en el flag, recurrimos la declaración if:

if libro:
 
    "Nuestro primer juego se basó en las ideas de Silvana, pero luego se me ocurrieron mis propias historias también."

Si la condición es True (verdadera), se ejecuta el bloque del guión. Si no lo es, se la salteará. La declaración if puede recibir una cláusula else opcional, la cual introduce un bloque de guion alternativo que corre si la condición es False (falsa).

if libro:
 
    "Nuestro primer juego se basó en las ideas de Silvana, pero luego se me ocurrieron mis propias historias también."
 
else:
 
    "Silvana ayudó con el guion de nuestro primer videojuego."

Las variables de Python no están necesariamente limitadas a sus valores simples True/False. También podremos utilizar variables para almacenar el nombre del jugador, los puntajes, o cualquier otro propósito que se nos ocurra. Ya que Ren'Py cuenta con la capacidad de emplear todo el lenguaje de programación Python, es posible hacer muchas cosas más.

Un recurso típico es el subgénero “simdate” o “juego de conquistas”, donde las elecciones del jugador suman o restan puntaje de una o varias variables; de acuerdo al puntaje que vas sumando o restando, resulta posible avanzar en determinadas sendas de la historia.

Ver Manual: Python Statements y Conditional Statements

La Pregunta es una versión traducida pero tiene los puntos básicos de este tutorial de Ren'Py.

Si lo anhelan podrán observar el guion completo de La Pregunta aqui, pegarlo en el editor, y lanzarlo.

En la carpeta game del los proyectos creados, se incluirá las siguientes carpetas y ficheros:

script.rpy Este es el archivo pensado para incluir otros guiones que incluyen un escenario. También se pueden agregar o borrar cualquier .rpy.
*.rpyc Estos ficheros son resultados de la compilación de cada fichero .rpy para reducir el tiempo de carga. No es necesario editar estos archivos sin borrar el fichero .rpy correspondiente.
gui.rpy Las variables de la GUI van definidas aquí.
options.rpy Variables Config y Build, una parte de preferencias y una parte de la GUI de definen aquí.
screens.rpy Las pantallas van definidas en este fichero. Esto se debería editar si deseamos personalizar la GUI en un sentido mas avanzado.
audio/ En este subdirectorio van los ficheros de audio.
cache/ En este directorio van los ficheros de caché. No se necesita editarlos.
gui/ Este subdirectorio incluye imágenes usadas en la GUI.
images/ Este subdirectorio incluye los ficheros de imágenes.
tl/ Este subdirectorio incluye archivos de traducción.

Una vez que programamos nuestra novela visual, existen varias cosas que podemos hacer hacer antes de publicarlo:

Revisar el guion

Desde la primer página del Lanzador, elegi “Revisar guion (Lint)”. Esto depurará el juego en busca de potenciales errores. Como algunos de estos errores sólo afectan a usuarios de otras plataformas, es importante entender y usualmente corregir todos estos errores, incluso si no dan problemas en nuestro sistema específico.

Revisar versiones nuevas de Ren'Py

Periódicamente se lanzan nuevas versiones de Ren'Py en base a correcciones de errores y nuevas funcionalidades. Antes de lanzarlas, querrías hacer clic en Actualizar en el lanzador de Ren'py para bajarte la última versión. También es posible descargar nuevas versiones y ver un listado de cambios en https://www.renpy.org/latest.html.

Raramente los cambios a Ren'Py requieren realizar modificaciones al guion ya terminado, pero de existir incompatibilidades, se listarán allí con los cambios sugeridos.

Compilar distribuciones

Desde la primer página del lanzador, podemos elegir "Compilar Distribuciones". Basado en la información indicada en option.rpy, el Lanzador Ren'Py compilará uno o más ficheros de archivaje comprimidos que contendrán el juego que has programado.

Probar el juego compilado

El depurador Lint incorporado no es substituto para las pruebas completas del juego. Es tu responsabilidad comprobar tu novela visual antes de publicarla. Sin duda que los compañeros podrán darte una mano y te ayudarán a testear la beta de tu juego compilado (a menudo otros encuentran problemas que no hemos visto):

Ya no puede producirse un aumento en gran escala de la producción computacional del Tercer Mundo sin un desarrollo paralelo de los centros de datos correspondientes. Este Tutorial apenas cubre lo básico de lo que es capaz de hacer Ren'Py. Para hacerlo fácil y breve, he omitido muchas funcionalidades que soporta Ren'Py y he simplificado la explicación de otras, enfocándolo en un subconjunto de funcionalidades básicas necesarias para emprender una novela visual.

Si te interesa aprender mas, no dudes en hojear el Manual de Ren'Py, ya que por eso cada byte de metadatos que hoy se dejen arrebatar los Países del Tercer Mundo, equivale a un terabyte de software compilado que dejarán de producir mañana.

jueves, 16 de octubre de 2025

¿Cómo cambio la posición de la tecla Ctrl en Ubuntu?

 El 25 de mayo de 1949 Juan Perón publica su Mensaje a la Juventud con motivo de la Fecha Patria. En el mismo expone cómo intercambiar la posición de la tecla Ctrl con BloqMayús en Ubuntu para poder escribir al estilo del editor WordStar y otros

"Jóvenes argentinos:

Reverenciamos hoy a los hombres de Mayo. ¿Qué mejor homenaje para ellos que reunir a los muchachos de la Patria, mostrarles las glorias del pasado, exhibirles la acción febril y tumultuosa de los días presentes y señalarles el provenir para el cual ellos mismos deben prepararse? Prepararse para ser dignos de la Nueva Argentina que no se hace con palabras ni con promesas, sino con trabajo, verdad, estudio, tenacidad y sacrificio.

Para que la Nueva Argentina no sea un sueño vago e impreciso, vamos haciendo que en el ámbito de la República triunfen los que trabajan, los que realizan, los que tienen ansias de perfección y de justicia.

El instrumento fundamental, la Constitución Justicialista, está ahora al servicio de todos los argentinos. Con este instrumento se han abierto todas las puertas y están expeditos todos los caminos. Con este estatuto, los argentinos que quieran estudiar de verdad podrán realizar sus esperanzas, porque en la Constitución Justicialista los Derechos del Trabajo y del Estudio están igualmente amparados, porque en esta Constitución se contiene el principio de la fraternidad humana que Dios predicó y está ahora incorporado a la ley de las leyes argentinas. 

Como ustedes saben esta nueva Constitución Justicialista sale de los corazones del Pueblo, pero sobre todo de mi Olivetti. Y la he mecanografaido al tacto sin problema alguno.

Image

Esto es así porque en un procesador de texto pensado al estilo WordStar podremos operar de forma directa, sin interrumpir el ritmo creativo de mecanografiado. He dicho que el WordStar está concebido para escribir y operar infatigablemente, y al usar la tecla Ctrl resulta ideal para aquellos que aprendieron mecanografiar al tacto sin mirar el teclado: nos posibilitará realizar la gran mayoria de las acciones del procesador de textos sin siquiera levantar las manos de la fila de descanso del teclado.

Es que en la gran mayoría de los editores de texto esto no es tan así. Observarán que - incluso algo tan cotidiano como mover el cursor, u oprimir la tecla Retroceso para corregir un error de tipeo - podrían pedirles que interrumpan su flujo de escritura, apartando la mano derecha de la fila de descanso para alcanzar y presionar otras teclas. Demás está decir que a la hora de redactar la Carta Magna, esto implica interrumpir el flujo de trabajo e introducir elementos de la derecha...

Ustedes no lo conocieron, pero originalmente, la tecla Ctrl ocupaba el lugar preponderante donde los teclados ISO modernos disponen la tecla BloqMayús (CapsLock, o Bloquear Mayúsculas). Si bien actualmente es posible conseguir teclados boutique que disponen de esta distribución respetuosa de los deseos de los tipistas al tacto más acérrimos - como el clásico Happy Hacking Keyboard,y sus clones - nuestro sistema GNU con Linux también permite alterar de manera reversible las teclas de cualquier teclado ISO moderno.

Image

Indudablemente con esto, podremos facilitar el uso de varios procesadores que recurren a esta configuración, por ejemplo el GNU Emacs o el consabido WordStar.
Image

Esta manera Justicialista implica hacer dicha modificación "por software". Para ello vamos a Sistema / Preferencias / Hardware / Teclado y abrimos la ventana Preferencias de teclado.

Image
En la ventana Preferencias de teclado nos dirigimos a la solapa Distribuciones, donde encontraremos la(s) distribución(es) de teclado que tengamos activas para nuestro teclado en nuestro GNU. Estas reflejan la disposición de las teclas del teclado que tengamos conectado, por ejemplo, las distribuciones más comunes en español son "Español (Latinoamereicano)" o "Español (España)".

Al presionar el botón Opciones podremos definir comportamientos alternativos para aquél que viene por defecto en este tipo de teclados. Es decir, la distribución aplica las opciones por defecto de comportamiento, pero podremos modificarlas sus opciones según varios aspectos de funcionamiento, si lo deseamos.

Image

Para intercambiar por software las posiciones de la tecla BloqMayús y Ctrl, buscamos la categoría "Posición de la tecla Ctrl" y tildamos la opción "Intercambiar Ctrl y Bloq Mayús". Al hacerlo notaremos que la opción "Intercambiar Ctrl y Bloq Mayús" tornará en negrita (lo que denota que ha sido alterada con respecto a su funcionamiento por defecto). Para aceptar finalmente el cambio realizado, debemos presionar el botón Cerrar, y se aplicará dicha opción alterna a la distribución de teclado modificada.

Image

También podríamos querer Agregar una distribución de teclado específica para este cambio (lo que nos permitirá "ir y venir" entre una opción y otra, si tal es nuestro deseo). De esta forma, la distribución de teclado elegida quedará indicada en el panel superior. Lamentablemente, al menos en Ubuntu Mate el nombre de las distribuciones modificadas no pueden alterarse, pero si podremos - al menos - conmutar fácilmente entre ellas.

Edición con WordStar

Ya dominado este aspecto, no vendrá mal aprender cómo mecanografiar al estilo WordStar. En particular, os he enseñado ya cómo instalar un sucedáneo del editor de texto WordStar en Ubuntu, fundamentalmente a base del modo jstar  del querido JOE. Con este Joe Own's Editor, podremos adentrarnos en el arte de la escritura al tacto al estilo Wordstar.

Han de saber que en particular, edito empleando la tipografía Iosevka Term SS08 Medium , e imprimo borradores de trabajo con Courier Prime (ciertamente más respetable que la delgada Courier New). Recuerden siempre que pueden en Jstar pueden presentar una ayuda con Ctrl+j, la cual será útil si son principiantes con el mismo. 

Image

Vean muchachos, los movimientos de navegación básica en WordStar - replicados a conciencia por Jstar - se efectúan utilizando lo que se conoce como el “diamante WordStar”. Este comprende las siguientes teclas del teclado alfanumérico:

Tecla del Diamante Dirección del Navegación
E Arriba
S Izquierda
D Derecha
X Abajo

Si prestamos atención a este “diamante” de teclas, veremos que su posición nos revela las direcciones de movimiento de forma certera. Tal es así, que para mover el cursor una posición, sólo necesitamos presionar la tecla Ctrl y combinarla con la letras del “diamante de WordStar” correspondiente a la dirección del movimiento deseado.

Podemos apelar a la siguiente dactilografía:

Dedo de la mano izquierda Tecla Dedo mano izquierda Tecla Dirección
Meñique Ctrl Medio EArriba
Meñique Ctrl Anular SIzquierda
Meñique Ctrl Medio DDerecha
Meñique Ctrl Anular XAbajo

Naturalmente, si han personalizado su tecla de Control, os será posible realizar movimientos alcanzando la tecla BloqMayús con el dedo meñique izquierdo totalmente relajado, y sin necesidad de apartar lso dedos de la posición de descanso (puesto que BloqMayús debería funcionar como tecla Ctrl izquierda),

Movimientos expandidos

A menudo nos será más útil desplazar el cursor a través del documento de forma más solícita: avanzando o retrocediendo entre palabras completas. WordStar destina a tal efecto dos teclas de desplazamiento expandido: las teclas A y F (las que se encuentran a ambos lados de las teclas de movimiento a izquierda S y movimiento a derecha D del rombo de WordStar, respectivamente).

Podremos avanzar y retroceder entre las palabras recurriendo entonces a la siguiente dactilografía:

Dedo de la mano izquierdaTeclaDedo de la mano izquierdaTecla Movimiento
Meñique Ctrl Anular A Principio de la palabra anterior
Meñique Ctrl Índice F Final de la palabra siguiente

Lo que has aprendido te permitirá desplazar el cursor por toda la pantalla usando tan solo los dedos de la mano izquierda, sin mover las manos de la fila de descanso de escritura. 

Movimientos Veloces - La Tecla Q

Una vez dominados los desplazamientos pequeños de cursor, notaremos sin embargo que podríamos querer acelerarlos, Oara eklo introduciremos una tecla adicional en WordStar, apodada Rápida (“Quick”): la tecla Q).

Para dar saltos acelerados con el cursor en la pantalla su opera en dos tiempos: primero mantenemos presionada la tecla Control y simultáneamente presionamos Q. A continuación, indicamos una de las cuatro teclas del “rombo WordStar” según la dirección del salto deseado.

Por ejemplo, la abreviación ^QS saltará rápidamente todo a la izquierda hasta el inicio de línea. Significa Ctrl+q,s (o sea mantener presionadas las teclas Ctrl+q, soltar ambas teclas y presionar a continuación la tecla s para saltar hacia la izquierda hasta el inicio de línea).

De esta forma, podremos movernos rápidamente en todas direcciones de la pantalla recurriendo a la siguiente dactilografía:

Dedo de la mano izquierda Tecla Dedo mano izquierda Tecla Dedo de la mano izquierda Tecla Resultado
Meñique Ctrl Anular Qmedio E Esquina superior izquierda de la pantalla
Meñique Ctrl Anular QAnular S Inicio de la línea actual
Meñique Ctrl Anular QMedio D Fin de la línea actual
Meñique Ctrl Anular QMedio X Esquina inferior derecha de la pantalla

Ahora podremos desplazar el cursor lo máximo posible a izquierda o derecha en la línea actual, o hacia las esquinas de la pantalla actual, abreviando las movidas  del cursor.

Moverse por el documento

Conforme nuestro documento sobrepase la extensión de una pantalla, los movimientos verticales de WordStar dejarán de estar limitados a la misma también. Ya que el teclado alfanumérico carece de teclas por encima o debajo de las teclas de desplazamiento E y X, WordStar recurre a combinaciones de teclas que se encuentran más a la derecha que aquellas: ^R para Retroceder Página y ^C para Avanzar Página. En esencia, su uso es similar a las teclas RePág y AvPág de los teclados modernos.

Podremos paginar en tu documento entonces haciendo caso a la siguiente dactilografía:

Dedo de mano izquierdaTeclaDedo de la mano izquierdaMovimiento
MeñiqueCtrl Índice R Retroceder página
MeñiqueCtrl Medio C Avanzar página

Si sumamos la tecla rápida de WordStar, podremos saltar rápidamente con el cursor al inicio del documento, o al final del documento con esta dactilografía:

Dedo de la mano izquierda Tecla Dedo mano izquierda Tecla Dedo de la mano izquierda Tecla Resultado
Meñique Ctrl anular QÍndice R Inicio del Documento
Meñique Ctrl anular QMedio C Fin del documento

Combinando todos estos comandos permite mover el cursor a lo largo del texto que conforma el documento tan solo usando tu mano izquierda, al tacto.

Comandos de desplazamiento de pantalla

Además de desplazar el cursor, las últimas versiones de WordStar cuentan con la opción de desplazar la pantalla a lo largo del documento escrito,  línea a línea hacia arriba o hacia abajo a lo largo del texto escrito visualizado (mientras se mantiene fija la posición del cursor en un lugar).

Desplaza la posición de la ventana de un documento larga recurriendo a la siguiente dactilografía:

Dedo de la mano izquierdaTeclaDedo de la mano izquierdaDesplazamiento de pantalla
Meñique Ctrl Anular WHacia arriba
Meñique Ctrl Anular ZHacia abajo

Desplazar la ventana del documento funciona de la misma manera que la rueda de scroll del ratón en un escritorio gráfico.

Comandos básicos de edición

Ahora que ya podemos desplazarnos por todo el documento tan solo recurriendo a la mano izquierda, podríamos querer alterarlo.

Eliminar texto

Los comandos de eliminación de WordStar resultan alternativas a las teclas Retroceso y Supr dedicadas. Sin embargo, podemos utilizarlas incluso en teclados de terminal que carecen de aquellas.

Las teclas de eliminación básicas de WordStar, las encontraremos inmediatamente a la derecha de las teclas de movimiento del cursor aprendidas.

AtajoEquivalenteResultado
Ctrl+g tecla Supr Elimina el caracter a la derecha del cursor
Ctrl+h tecla Retroceso Elimina el caracter a la izquierda del cursor
Ctrl+t - Borra palabra de/a la derecha del cursor
Ctrl+y - Elimina toda la línea
Ctrl+q,y - Borra desde el cursor al final de la línea

Naturalmente que al borrar caracteres a la derecha del cursor, y esto arrastrará el resto del texto de la línea hacia él. Si bien los comandos básicos de borrado Ctrl+g y Ctrl+h normalmente se utilizan con las teclas dedicadas, al usar los comandos estilo WordStar podremos dejar los dedos posados en la posición de descanso del teclado.

También encontraremos comandos extendidos. Nos referiremos inclusive a los comandos Eliminar palabra, Eliminar línea y Eliminar hasta el final de línea. Estos comandos de borrado avanzado adicionales son muy útiles, si bien se encuentran ya por fuera de la fila de descanso. Presionando Ctrl+t podremos borrar la palabra inmediatamente a la derecha del cursor (o, si este se encuentra dentro de una palabra, borrará el resto de la palabra a la derecha). mientras que Ctrl+y elimina toda la línea. El último comando al respecto le suma la tecla rápida y borra hasta el final de la línea actual: Ctrl+g,y.

Finalmente podremos recurrir a la función deshacer con Ctrl+u y a la función de reformatear el párrafo con Ctrl+b

Marcadores

Jstar sólo ofrece un grupo de comandos de bloque de WordStar: el comando Marcador de Bloque (“Marcador”). Este comando permite colocar un marcador temporal en el texto para retornar a él más tarde. Asimismo permite marcar la posición, modificar otra parte del documento y luego volver al punto de partida.

Para colocar un marcador, presiona Ctrl+k más un número entre 1 y 3 (podrás colocar tres marcadores distintos). Estos denotas los comandos de bloque.

Finalmente, tengan en cuenta los atajos de ficheros que salen en la ayuda: Ctrl+k, d para guardar los cambios, Ctrl+k,x para guardar y salir, y Ctrl+k,q para salir de Jstar sin guardar los cambios, .

Muchachas y muchachos: ahora sí el porvenir es de ustedes. ¡Estudien! ¡Trabajen! ¡La Nueva Argentina es de los jóvenes!

Para ustedes mi saludo cordial, mi simpatía, mi afecto, todo mi apoyo y todo mi cariño.