Uso de Paquetes en NeoVim

¿Qué es lo que hace grande a Neovim? Que posee pequeños, pero múy convenientes mejoras acorde a los nuevos tiempos, pero sin reinventar toda la rueda. A veces es buena tener que tirar todo abajo, crear algo completamente nuevo, y empezar todo desde cero. Sí, a veces, pero no siempre, Neovim mantiene todo lo bueno de Vim. Como lo dicen sus desarrolladores:

In matters of taste, prefer Vim/Unix tradition. If there is no relevant Vim/Unix tradition, consider the "common case".

Ya hemos hablado sobre Neovim alguna vez en Lo viejo, lo bueno y lo nuevo en Neovim . Se pueden extender las funcionalidades de neovim, de manera similar a las de su predecesor, el editor Vim. Estas extensiones están escritas en un lenguaje de scripting conocido también VimL. Las extensiones se conocen como plugins y es así como las llamaremos de aquí en más. También tengamos en cuenta que muchas de las cosas que discutiremos aquí aplican para Vim también.

Hay dos tipos de plugins:

  • Globales: Funcionan para todo tipo de archivos.
  • Filetype: Sirven para un tipo particular de archivos.

Veamos un listado de estos archivos:

ls -l /usr/share/nvim/runtime/plugin
total 72
-rw-r--r-- 1 root root  2499 ago  4 21:07 gzip.vim
-rw-r--r-- 1 root root    45 ago  4 21:07 health.vim
-rw-r--r-- 1 root root   429 ago  4 21:07 man.vim
-rw-r--r-- 1 root root   107 ago  4 21:07 matchit.vim
-rw-r--r-- 1 root root  7085 ago  4 21:07 matchparen.vim
-rw-r--r-- 1 root root  9872 ago  4 21:07 netrwPlugin.vim
-rw-r--r-- 1 root root  1929 ago  4 21:07 rplugin.vim
-rw-r--r-- 1 root root  1778 ago  4 21:07 shada.vim
-rw-r--r-- 1 root root   236 ago  4 21:07 spellfile.vim
-rw-r--r-- 1 root root  2271 ago  4 21:07 tarPlugin.vim
-rw-r--r-- 1 root root 10466 ago  4 21:07 tohtml.vim
-rw-r--r-- 1 root root   202 ago  4 21:07 tutor.vim
-rw-r--r-- 1 root root  2510 ago  4 21:07 zipPlugin.vim
Plugin Funcionalidad
gzip Editar archivos comprimidos con gzip
health Framework para solucionar problemas de configuración
man Abrir páginas del manual en el editor
matchit Extiende la funcionalidad del comando %
matchparen Resalta paréntesis coincidentes
netrwPlugin Handles file transfer and remote directory listing across a network
rplugin Manejo de plugins remotos
shada Datos Compartidos entre las sesiones de neovim
spellfile Descarga de archicos de ortografía
tarPlugin Exploración de tarballs
tohtml Conversor a html
tutor Tutorial
zipPlugin Exploración de archivos zip

Si consideramos el archivo del plugin man contiene lo siguiente:

" Maintainer: Anmol Sethi <anmol@aubble.com>

if exists('g:loaded_man')
  finish
endif
let g:loaded_man = 1

command! -bang -bar -range=0 -complete=customlist,man#complete -nargs=* Man
      \ if <bang>0 | set ft=man |
      \ else | call man#open_page(v:count, v:count1, <q-mods>, <f-args>) | endif

augroup man
  autocmd!
  autocmd BufReadCmd man://* call man#read_page(matchstr(expand('<amatch>'), 'man://\zs.*'))
augroup END

Estos scripts pueden contener comandos de modo normal y modo ex, estructuras de control, funciones, listas, diccionarios e incluso objetos.

Además, neovim posee una API con la cual se pueden hacer desarrollos en otros lenguajes de programación, es así como existe neovim-java - Java Client for Neovim API | neovim-java, neovimi (node.js), nvim-client - LuaRocks, equalsraf/neovim-qt: Neovim client library and GUI, in Qt5., etc.

neovim-qt

Se pueden escribir plugins en lenguajes distintos a VimL, por ejemplo far.vim está desarrollado en python:

Se debe ejecutar :UpdateRemotePlugins cada vez que un plugin remoto se instale, se actualice, o se borre. Esto generará o actualizará un archivo manifest, por ejemplo:

cat ~/.local/share/nvim/rplugin.vim 
" node plugins


" python3 plugins
call remote#host#RegisterPlugin('python3', '/root/.local/share/nvim/plugged/far.vim/rplugin/python3/far', [
      \ {'sync': v:false, 'name': '_far_nvim_rpc_async_invoke', 'type': 'function', 'opts': {}},
     \ ])


" ruby plugins


" python plugins

