martes, febrero 14, 2017

TOhtml: Como usar vim para generar código HTML de un buffer

Conocía el uso del script 2html.vim para coger el contenido de un buffer de vim y pasarlo a html, respetando los colores del resaltado de sintaxis. Lo que desconocía, es que ese script se puede llamar directamente gracias al comando TOhtml, y que existen varias opciones de configuración que permiten controlar cómo este comando pasa a HTML el contenido de un buffer.

Se puede lanzar este comando con todo el buffet o con un rango:

:TOhtml
:50,60TOhtml

Lo interesante es que podemos configurar el plugin con varias opciones. Si consultamos la ayuda con :help TOhtml se puede ver que hay varias variables:

  • Desactivar los números de línea: let g:html_number_lines = 0
  • User &nbsp; en vez de usar entornos <pre>: let g:html_no_pre = 1
  • El juego de caracteres que se usará al pasar el fichero a html: let g:html_use_encoding = "UTF-8"
  • Usar CSS o no: let g:html_use_css = 1

Para ver el resto de las opciones, se puede consultar la ayuda del plugin.

lunes, febrero 13, 2017

La CBP puede copiar los datos de tus dispositivos al entrar en USA

La U.S. Customs and Border Protection es la agencia federal del gobierno de los Estados Unidos encargada del control de las fronteras y todo lo relacionado con ellas: inmigración, aranceles, detección de posibles sospechosos,.... Tiene autoridad para revisar cualquier mercancía que entre o salga de Estados Unidos, así como los equipajes de cualquier persona que entre o salga por la frontera, con independencia de que sea ciudadano americano o no.

Hoy, por mi TL en Twitter aparecía una referencia a la noticia de que a un ciudadano americano, Sidd Bikkannavar, científico de la NASA le había sido requerido por personal del CBS su móvil y el PIN de acceso al mismo. Aunque Bikkannavar fue reluctante al principio - ya que su móvil se lo proporcionó la NASA y podía tener información sensible - decidió dárselo al agente de aduanas. Lo cierto, es que el documento Inspection of Electronic Devices existe en la página web de la CBP, y si uno se lo baja y ve las propiedades del PDF, verá que data del año 2009, es decir que no es algo nuevo.

Lo que si dice bastante claro el documento de inspección es que los agentes de aduanas pueden copiar el contenido del dispositivo (las negritas son mías):

You’re receiving this sheet because your electronic device(s) has been detained for further examination, which may include copying.You will receive a written receipt (Form 6051-D) that details what item(s) are being detained, who at CBP will be your point of contact, and the contact information (including telephone number) you provide to facilitate the return of your property within a reasonable time upon completion of the examination

Por lo tanto, la legislación que permite realizar estas inspecciones existe desde hace bastantes años - desconozco en que legislatura se aprobó y quienes presentaron esta medida -. Cuestión aparte, al menos de lo que deduzco de la lectura del texto de The Verge, es si la legislación obliga también dar las contraseñas a los agentes de aduanas.

Aunque creo que esto ha llegado a la página principal de algunos sitios de noticias, creo que tiene más que ver con el hecho de que la persona afectada sea ciudadano de Estados Unidos. Pasa un poco como en el caso Snowden: Las alarmas sólo saltaron cuando se reveló que se estaban espiando a ciudadanos de Estados Unidos. El resto, importaba poco. Desconozco si en otros países hay legislaciones similares.

Esto también es una advertencia a los ciudadanos que viajan a Estados Unidos, y sobre todo, a ciudadanos de otros países donde los poderes legislativos pueden estar tentados de copiar este tipo de leyes: Imaginar una ley así en España, donde los propios funcionarios de algunos juzgados filtran a la prensa los informes de la investigación....

domingo, febrero 12, 2017

Usar vim para gestionar tareas con TaskPaper

Usar vim para gestionar tareas con TaskPaper

Estos últimos días he estado leyendo sobre el sistema de gestión de actividades llamado Getting Things Done (GTD), cuyo idea principal es descargar la mente de las tareas que hay que hacer, almacenándolas en "listas" y gestionar la información anotada en las mismas. Este sistema fue propuesto por David Allen en su libro Getting Things Done: The Art of Stress-Free Productivity.

TaskPaper es un programa para organiza actividades en diferentes proyectos, los cuales tienen una serie de tareas. Se utilizan etiquetas para marcar las tareas. La principal particularidad de este programa es que la información la almacena en ficheros de texto plano que pueden ser abiertos por cualquier editor de textos.

