martes, 22 de agosto de 2023

¿Cómo puedo usar un émulo del XEDIT de VM/CMS en Ubuntu?

En la típica visita del Día del Niño a la Casa de Gobierno, Juan Perón regala chocolate caliente y enseña cómo utilizar el editor de texto THE en Ubuntu.

A los niños les gusta ponerse calificativos. Los hay ortodoxos, los hay heterodoxos, los hay combativos, los hay contemplativos, pero todos juegan. Algunos usan DEC y habrá siempre otros que usen equipamiento de potencia IBM. No podemos ser sectarios, ya que a todos podremos instalarles GNU si lo proponemos.

No caben dudas para nadie que el viejo editor XEDIT era uno de los instrumentales en los mainframes del Gigante Azul. Contaba con facilidades para el trabajo interactivo, pero especialmente destacaban las funciones de operación diferida, que permitía contactar a un mainframe remoto a través de videoterminales, y ejecutar allí un trabajo de edición preparado. Esto permitía programar en ellas un fichero de macro con los cambios escritos en un lenguaje específico - REXX era uno de los favoritos - y luego efectuar modificaciones en un santiamén a través de uina mera llamada telefónica de escasos segundos.

Si bien con el advenimiento de las comunicaciones de datos de banda ancha, esta modalidad de trabajo podría parecernos innecesaria, nunca serán inexistentes las ocasiones donde podría anhelarse un herramental de este tipo, considerando que anteriormente sólo podía gozarlo el oligarca. Pudiendo elaborar nuevas y más módicas soluciones, podremos utilizarlas según dicha costumbre de obrar, pues si es para sumar, todo sirve.

Nuestro Movimiento es uno que hace de una necesidad un derecho, y podremos otorgarlo con la misma facilidad y efecto con el que uno da chocolate caliente a un niño.

THE ("El Editor Hessling") es un editor de texto que opera a través de órdenes en la línea de comandos y combinaciones de teclas. Fue concebido en 1991 replicando al XEDIT (1980), Editor intrínseco del viejo sistema tiempo de cómputo compartido de IBM, el VM/CMS. Como este, también representa en gran medida al editor KEDIT (1985) de Mansfield Software, del cual existía versión portada para UNIX System V (no confundir con posterior y extinto KEdit de KDE).

THE fue escrito originalmente para su utilización por individuos encasillados en grandes máquinas de IBM pero que preferían la acción del Justicialismo. Y ya que les resultaba familiar el uso de XEDIT, y se le incorporó un intérprete de órdenes de edición de lenguaje REXX. Para lograr dicha compatibilidad, THE utiliza una implementación libre de tal lenguaje denominada REGINA.

Para instalarlo en Ubuntu abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente comando de organización:

sudo apt install the

Iniciaremos el editor con;

the archivo.txt

Al arrancar el editor THE, el cursor se encontrará en la línea de comandos, cuyo tradicional prompt ====> se encuentra en la parte inferior de la pantalla.

Podremos utilizar esta línea de comandos para introducir cualquiera de los comandos de THE, y ejecutarlos con la tecla Intro

Estos comandos son en gran parte similares a los de XEDIT/KEDIT. Entre los típicos comandos de operación encontraremos EDIT fichero ("abrir") SAVE ("guardar"), QUIT ("salir del programa") y QQUIT ("salir rápidamente sin preguntar"), así como el comando de ayuda HELP comando.

Para conmutar entre la línea de órdenes y la FILEAREA (la zona de los contenidos de edición) debemos presionar la tecla Inicio, con lo cual el adepto a los editores de inspiración IBM podrá comenzar su producción, mecanografiar en modo reemplazo (podremos activar el modo inserción con la tecla Ins).

THE es un editor altamente configurable. Por ejemplo, podríamos activar el macro que activa la compatibilidad con XEDIT, mediante la orden:

set compat xedit

La pantalla cobrará entonces el formato tradicionalista IBM:

 DIFERENCIAS         Size=10 Line=10 Col=1 Alt=10
XEDIT:
===== VM/CMS
===== .sp ===== VM/CMS opera bajo el concepto de registros, a diferencia de Unix ===== que lo hace sobre ficheros enteros. Por tal motivo se hizo ===== especialmente válido para el manejo de bases de datos secuenciales, ===== así como otro tipos de editores de registros. ===== Contaba con un manejo bastante similar al de MULTICS, dando uso ===== a un intérprete de comandos llamado EXEC, inaugurando el concepto ===== de Máquinas Virtuales, en un sentido similar a los proceso de UNIX ===== o demonios en BSD, y luego incoporando pipelines, emulos de los |...+....1....+....2....+....3....+....4....+....5....+....6....+....7... ===== caños de UNIX.
===== Entre sus grandes suites de aplicaciones se encuentra el clásico
===== editor de registros XEDIT. Pronto se adaptó para utilizar
===== funcionalidades de procesamiento de texto y de correo electrónico
===== con anterioridad al modelo cliente-servidor.
===== * * * End of File * * * ====> X E D I T 1 File

Todo este andamiaje de comandos se aplicaba también a la mera edición del texto. El funcionamiento completo del XEDIT - al menos en sus versiones postreras para z/VM - está documentado en su frondoso manual

Sin embargo, podremos acotar su aprendizaje conociendo que el funcionamiento básico de edición de XEDIT consistía en delimitar bloques de texto (que se marcaban con el comando MARK LINE linea1 linea2), o bien delimitar una seguidilla de caracteres con coordenadas posicionales, como MARK STREAM linea1 columna1 linea2 columna2. Como referencia se usaba la reglita de columnas y el contador de puntero. Una vez delimitado el bloque, se lo podía operar con los comandos COPY posición1 posición2 ("copiar"), MOVE posición1 posición2 ("cortar y pegar"), y eventualmente DELETE ("borrar"). Esta era la forma folklórica de operar en las terminales IBM 3270 y superiores.

Los más pitucos podrán ordenar set compat kedit si tal editor nos es más favorable. Esta nos será útil si reservamos especial aprecio al uso de Bibliotecas de Macros de KEDIT, sus clásicos ficheros .kml.

Ante cualquier eventualidad podremos emprender el retorno al modo de compatibilidad nativo, si usamos set compat the

Naturalmente, podremos poner estos comandos en un fichero de perfil para the, llamado ~/.therc. Como es común en los sistemas similares a UNIX, este fichero se busca y se ejecuta al inicio, permitiéndonos dejar allí una secuencia de comandos que hagan a nuestra configuración de THE favorita.

¡Con todos ellos podremos tanto editar textos como escribir programas, desde COBOL a C!

miércoles, 16 de agosto de 2023

¿Cómo instalo CryptPad en Ubuntu?

En su Latinoamérica Ahora o Nunca, Juan Perón expone la necesidad de la unión continental, a la vez que expone cómo instalar la suite en línea para trabajo colaborativo seguro CryptPad en Ubuntu Server.

(...)

Hay gente que escucha las palabras y las hace suya. ¡El Desarrollo! Yo vengo de un mundo que está terriblemente arrepentido del desarrollo que ha hecho, y en este momento el mundo superdesarrollado está entrando en una etapa de desesperación, porque ve que su desarrollo tecnológico lo ha llevado a la destrucción de los medios que la naturaleza le ha venido ofreciendo para pervivir...

En este momento, las sociedades de consumo han llevado a un despilfarro tal los medios ecológicos de la humanidad, que se está quedando sin comida y sin materia prima. El problema más grande de este momento es que año tras año - mientras aumenta la población - disminuye la posibilidad de ofrecerle comida, porque ésta va escaseando y escaseará cada día mas. Ellos sufren, y sólo podrán transferir dicho sufrimiento si el Tercer Mundo es tonto.