Paquetes de plugins

Paquetes

Photo by Handy Wicaksono on Unsplash

A partir de la versión 8.0 de Vim, el editor tiene la capacidad de instalar paquetes. Podríamos trazar una analogía con los paquetes RPM ( o deb), por ejemplo, el paquete rpm coreutils viene con más de una herramienta: tr, sort, tail; etc. Un paquete en vim de manera análoga puede contener más de un plugin.

Es decir, considerando el siguiente escenario:

Paquetes en Vim/Neovim .

El paquete nuake se va a cargar automáticamente al abrir el editor, mientras que el otro plugin vim-eunuch podrá activarse con el comando :packadd eunuch

Algo interesante en neovim es que podemos ver los plugins que ya vienen con el editor con el comando :help standard-plugin-list y con :help local-additions los paquetes que vamos agregando:

Gestores de plugins

Ahora bien, la manera nativa de manejar paquetes de Vim (que Neovim toma) es un tanto manual. Es muy ventajoso usar un gestor de plugins, el cual siguiendo la analogía con paquetes rpm (o deb) sería algo parecido a lo que representa yum/dnf/zypper respectivamente).

Existen varios gestores de plugins:

Yo uso vim-plug porque:

  • Requiere muy poca configuración: una lista con los paquetes de plugins deseados.
  • Instala y actualiza todos los paquetes de nuestra lista o los que seleccionemos.
  • Detecta y elimina plugins que borramos de nuestra lista.
  • Muestra el estado de los plugins.
  • Genera instantáneas de nuestros paquetes con su configuración, con la posibilidad de restaurarlas.
  • Posee atajos de teclado.

Para deshabilitar todos los plugins se pueden desabilitar con nvim --noplugin.

Algo que puede ser muy útil: poner el listado de plugins en un archivo separado. Esto es: creando un archivo ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/plugins.vim y en el archivo ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/init.vim teniendo una simple línea:

runtime plugins.vim

Entonces, comentando esa línea es una manera alternativa para deshabilitarlos.

Pero hay más: supongamos que tenemos esta configuración en el archivo ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/plugins.vim:

"nuake plugin
Plug 'Lenovsky/nuake' , { 'on': 'Nuake' }  

nnoremap <F4> :Nuake<CR>

El paquete nuake no se cargará automáticamente en el inicio, pero lo hará cuando usemos el atajo de teclado F4. ¿No es genial?

En tiempos en los que tanto se declama la agilidad, como contrasentido se ofrecen editores que consumen muchos recursos, con desarrollos no exentos de torpezas y caprichos impuestos de antemano. El minimalismo de Vim como de Neovim nos permite adaptarlo de acuerdo a lo que necesitemos la posiblidad de agregar distintas funcionalidades, sea para desarrollo, mejor usabilidad y experiencia del usuario (sí: el desarrollador o sysadmin también es un usuario). Finalmente, si bien tanto Vim como Neovim poseen el soporte nativo para manejar paquetes de plugins, encuentro en vim-plugin una manera mucho más conveniente de hacerlo.

Más Recursos

Plan Táctico y Estratégico de la Memoria en Linux

La mitología en torno a la memoria en Linux ha producido una serie de relatos:

  • Linux puede funcionar con muy poca memoria RAM.
  • Linux consume mucha memoria.
  • Una partición SWAP debe tener entre 1 a 2 veces la memoria RAM.

Como vemos algunas historias son más recientes, otros más antiguas, pueden ser parcialmente ciertas y hasta contradictorias entre sí.

Este artículo tiene como propósitos:

  • Explicar de manera sencilla el funcionamiento de la memoria en Linux, desmitificando también algunos conceptos.
  • Enumerar y describir tácticas para que el uso de la memoria proporcione la mejor usabilidad y experiencia del usuario.
  • Ofrecer alternativas para que cada uno elija la mejor opción de acuerdo a sus necesidades.



Definiciones

Vamos a repasar algunos conceptos básicos que de manera más o menos frecuente usamos, usaremos metáforas en el camino. Ninguna metáfora es perfecta, pero nos ayudan a entender la realidad.

Memoria Virtual

Generalmente el adjetivo virtual en informática significa algo que provoca la ilusión de ser otra cosa. Por ejemplo, un archivo regular puede hacerse pasar por un disco físico. En el caso de la memoria virtual, el sistema operativo nos ofrece una cantidad de memoria mucho mayor a la que existe físicamente.

Si queremos comprar algo que sale $100000 pero solamente podemos pagar la décima parte, tal vez podamos pedir un crédito para que se financie la compra y pagar $10000 por mes. El sistema operativo hace algo parecido con la memoria.

De parte del hardware en particular la CPU necesita poder traducir las direcciones de memoria virtual a la memoria física.

