sadasant

Daniel Rodríguez
{ "tags" : [ "spanish" , "surrealism" , "fantasy" , "love" ] , "title" : "En otra vida" }

Al abrir los ojos me encontraba somnoliento y pesado, el último sueño que había tenido era uno de muchos con intensión similar: laberintos en la cotidianidad. A veces lo soñaba en escaleras de ministerios públicos que se repetían infinitamente, o que llevaban a puertas escondidas en las esquinas del techo, a las cuales debía entrar por una fuerza indescriptible. En otras oportunidades el escenario era un aeropuerto de innumerables escaleras y pasillos, con aviones de varios pisos y con caminos cerrados sin aviso; el sueño se dibujaba intencionalmente confuso y sus senderos me dirigían fácilmente a saltar entre barandas o colgar de algún borde, cualquier situación embarazosa.

Esta vez recordaba estar expuesto en el piso uno de un centro comercial, intentando llegar al cine por un pasillo tan estrecho que debía atravesarlo agachado, para que el vértigo no me tentase a saltar. Al lograr asomar mis ojos por el borde de la entrada, muy a mi decepción, estaba cerrado, por lo que debía regresar. Informé a los otros detrás de mi y ellos saltaron al piso de abajo. Absurdo. En todos esos sueños me preguntaba: ¿por qué tanto esfuerzo para aquellas nimiedades?

No siendo indescifrable el motivo, como un epíteto de la cotidianidad nacional, pasé a recorrer hacia atrás mis recuerdos matutinos y encontré un sueño profundamente incómodo.

Me hallaba en una fiesta techada bajo la luna. Entre la avalancha de sonidos típicos de aquella ocasión ocurría el despreciable andar de personas desconocidas, desviviéndose. Ya me empezaba a saturar. Caminando entre habitaciones en búsqueda de algún sitio tranquilo, me topé con tantas escenas que el impulso de salirme lograba mermarse. Fui por una bebida, y casi andando sobre cuerpos, llegué al bar. Me serví un trago. Al sorbo, presumí sentir alivio, pero sentí mareos y me desplomé sobre alguien.

Desperté en una calle. Caminé varias cuadras sin distinguir nada. Pregunté por algún sitio de comida y desayuné. Andaba sin celular y sin identificación. Pasé varias horas intentando ubicarme, sin resultados. Me preocupé, pero la situación imperaba acciones, por lo que procedí a encontrar estadía. Por fortuna cargaba algo de dinero.

Varios días después, me encontré con una figura conocida: era mi novia, al menos era quien yo recordaba como mi novia, pero no me reconocía en lo absoluto. Manejé la situación para que no se alarmase y prontamente nos hicimos amigos.

Coordinamos varios viajes, paseamos en un carro viejo que ella tenía. Conocí algunas montañas cercanas, calles comerciales y plazas. Era un pueblo pintoresco. Me recordaba a Mérida, pero con edificios más grandes.

A las semanas ya me había invitado a quedarme en su lugar.

En aquel pueblo de grandes pilares, ella trabajaba en un edificio y yo encontraba trabajo por Internet desde su casa.

Una tarde, en su casa, me sentí cansado y me acosté; no entendía qué pasaba, ¿fiebre? Cerré mis ojos y al abrirlos, ya no estaba. No estaba en su mundo. Estaba en mi casa, vi la fecha y era el día después de esa fiesta terrible. De algún modo había logrado llegar a mi apartamento. Me agarré la cabeza con las manos y empecé a llamar a mis amigos, ¿quién me trajo? - uno de ellos confirmó haber sido y me comentó que yo andaba intoxicado, que él creía que había consumido alguna droga, me dijo: "no se en qué andas, pero ese estado no era normal, cuidado con meterte en algún peo". Fue droga. En mis contactos no estaba ella. Algo tenía que hacer.

Empecé a buscar y luego de unos días conseguí un posible vendedor. Esa noche me puse ropa discreta y lo busqué. Me hizo montarme en su carro, le di el dinero y me entregó la substancia. Me la introduje. Llegó el mareo sin falta y relajé mis músculos. Caí dormido. Desperté tirado en el suelo.

