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

Como medir la memoria compartida

Medir la memoria RAM es una tarea complicada. Podemos ejecutar el comando ps y somar los valores de una determinada columna, pero no nos va a dar el resultado correcto. Los sistemas operativos actuales como Linux usan memoria virtual, esta les permite utilizar parte de la memoria RAM que necesita cada aplicación y sobreasignar la cantidad de memoria RAM, simulando que poseen mucha más memoria. Además, la mayoría de los programas usan librerías compartidas. Entonces al abrir otra aplicación que usa la misma librería que otro programa en ejecución ahorra cierta cantidad de memoria RAM. Por ejemplo, supongamos que queremos ver la cantidad de memoria que consume Firefox, si lo intentamos con ps:

ps -Cfirefox -o vsz --no-headers | awk '{ sum += $1 } END { print sum/1024/1024 }'

Eso da como resultado (en este caso particular) 3.75465 GB ¿Parece mucho, no?

En realidad ese resultado es poco significativo. El campo vsz es el tamaño de la memoria virtual que usa un proceso. Esto es: la memoria física realmente utilizada más memoria que el proceso puede llegar a necesitar en algún momento, más la memoria swap empleada.

Podríamos medirlo con un parámetro un poco más exacto tal como ls RSS. RSS (Resident Set Size) es la cantidad de memoria asignada a ese proceso y está en RAM. No incluye swap. Incluye la memoria de librerías compartidas siempre que las páginas de esas librerías estén en memoria.

Estos serían los resultados

pgrep -f /usr/lib64/firefox | xargs ps -o rss --no-headers | awk '{ sumrss += $1 }  END { print sumrss/1024/1024  }   '
2.92811

Pero existe una herramienta llamada smem que mide valores más útiles, estos son PSS y USS. PSS divide los bloques de memoria virtual compartida por la cantidad de procesos que en ese momento tienen una entrada en la tabla que traduce direcciones virtuales a físicas para la página. Dicho de otro modo la memoria compartida se divide por la cantidad de procesos que la usan.

Además, smem informa acerca de USS que es la memoria que no está compartida con otros procesos.

smem -tk -P/usr/lib64/firefox

Como se puede apreciar una diferencia de 17% respecto a la RSS

Además, smem puede mostrar la información de manera gráfica:

Fuentes y recursos adicionales

ranger

ranger es un gestor de archivos de consola con atajos de teclado de VI. Proporciona una interfaz minimalista y bonita basada en curses con una vista en la jerarquía de directorios. Viene con rifle, un lanzador de archivos bueno para encontrar cual programa usar para cada tipo de archivo.

Tenemos entonces un administrador de archivos fácilmente mantenible en un lenguaje de alto nivel. Una manera rápida de cambiar de directorios y navegar el sistema de archivos. Es pequeño pero útil, hace una cosa y la hace bien. Al estar basado en la consola, con una fácil integración en la shell de unix.

Desde ranger podemos ir a una shell (S mayúscula mediante) y volver a ranger (con exit). Además, posee atajos similares al viejo Midnight Commander con las teclas de función. Mediante w3m-img podemos previsualizar imágenes. Además, buscar archivos, cambiar archivos, crear directorios, renombrar archivos, etc.

No reemplaza a herramientas gráficas como Dolphin, pero sin duda es bueno tenerlo a mano cuando necesitamos la rapidez y la eficacia de la consola de texto.

Enlaces

Latte Dock

De acuerdo a su descripción:

Latte Dock es una barra de tareas basada en los frameworks de plasma que proporciona un elegante e intuitiva experiencia para las tareas y plasmoides. Anima sus contenidos por medio de efectos de zoom parábolico e intenta aparecer solamente cuando se la necesita.

Latte Dock fue creado por Michail Vourlakos. Creo que es un buen candidato a ser el panel predeterminado en KDE Plasma. Si bien faltan pulir algunas cosas, es muy configurable, relativamente fácil de usar y muy elegante. Tiene al menos 3 esquemas de configuración (además de uno personalizado): Unity - que recuerda al fallido entorno creado por Ubuntu - , Plasma y Extended.

