Obtener datos provechosos del uso de memoria

Memoria Virtual y ps_mem

Hay herramientas que sirven para cuanta memoria consume un determinado proceso, pero ps_mem en cambio puede calcularla por programa.

Está escrito por Pádraig Brady es encargado de mantenimiento de las GNU coreutils, e involucrados en otros importantes proyectos de software libre.

Todos los programas

La memoria compartida es problemático para calcular, y la herramienta automáticamente selecciona el método más exacto para el kernel en ejecución.

Además de la memoria que es específica para un programa, esta herramienta puede calcular de la manera más exacta la memoria compartida para comunicarse con otros procesos.

Importante: Necesita privilegios de root para dar resultados más exactos.

Por Procesos

También puede mostrar los valores diferenciados de acuerdo a sus argumentos:

Diferenciados según argumentos

La herramienta funciona examinando el directorio proc analizando por cada proceso la línea del comando completa, el estado, las asignaciones de memoria y la cantidad de páginas de memoria utilizadas.

En definitiva, ps_mem un complemento excelente para ps, free y top

Presentaciones con Backslide

Funcionalidades

  • Generador de plantillas para obtener distintos diseños visuales.
  • Servidor de previsualización.
  • Exportación de HTML autocontenido.
  • Conversión automatizada a formato PDF.
  • Soporte de presentaciones múltiples.

Bases

Este software se basa en Remark.js y Markdown. Utiliza DeckTape para exportar la presentación a un archivo PDF. Para generar estilos usa Sass, el cual es un lenguaje compatible con CSS que permite usar variables y funciones, anidar y mezclar reglas, etc. Para el servidor de previsualización usa node.

Instalación

La instalacíón se hace sencillamente con el gestor de paquetes de javascript npm:

npm install backslide

En mi caso prefiero instalarlo como usuario común y no como root, no obstante hay que tener en cuenta luego de que esté en la variable PATH. Por ejemplo:

ln -s $HOME/node_modules/backslide/bin/bs $HOME/.local/bin/bsa

Creación de dispositivas

Para comenzar a crear nuestra presentación es necesario ejecutar el siguiente comando:

bs init

Este comando generará un árbol de archivos como el siguiente:

.
├── presentation.md
└── template
    ├── index.html
    ├── remark.min.js
    └── style.scss

1 directory, 4 files
  • El contenido lo generaremos editando el archivo presentation.md

Por ejemplo:

title: Linux Operador C1   
class: animation-fade
layout: true

<!-- This slide will serve as the base layout for all your slides -->
.bottom-bar[
        {{title}}
]

---
background-image: url(assets/imgs/a-1644824-unsplash.jpg)
class: impact

# {{title}}
## Permisos, tuberías y redireccionamiento

![](assets/imgs/clase1-LiOp.jpg)

---

## Otra Slide

- item 1
- item 2
- item 3

---

## Otra Slide

- item 1
- item 2
- item 3

--

- item 4
- item 5
- item 6

El directorio template contiene:

  • styles.scssLa hoja de estilos en Sass
  • remark.min.jsLa copia offline de Remark.js
  • El archivo html que invoca los dos archivos de arriba

Edición y reproducción

Entonces, el principal archivo que debemos modificar y adaptar es presentation.md. Algunas cosas para tener en cuenta:

  • La primera diapositiva suele tener el atributo layout: si su valor es truela misma se usará como plantilla para el resto de las diapositivas.
  • Cuando se quiere aplicar una clase se usa el siguiente formato:
.NombreDeClase[
    contenido
]

Por ejemplo, el siguiente código:

.col-6[
- item 4
- item 5
- item 6]

Será convertido al siguiente HTML:

<div class="col-6"><ul>
<li>item 4</li>
<li>item 5</li>
<li>item 6</li>
</ul>
  • Si se desea aplicar la clase a toda la diapositiva se debe anteponer el atributo class:
---

class: alt-bg

## Ejemplo

- item 4
- item 5
- item 6
  • De hecho, se puede aplicar una imagen de fondo a la diapositiva:
---   

background-image: url(superfoto.jpg)              

## Ejemplo