Caminé varias cuadras y logré ubicarme. Estaba acelerado, pues tenía que encontrarla. Pronto supe cómo llegar a su casa, toqué el timbre y allí estaba. Sentía su odio por haberme ido, pero yo estaba feliz. No quise explicarle, no me creería. Decidí intentar convencerla de otra manera, le dije que había ido a explorar una montaña. Luego de algunos días, logré recuperar su confianza y regresé a su lugar. En unas semanas llegaría la navidad.

Pasamos Diciembre juntos. Hizo frío y nos hizo bien la compañía. Nos acostumbramos una vez más.

Un día de Enero, recordé que regresaría; quizás muy tarde, pues empecé a sentir los mareos. Corrí a por ella, tomé un taxi hacia su trabajo, le llamé, nos encontramos afuera. Le expliqué y ella no comprendió, se molestó y salió a caminar en otra dirección, caminé detrás de ella, le dije "lo siento", me detuve, sentía que me iba. Preferí la sombra, para no despertar sospechas. Casi sin consciencia, la vi asomarse, pero ya me había ido.

Desperté en el carro de quien me había vendido la substancia. ¡Qué angustia! Regresé acelerado, molesto. En aquel sueño de la fiesta, no existía ella, sólo en aquella ciudad, ¿cómo era posible?, necesitaba más, necesitaba volver a verla, y encontrar algún modo de quedarme.

Recordar haber soñado eso, estando acostado en mi dormitorio, en un país distinto al de ella, me trajo un sentimiento profundamente incómodo. Aproveché para escribirle y contarle mi historia.

Daniel Rodriguez
Soñé que vivía otra vida y que en ella, un día por accidente, en una fiesta indeseable, probé sin querer una droga que me hizo viajar en el tiempo.
En ese viaje, entre mi confusión y mi sorpresa, me topé contigo
Nos enamoramos
Viajamos juntos, hicimos pequeñas aventuras, conocí tu mundo y en un punto me desaparecí: regresé a mi tiempo
Desesperado, busqué entender qué había ocurrido y comprendí que era una droga, así que busqué más de ella. Encontré un dealer, y le pagué buen dinero, me llevó en su carro y me dio la droga y en menos de lo examinable ya estaba en tu mundo
Te busqué, te dije que había ido a una montaña, regresamos, pasé navidad contigo
Un día, recordé que regresaría
Estaba en tu casa y tú en el trabajo, te fui a buscar, te explique, te molestaste, entre lágrimas te alejaste. Fui tras de ti y empecé a verme desaparecer, volteaste a buscarme y me conseguiste en el último instante, ya no estaba, estaba en el carro del dealer y la desesperación regresaba, necesitaba volver a estar contigo

Recomendación musical:
Bohren & der Club of Gore - Destroying Angels.

by-nc-sa Daniel Rodríguez.
{ "tags" : [ "narrative" , "spanish" , "fantasy" ] , "title" : "Citando a Iria" }

Mi buen amigo @jobliz me ha compartido un fragmento de uno de sus escritos, en el cual un personaje llamado Iria Ferreira se expresa de la siguiente manera:

La primera enseñanza que se le debería dar a una persona es que las buenas intenciones no necesariamente te llevan a buenos resultados, ni tampoco a ayudar a otras personas. Hay mucho egoísmo en este mundo, pero no hay nadie que realmente lo quiera destruir. Eso, sin embargo, es lo que logran todos los que se obsesionan con querer salvarlo. Las buenas intenciones son un peligro, un peligro hermoso y seductor en el que si te descuidas muchas veces provoca refugiarte para nunca salir. Acaso puedes esperar benevolencia de algunas personas cercanas a ti, pero no debes proyectar ese deseo al universo. No esperes de los demás una generosidad infinita igual a la que supuestamente tú y los tuyos tienen, porque entonces tu alma se torcerá y te alegrará negársela al que piensa distinto. Duele reconocerlo y es incómodo notar que saberlo te posiciona junto a muchos egoístas, pero aquellos que exigen buenas intenciones mediante religión o ideología deben ser neutralizados a cualquier precio, para mantenerlos lejos del poder. Los idealistas son los que más se corrompen con él, porque si tienen la oportunidad hacen todo lo posible por transformar sus inmensos sueños en planes absolutos para el destino de la humanidad. Por eso no espero de ti buenas intenciones hacia mí, sólo que nuestros intereses sean compatibles en algunos casos. En el resto estaré bien por mi cuenta, o junto a otras personas que también piensen así.