Algo muy importante: Linux trata de usar la mayor cantidad de memoria posible, para poder ejecutar las aplicaciones y acceder a los archivos de la manera más rápida posible. De manera que si la memoria libre es baja no es necesariamente un indicativo de un problema.

Swap

Los usuarios ocasionales de Linux y aun muchos sysadmins tienen una idea negativa sobre "la swap". Simplificaciones extremas y conceptos anticuados la han convertido en le gran villana de la historia del sistema operativo.

Si comparamos a la memoria con un escritorio, sin swap podría lucir así:


Prescindir de swap no es una opción sana.

Photo by Ashim D’Silva on Unsplash



Así que primero vamos a decir lo que no es:

  • No es la memoria virtual sino que forma parte de la técnica que realiza el sistema operativo para administrar la memoria.
  • No es un espacio de reserva ni un último recurso.
  • No es algo que el sistema operativo pueda alegremente prescindir aun cuando la cantidad de memoria RAM física sea grande.

Nuestro escritorio con swap:

Analogía de Swap

Photo by Alexandru Acea (edited by me) on Unsplash



¿Los cajones de un escritorio los usamos cuando lo tenemos abarrotado de cosas? No, los usamos para guardar cosas que no son de alta prioridad. Aunque es cierto, si luego queremos usar esa tijera o aquel destornillador en algún momento requerirá un poco más de trabajo, tendremos que abrir el cajón, buscarlo, extraerlo, etc.

Ah, y la swap también sirve para hibernar, aunque honestamente no se cuanta gente mantiene esa práctica.

Page

Es un bloque de memoria virtual.

Page table

Podemos pensarlo como un índice usado por el hardware que refiere cada dirección de memoria virtual a una dirección de memoria física.

Page Fault

Una page fault ocurre cuando un programa intenta acceder a un bloque que está mapeado en el espacio de direcciones pero no está cargado en la RAM. Si bien no es un problema grave pero implica que el programa tendrá que recuperar la información desde el disco, que es un proceso más lento.

Page cache

Es el espacio en que los archivos y metadatos utilizados suelen guardarse para poder acceder a ellos de manera más rápida.

Page cache


Tipos de memoria

File Memory

Es la memoria relacionada con el Page Cache.

Anonymous Memory

El adagio unixista (en su versión simplificada) que dice que todo es archivo parece tener influencia aquí. Tal vez es por eso que la memoria que no está asociada a un archivo o al sistema de archivos se la reduce con el adjetivo de anónima.

Thrashing

Es cuando el sistema agresivamente traduce direcciones físicas a direcciones virtuales y libera bloques de memoria que no se han usado de manera reciente. La ejecución normal de las tareas puede resentirse. En entornos de escritorio la usabilidad y la experiencia del usuario se ven fuertemente afectadas. La swap puede colaborar evitando al menos un poco el thrashing.

A veces puede suceder cuando la memoria física (RAM) es insuficiente.

Memory Pressure

Memory pressure** es el trabajo que tiene que hacer Linux cuando hay déficit de memoria. En ciertas situaciones puede haber demora en la ejecución de tareas, y que el rendimiento se vea seriamente afectado y llevado al extremo puede causar OOM (Out-of-Memory): el agotamiento total de la memoria para que el sistema operativo pueda continuar funcionando correctamente.

OOMKiller

El OOM killer es un proceso del kernel que se dispara solamente si la memoria disponible bajó a niveles críticos, en este escenario selecciona una o más tareas para finalizarla con la intención de que el sistema pueda seguir funcionando.

oom_score

A cada proceso se le asigna un puntaje, cuanto más alto es, más susceptible es a ser terminado por OOMKiller. El comando choom permite ver y/o ajustar dicho valor.

choom

Tuning

Ahora veremos diferentes tácticas que podemos usar para optimizar el uso de la memoria.

cgroupv2

cgroup es un mecanismo para organizar los procesos de manera jerárquica y distribuir los recursos del sistema a lo largo de la jerarquía en una manera controlada y configurada.

Un cgroup se compone de un núcleo que es responsable primariamente en organizar de manera jerárquica los procesos y controladores que comúnmente distribuyen un tipo específico de recurso del sistema a lo largo de la jerarquía.

En la versión 2 de cgroup un proceso no puede pertenecer a diferentes grupos para diferentes controladores. Si el proceso se uno al grupo alfa, todos los controladores para alfa tomarán control de ese proceso.

ps mostrando cgroup

Supongamos que los procesos de un cgroup (y todos los grupos hijos) usan poca memoria, podríamos decirle al kernel que reclame memoria de otros cgroups. Esto es precisamente lo que hace el parámetro memory.low.

el parámetro memory.low

