Lo que he aprendido: expresiones regulares en Emacs

Hablé hace tiempo de las expresiones regulares por aquí (de hecho fue lo que inauguró la sección Lo que he aprendido) pero todavía no me había puesto a usarlas en serio en Emacs para buscar y reemplazar cosas. Algún día tiene que ser el día, así que voy a ver si puedo resumir aquí para futura referencia la sintaxis de las expresiones regulares de Emacs, cómo se usan para buscar y qué ventajas nos ofrecen a la hora de reemplazar texto.

Sintaxis

La sintaxis de las expresiones regulares de Emacs tiene muchas cosas en común con las de otros programas y lenguajes de programación pero también tiene sus peculiaridades. Con C-h S regexp podemos ver toda la información sobre las regexp de Emacs, como soy muy maja os resumo aquí algunas cosas:

  • Los símbolos ., +, *, ? y [] funcionan de la manera típica:
    • . sustituye a cualquier carácter excepto al de nueva línea. Por ejemplo, a.b pillará cualquier secuencia de tres caracteres que empiece por a y acabe con b.
    • * localiza el carácter precedente cualquier número de veces, incluido cero. Por ejemplo, ca* captará caaaa pero también c.
    • + lo mismo que el anterior pero obligando a que el carácter precedente aparezca como mínimo una vez. Al contrario que ca*, ca+ no captará c. Para no confundirlo con el anterior a este le llamo el uno o más.
    • ? similar a * pero solo capta el carácter precedente una vez o cero. Siguiendo con el ejemplo, ca? captará c y ca? pero no caaa. Yo a este le llamo el si hay sí.
    • [] indica opciones. Por ejemplo, [ac]a encontrará las cadenas aa y ca. Su contrario es [^] que elimina las opciones entre corchetes, de este modo, [^ac]a encontrará ba pero no ca.
  • En Emacs hay clases sintácticas que empiezan por \s y su negación por \S. Por ejemplo, \sw indica un carácter de palabra (letras en minúscula o mayúscula y dígitos) y \s. un carácter de puntuación. A diferencia de otros programas, Emacs no interpreta \s como un espacio, para eso está \s-.
  • También tenemos clases sintácticas que se usan entre corchetes (adicionales a los que ya llevan) como [:digit:] para los números y [:alnum:] para los caracteres alfanuméricos. Una cosa a tener en cuenta es que estas clases varían según el modo.

  • Hay marcadores de borde, por ejemplo, \b indica el borde de palabra, y ^ y $ el inicio y el fin de línea respectivamente.

  • Podemos capturar grupos con \(CAPTURA\) para después hacer referencia a ellos con \N, donde N es un número que indica su posición. Por ejemplo, si hacemos \([[:digit:]]+\) capturaremos en la variable \1 una tira de números seguidos.

Seguir leyendo →

Anuncios

Lo que he aprendido: una mejor ayuda en Matlab

A estas alturas de la película sabemos todos ya que documentar nuestro código es una buena idea. También sabemos que Matlab asume que un comentario que se inicie en la primera línea de un script o justo debajo de la definición de una función es la documentación del archivo en cuestión.

Refresquémonos la memoria. Por ejemplo, si definimos una función así (he cogido una que tenía yo por ahí):

function x = euler_1gdl(data, ci, N, h)

% Computes time response of 1dof system using forward Euler

end

Y hacemos:

>>> help FUNCIÓN

Nos apacerá lo siguiente:

>> help euler_1gdl
Computes time response of 1dof system using forward Euler

Fácil y eficaz. ¡Pues hoy he aprendido tres cosas que no sabía sobre esta historia!

Seguir leyendo →

La universidad pública, la banca, el software libre y los gatetes

Hoy vengo a hacer un poco de activismo. Últimamente he estado viendo en las redes sociales la batalla que tienen en la Universidad de Granada para defender la autonomía de la universidad pública respecto a la influencia de la banca y luchar por la privacidad de los miembros de la comunidad universitaria. Ahí es nada. Os cuento los detalles.

Resulta que a los que toman las decisiones en la Universidad de Granada no se les ha ocurrido nada mejor que encargarle a una filial del Santander que les fabrique una aplicación para que los alumnos y trabajadores de la universidad hagan sus típicas gestiones. Una aplicación mediante la cual el Santander puede acceder a los datos de todo aquel que la use y que le permite además enviar publicidad a los usuarios y ofertarles servicios.