El formato que utiliza TaskPaper es muy sencillo, y está descrito en el manual de usuario del programa. Un fichero de este tipo cumple con las siguientes propiedades:

  • Son ficheros de texto en formato UTF-8 y para la separación de líneas usa el carácter de nueva línea (ASCII 10, \n)
  • Una etiqueta no es más que una palabra que empieza por el símbolo '@'. Las etiquetas no pueden tener espacios y pueden tener valores asociados al final, usando paréntesis. Estos valores no puede contener un '\n'.
  • Una tarea no es más que una línea que empieza por un guión normal ('-'), que opcionalmente puede tener espacios o tabuladores al principio del mismo, que se utilizan para establecer las relaciones entre los proyectos y las tareas. Además, una tarea puede tener un número indeterminado de etiquetas.
  • Una nota es cualquier línea que no sea un proyecto o una tarea.

Un ejemplo sencillo de un fichero en este formato es el siguiente:

CASA:
    - Ordenar la mesa del ordenador
    - Preparar la comida  @done(2017-02-12)
    - Comprar las cosas para la comida mañana @done(2017-02-11)
TRABAJO:
BLOG:
    - Entrada sobre como crear tablas de contenido en LaTeX en cada capítulo
    - Entrada de como usar taskpaper para llevar un sistema GTD
TODO:
    - Ordenar la caseta del jardín
    - Probar el spectrum
    - Restaurar las partidas en la PS3 del Oblivion
    - Hacer las tareas del curso de Machine Learning
    - Procesar algunas fotografías más
    - Revisar la lista de enlaces del blog.
    - Copiar las recetas al libro.
    - Leer el libro de ElasticSearch

