Screen layout switcher para Linux

Mi setup de trabajo consiste en la laptop (Lenovo x1 del 2015), un monitor externo de 22" y un combo teclado + mouse inalambrico del supermercado. Actualmente estoy usando Pop!_OS

El monitor está en un brazo que me permite acomodarlo y girarlo en cualquier posición. El brazo está en una pequeña alzada que me permite ganar unos 13cm de altura, de manera que puedo usarlo para hacer standup desk junto con mi mesita.

Trato de trabajar al menos la mitad del día parado y a veces me voy con la compu a otra parte de la casa. Así que todo el tiempo estoy cambiando la configuración de la/s pantalla/s. Hacer esta tarea a mano me llevaba mucho tiempo y además es dificilisima la motricidad con el mouse si la pantalla está girada.

Dentro del soporte de "funciones avanzadas de teclado" de los linux modernos está "switch-monitor". Gnome mapea esta funcion con <Super>+P además de la tecla especial del teclado.

$ gsettings get org.gnome.mutter.keybindings switch-monitor
['<Super>p', 'XF86Display']

El problema con esta funcionalidad es que los modos están predefinidos: monitores espejados, sólo externa, sólo integrada o ambas "unidas" pero asumiendo ambas horizontales y el monitor izquierdo a la derecha (y el mio queda a la izquierda de la laptop).

Pregunté en twitter y varios amigos me apuntaron a la herramienta arandr que permite hacer las mismas configuraciones de pantallas que la herramienta de Gnome (de manera manual y visual) con la diferencia de que los modos definidos se pueden guardar como un comando de xrandr. Por ejemplo este setup de ambas pantallas encendidas y horizontales

arandr example

se guarda desde arandr (¡y se puede abrir para editar!) como un script

(blog) tin@pop-os:~/.screenlayout$ cat 2horizontal.sh 
#!/bin/sh
xrandr --output eDP-1 --mode 1920x1080 --pos 1920x283 --rotate normal --output DP-1 --off --output HDMI-1 --off --output DP-2 --off --output HDMI-2 --primary --mode 1920x1080 --pos 0x0 --rotate normal

Asi es que definí con esa herramienta los modos frecuentes que uso

~/.screenlayout$ ls *.sh
2horizontal.sh  ext-horizontal.sh  ext-vertical.sh  lapt-solo.sh

Lo que quería luego era un atajo de teclado que me permitiera rotar entre esos modos. Hice un script en python que lo dejé en la misma carpeta

#!/usr/bin/env python3
import itertools
import subprocess
from pathlib import Path

folder = Path(__file__).absolute().parent
layouts = itertools.cycle(list(folder.glob('*.sh')))  # roundrobin over the layouts. 


try:
    # if there is a last used, move to the next one
    last = (folder / '.last').read_text()
    print("last found", last)
    layouts = itertools.dropwhile(lambda x: str(x) != str(last), layouts)
    next(layouts)   
except FileNotFoundError:
    pass 


current = next(layouts)
print(f"switching to {current.name}")
# write the last
(folder / '.last').write_text(str(current))

subprocess.call([str(current)])

Este switcher.py busca todos los archivos .sh en la misma carpeta y ejecuta el que sigue al ultimo ejecutado, que se guarda en un archivo .last (si no existe, el primer modo será el primero listado).

Decidí deshabilitar el atajo por default

$ gsettings set org.gnome.mutter.keybindings switch-monitor "['XF86Display']

y agregué un shortcut que ejecuta ~/.screenlayout/switcher con Ctrl + Super + P (en gnome: Configuración -> Keyboard -> Combinación de teclas -> Customize Shortcuts -> Combinación Personalizada )

image

Ahora puedo pararme cuando quiera, levantar y girar el monitor y apretar Ctrl + Super + P las veces necesarias hasta que quede como quiero.

move-imports, o cómo calmar el TOC de un pythonista

Una historia de éxito: un grupito pequeño de programadores (o quizas sólo uno) a pura pasión, café y feedback de sus usuarios mete miles de lineas de código que logran hacer funcionar un negocio.

Parte del éxito, supongamos, es porque el sistema está hecho en Python, que se eligió porque es versátil y pragmático para obtener resultados rápidos. Pero se sabe: en el vértigo la pasión, el feedback y el café no cabían muchas elegancias ni había tiempo para estilos o convenciones. Caminante no hay camino, se hace camino al andar, dijo Machado, refiriéndose a la deuda técnica que toman las startups en sus inicios.