- item 4
- item 5
- item 6
  • Para hacer aparecer el contenido de manera progresiva se usa el separador --:
## Ejemplo
- item 1
--

- item 2
--

- item 3

Es decir la idea es crear contenido en presentation.md y los detalles del formato los podemos definir en styles.scss:

Usando Backslide

Mientras editamos obviamente queremos ver como va saliendo nuestra presentación, en cuyo caso ejecutamos:

bs serve -p 4444

El puerto es opcional, pero es útil si necesitamos trabajar con más de una presentación a la vez, usando obviamente diferentes puertos para cada una.

Exportación

Para exportar se usa:

bs e

Tener en cuenta que cualquier archivo con extensión .md será procesado por bs

En el directorio distestá el html con la preentación completa.

y para convertir a pdf:

bs p

El archivo resultante estará en el directorio pdf.

Conclusión

Me resultó un poco más cómodo trabajar con Backslide que con MarkDeck ya que no es necesario contar con docker para crear y/o probar las presentaciones. La plantilla que viene predeterminada está bastante bien y puede ser modificada a gusto, además los controles para ver las notas del orador y navegar por la presentación son muy útiles.

MarkDeck o hay vida más allá del pagüerpoin

El modelo de software de oficina de los '90 relegan la importancia del contenido frente a la sobreabundancia de herramientas.

Por ejemplo, supongamos que queremos o necesitamos a hacer una presentación. La interfaz del programa podría abrumarnos o distraernos. Aplicaciones como Impress de LibreOffice es de gran ayuda como alternativa a PowerPoint, pero podemos pensar en maneras alternativas de hacer una presentación. Podemos centrarnos en escribir el texto, seleccionar imágenes, gráficos, etc. sin resignar un buen "look and feel".

Asi es como en la actualidad tenemos distintos proyectos de software libre que tienen este enfoque. Uno de ellos se llama MarkDeck creado por Arne Hilmann. Este software convierte markdown a html5 con un aspecto atractivo, sin necesidad de subirla a internet en ningún momento. Solamente usando markdown usando nuestro editor de textos preferido (neovim en mi caso :wink: )

Bases

Como es habitual en el desarrollo de software libre MarkDeck está subido a los hombros de otros proyectos preexistentes, los cuales son:

  • Markdown: Un LML para crear HTML.
  • Pandoc: Es una librería escrita en Haskell que sirve para convertir entre distintos formatos de procesadores y lenguajes de marcado de texto.
  • reveal.js: Se trata de un framework para crear presentaciones en HTML.
  • PlantUML: Una herramienta basada en java para crear diagramas
  • Ditaamini: Librería de la extensión de diagramas para asciidoctor
  • ASCIIToSVG: Programa para convertir arte ascii en diagramas en formato svg
  • Graphviz: Es un programa para hacer diagramas a partir de archivos de textos escritos (principalmente) en el lenguaje DOT.
  • asciinema: Un grupo de herramientas para grabar y reproducir sesiones de terminal
  • DeckTape: Exportador de archivos PDF a partir de páginas web
  • vega-lite: Genera gráficos interactivos a partir de archivos json
  • mathjax-pandoc-filter: Filtro de pandoc para convertir fórmulas matemáticas de LaTeX en en SVG embebido
  • font-awesone: Es un grupo de íconos y CSS para la web

Instalación

Un requisito para usar MarkDeck es tener instalado docker y docker-compose ya que utiliza una serie de containers para lanzar los servicios que nos permiten tanto editar la presentación como reproducirla. Otro detalle a tener en cuenta es que al usar docker necesitamos privilegios mayores a los de un usuario común, para ello es conveniente agregar nuestra cuenta a la del grupo docker. Para que quede así por ejemplo:

grep docker /etc/group
docker:x:1001:sergio

Luego podemos crear un directorio en el cual estarán los archivos de nuestra presentación y los de MarkDeck y entrmos en el mismo:

$ mkdir new-ppts1 && cd new-ppts1

A continuación descargamos el archivo scaffold con nuestra herramienta preferida:

$ http -d https://raw.githubusercontent.com/arnehilmann/markdeck/master/scaffold