Aquí algunas imágenes del mismo:

Enlaces:

5 ejemplos con journalctl

Las siguientes son ejemplos de consultas que podemos hacer con journaltcl:
  • ¿Cómo busco un comando o aplicación?
    journalctl \_COMM=master
  • ¿Cómo busco un usuario?
  • journalctl _UID=1000”
  • ¿Cómo veo los logs en un intervalo de tiempo?
    journalctl -S 2017-12-11 -U “2017-12-13 12:15”
  • ¿Cómo busco una determinada unidad?
    journalctl -u httpd
  • ¿Cómo veo los (posibles) problemas?
    journalctl -p notice

journalctl

Lo viejo, lo bueno y lo nuevo en Neovim

Características

El editor Neovim se presenta como el sucesor del editor Vim.

  • El conector entre componentes de software, MessagePack de manera eficiente intercambia datos en binario y sirve para intercambiarlos en lenguajes tales como JSON.
  • Los plugins remotos son coprocesos que tienen un canal de comunicación por medio de RPC con el proceso de neovim. Estos plugins además se ejecutan de manera asíncrona, mejorando así el rendimiento.
  • Una configuración predeterminada más potente y amigable.

La configuración predeterminada incluye las siguientes funcionalidades:

  • Cuando se detecta que un archivo ha sido cambiado dentro de Vim, automáticamente lo lee de vuelta.
  • Permite borrar una autoindentación,  saltos de línea y al comienzo de inserción.
  • Ahora los directorios de backup están en ~/.local/share/nvim/backup siguiendo las directrices xdg [^1]
  • Resalta los resultados coincidentes de búsquedas
  • Realiza búsquedas incrementales
  • Muestra siempre la línea de estado
  • Ahora se pueden ver mejor las tabulaciones y espacios al final de cada línea
  • Muestr el comando que se está ejecutando
  • Manejo más inteligente de tabulaciones
  • Asume una terminal de conexión rápida
  • La campanilla está deshabilitada para todos los eventos
  • El directorio para temporales está en ~/.local/share/nvim/swap [^1].
  • El comando display muestra la última línea de los registros.
  • Justifica automáticamente usando el ancho del texto, inserción y borrado inteligente de caracteres de comentarios.

Configuración

  • En $HOME creamos un enlace:

lrwxrwxrwx 1 sergio sergio 19 nov 5 23:30 init.vim -> /home/sergio/.vimrc

  • Y también en $HOME/.config:

lrwxrwxrwx 1 sergio sergio 17 nov 5 23:30 nvim -> /home/sergio/.vim

  • En $HOME/.vimrc
if has(‘nvim’) 
  Plug ‘Shougo/deoplete.nvim’, { ‘do’: ‘:UpdateRemotePlugins’ } 
  Plug ‘vim-airline/vim-airline’ 
else 
  Plug ‘Shougo/deoplete.nvim’ 
  Plug ‘roxma/nvim-yarp’ 
  Plug ‘roxma/vim-hug-neovim-rpc’ 
  python3 from powerline.vim import setup as powerline_setup 
  python3 powerline_setup() 
  python3 del powerline_setup 
  set laststatus=2 
  set t_Co=256 
endif 
 
let g:deoplete#enable_at_startup = 1 
 
neoterm 
Plug ‘kassio/neoterm’ 
 
“call vundle#end()            “ required 
call plug#end() 

Nuevas funcionalidades provenientes de plugins

Algunos de estos plugins son:

  • far.vim: Buscar y remplazar, abre un panel de vista previa.
  • deoplete.nvim: Autocompletar.
  • floobits: Etherpad usando neovim.
  • neoterm: Terminal embebida.
    neoterm
  • vim-pandoc: Integración con el conversor de lenguajes de marcas ligeros pandoc.

Conclusión

