Archivo de la etiqueta: truco

Lo que he aprendido: trucos para borrar desde la terminal

Aquí en mi gesta para parecer que sé usar el ordenador he aprendido nuevos truquillos, en este caso para borrar cosas. Os cuento.

Borrar el contenido de un fichero

Me acabo de encontrar un truco todo loco para dejar un archivo vacío pero que se le mantengan los permisos. Simplemente redirigimos nuestro querido periférico nulo al archivo en cuestión:

cat /dev/null > ARCHIVO

Así nos ahorramos el tener que borrarlo, crear uno nuevo y asignarle los permisos correspondientes.

Para ver que efectivamente se mantienen los permisos he hecho esta prueba:

$ echo "Letra aleatoria" > archivo
$ chmod +x archivo
$ ls -l archivo
-rwxr-xr-x 1 usuario grupo 16 jul  2 12:09 archivo
$ cat /dev/null/ > archivo
$ ls -l archivo
-rwxr-xr-x 1 usuario grupo 0 jul 2 12:12 archivo

También se ve que el archivo se vacía, ya que el último ls nos dice que su tamaño es de cero.

Borrar el contenido de una carpeta

Todos conocemos el mítico rm -r para borrar una carpeta y su contenido, pero a mí al menos me da miedillo. Ahora he aprendido sobre dos opciones que me ayudan a saber lo que estoy haciendo:

  • --verbose, -v: explica lo que va borrando.
  • --interactive, -i: nos va preguntando si queremos borrar o no cada uno de los archivos. También hay una versión -I que solo pregunta al borrar más de tres cosas, lo que es menos molesto.

Por ejemplo, si usamos la opción -v vemos lo siguiente:

$ rm -rv carpeta
«carpeta/archivo» borrado
directorio borrado: «carpeta/»

La versión interactiva hace algo así:

$ rm -ir carpeta
rm: ¿descender al directorio «carpeta/»? (s/n) s
rm: ¿borrar el fichero regular «carpeta/archivo»? (s/n) s
rm: ¿borrar el directorio «carpeta/»? (s/n) s

Hasta aquí el briconsejo de hoy. ¿Qué trucos usáis vosotros para borrar? Comentadme debajo para que aprendamos todos 🙂

Referencias

Man de rm

Lo que he aprendido: limpiar un repo

Leyendo por ahí como es mi costumbre me he encontrado con un par de trucos de git para hacer limpieza en nuestro repo. La limpieza en cuestión tiene dos partes: eliminar los archivos que hemos creado nosotros pero que no queremos tener bajo control y que el propio git adecente sus historias.

Quitar nuestras mierdas

Para eliminar de un plumazo todos los archivos a los que no estemos haciendo un seguimiento simplemente hacemos:

git clean -f

La -f viene de force, nos obliga a escribirlo si queremos que borre, es precavido él.

Este comando tiene varias opciones interesantes:

  • -d elimina también las carpetas
  • -i inicia el modo interactivo
  • -n no elimina de verdad pero vemos una lista de archivos que eliminará.

Podemos usarlo en combinación con git reset --hard para devolver el repo al estado en el que estaba justo tras el último commit. Otra aplicación interesante es cargarnos los archivos auxiliares que aparecen al compilar algo, es especialmente útil si los tenemos en el .gitignore, así no nos saldrán al commitear y tendremos el repo bien limpio.

Yo lo uso concretamente para matar los archivos auxiliares de LaTeX, que llega un momento en que me agobian y no sé qué demonios es lo que tengo que modificar. Mi .gitignore en un proyecto latexiano suele tener esta pinta:

# Ignorar archivos auxiliares de Latex

! *.tex
! Contenido/
! Figuras/

De esta manera, si me organizo en condiciones solo tengo bajo control los archivos necesarios y puedo destruir el resto con git clean.

Adecentar las cosas de git

Aparte de borrar nuestras basuras, git también es capaz de hacer limpieza sobre sus archivos. Para ello tenemos este simpático comando:

git gc

Sirve para que git gestione mejor el espacio y quite las referencias que ya no sirven, por ejemplo. Podemos ejecutarlo con la opción --auto para que actúe solo si es necesario. No os puedo decir en detalle qué hace ya que git es una cosa muy loca, pero me parece un comando a tener en la recámara, sobre todo en los proyectos grandes o con archivos binarios (como los pdfs).