Otro parámetro interesante para monitorear es memory.pressure, la primera línea que tiene el tiempo físico de una o más tareas demoradas debido a la falta de memoria. La segunda sería lo mismo pero para todas las tareas del grupo, por ejemplo: full es lo mismo pero para todas las tareas del grupo, por ejemplo: Por ejemplo:

cat /sys/fs/cgroup/user.slice/memory.pressure
some avg10=0.00 avg60=0.13 avg300=0.12 total=1690238
full avg10=0.00 avg60=0.10 avg300=0.09 total=1394199

Significa que algunas tareas del grupo de control user.slice en los últimos 10 segundos no tuvo demoras, pero si tuvo un 0,13% de retraso en el último minuto y 0,12% en los últimos 5 minutos. En total estas tareas llevan acumulados casi 1,7 segundos. La segunda línea representa lo mismo pero para todas las tareas del grupo.

zram

zram es por así decirlo, una manera cool de usar swap gracias a un módulo del kernel.

zram, swap pero cool

Photo by chuttersnap on Unsplash

En lugar de gastar espacio en un disco (sea rígido o sólido) usamos dispositivos de bloque en la propia RAM. Los bloques swapeados se guardan comprimidos. Esto discos virtuales son rápidos y ahorran memoria.

Una de las pocas desventajas que tiene esta metodología es la incapacidad para poder hibernar el sistema operativo, al no estar presente la partición en un almacenamiento de tipo persistente.

zram

Sistemas de archivos

El journal de ext4 puede ser lento, xfs puede ser una mejor alternativa o mejor aun btrfs.

EarlyOOM

El oom-killer del kernel solamente se dispara en situaciones extremas y le puede llevar mucho tiempo hasta que puede enviar SIGKILL a los procesos que sean necesarios para poder liberar memoria. Durante ese tiempo probablemente el usuario no pueda interactuar con el sistema operativo.

EarlyOOM trabaja en espacio de usuario y por lo tanto se puede anticipar y ser mucho más rápido.

El comportamiento predeterminado en Fedora es que si hay menos del 10% de RAM y/o SWAP libre, earlyoom envía una señal de terminación a todos los procesos con oom_score más alto. Si la RAM como SWAP libre bajan por debajo del 5%, earlyroom enviará una señal para matar todos los procesos con oom_score más elevado.

La idea es recuperar la usabilidad (especialmente en un entorno de escritorio) lo antes posible.

El problema es que EarlyOOM no soporta al momento la medición de la memory pressure como indicativo para tomar decisiones.

nohang

Este servicio es mucho más configurable y aporta una mejor solución que EarlyOOM.

Algunas funcionalidad son:

  • Se puede elegir la acción que realizará en una situación OOM.
  • Ofrece varios criterios para elegir los procesos a finalizar.
  • Soporta zram
  • Puede usar memory pressure para tomar una acción.
  • El archivo de configuración es medianamente sencillo



zswap

Con zswap no reemplazamos el espacio swap en el disco sino que usamos un caché comprimido en la RAM. Este método ahorra I/O, obteniendo entonces mejor rendimiento y alargando la vida útil de discos flash o sólidos. La única desventaja es usar algo de tiempo del procesador para realizar la compresión.



zswap

Photo by Pineapple Supply Co. on Unsplash



Mediante el caché se logra una diferenciación entre páginas más usadas (zswap) y menos usadas (swap).

oomd

El servicio oomd es un proyecto en el que están trabajando en Facebook para integrarlo con systemd. Por ahora es un proyecto para manejo de memoria a gran escala, y bastante más complejo de configurar.

Resumen

  • Swap no es la villana de la película
  • Si existe la opción de migrar a otros sistema de archivos aunque con características un tanto experimental, elegir btrfs. Una opción más moderada es xfs.
  • El tuning de cgroupv2 puede traer grandes beneficios, no obstante existen proyectos y distribuciones que no lo usan.
  • EarlyOOM es una solución rápida y aplicable a una amplia gama de sistemas Linux, aunque no siempre es la más exacta ni más elegante.
  • El servicio nohang (o no hang-desktop) es una opción más madura aunque algo más compleja que EarlyOOM.
  • El servicio oomd desarrollado por Facebook es seguramente la opción más adecuada para escenarios más complejos y de manejo de memoria a gran escala.
  • Si se desea ahorrar espacio en disco se puede reemplazar la swap por zram, sacrificando la opción de hibernar el sistema.
  • La opción zswap es más sofisticada, aunque dependemos del uso de swap en disco.



Photo by sk on Unsplash

Fuentes consultadas

Tutorial de LXC

Containers

Photo by frank mckenna on Unsplash

LXC es una herramienta extraordinaria, algo intermedio entre un chroot y una máquina virtualizada completamente. Usando el mismo kernel que el sistema anfitrión podemos tener sistemas operativos invitados en el propio filesystem. Es decir, cada SO invitado en un directorio. Pero la documentación y la interacción de los distintos componentes puede tornar algo tricky el proceso. Cansado de lidiar con documentación desperdigada por aquí y por allá decidí crear mi propio tutorial. Intentando en lo posible ser distro-agnóstico.