vim tiene un buen plugin para manejar este tipo de ficheros, taskpaper.vim. Este plugin definirá una serie de comandos nuevos y permitirá manejar este tipo de ficheros. Los primero que hay que hacer es instalar (basta con bajarse el paquete del repositorio y descomprimirlo en ~/.vim. Luego, usando :helptags se añade los ficheros de ayuda al sistema de vim, y así la tendremos disponible con :help taskpaper.

Este plugin utiliza las funciones de folding de vim para ocultar aquellas parte del fichero en las que no estemos interesados, permitiendo concentrar la atención en la parte que se está trabajando.

El plugin también define una serie de atajos de teclado. Todos estos se llaman pulsado previamente lo que en vim se conoce como la leader key. Pulsando esa secuencia de teclas, se modificará el fichero de acuerdo a la operación que se desee hacer. Por defecto la "leader key" en vim es '\'. Sin embargo, generar la contrabarra en un teclado en castellano implica también pulsar ALT, con lo cual merece la pena mapear. Esto se hace con let mapleader=",".

Las nuevas combinaciones de teclas que define el plugin para manejar los ficheros taskpaper. Todas se usan sobre la línea que se quiera modificar.

\tdMarca la tarea como realizada añadiéndole la etiqueta @done(YYYY-MM-DD)
\txMarca la tarea como cancelada añadiéndole la etiqueta @cancelled(YYYY-MM-DD
\ttAñade la etiqueta @today a una tarea para indicar que debe der hecha hoy.
\tDArchiva las tareas marcadas como @done. Esto se hace creando un nuevo proyecto llamado Archive al que se le asociarán las tareas archivadas, marcando las mismas con la etiqueta @project(nombre de proyecto)
\tXMuestra las tareas marcadas como canceladas
\tTMuestra aquellas tareas marcadas como today
\t/Búsqueda por palabra clave
\tsBúsqueda por etiquetas
\tp"Pliega" (fold) todos los proyectos. En este caso sólo se verán los nombres de los mismos.
\t."Pliega" (fold) todas las notas.
\tPCentra el sistema en el proyecto actual, ocultando el resto de las líneas.
\tjMueve al siguiente proyecto
\tkMueve al anterior proyecto
\tgVe al proyecto especificado, el sistema preguntará por el mismo
\tmMueve la tarea sobre la que está el cursor al proyecto indicado.

Si se está acostumbrado al uso de vim, este plugin puede ser muy válido para iniciarse en la metodología GTD y organizar el trabajo personal.

lunes, febrero 06, 2017

Como usar Latex para hacer un libro de recetas

Tras probar varios paquetes de macros para LaTeX y ver que uno de ellos, xcookybooky me daba las macros que necesitaría para mi pequeño libro de recetas, me he puesto manos a la obra con el mismo.

El formato que quiero lograr en el libro es de un índice principal, diferentes capítulos donde se agrupan recetas similares - postres, primeros platos, ... - y que en el inicio de cada capítulo exista una tabla de contenido con las recetas del mismo.

Para organizar el código fuente, en un primer momento, puesto que no tengo demasiadas recetas, uso un fichero principal desde donde voy incluyendo cada receta con ayuda de la macro \input de LaTeX. Los ficheros de receta siguen la misma estructura con lo cual es muy sencillo generarse una plantilla para usarla.

El código fuente sigue, por tanto este esquema similar al siguiente:

\documentclass[10pt,a4paper]{report}
% Paquetes usados
\usepackage[utf8]{inputenc}
\usepackage{xcookybooky}
\usepackage[spanish]{babel}
\usepackage{hyperref}
%
\title{Recopilación de recetas}
\begin{document}
\maketitle
\newpage
\tableofcontents
\chapter*{Platos principales}
\addcontentsline{toc}{chapter}{Platos Principales}
\input{src/carnesalsa.tex}
\input{src/espinacasgarbanzos.tex}
\input{src/ensaladillagambas.tex}
\chapter*{Postres}
\addcontentsline{toc}{chapter}{Postres}
\input{src/pannacotta}
\end{document}

Este esquema es muy flexible:En el futuro, se puede cambiar a un sistema donde se use \input por cada fichero capítulo, y a su vez éstos incluyan las recetas.

Para definir las recetas se van a usar el paquete de macros del paquete xcookybooky. Cada receta se escribe en un fichero y se renderiza una página distinta. Para evitar problemas con los estilos, éstos se reinician en cada página. La plantilla de una receta es la siguiente:

% Plantilla para recetas
\newpage % Nueva página
\thispagestyle{empty} % Borra los estilos 
\begin{recipe}[params]{Título de la receta} % Comienza una receta
\introduction{ % Introducción
}
\ingredients{ % Ingredientes
}
\suggestion{ % Sugerancias
}
\preparation{ % Pasos de la preparación
    \begin{itemize}
        \item
    \end{itemize}
}
\end{recipe}

Cada receta va en un entorno recipe y es obligatorio ponerle un nombre. Tal como está definido este entorno, las recetas se incorporarán al índice del documento. Al menos es necesario que dentro del entorno se haga uso de las macros \ingredients y \preparation. La primera se usará para definir una tabla con los ingredientes - ojo, que usa la sintaxis de las tablas en Latex. La segunda, para los pasos de la preparación. Aunque existe una macro definida para cada paso (\step), también se puede hacer uso de un entorno enumerate

Un ejemplo de una receta definida completa usando este paquete:

% Caballas aliñadas
\newpage
\thispagestyle{empty}
\begin{recipe}[source={Bisabuela Isabel}]{Caballas aliñadas}
\introduction{
La caballa fresca es un pescado azul que se consume típicamente en verano. Una manera de prepararla, que gusta mucho en mi famila es aliñada.
}
\ingredients{
    \unit[1]{Kg} & Caballa fresca limpias de vísceras y cabeza \\
    1 & cebolla mediana \\
      &Vinagre \\
      &Aceite de oliva
}
\preparation{
    \begin{enumerate}
        \item Congelar al menos 48 horas las caballas. Aunque no es una preparación cruda, mejor evitar problemas con el anisakis.
        \item Sumergir las caballas en un recipiente con agua y vinagre para que se terminen de desangrar.
    \item Salar las caballas y meter un par de horas en el frigorífico.
        \item Poner a calentar agua con sal en una olla donde podamos sumergir las caballas, esperar que hierva.
        \item Sumergir las caballas 4 o 5 minutos hasta que estén cocidas. Tened en cuenta que el tiempo de conción dependerá del tamaño de la caballa, me pasó que alguna de ellas al ser bastante gruesa, no quedaba bien cocida por el centro y tuve que volver a dejarla 2 o 3 minutos.
        \item Sacar las caballas de la olla, limpiar la piel - se desprende con facilidad -, abrilas, retirar las espinas y poner en una fuente.
        \item Añadir cebolla cortada en aros por encima de la caballa.
        \item Aliñar con aceite de oliva y ya está lista para servir.
    \end{enumerate}
}
\end{recipe}

Y la imagen del renderizado de esta receta con LaTeX es la siguiente:

El paquete de macros xcookybooky tiene muchísimas más opciones que las esbozadas en esta pequeña entrada, con lo cual, animo a leer su documentación para comprender su uso.

sábado, febrero 04, 2017

Conferencia 33c3: What's It Doing Now?. El papel de la automatización en accidentes de aviación

El Chaos Computer Club es la mayor asociación europea de hackers. Cada año, organiza a finales de Diciembre un congreso donde se dan todo tipo de charlas relacionadas con el mundo de la tecnología y el hacking. Este año, se ha celebrado la 33 edición del congreso, y han colgado todo el material audiovisual de las mismas.

Una de ellas, que tuve la suerte de ver en directo por streaming fue la de Bernd Sieker, un ingeniero de sistemas que trabaja en el mundo de la aviación: Tras una pequeña introducción a los mecanismo automáticos que lleva un avión comercial, habla de la influencia de la automatización en algunos accidentes aéreos: TAM Airlines Flight 3054, Turkish Airlines Flight 1951 y Asiana Airlines Flight 214. Y lo interesante, es lo que viene con los coches con pilotos automáticos y las decisiones que podrían tener que tomar estos sistemas.