En qué ando: octubre

Me encanta el otoño. Me encantan sus colores y sus verduras y flores. Me encanta el clima otoñal, lo suficientemente soleado para sentarse a leer en un parque pero lo suficientemente fresco para envolverse en casa en una manta y tomarse un té. El otoño, además, significa para mí volver a la rutina: hay otra vez clase de italiano, corrijo exámenes y voy a actividades diversas que se organizan en mi ciudad. Esta vez me he apuntado al seminario de Desarrollo, Cooperación y Tecnologías para el Desarrollo Humano que organiza Ingeniería Sin Fronteras y estoy aprendiendo sobre economía, educación o cooperación desde un punto de vista crítico.

Escribir he escrito poco, hago demasiadas cosas. Básicamente describí cómo es mi entorno de trabajo y luché contra Matlab. En la vida real estuve escribiendo papers como si no hubiera un mañana y hasta me publicaron uno y me scrapeé a mí misma con la idea de sustituirme por una Ondiz robótica y poder dedicarme a ser una mujer del Renacimiento sin necesidad de preocuparme de conseguir dinero para comprar comida.

En fin, que os dejo con mi crisantemo justo antes de florecer.

Algunas cosas interesantes

Comparto aquí algunas cosas que he visto, oído o leído este mes. Como siempre, gracias por compartir cosas chulas en la red y cuidado con el rastreo.

Artículos

Libros

En octubre he permanecido en mi siglo, es decir, el XIX, leyendo Dialéctica erística o el arte de tener razón, expuesta en treinta y ocho estratagemas, un librillo que vi hace mucho en la biblioteca y que puede parecer coaching pero que escribió Schopenhauer.

Vídeos

Hundred rabbits: sobre la experiencia de una pareja viviendo y trabajando en un barco. Toda una lección de decrecimiento.

Lo que he aprendido: formato y exportación de figuras de Matlab

Matlab me está tocando la moral. Qué sorpresa. Me tiene tan sumamente cansada tener que programar en semejante entorno hostil (pun intended) que he decidido adoptar prácticas defensivas. Una de ellas es guardar las imágenes en el formato fig de Matlab y darles el formato que me parezca más tarde con una función. Aprovecho, además, para exportarlas a svg porque mi Matlab está borracho y no me exporta las fuentes correctamente cuando uso eps. Esto implica, claro, que necesito un paso posterior de pasar de svg a eps porque a las revistas no les gusta el svg. Ya veis, hacemos nosotras el currelo pero ellos se ponen exquisitos con los formatos. pero no importa porque viene el software libre al rescata, en este caso Inkscape.

En fin, que os dejo aquí la función que uso para cambiar el estilo de los gráficos y exportarlos y un script de muestra. No funciona bien si la figura tiene subfiguras, pero iremos mejorando.

Cambiar el estilo de una figura en Matlab

Para ello he escrito esta función, que se puede mejorar pero más o menos funciona:

function layout(h, fontSize, font, markerSize, lineWidth, gridOn, sizes)
% Change layout of graphic
%
% LAYOUT(h, fontSize, font, markerSize, lineWidth, gridOn, sizes)
% 
% where:
% - h: figure handle
% - fontSize: fontsize in points
% - font: name of font
% - markerSize: size of markers
% - lineWidth: line width 
% - gridOn: true set the grid to on
% - sizes: [width, height] of output

box on
set(gca,'FontSize', fontSize)
set(gca,'FontName', font)

% Change sizes of all elements
alldatacursors = findall(gcf,'type','hggroup');
set(alldatacursors,'FontSize', fontSize)
set(findall(gcf,'type','text'),'FontSize', fontSize)

% Change line width of all lines and markers
allLines = findall(gcf,'type','line');
set(allLines,'LineWidth', lineWidth)

% Set size of marker
if isprop(gca,'MarkerSize')
    set(h,'MarkerSize', markerSize)
end

% Grid
if gridOn
    grid on
end

x0 = 10;
y0 = 10;
set(gcf,'position',[x0,y0,sizes(1),sizes(2)])

Cambiar el estilo de todas las figuras de una carpeta

Uso la función layout en el archivo figStyle para dar formato y exportar a svg todas los gráficos de una carpeta. Supongo la siguiente estructura de archivos:

.
├── fig
│   ├── fig1.fig
│   └── fig2.fig
├── figStyle.m
├── layout.m
└── svg
    ├── fig1.svg
    └── fig2.svg

Es decir, cogeré las figuras de la carpeta fig y las guardaré en la carpeta svg después de transformadas. He escrito este script para la figuras del paper en el que estoy trabajando:

clear
clc

folder = 'fig';
addpath(genpath(pwd)) % Add subfolder to path
files = ls(folder);
files = files(3:end, 1:end); % delete first two entries (. and ..)
files = cellstr(files); % convert to cell to ease manipulation

number = size(files,1);

% Output names = names without extension
outName = cellfun(@(x) x(1:(end-4)), files, 'UniformOutput', false); 

