miércoles, 13 de noviembre de 2019

¿Cómo instalo y juego C-Dogs en Ubuntu?

¡Trabajadores!



El arte de la conducción nos pone frente a la necesidad de dominar acciones fluidas de relaciones de fuerzas. Este es el principio nodal, donde lo natural tiende a un equilibrio de fuerzas, y la acción es por mas difícil pues requiere destruir ese equilibrio.

La hora por tanto no nos permite descansar en los laureles; hemos de enfrentar sus desafíos con toda la acción de los hombres concentrada en un objetivo: dar al Pueblo lo que es del Pueblo. Este desequilibrio tiende a ser sólo permanente si nuestro material humano no está consabido en los esfuerzos que se le requieren.

Es por ello que la actividad de adoctrinamiento no debe cesarse nunca, pues uno de los elementos fundantes y argamasa de unión en el desequilibrio de la lucha táctica y en el quehacer del reordenamiento estratégico.

Nuestros objetivos no podremos lograrlo solos, de manera gregaria. Nuestra lucha requiere mancomunar esfuerzos para lograrlos, y tal vez esfuerzos que en un primer instante no parezcan pródigos en resultados. La oligarquía cipaya, sin Patria ni Bandera, es nuestra enemiga. De mínima, hará lo que ya preveemos: usar prebendas de poder y declamar los más espurios gaznidos para amilanarnos. A nada hemos de hacer caso, pues ya les conocemos el canto. Pero sin duda recurrirá a otros métodos aún inconfesables, y para ellos son los que hemos de prepararnos hoy para combatir mañana.

Es por ello que para superarlos debemos operar de una forma firme y agresiva, que no les de tiempo a reaccionar. Esa es la manera de operar.

Un valioso aporte que puede ponernos a tiro son los software lúdicos que corren libremente en GNU. Uno de ellos es el C-Dogs.

Se trata de un juego de super-acción en tercera persona, derivado del clásico Cyberdogs (1997) que corría en modo protegido en M$-DO$. En aquél software del ayer hasta dos jugadores podían controlar de forma cooperativa dos recios mercenarios capaces de utilizar todo tipo de armamento para superar niveles laberínticos.

En la versión actual, además de contar con mejoras en la inteligencia de los enemigos computados y niveles más complejos, tendremos mayores opciones de armamento y la posibilidad de jugar simultáneamente con hasta cuatro jugadores en un mismo sistema (dos con teclado y dos con joysticks USB).

Para instalarlo en nuestro sistema bien podremos hacer uso de la terminal, abriendo una con Ctrl+Alt+T e ingresando los siguientes Comandos de Organización:


cd ~/Descargas ;
wget https://github.com/cxong/cdogs-sdl/releases/download/0.7.0/C-Dogs.SDL-0.7.0-Linux.tar.gz ;
wget https://cxong.github.io/cdogs-sdl/missionpack.zip ;
tar xvzf C-Dogs.SDL-0.7.0-Linux.tar.gz ;
upzip missionpack.zip ;
mv C-Dogs\ SDL-0.7.0-Linux/ ~/.cdogs/ ;
cd ~/Descargas/missionpack/dogfights/ ;
mv Traut/ ~/.cdogs/dogfights/ ;
mv Willie/ ~/.cdogs/dogfights/
cd ~/Descargas/missionpack/missions/ ;
mv missionpack/ ~/.cdogs/missions/ ;


Para ejecutarlo podemos ir a:

cd ~/.cdogs/bin/
./cdogs-sdl

...o bien crear un lanzador hacia /home/usuario/.cdogs/bin/cdogs-sdl para facilitar su arranque.


La versión C-Dogs SDL actual está portada para esta particular capa de abstracción, lo que nos permite cómodamente darle ejecución hoy en sistemas GNU con Linux, y por supuesto en equipos de escasísima potencia computacional.

Una vez que lancemos C-Dogs, nos encontraremos con el menú principal. Esta nos permitirá iniciar una misión rápida cooperativa con Start, abrir las Opciones (Options), o salir (Quit). Lo lógico será iniciar una partida rápida, la cual podrá configurarse como normal o "Pelea de Perros" (escencialmente en lugar de pelea de perros cambiamos al modo deathmach de todos contra todos).