El editor VIM es una extraordinaria herramienta, no obstante adolece de disparidad en sus configuraciones predeterminadas, algunos inconvenientes de rendimiento e integración con otros componentes de software. Neovim viene a responder a estos inconvenientes y por ahora lo está haciendo muy bien. De hecho, VIM en su versión 8, incorporó muchas mejoras provenientes de Neovim. El tiempo dirá si los proyectos se terminan fusionando. Lo importante es que tenemos una alternativa moderna al casi treintañero VIM.

Notas

[ ^1 ]: Freedesktop.org

Buku: Reduciendo el ruido de la web

El navegador Mosaic ya en 1993 contaba con la posibilidad de guardar los documentos favoritos de la web. En la actualidad, con conexiones de banda de ancha grande el uso de marcadores parece haber declinado. Muchas veces, nos da igual guardarlo como favorito, como buscarlo en el historial del navegador o buscarlo nuevamente en Google, DuckDuckGo, Gigablast, etc. No obstante, si queremos mantenernos enfocados en nuestro trabajo y/o estudio, es muy conveniente tener nuestra propia selección de sitios web de interés.

Buku es un poderoso gestor de marcadores/favoritos escrito en python, utiliza el analizador de HTML/XML para extraer datos. Estos últimos se guardan en una base de datos sqlite3.
buku

Además, permite exportar e importar hacia y desde diferentes lugares. Opcionalmente la base se puede cifrar con AES256,  un algoritmo de criptografía asimétrica, el cual usa rondas de substitución y permutación.

Además, con herramientas como xclip o xsel se puede escribir un pequeño script para guardar rápidamente un marcador con buku desde un navegador con interfaz gráfica.

Typora, el mejor editor markdown

Soy un fan de los LML’s (Lightweight Markup Language) ya que permiten crear documentos sin necesidad de recurrir a un procesador de textos. Obviamente no son perfectos. Pero, ¿existe algún software que lo sea? ¿Por otro lado, cuántas funcionalidades usamos de un procesador de textos? Si utilizás:

  • Formatos básicos de tipografías (negrita, cursiva, subrayado, tachado)
  • Inserción básica de imágenes

  • Niveles de encabezados o títulos
  • Tablas sencillas
  • Numeración y viñetas
  • Hipervínculos
  • Notas al pié

probablemente podrías reemplazar el uso de un paquidérmico procesador de textos por un editor de textos más un LML como markdown.

Si esto te parece poco, markdown permite:

  • Resaltar código fuente
  • Formato especial para fórmulas matemáticas:
  • Citas:

    No todo oro reluce, ni toda la gente errante anda perdida

    J. R. R. Tolkien

Por otro lado, aplicando un poco de HTML y CSS podés ampliar notablemente la variedad de formatos.

Hasta ahora había dos maneras de usar markdown:

  • Escribiendo el código LML y posteriormente un compilador de markdown que convierte el archivo a un formato como HTML, PDF, etc.
  • Un editor específico de markdown, es decir, que incluye la capacidad de conversión a otro formato.

Pero Typora introduce una nueva manera, tan útil que uno se pregunta cómo no se le ocurrió a nadie hasta ahora:

  • Con Typora se escribe en markdown y automáticamente se muestra en la misma ventana el código interpretado. Es decir es WYSIWYG.

Esto permite focalizarnos en el texto que escribimos. Digámoslo de una vez: qué es más importante: ¿el contenido, o las decenas de botones y herramientas de un procesador textos?

Typora utiliza electron y está disponible para distintos sistemas operativos:

Typora — a minimal markdown editor, markdown reader.

 

5 ejemplos: Usar la shell sin salir de vim

A veces estamos trabajando con un archivo y queremos ejecutar una serie de comandos, pero sin salir del editor. Veremos varias maneras de hacerlo.

1. El comando Ex shell (sh)

Este comando ((sh)ell)) sirve para abrir una shell sin cerrar el editor.

Importante: Para volver de la shell al editor se puede usar el atajo de teclado o Ctrl-d o bien el comando exit

2. Edición de archivos de la shell