El archivo scaffold.txt es un script de bash que define y ejecuta los containers de Docker usando docker-compose. Arrancamos el servicio de docker si no está activo: $ sudo systemctl start docker

Y luego ejecutamos el script:

./scaffold.txt

markdeck-start

Podemos comprobar además los containers que están corriendo: Containers de MarkDeck

Archivos de MarkDeck

Archivos de MarkDeck

  • El script start para arrancar los containers
  • El script stop para detener los containers
  • El script update-mardeckque vuelve a descargar y ejecutar el archivo scaffold
  • El directorio deck que guarda los archivos de la presentación renderizada
  • El directorio assetses donde ponemos los archivos que queremos que sean permanentes, tales como imágenes, hojas de estilo en cascada, sesiones de terminal, etc.
  • En el directorio deck podremos encontrar un archivo pdf generado a partir de la presentación.

Editando y reproduciendo la presentación

  • Hay que editar el archivo slides.md
  • La presentación se ve en http://localhost:8080

Reproducción de MarkDeck

  • Tiene una serie de recursos útiles en http://localhost:8081
  • Un archivo de presentación comienza con una sección de configuración del tipo y luego cada slide comienza con un encabezado de primer nivek en markdown:
---
title: Introducción a Linux - Clase 1
variant: impress
pdf: intro_linux-clase1.pdf
slideNumber: true
controls: true
controlsTutorial: true
asciinema: true
standalone: slides.html
---

# Slide 1

- item 1
- item 2
- item 3

# Slide 2

- item 4
- item 5
- item 6

Una configuración importante es standalone: slides.html la cual sirve para generar un archivo web con todos los objetos de la página embebidos (podremos encontrar el archivo en deck/slides.html) y poder transportarla a otra computadora.

Hay varias maneras de enriquecer la presentación con:

  • Fondos de diapositivas (colores, gradientes, imágenes)
  • Íconos de font-awesome
  • emojis
  • resaltado de código
  • Diagramas con asciiart
  • Equaciones matemáticas
  • Sesiones de terminal
  • Nube de palabras (en realidad es una herramienta externa)

Conclusión

Nos guste o no hoy casi toda la informática gira en torno a un navegador web. La ofimática se ha movido de aplicaciones faraónicas a la web. Por eso tiene sentido trabajar en su lugar con pequeñas aplicaciones que hagan bien una determinada tarea, al mejor estilo UNIX. Teniendo nuestra aplicación en HTML neutraliza el problema de los formatos cerrados de software monopólico.

Diapositiva de MarkDeck

Enlaces

GNU y Linux

Retomo esta controversia sobre el nombre del sistema operativo. ¿Cómo deberíamos llamarlo GNU/Linux o Linux? Como obedeciendo un mandato religioso, muchos siguen escribiendo GNU/Linux. ¿Tendrá importancia? Bueno, tal vez no tanta como le podría asignar Richard Stallman, pero creo que sí porque tiene que ver justamente con la libertad de la que tanto declama el presidente y fundador de la Free Software Foundation.

La posición de Stallman y sus seguidores dice que debería llamarse GNU/Linux1, la otra sostiene que Linux es la denominación correcta. Los primeros sostienen que GNU/Linux hace justicia el hecho de que Richard Stallman tenía como propósito crear un completo sistema operativo llamado GNU. Y dado que Linus Torvalds solamente aportó el núcleo del sistema operativo a un conjunto de herramientas pre-existentes el nombre debe ser compuesto. Desde la visión opuesta2 dicen que es tan grande la cantidad de componentes en una distribución de Linux que siguiendo ese razonamiento tendríamos nombres bastante complejos como Plasma/KDE/Xorg/GNU/Linux.

Además, desde ambas partes nos recuerdan que hay sistemas con núcleo Linux que no poseen las herramientas GNU, por ejemplo, Android.

La posición GNUista tiende a minimizar la importancia de Linux: "es sólo un kernel". Cabe recordar que el núcleo Hurd recién comenzó a estar apenas usable 10 años después de la creación de Linux y 18 años más tarde del surgimiento del proyecto GNU3. De hecho, en la actualidad no tiene la madurez que se espera para un sistema operativo productivo4.