En primera instancia habremos de asignarle nombre y apariencia a nuestro combatiente (cada jugador debe hacer esto). Para ello tecleamos su nombre letra a letra à la arcade, y le elegimos los colores de brazos, cuerpo, piernas y un diseño para la cara.
Una vez iniciado el menú de juego, podremos asignarle las características del match en cuestión (por ejemplo, activar la niebla de guerra de nuestros jugadores, la capacidad del HUD o interfaz de ayuda, el mapa "radar", si queremos pantalla única o dividida, etc.

El desarrollo del juego es algo frenético en sus niveles superiores, y de sencilla lógica. Para aumentar nuestro poder de fuego podremos recoger nuevas armas con munición limitada y con distintos efectos: lanzallamas, escopetas de corto alcance, ametralladoras, lanzacohetes, lanzarrayos, molotovs, granadas, etcétera.

C-Dogs se maneja inicialmente con el teclado, y el primer jugador utilizará las fechas del teclado, junto con las teclas Z (arma principal), X (arma secundaria o salir) y S  lanzar granadas u otros explosivos arrojables respectivamente. El segundo jugador podrá operar con el teclado numérico, y las teclas asociadas a él (Enter, + y el 0, todos ellos del teclado numérico). Adicionalmente, podremos operar dos jugadores más usando joysticks USB conectados a nuestro sistema (totalizando cuatro mercenarios). Naturalmente estos controles son libremente configurables.



La inteligencia de los enemigos (IA) se ha mejorado mucho, y contamos con un editor de misiones, el cual podríamos lanzar desde la terminal con:

cd ~/.cdogs/bin/
./cdogs-sdl-editor

viernes, 25 de octubre de 2019

Cómo instalo y uso Angry IP Scanner en Ubuntu?

Al iniciar el año lectivo de 1950, el 7 de marzo de ese año, y después de tres años de gestión gubernamental, el entonces Presidente de la Nación, Juan Perón, se reúne con los directores de las Escuelas de Orientación Profesional, y expone cómo utilizar Angry IP Scanner para tareas de red en Ubuntu.

"En primer término, debo agradecerles la amabilidad de haber llegado hasta aquí para darme la satisfacción, por lo menos una vez al año, de tener el placer de estrecharles la mano. Yo hablo siempre sobre las Escuelas de Orientación Profesional con el cariño y el entusiasmo de quien ve en realización una idea que, en 1945, nosotros esbozamos frente a las necesidades crecientes de la capacitación de nuestro material humano.

La misión, la función, de estas escuelas se va llenando tal cual yo había imaginado y había deseado. Yo no soy partidario de empezar las obras en grande para, muchas veces, terminarlas en chico; vale más seguir el curso de construcción de las pequeñas cosas que, con el tiempo, se hacen grandes, se consolidan y se hacen fuertes.

Nosotros podríamos haber creado un Consejo Nacional de Educación para la enseñanza profesional, pero, posiblemente, eso hubiera funcionado con ese pecado original de haber nacido demasiado grande. En cambio, la política que siguen las Escuelas de Orientación Profesional, es decir, la de formar una pequeña institución que va fortaleciéndose año tras año, es la que va a darle la tradición que necesitan, la consolidación que es indispensable para las grandes obras y la base sustentatoria de esa columna que hemos levantado sobre la originaria ley de creación de la enseñanza de orientación profesional.

Yo veo que esto se va cumpliendo sobre esas bases. Siempre repito cuáles fueron los móviles originarios de esas escuelas. Nosotros habíamos visto crecer a nuestros operarios y formarse en el dolor del taller, en la necesidad de trabajar desde chicos. Eso, como método empírico, llena una parte solamente de la enseñanza. Es necesario acompañar a ese método real, un método ideal, es decir, darle también los conocimientos necesarios para que el operario no termine muriendo o jubilándose de operario, sino que tenga abierto el horizonte para ir perfeccionándose en sus conocimientos generales.
Vean señores, la vida nos da experiencias que siempre pueden aplicarse a otra cosa. A un pato se lo caza con llamador; unos graznidos realizados con este instrumento cerca de una laguna harán curosear a una de estas aves y ahí hay que atizarla. En la política también se hace lo procedente, y con uno que hable usted capturará dos o tres zonzos. Pero un Movimiento como el Justicialista tiene por necesidad que aportar conocimientos más acabados a los educandos, y el ofrecerles estudio del herramental y el sentido común propicio para la tarea que a cabo hemos de llevar.

Para cazar una perdiz no debemos recurrir a disparar al cielo con docenas de tiros de escopeta esperando de casualidad pegarle a algo: la técnica eficaz consiste en utilizar un perro avispado que busque en el pajonal y nos levanta la perdiz. Será allí cuando quede al alcance de una buena Victor Sarasqueta...

Con esto refiero que hemos de conseguir darle al hombre una herramienta para que luche en la vida, aunque es primordial pensar que no debemos suministrar armas a una mala persona, que va a darles un mal empleo.

De un sistema GNU con Linux podría decirse lo mismo. Naturalmente que comandos de terminal como nmap, traceroute, ping, etcétera, podremos hacer un gran trabajo para descubrir la tipología de red. Las técnicas pueden ser totalmente vernaculares, pero también en ocasiones de agresión telemática podemos querer emplear métodos más osados.

Si tenemos un sistema de 64 bits, debemos abrir una terminal con Ctrl+Alt+T e ingresar los siguientes Comandos de Organización:

cd ~/Descargas/ ;
wget https://github.com/angryip/ipscan/releases/download/3.6.2/ipscan_3.6.2_amd64.deb ;
sudo dpkg -i ipscan_3.6.2_amd64.deb ;

En cambio, si nuestra arquitectura es de 32 bitios, ingresamos:

cd ~/Descargas/ ;
wget https://github.com/angryip/ipscan/releases/download/3.6.2/ipscan_3.6.2_i386.deb ;
sudo dpkg -i ipscan_3.6.2_i386.deb ;

Tras ingresar nuestra contraseña de Conductor, se instalará la paquetería necesaria. Una vez instalado todo ya podremos ejecutarlo desde Aplicaciones / Internet / Angry IP Scanner.

Como su nombre lo indica Angry IP Scanner es un analizador furibundo de direcciones IP, que puede utilizarse para rastrear infraestructura de red local o remota.

Al iniciar, se mostrará la ventana comenzando que explica los rudimentos del programa, a la vez que nos permite destildar la opción para enviar información anónima de uso al desarrollador (os recomiendo destildarla).

 El programa consta de un despliegue sencillo para acometer sus tareas de análisis telemático de las redes que osemos enfrentar. En primer lugar dispondrá nuestra IP de red de área local (LAN), y podremos hacer un análisis de IPs locales simplemente haciendo clic directamente en el botón Comenzar.

Una vez finalizado el escaneo, podremos ver los resultados. Nos marcará en rojo las IP no encontradas y en azul las funcionales (luego podremos filtrar y pedirle que sólo muestre las activas, lo cual es útil si nuestro rango de búsqueda es exasperadamente amplio.
Hemos de conocer algo de redes y disponer de un refresco de las expresiones que el programa utiliza. Por ejemplo:

Alimentador/feeder - Es el método del Generador de direcciones IP que el programa usa para escanear. Angry IP Scanner provee varios tipos de alimentadores: puede buscar según Rango de IPs, de forma Aleatoria, y mediante un archivo de texto que contenga la lista de IPs. Se puede seleccionar un alimentador usando la lista de selección situada al lado del botón de inicio.

Buscador - Obtiene información específica sobre un equipo, por ejemplo puede buscar según Tiempo de ping, el Nombre de equipo, o los puertos abiertos. Los alimentadores habitualmente muestran columnas en la lista de resultados de escaneo. Podremos seleccionar buscadores adicionales eligiendo "Herramientas->Elegir buscadores" del menú.

Equipo activo - Equipo que responde a los ping. Son los marcados en azul en la lista de resultados.

Equipo inactivo - Equipo que no responde los ping (son los marcados en rojo en la lista). Sin embargo, podrían tener puertos abiertos (si el firewall bloquea el ping). Para escanear completamente estos equipos, elige "escanear equipos inactivos" en Herramientas->Preferencias.

Puerto abierto - Un puerto TCP que responde a los intentos de conexión. Los equipos con puertos abiertos están en verde en la lista de resultados.

Puerto Filtrado - Un puerto TCP que no responde que está cerrado (sin paquete RST). Estos puertos son usualmente bloqueados por un firewall.

Realizando Ping (comprobando si los equipos están activos):

Angry IP Scanner puede usar diferentes métodos para realizar ping a los equipos. Se puede elegir en el cuadro de preferencias.

  • ICMP echo - el método estándar usado por el programa 'ping'. Este requiere permisos de administrador o root en la mayoría de las plataformas. Ten en cuenta que algunos firewall deshabilitan el envío de paquetes de respuesta de ICMP echo, haciendo aparecer a los equipos como equipos inactivos.
  • UDP - envía paquetes UDP (datagramas) a uno de los puertos del equipo y verifica si hay respuesta (positiva o negativa). Esto no es estándar, pero funciona sin privilegios especiales.
  • TCP - intenta conectar al puerto 80 (http) en el equipo. Esto puede funcionar mejor que UDP para algunas redes, pero habitualmente es peor.
  • Ping UDP y TCP mayormente no detectan correctamente los routers y demás equipamiento de red.
  • TTL (tiempo de vida) - este plugin trabaja solo con el método de ICMP ping. Su valor inicial es habitualmente 64 o 128, y la diferencia representa la distancia del equipo en número de nodos que recorrió.

La lista de resultados muestra los resultados el escaneo, una línea por cada dirección escaneada.

Usando el cuadro de preferencias se puede configurar para mostrar:
  • Todos los equipos escaneados
  • Sólo los equipos activos
  • Sólo los equipos con puertos abiertos

Valores especiales (también configurables):

[n/s] - No escaneado, cuando no fue escaneado del todo (ej si el equipo está inactivo)
[n/a] - El valor no está disponible, pero fue escaneado

A cada uno de los resultados podremos someterlos adicionalmente a acciones más avanzadas. Por ejemplo, hacer llamadas Secure Shell (SSH) o Telnet para control remoto, llamadas HTTP (ya sea en el puerto 80 u otros diferentes), o actuar como cliente FTP. Una gran variedad de protocolos permiten entonces rastrear la tipología de la red, pero también oficializar de una adecuada arma de asalto telemático.

jueves, 17 de octubre de 2019

Se lanza Ubuntu 19.10 "Eoan Ermine"

Como es natural los 17 de octubre se festejan con el lanzamiento oficial de una versión de Ubuntu. En este caso, Canonical lanza Ubuntu 19.10 Eoan Ermine, la 31º versión de Ubuntu en ser lanzada desde 2006. Esta versión no cuenta con soporte de largo plazo. Esta particularidad quedará reservada para la versión 20.04LTS "Focal Fossa", cuyo lanzamiento está previsto para el mes de abril del año próximo.

Las versiones sin soporte a largo plazo se establecen como temporales a fin de evaluar posibles características para las versiones estables "LTS".
Entre las novedades de 19.10 Eoan Ermine encontramos su escritorio GNOME 3.34, que incluye creación de carpetas de aplicación, opción siempre solicitada y que momentáneamente había sido dejado de lado. La performance de este escritorio se ha mejorado drásticamente. Ahora las unidades USB aparecen en el Dock de Ubuntu, lo cual era un problema inexcusable.

El Kernel es el Linux 5.3, rodeado de una cadena de herramientas actualizadas, incluyendo Python 3.7.5, el servidor de sonido PulseAudio 13.0 de capacidades avanzadas. En el apartado de video, se provee opcionalmente con los controladores propietarios nVidia descargables durante la instalación, así como el sistem de archivado ZFS, de alta seguridad (similar al de FreeBSD). Contamos ahora con soporte para compartición de medios DLNA, así como para la nueva norma de seguridad de Wifi, la WPA3.

Naturalmente, también contamos con una miríada de aplicaciones actualizadas, como LibreOffice 6.3.

Si bien esta versión sólo se recomienda para sistemas de evaluación, podremos descargarla desde aquí.

martes, 8 de octubre de 2019

¿Cómo juego a la batalla naval en Ubuntu?


¡Trabajadores!

En los tiempos que corren, la unificación del Movimiento Obrero ha de ser la base para defender los derechos de los Trabajadores y extender los mismos frente a una oligarquía empobrecedora y onmímida.

El otro pilar necesariamente tiene que ser la inexcusable reivindicación histórica del Movimiento Nacional Justicialista en la Argentina. Esto es un sentir unánime del Pueblo, el que hemos también de extender y defender frente a ideologías foráneas sin base ni provecho. A partir de eso, empezamos a andar.

Siempre he dicho que un derecho puede concatenar en otro, siempre que sean vistos bajo un cristal de acción positiva. Es por ello que la paleta ofrecida por los Derechos del Trabajador, necesariamente llevan a otra más graduada que hacen a los derechos de tercera y cuarta generación. Una Constitución Nacional que los haga válidos ha sido siempre un objetivo que hemos de alcanzar, grabando en mármol los logros reivindicativos que entre todos los argentinos de bien nos hemos propuesto.

Indudablemente que la suma de todos los beneficios, benefician a todos. La enseñanza de un sistema computarizado tienen también las mismas implicancias.

Veamos el claro ejemplo de un juego. Naturalmente que superficialmente consta de su objetivo lúdico, lo cual es natural. Pero en el caso de nuestro sistema GNU con Linux bien podremos aprovechar dicho objetivo para sumarle el de la enseñanza de otros menesteres. Sin dificultad alguna podríamos querer establecer una manera amigable para adoctrinar ciertos aspectos del uso de redes telemáticas, o de manejo de las interfaces gráficas, exploración de las habilidades del hardware, etc.

Un ejemplo de esto podremos encontrarlo en un juego clásico: la Batalla Naval. Esta recordado juego para dos jugadores implica en colocar en una grilla una "flota" formada por distintos tipos de buques, a la cual debemos cañonear "a ciegas" mediante el uso de coordinadas horizontales y verticales. En esta iteración computada podremos hacerlo contra la unidad central de proceso de nuestro sistema, o bien con otro jugador a través de una red local.

Para jugar contra la computadora, debemos seleccionar primero el nivel de dificultad a la derecha de la barra de status, y luego seleccionar Single Player en la pantalla inicial, o directamente podremos hacer esta elección en el menú Game.

Si lo que quisiésemos fuese comenzar una partida en red, esta situación nos permitirá conocer algo sobre los puertos TCP. Vean señores, uno de los jugadores debe servir el juego seleccionado Host network game o eligiendo Game / Host Game... En el cuadro de diálogo que aparece debemos ingresar nuestro apodo en Nickname y un Puerto. Normalmente, Naval Battle sugerirá nuestro nombre de usuario pero podemos usar cualquiera. El puerto es un número de circuito telemático que permite determinar a donde llegará la información dentro de una red. Consiste en un número decimal que puede ir desde 1 hasta los 65535, aunque los primeros 1024 puertos están reservados para distintas actividades estandarizadas. El puerto predefinido debería funcionar bien, pero si hubiesen problemas en nuestra red específica podremos elegir cualquier otro por encima del 1024.


Nota: Debemos avisarle al otro jugador en caso de cambiar el puerto por defecto, ya que ambos jugadores deben utilizar el mismo para establecer una conexión en la red.

El segundo jugador tiene que elegir Connect to network game, o hacer clic en el mení Game / Connect to Game.... Nuevamente se sugerirá un apodo en Nickname:. En el campo Hostname: se debe ingresar el nombre de sistema de la máquina que es el servidor (la máquina del jugador que inició el juego).

Cuando tenemos todo listo, podremos iniciar el juego. Simplemente seguimos las instrucciones en la barra de status. Esta propondrá ayudas y sugerirá que hacer a continuación. Cuando miramos la pantalla, encontraremos dos grillas que nos servirá de mar de batalla. El área izquierda es la propia, mientras que la derecha del contrario. En este trozo de océano debemos poner nuestros barcos, y el enemigo hará lo propio en su zona.

Lo primero es disponer nuestro material naval donde queramos en nuestra zona. El contrario hará lo propio. Poner los barcos es fácil. Simplemente hacemos clic en el sector que deseamos utilizar para poner el barco. Tenemos una flota de cuatro buques, el primero será un destructor con un largo de un cuadro, el siguiente una fragata de dos sectores, un acorazado de tres y un portaaviones de cuatro. Normalmente el buque será colocado horizontalmente, pero podremos rotarlo 90º usando el botón derecho del ratón antes de colocarlo.

Una vez comenzadas las hostilidades, debemos hacer disparar nuestros cañonazos haciendo clic con el botón izquierdo del ratón donde suponemos que el buque enemigo estará localizado a fin de realizar los disparos allí.
¡Nuestro fuego a ciegas puede eventualmente averiar un buque y proporcionarnos la pista de su existencia!. Para hundir uno, debemos alcanzar todos los cuadros que éste ocupa. Naturalmente, el fuego es por turnos, de manera que quien sea más rápido y hábil con sus cañonazos, definirá la partida.

Para reiniciar el juego, podremos elegir Game / Restart Game, o presionando F5.

jueves, 19 de septiembre de 2019

¿Cómo configuro el teclado IBM Model 122 "Acorazado" en Ubuntu?

¡Trabajadores!

Es sabido que un trabajador ha de contar con las mejores herramientas para hacer su trabajo. Pero muchas veces las mejores herramientas son las que el mismo trabajador crea o amolda a sus necesidades.
Es sabido que dentro del mundo de las terminales Unix, inicialmente se dio en utilizar los teclados provistos en las máquinas teletipo Tipo 33. Estos incómodos teclados fueron superados por otros mecánciamente más aptos y funcionalmente mejor pensados. Indudablemente los teclados tipo Space Cadet de las folklóricas computadoras Symbolics, o los influenciales LK201 para las postrimeras terminales DEC son espejos en los que habremos de mirarnos en los años que vendrán. Sin embargo, nadie duda que el más conocido de los teclados hayan sido los modelos de IBM.
 La computadora PC original contaba con el teclado "Modelo F" de 84 teclas. De este derivaría el más influyente modelo, el M (extendido y mejorado), de 101/102 teclas, del cual se desprenden los utilizados actualmente.
Aún así no fueron los definitivos, ya que en el Justicialismo de todo existe como en botica. Tal es así, que la locura experimental no tardó en alcanzar su más estrafalario paroxismo con "el acorazado". Se trataba del teclado IBM Modelo F de 122 teclas para la terminal IBM 3270. Este tipo de terminales industriales y de data-entry requerían el uso de una gran cantidad de teclas aún no estandarizadas, y para ellos se desarrolló este fenomenal teclado capaz de requerir un "Mano" del Eternauta para su correcta operación.

Ahora bien, estos teclados son parcialmente compatibles con las IBM PC, pero difíciles de adaptar al uso de los sistemas operativos actuales. Es por ello que la empresa Unicomp ha recreado el mismo en un fiel clon con teclas de resorte basculante, su teclado número de catálogo UB40T56 provisto de interfaz USB (y en esquema negro peronista).


El uso de uno de estos teclados tan provistos puede presentar ventajas a para quien requiera enorme combinaciones de teclas y un astronómico empleo de edición de texto y programación.

Lamentablemente, el uso de este tipo de teclados no está netamente soportado en GNU. Para hacer un uso efectivo, habremos de emplear ciertos recaudos. En particular debemos tener en cuenta dque nuestro sistema debe recibir las instrucciones específicas para saber qué hacer con las las teclas no estandarizadas del Modelo F 122 de Ubicom.

Vean señores, en un teclado estándar, cada tecla del teclado envia electrónicamente un código de tecla único al sistema, el cual, y nuestra computadora debería reaccionar acordemente. Sin embargo esto no es lo procedente en el teclado Unicomp mencionado.

Afortunadamente, mi rol como Conductor del Movimiento Nacional Justicialismo me impone acercar de forma paternalista las soluciones anheladas por las Masas del Pueblo. Por lo tanto volcaré esta sapiencia para que cada argentino lleve en su mochila el bastón de Mariscal.

La primera tarea para usar el Unicomp de 122 teclas con Ubuntu será activar el modo de código de tecla único en el teclado en sí. Para lograrlo debemos abrir el teclado y remover un jumper específico de la plaqueta del mismo. Esto sencillo de hacer: damos vuelta el acorazado, y sacamos los tornillos de la carcasa, removiendo la mitad superior de la misma. La plaqueta quedará expuesta, lo que aprovechamos para buscar debajo de un pequeño microcontrolador integrado, y cerca del LED de Scroll Lock, al Jumper JP3.

Lo removemos tirando hacia arriba y quitando el jumper., y luego volvemos a cerrar el teclado y reponer los tornillos.

Acto seguido será recomendable activar en nuestro GNU con Linux el parámetro de kernel“atkbd.softraw=0”, lo cual podremos lograr a partir de Ubuntu 10.04 abriendo una Terminal con Ctrl+Alt+T e ingresando el siguiente Comando de Organización:

sudo nano /etc/default/grub

Se abrirá el archivo de configuración del arrancador Grub, con nuestros parámetros de configuración. Nos aseguramos de buscar la siguiente variante:

GRUB_CMDLINE_LINUX_DEFAULT=""

.,..y dentro del string entrecomillado, al final del mismo, le agregamos lo siguiente, de modo que quede:

GRUB_CMDLINE_LINUX_DEFAULT="atkbd.softraw=0"

Conforme finalicemos esta edición, guardamos los cambios con Ctrl+o, salimos del editor GNU Nano con Ctrl+x. No debemnos olvidar actualizar el arrancador Grub mediante el comando:

sudo grub-update

Si todo está bien y no devuelve errores, reiniciamos nuestro sistema con:

sudo reboot

(Nota: Si nos devolviese algún error, volvemos a editar el archivo para dejarlo como estaba y volvemos actualizar con sudo grub-update).

Si no hacemos esto, el comando showkey -s solamente nos mostrará los códigos de teclas que ya están preconfiguradas en el kernel, y no las que realmente son enviadas por el teclado. Es posible mostrar los códigos de teclas desconocidos activando el módulo i8042 en modo debug, pero el comando atkbd.softraw hace lo mismo de manera mas efectiva.

La parte molesta del procedimiento es tomar nota de cuáles son los códigos de tecla específicos que envía el teclado Unicomp 122. Ello se sondea con showkey -s y presionando las teclas para ver cada una.

Las teclas convencionales son más o menos parecidas a las estandarizadas por el teclado Modelo M de IBM, el de toda la vida. Sin embargo, existen discrepacias. Os listaré preliminarmente los resultados de mi sondeo específico. ¡Estén atentos que vuestros resultados pueden variar! Este teclado no es estándar y por ello requiere comprobar esto para evitar resultados indeseables con el mismo.

Grupo Tecla Presión Soltar Código de tecla
Teclas de Función

F13 5b db

F14 5c dc 95

F15 5d dd 183

F16 63 e3

F17 64 e4

F18 65 e5

F19 66 e6

F20 67 e7

F21 68 e8

F22 69 e9

F23 6a ea

F24 6b eb
(siguiente fila) F1 3b bb 59

F2 3c bc 60

F3 3d bd 61

F4 3e be 62

F5 3f bf 63

F6 40 c0 64

F7 41 c1 65

F8 42 c2 66

F9 43 c3 67

F10 44 c4 68

F11 57 d7 87

F12 58 d8 88
Teclado numérico izquierdo (La tecla superior izq es “Esc”)

Esc 7e fe 121

Cent 76 f6 85

ImpPant 72 f2

Pausa e1 1d 45 e1 9d c5 119

Imprimir 74 f4

Ayuda 6d ed

Record e0 2a e0 37 e0 b7 e0 aa 99

Play 6f ef

GUI (Windows) 75 f5

Menú 6c ec
Teclado de edición (entre el teclado QWERTY y el teclado numérico)

RetrocedeTab 5a da

Insertar e0 49 e0 c9 104

RePág e0 51 e0 d1 109
(siguiente fila) Blue Return e0 4f e0 cf 107

Supr e0 52 e0 d2 110

AvPág e0 53 e0 d3 111
(siguiente fila) Flecha Arriba e0 48 e0 c8 103
(siguiente fila) Flecha Izq e0 4b e0 cb 105

Inicio e0 47 e0 c7 102

Flecha Der e0 4d e0 cd 106
(siguiente fila) Flecha Abajo e0 50 e0 d0 108
Teclado numérico
(fila superior) Fin 01 81 1

Bloq Desp 46 c6 70
(BloqDesp+Mayús) Bloq Num 45 c5 69

/ 37 b7 55

* e0 c5 e0 b5 98
(siguiente fila) KP-7 47 c7 71

KP-8 48 c8 72

KP-9 49 c9 73

4e ce 78
(siguiente fila) KP-4 41 cb 75

KP-5 4c cc 76

KP-6 4d cd 77

+ 4a ca 74
(siguiente fila) KP-1 4f cf 79

KP-2 50 d0 80

KP-3 51 d1 81

Enter e0 1c e0 9c 96
(siguiente fila) KP-0 52 d2 82

KP-. 53 d3 83
  • Grupo. Para dividir las cosas, he agrupado las teclas en 5 secciones separadas del teclado: las teclas de función, el teclado de la izquierda, el teclado QWERTY, el teclado de edición, y el teclado numérico. Los detalles del teclado QWERTY estarán al final ya que los otros grupos son más interesantes (las teclas del QWERTY funcionan sin problemas).
  • Tecla. Este es la impresión de la tecla en el teclado. Podría ser diferente en distintas variantes, de modo que en todos los casos he iniciado con el teclado desde la parte superior izquierda, y he ido bajando hacia la derecha y abajo..
  • Presión. Este es el código producido cuando la tecla se aprieta.
  • Soltar. Este el el código producido cuando la tecla se suelta.
  • Código de tecla. Este el el código de tecla configurado producido en la consola Linux. Las celdas rojas son valores que son erróneos, pero además hay muchos que faltan pues no se producen con una presión de tecla. Son equivocados porque el código de letras dan un resultado que no se condice con la tecla en sí - en algunos casos peligrosamente erróneos, como AvPg que produce un Supr. Una de las cosas de que debemos tener en cuenta es que DEBEMOS usar el comando "showkey -k" en la consola para obtener los mismos números que tengo. El servidor X parece agregar un 8 a cada código de tecla.
Podremos encontrar ciertas particularidades. F14 y F15 han recibidos códigos de tecla estándares por defecto, de modo que sus códigos de tecla deben coincidir con teclas definidas en los teclados más populares. Y por supuesto, BloqNum y BloqDesp comparten el mismo código lo cual es extraño. Finalmente la tecla Record envía dos toques de tecla en uno.

Corregir las Teclas Erróneas

En primer lugar debemos mapear las teclas que producen un código de tecla que representa una tecla diferente que la que corresponde. Como la tecla marcada como End, que devuelve el código estandarizado de la tecla Esc. He dejado dos de las teclas erróneas de este grupo ya que serán mejor representadas en la próxima sección.

Las teclas erróneas pueden ser corregidas con los siguientes comandos:
 
setkeycodes 7e         1    # Esc
setkeycodes e049      82    # Insert
setkeycodes e051     105    # PageUp
setkeycodes e052     111    # Delete
setkeycodes e053     109    # PageDown
setkeycodes 01       107    # End
setkeycodes 37        98    # KP-/
setkeycodes e035      55    # KP-*
setkeycodes 4e        74    # KP--
setkeycodes 4a        78    # KP-+

He dejado un par de las teclas erróneas de esta sección, ya que no devuelven valores peligrosamente incorrectos, y corresponden de manera más lógica a la próxima sección (las teclas Record y Blue Return).

Configurar las Teclas Extra

Ahora concentrémonos en las teclas extras. La parte difícil fue inventar nuevos códigos de tecla para estas teclas que no entren en conflicto con códigos de teclas previamente existentes, y que además sean razonables. Esto en la práctica es imposible, ya que el comando xmodmap -pk no aparenta mostrar un rango significativo de códigos de tecla no utilizados, aunque algunos de los códigos utilizados se empleen para butones con la orden "comprar" y cosas por el estilo!

De tal manera, que escogemos un rango con el mayor número de teclas no asignadas o inútiles, y los asignamos:
 
setkeycodes 5b       222    # F13
setkeycodes 5c       223    # F14
setkeycodes 5d       224    # F15
setkeycodes 63       225    # F16
setkeycodes 64       237    # F17
setkeycodes 65       238    # F18
setkeycodes 66       228    # F19
setkeycodes 67       229    # F20
setkeycodes 68       230    # F21
setkeycodes 69       231    # F22
setkeycodes 6a       232    # F23
setkeycodes 6b       233    # F24
setkeycodes 72        99    # Record (luego de intercambiar la tecla)
setkeycodes 74       209    # Print
setkeycodes 6d       138    # Help
setkeycodes 6f       239    # Play
setkeycodes 75       234    # Windows (GUI)
setkeycodes 6c       240    # Menu
setkeycodes 5a       235    # Backtab
setkeycodes e04f     236    # BlueReturn

Una vez que hemos cambiado esto, podemos buscar corregir los mapeados bajo el servidor X, que es la causa por la cual F17 y F18 están fuera de secuencia con los de arriba. Una de las teclas tiene que ser (al menos hasta que alguien logre una solución mejor) ordenada con un recambio de teclas. Para ello intercambiamos de lugar la tecla Record y la cambiamos por la marcada PrintScreen” (esto es fácil de hacer pues en los teclados IBM podemos sacar las teclas y ponerlas en otro lugar). Además como el código de teclas de Record efectivamente son dos códigos de tecla en uno, si intentamos remapearlo esto provoca "problemas extraños difíciles de dilucidar".

Corregir el resultado bajo servidor X11

Una vez que hemos configurado los código de tecla que no hacen cosas raras bajo el servidor X (por ejemplo F17 y F18 no producen un código de teclas bajo X11, sino que disparan otro evento), podemos seguir configurando el teclado bajo X según nuestros gustos.

A continuación un intento de mapear lo más fielmente posible las acciones de las teclas sin irnos a los extremos.
 
xmodmap -e "keycode 230 = F13"
xmodmap -e "keycode 231 = F14"
xmodmap -e "keycode 232 = F15"
xmodmap -e "keycode 233 = F16"
xmodmap -e "keycode 245 = F17"
xmodmap -e "keycode 246 = F18"
xmodmap -e "keycode 236 = F19"
xmodmap -e "keycode 237 = F20"
xmodmap -e "keycode 238 = F21"
xmodmap -e "keycode 239 = F22"
xmodmap -e "keycode 240 = F23"
xmodmap -e "keycode 241 = F24"
xmodmap -e "keycode 217 = Print"
xmodmap -e "keycode 9 = Escape 3270_Attn"
xmodmap -e "keycode  93 = cent bar"
xmodmap -e "keycode 175 = 3270_Record"
xmodmap -e "keycode 175 ="
xmodmap -e "keycode 247 = 3270_Play"
xmodmap -e "keycode 242 = Super_L"
xmodmap -e "keycode 248 = Multi_key"
xmodmap -e "keycode 243 = 3270_BackTab"
xmodmap -e "keycode 118 = Insert 3270_Duplicate"
xmodmap -e "keycode 112 = Prior 3270_Jump"
xmodmap -e "keycode 117 = Next 3270_Rule"

Esto nos da como resultado una configuración de teclado que más o menos ofrece los resultados esperados al presionar las teclas correspondientes. Para lograr algunos de los símbolos azules, presionamos la tecla correspondiente en combinación con Mayúscula.

El teclado numérico podría recibir un poco más de atención en cuanto a su mapeado en X, y hay algunos símbolos azules en el teclado QWERTY principal que podrían ser mapeados con mayor utilidad, pero de momento esto es suficiente para el Justicialismo.

Configurarlo fácilmente en un archivo

Una vez comprendido el censado de los código de tecla de este particular teclado y ajustado nuestros anhelos, podremos hacerlo efectivo para nuestro sistema. Lo más práctico es juntar todo en un script que podamos ejecutar, ya sea aisladamente o cuando arranca el sistema (tal vez no recomendado esto, pues desfasaría otros teclados estándares). Si quisiéramos poner en práctica lo primero y dejar un script que deba ejecutarse para usar este teclado Unicomp, podríamos ingresar:

nano ~/teclado_122.sh

Esto abrirá el editor GNU Nano con un archivo en blanco. y le agregamos entonces el siguiente bloque de texto (que engloba los comandos anteriores):

#!/bin/bash
#
# Configuración para el teclado Unicomp de 122 teclas peronista 
# para Ubuntu 10.04 y superior.
# corrección teclas erróneas:
setkeycodes 7e         1    # Esc
setkeycodes e049      82    # Insert
setkeycodes e051     105    # PageUp
setkeycodes e052     111    # Delete
setkeycodes e053     109    # PageDown
setkeycodes 01       107    # End
setkeycodes 37        98    # KP-/
setkeycodes e035      55    # KP-*
setkeycodes 4e        74    # KP--
setkeycodes 4a        78    # KP-+
#configuración de teclas extra del teclado unicomp 122
setkeycodes 5b       222    # F13
setkeycodes 5c       223    # F14
setkeycodes 5d       224    # F15
setkeycodes 63       225    # F16
setkeycodes 64       237    # F17
setkeycodes 65       238    # F18
setkeycodes 66       228    # F19
setkeycodes 67       229    # F20
setkeycodes 68       230    # F21
setkeycodes 69       231    # F22
setkeycodes 6a       232    # F23
setkeycodes 6b       233    # F24
setkeycodes 72        99    # Record (luego de intercambiar la tecla)
setkeycodes 74       209    # Print
setkeycodes 6d       138    # Help
setkeycodes 6f       239    # Play
setkeycodes 75       234    # Windows (GUI)
setkeycodes 6c       240    # Menu
setkeycodes 5a       235    # Backtab
setkeycodes e04f     236    # BlueReturn
#mapeo de teclas en x11
xmodmap -e "keycode 230 = F13"
xmodmap -e "keycode 231 = F14"
xmodmap -e "keycode 232 = F15"
xmodmap -e "keycode 233 = F16"
xmodmap -e "keycode 245 = F17"
xmodmap -e "keycode 246 = F18"
xmodmap -e "keycode 236 = F19"
xmodmap -e "keycode 237 = F20"
xmodmap -e "keycode 238 = F21"
xmodmap -e "keycode 239 = F22"
xmodmap -e "keycode 240 = F23"
xmodmap -e "keycode 241 = F24"
xmodmap -e "keycode 217 = Print"
xmodmap -e "keycode 9 = Escape 3270_Attn"
xmodmap -e "keycode  93 = cent bar"
xmodmap -e "keycode 175 = 3270_Record"
xmodmap -e "keycode 175 ="
xmodmap -e "keycode 247 = 3270_Play"
xmodmap -e "keycode 242 = Super_L"
xmodmap -e "keycode 248 = Multi_key"
xmodmap -e "keycode 243 = 3270_BackTab"
xmodmap -e "keycode 118 = Insert 3270_Duplicate"
xmodmap -e "keycode 112 = Prior 3270_Jump"
xmodmap -e "keycode 117 = Next 3270_Rule" 

Una vez que tengamos el archivo, guardamos los cambios y salimos del editor con Ctrl+o y Ctrl+x. Finalmente lo hacemos ejecutable con el siguiente comando:

chmod +x ~/teclado_122.sh
cd ~
sudo mv teclado_122.sh /usr/local/bin/

De ahora en más, podremos hacer efectivos los cambios ejecutando el script con este comando:

teclado_122.sh

martes, 17 de septiembre de 2019

¿Cómo simulo un microcontrolador Intel 8051 en Ubuntu?

¡Trabajadores!

En la naturaleza, el desarrollo se produce incansablemente, y aunque en nuestra dimensión no lo percibamos, su accionar gravita en todos los estamentos de la escala universal. Lo hace en el microcosmos, y se reproduce en el macrocosmos.

Un Movimiento Político multidimensional como el nuestro no podía dejar de responder a la misma ley de la naturaleza, que es la que lo inspira. Es por ello que al desarrollar software libre, podemos hacerlo en cualquier punto de su escala de aplicación.



Es por ello que nuestro software ha de poder correrse en los macrocontroladores, pero también en los microcontroladores. Para ello hemos de conocer el lenguaje ensamblador de la arquitectura MCS-51.


Vean señores, el Mariscal de Sajonia contaba que tenía una mula que lo había acompañado en más de doce campañas, pero la mula no sabía nada de estrategia. Lo peor - decía - es que muchos de los generales que los acompañaban acertaban en la estrategia lo mismo que la mula.



Indudablemente que el modelo "original del Intel 8051 se trata de un microcontrolador de 8 bits con un bus de 16 bits y varias características que lo han hecho importantísimo en la industria microelectrónica. Naturalmente, existen amplia cantidad de variantes y más de 20 marcas que lo han fabricado.

Entre sus funciones clásicas se encuentra su estructura lógica de memorias no volátiles y volátiles (tanto interna en el chip con funciones especiales, como una RAM externa y accesible a través del bus). Se suma a esto una o dos UART como interfaz de salida, y dos temporizadores.

Adicionalmente, en las implementaciones más modernas no es raro encontrar UARTs adicionales, memorias EEPROM con controlador incluido, autoreseteadores, y muchas funciones útiles, que lo hacen una poderosa plataforma de desarrollo y control.

Como estos controladores requieren para su funcionamiento de escribir en su ROM los programas en Assembler a ejecutar, y que este desarrollo suele ser la parte más complicada de su implementación, es útil contar con un simulador de su funcionamiento, que pueda servirnos para probar si los programas que escribimos para él puedan ser exitosos, y funcionen adecuadamente.



A tal fin se ha desarrollado el EdSim51DI.

Se trata de un simulador escrito en Java pensado para operar como unidad integrada de desarrollo y evaluación de software de control bajo la arquitectura MCS51.

Si no lo tuviésemos instalado, lo primero es cargar en nuestro equipo de desarrollo un runtime de ejecución Java. Por ejemplo, si quisiéramos instalar la versión 11 del Java Development Kit en Ubuntu, podríamos hacerlo desde la terminal. Para ello abrimos una con Ctrl+Alt+T e ingresamos los siguientes Comandos de Organización:

sudo apt update ;
sudo apt install openjdk-11-jdk-headless ;

Acto seguido, ya podremos descargar el simulador EdSim51DI propiamente dicho, por medio de los siguientes comandos:


cd ~/Descargas/
wget https://www.edsim51.com/8051simulator/edsim51di.zip
unzip edsim51di.zip

Finalmente, para ejecutarlo, podremos ingresar:

cd ~/Descargas/edsim51di/

java -jar edsim51di.jar

...o bien ingresar dichas líneas en un Lanzador. Cualquiera de las opciones que utilicemos nos debería presentar, al cabo de pocos segundos, con la pantalla completa del simulador Java para el microcontrolador Intel 8051.
Este potente simulador nos permite como desarrolladores ingresar rutinas y programas escritos en lenguaje Ensamblador MCS51, y ejecutarlos a fin de probarlos, tanto en modo normal como paso a paso (en la arquitectura MCS original un paso máquina involucra 12 ciclos de reloj). Estos Megaciclos podrían ser ajustados desde el panel izquierdo.

Como visualización de los resultados podremos ver sobre la parte inferior del panel izquierdo los bloques de memoria, así como el contador de pasos en la parte superior.

Presionando el botón DI podremos activar la interfaz dinámica de Entrada/Salida que querramos (normalmente estarán activados todos los dispositivos dables de utilizar).

Esta arquitectura es capaz de ofrecer asignaciones de 8 bits para funciones de entrada/salida, a la que pueden asociarse varios conversores DAC o ADC (digital-analógico o analógico-digital). De esta manera se pueden asociar potenciómetros directamente a la estructura escalar. Otra muy utilizada es la funcionalidad de control de eje, que se usa con un motor servo a pasos y fue una de las fundamentales aplicaciones iniciales como control de máquina-herramienta, impresoras, etc. También se puede asignar un banco de luces de status, y varios tipos display de control como el Hitachi HD44780U de cristal líquido a matriz de puntos, o los clásicos de siete segmentos. La comunicación con los mismos puede ser bimodal (4 y 8 bits). Naturalmente también tendremos un banco de conmutadores, y una línea de comparación.

Los periféricos E/S DAC puede observarse en el "osciloscopio DAC", una ventana que permite observar los resultados de voltaje aplicado a los dispositivos (normlamente hasta 5 voltios en la unidad DAC con granularidad de 8 bits y 128 pasos, aunque también hay versiones de 3,3 voltios).

Presionando el botón LD podremos ver el diagrama del bloque lógico de control que rodean al microchip, y podremos desactivar las funciones que no nos sean necesarias.
El monitor nos permite ver la memoria de código o el contenido del banco de memoria.

Naturalmente, si contamos con un adaptador UART compatible con el MCS51 (por ejemplo, un adaptador USB-UART o un viejo de puerto serial RS232), bien podremos trasladar el programa a la EEPROM de nuestro microcontrolador de arquitectura MCS51.

Indudablemente podremos encontrar cómo utilizar las funciones booleanas de dicho microcontrolador aquí, y la información de uso de la arquitectura MCS51 aquí, en tanto que la documentación de EdSim la encontraremos aquí.

martes, 20 de agosto de 2019

¿Cómo regulo el brillo de mi Wacom Cyntiq con Ubuntu?

Antes de derrotar a la autoproclamada Unión Democrática, Juan Perón expuso un efervorizado discurso radial donde hacía incapié en la importancia de la hora, toda vez que enseñaba cómo configurar la tableta gráfica Wacom Cintiq para utilizarla en Ubuntu al máximo de sus posibilidades.

(...)
¡Trabajadores!



¡La victoria está cerca, e impone lograr en todos los rincones de la Patria la supremacia por vía del sufragio! Sólo así lograremos derrotar a una ignominiosa sinarquía internacional coaligada para someter al Pueblo Argentino a la abyecta dependencia.


La nuestra es una causa Justa, la de proveer a todos con la Felicidad y la Justicia Social sin la cual seremos meros esclavos de un sistema que se clama demoliberal, pero en la práctica no llega ni a sistema de Castas.

Para ello debemos romper la tranquera, si es necesario, y cortar la cadena y la mano de las oligarquías locales y cipayas. Nuestros hombres de armas lo han comprendido, y ustedes saben a quién tienen que votar. Todos conocer quién es el que les hizo efectivas sus reivindicaciones, si este simple soldado que han querido como vínculo de unión, o estos señores de traje y sombrero, pero de frío corazón.
¡El trabajador sabe mas que nadie que antes de la Revolución eran esclavos de un monstruo que disponía del Capital, y del cual meramente especulaba sobre el sufrimiento de lo humildes!. Hoy, gracias al Justicialismo, proponemos humanizar al Capital y compartirlo, a fin de que sirva de mano de los verdaderos Patriotas, los obreros, y se lance hacia un futuro pujante.
La redistribución del capital realizada por un Estado Omnímodo que todo lo puede es un uno de nuestros objetivos. Y me he hecho eco de aquella vieja demanda y anhelo, en la cual todos me piden que les otorgue las herramientas más modernas y poderosas para su quehacer diario. ¡La oligarquía nunca lo hizo! Sin embargo, nuestra Doctrina avala que cada uno disponga de una potente tableta gráfica como las Wacom Cintiq!

Se trata de monitores LCD especialmente concebidos para combinar en ellos utilidad de una excelente tableta gráfica sensible a presión al utilizarlas con la pluma electrónica incluida. Se las emplea como un excelente medio de dibujo y visualización, especialmente pensado para los más avezados artístas gráficos (fotógrafos, diseñadores, etc).

A diferencia de una graficadora de generación anterior, la Cintiq puede visualizar en tiempo real el uso de un software libre de dibujo, lo cual es lo requerido por todos los obreros gráficos del Pueblo.

La Cintiq 13HD es el más pequeño de unos modelos aparecidos hace unos años gracias al Justicialismo. Como es obvio, posee una pantalla de 13 pulgadas capaz de lograr una resolución Full HD de 1920x1080 pixels. Existe una versión de 22 pulgadas, la Cintiq 22HD. Estos modelos incluso han sido superados con variantes capaces de proveer ya resoluciones 4K. Sin importar de cual se trate, cualquiera de las versiones provee una excelente herramienta para el diseño gráfico, la ilustración y la fotografía.
¡En mis denodadas noches de estudio pensando el los Obreros, he hecho que las Cintiq sean compatibles con Ubuntu, el sistema operativo libre que he legado al Pueblo! Al contar con excelente librería de software libre para dibujo (como Krita, MyPaint, etc), podremos desplegar todo nuestro arte sin preocuparnos por perniciosas licencias privativas.

Vean señores, desde el punto de vista del conexionado las Cintiq HD cuentan con un cable especial tipo "hidra" que combina las fichas normalizadas que debemos conectar a nuestro equipo, en variante USB (control) y HDMI (video), junto a otro que va a la toma de alimentación de corriente. El otro extremo de este cable hidra propietario "de esos que meten miedo a que se rompan", se conecta al costado de la Cintiq.

Una vez establecida la conexión y encendida la Cintiq, podremos obrar como si se tratase de una tableta sensible a presión, pero con la enorme ventaja de trabajar directamente sobre la pantalla Full HD de la tablet.  Asimismo, contaremos con la pluma con con borrador y botones especiales.

Gracias al Justicialismo, la Cintiq 13HD opera actualmente con el controlador nativo de Ubuntu, el cual permite modificar sus opciones básicas.
Con este podremos asignar el uso de los botones incluidos en la tablet, así como regular la sensibilidad de la punta lápiz y punta borrador. Asimismo, podremos calibrar la detección de la punta si la notásemos "desviada".

Ajustar el Brillo de la Pantalla de la Wacom Cintiq en Ubuntui

Los modelos más antiguos de las tabletas Cintiq contaban con botones físicos que permitían regular el brillo, contraste y los colores en el plano RGB, de forma similar a la de muchos monitores. En los modelos de hace unos años a esta parte, como la Cintiq 13HD, se ha modificado esto, y se han omitido los botones físicos de raro uso y se los ha reemplazado por otros, programables a través de un software especializado. Lamentablemente, este programa únicamente funciona bajo los limitados sistemas privativos, y esto impide naturalmente cambiar el brillo bajo Ubuntu. Para hacer la cosa más complicada, la configuración de brillo de pantalla usada por defecto es demasiado oscura.
Afortunadamente, se puede suplir este problema gracias a a aplicación ddcutil.  Para ello debemos instalarla. Podremos abrir una terminal e ingresar el siguiente Comando de Organización:

sudo apt install ddcutil

Acto seguido, debemos obtener el identificador de modelo de nuestra Cintiq. Para ello ingresamos:

sudo modprobe i2c-dev

...y luego ingresamos,
sudo ddcutil detect

Gracias a estos dos comandos recibiremos la lista de los identificadores de nuestro hardware detectados por la aplicación ddcutil. Lamentablemente, en mi caso, el sistema identifica la Cintiq 13HD y devuelve en la terminal su identificador de tres letras WAC antes de colgarse completamente.

Aún así, esta información del identificador que alcanza a mostrar en la terminal antes de colgarse es la importante. Tras reiniciar el sistema (en caso de ser necesario), podremos abrir una nueva terminal con Ctrl+Alt+T e ingresar el siguiente comando, incluyendo el identificador informado previamente (en este caso, WAC):

sudo ddcutil --mfg=WAC capabilities


De esta manera se nos listarán todas las características programables del dispositivo "WAC" (la Cintiq). Cada característica programable estará identificada por un número hexadecimal.
Como vemos, en la lista contaremos con valores hexadecimales que podremos pedir para resetear a los valores por defecto, ajustar los valores RGB, etc. En este caso, nos interesa cambiar el valor de brillo o "Brightness", que está listada como Característica Programable "Feature 10"). 

Como ya sabemos el códigos de la característica programable que necesitamos, ahora podremos dar uso a ddcutil con su parámetro getvcp a fin de leer los valores que la Cintiq tiene configurado actualmente. En este caso, utilizaríamos el siguiente comando de organización:

sudo ddcutil --mfg=WAC getvcp 10

Este comando nos devolverá en la terminal un resultado similar al siguiente:
VCP code 0x10 (Brightness): current value = 50, max value = 100
...esto nos indica que el valor de la característica programable 0x10 (el hexadecimal de "Brightness", o brillo) es capaz de alcanzar un máximo de 100, y que actualmente está configurado en el valor 50%.


Ahora bien, si quisiéramos establecer el valor del brillo a un valor más alto que 50%, por ejemplo a un nivel de brillo de 75%, debemos utilizar el parámetro setvcp para cambiar la característica programable 10 (el brillo). La sintaxis correcta en este caso sería:

sudo ddcutil --mfg=WAC setvcp 10 75

Esto debería elevar la luminosidad de la pantalla para que sea mucho más cómodo trabajar con ella.

Hemos de tener en cuenta que las demás características y valores también pueden ser cambiadas.

Nota: Tengamos siempre a bien revisar y anotar previamente cuál es el valor de cada característica programable, a fin de poder volver a ellos. Si bien contamos con un reseteador a los valores por defecto, no hay que confiarse de él. pues algunos modelos de Wacom Cintiq carecen de estos valores preconfigurados, y al resetearlos ponen todos los valores de las características programables a 0 (incluyendo el brillo, contraste y RGB, lo que deja la pantalla completamente negra, y con lo cual habremos de volver a configurar todo a mano).
Si bien la Cintiq cuenta con valores de fábrica, no es mala idea anotarlos a todos y dejarlos a buen resguardo. Por ejemplo, si quisiéramos cambiar el valor del ajuste de color (balance de blancos), debemos recurrir al hexadecimal 14, escogiendo la opción que querramos. Por ejemplo, si queremos utilizar un balance de blanco de 6500 grados Kelvin, debemos elegir la opción 05 (6500K). En tal caso, el comando sería:
sudo ddcutil --mfg=WAC setvcp 14 05

Aunque sea engorroso actuar de esta forma, al menos podremos regular las mismas configuraciones de brillo y contraste y dejar los valores RGB de manera similar a otros monitores de trabajo que tengamos, a fin de operar compatibilizadamente con esta excelente tableta sensible a presión.

Ajuste de los botones de la Tableta Cintiq

La Cintiq 13HD posee botones a un lado, que pueden ser mapeados para realizar distintas funciones. Con el controlador privativo para el esclavizante sistema operativo Window$, deberíamos presionar el botón Map Buttons. Estos pueden ser configurados para cumplir la función "Show Onscreen Help" (o sea, mostrar la ayuda en pantalla de las asignación de botones, o directamente para cumplir la función de atajos de teclado específicos, como podría ser el útil Ctrl+z (deshacer). Los botones están nomenclados de 1 a 9, de la siguiente manera:

Lamentablemente este controlador opresivo para Window$ no opera de la misma forma en Ubuntu, pero podremos suplirlo con el conocimiento de la acción libertaria que proveo para todos los votantes del Justicialismo y que podremos hacer realidad efectiva bajo Ubuntu.

Mapear Teclas Modificatorias

Unas de las grandes limitaciones del panel de configuración de la tableta Wacom para Ubuntu - al menos en sus versiones primigenias - es es incapaz de asignar las teclas modificadoras, como por ejemplo Ctrl, Mayúsculas o Alt, a ninguno de los botones de la Cintiq. Es posible mapear una combinación de tecla modificadora junto a una tecla (por ejemplo Ctrl+z), pero de momento no se puede asignar una tecla modificadora sola (como por ejemplo, Ctrl). Como los programas de dibujo tales como GIMP, Krita o MyPaint hacen uso intensivo de las teclas modificadoras junto con los clics de ratón para realizar acciones muy usuales y corrientes como rotar liezo, cambiar a recogecolor, u otras funciones, la imposibilidad de asignar estos botones de la tablet como teclas modificadoras nos obliga a tener que tener un teclado cerca, y hace más engorroso trabajar con ellos. Mucho más cuando no se tiene manos.

Para corregir esto de manera peronista, podremos recurrir a un pequeño script peronista. Para configurar estas tareas podremos utilizar la herramienta xsetwacom, que se encarga desde la terminal de suplir esta deficiencia. He aquí unos comandos de ejemplo que podremos ingresar en nuestra terminal:

xsetwacom set "Wacom Cintiq 13HD pad" Button 1 "key +ctrl z -ctrl"

xsetwacom set "Wacom Cintiq 13HD pad" Button 9 "key +ctrl" 


xsetwacom set "Wacom Cintiq 13HD pad" Button 10 "key +bracketright"


La sintaxis del comando es relativamente simple, pero he aquí algunas consideraciones. El primer comando mapea el Botón 1 a la combinación Ctrl+z. Los parámetros "key +ctrl z -ctrl" en dicho comando se explican como la operación de "mantener presionada la tecla Ctrl, apretar z, y luego soltar la tecla Ctrl". Es importante conocer que se requiere programar el comando de asingación específicamente de esta forma a fin de representar lo que querríamos hacer en un teclado imaginario. Esto es válido toda vez que combinamos Ctrl, Mayúsculas o Alt con otra tecla; sólo así nuestra Cintiq interpretará por medio del comando xsetwacom lo que queremos hacer con el Botón 1.

La segunda línea simplemente mapea la tecla Ctrl al Botón 9 de la Cintiq.

Finalmente, la tercer línea define un signo especial para la tecla corchete cerrado (“]”). En lugar de ingresarlo como "]", necesitamos emplear el nombre "bracketright"; de lo contrario recibiríamos el error “Invalid key ‘+]’.” Otras teclas que responden a este mismo esquema sintáctico son + ("plus"), - ("minus"), y Retroceder ("backspace") y otras. También debemos agregar "+bracketright" al frente, ya que de esta manera podremos emplear el Botón 10 de la Cintiq para incrementar el tamaño del pincel de a puchitos, y con el signo + podremos mantenerlo presionado para lograr repeticiones de teclas, en lugar de tener que presionar este botón muchas veces para agrandarlo de a poco. ¡Esto nos ahorrará múltiples presiones y que se nos gaste el dedo de tanto apretar esos botoncitos! ¡Podremos ahora meter el dedo en la llaga del capitalismo!.