Aquí estamos editando el archivo .bashrc, para que se apliquen los cambios podemos ir a la shell en modo login con:

:set shell=bash\ –login

3. Guardar e ir a la shell

En este ejemplo vemos como se puede aplicar los cambios en un servicio

:w | sh

Aquí la clave es el carácter “|” el cual sirve para ejecutar el comando (sh)ell luego de w.

4. Ejecución de bajo perfil

El comando silent ejecuta el comando de manera silenciosa y el comando redraw! limpia y actualiza la pantalla.

5. Ejecutar el archivo en edición

Al escribir un script en lugar de guardar, salir, ejecutar el script y volver a editarlo, podemos ejecutarlo directamente desde vim:

La clave en cuestión aquí es el carácter ‘%‘ que indica el buffer de la ventana actual.

10 cosas extraordinarias que podés hacer con VIM

Últimamente este editor ha comenzado a tener mala prensa. Se dice que es difícil, anticuado.
En este artículo intentaremos mostrar 10 características distintivas de vim. Muchos creen que VIM es parte de un caprichoso rito de iniciación al mundo UNIX/Linux. Usar VIM no es un hábito snob de algunos geeks, sino una manera de aumentar la productividad.
La cuestión es que algunas distribuciones incluyen de manera predeterminada vi en lugar de VIM. El usuario principiante entonces, al tropeza con aquél, huye hacia otros editores en apariencia más fáciles pero mucho menos potentes. Aquí mostraremos 10 funcionalidades que posee VIM que difícilmente otro editor de texto puede ofrecer, al menos todas juntas.

Cabe aclarar que el siguiente listado es para usaurios que poseen un conocimiento básico de VIM. ¿Todavías no lo tenés? ¡Usá la herramienta vimtutor!

0. Concentrarte en el texto

Muchos editores poseen una gran cantidad de botones y de menús, pero eso muchas veces quita espacio en la pantalla, además de distraernos. VIM está libre de esas intereferencias.
Incluso, tiene plugins y configuraciones para acentuar estas características.12

¿Queremos leer y/o editar archivos de texto o tener que aprendernos para que sirve cada botoncito u opción de cada menú? ¿Qué sentido tiene?

1. Comprobar la ortografía

El comando en modo ex:

:setlocal spell spelllang=es_MX

Establece el idioma que utilizará ViM para la corrección ortográfica. El corrector resaltará las palabras con errores. Al situar el cursos en la palabra mal escrita y usar el comando z= aparecerá una lista de palabras alternativas para reemplazar la incorrecta.

Corrección Ortográfica en VIM

2. Operaciones con bloques

Es común al editar archivos con código fuente encontrarnos con porciones de texto encerrados entre algunos de estos caracteres:

  • <Esto es un Ejemplo>
  • “Esto es un Ejemplo”
  • ‘Esto es un ejemplo’
  • (Esto es un ejemplo)
  • [Esto es un ejemplo]
  • {Esto es un ejemplo}

Para seleccionar el texto encerrado entre signos “<” y “>” podemos usar el siguiente comando:

vi<

Si quisieramos seleccionar el texto incluyendo los signos deberíamos usar:

va<

En castellano una regla mnemotécnica útil es:

  • i: interior
  • a: afuera (inclusive)

Para seleccionar cualquiera de los otros bloques, sencillamente hay que reemplazar el caracter delimitador del bloque.

Esto es muy útil para archivos html, en la siguiente imagen se muestra como se puede seleccionar todo un tag mediante el comando vat:

Por supuesto en lugar del comando inicial v se pueden usar otros tales d, y y c.

Seleccionar bloques en VIM

3. Viajar en el tiempo (controlar ediciones… casi como si fuera GIT)

Este una funcionalidad que ya presenté en un un artículo anterior, pero que tiene sentido mencionar una vez más:

Con Vim se puede volver al estado que tenía el archivo 10 minutos atrás con el comando en el comando en modo ex:

:earlier 10m

Por supuesto, se puede volver al futuro con:

:later 10m