El negocio comienza a crecer, hay más demandas de los clientes y la cosa está tan fea que algo, alguito, hay que mejorar. Como, por suerte, la cosa va bien, se contratan nuevos programadores que tengan experiencia en Python específicamente. Y estos nuevos programadores experimentados, los pythonistas, vienen con sus mañosas convenciones del lenguaje a cuestas. Una de ellas está tallada en piedra: salvo ineludibles excepciones, los imports van en la cabecera del módulo y en un orden en particular.

Hay justificación, dicen los pythonistas. Simplificar la lectura, saber a simple vista de qué depende un módulo, tener bloques de código más chicos, no repetirse. Pero, aceptémoslo, es un TOC.

Leer más…

El mono salta entre las ramas. El desarrollador también

Cuando laburamos con git, necesitamos frecuentemente cambiar de rama, sea porque estamos haciendo un feature mientras esperamos que alguien haga review de otra cosa y eventualmente pide algo, sea porque somos nosotros los que checkouteamos el branch de un compañero para probar algo.

Ir y volver entre ramas es fácil porque basta usar - que es un alias del branch previo.

$ git checkout master
Switched to a new branch 'master'
$ git checkout -
Switched to branch 'writing'

git checkout - es equivalente a la forma general git checkout @{-1} y si cambiamos el -1 por -N volveremos al enésimo branch en que estuvimos.

El problema es que si no nos acordamos el nombre del branch, mucho menos podriamos acordarnos el orden cronológico en el que lo usamos.

Leer más…

Miau: cuando el gato dice la verdad

Cuando se cumplieron los primeros 7 meses de su gestión, el presidente Macri dió una entrevista exclusiva a periodistas del canal Telefé. Horas después apareció este video en las redes, cuyo autor o autora desconozco:

Ahí estaba el humor, el fruto más gozoso del ingenio popular, para salvarnos a carcajadas. No para evadirnos de la realidad sino, al contrario, para vencerla, para enfrentar la amargura que algunas certezas traen (ya sabíamos a esa altura, con devaluación a precios y tarifazos en curso, que las advertencias no habían sido una "campaña del miedo"). Pero era aún más: era un ejemplo de ese humor que enuncia verdades difíciles de escuchar de otra manera.

Simplemente me pareció genial. Me acordé, por supuesto, de la entrevista a Homero en el capítulo de la Venus de jalea y también de un cortometraje español que ví hace mucho titulado "Lo que tú quieras oir", cuyo argumento se basa exáctamente en la creación de un mash-up de audio como alivio de una situación dramática.

Cada discurso o entrevista de Macri me parecía (me parece) un puesta en escena cínica, plagada de mentiras, floja de fonética y con pésimo acting. Necesitaba más de estos videos que le hagan decir la verdad.

Leer más…

El padronazo cordobés

Open Data Córdoba es un colectivo abierto y multidisciplinario sin fines de lucro cuyo objetivo principal es difundir y transparentar el uso de la tecnología y los datos masivos para beneficio del conjunto de la sociedad, especialmente en la provincia de Córdoba.

El grupo nació en época de elecciones, intentando echar un manto de luz a las sospechas fundadas de desprolijidades en el escrutinio provisorio de las legislativas de 2013. Luego de muchas otras iniciativas y bastante perseverancia docente de algunos de nuestros compañeros, nuestra contribución ha empezado a ser reconocida desde los medios locales, algunas agrupaciones políticas y otras organizaciones de la sociedad civil que abogan por la transparencia y el fortalecimiento de las instituciones.

En este contexto, el portal de noticias Cba24N, perteneciente al grupo de Servicios de Radio y Televisión (SRT) de la Universidad Nacional de Córdoba, nos ha invitado a realizar análisis de datos "en vivo" el próximo 25 de octubre, día de las elecciones nacionales.

Hay muchas ideas para ese día que ojalá podamos llevar adelante, aunque vale resaltar (atajarse) que se trata de una tarea totalmente voluntaria . Mientras tanto, el domingo pasado me dediqué a jugar con algunas agregaciones sobre el padrón de Córdoba para encontrar "notas de color" analizando nombres y apellidos de los votantes

Leer más…