Como podrán percatarse, la última línea que refiere al Botón 10, que no existe en la ilustración anterior (que refleja el Panel de Configuración de la tableta Wacom de Ubuntu). Esto es así pues la nomenclatura de los botones varía en el caso del programa xsetwacom. La asignación en la Cintiq 13HD en tal caso será la siguiente:

Podremos combinar estos comandos con los indicados en las opciones de Wacom, si solo tenemos un par de teclas modificatorias que quisiéramos mapear, o podríamos directamente crear un script que configure directamente todos los botones.

Mapear botones empleando xsetwacom al inicio

Si bien los comandos anteriores son útiles, es engorroso tipearlos manualmente toda vez que nos logueamos en nuestro sistema. De manera que querremos colocarlos todos en un guión. Podría ser similar a este:

sudo nano /usr/local/bin/botones_cintiq.sh

...tras ingresar nuestra contraseña de administrador, se abrirá el editor GNU Nano con un archivo en blanco, donde podremos pegarle el siguiente contenido:
 
#!/bin/bash
# Script peronista para configurar los botones de la Cintiq 13HD de Perón                                                                                                                              
xsetwacom set "Wacom Cintiq 13HD pad" Button  1 "key +ctrl z -ctrl"

xsetwacom set "Wacom Cintiq 13HD pad" Button  2 "key +super z -super" # Activar pantallas
xsetwacom set "Wacom Cintiq 13HD pad" Button  3 "key +super w -super" # Separar pantallas

