viernes, marzo 31, 2017

Lorem Ipsum en Python y LaTeX

Lorem ipsum es un texto que se suele usar para probar el formato tipográfico de un diseño. Por extensión, hace referencia a cualquier texto aleatorio que se usa para comprobar el correcto funcionamiento de un programa. Así, que es raro que no exista alguno de esos generadores para diversos lenguajes de programación o entornos de edicción de texto. Dos ejemplos de su uso en python y LaTeX, donde estos generadores me han sido útiles:

Python

En Python la librería que he usado para generar este tipo de textos es loremipsum. Puede instalarse de manera muy sencilla con pip y su documentación es muy sencilla de seguir, con varios ejemplos:

from loremipsum import get_sentences, get_paragraphs
# Generate a list of n sentences
list_sentences = get_sentences(10)
print list_sentences
# Generate n paragraphs
paragraphs = get_paragraphs(4)
print paragraphs

Si se quiere obtener estadísticas de los párrafos generados se puede usar las funciones con prefijo generate_ Por ejemplo:

from loremipsum import generate_sentence
(total_sentences, total_words, sentence) = generate_sentence()
print total_sentences, total_words
print sentence

LaTeX

En LaTeX se puede usar el paquete lipsum para generar este tipo de textos de prueba. Suele venir con la mayoría de las instalaciones de LaTeX. Su uso es sencillo. Cargamos el paquete y usamos la macro \lipsum con un intervalo que señala los párrafos que se quieren generar:

\documentclass[10pt,a4paper]{article}
% UTF-8 and friends
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{lipsum}
\begin{document}
\section*{First section}
\lipsum[1-2]
\section*{Second section}
\lipsum[1-3]
\end{document}

lunes, marzo 27, 2017

Necedades

De vez en cuando, leo noticias que me resultan asombrosas por la cantidad de disparates y necedades que comenten los protagonistas de las mismas. Normalmente, paso de ellas pero hoy no me resisto a un breve comentario de estas dos:

Comunidad Foral Renovable

La semana pasada leía que la Suministro de energía a la Comunidad Foral sería 100% renovable el año que viene, gracias a la negociación que estaban llevando a cabo con las eléctricas. En realidad, como no desconecten a todos sus instalaciones y la enganchen a una red dónde sólo se genere renovable, esto no deja de ser una tontería más. Con la generación eléctrica pasa como con el transporte de agua: una vez que entra en la red de distribución, ésta no distingue si es de origen nuclear o de un molino de viento. Y la energía, se va trasladando según las necesidades de consumo - ahora mismo, hay pocos medios de almacenamiento del exceso de energía -. Por lo tanto, este tipo de sistema de compra no es más que un engañabobos. Si alguien en su casa cree que compra energía "verde" , mientas que el de al lado no, viniendo ambos por la misma acometida eléctrica del edificio, que se lo haga mirar.

Biocoop deja de vender agua embotellada en envases de plástico

La cadena de supermercados francesa Biocoop ha decido dejar de vender agua embotellada aludiendo a motivos medioambientales. Según los responsables de la cadena, la industria plástica contamina y además hay que transportar dicha agua, causando más emisiones. Lo que no dice la noticia es si van a seguir vendiendo otros productos embotellados o envasados en plástico. Lo que mucho menos creo que diga es que una botella de cristal de un litro pesa unos 500 gr y una de plástico 25 gr, es decir, con la energía necesaria por la que mueves una botella de cristal, mueves 20 de plástico. ¿El vino que venden lo hacen en botella de plástico o de cristal?. Por otra parte, asumir que no se gasta energía en el transporte, la distribución y la cloración del agua de grifo, es simplificar bastante el asunto.

viernes, marzo 24, 2017

Tablas de contenidos por sección en LaTeX

Siguiendo con la elaboración de mi recetario, hace un tiempo se me planteó un problema: Quería generar una tabla de contenidos por cada sección de recetas que tuviese, además de una tabla general con todos los contenidos. Es decir, tener algo similar a lo que se ve en esta captura de pantalla:


Captura del PDF con el índice principal y un subíndice en el primer capítulo