Espero les haya gustado. ¡Hasta pronto!

by-nc-sa Daniel Rodríguez.
{ "tags" : [ "english" , "linux" , "opensource" , "technology" , "tmux" , "vim" , "xmacro" ] , "title" : "Tasks Automation with XMacro" }

So it's time to make a more technical post.

If you're looking for tmux macros and you use Xorg, you will need this tip.

TL;DR

Install xmacro, record some commonly made actions, edit the recorded file to polish times and actions, make a script to reproduce them again and voilà, macros for any window manager using Xorg, easy to use from vim or tmux.

The story

I've been playing with linux for many years now. Like any typical user, I started with user friendly distributions, first Mandriva, then Ubuntu, then Mandriva again, then OpenSUSE, CentOS, Fedora, Arch Linux and now Manjaro, which is built on top of Arch and has a ready to use Net Edition. Just what I was looking for (check it out here).

So, while you're in Linux and you get all excited about being able to be very exquisit with which applications you are going to use (in matter of performance and low consumption), you'll end up using the terminal a lot. That's what I did, first using alsamixer to control the sound, then nano to edit files, then vim, as well as music players like mocp, IRC clients like irssi, email clients like mutt, then you might begin using xterm instead of any other fancy gtk terms, also you might switch from Gnome to OpenBox, and later to DWM, which could end up being your favorite one, because nothing is going to be so fast and simple. Then maybe you're too lazy to set up a background image each time you're setting up a machine, or like me, you get so uncomfortable selecting an image that you prefer to have none, and finally you end just using conky to give it a fancy style, but keeping things minimal, etc etc... well, the point is that you start to use the terminal a lot. Fine.

My current desktop.

Now, every time you open your computer to start working with a project, you open several terminals, maybe using TMUX, in some of them you run several applications, like databases, web servers, or your editor; you load your vim sessions to open all your needed files and then you start working, you do this some days and you feel fine, but eventually you begin to think that maybe you could be doing that automatically, because it's tedious to be opening the same stuff again and again and again and again...

For many years, I've encountered persons that asked me if I knew a way of scripting tmux to open several terminals and load your programs, or if there was a way of making macros with tmux, but I was unable to answer properly, I said: well, yes, in principle you can start tmux's server and tell it to load several applications, but it's not an automatic process, I mean, you can't just record your actions to play them again, you have to make the script and change it as you want new things to happen. I never explored the possibilities of that approach, but it looks so cumbersome that everyone I know ended up just doing things by hand and that's it.

Until now, ladies and gentlemen I present you: xmacro.

XMacro

For Arch Linux users, xmacro is available in the AUR: https://aur.archlinux.org/packages/xmacro

Essentially, xmacro records your pressed keys and saves them to a file. To run it, see the line below:

xmacrorec2 > myrecording

Once you call it, first you'll have to pick a quit-key (<Esc> is fine), then whatever you do will be recorded: moving your mouse, clicking, pressing any key, etc. Do some stuff, then press the quit-key, and you'll be able to replicate that behavior with the following command:

xmacroplay "$DISPLAY" < myrecording

Let's check myrecording file to see what we've got. As you'll see below, it looks very much like the output of xbindkeys -mk (after you click some keys there):