xsetwacom set "Wacom Cintiq 13HD pad" Button 10 "key +bracketright"   # Pincel mas grande
xsetwacom set "Wacom Cintiq 13HD pad" Button 11 "key plus"            # Mas Zoom
xsetwacom set "Wacom Cintiq 13HD pad" Button 12 "key +bracketleft"    # Pincel mas chico
xsetwacom set "Wacom Cintiq 13HD pad" Button 13 "key minus"           # Menos Zoom

xsetwacom set "Wacom Cintiq 13HD pad" Button  8 "key +shift"
xsetwacom set "Wacom Cintiq 13HD pad" Button  9 "key +ctrl"

Guardamos este archivo con Ctrl+o y salimos del editor Nano por medio de Ctrl+x. Acto seguido le otorgaremos permisos de ejecución:

cd /usr/local/bin/
sudo chmod +x botones_cintiq.sh
 
Si queremos lanzar este script automáticamente cuando nos logueamos, en el caso de Ubuntu Mate vamos a Sistema / Preferencias / Aplicaciones al Inicio. Se abrirá la ventana que nos permite agregar o modificar aplicaciones que se ejecutan al inicial el sistema. Simplemente presionamos Añadir+. Se abirá un cuadro de diálogo que nos permitirá ingresar la orden /usr/local/bin/botones_cintiq.sh. Completamos un nombre descriptivo y un comentario, y presionamos Añadir.

