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 ;) ?

Elige Tu Propio Prompt

El prompt

El prompt es la cadena de texto que le indica al usuario que puede ingresar comandos en un shell. En Linux existe la variable PS1 que guarda el valor del mismo. PS1 significa "Prompt String 1".

Por ejemplo, en Fedora tiene el valor [\u@\h \W]\$ y se expande a:

test@localhost:~$

Esta variable reemplaza automáticamente determinados caracteres escapados con una contrabarra. Algunos de ellos son:

Caracter escapado Reemplazado por
\d Fecha en formato dom abr 21
\h El nombre del host sin el dominio
\H El nombre del host completo
\t hora en formato 24 hs
\T hora en formato 12 horas
\@ hora en formato 12 horas am/pm
\u El usuario actual
\w el directorio actual
\W la ruta relativa del directorio actual

También se pueden usar secuencias de escape ANSI para colorear, por ejemplo

Prompt con colores ANSI

Esto se explica así:

  • La secuencia \[\033indica el comienzo de una secuencia ANSI
  • [1;32m\]es color verde
  • \[\033[0m\]cierra la secuencia de colores (de otra manera todo lo que tipeemos a continuación quedará también en verde

Podemos seguir personalizando el prompt a nuestro gusto y necesidad.1

También podemos echar mano a algunos de los proyectos que nos facilitan esta tarea, tal como veremos a continuación.

sexy-bash-prompt

Sino queremos hacer todo a mano podemos usar un software como sexy-bash-prompt. Todd Wolfson creó un prompt para bash que también puede usarse para status y ramas en git. Utiliza tput, un programa para configurar terminales usadas por la shell, y también para inicializar o resetear la terminal.

Instalación de sexy-bash-prompt

  • Creamos el directorio Descargas si no existe:

# [ -d ~/Descargas ] || mkdir ~/Descargas

  • Clonamos el repositorio:-

# git clone --depth 1 --config core.autocrlf=false https://github.com/twolfson/sexy-bash-prompt

  • Entramos en el directorio del repo:

# cd sexy-bash-prompt

  • Instalamos:

# make intall

  • Recargamos la configuración de la shell

# . ~/.bashrc

¡Listo!

sexy-bash-prompt

Configuración de sexy-bash-prompt

Se puede adaptar a gusto el aspecto del prompt editando el archivo ~/.bashrc y/o ~/.bash_prompt

Personalizando sexy-bash-prompt

Aquí vemos un ejemplo de configuración personalizada:

powerline

Powerline2 se trata de un software mucho más sofisticado escrito en python por Kim Silkebækken.

Originalmente este proyecto se llamaba vim-powerline el cual proporcionaba una línea de estado para vim, pero posteriormente evolucionó para ser una línea de estado para aplicaciones tales como bash y tmux entre otros.

Instalación de Powerline

En el caso de Fedora viene como paquete y se puede instalar con:

# dnf install powerline

La configuración para bash se puede realizar en el archivo .bashrc de esta manera:

if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  . /usr/share/powerline/bash/powerline.sh
fi

En el caso de CentOS 7, el software se puede instalar con pip y luego agregar en .bashrc:

if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  .  /bindings/bash/powerline.sh
fi

Y así queda luego de hacer . .bashrc:

Powerline

Configuración de Powerline

La configuración de powerline en CentOS al instalar con pip está en /usr/local/lib/python3.6/site-packages/powerline/config_files. En Fedora se encuentra en /etc/xdg/powerline. Para modificar alguno de los archivos se pueden crear el directorio ~/.config/powerline y poner las modificaciones allí.

Existen varios archivos de configuración que tienen el mismo nombre, pero ubicados en diferentes directorios, los cuales se combinan, como es habitual los archivos del usuario tienen prioridad sobre los globales.

Poniendo como ejempleo CentOS y la shell BASH, los archivos de configuración serían:

Ruta del archivo o directorio Descripción
/usr/local/lib/python3.6/site-packages/powerline/config_files/config.json Archivo principal de configuración
/usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/default.json Configuración predeterminada del esquema de colores
/usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/default.json Configuración predeterminada del esquema de colores para la shell

Al editar el archivo local ~/.config/powerline/config.json podemos cambiar el esquema de colores predeterminado:

Esquema de colores

Para cambiar el esquema de colores:

# mkdir -p .config/powerline/colorschemes/shell # cp /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/__main__.json .config/powerline/colorschemes/shell/

La definición de esos grupos se puede ver en /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/default.json

Por ejemplo superuser tiene el valor information:additional, el cuál este a su vez tiene: "fg": "gray9", "bg": "gray4", "attrs": [].

Podemos copiar el archivo correspondiente y personalizarlo:

# cp /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/default.json .config/powerline/colorschemes/shell/

Supongamos que le hacemos la siguiente modificación:

{
        "name": "Default color scheme for shell prompts",
        "groups": {
                "hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
                "environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
                "mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
                "superuser":             { "fg": "brightred", "bg": "white", "attrs": ["bold"] },
                "attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] }
        },
        "mode_translations": {
                "vicmd": {
                        "groups": {
                                "mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
                        }
                }
        }
}

Luego habría que cambiar el archivo principal del tema .config/powerline/colorschemes/shell/__main__.json:

{
        "groups": {
                "continuation":         "cwd",
                "continuation:current": "cwd:current_folder",
                "exit_fail":            "critical:failure",
                "exit_success":         "critical:success",
                "jobnum":               "information:priority",
                "superuser":            "mysuperuser"
        }
}

Hay cambios que no se aplican directamente, para este tipo de casos hacer lo siguiente:

# powerline-daemon --replace

Para cambiar de tema:

cp /usr/local/lib/python3.6/site-packages/powerline/config_files/themes/unicode_terminus_condensed.json .config/powerline/themes/shell/default.json

Y luego recargar el daemon.

PureLine

Otra alternativa escrita por Chris Marsh es Pureline3, que ofrece un prompt al estilo de Powerline pero escrito en bash.

PureLine

Instalación de pureline

  • Clonar el repositorio

# git clone https://github.com/chris-marsh/pureline.git

  • Entrar en el diretorio

cd pureline/

  • Usar alguno de los archivos de configuración existentes:

cp pureline/configs/powerline_full_256col.conf ~/.pureline.conf

  • Agregar la línea siguiente en ~/.bashrc:

source ~/.pureline/pureline .pureline.conf

  • Y recargar la configuración de bash:

souce ~/.bashrc

Configuración de PureLine

Editando el archivo ~/.pureline.conf se puede modificar a gusto el prompt:

Configurando PureLine

Quedaría así:

E incluso se puede cambiar el símbolo principal del prompt:

Full Custom

Nota sobre fuentes

Hay dos maneras básicamente en que un prompt muestre bien los glifos (por ejemplo flechas y otros símbolos especiales): usar la fuente PowerlineSymbols.otf (en Fedora está en el paquete powerline-fonts) como secundaria para una de las fuentes existentes o instalar una fuente parcheada4.

Conclusión

Un prompt puede resultar una herramienta que proporcione información muy útil y también para diferenciar hosts al loguearnos. De estas opciones me parece la mejor PureLine ya que está escrita en bash, la configuración es más natural y sencilla. Powerline usa de acuerdo a ps_mem unos 12 MB de memoria RAM. No obstante, de acuerdo a su propio sitio de desarrollo hay que tener en cuenta que las próximas versiones de PureLine puede cambiar el modo de configuración, por lo tanto sus archivos podrían necesitar necesitar cambios.

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.

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?

Mark Text: Markdown en tiempo real

Hace algún tiempo había escrito sobre Typora un editor de markdown excelente, pero que lamentablemente no es software libre. Pero hace unos días descubrí a Mark Text que hasta donde se es el primer editor de texto libre que interpreta automáticamente markdown. ¿Qué quiero decir con esto? Que si tipeamos lo siguiente:

**importante**

Lo transformará inmediatamente en:

importante

Otras funcionalidades que posee Mark Text son:

  • Autocompleta tags
  • Abre y cierra automáticamente:
  • Comillas ''
  • Corchetes []
  • Paréntesis ()
  • Llaves {}
  • Emojis
  • Resalta código fuente de acuerdo al lenguaje
  • De ser necesario además, propociona una vista en código fuente.
  • Formatea fórmulas matemáticas, por ejemplo, aquí debajo vemos el Teorema de Bayes:

$$P(A_i|B) = \frac{P(B|A_i) P(A_i)}{P(B)}$$

😢 Mark Text llamativamente no interpreta HTML Mark Text interpreta html en bloque, por ejemplo:

<H1>
  Encabezado 1
</H1>

Pero no html crudo:

<H1>Encabezado 1</H1>

Más allá de este y otros glitches no invalidan esta aplicación, y teniendo en cuenta la gran comunidad que tiene seguramente se convertirá en una gran alternativa para Typora.

Fuente de los "Hola Mundo": Anexo:Ejemplos de implementación del «Hola mundo» - Wikipedia, la enciclopedia libre