Aquí está:

¡Espero que lo disfruten!

Un abrazo peligroso

¿Cuán genuino es la movida de Microsoft hacia el Software Libre?

dangerous

Photo by Samuel Scrimshaw on Unsplash

Recientemente Dona Sarkar dijo:

Windows no puede ser de código abierto por cuestiones como pueden ser nuestras políticas de privaciad y protección de datos. Un proyecto que empieza siendo de código abierto puede mantenerse así, pero uno que ha nacido dentro de un entorno cerrado, es más difícil de abrir.

Aquí nos presentamos con una falacia. Primero: ¿qué tiene que ver las políticas de privacidad y protección de datos con la apertura del código fuente?

Cualquiera con un mínimo de conocimiento profesional en informática encontrará esa explicación problemática.

¿Qué impedimentos tiene que tener el código fuente de un programa para contravenir las políticas de privacidad y protección de datos?

A mi en principio se me ocurren solamente dos, supongamos que tenemos un programa llamado ABC123 de la empresa ficticia Example Inc. Puede ser el que el código fuente utilce código patentado por otra empresa llamado AnotherOne Inc. En algún momento de la historia Example Inc. y Another Inc. hicieron un acuerdo de no revelación de código fuente.

Ese puede ser perfectamente un obstáculo para la revelación del código fuente. Pero claro en ese caso no tiene nada que ver con el interés por privacidad o la salvaguarda de los datos de los usuarios.

Otra posibilidad que sería ciertamente nefasta es que el programa almacene datos sensibles de las personas.

El código fuente de acuerdo a Wikipedia es

Es cualquier colección de código, posiblemente con comentarios escrito usando un lenguaje de programación legible por humanos, usualmente como texto plano.

Es decir, el código fuente es escrito por los programadores, los datos no forman parte y no debería haber razones para considerarlo así. Y si alguien considera que los datos sí forman parte es grave porque están utilizando los datos del usuario con fines comerciales.

Y el funcionamiento del programa ABC123 está desarrollado de una manera en el que sea imposible disociar los datos de del resto del código está ciertamente mal diseñado y el usuario está siendo damnificado por esa situación.

Lo cierto es que hasta ahora nadie le ha preguntado seriamente a Microsoft por qué no libera el código fuente de Windows.

Fuentes:

El principio de Le Châtelier

Ya siendo adolescente me fascinaba el principio de Le Châtelier que enuncia:

Si se presenta una perturbación externa sobre un sistema en equilibrio, el sistema se ajustará de tal manera que se cancele parcialmente dicha perturbación en la medida que el sistema alcanza una nueva posición de equilibrio.

No siempre los equilibrios son ventajosos, a veces necesitamos romperlo para conseguir un beneficio.

Crisis

unsplash-logo Jan Tinneberg

¿Qué sucede si pensamos esto en términos sociales?

De hecho, hay un principio similar en economía formulado por Paul Samuelson en 1947. En biología este concepto se conoce como homeostasis.

Probablemente, la humanidad nunca estuvo ante una perturbación del equilibrio desde la segunda guerra mundial o incluso desde la caída del muro de Berlín.

¿Qué está haciendo hoy el equilibrio para restablecer el equilibrio? Creo que es una pregunta.

Es importante que nuestros dirigentes estén en el aspecto ético a la altura de las circunstancias. Pero entendiendo también que viejos conceptos son insuficientes. Una discusión entre "más estado" o liberalismo no alcanza. Es importante entender el grado en que la tecnología hoy nos rodea. Para qué se usa. Quienes son los dueños.

En un tiempo en que todos corremos detrás de los servicio de Internet, creo que más que nunca tenemos que hacernos preguntas sobre ella. Cuestionarnos la obsesión por los datos, por la rapidez vacía de resultados benéficos reales sobre las personas.

Un tiempo para que podamos descubrir que un empleado feliz puede ser más creativo y más productivo. El trabajo del hombre respetando a la naturaleza y por ende al mismo hombre contenido en ella.

Por primera vez después de mucho tiempo empezábamos a perder la vergüenza de decir que las personas son más importantes que las ganancias económicas.

Sin embargo, pudimos ver claramente en los últimos días como han aparecido las fuerzas que pretenden restablecer un equilibrio que perjudica a las grandes mayorías, dentro las cuales están los que menos tienen.

Enlaces de Interés

OpenSSH, X11Forwarding y Wayland

Digamos que hay tres maneras de levantar acceder a la interfaz gráfica de un Linux remoto:

red pipe with red ropes