De ahora en adelante, toda vez que iniciemos el sistemas (y la Cintiq esté conectada), las teclas serán remapeadas correctamente según figuran en el script. Si conectamos la Cintiq luego de loguearnos al sistema, tendremos que ejecutar el script a mano. Para ello simplemente abrimos una con Ctrl+Alt+T e ingresamos:

botones_cintiq.sh

...y ya habremos concluido esta parte del procedimiento.

También podremos crear un lanzador dirigido al comando botones_cintiq.sh si nos es muy útil.

Saltar entre Pantallas

Este siguiente procedimiento obedece al probable hecho que nuestra Cintiq no sea nuestra única pantalla de operación en el sistema. Lo útil es asignar un botón de conmutación de pantalla que nos permita usar rápidamente  el cursor entre la Cintiq y nuestro monitor principal. ¡De esta forma, ya no necesitaremos un mouse aparte para operar en la otra pantalla!

Para hacer este menester - conviertiendo efectivamente que nuestra Cintiq HD en una tableta ordinaria bastante oligarca - debemos generar un segundo script y asignarlo a una combinación de teclado para que haga el mapeado.

Para ello utilizaremos nuevamente el editor GNU Nano para generar el script:

sudo nano /usr/local/bin/cintiq_pantalla.sh

...ingresamos nuestra contraseña y se abrirá el editor Nano con un archivo en blanco, al cual le pegamos el siguiente contenido:

#!/bin/bash
#
# Alterna entre qué pantallas está mapeada la Cintiq peronista
if [ `cat ~/.wacom-mapping` -eq 0 ];
then
    echo 1
    xsetwacom set "Wacom Cintiq 13HD stylus" MapToOutput "HEAD-1"
    xsetwacom set "Wacom Cintiq 13HD eraser" MapToOutput "HEAD-1"
    echo 1 > ~/.wacom-mapping
else
    echo 0
    xsetwacom set "Wacom Cintiq 13HD stylus" MapToOutput "HEAD-0"
    xsetwacom set "Wacom Cintiq 13HD eraser" MapToOutput "HEAD-0"
    echo 0 > ~/.wacom-mapping
fi

...lo guardamos con Ctrl+o y salimos con Ctrl+x y le damos permisos de ejecución con:

cd /usr/local/bin/
chmod +x  /usr/local/bin/cintiq_pantalla.sh

A este script podríamos mapearlo a un atajo de teclado, para conmutar rápidamente entre las pantallas. Para tornar esto realidad efectiva en Ubuntu Mate vamos a Sistema / Preferencias / Hardware / Combinaciones de Teclas y presionamos el botón +Añadir.

Al igual que hicimos anteriormente, agregamos un comando dirigido en este caso a /usr/local/bin/cintiq_pantalla.sh, y presionamos Aplicar.