CentOS5 saca provecho del código fuente de Red Hat para crear una distribución de Linux. Hago hincapié en este ejemplo en particular, ya que no hay pretensión de originalidad en el proyecto. De hecho me animaría a decir que es un caso extraordinario de aprovechamiento de la la licencia GNU GPL. Dicen, frente a la pregunta si le hacen alguna modificación a las mismas

No. El mandato esencial de CentOS para nuestros repositorios base y de actualizaciones es NO extender o mejorar los paquetes o funcionalidades más allá de las que suministra los RPM's fuente del upstream (es decir Red Hat). CentOS se esfuerza intencionalmente en proporcionar funcionalidad binaria a nuestros usuarios. CentOS ofrece otros repositorios (opcionales) 6

A nadie se le ocurriría llamarlo Red Hat/CentOS.

  • Ubuntu está basada en Debian y nadie hablar de Debian/Ubuntu.
  • OS X deriva de Darwin y este a su vez de FreeBSD. A nadie se le ocurriría llamarlo de FreeBSD/Darwin/OS X.

En realidad, muchas distribuciones ni siquiera usan el nombre de Linux. ¿Alguien se ha quejado por eso? En cambio si es frecuente leer cosas como GNU/NetBSD por citar apenas un caso. Es injustificable esa diferencia. Creo que Stallman confunde el reconocimiento hacia el proyecto GNU con el derecho que cada uno tiene para iniciar un camino paralelo.

¿No es acaso Linux ejemplo de la famosas libertades del software reclamadas por el movimiento del software libre?: la libertad 1 de :

"...estudiar cómo funciona el programa, y cambiarlo para que haga lo que usted quiera (libertad 1). El acceso al código fuente es una condición necesaria para ello. 7

Y la libertad 3 de :

La libertad de distribuir copias de tus versiones modificadas a otros. 7

Más aún, creo que Stalmann está en todo su derecho a llamarle GNU/Linux. Pero presionar a otros para que se adapten sus deseos de uno, no tiene nada que ver con la libertad.


Información adicional:


  1. ¿Por qué GNU/Linux? - Proyecto GNU - Free Software Foundation 

  2. 4 Opinions supporting "Linux" 

  3. Linux y GNU - Proyecto GNU - Free Software Foundation 

  4. status Podríamos seguir profundizando cada uno de los argumentos, pero creo que el eje de la discusión es totalmente errado. Los stallmanistas insisten en cuestión de reconocimiento, algo que no tiene nada que ver en este asunto. No es una cuestión de reconocimiento. ¿Desde cuando los nombres son acumulativos? Cuando Linus Torvalds creó su kernel lo hizo empezando un nuevo proyecto. En ningún momento lo hizo como parte del proyecto GNU de Stallman. ¿Está mal? No lo se. Pero estaba y está en todo su derecho de escoger el nombre que le sea de agrado. De hecho, sabemos bien que el nombre no fue elegido por él. i La licencia GNU GPL hasta donde se, en ningún momento prohíbe crear un proyecto derivado con otro nombre. De hecho hay casos en el mundo del software que lo ilustran perfectamente, los cuales citaré a continuación: 

  5. What is CentOS Linux? 

  6. La traducción y el texto entre paréntesis es mío. Does CentOS change the upstream Source RPMs? 

  7. ¿Qué es el software libre? - Proyecto GNU - Free Software Foundation 

Expansión indirecta

Es conocida la funcionalidad de expansión de parámetros en bash, por ejemplo, si hacemos:

$ echo $XDG y luego presionamos la tecla TAB, la shell mostrará las variables que comienzan con XDG:

$XDG_CONFIG_DIRS      $XDG_SEAT             $XDG_SESSION_PATH
$XDG_CURRENT_DESKTOP  $XDG_SEAT_PATH        $XDG_SESSION_TYPE
$XDG_DATA_DIRS        $XDG_SESSION_CLASS    $XDG_VTNR
$XDG_MENU_PREFIX      $XDG_SESSION_DESKTOP  
$XDG_RUNTIME_DIR      $XDG_SESSION_ID

¿Pero tenemos una manera rápida para muestre todos los valores de esas variables? La respuesta es afirmativa:

$ for i in  ${!XDG*}; do echo "$i es ${!i}"; done
XDG_CONFIG_DIRS es /etc/xdg:/usr/share/kde-settings/kde-profile/default/xdg
XDG_CURRENT_DESKTOP es KDE
XDG_DATA_DIRS es /home/sergio/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_MENU_PREFIX es kf5-
XDG_RUNTIME_DIR es /run/user/1000
XDG_SEAT es seat0
XDG_SEAT_PATH es /org/freedesktop/DisplayManager/Seat0
XDG_SESSION_CLASS es user
XDG_SESSION_DESKTOP es KDE
XDG_SESSION_ID es 2
XDG_SESSION_PATH es /org/freedesktop/DisplayManager/Session1
XDG_SESSION_TYPE es x11
XDG_VTNR es 1

Bash hace dos cosas distintas en ${!XDG]} busca todas las variables que comienzan con XDG, mientras que ${!i} hace una expansión indirecta, de alguna manera es como una variable que apunta a otra. Interesante, no ;) ?

Usando containers con systemd

Una funcionalidad tal vez poco conocida de systemd es la capacidad de correr containers sin necesidad de lxc o docker. Debajo describiremos brevemente dos de sus componentes.

¿Qué es systemd-nspawn?

  • Un container de espacios de nombres liviano para comandos o sistemas operativos
  • Virtualiza
    • La jerarquía del sistema de archivos
    • El árbol de procesos
    • Subsistemas de IPC
    • El nombre del host y del dominio
  • No se puede desde el container:
    • Modificar las interfaces de red del host
    • Cambiar el reloj del del sistema
    • Crear archivos de dispositivos
    • No se puede reiniciar el host
    • No se pueden cargar módulos del kernel del host
  • Para crear containers se usa:
    • dnf
    • debootstrap
    • pacman

¿Qué es systemd-machined?

Es un servicio que mantiene un seguimiento de las máquinas virtuales y containers y de los procesos que les pertenecen.

Como crear un container Debian

sudo debootstrap --arch=amd64 stretch /var/lib/machines/stretch-2

Como listar images

# machinectl list-images

Como setear la password de root en un container

Para setear la password de root ingresamos el siguiente comando: # systemd-nspawn -UD /var/lib/machines/stretch-2

La opción -U hace que se active el espacio de nombres de usuario. Se selecciona números de UID y GID al azar como dueño del directorio raíz del container y de ser necesario se realizan los ajustes de permisos y ACLs necesarios.

Como preparar el container

Para poder establecer la comunicación entre el host y el container es necesario instalar en este último el paquete systemd-container, de manera que ejecutamos en el mismo:

# apt-get update && apt-get install systemd-container

Luego salimos con Ctrl-D

Como arrancar un container

# machinectl start stretch-2

Como loguearse al container

# systemd-run --machine stretch-2 --pty /bin/login

Otra manera posible es:

# machinectl login stretch-2

Como configurar la red en el container

Hay varias maneras de configurar la red en el container, una manera es aprovecharse de una opción que utiliza systemd:

En resumen, --network-veth : - Crea un enlace virtual entre el host y el container. - La interfaz del host se llamará ve-MACHINE_NAME. Donde MACHINE_NAME será el nombre del container.

  • La interfaz del container se llamará host0.

Tras activar las dos interfaces y darle direcciones IP apropiadas, el host y el container podrán comunicarse por red.

El problema con esta configuración es que el container no tiene manera de acceder al mundo exterior, más allá del host. Ni siquiera configurando al host como default gateway. La manera de solucionarlo es sencilla: arrancando tanto en host como en container el servicio systemd-networkd y luego lanzando el cliente dhcp en el container.

Aquí vemos la configuración asignada al container:

Aun así, tuve que configurar el archivo /etc/resolv.conf a mano.

Como ver el estado de un container

# machinectl status stretch-2

Otra opción es:

# systemctl status systemd-nspawn@stretch-2.service

Conclusión

Teniendo en cuento que la mayoría de las distribuciones actuales más utilizadas usan systemd, es útil contar con un gestor de containers directamente integrado. Seguramente no reemplaza a otras soluciones más sofisticadas, pero para hacer demostraciones, debugging y testing es una excelente opción.