MotionNotify 949 749
KeyStrPress Alt_L
Delay 147
KeyStrPress 2
KeyStrRelease 2
KeyStrRelease Alt_L
Delay 783
KeyStrPress Alt_L
Delay 110
KeyStrPress 1
KeyStrRelease 1
KeyStrRelease Alt_L
Delay 2351
MotionNotify 918 536
ButtonPress 1
Delay 100
ButtonRelease 1
Delay 2396
MotionNotify 628 378
ButtonPress 1
Delay 100
ButtonRelease 1
Delay 1593
KeyStrPress Control_L
Delay 79
KeyStrPress c

In the previous code, first you see MotionNotify, which indicates the position of the cursor, then you can see that I pressed Alt_L, waited 147 milliseconds, then pressed 2, then released 2, then released Alt_L (Alt_L+2 sends you to the second desktop in DWM). The rest of the file consists of the same type of actions. It's fairly easy to edit (just remember to keep it clean of empty lines, empty lines produce errors). If you want to reproduce that again, but going to the third desktop instead, yo could change KeyStrPress 2 and KeyStrRelease 2 for KeyStrPress 3 and KeyStrRelease 3 respectively.

Fair enough, now you know a way of recording and replaying macros in X, and it's also very easy to customize. Now let's make it more practical.

An use-case

Let's define an use-case:

I, as an user, want to be able to open a new tab in tmux, and to cd to the directory in which my current active file in vim is located.

To follow the process with me, you'll need to have changed the behavior of tmux to work like vim, so please add the following lines to your .tmux.conf:

# vim keys
set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R

I'm also using the default <Ctrl+b> behavior of tmux, so make sure you DON'T have lines like the followings in your ~/.tmux.conf:

unbind C-b
set -g prefix C-a
bind C-a send-prefix

So, how would you answer the use-case we stated? you could, for example, expand your current path with vim, typing :!# %:p:h and then pressing tab:

:!# %:p:h
<Tab>
:!# /home/youruser/your/path/
<Smile>

Then, as the use-case states, we're in tmux, so we can select that text pressing <Ctrl+b>[, it will stop rendering the terminal, and it will let you move over or select the rendered text, but starting from the point your cursor was before pressing those keys. So, as we set it to work like vim, now we can press 0 to go to the beginning of the line, then press 4l to move to the beginning of the path, then press v to start the selection, then press $ to go to the end of the line and now press y to copy the text to tmux's buffer. Finally press <Ctrl+c> to get out of tmux's special behavior.

Now, we press <Ctrl+b>c to open a new tab, in which we write cd and we paste tmux's buffer with <Ctrl+]>. That way we complete the use-case.

Manually opening a new tab in tmux, and changing to the directory in which my current active file in vim is located.

As you see, it's a complex process, even if you have done it so many times you can do it without thinking, it requires lots of key presses and it's error-prone, because you can miss keys and end up doing something else.

So let's automate it!

Automating the use-case

First, let's make a directory at home to store our macros, let's call it ~/.xmacros.

An easy (but wrong) way of doing this automation is to call xmacrorec2 > ~/.xmacros/vim_tmux_cd_newtab.macro (you can change the file name if you want) from another window (or terminal), then to switch to the one where you have tmux and vim, then to do the process above, and end the recording pressing the quit-key. Now, each time you want to do it, you'll have to switch to another window/terminal and run xmacroplay on it. This is not the preferred way, right? what if we make it possible from vim directly? Let's try it.

Let's edit vim_tmux_cd_newtab.macro to remove the window switching, just remove some of the first lines, they look like this:

KeyStrPress Alt_L
KeyStrPress 1
KeyStrRelease 1
KeyStrRelease Alt_L

(That was how I switch desktops).

You can also eliminate all the lines with Delay. Make sure it is exactly what you want before going to the next steps. The one that I'm using is the following: https://gist.github.com/9997147

If you try calling xmacroplay from vim, make sure to call it as follows:

:exec "!xmacroplay \"$DISPLAY\" < ~/.xmacros/vim_tmux_cd_newtab.macro &"

(the key points are "$DISPLAY" and the last &).