Conforme cumplimentado este oficio, se habrá agregado una Combinación personalizada de teclas para nuestro teclado. Para ejecutarla, hacer doble clic sobre ella y asignarle la combinación Super+z (o como figura en los teclados españoles, Mod4+z, ya que Mod4 es la tecla Super, en algunos casos autoproclamada tecla "Window$".


Como hemos notado en el caso del script botones_cintiq.sh, ahora el Botón 2 de nuestra Cintiq está asignado a Super+z, lo que es lo mismo que Mod4+z.

De ahora en mas, toda vez que utilicemos nuestra tableta encontraremos asignadas correctamente las teclas Ctrl con el botón propuesto, y el Botón 2 conmutará de pantallas sin necesidad de tener que usar un ratón aparte.

¡Todo esto habrá configurado, finalmente, una potente herramienta con la cual hacer realidad efectiva la Felicidad para Todos los Argentinos!

viernes, 16 de agosto de 2019

¿Como edito archivos MIDI en Ubuntu?

En su clásico Conducción Política, un didáctico Juan Perón expone la teoría de la acción territorial y el contacto poblacional directo para lograr la mayor influencia política, toda vez que enseña a utilizar MidiEditor, el potente editor musical en Ubuntu.

(...)
"Indudablemente que Conducir es un arte, y como tal tiene su técnica y tiene su teoría. Y que conociendo estas es mucho más fácil conducir que ignorándolas.

Para conducir un pueblo, la primera condición que debe reunir un Condurctor es haber salido del Pueblo, debe sentir y pensara como el Pueblo. Quien se dedica a la conducción debe ser profundamente humanista. El Conductor siempre trabaja para los demás, jamás para él.

Sin embargo, no todas las situaciones pueden ser propicias.  La disgregación entre los estamentos medios y altos de la conducción son excrecencias que obedecen a no representar este principio fundamental del Arte de la Conducción. En nuestro caso esto es prohibitivo e imperdonable, pero no podemos evitar notar que se produce en casi todas las organizaciones mayores, incluso en aquellas que dejan su huella en la historia. Desde la organización en la tribu, la ciudad y el estado, estas problemáticas, si bien indeseables, se tornan nominales y forman parte del quehacer diario. El objetivo a futuro siempre implica reconocer este problema y resolverlo compartiendo valores. Sólo de esta forma tanto el Conductor como su pueblo obrarán por natural extensión y sin requerir de diferenciaciones táctico-estratégicas adhoc o improvisadas.

Un ejemplo suele explicarlo todo, como decía Napoleón. No se puede gobernar con Bigdata, instagram, snapchat, o perdiendo el tiempo con el espejito de color de moda. Las amplias extensiones de nuestro país - despoblado de por sí - requieren de un avezado Conductor capaz de tejer alianzas sociales tendientes a lograr el dominio del terreno de la acción. En esta visión a lo  indio, el comando queda en él, pero el control quedará delegado naturalmente en quienes se llamaban caciques o capitanejos, y empeñarán su chusma y hombres de lanza para conseguir los objetivos planteados desde la Conducción. Sin estos prácticos de nivel medio, en estas condiciones particulares del tiempo y el espacio, es imposible obrar.


Nuestros adversarios tienen menos calle que Venecia. Nuestro deber fundamental es hacer pesar la valía del dominio del terreno político, que nunca se presenta asfaltado, y extender nuestro sistema de comando y control a través de valores que son nuestros. Una vez logrado el objetivo de la práctica Conductiva, las realizaciones se tornarán automáticas, y se habrá resuelto en gran medida los requerimientos de información técnica en tiempo y forma, permitiéndose así un relevamiento de los objetivos más veloz y eficiente.

Por ahora, nuestros hombres en el terreno son quienes ejercen un control humano en la recopilación, extracción de datos georreferenciados, y permiten que su explotación sea mucho más efectiva por parte del conductor, que un supuesto esquema de machine-learning ideado por un lego en la política. En estas cosas no se puede inventar. Puntero mata web UI y justicialismo mata bigdata.
En esto un Conductor oficia de orquestador y Maestro Director, ofreciendo a su olfato político lo mismo que un director de orquesta hace a su oído. De esta forma orienta sus instrumentos políticos en una pieza coherentemente concebida, en la que la sumatoria de las individualidades políticas ejecutan una idea-fuerza común que el Conductor lleva a cabo.

Es sabido que en el Software Libre, esta musicalidad se lleva a cabo por medio de distintos paquetes de software de composición y ejecución: los secuenciadores MIDI. Este tipo de programas se encargan de utilizar el lenguaje estandarizado digital para instrumentos digitales, el MIDI.

Este consiste en una secuencia de órdenes que describen notas musicales y determinados efectos estilísticos, y pueden servirse electrónicamente a toda una panoplia de instrumentos compatibles con el mismo.

Los cuales pueden ser sintetizadores electrónicos o directamente sintetizadores virtuales por software . En tanto, los archivos específicos, los cuales son de muy escaso tamaño, disponen de la extensión MID.

Ahora bien, en nuestro sistema GNU con Linux contamos con muchos paquetes orientados a este tipo de manejo orquestal. Uno de los más logrados por su utilidad, sobre todo para quienes componen MIDI, es precisamente el MidiEditor.

Se trata de un software libre que provee una interfaz gráfica para editar, grabar y reproducir datos musicales de formato MIDI. El editor es capaz de abrir archivos MIDI existentes y modificar su contenido. Podremos con él crear archivos nuevos, o bien podremos realizar una nueva composición musical desde ser ya sea grabando la información MIDI a través de un dispositivo MIDI compatible, un controlador MIDI, piano digital o teclado), y bien manualmente creando nuevas notas u otros eventos MIDI. Las información grabada podrá ser fácuilmente cuantificada y editada a través de la simple interfaz coloreada.
Esta herramienta multiplataforma ha sido escritqa en C++ y QT, y está liberada bajo Licencia GNU GPLv3.