Photo by JJ Ying on Unsplash

  • Accediendo a todo el escritorio
  • Accediendo a una aplicación en particular
  • Conectándose a un administrador de login remoto

Una de las maneras habituales hasta hace relativamente pocos años era abrir aplicaciones gráficas de manera individual usando ssh usando la funcionlidad llamada X11Forwarding.

¿Qué es X11 Forwarding?

La mayoría estará de acuerdo con lo poco aconsejable que es usar Xorg en un servidor. Una alternativa menos riesgosa es instalar un programa cliente de X. En ese caso podemos usar el redireccionamiento X11 de ssh. De esta manera los datos viajan cifrados por la red y además, establecerá la variable DISPLAY en la máquina en la cual estamos usando el cliente ssh. Una de las cosas más ventajosas que tiene el redireccionamiento X es que host remoto no necesita un servidor Xorg real. El programa xauth en el host remoto simula que hay un servidor local ante sus programas clientes pero redireccionando la imagen en la pantalla del cliente ssh. Esto tiene un costado problemático: estamos abriendo un canal desde el servidor ssh al cliente ssh. Por eso es muy importante segurizar el servidor para minimizar los riesgos. El protocolo X es muy antiguo y como tal era muy laxo en cuando a la seguridad, de este modo imponía pocas restricciones en el acceso por red. Durante el paso de los años el Xorg se ha esforzado por reducir esos inconvenientes. De hecho cuando una aplicación remota se abre por ssh X la considera un cliente no confiable, impidiendo el acceso a recursos de clientes confiables.

El Problema

El X Window System o X11 nació en el año 1987, y en los comienzos de Linux se usaba XFree86, una implementación libre (aunque con una licencia considerada problemática). Pero en 2004 nació Xorg como un fork de XFree86 y desde ese momento reemplazó en general a su antecesor en el reinado de las interfaces gráficas de Linux. Sin embargo, algunas distribuciones en la actualidad ofrecen de manera predeterminada Wayland en lugar de Xorg. Kristian Høgsberg un desarrollador de Xorg y de gráficos del kernel Linux creó Wayland en 2008. El propósito de Wayland es proveer una alternativa que sea más fácil para desarrollar y mantener que Xorg. Aquí tenemos que recordar que es un compositor: se trata de un software que utiliza buffers de memoria para que la imagen tenga mejor calidad y de paso poder proporcionar ciertos efecto. Wayland es un protocolo para que un compositor pueda comunicarse con programas clientes y además una implementación de dicho protocolo. De esta manera, se dejan las funcionalidades esenciales para que las ejerzan los clientes.

Es así como llegamos a que Wayland tampoco tiene como propósito ofrecer el renderizado de aplicaciones remotas, es decir, no existe de manera predeterminada algo como WaylandForwarding. Los desarrolladores de Wayland dicen que podrías en cambio:

  • Usar un servidor de renderizado sobre Wayland con soluciones ya existentes ( vnc, rdp, Xorg) o desarrollar uno nuevo.
  • Usar y/o desarrollar un protocolo de renderizado remoto en un compositor de wayland.
  • Usar y/o desarrollar un compositor remoto aislado o una parte de un compositor de escritorio

GNOME está trabajando con el renderizado de aplicaciones remotas en Wayland y KDE aparentemente también con en su proyecto Plasma.

Una tubería como camino

Waypipe programa desarrollado por M. Stoeckl para eñ Google Summer of Code de 2019: es un proxy para clientes de Wayland. Lo interesante es que puede usar ssh para hacer un redireccionamiento de una manera muy sencilla:

waypipe ssh usuario@servidorssh

waypipe

Ese comando ejecuta dos instancias, una en el cliente y otra en el servidor (es decir debe estar instalado en ambos hosts). La instancia de waypipe que se ejecuta en el servidor ssh simula ser un compositor wayland, y usa un socket Unix para que los programas puedan conectarse. El resultado final es que la aplicación remota se muestra en la pantalla local de wayland. Las pruebas que realicé sobre CentOS8 como servidor wayland y cliente ssh frente a un servidor Fedora 31 han sido satisfactorias.

Más que mil palabras

¿Querés ver un video con waypipe en acción? Lo podés ver a continuación:

Fuentes de Consulta y Más Recursos

Cuestiones con VirtualBox

Hay ciertos detalles a vece que necesitamos pulir al usar VirtualBox, por ejemplo:

Detalles al configurar un Guest en VirtualBox

Photo by Ales Nesetril on Unsplash

Al usar VirtualBox 6.1 aparecen los siguientes errores:

[drm:vmw_host_log [vmwgfx]] *ERROR* Failed to send host log message.

Este error parece inocuo, tiene que ver con el driver de la tarjeta de video, la cual está en VMSVGA, el indicado para Linux.

el otro error es:

"failed to start Cgroup management daemon."