Nada más por hoy, ¿qué trucos de git usáis vosotros, gentes del Internet? Contadme para que aprenda 🙂

Referencias

Man de git clean

Man de git gc

Undoing Changes en el tuto de Atlassian

Is there a way to clean up git? en StackOverflow

git gc: cleaning up after yourself git-fu

Git Tip of the Week: GC and Pruning


Bailando en la cocina:

Lo que aprendido: destacar términos de ecuaciones en LaTeX

Hoy en los trucos rápidos de LaTeX tenemos maneras de destacar términos de una ecuación. Esto es especialmente interesante cuando estamos explicando el significado de los diferentes términos de determinada ecuación o queremos remarcar una ecuación especialmente interesante.

Cajas de colores con tcolorbox

Vuelve nuestro viejo amigo tcolorbox para ayudarnos a pintar cajas multicolores en las ecuaciones. Necesitamos antes de nada cargar la biblioteca theorem que carga a su vez el paquete amsmath:

\usepackage{tcolorbox}
\tcbuselibrary{theorems}

Ahora tenemos disponibles los comandos \tcboxmath, que nos dibuja una caja alrededor de una ecuación o uno de sus términos, y \tcbhighmath, un caso especial del anterior que depende del contexto. Estos dos comandos se utilizan igual que otras cajas que hemos visto anteriormente con la única diferencia que van dentro de un entorno para escribir ecuaciones:

\begin{equation}
 a x^2 + bx + c = 0 \rightarrow 
\tcboxmath[colback=magenta!25!white,colframe=magenta, title=Solución]
{x = \frac{-b\pm\sqrt{b^2-4ac}}{2a}}  
\end{equation}

Nos daría este resultado, terriblemente apropiado para poner en un documento científico ❤ :

eqSol

Seguir leyendo →

Lo que he aprendido: el comando find

El comando find me lía. Es así. Así que después de un comentario explicativo de mi hermano he decidido ganarle y aprender a usarlo para no tener que usar locate todo el rato.

Suelo buscar así:

sudo updatedb
locate PATRÓN

Donde PATRÓN es el nombre de lo que quiero encontrar, generalmente usando comodines.

Usando find para hacer lo mismo tendría que escribir:

find LUGAR -name PATRÓN

Seguir leyendo →

Lo que he aprendido: wrapfig

Hoy traigo un truco rápido de LaTeX. Madre mía, siempre hablo de LaTeX últimamente, echadme la bronca maldita sea. En fin, que he descubierto el paquete wrapfig que sirve, como su nombre indica, para rodear las imágenes con texto.

Así funciona:

\begin{wrapfigure}[NÚMERO LÍNEAS]{POSICIÓN}[OVERHANG]{ANCHO}
% Insertar imagen
\end{wrapfigure}
  • NÚMERO DE LÍNEAS es un parámetro opcional que indica el número de líneas de texto que irán en paralelo a la imagen.
  • POSICIÓN indica la posición de la figura respecto al texto, puede tomar los valores l (left), r (right), i (inside, cerca de la unión en los documentos a dos páginas) y o (outside, cerca del borde en los documentos a dos páginas). Todas estos valores tienen versiones en mayúsculas que permiten a la figura flotar, las minúsculas son equivalente a la opción H para las figuras de toda la vida.
  • OVERHANG es un parámetro opcional que indica cuanto margen puede invadir la figura. Por defecto este valor es cero.
  • ANCHO es el ancho del hueco que hay que reservar para meter la figura.

También tiene un entorno equivalente para tablas, wraptable. Hay que tener cuidado porque las figuras y las tablas creadas así no son objetos flotantes como los de costumbre y eso puede dar lugar a cosas raras, pero por lo demás va bastante bien.

He fusionado esta funcionalidad recién aprendida con nuestros viejos conocidos blindtext y tcolorbox para crear este cuadrado con imagen. A ver si sabéis para qué quiero usarlo 😀

colorbox

Seguir leyendo →

Lo que he aprendido: una manera salvaje de actualizar paquetes de LaTeX