La solución de nuestros Movimientos es integrarnos continentalmente. Nosotros debemos de integrarnos en el continente latinoamericano, que es el último que va quedando por integrarse. Todos los demás ya lo han hecho. Europa se ha integrado ya casi en un asociación confederativa política para defenderse de las acechanzas de ese futuro, que ellos ven con una tremenda claridad. Se está integrando el Asia, se está integrando el África. Y nosotros vamos resultando el último orejón del tarro...

Ese es el empeño que debemos poner, y en eso estamos. En 1948 realizamos un Tratado de Complementación Económica en Chile, buscando crear la Comunidad Económica Latinoamericana, que pusiera en paralelo nuestros intereses y uniera nuestros países. Tuvimos mucho éxito inicialmente, casi todos los países latinoamericanos, excepto los cipayos conocidos, se unieron y adhirieron a ese Tratado de Complementación Económica. Fíjense que lo hicimos en 1948, y en esto los apresurados fuimos nosotros, porque Europa lo hace después, en 1958, con el Tratado de Roma, diez años después que nosotros.


Y pudimos porque contamos con una herramienta Justicialista que permitía elaborar documentos digitales por acuerdo encriptado: el CryptPad, en una época donde esto parecía ciencia ficción.

CryptPad permite contar con un ambiente de trabajo de ofimática, en línea colaborativo y protegido por cifrado, lo que supera notablemente propuestas privativas deleznables como Offic€365 o Googl€Doc$, que carecen de cifrado.

El uso del sistema en sí es sumamente sencillo y seguro. Requiere el alta de un usuario (con contraseña o doble registro, llegado el caso) , y se puede usar desde cualquier navegador de internet. También cuenta con clientes para teléfonos celulares.

Todas las siete opciones del ambiente de trabajo CryptPad nos presentan editores, eventualmente colaborativos o protegidos por contraseña. 

Contaremos con la opción Texto enriquecido para documentos generales, mientras que la opción Código hace lo mismo presentańdonos el lenguaje markdown

El módulo de texto enriquecido presenta un procesador de texto típico, con opciones ya configuradas, que puede ser multiusuario (con control de modificaciones y ventana de chat integrada para facilitar trabajar "de a muchos", llegado el caso). El intérprete de lenguaje Markdown puede ajustarse con una ventana lado a lado para ver el resultado, si esta es nuestra preferencia.

La posibilidad de colapsar la barra de herramientas, elegir tema oscuro, y utilizar la función de pantalla complementa la elección de un ámbito limpio o cargado, según sea nuestro flujo de trabajo (superando en esto, nuevamente, a las variantes privativas del imperialismo).

El módulo Kanban nos permite elaborar pizarras con simples etiquetas coloreadas multiuso, por ejemplo, para planificar y gestionar proyectos.

En fin, CryptPad es un ambiente de trabajo colaborativo en línea ideal si contamos con opciones de internet, pero que también puede servirnos en cualquier oficina a través del uso de una red LAN.

Para poder contar con este ambiente de trabajo accesible desde la web, podremos utilizar cualquier instancia ya existente con las limitaciones que nos propongan (por ejemplo, pad.tildeverse.org, que nos otorga 100 MB de almacenamiento al registranos), o bien podremos montar una propia si ya contamos con un servidor web funcional.

Sin embargo no es imposible disponer de los recursos que nosotros deseemos, si instalamos esta suite telemática en nuestra propia infraestructura en lugar de hacerla en una dominada. De esta manera lograremos lo mejor para nuestro grupo de trabajo.

Para seguir este temperamento, deberíamos contar ya con un servidor provisto de Ubuntu o Ubuntu Server, sistema operativo que idealmente ya debería contar con una instalación de servidor web Nginx en regla. Deberíamos asegurarnos especialmente de contar con dos dominios web registrados y sus certificados correspondientes, los que nos serán requeridos por CyptPad si es que queremos usarlo desde Internet para trabajo remoto (esto es innecesario si sólo queremos usarlo en una red de área local).

