Archivo de la categoría: Lo que he aprendido

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 →

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

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 →

Lo que he aprendido: bash en Windows

Lo del volver al curro ha tenido un daño colateral bastante duro: ¡volver a Windows! Tras estos meses linuxeros el regreso a las actualizaciones que provoquen que el ordenador tarde media hora en encenderse se me está haciendo horrible.

Estoy viendo la luz al final del túnel gracias a que desde hace un tiempecito se puede instalar bash y software de Ubuntu en Windows 10. Por lo que he entendido han hecho una especie de Wine inverso gracias al cual se puede usar el gestor de paquetes de Ubuntu. Mola el tema porque se evita uno usar Cygwin, que está muy bien pero que es una locura, o instalar la versión Windows de todos los programas (git, Pandoc, Jekyll…) y modificar los paths correspondientes y tal.

Sigue leyendo

Lo que he aprendido: ver pdfs en Emacs

¡Hola! Últimamente no escribo tan a menudo porque el capitalismo me ha vuelto a atrapar en sus redes. Que he empezado a currelar, vaya. Y entre la mudanza, el nuevo trabajo, que salí despedida de un buseto y demás cosas locas que pueblan mi vida no doy para más.

Lo que os vengo a contar hoy es algo que he descubierto haciendo una presentación sobre mí misma que me han pedido en el trabajo. Aprovechando que tenía mi ordenador la he escrito en Markdown en Emacs y luego la he convertido en un pdf con Pandoc. Mi típico proceso del que he hablado en cantidad de ocasiones. Como llamo a Pandoc desde la terminal en Emacs (un día lo integraré) me ha venido la cosa de abrir también el pdf final en Emacs ¡y no salir de Emacs nunca jamás! JUAJUAJUA. Bueno, me centro.

El modo DocView

La cuestión es que Emacs ya es capaz de ver pdfs (es megalisto), gracias al modo DocView, que permite abrir documentos DVIs, PostScript, OpenDocument y hasta de Microsoft Office. Para ello los convierte en imágenes que carga y muestra.

Sigue leyendo

Lo que he aprendido: selección rectangular en Emacs

La selección rectangular es una de las cosas por las que amo Emacs, una vez que la pruebas ya no puedes vivir sin ella. ¿En que consiste esa cosa tan espectacular? me diréis. Veámoslo con un ejemplo: imaginemos que tenemos esta tabla en un archivo de texto plano:

A    24
B    24
C    45
D    78
E    13

De repente nos damos cuenta de que hemos metido dos veces el dato para A y que tenemos todos los números una fila más abajo de lo que corresponde. Argh. Sería guay poder seleccionar los datos correspondientes a la columna y situarlos en la posición correcta, ¿no? ¡Pues con Emacs podemos gracias a la selección rectangular!

Sigue leyendo