for f = 1:number

    h = openfig(files{f},'new','invisible'); % open fig without showing
    layout(h, 24, 'Century Schoolbook', 14, 1.5, true, [800,600])

    % Save modified figure
    name = [folder '\..\svg\' outName{f}]; % saves figures in eps folder
    saveas(h,name,'svg')

    close(h);
end

Pasar de svg a eps

Una vez obtenidas las figuras en svg, uso un bucle en la terminal (de Windows) para pasarlas a eps con Inkscape. Aquí tuve líos petardos porque si pongo la carpeta de Inkscape en el Path, tengo un Python extra. Finalmente decidí que lo más práctico era llamar a Inkscape con la ruta completa. Por lo tanto, tiro esta línea en la carpeta donde están los svgs:

for %i in (*.svg) do "C:\Program Files\Inkscape\inkscape" -E %~ni.eps  %i

Aprendí gracias a esta historia que %~n es el nombre del archivo sin extensión. Ya os podéis imaginar la necesidad que tengo yo de saber mierdas cosas de la terminal de Windows. Ah, lo he guardado como svg2eps.cmd para futuro uso.

Y hala, cada día me vuelvo más robótica.


Suena:

Mi entorno de trabajo

Me han preguntado bastantes veces cómo me organizo y, aunque hace un tiempo hablé un poco sobre mi entorno de trabajo en Emacs, desde entonces he introducido algunas mejoras así que voy a hablar de mi entorno de trabajo en general. Aprovecho para enlazar otras entradas del blog en las que hablé en concreto de las herramientas que cito para que se note que las uso de verdad y no es (solo) postureo.

La base: acta en Org

La base de mi metodología es un archivo de Org que utilizo como acta y lista de tareas. Org tiene la ventaja de que me permite añadir imágenes, código y enlaces a diferentes documentos y, además, puedo exportar la parte del acta en diferentes formatos según las manías del receptor.

Este archivo se abre directamente cuando abro Emacs por las mañanas para que pueda ver qué me queda por hacer y acceder directamente a los documentos o al código en los que estoy trabajando desde él, que se abrirán o no en el propio Emacs según su formato. Para que esto ocurra he añadido la siguiente líneas a mi archivos de configuración:

; Abrir archivos con programa que corresponda
; Lo privativo!
(add-hook 'org-mode-hook
           '(lambda ()
          (add-to-list 'org-file-apps
               '("\\.m\\'" . default)    ;; Matlab
               '("\\.fig\\'" . default)  ;; Matlab
               '("\\.xlsx\\'" . default) ;; Excel
               )))

; Abrir acta al iniciar Emacs
(find-file (expand-file-name "acta/acta.org" default-directory))

Como toda mi labor investigadora se basa en este archivo tengo, evidentemente, una copia de seguridad.

El soporte auxiliar: diario de Emacs

Aparte de tener apuntadas mis tareas por temática, llevo un diario en el que apunto qué he hecho cada día. Esto tiene una doble función: por una parte, cuando me desmoralizo y creo que no avanzo, tengo evidencia empírica de que no es así; por otra, me sirve para seguir mi proceso mental y recordar qué estaba haciendo antes de irme de vacaciones, por ejemplo. Esto me resulta crucial porque me permite tanto desconectar en cuanto levanto el culo de la silla del trabajo como tener mis ideas hiladas en un lugar que no es mi (variable) cabeza.

Para ello uso el diario de Emacs de manera poco ortodoxa, que es como me gusta a mí usar las cosas. Tengo una copia de seguridad también del diario, claro.

El producto: texto plano y control de versiones

El tercer pilar de mi organización es que todo lo que produzco (los documentos, la bibliografía, las imágenes, el código …) es texto plano. Aparte de que de esta manera podré seguir accediendo a mi información dentro de treinta años1, así puedo tener todo bajo control de versiones. Para el control de versiones uso Magit en Emacs y git en la terminal por la vieja costumbre.

Os detallo un poco más cómo funciono:

  • Documentos: escribo en Org o en LaTeX tanto los artículos como los informes y las presentaciones para clase. Para LaTeX uso el modo AUCTeX con RefTeX para las referencias bibliográficas, CDLaTeX para las ecuaciones y Company para el autocompletado.

  • Bibliografía: la manejo con Jabref y, últimamente, con Helm-bibtex desde el propio Emacs. En este último caso, uso las variables locales para seleccionar el archivo de bibliografía correspondiente a cada documento así como la carpeta donde viven los pdfs.