That's a way to do it. You'll probably prefer to set it in a mapping, but as the command is in double quotes, imagine trying to call another of your macros, you'll need to write it manually instead of being able to press tab until you reach your preferred.

An alternative could be to make a bash script and add it to your $PATH, that way you'll be able to call it from vim and complete the paths with <Tab>, just like we completed %:p:h.

This bash script is very simple, here's my approach, I call it run_xmacro:

(cd ~/; xmacroplay "$DISPLAY" < $1 > /dev/null 2>&1 &)

To use this script, be sure you give it execution rights with: chmod +x, then you can make a mapping to call it, put this in your .vimrc or in the file where you put the mappings (I use ~/.vim/plugin/mappings.vim);

nmap <Tab>m :!run_xmacro ~/.xmacros/

(I use <Tab> a lot, so <Tab>m is the first thing that came to mind, change it to fit your needs.)

Ok, so we're done! Now just press <Tab>m, the command will appear in vim, then you'll be able to press tab again and loop over all your xmacros! Click on one and it will run flawlessly.

Automatically opening a new tab in tmux, and changing to the directory in which my current active file in vim is located.

Done, now it's time to get creative and build your own macros, automate your workflow to speed up your daily life!

If you need any help please ping me @sadasant. (Just request to follow, if I forget to accept, send me an email).

// I made the gifs with tty2gif


Update: I actually found a very nice way to do that example with less work, just add this to your vim configs:

nmap <Tab>bc  :call system('tmux new-window -F "#S" -c "'.expand('%:p:h').'"')<cr>

And you'll be able to open a new tab in tmux with <Tab>bc :)

More here.

by-nc-sa Daniel Rodríguez.
{ "tags" : [ "spanish", "thoughts" ], "title" : "¿Y ahora qué?" }

Recomendación musical:
The River X - Ketil Bjørnstad & David Darling.

Ya van varios meses buscando qué decir.

Hace casi un año preví que me sumergiría, y así hice. No lo noto en el día a día, pero sí en cómo confronto los problemas, en su mayoría.

Por ejemplo, he tenido ciertas vicisitudes por andar pensando en lo mínimo y no querer ver a gran escala; siendo esto, a mi razonamiento, primera vez que ocurre. ¡Me hizo sentir ínfimo!, más que de costumbre. Me hizo sentir escuálido, insuficiente e impresentable, pero también: humilde.

Mi acercamiento anterior había sido explotar las posibilidades, decirme: aquí hay muchas vertientes, voy a analizarlas todas y luego irme por la que vea más conveniente. – Así, atacaba por lo vago y sorprendía.

O por lo menos eso era lo que pensaba, para mi sorpresa, la realidad – en otros contextos – era que atacaba siempre por donde se me hacía más fácil. Y eso no es de sorprender a nadie, las matemáticas daban, es decir, los beneficios superaban los costos y los numeritos se veían verdes. Pero eran verdes chimbos, verdes a penas visibles.

He conocido a personas de previsión admirable. Les observo, tomo nota y les confronto siempre que puedo; para mi fortuna, no se permiten irritarse fácilmente, por lo que eventualmente conseguimos cómo trabajar.

Mis asertividades han cambiado, de ser tácticas punzantes (algunas) han pasado a ser sencillos pasos que iluminan tonos favorables en el horizonte. Dejé de querer intervenir en preferencias de otros, o de hacer calendarios con otros nombres, preparar documentos y presionar por firmas, dejé de querer empujar, aunque, ahora que lo pienso, he firmado bastante más que en otros años.

Mi nuevo juego es pescar, buscando que quien pique, me arrastre, buscando vientos calientes que me suban, y así mismo, buscando cómo subir a otros.

Últimamente, me he entretenido redirigiendo correos a quienes creo que se pueden beneficiar más de ciertas notificaciones y puntualizando con quienes debo proceder para encontrarles, en un futuro indiscreto, convertidos en lo mejor que ellos puedan llegar a ser. Se trata de presentar alternativas bien precisadas, dejarlas en la mesa y partir, sin esperar recibir noticias. ¡Por lo general funciona!