Es importante recordar aquí, que la Universidad de Granada, aparte de ser una de las más prestigiosas de España (y una de las poquísimas universidades españolas que aparecen en el Ranking Shanghai) es una universidad pública, por lo que en mi opinión es muy difícil justificar que su aplicación oficial la controle un banco. Este hecho, ya lamentable de por sí, es especialmente flagrante cuando la rectora apoyó el software libre explícitamente en su programa electoral, que parece que para ganar votos está muy bien apoyar estas cosas pero a la hora de la verdad ya no tanto.

Para protestar contra esta situación un grupo de miembros de la universidad granadina ha analizado en profundidad la aplicación y ha escrito un documento en el que se exponen los problemas que genera y se presentan una serie de preguntas sobre el sentido de que haya publicidad y servicios de una entidad privada en una aplicación de una universidad pública, las condiciones del acuerdo con el banco, por qué no son públicos los datos como los calendarios y demás… Cuestiones todas ellas que son de lógica pura y que deberían estar respondidas en los documentos relacionados con la aplicación, pero que no lo están. Este documento fue presentado ante los responsables pero (hasta donde yo sé) no ha habido respuesta pública por su parte.

Por si todo el tema de que se regalen los datos a un banco no fuera suficientemente malo, resulta que la funcionalidad de la aplicación privativa se puede replicar en cuestión de minutos, adaptándolo a nuestras necesidades y con herramientas existentes y gratuitas. Nos lo cuentan en este hilo de Twitter:

Sigue leyendo

Lo que he aprendido: git y Matlab

Acabo de descubrir de una manera tontísima que Matlab se da cuenta de que el contenido de una carpeta está bajo control de versiones. Abrí una carpeta con mi código octaviano en Matlab y vi que junto a cada archivo salían chirimbolillos de colores:

git

El punto verde significa que estamos vigilando el archivo y no ha sufrido modificaciones (tracked and unmodified en la jerga) y el cuadradito azul que lo tenemos controlado pero que ha cambiado (tracked and modified). También nos puede aparecer un punto blanco que quiere decir que no tenemos el archivo bajo control (untracked).

Estos simbolitos los veremos a pesar de que no tengamos git instalado, si lo tenemos instalado podremos además añadir y commitear desde la propia interfaz de Matlab. Si hacemos click derecho en algún punto de la ventanita de los archivos veremos que tenemos una opción de Source control desde la que tenemos acceso a las acciones típicas que solemos hacer desde la terminal en versión visual.

matlab

Una cosa importante es decirle a git que archivos de Matlab como los fig y los mat son binarios para que no nos hurgue en ellos y nos los estropee. Para eso tenemos el archivo .gitattibutes, que situamos (generalmente) en la raíz del proyecto y que nos sirve para decirle a git como manejar sus asuntos. Matlab recomienda nuestro .gitattributes tenga esta pinta:

# Marcar como binario
*.mat -crlf -diff -merge
*.fig -crlf -diff -merge
*.p -crlf -diff -merge

Esto le indica a git que no haga ni diff ni merge en esos tipos de archivo y que no toque el final de línea. También podrían marcarse directamente con binary que es equivalente a -text -diff -merge, donde -text es a su vez equivalente a -crlf, es decir, a no tocar el final de línea.

En resumen, no creo que vaya a hacer commits desde la interfaz de Matlab, pero me parece útil ver el estado de cada archivo con un simbolito. También lo veo interesante para acercar a los ingenieros de la piedra y el palo (como yo) al mágico mundo del control de versiones. Conozco a muchísimos que programan en Matlab cosas grandes y serias y a casi ninguno que tenga su código controlado.

Referencias

Set Up Git Source Control en la página de MathWorks

Git for Windows

Git Attributes

En qué ando: septiembre

Septiembre ha sido un mes raruno. Me accidenté en el autobús viniendo de la playa para ver Montalbano, el día siguiente me llamaron para empezar a trabajar de investigadora y he empezado a ir a clases de italiano. Ando todavía un poco desubicada y sin organizar, pero ¡me ha dado tiempo a escribir alguna cosilla!

Lo más destacable (y lamentable) es que vuelven las entradas relacionadas con Windows, lo necesito para usar algún programa (privativo) de CAD y de elementos finitos y así. Una de las primeras cosas que hice en Windows fue activar bash para que se me hiciera menos duro el cambio.

En cuanto al resto de entradas técnicas, escribí sobre ver pdfs en Emacs y sobre los paquetes de Octave, ambas cosas subproductos de otros trabajos que me tocó hacer.

También me animé por fin a hablar de DuckDuckGo, mi querido pato y compartí con vosotros algunos truquillos para buscar. Lo genial del tema es que los del pato se enteraron y ¡me han creado un Easter Egg personalizado!