Lo que hice fue desinstalar paquetes obsoletos:

apt-get purge upstart libcgmanager0 cgmanager

Otro inconveniente menor suscitado es la baja resolución luego del login:


Baja Resolución después del login

Probé aumentarle la memoria para video del guest a 32 MB, pero el problema persistía. Entonces creé un usuario de prueba que no presentaba ese problema y comparé los datos que me daba el comando:

gsettings list-recursively

para ambos usuarios.

No encontré diferencias. Entonces, comparé ambos directorios y borré el archivo $HOME/.config/monitors.xml del usuario con dicho problema y efectivamente, logré solucionarlo de ese modo.

Análisis de Arquitectura de Aplicaciones Educativas Libres

Este análisis se es sobre el diseño, la interactividad, usabilidad y experiencia del usuario en programas educativos libres.

Usabilidad

Photo by David Travis on Unsplash

katomic

El software presupone un conocimiento básico de química. Espera que gracias a ese conocimiento el usuario se de cuenta como se juega. El menú Juego pone de relieve la naturaleza del programa. El programa posee una especie de laberinto a la izquierda y la estructura de una molécula que se debe btener en la parte derecha. Posee 4 menús:

  • Juego

  • Mover

  • Preferencias

  • Ayuda

Una barra de herramientas debajo con:

  • Reiniciar partida

  • Deshacer

  • Rehacer

  • Nivel anterior

  • Siguiente nivel

Cada átomo posee flechitas de dirección al pausarlas Se supone que es cuestión de arrastrar y solar. Con algo de investigación uno puede darse cuenta de que se trata de un laberinto, hay que mover haciendo clic en las flechas hasta juntar correctamente los átomos. También es posible moverse con las flechas del teclado.

Es un poco impredecible el movimiento de los átomos, y uno tiene que deducir que siempre se mueve pegado a las paredes, nunca se quedan en el medio.

Debajo, en una barra de estado dice el Nivel, el tipo de nivel y el nombre de la molécula. A la derecha aparece la puntuación actual y las mejores puntuaciones.

El idioma está en castellano, aunque depende del entorno como esté configurado. Al finalizar el armado de la molécula aparece debajo un mensaje de felicitación, aunque no es muy cálido y/o visible. Y aparece un siguiente desafío.

El juego se puede guardar para seguir en otro momento. Al guardar la partida no está claro con qué extensión se guarda. No obstante al cerrar el juego, pude abrirlo sin problemas yendo a Juego y Cargar..

Además, puedo desde el menú Juego ir al Nivel anterior y luego volver al Siguiente Nivel. Tiene la posibilidad de Obtener niveles nuevos desde la Internet:

Niveles de KAtomic

Para luego descargarlos e instalarlos:

Descarga de niveles

Pese a su apariencia sencilla el juego no es tan sencillo.

Decidí explorar la ayuda:

En la ayuda dice el objetivo del juego es Ensamblar moléculas deslizando los átomos que las componen.

La Ayuda dice Verá flechas verdes apuntando en las direcciones en las que el átomo se puede mover pero en realidad son amarillas. También expresa que El progreso del juego se guarda automáticamente cada vez que se alcance un nivel nuevo y se cargará la siguiente vez que se inicie la aplicación. Algo que efectivamente sucede.

Manual de katomic

Este programa no tiene un sitio web especial para el usuario, solamente un sitio de control de versiones: katomic.git - Katomic is a fun and educational game built around molecular geometry y está listado en The KDE Games Center - KAtomic Information. En ese sitio la información está en inglés.

La navegación citada por Berenguer tal vez no sea tan interesante y no demanda demasiada interacción.

El control que tiene el usuario sobre la aplicación es limitado.

Sería un programa interactivo de segunda generación ya que permite usar íconos y el mouse principalmente.

No obstante el escollo que encuentro es que juego es bastante lineal y su nivel de dificultad puede llevar a la frustración temprana.

De hecho, la ayuda misma dice que la aplicación no proporciona ni pistas ni soluciones.

El control mejora un poco si descargan y usan niveles adicionales.1 Me parece que la relación entre el juego y el contexto del usuario es bastante débil.[ii]

kig

Kig se autodefine como un programa para explorar construcciones geométricas.3