De esa manera he cumplido con varias metas, estoy trabajando en proyectos con los que soñaba hace años, aprendiendo temas que veía con deseo y durmiendo más seguido. Los preparativos para cerrar la etapa universitaria están listos. Ya empezaron a entrar nuevos vientos, corrientes de otras costas que traen consigo mapas de tesoros, escritos en sus idiomas. Me siento en vísperas de aventura.

by-nc-sa Daniel Rodríguez.
{ "tags" : [ "spanish" , "thoughts" , "surrealisms" ] , "title" : "Colores" }

No suelo ser una persona muy colorida, aprendí a apreciar los colores oscuros. Los opacos, esconden cierta calma, como la sombra, por ejemplo, de un árbol. Los más oscuros nublan las conclusiones posibles, como un sonido leve, cual bajo, que en primera instancia nos cuesta distinguir en su entorno. Son colores que se expresan en susurro, y para captarlos hay que acercarse. De día resaltan, mucho menos que un foco de luz en la noche, pero casi indistinguibles entre sí. A oscuras se camuflan, y al mismo tiempo destacan, demostrando sus rubores, más activos que el vacío de fondo. Quizás por ese mismo susurro y gravedad, imponen respeto; no se acercan y mantienen distancia. El negro mantiene absoluta distancia.

Sin embargo, por fortuna nuestra mirada llega más lejos que nuestros pasos, así que bien podemos quedarnos sobre ciertos matices y aún así apreciar paisajes completamente distintos, pudiendo cambiar esa percepción según nuestro alcance.

Por lo mismo, también me gustan los colores vivos.

Los mensajes llenos de furor son inevitablemente atractivos. Buscan decirlo todo, con un carácter sobre el cual es difícil argumentar. Se acercan sin pedirlo y se plantean a sus anchas. En su confianza, superan nuestras dudas, con un abrazo de difícil escapatoria. Son eróticos como el azúcar, tanto así que carecen de intimidad. Los más claros son menos drásticos, pues les falta criterio, siempre llevan el mensaje absorto del blanco (el ídolo por defecto).

Ahora, de hablar de colores particulares, podríamos pasar un buen rato describiendo sus andanzas. Aquellos lugares de donde les caracterizamos. Hay un matiz de marrón nocturno que en mi memoria es típico de carpetas, escritorios y estacionamientos semi-iluminados; suelo recordarle acompañado de un azul mar sumamente discreto y austero, como chaqueta de vestir. Ese marrón tiñe mi memoria eventualmente y sin consideración alguna, simplemente aparece.

Un matiz de durazno, como le dicen (que para mi es un rosado y listo), me hace pensar en la pintura de interiores, en los edificios de Maracay; en sus pasillos estrechos. Va acompañado de un sentimiento médico, como si estuvieses por llegar a un consultorio y vieses en frente unos cuantos metros de cerámica, con paredes haciendo juego, con puertas cubiertas de rejas negras y en el fondo, una ventana, asomando un edificio blanco con amarillo, dentro de un cielo celeste, a pleno día.

El amarillo mostaza es pintura de exteriores, a veces agrietada; es también arena y playa; se lleva bien con olas y con lanchas amarradas.

El verde claro es sala de estar, como también ventana de edificio con rejas blancas, como té, como jardín y como vejez.

Además están los vibrantes amarillos tensos y los rojos explosivos. Se les ve poco porque hierven la mirada. Se desvanecen rápido en negro, dejando auroras a su paso.

Y así, muchos más.

A veces incluso sueño con colores, con cortos mudos monocromados, impregnados de emociones, muchas veces leves. Son perfumes visuales.

En cuanto a mi, no soy un tipo de perfumes, me acomodo en las sombras calladas, compartiendo con olores sutiles, naturales y tenues, sin tantos adornos.

My drum, my drum, my drum
gonna make ya
My drum, my drum, my drum
gonna make ya come.
Me, My Yoke and I, by Damien Rice.

by-nc-sa Daniel Rodríguez.