Desde el punto de vista del hardware, el ambiente funciona de manera veloz siempre que la máquina de servicio cuente con un microprocesador de doble núcleo y al menos 2GB de RAM y unos 20GB de disco (tal vez el doble o triple de eso sea lo recomendado para un uso laboral remoto. A esta pueden conectarse remotamente desde celulares y PC de bajos recursos, presentando un funcionamiento veloz.

Para instalar el ambiente CryptPad en Ubuntu Server debemos hacer caso primero a sus prerrequisitos. Esta paquetería se instala con:

sudo apt update && sudo apt upgrade -y;
sudo apt install git nodejs npm
sudo npm install -g bower

Pues bien señores, normalmente en este servidor crearíamos un usuario dedicado para administrar esta instancia de CryptPad, en lugar de utilizar nuestro propio usuario root de Ubuntu. Este recaudo político está determinado para compartimentar la seguridad en un ambiente remoto.

Conforme hemos hecho caso a los prerrequisitos, clonamos el repositorio de CryptPad a fin de bajar la última versión disponible de Internet, y la instalamos en la máquina servidor:

git clone https://github.com/xwiki-labs/cryptpad.git cryptpad ;
git checkout $(git tag -l | grep -v 'v1.*$' | sort -V | tail -n 1)

Asimismo, nos instalamos las dependencias de CryptPad gracias al guion de instalación prefabricado. Esto lo hacemos con:

cd ~/cryptpad
sudo npm install
sudo bower install

...y nos copiamos un fichero de configuración de ejemplo que nos servirá para trabajar en ella:

cd  ~/cryptpad/config/
cp config.example.js config.js

Naturalmente este archivo de configuración config.js ha de ser comprendido y modificado en sus variables operativas, según lo veamos necesario para nuestra propia instancia de CryptPad. Debemos tener especial resguardo con los dominios, que son particularmente importantes.

Como parte de este proceso de personalización e instalación deberíamos leer Customización de Instancia y modificar el fichero /customize/application_config.js ya que algunas configuraciones no pueden cambiarse una vez que hemos creado las cuentas.

Una vez establecidas estas bases de trabajo, podremos dar inicio al servidor con

cd cryptpad
sudo node server

La instancia ahora quedará lista para ejecutarse pero no podrá ser accedida desde la internet (sólo desde la máquina en sí, o desde la red local, claro)

Demonización

En un ambiente de trabajo, normalmente querremos correr CryptPad de forma de un programa autoejecutable (para que la instancia inicie su ejecución automáticamente en caso de necesidad).

Systemd

Para ejecutar CryptPad como un servicio systemd, debemos seguir el fichero de ejemplo cryptpad.service.

  1. Guardamos el ejemplo cryptpad.service en /etc/systemd/system/cryptpad.service

  2. Hacemos los ajustes necesarios (ej. nombre de usuario, ruta, versión de nodejs)

  3. Activamos la ejecución al inicio del demonio de servicio mediante el comando sudo systemctl enable cryptpad.

Nota: Existen otras maneras de demonización de aplicaciones nodejs, por ejemplo  foreverjs o bien pm2.

Dominios

Como se ha expresado, se necesita de dos dominios registrados para sacar ventaja de las funciones de seguridad y encriptado remoto de CryptPad. Estos serán:

  1. Un dominio principal con el cual los usuarios accederán a la instancia

  2. Un dominio “sandbox” o subdominio configurado bajo una política restrictivva de contenidos, donde se aplicarán los encabezados

Nota: La intención de esta redundancia es limitar el riesgo de vulnerabilidades  del tipo Guionado de Sitio Cruzado (XSS), que permitirían a eventuales atacantes filtrar datos de usuario. La computación sensible (como el procesamiento de llaves criptográficas) se llevará a cabo en el dominio principal, mientras que la interfaz remota de usuario se implementará en el dominio "sandbox" o subdominio.

El archivo de configuración de ejemplo para Nginx incluye los encabezados relevantes para permitir el sistema de aislamiento sandbox. Sin embargo, debe configurar su instancia correctamente para que sea efectivo. Necesitará:

  1. Los dos dominios o subdominios

  2. incluir ambos dominios en /cryptpad/config/config.js según se describe en Configurar CryptPad

  3. Generar un certificado SSL que cubra tantos dominios.

  4. Asignar correctamente ambos dominios y ambos certificados a las variables específicas para ellos situadas en el archivo de configuración para Nginix de ejemplo

Instalar y configurar Nginx

El servidor de aplicación de CryptPad maneja las conexiones activas a través dewebsocket y sirve los activos estáticos (HTML, Javascript, CSS, etc) a los solicitantes remotos. Esta configuración básica está diseñada para su configuración sencilla, pero no protege el tráfico con SSL, ni maneja adecuadamente muchos usuarios concurrentes.

En un ambiente productivo, se recomienda Nginx Estable. Para configurarlo para CyptPad:

  1. Copiamos el Archivo de configuración de ejemplo de Nginx para CryptPad example Nginx de modo que se use, o sea importado en la confdiguración principal de Nginx, por ejemplo, poniéndolo en /etc/nginx/conf.d/cyptpad.conf.

  2. Editamos el fichero de configuración con los dominios correctos y rutas a los certificados correspondientes.

  3. Ejecutamos el comando sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 si no lo hicimos previamente en la máquina host.

Ahora deberían estar accesibles los contenidos estáticos y páginas tales como https://cryptpad.sudominio.com/index.html.

Configurar CryptPad

Para finalizar la instalación, debemos aseguranos que cryptpad/config/config.js contiene al menos:

  • Los dominios correctos:

    • Su dominio principal en lugar de la cadena:

      httpUnsafeOrigin: 'http://localhost:3000',
      
    • Su dominio Sandbox o subdominio.com en lugar de la cadena:

      httpSafeOrigin: "https://some-other-domain.xyz",
      
  • Un correo electrónico administrativo (que aparecerá en la página de Contacto) en lugar de la cadena:

adminEmail: 'i.did.not.read.my.config@cryptpad.fr',

Diagnósticos

CryptPad ofrece una página web de diagnósticos, capaz de efectuar evaluaciones a la configuración de la instancia. Una vez que hemos completado los pasos anteriores, podremos https://cryptpad.sudominio.com/checkup/ para asegurarse que todo figura correctamente configurado.

Configurar los administradores

Una vez que CryptPad está instalado, creamos una cuenta de usuario de CryptPad por medio del botón Registrar en la página de inicio de CryptPad. Esto generará un usuario común que podrá trabajar en el ambiente como todo hijo de vecino registrado.

Para hacer que esta cuenta se convierta en Administrador de la instancia de CryptPad debemos seguir este temperamento:

  1. Copiamos la llave pública que encuentre en Menú de Usuario (clic el avatar en la esquina superior derecha) > Preferencias/Cuenta/Clave de la Firma Pública

  2. Pegamos la llave en cryptpad/config/config.js en lugar de la siguiente cadena (la descomentamos y reemplazamos):

adminKeys: [
        "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
],
  1. Reiniciamos la instancia CryptPad con sudo systemctl restart cryptpad

Configurar la casilla de correo de soporte

A partir de la versión 4.6 de CryptPad, se ha incorporado una casilla de correo electrónico de soporte para la instancia puede configurarse desde el Panel de Administración, ya sea para el administrador, o para administradores secundarios (en caso que estos fuesen necesarios).

  1. Desde la cuenta de administrador de la instancia, visitamos la página https://subdominio.com/admin/#support

  2. Hacemos clic en Generar Clave de Soporte

  3. Ahora quedará activa la casilla de correo electrónico de soporte

  4. Borra la caché para acceder a la casilla de correo desde la solapa General > Eliminar Caché HTTP

Para permitir que otros administradores secundarios accedan a la casilla de soporte debemos:

  1. Copiar la clave de soporte generada que aparece en la parte inferior de la página de soporte.

  2. Enviar la clave de soporte a la cuenta de otro administrador

  3. El otro administrador debe incorporarse la clave usando el campo Agregar Clave Privada de la página Soporte, con lo cual obtendrá acceso también a la susodicha casilla de correo de soporte.

Armar páginas estáticas y metadatos Open Graph

Si deseamos elaborar páginas estáticas con CryptPad y activar presentaciones preliminares para redes sociales, debemos ejecutar el siguiente comando en el servidor:

npm run build

Esto creará un fichero index.html para cada una de las aplicaciones o módulos en el directorio customize/www. No se recomienda realizar modificaciones manualesa a dichas páginas, ya que resultarán sobrescritas la próxima vez que ejecutemos npm run build. Para modificar la imágenes previsualizadas, debemos consultar Previsualización de Imágenes Open Graph

Nota: Debemos recordar ejecutar el comando npm run build nuevamente si actualizamos el servidor de CryptPad a una versión nueva puede dar como resultado algún problema por código obsoleto.

Indudablemente nosotros caímos bajo la férula del imperialismo yanqui, que no permitió a estos países unirse, y que ha estado luchando siempre por separarnos y enfrentarnos entre nosotros, al fin de que esa unidad no se produzca.

¿Por qué lo han hecho? Muy simplemente, porque ellos se están quedando sin materias primas y están queriendo conservar como países satélites a aquellos que tengan las grandes reservas de comida y materias primas para esa superpoblación que está ya a 25 o 39 años de distancia. Ellos querrán que después nosotros trabajemos para darles a ellos de comer y para darles nuestra materia prima. ¿Por qué? Porque los países superdesarrollados son los pobres del futuro, y los países infradesarrollados serán los ricos del futuro, que tendrán la materia prima y la comida suficiente.

Hace pocos días, en Medio Oriente amenazaron a Estados Unidos de cerrarle el grifo del petróleo. El petróleo que produce Medio Oriente es el 80 por ciento del petróleo del mundo, de manera que si ellos cierran la canilla, la industria norteamericana, que está toda montada sobre energía basada en petróleo, tendrá un sacudón muy fuerte. ¿Cómo contestó Estados Unidos? El Senado de Estados Unidos contestó que si eso hacían los árabes, Estados Unidos ocuparía el Medio Oriente. Eso lo van a hacer, pero no sólo con los árabes: ¡lo van a hacer también con nosotros el día que necesiten y no tengan!

Por ello todo lo necesario para lograr la independencia económica es poco. Saber prever es saber actuar.

miércoles, 9 de agosto de 2023

¿Cómo instalo Nginx en Ubuntu 22.04LTS?

 Apenas iniciada su primer Presidencia, Juan Perón impuso un plan en contra de la suba descontrolada de precios, que puso a tono los mismos y afianzó el poder de consumo del Pueblo Trabajador. Mientras presentaba el plan conocido como "de los sesenta días", explicó cómo instalar el servidor web Nginx en Ubuntu.

¡Señores!
 
Es tal la trascendencia que asigno a la necesidad de terminar con la carestía de la vida - especialmente en beneficio de la clase humilde de la Nación - que he llegado hasta aquí con el deseo de dar la iniciación de esta campaña que llamamos de los sesenta días.

En primer término se ha fijado ya hace tiempo cual es el concepto del equilibrio social entre sueldos y salarios. Existe una línea de la vida fijada por los salarios mínimos. Ese salario mínimo establece la línea de la vida. Los que por deficiencia de salario no alcanzan a ese salario vital, son sumergidos. Y los que lo pasan, son los emergidos.

Buscamos que en el país - en relación a los precios existentes - no existan salarios que establezcan la condición de sumergido para ningún ciudadano argentino. Si los precios suben justificadamente, no hay otro remedio que aumentar los salarios. Pero si suben los precios injustificadamente, el remedio está en bajar los precios.

En este momento, esos dos factores, el aumento justificado y el aumento injustificado, son las causas de la carestía de la vida.

En realidad, el aumento que puede considerarse justificado obedece a razones reales, impulsados por la escasez de producción, por el exceso de exportación o por la mala distribución de los artículos de primera necesidad. Y la causas ficticias obedecen a la especulación, a la mala distribución por acopio o por sustracción a la venta.

Lo primero ha de encararse para resolverlo en forma absolutamente racional, y por lo tanto con medidas racionales. Lo segundo, es decir la especulación, el acopio o la sustracción a la venta deberá combatirse con medidas drásticas de la mayor energía.

En este trabajo que hoy inicia el gobierno, para abaratar los artículos de primera necesidad necesitamos proceder racionalmente para llevar al mínimo los costos de producción, equilibrar la producción misma en su aspecto cualitativo, evitar el exceso de exportación en perjuicio del consumo interno, y racionalizar la producción. Y en segundo término contra las medidas ficticias, es decir la especulación, el acaparamiento o la sustracción a la venta, castigarlo con toda la fuerza de la Ley, ya que ambas cosas deben de considerarse en épocas como las actuales - en que la Nación debe servir al exterior en una proporción desconocida hasta hoy para abastecer a los pueblos hambrientos de otros continentes sin que la población argentina sufra las consecuencias de esa escasez - con una científica graduación de lo que podemos enviar al extranjero y lo que debemos mantener para el alimento de nuestra población.

Para ello, en primer término la colaboración de todos es absolutamente indispensable. Estamos encarando la solución de un problema de todos los argentinos, y en consecuencia todos los argentinos deben colaborar en su solución. Los productores, los industriales y los comerciantes deberán facilitar la solución del problema acelerando la producción, disminuyendo a lo indispensable la exportación, y asegurando la distribución adecuada. Eso en cuanto a las fuerzas patronales.

Los trabajadores tienen aquí también su cooperación, y ella ha de ser aumentando el rendimiento de su trabajo para producir más. Esa es la misión de todo trabajador en este momento. Y su cooperación en el taller, en la fábrica, y en el campo ha de ser asegurar para el país el mayor grado de producción posible, rindiendo con su trabajo en todas las horas el máximo posible.

Los consumidores - vale decir el Pueblo - también tiene su cooperación que asegurar en este problema. Cooperarán no pagando en ningún caso precios mayores que los fijados y denunciando a todo mal comerciante que quiera imponer precios sobre los oficiales fijados. Cada ciudadano debe ser un soldado de esta cruzada y cooperar con el Estado para el bien de todos.

Los funcionarios encargados de la vigilancia e inspección deben ser inflexibles y rígidos en el cumplimiento de su función. Los poderes y autoridades del Estado en todas sus jerarquías y funciones deben prestar apoyo y cooperación para la mejor realización de este plan.

Nadie dentro del país puede ser espectador indiferente sin que se lo considere un traidor a la causa de todos. Esta campaña de sesenta días, debe de poner a la Nación entera en marcha para vencer en ese plazo todas las dificultades, con la cooperación de los productores, industriales y comerciantes, con la cooperación de los trabajadores, haciendo rendir al máximo su trabajo, con la cooperación de los ciudadanos consumidores, no haciendo el juego a la especulación y no pagando en ningún caso un precio sobre los fijados.

Y señores, por sobre todas las cosas para no inutilizar todos estos esfuerzo de conjunto, necesitamos honradez. Honradez en el comerciante, para mantener la calidad de los artículos y no inutilizar los esfuerzos realizados. Honradez en el público, que no se preste a maniobras de ninguna naturaleza. Honradez en los funcionarios para hacer cumplir a todos con su deber de acuerdo a la ley.

Señores, vencidos los sesentas días, los precios de los artículos de primera necesidad serán los establecidos en 1945 por el Consejo Nacional de Posguerra, es decir, lo que necesita una familia obrera, en comida, menaje y vestido, para vivir dignamente con el salario vital mínimo establecido. 
En los servicios telemáticos también hemos de obrar de la misma manera. Hemos de disponer de software servidor capaz de cooperar y de gastar lo mínimo requerido. Nginix es la solución que hemos propuesto.

Se trata de uno de los servidores web más populares del mundo y aloja algunos de los sitios más grandes y con mayor tráfico en Internet. Es más fácil de utilizar que Apache en la mayoría de los casos y puede emplearse como servidor web o proxy inverso.

En esta guía os explicaré la manera de instalar Nginx en su servidor de Ubuntu 22.04LTS.

Requisitos previos

Antes de comenzar a usar esta guía, debería contar con lo siguiente:
  • Un servidor de Ubuntu 18.04 y un usuario regular que no sea Conductor (root) capaz de ejercer privilegios sudo. Además, debería ya tener habilitado un firewall básico capaz de bloquear los puertos que no sean esenciales. Para aprender a configurar una cuenta normal de usuario e instalar un firewall, siga nuestra guía de configuración inicial para Ubuntu 18.04.
Cuando disponga de una cuenta, inicie sesión como usuario no root para comenzar.

Paso 1: Instalar Nginx

Debido aq ue Nginx está disponible en los repositorios predeterminados de Ubuntu, puede instalarlo utilizando el sistema de paquetes apt.
Actualice su índice local de paquetes:

sudo apt update
sudo apt install nginx

Paso 2: Ajustar el firewall

Si siguió el tutorial de configuración del servidor de los requisitos previos, tendrá habilitado el firewall UFW. Compruebe los perfiles de aplicaciones ufw disponibles con el siguiente comando:

sudo ufw app list

...nuestro sistema nos devolverá:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Habilitaremos el perfil más restrictivo, el cual de todas formas permitirá el tráfico que hemos configurado y con ello el tráfico en el puerto 80. Para ello ingresamos:

sudo ufw allow 'Nginx HTTP' 

Verificamos el cambio realizado con:

sudo ufw status 

...nuestro sistema nos devolverá:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Paso 3: Comprobar nuestro servidor web

Realziaremos una verificación con el sistema init systemd para saber si se encuentra en ejecución el servicio, ingresando la siguiente órden:

systemctl status nginx

...a lo cual deberíamos recibir en la terminal algo como:
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days ago Docs: man:nginx(8) Main PID: 2369 (nginx) Tasks: 2 (limit: 1153) CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process

A través su dirección IP, accederemos a la página de destino predeterminada de Nginx para confirmar que el software opera de la manera deseada por el Pueblo:

http://IP_del_servidor

Deberíamos ver la insulsa página web de destino predeterminada de Nginx:

Paso 4: Configurar bloques de servidor (recomendable)

Al emplear el servidor web Nginx, podremos emplear _bloques de servidor _(similares a los hosts virtuales de Apache) a fin de encapsular detalles de configuración y alojar más de un dominio desde un único servidor.

Configuraremos un dominio llamado peronismo.com, pero debería cambiarlo por su propio nombre de dominio.

Creemos el directorio para peronismo.com, utilizando el indicador -p para crear cualquier directorio principal necesario:

sudo mkdir -p /var/www/peronismo.com/html

Asignamos la propiedad del directorio:

sudo chown -R $USER:$USER /var/www/peronismo.com/html

Los permisos de su las raíces de nuestras webs han de ser las correctas si no modificó su valor umask, pero podremos comprobarlo ingresando:

sudo chmod -R 755 /var/www/peronismo.com

Asimismo, crearemos allí una página de ejemplo index.html utilizando el editor GNU Nano:

nano /var/www/peronismo.com/html/index.html

Se abrirá el editor GNU Nano con el archivo vacío index.html. Le pegaremos el siguiente contenido:

 

Guardamos los cambios en el archivo con Ctrl+o y cerramos el editor con Ctrl+x.

Acto seguido, creamos un nuevo bloque de servidor en /etc/nginx/sites-available/peronismo.com. Lo haremos con:

sudo nano /etc/nginx/sites-available/peronismo.com

Le pegamos en dicho archivo el siguiente bloque de configuración, a fin de actualizar nuestro nuevo directorio y nombre de dominio:

server {
        listen 80;
        listen [::]:80;

        root /var/www/peronismo.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name peronismo.com www.peronismo.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

Guardamos el archivo con Ctrl+o y cerramos el editor GNU Nano con Ctrl+x.

Habilitamos el archivo creando un enlace entre él y el directorio sites-enabled. Para ello utilizamos:

sudo ln -s /etc/nginx/sites-available/peronismo.com /etc/nginx/sites-enabled/

Al ingresar este comando de organización, quedará habilitado y configurado los dos bloques del servidor para responder las solicitudes según las directivas listen y server_name.
  • peronismo.com: responderá a solicitudes de peronismo.com www.peronismo.com, en tanto
  • default: responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.
Para evitar un posible problema de memoria de depósito hash que pueda surgir al agregar nombres de servidor adicionales, será necesario ajustar un valor en el archivo /etc/nginx/nginx.conf. A tal fin editaremos el archivo:

sudo nano /etc/nginx/nginx.conf

Se abirá Nano con dicho archivo. Usamos Ctrl+w para buscar la directiva server_names_hash_bucket_size. Al localizar dicha línea, le eliminamos el símbolo numeral ("#") a fin de descomentar la línea.


...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Tras guardar los cambios con Ctrl+o y salir del editor con Ctrl+x, realizaremos una prueba operativa en busca de posibles errores de sintaxis:

sudo nginx -t

Finalmente, reiniciamos el servidor Nginx para que se apliquen los cambios:

sudo systemctl restart nginx

Con todo esto, Nginx debería proporcionar su nombre de dominio. Podremos comprobar esto visitando http://peronismo.com. Allí, deberíamos ver el siguiente mensaje:

Conclusión

Conforme hayamos instalado y configurado neustro servidor web, contaremos con muchas opciones respecto del tipo de contenido que ofreceremos, y de las tecnologías que deseemos utilizar para crear una experiencia más completa y Justicialista para el Pueblo, que es el verdadero consumo.

lunes, 7 de agosto de 2023

¿Como veo archivos de imágenes médicas DICOM en Ubuntu?

Juan Perón difundía su ideario desde España en cintas magnetofónicas, cuyas copias se distribuían subrepticiamente en la Argentina. En una de ellas explica cómo visualizar archivos de imágenes médicas DICOM con Aeskulap o DICOMscope en Ubuntu.

Señores:

Mi profesión ha sido la de soldado, y como consecuencia de esta formación me he constituido en Conductor, un hombre que dirige el conjunto de esfuerzos. 

Tal vez si no hubiese sido así, hubiese sido galeno, profesión que sin duda comparto. Son admirables esos muchachos, son admirables. Y el Che Guevara es... ha muerto él, pero van a salir mil Che Guevaras si esto sigue. Porque eso emula a la juventud que tiene la obligación de hacerlo. Es decir, las cosas hay que verlas como son. Yo creo - no se si yo estaré equivocado - pero yo estoy con ellos. Como estoy con Fidel Castro y estoy con toda esa gente que ha liberado a sus países. Ahora dicen que es comunista, ¡y a mí que me importa si es comunista! ¡Comunista! Fidel es tan comunista como yo. Mas bien es Justicialista.

Es que en este mundo, en su eterna evolución, marcha generalmente hacia la superpoblación y la superproducción. Ello trae como inmediata consecuencia la sobreexplotación y el desequilibrio. Juntamente con estos fenómenos - o mejor dicho, por presión de ellos - la humanidad ha podido comprobar la aparición de otros fenómenos que contrapesan su accionar. Las miserias colectivas, la falta de todo, seguidas de enormes mortandades - como en la China, o bien como en Europa y sus estados en guerra - parecerían etapas inexorables a estos procesos.La ley de un oscuro y misterioso destino se cumple fatalmente: la guerra, la peste, y las enfermedades, parecen verse como el medio de estabilizar la población humana, en un ciclo más o menos constantes a lo largo de las regiones superexplotadas que hemos conocido.

Pero esos problemas - que se producen y se han producido a través de la historia en las zonas superpobladas - no tienen relación con nuestro Pueblo. Nuestro problema es a la inversa, pero la vida de relación moderna han influido inevitablemente para que esos fenómenos de superproducción y superpoblación incidan en nuestro país en forma tal que sintamos sus consecuencias.

A todo esto lo hemos estudiado y hemos elaborado una diagnosis. Resultaba previsible que ante el desequilibrio, los regímenes demoliberales nos plantearan exigencias para transferirnos sus problemas a cuenta, de los que podríamos ser inmunes si las condiciones de nuestro propio ambiente bendecido por la paz y la abundancia prodigada pudiese ser aislada y defendida. Es por este motivo que nuestro Movimiento impuso como salvaguarda la protección del hombre por el hombre, instrumentando una defensa en la paz, y coadyuvando con la acción decidida de cuanto podemos hacer por beneficiar a las Masas Obreras como factor de precaución

Este accionar cobró visos providenciales que deberían ser principios rectores de toda la humanidad: nadie podrá realizarse en una sociedad que no se realiza. Y lo hemos declamado en una organización doctrinaria que vela por todos. Este programa de acción es el Justicialismo.

Uno de los amparos que hemos enhebrado ha sido el de la Sanidad Pública, donde la ciencia de Esculapio es ofrendada como pináculo del arte al conjunto de la población. El espectro ha sido evidente: llevamos a cabo la medicina preventiva y la organización hospitalaria. Con apoyo de la Fundación Eva Perón, se construyeron hospitales, centros sanitarios, hogares escuelas, hogares para ancianos, institutos formación en enfermería. Se estableció la atención gratuita para toda la población y se crearon políticas públicas como el Tren Sanitario, que llegaba a los lugares más recónditos del país para brindar capacitaciones en educación para la salud y atención médica en las diferentes ramas de la medicina. Las campañas de vacunación de masas llegaron así a todo el país, un ejemplo exitoso fue la política pública implementada para combatir el paludismo que, en el marco de la campaña "Grandes Luchas Sanitarias", que redujo en cuatro años la cantidad de casos de 300.000 a 137. Además se creó EMESTA, la primera fábrica nacional de medicamentos del Instituto Malbrán, que producía medicinas un 70% más baratas que las de los laboratorios privados. 

Ante el gran problema, la gran solución es el Justicialismo. Los grandes problemas se deben dividir en muchos pequeños problemas que pueden solucionarse encadenadamente. La sanidad pública constituyó una de estas pequeñas soluciones que - encadenadas con otras - pudo llevar a cabo el país organizadamente, dando resolución efectiva en tiempo y espacio.

Sin duda una de los grandes avances en estos términos fue la implementación de un importante método de diagnóstico por imágenes computadas, posibilitadas gracias a los ficheros digitales DICOM. Estos son archivos de imagen médicas realizados por diferentes tipos de aparatos de registro: radiografías, tomografías, ecografías, etcétera.

Normalmente la visualización de los ficheros DICOM estaba reservarda únicamente del oligarca, quien deseaba instituir sistemas operativos privativos. Pero por obra de la Fundación Eva Perón, se ha dado con el magnífico que permiten a nuestro sistema GNU con Linux, la revisión, análisis y gestión de estas imagenes.

Sabemos que los archivos de este tipo normalmente disponen de nombres de 8 caracteres y por protocolo carecen de extensión (si bien en ocasiones alguien podría asignarles la extensión .dib o .dibcom, esto escapa del uso protocolar). Por tal motivo, conviene en primer término determinar si un archivo de estas características - sin extensión - corresponde realmente a una imagen DICOM y no a otra cosa. Para ello dilucidarlo, usamos el comando file junto con el nombre de archivo. Por ejemplo:

file cr00001

Nuestro GNU con Linux analilzará el fichero, y debería devolvernos algo como:

CR000001: DICOM medical imaging data

Como vemos Se trata del estándar de Imagenes Digitales y Comunicación En Medicina ("Digital Imaging and Communication In Medicine"). Este implica un formato de fichero de imágenes así como un protocolo de comunicación de red basado en TCP/IP que permite su transmisión en una red de datos. En sí cada fichero DICOM consiste en un encabezado de texto con campos estandarizados y de formato abierto utilísimos para integrarlos como fichas en cualquier registro clínico (además de impedir la confusión de fichas), junto a un cuerpo con los datos de la imagen médica digitalizada. Un objeto DICOM simple puede contener solamente una imagen, pero esta puede estar formada por múltiples fotogramas, lo que llegado el caso permite almacenarlos en bloques secuenciados o animados. Normalmente estos datos de imagen se almacenan sin compresión, pero en ciertos casos los datos pueden comprimirse mediante estándares como JPEG.

DICOM permite la integración de escáneres y aparatos de medicina, servidores, estaciones de trabajo, impresoras y hardware de red de múltiples proveedores dentro de un sistema de almacenamiento y comunicación de imágenes coherente.

En muchas ocasiones podríamos querer poder observar las imágenes registradas por equipamiento DICOM.

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

sudo apt install aeskulap

Tras instalar el visualizador Aeskulap podremos abrir los ficheros de datos médicos codificadas en el formato Dibcom, lo que nos presentará en pantalla y permitirá un manejo simplón, de palo y a la bolsa.


Presionando el botón derecho del ratón y arrastrándolo podremos desplazarnos en la imagen. Asimismo podremos regular el zoom reglado de la imagen presionando la rueda de scroll del ratón y moviéndola hacia adelante o atrás.

Por otro lado, podríamos regular la respues contraste ("C") de la imagen con posterioridad a su registro, presionando el botón derecho del ratón y arrastrando verticalmente, con lo que iremos aumentando o disminuyendo la intensidad del mismo en tiempo real. En el caso de cierto tipo de registro médico por imágenes - tal es el caso de las radiografías, ciertas tomografías axiales computadas o ecodopplers - podríamos incluso regular el canal que ilustra la respuesta densitométrica ("W") presionando el botón derecho del ratón y arrastrando horizontalmente. En estos casos, podríamos ajustar la respuesta del visualizador para dar mejor respuesta a materiales duros, tejidos óseos, semiblandos, o líquidos. Naturalmente esto dependiendo del aparato con que se haya producido el registro. Ambos ejes se indican numéricamente en la esquina inferior derecha de la pantalla.

Naturalmente, una técnica en imágenes habilidosa puede permitirnos ajustar ambos ejes al unísono moviendo el ratón en diagonales de distinto peraltado y dar con la exposición correcta en un santiamén.

Aeskulap normalmente presenta una imagen en positivo, pero podremos acomodar una presentación múltiple en forma de grilla para una secuencia de estudio por imágenes, disponiendo distintas imágenes de secuencia del estudio, o bien comparando izquierda/derecha, o arriba/abajo. Con F11 en tanto activaremos el modo de pantalla completa. También podremos positivarla con el botón correspondiente.


El programa permite contar también con un servidor de imágenes sencillo, lo que permite integrarlo en una red de área local y programas como GNU Health.

Otro visualizador sencillo de estudios médicos por imágenes de tipo DICOM es DICOMscope. Consiste en un visualizador sencillo y libre, escrito en Java. Para instalarlo en Ubuntu desde la terminal ingresamos el siguiente comando de organización:

sudo apt install dicomscope

DICOMscope consiste en un visualizador libre de DICOM que puede mostrar imaginería monocromática y sin compresión DICOM, y soporta calibración de monitores así como un cliente de impresión en escala de grises. Si bien es un programa algo antiguo, cumple con una función, y sus controles son prácticamente similares a los de Aeskulap.

En particular, DICOMscope presenta una funcionalidad de anotación con capas, lo que permite hacer indicaciones o llamadas. También permite hacer un zoom de alta resolución, lo que lo presenta de especial interés para el análisis óseo tumoral, fracturas y torsiones. Permite establecer regiones poligonales y consta de funciones de composición limitadas pero que pueden ser útiles, como armar fotogramas compuestos y exportar el resultado en formatos de imágenes estándares tales como JPG o PNG, a la vez que permite imprimirlo llegada la necesidad.

Naturalmente podremos contar lo bibliotecas de ficheros DICOM que fundamente el estudio, una de ellas podremos lograrla aquí.

Como ven, señores, nosotros lo hicimos en el pasado, y podremos volver a hacerlo en el futuro, ya que la fórmula la tenemos en la biblioteca. Podemos adaptarla a los tiempos que corren. Todo podrá hacerse si volvemos al libro que funciona: el Justicialismo.

sábado, 29 de julio de 2023

¿Cómo instalo los editores Ecce y EdLin en Ubuntu?

Su Quinta 17 de Octubre de Puerta de Hierro fue testigo de numerosos encuentros del Conductor del Justicialismo con delegaciones del quehacer político argentino. En una de las reuniones celebrada en 1969, Juan Perón expone ante frondosa concurrencia acerca de compilar e instalar los editores de texto modales  Ecce y EdLin en Ubuntu.

¡Compañeros!

El nuestro es un Movimiento que está para darle a todos lo que merecen por Justo derecho.

Todos sabemos que antes de organizarse en pos del Justicialismo, los trabajadores argentinos daban comienzo a su mañana con mendrugos duros, un mate cocido y grandes anhelos para acompañar. Esta fue la base previa a la organización, que como consecuencia del obrar, elevaría esta humilde dieta a la del chori al parquet de roble eslavonia.


Observarán que en el mundo del software sucede mas o menos el mismo temperamento. No podemos crear de la nada absoluta, sino que debemos edificar en base a ladrillos lógicamente concebidos y planificados en una estructuración que va se impone de menor a mayor. Es así como yo creo para crecer, y esta es la fomra como se ingenia en la vida.

Este norte cardinal acompaña también la noción creativa que nos requiere la elaboración de un sistema operativo de potencia. Necesariamente habremos de conjugar en código máquina tres herramientas de difícil soslaye: un ensamblador que para generar código objeto, un intérprete de comandos, y un editor que nos permita crear texto y corregir lo hecho.

Esto nos revela que la creación de texto pudo y debió hacerse con las herramientas más básicas. En particular, los editores de texto primordiales se iniciaron con una modalidad operativa que podríamos describir como modal. Estos permitían introducir cadenas de caracteres en un almacén de memoria, destinados a formar líneas de código, y más adelante por conveniencia, cada línea definida así podría conformar también un párrafo de texto.

Y si bien a partir de esto pueden hacerse mejores cosas, siempre es bueno conocer lo pasado, para afirmarse en el presente y proyectarse para el futuro.

Ecce

Naturalmente yo inicié mis tareas con el Ecce, el Editor de Texto Contextual de Edimburgo. Se trataba de un editor basado en líneas escrito por Hamish Dewar, y portado al lenguaje BCPL del sistema TOPS-10 de la minicomputadora DEC PDP-10 de finales de la década de 1960 - implementación que lo haría famoso entre varias mas.

Hoy podremos instalarlo en nuestro sistema GNU con Linux merced de una versión instrumentada para Unix en el lenguaje C. Podremos compilarlo fácilmente si abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente bloque de Comandos de Organización:

cd /tmp ;
wget https://ecce.sourceforge.net/ecce.c ;
gcc -o ecce -DWANT_UTF8 ecce.c ;
sudo mv /tmp/ecce /usr/local/bin/

Una vez instalado, podremos correr Ecce dando rienda a la siguiente sintaxis: 

ecce fichero_origen fichero_destino



Como vemos, este dinosaurio salió de un huevo para rugir en sistemas monousuario a través de terminales teletipo. Es ciertamente capaz de operar en sistemas multiusuario, pero si lo hacemos "así nomás" se produciría un efecto ostensiblemente destructivo, ya que uno de los usuarios podría alterar irremediablemente el documento que otro se encuentra operando en el mismo sistema. Es por este motivo por el cual para usar Ecce en GNU nos vemos obligados a instrumentar de forma adhoc un fichero de origen local (autónomo) que nos reparta los buñuelos. En efecto, lo más sencillo es utilizar el touch para crear un fichero origen.txt (si este no existiera ya). Por ejemplo:

touch origen.txt ;
ecce origen.txt destino.txt

Una vez inicializado un fichero propio, Ecce podrá arrancar presentandonos la memoria disponible en su almacén (“búfer”), y aguardando órdenes: 

Espacio de almacén = 768 KBytes
Ecce
>

Como todo editor de los llamados modales, durante su operación Ecce nos presentará alguno de sus prompts indicativos del modo de operación en que se encuentra de momento. Estos son:

  • Prompt del Modo de Comando: >
  • Prompt del Modo de Inserción de texto: :

Para su empleo más sencillo y básico de entre sus numerosos comandos es suficiente dominar sólo tres:

Comando Acción
g Almacenar una sola línea nueva
m Avanza el puntero una sola línea
p Imprime la línea donde se encuentra el puntero

De esta manera, sesión típica implica recibir el prompt de comandos > donde introducimos la orden g* (“almacenar líneas indefinidiamente”), y presionar la tecla Intro para empezar a escribir. Su prompt cambiará al de inserción texto en forma de :. y podremos mecanografiar el párrafo deseado. Al concluirlo debemos presiona la tecla Intro para almacenar dicha línea en memoria. 

Conforme hayamos finalizado la inserción de la(s) línea(s) de texto deseadas podremos detener el modo de inserción ingresando el comando : que nos devolverá al prompt de comandos >

Estos cambios realizados al fichero de origen podremos guardarlos en el fichero destino desde el prompt de comandos > (y cerrar el editor), si introducimos el comando %c.

Naturalmente, podremos continuar agregando líneas indefinidamente hasta agotar el almacén, o introducir alguno de estos comandos especiales de Ecce:

%a Descarta la edición realizada.
%c Guarda los cambios y cierra.
%v Imprime la versión de Ecce.

Pues bien señores, si bien este funcionamiento parecería similar al de una antigua máquina de escribir, contaremos con grandes ventajas con respecto a estas. Para movernos en el texto, podremos desplazar la posición actual de edición en el documento (llamada “puntero”). Al llegar al fin del documento recibiremos como indicación el mensaje *** FIN ***.Los comandos de desplazamiento son sencillos:

m Baja el puntero una línea
m- Sube el puntero una línea
k Borra la línea actual del puntero
k- Borra la línea anterior del puntero
r Se mueve a la derecha un carácter en la línea actual
l Se mueve a la izquierda un carácter en la línea actual
e Borra un carácter en la línea actual

Junto a estos comandos básicos de una sola letra, Ecce dispone ciertamente de la posibilidad de realizar tareas más complejas y avanzadas que permiten un mayor control. Estas funciones avanzadas inspirarían luego al editor de cadenas sed.

En primer lugar y como regla general, si introducimos un número n junto a nuestro comando, se lo ejecutará en bucle una n cantidad de veces. Por ejemplo:

p23 Imprime las 23 líneas siguientes al puntero
m10 Sube el puntero diez líneas
g5 Deja 5 líneas de texto en blanco debajo del puntero

De esta manera es posible extender o bien invertir el orden del comando antecediendo al número n con un signo -. Por ejemplo:

p* Imprime todo hasta el final del texto
p-23 Imprime las 23 líneas anteriores al puntero
p-* Imprime todo hasta el inicio del texto
m-10 Retrocede el puntero diez líneas
m-* Retrocede el puntero todas las líneas (vuelve al inicio del texto)

Una de las funcionalidades más utilizadas es la de buscar y reemplazar.

i/texto/ Inserta una cadena “texto” aquí en la línea.
f/texto/ Busca “texto” indicado.

Como en el caso anterior, estos pueden repetirse indicándole números apropiados:

f/texto/4 Busca la 4ta. iteración de “texto
r40 Mueve a la derecha 40 caracteres

Además, las órdenes pueden encadenarse. Por ejemplo:

m23 f/texto/ p3

Los comandos avanzados de Ecce permiten incluso mayor potencia de trabajo:

A Ajusta el largo
B Divide la línea en dos en el puntero
C Cambia mayúsculas con Mayúsculas derecha
C- Cambia a minúsculas con Mayúsculas izquierda
D/texto Borra primer ocasión de texto
D-/texto Borra iteración previa de texto
E Borra carácter a la derecha del puntero
E- Borra carácter a la izquierda del puntero
G/texto Inserta línea de texto luego del puntero
G- Sube una línea
I/texto Inserta texto a la derecha del puntero
I- Inserta texto a la izquierda del puntero
J Une la siguiente línea
O/texto Sobreescribe la línea con la cadena texto

Los comandos compuestos de Ecce son secuencias de comandos cerrados entre paréntesis. Pueden repetirse en bucle, tanto condicional como incondicional. Los ejemplos suelen aclararlo todo, como decía Napoleón:

Operación Ejemplo Significado/efecto
0 o *
Repetición indefinida (“repite hasta no poder cumplir mas”)

r0 Mueve el puntero al final de la línea

(mr)0 Busca la primer línea en blanco

e-0 Borra hacia atrás hasta el comienzo de la línea
?
Ejecución opcional (se ignora la condición de falla)

((r61p)?m)0 Imprime las líneas con no más de 60 caracteres
,
Ejecución alterna (“si el primer intento falla, ejecuta el siguiente, etc”)

(r81lb,m)0 Divide las líneas que tienen más de 80 caracteres

(f/River/(v/Bocado/,e5i/Boca/))* “Reemplaza River con Boca excepto para Bocado
\
Falla invertida

(mv'+'\)0 Busca la siguiente línea que comienza con `+

Si sólo introducimos un número en la línea de comandos, Ecce repetirá el comando indicado anteriormente una n cantidad de veces.

Podremos delimitar patrones por cualquier carácter excepto letras, dígitos, y aquellos que tienen significación definida. Podremos usar: , /, $, >, +, ., :, = y _

Asimismo, podremos ver el antiguo manual de Ecce.

EdLin

A la vez que Ecce contaba con plétora de adeptos universitarios, su decante a las terminales teletipo en boga durante su desarrollo lo hizo verse progresivamente superado con la aparición de las la edición visual de textos en pantalla. Sin embargo los editores modales aún contaban con cierta valía si se hablaba de equipamiento de escasa potencia, y esto era válido con la IBM PC de primera factura y su sistema operativo, el DOS. En sus inicios se decidió adornarlo con un editor orientado a líneas descaradamente influido por el editor Ed del Unix: EdLin

A pesar de que podría parecer de escasa valía, este ha sido implementado de manera libre por el Proyecto FreeDOS, y a caballo regalado no se le mira el diente. Por tanto podremos instalarnos una copia para nuestro sistema GNU, acudiendo a la terminal:

cd /tmp/
wget https://sourceforge.net/projects/freedos-edlin/files/freedos-edlin/2.24/edlin-2.24.tar.gz ;
tar xvzf edlin-2.24.tar.gz ;
cd /tmp/edlin-2.24/ ;
./configure;
make;
sudo make install

Una vez instalado en nuestro GNU, la ejecución del programa es sumamente sencilla:

edlin

Edlin nos presentará su pantalla inicial y nos hará la veña aguardando órdenes. Como tal sigue premisas algo similares a otros editores nodales:

  • Prompt de su Modo de Comandos: *
  • Prompt de su Modo de Inserción: :

Por convención EdLin opera con bloques de sólo 11 líneas. Para facilitar la explicación, usaremos entre nosotros las siguientes convenciones para operar en su modo de comandos:

  • Los corchetes [] denotarán parámetros opcionales.
  •  La n nos representará un número de línea, que puede ser uno de varios valores posibles:
Una cadena de dígitos, o sea un número de línea literal Por ejemplo, 12 es la decimosegunda línea.
n Representa al número de línea justo antes de la última línea del fichero.
. (“punto”) Representa la línea actual en el fichero.
$ (“peso”) Representa la línea final del fichero.
+n o -n Es un diferencial de suma o resta del número de línea actual. Es útil para dar posiciones relativas a una línea, tal como .+1 para significar “la línea posterior a la actual”.
  • El símbolo $ representa una cadena de caracteres. Podrás encerrar la cadena tanto en apóstrofes 'texto' o bien en comillas "texto", o podrán contener las siguientes secuencias de escape:
\a Carácter de campana
\b Carácter de Retroceder (borrado)
\e Escape
\f Alimenta papel
\t Tabulador horizontal
\v Tabulador vertical
\" Comillas
\' Apóstrofe
\. Punto
\\ Barra invertida
\xXX Valor Hexadecimal, donde cada X es un dígito hexadecimal (de 0 a F, tanto en mayúsculas como minúsculas)
\dNNN Valor decimal, donde cada N es un dígito decimal (de 0 a 9)
\OOO Valor octal, donde cada O es un dígito cotal (de 0 a 7)
\^C Caracter de Control, tal como \^J para un caracter “Control+J” literal (linefeed).

Pues bien señores, al igual que Ecce, el funcionamiento básico de EdLin consiste en activar el comando de agregado al almacén, e insertar contenido en el mismo. Para ello, en el prompt * ingresamos el comando a y mecanografiamos las líneas. Para almacenarlas, presionamos la tecla Intro. Para cesar el modo del inserción, en este caso debemos ingresar un . aislado.

Para guardar usaríamos w fichero seguido del comando salir, que es q. (O bien podremos usar e fichero, que equivale a "guardar y salir"). Para salir de EdLin sin guardar se usa q, ante lo cual se nos interrogará “Abort edit (Y/N)?”. Deberíamos responder yes.

Las funciones de edición de EdLin implican generalmente pocas variantes. La primera es indicar un número de línea para establecer el puntero, y escribirla de nuevo para reemplazar la línea.

Si en cambio quisiéramos insertar una línea previamente a otra, usaríamos [n]i para ingresar al en el modo inserción, la cual también acepta las secuencias de escape indicadas. Para abandonar el modo de inserción, ingresamos . en una línea aislada (si necesitáramos escribir una línea que sólo contenga un punto literalemnte, deberías indicarlo escapándolo como \.). Tras de abandonar el modo de inserción, la línea posterior al texto insertado se convertirá en la línea actual (a no ser que la inserción se hubiese suspendido al final del almacén, en cuyo caso la última línea del almacén se convertirá en la posición del puntero).

Para borrar una línea debemos utilizar el comando d, el cual también acepta rangos en la forma  de [n][,n]d que borrarían un bloque de líneas consecutivas del almacén. Los parámetros responden a la primer línea y la última línea del bloque a borrar.

Si tuviésemos la necesidad de copiar un rango de líneas, utilizaremos el comando [n],[n],n,[n]c para copiar un rango de líneas consecutivo a otra localización del búfer. En este orden, los parámetros son los siguientes:

  1. La primer línea que quiere copiar (si se omite se usará el puntero) 
  2. La última línea que quiere copiar (si se omite se usará el puntero) 
  3. La línea anterior en la cual desea insertar el bloque de líneas 
  4. La cantidad de veces que copiará el bloque demarcado (si se omite es 1)

(Luego de copiar las líneas, es conveniente usar el comando l (“listar”) para tener una idea de cómo quedaron los números de línea tras la operación).

Para mover un bloque de texto (más conocido como "copiar y pegar"), debemos usar el comando m, y procedemos igual que con el comando copiar anteriormente descripto. En este caso funcionará igual que copiar, sólo que borrará el bloque de su posición original

Si deseamos presentar todas las líneas usamos p, y para presentar un rango de líneas en pantalla, utilizamos [n][,n]p. Es similar al comando l (list) con la excepción que los parámetros por defecto comienzan en el puntero en lugar de hacerlo 11 líneas  posteriores.

Para buscar una cadena texto usamos [n][,n][?]s$ lo que realizará esta operación. Si omite el primer parámetro, comenzará a buscar desde la línea actual. Si omite el segundo parámetro, dejará de buscar al llegar al final del búfer. Si incluye el ?, edlin solicitará confirmación ante cada encuentro. Si respondemos “no”, continuará la búsqueda y si respondemos “yes” la dará por concluida.

Si la búsqueda localiza la subcadena, desplazará el puntero.

En caso de operar con búsqueda y reemplazo debemos utilizar [n][,n][?]r$,$ para reemplazar todas las iteraciones de la primer cadena con la segunda cadena entre las dos líneas especificadas. Si omitimos el primer parámetro, EdLin comenzará reemplazando a partir del puntero. Si en cambio omitimos el segundo parámetro, dejará de reemplazar texto en la última línea del búfer.

Si incluye un ?, edlin mostrará un mensaje de confirmación antes de reemplazar las iteraciones de texto.

Para insertar un fichero usamos[n]t fichero. Esto Insertará el contenido del fichero antes del puntero. Si omitimos el primer número de línea, se insertará antes de la línea actual del puntero.

Como vemos, los editores modales son simplones, pero permiten ciertas posibilidades efectivas de edición, y constituyen un herramental válido para comprender cómo se realizaba cómputo antes de que el Justicialismo garantizara los derechos de un editor de texto como la gente hasta al más humilde de mis grasitas.