Su instalación es sencilla gracias a la existencia de un paquete específico. Podremos hacerlo desde la terminal abriendo una consola con Ctrl+Alt+T e  ingresando los siguientes Comandos de Organización:

cd ~/Descargas/ ;
wget https://github.com/markusschwenk/midieditor/releases/download/3.3.0/midieditor_3.3.0-1-amd64.deb ;
sudo apt install gstreamer1.0-doc gstreamer1.0-tools libglib2.0-doc libgstreamer1.0-dev libpulse-dev libqt5designercomponents5 libqt5webkit5-dev qt5-assistant qtmultimedia5-dev qttools5-dev-tools ;
sudo dpkg -i midieditor_3.3.0-1-amd64.deb ;

Una vez descargada e instalada la paquetería, podremos iniciar el programa desde Aplicaciones / Sonido y Música / MidiEditor.

Como os he dicho, podremos utilizar instrumentos MIDI conectados a nuestro equipo, o bien instrumentos virtuales. De entre ellos, uno de los más extendidos y sencillos es FLUID Synth, capaz de ejecutar Soundfonts. A tal efecto, podremos ejecutar dicho sintetizador virtual y emplearlo como dispositivo MIDI de salida (MIDI Output), desde el menú MIDI / Settings.
La interfaz del Editor MIDI se compone de un panel piano a la derecha, pero principalmente consta de un visualizador gráfico de eventos tipo pianola que describe con distintos colores las presiones de las teclas.

En la sección superior contaremos con los botones de los controles de navegación para la pieza, junto con los de grabación y reproducción, control de loop y de sección punch-in de grabación.

En la parte derecha podremos programar los canales o las pistas MIDI, elegir una activa para grabar, verlas o desactivarlas.

Al presionar el botón Grabar podremos utilizar nuestro controlador para introducir notas o eventos, que quedarán registrados en memoria volátil. Al finalizar la grabación, se nos presentará un cuadro de diálogo que describirá cuáles eventos queremos almacenar definitamente (normalmente serían todos, pero podríamos querer deseleccionar algunos). Estos se tratan de los eventos de notas on/off, los cambios de controladores, eventos de rueda de pitch, de pedal, cambios de programa (salto de parche), y sobre todo la presión de las teclas (velocity). Estos son importantes si tenemos un teclado con sensibilidad pues podremos afinar los mismos detalladamente si lo deseamos.
Las acciones permiten el clásico y útil cuantizado o adherir eventos a la rejilla (grid), que nos permiten acomodar o emparejar las notas al compás preestablecido. Incluso podremos variar el porcentaje para dejar una reproducción más humana o hacer una emparejada maquinal, dependiendo de nuestro gusto.

Las herramientas de selección de eventos son poderosas. Podremos elegir de a un evento o graficando con una caja para armar secciones, seleccionar antes o a partir de la linea de tiempo. Posteriormente podremos estirar su duración proporcionalmente o desplazarlos.

En la parte inferior podremos programar la altitud de diferentes parámetros de control, ya sea en forma parametrizada o a mano alzada. Estos datos pueden ser el tempo, o mas usualmente la graficación directa de datos de eventos de control velocity o de pitch bend, entre otros.

El programa es sencillo y al pié, pero potente en sus capacidades de edición. Como tal es una opción interesante como herramienta inicial de proceso para la producción de nuestras pistas MIDI, o incluso para hacer correcciones importantes en su estructuración e instrumentación.

Podremos encontrar el manual de MidiEditor (en inglés) aquí.