De esta manera, tendría al comienzo de casa sección (platos principales, postres, dulces, pastas, ...) las recetas que contiene.

¿Y de qué manera se puede conseguir este formato en LaTeX? Pues con ayuda de los paquetes de macros titlesec, titletoc e hyperref: Se va a redefinir la macro que inicia las secciones, \chapter para que cuando se inicie una, nos escriba las tablas de contenido de todo lo que hay dentro.

\titleformat{\chapter}[display]
{\bfseries\huge\bfseries\filcenter}{\thechapter}{25pt}{\Large}
 [%
  \startcontents
  \printcontents{}{1}{\setcounter{tocdepth}{3}}%
  \newpage%
  ]

Cuando se use esa nueva definición de la macro \chapter, LaTeX y las utilidades asociadas serán capaces de generar las tablas de contenido de todas las secciones que se usen.

\chapter*{Capítulo 1}
    \addcontentsline{toc}{chapter}{Capítulo 1}
    \section*{Sección 1}
      \addcontentsline{toc}{section}{Sección 1}
      \lipsum[1-2]
    \section*{Section 2}
\addcontentsline{toc}{section}{Sección 2}
\lipsum[1-2]

Sobre las líneas anteriores hay que tener en cuenta lo siguiente:

  • Se está usando la versión de la macro acabada en un asterisco, \chapter*. Esto hace que no se utilice la numeración para las secciones, al menos en el tipo de documento report que es el que estoy usando.
  • Para que cada sección se añada a la tabla de contenidos es necesario usar la macro \addcontentsline.
  • La macro \lipsum no es más que un generador de texto lorem ipsum.

El código completo de un ejemplo que se puede procesar con pdflatex puede encontrarse en este repo de github, junto con el PDF generado. El código fuente del ejemplo completo es:

% Tipo de documento
\documentclass[10pt,a4paper]{report}
% UTF-8 and friends
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{titlesec}
\usepackage{titletoc}
\usepackage{hyperref}
\usepackage{lipsum}
% Para los capitulos
\titleformat{\chapter}[display]
{\bfseries\huge\bfseries\filcenter}{\thechapter}{25pt}{\Large}
 [%
  \startcontents
  \printcontents{}{1}{\setcounter{tocdepth}{3}}%
  \newpage%
  ]
\title{Testing subcapítulos}
\begin{document}
  \maketitle
  \newpage
  \tableofcontents
  \chapter*{Capítulo 1}
    \addcontentsline{toc}{chapter}{Capítulo 1}
    \section*{Sección 1}
      \addcontentsline{toc}{section}{Sección 1}
      \lipsum[1-2]
    \section*{Section 2}
\addcontentsline{toc}{section}{Sección 2}
\lipsum[1-2]
\chapter*{Capítulo 2}
\addcontentsline{toc}{chapter}{Capítulo 2}
\section*{Sección 1}
\addcontentsline{toc}{section}{Sección 1}
\lipsum[1-2]
\section*{Sección 2}
\addcontentsline{toc}{section}{Sección 2}
\lipsum[1-2]
\end{document}

jueves, marzo 23, 2017

La prohibición de aparatos electrónicos en cabina de vuelo

Ayer, EEUU Reino Unido prohibían a los pasajeros de los vuelos con origen en ciertos aeropuertos y que viajan con ciertas compañías aéreas [1,2] de Oriente Medio y Norte de África, viajar en cabina con cualquier dispositivo electrónico mayor que un smartphone. El resto de los dispositivos tendrán que ser facturados para que vaya en las bodegas de carga del avión. Esto incluye portátiles, cámaras fotográficas, consolas. El origen de esta prohibición sería información de inteligencia recibida por el gobierno de EEUU donde se dice que terroristas podrían estar explorando la posibilidad de usar estos dispositivos para cometer un atentado.

Sin embargo, al meter este tipo de dispositivos en la bodega de carga de un avión hay que tener en cuenta el material del cual están hechas las baterías de muchos de ellos, iones de litio. Las baterías hechas de este material necesitan un correcto control de temperatura por parte de la electrónica de carga así como evitar ser dañadas por golpes. Ya han existido bastantes incidentes en aviación debido a problemas con las mismas. La ventaja de llevar estos dispositivos en la cabina de pasaje es que las tripulaciones están entrenadas para gestionar un fuego que tenga por origen una batería de este tipo. Sin embargo, en la bodega de carga, hay que confiar que los extintores hagan su trabajo.