Pinchad en el enlace y mirad a la esquina superior izquierda donde el pato, vais a ver qué pasa. Me encanta ❤

Lo que si que parece es que hice miles de panes y bizcochos. El primero fue un pan de trigo sarraceno, seguido de un bizcocho con piñones, otro de aguacate y un último de [chocolate y cerveza negra]. ¡Al final acabaré pesando 100kg! ¡Bieeeen!

Pues esto es el resumen del mes damas y caballeros, el próximo más. Os dejo con un pato.

pato

Foto de Filip Stepien. Licencia CC BY 2.0

Lo que he aprendido: manejando paquetes de Octave

Aquí ando dibujando gráficas locas en Octave. La idea original era hacerlas en Matlab (recordad el regreso al capitalismo), pero no sé cómo demonios activar la licencia de la uni, así que he recurrido a mi fiel Octave, libre y disponible para todos sin necesidad de romperse la cabeza con licencias y mierdas varias. En fin, a lo que íbamos: los paquetes de Octave.

El gestor de paquetes de Octave

Aparte de la funcionalidad que ya trae consigo mismo, Octave puede llegar mucho más lejos gracias a Octave Forge, su centralita de paquetes de expansión. La manera recomendada para instalar estos paquetes es desde los repositorios de nuestra distro, solo hace falta buscarlo como tantas veces hemos hecho:

ondiz@slimbook:~$ apt-cache search octave PAQUETE

Muy fácil. Pero, ¿qué pasa si el paquete en cuestión es antiguo? ¿y si estamos en Windows? Pues igual que ocurría con TeXLive, podemos buscar el paquete correspondiente en los repositorios o usar una especie de gestor que tiene Octave. La orden para manejar paquetes no se nos puede olvidar porque es pkgpackage!) y tiene la misma pinta que nuestros conocidos y amados cabal, pip o gem. Os hago un microresumen para que no tengáis que leer el manual:

  • pkg install -forge PAQUETE instala PAQUETE desde Forge
  • pkg install PAQUETE.tar.gz instala PAQUETE desde archivo descargado
  • pkg uninstall PAQUETE desinstala PAQUETE
  • pkg list lista los paquetes instalados
  • pkg load PAQUETE carga PAQUETE para que podamos usar sus funciones
  • pkg update actualiza los paquetes instalados desde Forge

Seguir leyendo →

Camino a la panificación: bizcocho de chocolate y cerveza negra

Había por ahí unas latas de cerveza negra de las que usamos en casa para la máquina del pan que iban a caducarse, tenía excedente de yogur y necesitaba cocinar algo para desayunar para empezar bien el día. Recordé el bizcocho chocolateado de birra verdadera que llevé al curro el año pasado por mi cumple y pensé que podía ajustarlo para usar chocolate en lugar de cacao, ya que es difícil encontrar cacao bueno en mi pueblo.

En el supermercado vi una tableta de chocolate artesano con 95% de cacao producida en Navarra y pensé que no era mal sustituto a mi chocolate de comercio justo habitual, imposible de localizar sin ir a la capital. En definitiva, reduje un poco las cantidades porque el molde era más pequeño que el de la otra vez y me puse manos a la obra.

Os cuento mi proceso para un molde tipo plumcake de 25 × 11× 7 cm³:

Bizcocho de chocolate y cerveza negra

Un bizcochaco muy negro


Ingredientes

  • 200g cerveza negra (el resto para el cocinero)
  • 200g yogur filmjolk casero
  • 100g azúcar (he probado con panela y con azúcar blanco. Probablemente pueda reducirse e incluso eliminarse si se le añade alguna especia o algo de café)
  • 80g chocolate 95% cacao
  • 3 huevos
  • 250g harina (lo he hecho con harina integral y con mezcla 200g blanca y 50g integral)
  • 1.5 cucharaditas de bicarbonato

Direcciones

  1. Partí el chocolate en trozos y lo derretí al baño maría. ¡Cuidado que no se queme!
  2. Verificando que el chocolate no estaba muy caliente, añadí los huevos uno a uno y fui batiendo bien.
  3. Incorporé el azúcar y añadí los líquidos.
  4. Cuando estuve todo fino, agregué la harina tamizada con el bicarbonato y mezclé con una lengua hasta que quedó uniforme, sin batir para no desarrollar el gluten.
  5. Horneé en horno precalentado a 175º 35′. Aquí como siempre, cada horno es un mundo y hay que vigilar.

El resultado es un bizcocho jugosete y muy negro, al que le va que ni pintado un frosting de queso tipo mascarpone.