¿Qué pasa si no se pone ‘m’? En eseo caso se retrocede o avanza la cantidad de ediciones especificada.

4. Automatización de operaciones

Hay una manera muy sencilla de repetir operaciones: y es a través del comando .
Dicho comando repite el último comando y repetirlo la cantidad que sea necesaria, sencillamente usando el “punto” las veces que sea necesario. Cuando el comando a repetir es muy complejo es una función de extrema utilidad.

Otra manera de repetir operaciones es anteponiendo un número de veces. Por ejemplo, el comando 10p pega 10 veces el contenido del buffer.

También se pueden usar macros para automatizar tareas utilizando macros:

  1. Prendemos la grabadora con qa
  2. Ejecutamos los comandos deseados
  3. Detenemos la grabadora con q
  4. Reproducimos el comando con @a

Por ejemplo podríamos usarlo para estructurar un documento en markdown de la siguiente manera:

  1. :set nf+=alpha (Para habilitar el incremento de caracteres alfabéticos)
  2. Tipeamos ## A. (sin las comillas)
  3. qa
  4. yyp
  5. Usamos el atajo de teclado Ctrl-a (Para incrementar)
  6. q
  7. Utilizamos 10@a (el número 10 es un ejemplo)

5. Abrir dos archivos al mismo tiempo

Esta función es extremadamente útil. Hay varias maneras de hacerlo, aquí mostraré una manera de hacerlo.

Por ejemplo, si tenemos un archivo y queremos copiar el contenido de otro archivo, debemos ejecutar este comando en modo ex:

:split /etc/squid3/squid.CONF

Desde luego la ruta del archivo es un ejemplo. Luego podemos copiar, cortar, pegar entre las diferentes como es habitual. Lo más importante es saber como pasar entre ventanas: primero se emplea el atajo de comandos Ctrl-w y luego la tecla de la flecha en dirección a la ventana deseada.

Si esto parece complicado, se puede usar incluso el modo ex:

:wincmd j

6. Editar un archivo web al vuelo

Supongamos que estamos copiando código libre de un sitio web a un archivo, podríamos usar el comando siguiente:

vim http://www.fsf.org/index.html

Luego de presionar Enter se descarga el archivo html y se abre una copia en el editor. ¿No es maravilloso?

Editar un archivo descargado al vuelo con VIM

7. Editar un archivo remoto a través de ssh

Este método es múy útil en particular cuando se utilizan claves públicas para autenticar. Hay que hacer así:

vim scp://root@192.168.80.148//etc/squid3/squid.conf

A diferencia del ejemplo anterior este comando edita efectivamente el archivo remoto. Obviamente usa un archivo local de manera temporaria hasta que guardamos los cambios…

8. Explorar archivos

Aquí mediante el comando

:e .

Se abre un explorador de archivos que permite por ejemplo copiar archivos de un directorio a otro.
El procedimiento es tal vez contraintuitivo, pero no por eso es complejo.

  • Se navega como es habitual en gestor de archivos hasta encontrar el directorio de destino. Ubicado allí el cursos se usa el comando mt.

Gestor de Archivos en VIMFIleManagementVIm

  • Luego buscamos el archivo que queremos copiar y usamos los comandos mf y mc.

¡Listo! Se copió el archivo al directorio de destino.

9. Autocompletar texto

Si tenemos que volver a tipear una palabra larga podemos hacerlo rápida y fácilmente con el atajo de teclado Ctrl-p.

Autocompletar palabras en VIM


En el ejemplo siguiente queremos ingresar rápidamente la función isunordered:

VIM tiene además, otras maneras de completar téxto fácilmente mediante el atajo de teclado Ctrl-x. Por ejemplo ingresando luego el atajo de teclado Ctrl-f, podremos escribir rutas de archivos velozmente:

Autocompletar nombres de archivos en VIM

Cabe aclarar que todos estos atajos se usan en modo Insert.

¡Qué lo disfruten!


  1. distraction free vim

  2. Distraction Free Writing with Vim