De hecho, detrás los graves accidentes del UPS B744 at Dubai on Sep 3rd 2010, cargo fire y Asiana B744 near Jeju on Jul 28th 2011, fire in cargo hold se sospecha que pudo estar problemas con las baterías de ión litio que transportaban. Tal es el riesgo que ICAO decidió prohibir en el 2016 el transporte como carga de de dichas baterías en aviones que llevaran pasaje.

Ahora, imaginad que puede ocurrir si - con el tratamiento que reciben las maletas al cargar un avión - , en pleno vuelo, se produce un aluvión térmico - thermal runaway de una batería de cualquiera de estos dispositivos en la bodega de carga de un avión. ¿Cómo se puede balancear este riesgo de incendio frente al riesgo de un atentado terrorista? ¿Qué es más probable?. Si vemos el documento de la FAA, este año ya ha habido varios incidentes donde han salido ardiendo baterías de este tipo.

Aunque también hay quien dice - por ejemplo en U.S. confirms ban on large electronics in cabins on flights from 10 airports - que detrás de esta prohibición podrían estar las quejas de las aerolíneas americanas a los subsidios que ciertas aerolíneas de países del Golfo Pérsico reciben por parte de sus estados.

Lo que no tengo tan claro - agradezco enlaces a discusiones sobre este tema - es si esta medida va a disminuir la probabilidad de un atentado terrorista. Es más, visto los problemas que existen con estar baterías, podría ocurrir que la seguridad de los aviones disminuyera. Esperemos que no haya que lamentar un accidente por culpa de un incendio en bodega de un dispositivo electrónico que de haber ido en cabina, se podría haber extinguido.

Para profundizar algo más sobre el tema: USA und UK require electronic devices larger than smartphones to be checked in from certain countries/airports

miércoles, marzo 15, 2017

Subcadenas en bash o slicing

No suelo hacer scripts demasiado complicados usando bash. Cuando veo que la tarea que quiero realizar se complica demasiado o tengo que recurrir a construcciones más o menos esotéricas en shell script paso inmediatamente a Python para implementarla, ya que normalmente, suelo tener disponible dicho lenguaje en mi entorno de trabajo.

Sin embargo, puede ocurrir que no tengamos un lenguaje como perl o python disponible en nuestro entorno - por ejemplo, realizando scripts de arranque para un sistema embebido - y sea necesario realizar ciertas operaciones. En el caso que nos ocupa, manejar subcadenas. Si está disponible awk - y lo normal, en entornos shell script, es que lo esté - se puede usar para realizar esta tarea. Por ejemplo:

example1="Esto es una cadena"
# Selecciona los 4 primeros caracteres
echo $example1| awk '{print ">>" substr($0,1,4) "<<"}'
# Selecciona desde el carácter 6 en adelante
echo $example1| awk '{print ">>" substr($0,6) "<<"}'
# Selecciona los 6 últimos caracteres
echo $example1| awk '{print ">>" substr($0,length($0)-5) "<<"}'
# Selecciona los dos caracteres después de los 6 últimos
echo $example1| awk '{print ">>" substr($0, length($0)-5,2) "<<"}'

Curiosamente, bash tiene una funcionalidad interna que permite la obtención de subcadenas, y que se llama Substring Expansion la cual está documentanda en el manual de referencia de Bash. Para conseguir el mismo efecto que con awk se usaría las siguientes construcciones en bash:

example1="Esto es una cadena"
# Selecciona los 4 primeros caracteres
echo ">>${example1:0:4}<<"
# Selecciona desde el carácter 6 en adelante
echo ">>${example1:5}<<"
# Selecciona los 6 últimos caracteres
echo ">>${example1: -6}<<"
# Selecciona los dos caracteres después de los 6 últimos
echo ">>${example1: -6:2}<<"

Como puede verse la forma es:

${parameter:offset}
${parameter:offset:length}

  • offset es el carácter desde donde empezamos a coger la subcadena. Puede tener un valor negativo, pero en ese caso hay que dejar un espacio entre el dos punto y el signo menos.
  • length es la longitud total de caracteres que queremos sacar de la subcadena. Si se omite, se toma hasta el final de la cadena desde offset.

De esta manera se puede trabajar de manera sencilla con subcadenas en bash con una sintaxis similar al slicing de Python

jueves, marzo 09, 2017

Wikileaks Vault 7: Despejando dudas

Cuando el pasado martes Wikileaks parte de las herramientas de hacking de la CIA me surgió varias dudas:

¿se habrían puesto en contacto con los desarrolladores de los productos afectados por los zero-days que había publicado antes, para dar un tiempo prudencial de reacción a los mismos y desarrollar los correspondientes parches?. Sin embargo este tweet confirmaba lo contrario a las pocas horas de la publicación de la información. - captura a continuación -

¿Se ha volcado toda la información?. Las mismas personas de Wikileaks afirman que han volcad menos del 1%. Al menos en público, porque tampoco sabemos si dicha información se está vendiendo a otros agentes en juego o está en manos de otros servicios secretos esperando el momento procesal oportuno para salir a la luz. A fin de cuentas, Wikileaks tiene sus propias motivaciones políticas.

¿Se ha alterado la información? Parece ser que sí: Hay documentos donde se ha borrado nombres para proteger a personas que poco tienen que ver con el uso de estas herramientas. Según esta noticia, el propio staff ha modificado documentos, en teoría, para hacerlos más anónimos - y siendo mal pensado, ¿quién dice que no haya modificado más cosas? - , aunque se han dejado nombres originales.

miércoles, marzo 08, 2017

Wikileaks Vaul 7 ¿Sorpresa?

Cuando esta tarde empezó a saberse que Wikileaks había publicado una parte del conjunto de herramientas de hacking de la CIA y tras leer la nota de prensa lo primero que me ha venido a la cabeza es que los servicios secretos de EEUU siguen siendo jodidamente buenos - a pesar de las filtraciones -. Hablamos de un montón de exploits - 24 en el caso de Android - desconocidos, tanto de desarrollos internos como comprados en ese mercado negro del tema. Exploits cuya comunicación y uso, ha pasado desapercibida para toda la miríada de herramientas de seguridad que están en el mercado, y de los que nos hemos vuelto a enterar por una filtración.

Lo cierto es, que estas herramientas, según se deduce de la propia nota de prensa de Wikileaks, ya estarían rondando entre diversos grupos, ya que la CIA hace algún tiempo que perdió el control sobre las mismas. A Wikileaks - de momento -, parece que han llegado solo una parte de las mismas. Aunque también hay que decir, que tampoco se sabe si la organización de Assange ha publicado todo el material que ha recibido o lo va a racionar de acuerdo a su propia agenda política - punto, que no se debe olvidar -.

Ahora, lo que para mi no es ninguna sorpresa es que la CIA - y otros servicios secretos - se dediquen a estos menesteres: Simplemente, es su función, lo realmente raro es que no lo hiciesen. Veo muchos medios con titulares de que la CIA tiene esa capacidad de hackear - inserte aquí su gadget favorito - , como si el resto de los servicios secretos de todo pelaje no están moviéndose por Internet realizando este tipo de tareas. ¿De verdad tan pronto se ha olvidado cosas como Stuxnet?.

Una cosa que me parece interesante es la ola de desconfianza en la tecnología que podría desatar esta noticia. Los malos - sean quienes sean -, ya tiene claro desde hace tiempo y a través de la información publicada por filtraciones como la de Snowden, que van a tener que hacer uso de todo tipo de técnicas para evitar el espionaje.

Pero, ¿qué pensará el resto de las personas? ¿Le paso mi proyecto a esta empresa por correo electrónico o mejor en papel?. Sobre este tema, os dejo el enlace a Vault7: Ahora la monada de la CIA (desde WikiLeaks), que ha escrito Plazeame. Me gusta especialmente el comentario que hace sobre el riesgo al final del artículo