Hoy os voy a contar un truco de esos que no hay que usar pero que a mí me encantan. Esto viene de un bug de titlesec que desgraciaba los número de sección y que se solucionaba en la siguiente versión del paquete. Los que usáis tlmgr me diréis que actualizar un paquete es de lo más fácil, pero no lo es tanto cuando dependes de los paquetes viejunos de tu distro linuxera. En fin, ¡ahí va el truco!

Primero localizamos el paquete en cuestión, en este caso titlesec:

ondiz@slimbook101:~$ locate titlesec.sty
/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty

Uso locate porque find me lía, soy así de monger.

Ahora podríamos ir a la carpeta y cambiar su contenido por lo que hay en CTAN para la versión más moderna, pero como solo necesitamos el nuevo sty podemos descargarlo directamente en esa carpeta usando wget:

sudo wget http://mirrors.ctan.org/macros/latex/contrib/titlesec/titlesec.sty -O /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty

¡Hala! ¡Problema con la versión del paquete solucionada! Evidentemente esta no es la manera de actualizar todos los paquetes, pero nos ayuda en esos casos de desesperación en los que tenemos que acabar algo ya y todo nos va mal.


Suena en mi casa:

Lo que he aprendido: grabando la terminal

Una cosa lleva a la otra y mostrar aquí cómo funciona Yokadi me hizo aprender a grabar lo que iba escribiendo en la terminal. Voy a hablaros de dos programillas:

Script

Script es una herramienta de UNIX que nos permite grabar una sesión de la terminal en un archivo que después podemos reproducir. Es muy fácil de utilizar, empezamos a grabar con script y paramos con exit o Ctrl+D. Si no le damos un nombre de archivo, creará uno llamado typescript:

ondiz@slimbook101:~$ script
Script iniciado; el fichero es typescript
ondiz@slimbook101:~$ echo 'Hola!'
Hola!
ondiz@slimbook101:~$ exit
Script terminado; el fichero es typescript
ondiz@slimbook101:~$ 

Para reproducir lo que hemos grabado usaremos el comando scriptreplay. Para ello necesitamos también el archivo de con los tiempos que generamos así con script:

script -t 2> tiempos

scriptreplay da por hecho que el archivo que tiene que leer se llama typescript (podemas darle otro tras -s) y solo necesita que especifiquemos el archivo con los tiempos:

scriptreplay tiempos

Esto nos repetirá lo que habíamos guardado.

Aquí tenéis su manual para que le deis caña.

Asciinema

Asciinema va un paso más allá y nos genera un vídeo en su web, que luego podemos compartir mediante la URL. Digamos que es como un gist de vídeo.
Si he entendido bien, lo que hace por dentro es grabar lo que vamos escribiendo en un archivo JSON (asciicast) que envía a la web y luego su reproductor interpreta. Este reproductor interpreta los códigos de escape ANSI, las secuencias con las que se controla el formato y movimiento en la terminal. Por ejemplo, si ve un \033[5A mueve el cursor hacia arriba cinco líneas y con \033[0;32m pone el texto de color verde1.

Vamos a ver cómo se usa. Como no lo tenía en los repositorios, lo instalé con pip3:

sudo pip3 install asciinema

Iniciamos la grabación con asciinema rec, nos mostrará este mensaje:

ondiz@slimbook101:~$ asciinema rec
~ Asciicast recording started.
~ Hit Ctrl-D or type "exit" to finish.

Paramos de grabar escribiendo exit o con Ctrl+D, al igual que script. Nos mostrará un mensaje explicando cómo hacer para subir la grabación a la web o matarla:

~ Asciicast recording finished.
~ Press  to upload,  to cancel.

Si le damos un nombre de archivo a asciinema rec, nos guardará el JSON, que tiene esta pinta.

Este archivo podemos reproducirlo en la terminal con asciinema play o subirlo a la web con asciinema upload.

Podéis leer más sobre asciinema en su documentación. Los frikazos hasta podéis hurgar en el código.

Espero que grabéis muchas cosas ahora 😀


  1. Tenéis una explicación mejor sobre los códigos de escape en el capítulo 13 – Customizing The Prompt de The Linux command line