%%% Local Variables:
%%% eval:(setq bibtex-completion-bibliography '("ruta_a_bib"))
%%% eval:(setq bibtex-completion-library-path '("ruta_a_pdf"))
%%% End:
  • Imágenes: trabajo generalmente con svg en Inkscape, o exporto a eps o svg desde el resto de programas. El motivo es que ambos son formatos vectoriales y eps el favorito de las revistas científicas. Para las gráficas científicas, tengo el código para producir la imagen bajo control de versiones y una función que le da un estilo uniforme a todas las imágenes que exporto.

  • Código: programo en Matlab por obligación y en Julia y últimamente algo en Python por vicio. Con Matlab hago más que suficiente con no caer en las malas prácticas que fomenta. Para programar en los otros dos uso los modos específicos de Emacs y también Org para programación literaria.

Un día en mi vida

Dicho esto, uno de mis días laborales suele tener esta estructura:

  1. Abro Emacs.
  2. Leo en la lista de tareas qué me queda por hacer y en el diario qué hice el día anterior.
  3. Decido qué voy a hacer. Si hay un archivo relacionado, estará enlazado en la propia lista de tareas y se me abrirá en Emacs o en el programa externo correspondiente.
  4. Trabajo. Escribo, programo, busco papers … abro ramas y envío actualizaciones al repo según corresponda con Magit o desde la terminal.
  5. Actualizo la lista de tareas y el diario con lo que vaya terminando y las conclusiones sacadas.
  6. Cierro Emacs.

Esta rutina laboral se irá modificando según vaya aprendiendo cosas nuevas, cuando eso ya os contaré. ¡De momento contadme vosotros qué hacéis!


  1. Dudo que vaya a querer, pero podré

En qué ando: septiembre

Septiembre me provoca sentimientos encontrados: se vuelve al cole y empieza mi estación favorita; se retoma la rutina y cambian los colores del entorno; se nubla el futuro laboral y llegan las hortalizas otoñales.

Sigo con mi proyecto de aprender a programar decentemente en un lenguaje de programación libre: sigo jugando con Julia, un poco con Python y con la programación literaria, la única manera de que Ondiz del futuro sepa qué demonios tiene en la cabeza Ondiz del presente. También le di otra vuelta de tuerca a mi gestión de bibliografía gracias a mi querido Emacs.

Me estoy divirtiendo mucho analizando textos en general y con NLTK en particular: he vuelto a la época del comentario de texto. Lengua y Filosofía fueron las únicas asignaturas en las que realmente aprendí algo: en la primera aprendí a racionalizar lo que leo y, en la segunda, lo que pienso. Aunque lo descubrí diez años tarde.

Además, han florecido los rosales por lo que tengo un trocito de primavera en mi jardín. Supongo que por esto este mes he vivido más cerca (de lo normal) de la poesía.

Algunas cosas interesantes

Os dejo aquí material que me ido encontrando por la red y por la biblioteca. Gracias a los que compartís y recomendáis, hacéis del mundo un lugar más colorido.

Artículos

Libros

Después de meses desconectada de la novela y enganchada al ensayo, he vuelto a ella. Por lo visto, durante una temporada no necesité escapar pero sí reforzar cimientos. Tuve una etapa de transición leyendo La gaviota1 y, finalmente, retorné a la novela del siglo XIX, la época de dos de mis movimientos literarios favoritos, con La Regenta. Y viajé en el tren con Borges.

También he leído no ficción, por supuesto. Críptica liberó su manual de Resistencia digital y no podía dejarlo sin leer. Tiene un rollito ciberpunk que me enganchó desde el primer momento y un montón de metáforas bélicas y pugilísticas que le dan un toque épico. Los consejos son muy buenos, pero me ganaron por la estética. Como suele pasar, reconozcámoslo.

Podcasts

Vídeos


Os dejo con una canción que descubrí gracias al Fediverso y que me representa totalmente después de tantos años sufriendo diariamente a la Renfe:


  1. Si Chéjov no me devuelve la fe en la ficción, ¿quién? Estamos hablando del hombre que escribió: «La medicina es mi esposa legal; la literatura, solo mi amante.» Una frase que, aparte de ilustrar perfectamente cómo se puntúa, explica, también perfectamente, mi relación con la ingeniería y el arte. 

Lo que he aprendido: manejar referencias bibliográficas en Emacs

Detesto instalar programas, aprender dónde están los botoncillos en un programa nuevo y que luego no me convenza y vuelta a empezar. Supongo que es uno de los motivos por los que me encanta Emacs: mismo programa, miles de tareas diferentes.

Últimamente he estado hurgando un poco en sus habilidades como gestor bibliográfico. Como ya os conté, yo suelo usar Jabref que es el programa que aprendí a usar en su momento y con el que me apaño bien para añadir referencias directamente desde la web, pero hay veces en las que manejar texto plano a pelo me parece más conveniente. ¡Y para eso no hay nada que iguale a Emacs! Os cuento un poco.

El modo BibTeX

La forma más básica para trabajar con bibliografías en Emacs es el modo BibTeX: se carga directamente al abrir un archivo con extensión .bib y nos permite organizar (M-x bibtex-sort-buffer) y adecentar (C-c C-c ) nuestras referencias.

Para insertar entradas tenemos el comando genérico C-c C-b tras el que podemos usar autocompletado, o el grupo de comandos que empiezan por C-c C-e. Por ejemplo, para crear una entrada de tipo artículo podemos hacer lo siguiente:

  • con C-c C-e C-a (o M-x bibtex-Article) creamos una plantilla para artículo;
  • rellenamos los datos necesarios, algunos comienzan por OPT porque son opcionales;
  • al acabar hacemos C-c C-c (o M-x bibtex-clean-entry) para quitar los campos opcionales que no hemos rellenado y que nos corrija el formato;
  • si no le hemos puesto una palabra clave nos sugerirá una y la entrada estará finiquitada y lista para ser citada.

Otro comando interesante es M-x bibtex-fill-entry (generalmente C-c C-q ) para alinear correctamente cada entrada bibliográfica. Y tampoco está mal establecer la variable bibtex-maintain-sorted-entries para tener las referencias en orden alfabético.

Como siempre, podemos recurrir a M-x describe-mode para que Emacs nos explique qué hace el modo. Es un modo chiquitico, pero muy útil para embellecer la lista de referencias ya que ayuda a cambiar de mayúsculas a minúsculas, quitar espacios innecesarios y míticas mierdas que, a las que somos maniáticas, nos ponen muy nerviosas.

Helm-bibtex

Mi modo favorito para gestionar las referencias bibliográficas en Emacs es Helm-bibtex. Lo descubrí intentando abrir los artículos que cito directamente desde Emacs y lo he introducido directamente en mi rutina de escritura científica (que algún día os contaré) junto con AUCTeX y RefTeX.

Es sencillito de usar: una vez instalado, lo llamamos con M-x helm-bibtex. Nos aparecerá entonces una lista de nuestras referencias bibliográficas en la que podremos elegir la entrada que queramos. Dándole a TAB vemos las acciones posibles, que se ejecutan todas en las teclas F1F12.

Como sugieren en su ayuda, he enlazado M-x helm-bibtex a la combinación Menú + b añadiendo esta línea al archivo de configuración:

(global-set-key (kbd " b") 'helm-bibtex)    

con la idea de configurar el resto de las historietas de Helm también en la tecla Menú y pulsar menos botoncicos.

Evidentemente, aunque sea muy listo este modo, tenemos que decirle dónde tenemos el archivo de bibliografía, los artículos en cuestión y las notas al respecto, si las estamos usando. Yo, como tengo un archivo y una carpeta con referencias para cada tema, establezco unas variables locales para el artículo que esté escribiendo

%%% Local Variables:
%%% eval:(setq bibtex-completion-bibliography '("refs.bib"))
%%% eval:(setq bibtex-completion-library-path  '("references/"))
%%% End:

pero si tuviera todas las referencias juntas, podría añadir ese par de líneas al archivo de configuración directamente con las rutas correspondientes.

ACTUALIZACIÓN (16/10/2019) Por algún motivo que desconozco (Windows), la ruta relativa dejó de funcionar de un día para otro y tuve que poner la ruta absoluta.

Una cosa que me encanta de este modo es que, por medio de RefTeX, localiza la bibliografía local si se usa helm-bibtex-with-local-bibliography en lugar de helm-bibtex. Algo bastante útil sobre todo cuando estamos manejando bibliografías de otras personas.

De esta manera, cuando estoy escribiendo un artículo y quiero citar algo o a alguien, abro mis referencias, busco entre ellas lo que necesito y abro directamente el archivo en el propio Emacs[^windows] usando pdf-tools. En Windows (sorpresa) esto no me carrula, así que he añadido esto al archivo de configuración

(setq bibtex-completion-pdf-open-function
  (lambda (fpath)
    (call-process "acrobat" nil 0 nil fpath)))

para que me abra los pdfs con al Acrobat Reader. Si, por lo que sea, lo que busco no está entre mis referencias, el cacharro me busca en repositorios online. Me falta investigar cómo funcionan las notas, que hasta ahora no he tenido necesidad de ellas.

Sigue leyendo

Lo que he aprendido: Julia, Babel y Org

Ya sabéis que me gusta llevar la contraria. También que me gusta el minimalismo y usar el mínimo de herramientas posible. Así que cuando me ha dado por explorar la programación literaria y la investigación reproducible en Julia, en lugar de aprender a utilizar los cuadernos Jupyter como una persona normal, me he puesto a jugar con mi adorado modo Org y su funcionalidad para incluir bloques de código Babel1. Supongo que es lo que tiene ser la única de tu entorno (laboral) que hace estas cosas y no tener por tanto limitaciones en la elección de herramientas. Total, como en la academia no se colabora, no se va a dar el caso de que mi elección me limite. En fin, dejo la academia, que me caliento, y os explicito los motivos:

  • No instalo más software: ya estoy programando en Julia en Emacs así que no necesito mil programas y mi ordenador durará años y años.

  • Utilizo mis atajos de teclado y configuración: como sigo usando el mismo programa, no tengo que aprender dónde están otros botoncillos. Además, tengo definido cómo exportar a pdf desde Org pasando por LaTeX en mi archivo de configuración por lo que el documento final es exactamente como yo quiero.

  • Puedo cambiar de lenguaje de programación: el sistema funciona para una pila de lenguajes de programación. Puedo incluso mezclar código de diferentes lenguajes en un único documento2.

Visto esto, parece que elegir Org es una buena idea, así que paso a contaros en qué consiste la programación literaria, cómo se aplica en Org y qué tiene de especial el caso de Julia.

La idea: escribir para humanos

La idea de la programación literaria, como tantas otras buenas ideas, fue de Donald Knuth. Consiste en cambiar de lector objetivo al escribir un programa: en lugar de una secuencia de instrucciones para una máquina salpicada por algún comentario sobre la implementación, el programa se convierte en una descripción de la lógica detrás de la implementación salpicada por algún fragmento de código. De esta manera, no es necesario descifrar qué hace el programa leyendo el código porque las decisiones de diseño y la lógica se explicitan. Se puede pensar en el programa, entonces, como en una obra literaria.

Como me dedico a los métodos de cálculo, es decir, propongo una manera de calcular algo y luego demuestro mediante un ordenador que mi manera es mejor que la manera anterior, este enfoque me interesa por dos motivos:

  • Investigación reproducible: puedo escribir un artículo científico que incluya mis datos y mi código con lo que quien lo lea puede acompañarme en el proceso, obtener mis mismos resultados y verificar si que mis conclusiones son correctas.

  • Documentación útil: puedo explicar en el propio programa mi proceso mental para implementar numéricamente un cálculo que inicialmente era analítico, incluyendo matemáticas si es preciso.

Solo nos queda responder a una pregunta: ¿cómo demonios se lee esa mezcla de texto y código sin volverse una loca? Pues mediante los procesos de weaving, que deja solo lo humano, y tangling, que deja solo lo que entiende la máquina. ¡A ver si os habíais pensado que el señor Knuth no había pensado en esto! La cuestión aquí es que como tanto la documentación o explicación y el código salen de un mismo documento, ambos crecen juntos y limitamos la típica divergencia de según la documentación esta función tiene dos variables de entrada pero según el código tiene tres.

Programación literaria en Org

Ahora que sabemos qué es lo que queremos hacer, vamos a ver cómo lo hacemos en Org. No puede ser más fácil: cuando queramos meter un cacho de código escribimos

#+BEGIN_SRC lenguaje opciones_cabecera

Código

#+END_SRC

y ya está. Impresionante. Más os voy a decir: los bloques se pueden crear con las plantillas fáciles de Org situándonos en el principio de la línea y haciendo <s TAB.

Para poder ejecutar el trocito de código necesitamos primero decirle a Org que vamos a usar el lenguaje en cuestión y que ese lenguaje sea uno de los soportados. Tan sencillo como ir al archivo de configuración y añadir elementos a la lista de lenguajes:

(org-babel-do-load-languages
(quote org-babel-load-languages)
(quote (
(LENGUAJE1 . t)
(LENGUAJE2 . t)
)))

Ahora si hacemos C-c C-c sobre el trocito, lo ejecutaremos y nos saldrá el resultado debajo. Por seguridad, preguntará si queremos ejecutar y tendremos que contestarle, si somos vagos y nos gusta ver el mundo arder podemos decirle que ejecute todo el código sin preguntar con

(setq org-confirm-babel-evaluate nil)

¡Destrucción! ¡Sí!

Un detallico sobre los resultados: los trocitos de código se ejecutan por defecto como si fueran una función (opción de cabecera :results value) y solo nos devolverán el contenido si se lo pedimos explícitamente, con un return en el caso de Python, por ejemplo. Podemos cambiar la opción a :results output y, entonces, Org nos devolverá el contenido de STDOUT. Para lenguajes interpretados, podemos combinar esta opción con :session, que abre un intérprete y envía allí el código de todos los bloques que contengan dicha opción. Es un poco lío esto, pero jugando un poco con las opciones y leyendo la docu, se entiende.

También usamos las opciones de cabecera para decidir si al crear el documento exportamos el código (:exports code), los resultados (:exports results), el código y los resultados (:exports both) o nada (:exports none); para decirle a Org qué debe hacer con los resultados (:post); o para decir si queremos solo el archivo para la máquina (:tangle ARCHIVO_DESTINO), que por defecto no nos crea.

También podemos configurar cómo exporta el código al documento final. En mi caso, como el documento final es un pdf y eso pasa por LaTeX, quiero que use listingsUTF8 para los bloques de código. Se puede configurar para minted también, claro.

;; Exportar código como listings
(require 'ox-latex)
(setq org-latex-listings t)

;; Paquetes de LaTeX para código
(setq org-latex-default-packages-alist
'((""    "listingsutf8"  t)
("usenames,dvipsnames,svgnames,table"    "xcolor"    t))))

Las cuqueces y los colorinchis no se limitan al documento final, con

(setq org-src-fontify-natively t)

también tendremos colores en nuestro Org.

Ah, por cierto, el trocito de código lo podemos modificar en un buffer especial que se abre con C-c '.

El caso de Julia

Julia es uno de los lenguajes que no tiene soporte directamente en Babel porque su autor no le dio el copyright a la FSF. Por lo tanto, aparte de añadir Julia a la lista de lenguajes que puede usar Org, necesitamos los paquetes ESS y ob-julia.

Luego, hacen falta un par de líneas extra en el archivo de configuración para decirle a ob-julia dónde está el ejecutable de Julia (yo lo tengo en el PATH y por eso no le doy la ruta entera) y decirle a Emacs que use ob-julia:

;; Código Julia en Org
(setq inferior-julia-program-name "julia") ;; nombre o ruta de ejecutable
(require 'ob-julia)

(org-babel-do-load-languages
(quote org-babel-load-languages)
(quote (
(julia . t)
)))

Ale, ya puedo jugar a programar explicándome a mí misma lo que he hecho. Ahora solo me falta aplicar estas ideas al archivo de configuración de Emacs para no romperlo nunca.

Seguiremos informando.

Referencias

Documentación de Babel

Babel: active code in Org-mode

Working with source code en el manual de Org

Introduction to Literate Programming

Emacs para ciencias del dato

Julia with Emacs Org mode

Org-mode and julia: an introduction

Literate Programming Examples

Literate programming with Org-mode

Ten simple rules for writing and sharing computational analyses in Jupyter Notebooks

Drops of Jupyter notebooks: how to keep notes in the information age


Os dejo con música:


  1. También hay un paquete específico para Julia, pero ¿me gusta a mí lo fácil? No. 
  2. Lo digo como su supiese programar en múltiples lenguajes, ¿habéis visto? 

En qué ando: agosto

En agosto he estado vacacionando así que he escrito poca cosa. He conseguido, eso sí, tener un entorno funcional para programar en Julia en Emacs en GNU/Linux. Sí, todos esos «en» son necesarios, son las inevitables condiciones de contorno del conocimiento de una. El artículo al respecto apareció además en la recopilación de noticias emacseras de la grandísima Sacha Chua y casi lloro de la ilusión.

Podría parecer que mi locura va a peor y que me estoy adentrando en terreno ignoto (no lo descarto), pero que esté últimamente jugando a programar tiene un sentido: no tengo muy claro que vaya a haber curro de lo mío en los próximos tiempos (los tiempos en los que se me acabe a mí el contrato, entiéndase). De ahí que busque un proyecto para aprender y afianzar conocimientos, tal vez en un futuro no muy lejano me tenga que reajustar.

Aparte de preocuparme de mi futuro laboral, también escribí sobre el propio blog, produje tomates y me abandoné a mi habitual misantropía con mayor ahínco de lo normal.

Algunas cosas interesantes

He aprovechado el tiempo libre para leer, os dejo una selección de cosas. Como siempre, gracias a los que compartís cosas molonas por la red.

Artículos

Libros

He terminado Armas, gérmenes y acero, una recomendación fediversil que trata sobre los hechos que llevaron a la actual distribución humana en el planeta. Hechos que se remontan a la prehistoria y que desmontan payasadas racistas varias. Es biogeografía, linguística, historia … las drogas que me gustan a mí.

También leí Capitalismo terminal porque me generó curiosidad el episodio de La linterna al respecto y que cito más abajo. Me ha hecho sentir entendida este libro. En los entornos en los que me muevo suelo tener la idea equivocada diferente en todos los temas todo el rato, ver que hay personas ahí fuera con las que coincido me renueva las ganas de seguir discutiendo. Es especialmente recomendable el apartado «La tecnología como conocimiento aplicado» para cualquiera que tenga un trabajo cualificado y no haya adquirido conciencia de clase. Yo la adquirí con diecisiete años el primer día de carrera, un día igual os cuento la historia.

Por cierto, suelo compartir aquí solo ensayo, pero también leo novela. Bueno, y poesía y relatos y teatro y los ingredientes del champú. Digamos que tengo dos modalidades de lectura: leo o bien por placer estético o por curiosidad intelectual. Generalmente escribo aquí solo los libros que pertenecen a la segunda categoría.

Podcasts

  • Capitalismo terminal. Anotaciones a la sociedad implosiva en la Linterna de Diógenes: sobre el capitalismo como relación social, organización de las fábricas y lucha obrera. Mi parte favorita es la visión del JIT tan opuesta a la que me dieron en la carrera, tan objetiva y carente de ideología ella. El libro lo publicó Traficantes de Sueños con licencia libre, por cierto.

  • Despertar Del Sueño Tecnológico también en La linterna: sobre un libro del que ya hablé aquí así que no me repito. Hubo un momento en que tuve que rebobinar, a ver si sabéis dónde.

Vídeos

  • Aesthetics de Contrapoints: una conversación sobre género y estética.

  • Climate grief de Philosophy Tube: sobre el cambio climático.

Meta: ¿de qué va esto?

Llevo ya un tiempo en esto de tener un blog. Empecé a escribirlo para soltar (parte de) lo que sentía y pensaba. Soy mucho de sentir y pensar y eso es malo para mi (precaria) salud mental. Luego empecé a anotar lo que aprendía para no olvidarlo. Más tarde decidí compartir mis experimentos culinarios (¿panarios?). Por último, pensé que compartir mis lecturas haría que se comprendiese mejor de qué va este blog.

Porque, ¿de qué va este blog? O mejor dicho: ¿va de algo este blog?

Para contestar a esa pregunta necesitamos un poco de contexto. Siempre he sido muy curiosa, me gusta hacer las cosas yo misma para entender cómo funcionan, me gusta tocar, crear con mis manitas. Esta costumbre (o vicio) fue a peor durante la carrera y todavía a más durante la tesis, supongo que como respuesta al desarraigo de la realidad que suponen ambos, digamos, procesos (de forja y revenido). Me explico: la carrera me dio respuestas a problemas que no tenía mientras dejó sin contestar las preguntas que me llevaron a estudiarla; la tesis me dio herramientas para resolver problemas tan alejados del mundo real que dejan de ser problemas.

De ahí que tomar el control de mi tecnología, decidir qué sistema operativo usa, qué programas, ver qué hacen por dentro, no contentarme con lo que me dan se convirtiera en una manera de (re)aterrizar. Lo mismo con el pan: vivimos en un mundo de tomates en invierno. Un mundo en el que montarse en la cinta que nos transporta por la vida y que va parando en las paradas correctas es extremadamente fácil, pero en el que bajarse y elegir parada es increíblemente difícil.

Yo me niego a dejarme llevar sin cuestionamiento: reivindico el camino difícil. Y voy más allá: sostengo que no es
tan difícil. Este blog es por lo tanto la crónica de mi exploración de lo difícil, un intento de demostrar que se puede una acercar a cualquier tema y llegar a comprender, una invitación a pasear conmigo por los mundos ignotos. Eso sí, con muy poca seriedad y compartiendo saberes, que bastante hacemos llevando la contraria al mundo.

Además, como mi plan para que me amancebe un millonario y pueda llevar a cabo mi sueño de infancia de montar un ateneo libertario con su fanzine y su radio ilegal sigue en marcha, tal vez algún día pueda hacer esto mismo en el mundo real.

Hasta entonces, aquí seguimos.

¿Exploráis conmigo?


Os dejo con un señor tocando el piano:

Lo que he aprendido: Julia en Emacs

He conseguido por fin poder programar en Julia usando Emacs. Eh, que no ha sido tan fácil: algo tan sencillo como instalar el julia-mode y el ess se convirtió en un infierno. Me pasó de todo.

Primero en GNU/Linux, como no estaba usando la versión más novedosa de elementary, el Emacs de los repositorios era demasiado antiguo y no compatible con los modos que me hacían falta. Me quedaban varias opciones: (i) actualizar el sistema (lo que finalmente hice); (ii) añadir un ppa con un Emacs más moderno (bien, pero prefiero tener los paquetes de mi distro que ya he organizado alguna petarda); o (iii) compilar Emacs desde fuente (ya lo hice alguna vez y no me apetecía repetir).

Luego en Windows, donde sí tenía un Emacs lo suficientemente moderno, parece ser que Julia tiene no sé que bug y se cuelga y hay que darle a C-g para que se reviva.

En fin, que actualicé el sistema operativo y en quince minutos ya tenía un entorno para programar en Julia. Bueno, eso en mi recién estrenado Juno, en Windows me conformo con Atom, ese editor que no es un editor. Qué dura es la vida a veces.

Después de contaros mis desventuras (para eso tengo un blog), paso a resumir qué hice la vez que funcionó todo.

Julia en GNU/Linux

Julia no está en los repos, nos dejan unos binarios genéricos para que descarguemos y ejecutemos sin más. Hay que elegir unos u otros según la arquitectura de nuestro procesador. Yo, como nunca sé qué tengo lo miro así:

ondiz@slimbook:~$ lscpu
Arquitectura:                        x86_64
modo(s) de operación de las CPUs:    32-bit, 64-bit

Descargados los binarios correspondientes, es útil crear un enlace simbólico a algún lugar donde ya estemos buscando ejecutables o añadir la carpeta donde los hemos descargado al PATH, a gusto del consumidor.

Yo he elegido la primera opción, así que he hecho:

sudo ln -s RUTA_A_EJECUTABLE /usr/local/bin/julia

Cuidadín que hay que poner la ruta absoluta al ejecutable bin/julia que si no no carrula.

Julia en Emacs

Pues lo que decía al principio: para tener un entorno chachi para programar en Julia solo hace falta instalar los modos julia-mode y ess. El primero es el modo oficial para editar Julia y el segundo es un paquete que ayuda a trabajar con lenguajes de programación para estadística (ESS viene de Emacs Speaks Statistics) como R, o en este caso, Julia. Se pueden hacer otras cosas, pero esta es la más simple en mi opinión.

Una vez instalados los modos, para activar una terminal juliana inferior solo hay que hacer M-x julia. Luego ya podemos abrir un archivo en la parte superior y jugar con opciones que nos da el modo ESS.

Llevo poco con el tema y solo he memorizado un par de combinaciones útiles (miento, no las he memorizado, las escribo aquí para mirarlas en el futuro):

  • C-c C-l: carga un archivo completo, lo que sería un include("archivo").

  • C-M-x: ejecuta (me encanta esta palabra) un trozo de código en el REPL.

  • C-c C-z: cambia del script al REPL o viceversa.

Hay también una pila de comandos para gestionar errores y para acceder a la documentación que algún día controlaré. O no. También me falta echarle un ojo a imenu anywhere para que me aparezcan opciones de autocompletado en cualquier lugar. Me lo dejo de deberes.

Curiosamente, lo que más trabajo me dio fue acostumbrarme a no darle a la flecha hacia arriba para repetir el último comando en el REPL. Aquí, como las combinaciones de GNU Readline están ya pilladas, hay que usar M-p y M-n (o C-↑ y C-↓) para moverse por la historia. Comint y cosas, ya sabéis, y si no, con hacer C-h b os enteráis.

Y hala, ya tengo un entorno para programar. Contadme qué usáis vosotros para que aprendamos todos, venga.

juliaEmacs

Referencias

Página oficial de Julia

Manual del modo ess

Julia en el modo ess

imenu anywhere en GitHub


Os dejo con un grupo cuyas canciones suelo berrear en los conciertos de las fiestas de los pueblos vecinos y que tiene el mérito de que no me quedase dormida encima del libro de física de primero de carrera. Era abrirlo y bostezar, oigan.

En qué ando: julio

Julio es para mí un mes de tránsito entre el trabajo y el ocio: ya se han acabado las clases, no hay pintura y tengo jornada reducida. Se ven pocas personas por el pueblo; todos se preparan para el largo domingo que es agosto. Suelo aprovechar este mes para reconectarme con mi parte analógica, que llega a su máxima expresión en las vacaciones: cocino, paseo y leo.

Este año el verano ha sido especialmente bienvenido porque ha traído consigo verduras verdaderas. Decidí empezar con el huerto hace solo cuatro meses y ha ido tomando espacio en el jardín y en mi vida. Tengo cuarenta plantas de tomate, dos aguacates, un frambueso, un granado, un tiesto con berros y ya he comido zanahorias, lechugas, rúcula, espinacas e hinojo.

Además, como me siento rara sin aprender un idioma, he retomado mi proyecto de aprender japonés. He pensado darle una oportunidad a la repetición espaciada y, como soy de la vieja escuela, me he fabricado una caja con sus tarjetas y sus separadores. Que sí, que podría usar una aplicación, pero aprendo mejor si puedo interactuar físicamente con el material, si puedo tocar. ¿Soy mayor? ¿Una romántica? ¿Odio la tecnología? ¿Un poco de todo? No lo sé. En fin, pronto cantaré la canción de Doraemon en versión original con acompañamiento de mandolina.

No he escrito gran cosa este mes, poco más que un articulillo sobre la bibliografía en castellano en LaTeX en la que filtré menos de lo normal y se ve que este no es un blog de tecnología sino de otra cosa.

He seguido haciendo cosas tecnológicas, claro, pero sin hablar de ellas. Actualicé a elementaryOS Juno sin mucho dolor, excepto por el rato en el que no podía bootear desde el USB y tuve que recurrir a Windows1. Sé que puedo hacer particiones y cosas pero suelo instalar desde cero porque así aprovecho y me quito mierdas. En realidad solo uso Emacs pero acabo acumulando programas porque me gusta jugar y, bueno, apt-get install es una tentación demasiado grande.

Algunas cosas interesantes

Lo bueno que tiene estar zen es que lee una mucho. Comparto algunas cosas, casi todas compartidas a su vez por mis vecinos de las redes.

Artículos

Libros

Se ha vuelto a cruzar en mi vida El elogio de la sombra, paseaba por la librería después de haber apañado Diario de un carpintero buscando Walden para releer. Era el libro de al lado. La última vez estaba pasando el tiempo en la sección de ensayo de la biblioteca cuando lo vi. Tiene la manía de inmiscuirse en mis asuntos.

Acabé también El capital en el siglo XXI porque lo tenía que devolver a la biblioteca. Tardé seis meses en leer las primeras 300 páginas y tres días en leer las últimas 300. Y buenos brazos que desarrollé de sujetarlo en alto. Ay, la miopía.

Podcasts

  • Amazon de Basetxe Gaztetxea: sobre la llegada de Amazon a Meatzaldea (el post está en euskera pero el audio en castellano).

  • Anarquistas De Ultramar; Mary Shelley y Frankenstein de La linterna de Diógenes: sobre pueblos que hacían la anarquía (y la siguen haciendo) antes de que existiera como concepto (a ver si se nos bajan los humitos a los occidentales) y una de las novelas que dio inicio a la ciencia ficción y que yo, como amante de la novela gótica, adoro.

Vídeos

Estoy siguiendo la serie de ecuaciones diferenciales del canal de YouTube 3Blue1Brown. Veo los vídeos con sentimientos mezclados: me alucina cómo explica y me cabrea que no me explicasen los conceptos así.

También he visto la serie de análisis de datos de Computerphile. No descarto que sea por el acento del señor, soy una amante de lo británico. Igual es el motivo de que siga desde hace años Philosophy Tube. Este mes he visto su último vídeo sobre trauma y abuso. Hay que hablar más de ello.


Os dejo con música. Punk con mujer al frente. No pensaba que pensaba que fuera a ver una banda joven con esa actitud: verlos en directo es volver a los noventa.

El punk vive.


  1. Casualmente tenía el ordenador del curro en casa, si no me vais a decir de dónde saco yo el Windows.