Sistemas de construcción de paquetes (Parte 3)

Los resultados son:

37 paquetes con autotools: Son paquetes en los cuales se encontaron los archivos configure.ac o configure.in y Makefile.am o Makefile.in

5 paquetes con cmake: Son paquetes que tienen el archivo CMakeLists.txt

21 paquetes con “sólo” [Mm]akefile, que no tienen los archivos arriba mencionados

36 paquetes con “autotools procedure”: Paquetes que siguen la secuencia “./configure && make”

Resultado actualizado a octubre 2019 (con otra muestra de paquetes)

11 paquetes con autotools: Son paquetes en los cuales se encontaron los archivos configure.ac o configure.in y Makefile.am o Makefile.in

6 paquetes con cmake: Son paquetes que tienen el archivo CMakeLists.txt

11 paquetes con “sólo” [Mm]akefile, que no tienen los archivos arriba mencionados

14 paquetes con “autotools procedure”: Paquetes que siguen la secuencia “./configure && make”

En la próxima las conclusiones

Paz y Propósito

En la materia de la Tierra había pensado Aulë, a quien Ilúvatar había concedido una capacidad y un conocimiento apenas menores que los de Melkor; aunque lo que deleita y enorgullece a Aulë es la tarea de hacer y las cosas hechas, y no la posesión ni su propia maestría; por tanto da y nos atesora, y está libre de cuidados, emprendiendo siempre nuevas tareas.

El Silmarillion, JRR Tolkien

En las organizaciones de todo tipo podemos encontrar al menos estos tres tipos de disfuncionalidades:

Autoestima deficiente

Si una persona no tiene una autoestima sana, buscará algunos de estos métodos para disfrazar o aliviar ese padecimiento:

  • Involucrarse en tareas que no coinciden con sus mejores habilidades
  • Buscar la propia valía a través de tareas que termina superando y agotando sus recursos
  • Desplazar a quienes se interpongan en su camino
  • Forzar acontecimientos
  • Decir lo que otros quieren, pero no formar y hablar con voz propia
  • Culpar a otros por fracasos propios
  • No reconocer el mérito por los logros propios
  • La ausencia de protagonismo
  • Insatisfacción
  • Bronca y en casos extremos, odio
  • Obsesión por las metas y poca satisfacción en el recorrido a la misma
  • Es muy común la búsqueda de poder "sobre" en lugar de poder "para".
  • Ver la vida como un juego de suma cero: "Para ganar, otro tiene que perder"

El mensaje del emisor se percibe distinto de acuerdo al receptor

Este es un fenómeno prácticamente universal, ya que todos tenemos tendencias y hábitos de comportamiento e historia personal única. Cada vez que comunicamos algo es interpretado por el otro de manera distinta al contenido e intención de mensaje original. Cuanta más diferencia halla en esa interpretación mayor es la probabilidad de conflicto.

Comunicación inoportuna

Si bien sería absurdo buscar un momento ideal o perfecto para comunicar algo, a veces un mensaje antes o después de algún momento puede también generar malentendidos, conflictos, retrasar o frustrar la resolución de un problema.

Podemos hablar horas, asistir a cursos y conferencias sobre Project Management, ITIL, metodologías ágiles, DevOps y muchos conceptos más, algunos más de moda que otros, pero si ignoramos estas disfuncionalidades solamente estaremos cambiando de problemas, no resolviéndolos.

Algunas propuestas para eliminar esas disfuncionalidades podrían ser:

  • Conocernos mejor
  • Hablar con nuestra propia voz
  • Desarrollar el sentido de la oportunidad
  • Entender que hay una vida más allá del "poder sobre". Que también existe el goce y el disfrute por aprender y por hacer
  • Entender que no somos omnipotentes, pero aun así somos protagonistas

En definitiva, que podamos hallar 'paz y propósito'. Que es en realidad algo bastante más concreto de lo que podríamos pensar.

Eligiendo Hostname