Kig


  • Un punto positivo es el ¿Sabía...? es una manera de ayudar a que el usuarios se involucre con el uso del programa. La ayuda es también en componente importante a la hora de evaluar la experiencia del usuario.4

  • La interfaz es un tanto monocroma, pero el uso de las herramientas es intuitivo. Sin embargo, identificar con solo verlos en algunos casos puede ser un poco difícil, por ejemplo:

  • En este caso, la interfaz tiene dos recursos como para paliar dicho problema: las tooltips y la posibilidad (como cualquier programa del entorno de escritorio Plasma) de ver los íconos más grandes.

  • Una información muy útil está en la barra de estado, sería mejor si estuviese más visible.

  • No explica lo que es un vector.

  • Tiene una manera para seleccionar todo y borrarlo de manera de limpiar la hoja de trabajo.

  • El menú contextual que aparece al hacer clic derecho sobre los objectos es muy útil.

  • No pude establecer un color personalizado, bueno en realidad sí, después de hacer clic en otro lugar de la pantalla pude ver que lo aplica para mover un vector, seleccionar un ángulo de rotación?

  • Con Esc se puede cancelar la construcción de un objeto

  • Está muy bueno que se puede poner una etiqueta en el objeto (el programa le da el nombre correcto)

  • En un momento se colgó el programa, afectando el grado de previsibilidad del programa,

  • Estaría bueno si permitiese crear más polígonos, como trapecios, paralelogramos, etc.

GCompris

GCompris es un conjunto de programas educativos de alta calidad que contiene un gran número de actividades para niños entre 2 y 10 años.

De acuerdo a la definición de su sitio web, Gcompris

es un conjunto de programas educativos de alta calidad que contiene un gran número de actividades para niños entre 2 y 10 años

Desde la primera pantalla guía al usuario claramente en lo que puede hacer.

Bienvenida de GCompris

Y luego la bonita pantalla inicial:

Inicio de GCompris

En la parte inferior, hay a unos botones muy atractivos, cada uno de ellos tiene un ícono que sugiere la función de ellos. De esta manera se estaría cumpliendo la ley de Fitt.[v]

El botón de la G, muestra información muy útil sobre GCompris, KDE y la naturaleza de ellos:

Acerca de GCompris

Cuanta con actividades en las cuales los chicos tienen protagonismo, como por ejemplo un juego sobre el ciclo del agua:

Excelentes gráficos, ayuda integrada, buena interactividad, como dice Berenguer:

“En segundo lugar, apunta la "facilidad"
de uso, o sea la accesibilidad de la información y la sencillez de las operaciones que llevan a ella. También
es deseable en general la "coherencia", la regularidad del programa, es decir, que elementos similares sean
tratados de manera similar”

En muchos aspectos Gcompris se acerca bastante al idea de un programa libre educativo para niños

Por otro lado, Otl Aicher6 cita a Kant: “la finalidad se orienta a lo especial, no a lo general”. En este caso si los proyectos de software libre consiguen profesionalizarse tienen grandes posibilidades en ese aspecto al no estar urgidos por alguna urgencia comercial.

Por otro lado, hay que entender que no solamente importa la facildad de un programa, sino el tipo de experiencia que tiene el usuario al emplearlo.7

Otros Enlaces Útiles


  1. Berenguer menciona la importancia del control del usuario en los programas interactivos en Escribir programas interactivos - Publicado en FORMATS, Universidad Pompeu Fabra, 1997

  2. En ACIMED v.12 n.6 Ciudad de La Habana nov.-dic. 2004 se menciona la importancia de Relación entre el sistema y contexto del usuario como medida de Experiencia del Usuario. 

  3. The KDE Education Project - Kig 

  4. Mencionado también en fuente mencionada en nota 2 

  5. Ley de Fitts - Wikipedia, la enciclopedia libre 

  6. El mundo como proyecto - Otl Aicher 

  7. Usability - Wikipedia 

La gestión de archivos en tiempos de DevOps

Escribía en un artículo anterior sobre ranger. Los gestores de archivos han sido son muy importantes.

Gestores d archivos

En los comienzos de la informática moderna, los gestores de archivos se llamaban editores de directorio. En 1974 Stan Kugell crea el programa llamado DIRED. En la actualidad una implementación de Dired que corre en Emacs.

Dired en Emacs

En los '80s aparecería Norton Commander. Miguel de Icaza creó en 1998 el clon tan popular llamado Midnight Commander.

El comando ls viene desde los tiempos del sistema operativo UNIX de AT&T, naturalmente en Linux usamos la implementación libre de las coreutils. El comando ls sirve para ver el contenido de directorio y ver propiedades básicas de los archivos. Si queremos ver el árbol de directorios podemos usar tree:

El comando tree

Benjamin Sago creó en 2014 una herramienta para reemplazar a ls, llamada exa:

Este programa cuenta con opciones de visualización y filtrado que no están en ls.

La herramienta Broot o bien abreviada br combina funcionalidades de ls, tree y de gestores de archivos. El programa fue creado por Denys Séguret y al igual que exa, está escrito en Rust Programming Language. Aquí vemos como esta herramienta sintetiza las 3 funcionalidades:

Es así como contamos tanto con herramientas tradicionales como otras más nuevas adaptadas más a estos tiempos para ver y manejar archivos.

Fuentes y más recursos