¿No les pasó muchas veces crear un host y no saber qué nombre ponerle? A mi me pasó. Hace un tiempo había encontrado un script que realizaba esa función. No me acuerdo cuál ni donde. De todas maneras , tenemos la manera de crear de fácilmente un nombre de host de manera aleatoria. Por ejemplo, el archivo /usr/share/dict/wordstiene una buena cantidad de palabras en inglés. Este archivo pertence al paquete words y la lista de palabras proviene del Moby Project. Bien, ya tenemos una lista de palabras. Ahora necesitamos alguna herramienta que elija al azar líneas de un archivo. A tal fin podemos usar shuf:

Si estamos intrigados sobre el significado de la palabra encontrada podemos buscarlo en wikipedia por medio de la herramienta wikit:

Otra manera sería usar los archivos de hunspell. Hunspell es el corrector ortográfico de LibreOffice, Firefox y Thunderbird, entre otros proyectos.

Si queremos tener un adjetivo y un sustantivo:

paste -d'-' <(tr ' ' '\n' < /usr/share/wordnet-3.0/dict/adj.exc|shuf -n1) <(tr ' ' '\n' < /usr/share/wordnet-3.0/dict/noun.exc|shuf -n1)

Y podemos hasta obtener el hostname con diseño:

Más información

VIM + Markdown = Sorprendente

¿Qué es?

En artículos anteriores ya habíamos hablado acerca de Markdown. VNote es una aplicación para tomar notas, diseñado especialmente para Markdown. Pero no es otro editor más. No posee doble panel como ReText o Haroopad. Tampoco es WYSIWYG como Typora o Mark Text. El problema con el primer enfoque es que contar con dos paneles no favorece a la concentración. La segunda táctica contradice en cierta manera el espíritu de markdown que es la capacidad de tener control sobre lo que se está escribiendo.

El intento de VNote por acortar la distancia entre escritura y lectura que ofrece Markdown es muy ingenioso. Recuerda al WYSIWYM del editor LyX. Claro, la diferencia es que markdown es por lejos, mucho más amigable que LaTeX.

VNote usa libretas, carpetas y notas para la jerarquía de las notas para administrar las notas. Este principio de una 1 nota, 1 archivo favorece la gestión por parte del usuario. Algo que no ocurre con otros intentos como MindForger, por citar un ejemplo.

Ficha

VNote
Author: Le Tan
Licencia: MIT
Sitio Web: tamlok.github.io/vnote

¿Para qué sirve?

  • Para escribir notas y organizarlas
  • Los siguientes usos no fueron parte principal del propósito que tuvo en mente el desarrollador, no obstante, se puede adaptar bastante bien para:*
    • Para escribir artículos técnicos
    • Para escribir posts para un blog
    • Para escribir documentación

Funcionalidades

  • Facilita el ingreso de textos frecuente (Snippets)
  • Expansión de palabras permite el ingreso de la fecha actual, nombres y otros textos de manera rápida (Word Magic). Viene con una lista predeterminada, pero se pueden agregar más a la misma
  • Plantillas
  • Temas y estilos
  • Guarda sesiones, es decir permite seguir trabajando con los mismos archivos que teníamos abierto en la sesión anterior
  • Exportación: Markdown con sus imágenes y adjuntos en una carpeta para distribuir, motor interno para convertir a pdf. También soporta la conversión usando wkhtmltopdf u otro comando personalizado.
  • Potente motor de búsqueda, que permite buscar entre una o más notas e incluso por tags de las mismas.
  • MathJax para interpretar ecuaciones matemáticas $$ a^2 + b^2 = c^2 $$
  • Diagramas mediante Mermaid o Flowchart
graph TD
A(VNote)-->B[Qué es];
     A-->C[Para qué se usa];
     A-->D[Funcionalidades];
     A-->E[Como instalarlo];
     A-->F(Conclusión);

  • Soporte para emojis

    Por favor no vote a un :cat:

emojis

  • Pestañas
  • Modo vim

Conclusiones

Me gusta que tenga un modo lectura y un modo edición, en lugar de código puro y panel para previsualizar, el modo Vim es sorprendente y para mis preferencias y necesidades lo convierte en un claro ganador frente a otras alternativas. Asimismo, la impresión que genera VNote es la de un proyecto que se ha interesado en detalles que a veces se pasan por alto en proyectos Open Source.

¿Buscando Más?