miércoles, marzo 28, 2018

Instituto Hidrográfico de la Marina: Geoportal de la Infraestructura de datos espaciales

La principal misión del Instituto Hidrográfico de la Marina es la confección de las cartas náuticas que contribuyen a la seguridad de la navegación. Estas cartas se publican tanto en papel como de manera digital, pero en este último caso en standard llamado Electronic navigational chart, que tiene un sistema de protección de la información para garantizar la integridad de la información distribuida electrónicamente.

Debido a esto, el IHM ha desarrollado y puesto en funcionamiento el Geoportal de la Infraestructura de datos espaciales del Instituto Hidrográfico de la Marina donde podremos consultar esos datos derviados de las cartas oficiales. Sin embargo, una clara advertencia por parte del IHM

Se ha de tener en cuenta que los productos, aquí ofrecidos, son productos derivados del flujo de producción de la cartografía náutica oficial. Por este motivo, parte de la información mostrada tiene gran similitud con la de las ENC o cartas de papel oficiales. Esto no debe confundir al usuario de forma que pueda interpretar que la información mostrada sea susceptible de ser empleada para ninguna actividad relacionada con la navegación, ya que se comprometería gravemente su seguridad.

Si accedéis al visor de datos, se puede explorar las aguas españolas y buscar las refeencias a las diferentes cartas de navegación, tanto en papel , como en formato electrónico para la zona de los mapas que estamos viendo. Un ejemplo de una captura del visor

sábado, marzo 24, 2018

Desplegar máquinas en Amazon EC2 con ayuda de Ansible

Para hacer ciertas tareas, despliego máquinas en la nube EC2 de Amazon. Con ayuda de varios scripts y ssh, desde mi ordenador voy realizando trabajos necesito. Cuando acabo, destruyo las máquinas virtuales para que no tenga coste para la empresa.

Llevaba un tiempo pensando como automatizar de una manera sencilla esta operación. Sé que en Amazon se puede hacer algo similar con CloudFormation e incluso llamar a ese API de Amazon desde scripts escritos en Python, pero quería ver si fuera posible hacer algo más sencillo y con lo que tuviese alguna experiencia previa.

Conozco la herramienta de automatización Ansible de otro proyecto en el que estuve trabajando hace dos años. Hacía bastante tiempo que no la usaba, pero letendo su documentación he visto que tiene dos módulos,ec2 y ec2_instance_facts que me podían servir para lo que quería.

Mi idea era desarrollar un playbook de Ansible, que ejecutándolo en el ordenador local, se encargara de:

  • Desplegar una determinada instancia de EC2, si no hay ninguna instancia con un nombre dado.
  • Esta instancia se desplegará en una red asociada a una VPC de Amazon determinada, con una clave ssh que se usará para acceder a la misma y con un grupo de seguridad asociado a dicho VPC.
  • La imagen AMI que vamos a usar corresponde a Ubuntu 16.04.3 LTS (xenial), usando virtualización de tipo hvm.
  • Una vez desplegada la instancia, el playbook entrará en el sistema donde realizará las siguientes operaciones:
    • Instarlar el git
    • Bajarse el JDK de Java e instalarlo.
    • Bajarse el maven e instalarlo.
    • Copiar desde el ordenador local la configuración de maven, el fichero situado en $HOME/.m2/settings.xml , al ordenador remoto.
    • Clonar varios repositorios desde el git.

Instalar Ansible

Para instalar ansible, lo más cómodo es usar entorno virtual de Python gestionado por un programa como virtualenv. Si se tiene este programa instalado hay que hacer lo siguiente para crear el entorno virtual e instalar dentro del mismo Ansible:

$virtualenv vansible
$source vansible/bin/activate
(vansible)$pip install ansible
(vansible)$ansible --version

El script

Al final de esta entrada podéis encontrar el script que he desarrollado para que se despliegue la máquina y me la deje configurada de acuerdo a lo que quiero. El formato del fichero que utiliza los playbooks de Ansible es yaml. Es un poco peculiar como podéis y el parser de ansible a veces hace cosas raras leyéndolo, con lo cual hay que tener bastante cuidado con lo que se pone.

Otra particularidad es que hago uso de los comandos ssh-agent y ssh-keyscan, así como la del reenvío del agente ssh sobre el túnel ssh para no tener que subir claves privadas a la máquina de Amazon.

Tampoco soy un usuario muy hardcode de Ansible. En cierta manera, quería tener algo que me ayudara a realizar mis tareas sin perder demasiado tiempo en la herramienta que fuera a usar. El script admite varias mejoras:

  • Comprobar antes de bajarse el JDK o maven que ya están instalados en la máquina.
  • Usar algunas opciones ssh para evitar tener que añadir al known_hosts las claves públicas de las máquinas remotas.
  • Ver si hay alguna construcción en las expresiones jinja2 que se usan, especialmente aquellas que usan la construccion expresion | default.
  • Comprobar si existe los repositorios git antes de bajarlos.

Para ejecutar el script:

(vansible)$ansible-playbook script.yml

Código fuente
- hosts: 127.0.0.1
  connection: local
  gather_facts: False
  vars:
    ec2machinename: <<ec2 instance name>>
    ec2sshkey: <<ssh key name to use in the instance>>
    ec2instancetype: "t2.xlarge" # instance type
    ec2region: "us-east-1"  # Amazon region
    ec2ami: "ami-43a15f3e" # AMI (this is the ubuntu one)
    ec2subnetid: <<subnet id>>
    ec2securitygroup: <<security group id>>
    privatekeypath: "~/.ssh/drizzt.key.pem"
    gitkeypath: "~/.ssh/id_drizzt_bitbucket"
    mavenconfigpath: "~/.m2/settings.xml"
    sshoptions: "-oForwardAgent=yes -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null"
    rcmd:
      - "sudo apt-get update"
      - "sudo apt-get -y install git-core"
      - "curl -L -O -# -H  'Cookie: oraclelicense=accept-securebackup-cookie' http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz"
      - sudo mkdir -p /usr/local/java/
      - sudo tar zxvf jdk-8u162-linux-x64.tar.gz -C /usr/local/java/
      - sudo ln -sf /usr/local/java/jdk1.8.0_162/bin/* /usr/local/bin/
      - curl   -L -O -#  https://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
      - curl   -L -O -#  https://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz.asc
      - sudo tar zxvf apache-maven-3.3.3-bin.tar.gz -C /usr/local/java
      - sudo ln -sf /usr/local/java/apache-maven-3.3.3/bin/* /usr/local/bin/
      - mkdir -p /home/ubuntu/{.m2,prog/atlas}
    remoterepos:
      - git@bitbucket.org:repo1/repo1.git
      - git@bitbucket.org:repo2/repo2.git



  tasks:
   - ec2_instance_facts:
      filters:
         "tag:Name": "{{ec2machinename}}"
         "instance-state-name": ["pending","running"]
     register: result
   - ec2:
      region: "{{ec2region}}"
      key_name: "{{ec2sshkey}}"
      instance_type: "{{ec2instancetype}}"
      image: "{{ec2ami}}"
      wait: yes
      count: 1
      group: "{{ec2securitygroup}}"
      vpc_subnet_id: "{{ec2subnetid}}"
      instance_tags:
        "Name": "{{ec2machinename}}"
     when: (result["instances"]|length == 0)
     register: ec2
   - name: Wait for SSH to come up
     wait_for:
        host: "{{ item.public_ip_address| default(item.public_ip) }}"
        port: 22
        delay: 10
        timeout: 60
        state: started
     with_items: "{{ ec2.instances |default(result.instances) }}"

   - name: Add the keys to ~/.ssh/known_host
     shell: ssh-keyscan -H {{item.public_ip_address|default(item.public_ip)}}  >> ~/.ssh/known_hosts
     with_items: "{{ ec2.instances |default(result.instances) }}"

   - name: Install git, java
     shell: ssh -i "{{privatekeypath}}" -l ubuntu "{{item[0].public_ip_address|default(item[0].public_ip)}}" "{{item[1]}}"
     with_nested:
      - "{{ ec2.instances |default(result.instances) }}"
      - "{{rcmd}}"
   - name: Copy the Maven config
     shell: "scp -i {{privatekeypath}} {{mavenconfigpath}} ubuntu@{{item.public_ip_address|default(item.public_ip)}}:.m2/"
     with_items: "{{ ec2.instances |default(result.instances) }}"
   - name: Add remote git key to ssh-agent
     shell: "ssh-add {{gitkeypath}}"



   - name: Copy the remote repositories
     shell: ssh -oForwardAgent=yes -i "{{privatekeypath}}" "ubuntu@{{item[0].public_ip_address|default(item[0].public_ip)}}" "cd /home/ubuntu/prog/atlas;env GIT_SSH_COMMAND='ssh {{sshoptions}}' git clone {{item[1]}}"
     with_nested:
      - "{{ ec2.instances |default(result.instances) }}"
      - "{{remoterepos}}"

jueves, marzo 22, 2018

.Facebook y privacidad: La hipocresía de los medios de comunicación

Estos días atrás se ha publicado en varios médios de comunicación que el equipo electoral de Donald Trump, a través de la empresa Cambridge Analytica, se dedicó a minar los datos de miles de usuarios de Facebook para poder influir en sus decisiones de voto e intentar que el mismo se decantara por Donald Trump. Es decir, lo que hacen todos los días Google o Facebook para vendernos la publicidad: Perfilar al máximo sus usuarios para intentar ofrecer anuncios en los que la posibilidad que el usuario clique sea la mayor. En este caso, el producto a vender es Trump

Todo esto es un escándalo porque se ha usado los datos privados de los usuarios de Facebook para hacer exactmente lo mismo que hizo Obama en el 2012 .

Para Franklin D. Roosevelt fue la radio. Y para John F. Kennedy, la televisión. Para la primera elección de Barack Obama fue Internet y, en particular, Facebook. Es sabido que, en cada una de esas elecciones, una nueva tecnología contribuyó a la victoria del candidato que mejor la supo aprovechar.

Hay una narración de toda estar historia muy interesante en la columna No son los rusos, es el big data de Juanma López Zafra

Por otra parte, está por ver cual ha sido la ganancia en votos que ha proporcionado a los diferentes candidatos el uso de estas técnicas de micro segmentación y propaganda política dirigida.

Ahora, no deja de ser curioso como toda la prensa parece haber descubierto que todas las grandes tecnológica que viven de la publicidad - Google, Twitter o Facebook - usan los datos que les damos tan cándidamente a cambio de sus servicios gratuitos para vendernos publicidad. No sé si han estado los últimos veinte años de retiro en el desierto de Gobi, o como se puede ignorar que el minado de datos y perfilado de usuarios es la base de los modelos de negocio de Google o Facebook.

Estas empresas se pueden permitir el lujo de dar servicios gratuitos o publicar el código que usan internamente porque su auténtico valor añadido es la cantidad de datos que poseen sobre sus usuarios, y como pueden usarlos para poder ofrecer a los anunciantes el target adecuado de los productos que quieren vender. Y estos datos se los hemos cedido todos: si no eres el cliente, eres el producto

No hay más que recordar como se publicó que Google dejaría de leer los correos de manera automática para insertar publicidad. Y a todos los que se están dando golpes de pecho con la publicidad dirigida de Facebook, ,le parecía lo más normal que Google hiciera lo mismo con el correo. Y ahora los golpes de pecho :)

Dos conclusiones sobre esta polémica

  • No importa tanto el qué - uso de datos para hacer propaganda electoral- como el quién - si lo hace Obama es un genio y si lo hace Trump un malvado
  • La pérdida de influencia de la prensa tradicional. En EEUU, prácticamente toda la prensa fue un bloque contra Trump. Aún así, ganó las elecciones.

domingo, marzo 18, 2018

Twitter para Mac: Un pequeño aviso a navegantes

El pasado 16 de Febrero Twitter anunciaba que dejaba de dar soporte al cliente oficial en MacOS X para centrarse en su versión web. Eso sí, lo que no suponía es que la frase in 30 days will no longer be supported hacía referencia a que aquellos que quisiéramos usar el cliente no nos iba a dejar entrar en la red de microblogging.

Simplemente, antes de ayer, Twitter no permitía usar dicho cliente en su red, no dejando acceder a la misma y obligando a la migración a otro cliente o a la web. Pero este movimiento también es un pequeño aviso sobre el poder que tienen sobre estas redes y los que basan su negocio sobre las mismas: Si Twitter quiere, puede dejar a un cliente fuera de la red muy fácilmente revocando su clave si decide que no estás cumpliendo con sus términos de servicio, cosa que nos puede parecer comprensible, pero que, a veces, olvidamos.

Al menos, con los programas que se vendían antes, te quedas sin soporte, pero normalmente, el programa seguía funcionando y podías hacer uso del mismo. En estas plataformas SaaS que se están imponiendo, no. No quiero imaginar, si un día, una persona que usa toda su autenticación para acceder a servicios con una cuenta de correo de Google, se encuentra con ésta suspendida....

jueves, marzo 15, 2018

Backup de Evernote con Applescript

Evernote es una aplicación diseñada para tomar notas y almacenar la información en libretas de acuerdo a las preferencias de sus usuarios. Estas libretas se almacenan en los servidores de la compañía en la nube. En función de la capa de servicio contratada, se puede tener mayor o menor volumen de datos almacenados y acceso desde diferentes dispositivos.

Utilizo la capa gratuita de este software para organizar mi información. Puesto que no uso imágenes ni contenido multimedia, me vale perfectamente con los 60 Mb mensuales de tráfico de esta capa. Sin embargo, como todo software que usa la nube, siempre quiero tener una copia local de mis datos. Y a ser posible, que ésta se realice de forma automática para poder llamar a la utilidad desde scripts que tengo preparados para la tareas en mi portátil.

En MacOS X Evernote está preparado para interactuar con el resto del sistema usando AppleScript, un lenguaje de scripting que está en los sistemas operativos de Apple desde la versión System 7. Con un pequeño script, es posible activar la aplicación, seleccionar un archivo de destino y hacer una copia local de nuestros datos almacenados en Evernote.

Evernote permite exportar los datos en un solo fichero XML, que usa el sufijo .enex o bien cada nota en un fichero HTML distinto. Mejor usar el primer formato, ya que la importación necesita del mismo para poder realizarse. Otra ventaja del fichero XML se puede procesar usando herramientas de terceros para obtener la información que interese.

El script para realizar la tarea es el siguiente, lo pegamos en el Editor de Script y lo guardamos. Se puede exportar desde el mismo editor como una aplicación, de esta manera con un simple doble click sobre la misma lo ejecutaremos.

tell application "Evernote"
    activate
    set theNewFilePath to (choose file name with prompt ¬
        "Save backup as:" default name ¬
        "Evernote Backup" default location (path to documents folder)) as string
    -- Add the suffix .enex if not in the system
    -- Get the filename
    set AppleScript's text item delimiters to {":"}
    set splitPathList to every text item of theNewFilePath
    set theFilename to last item of splitPathList
    set AppleScript's text item delimiters to ""
    set startSuffix to ((length of theFilename) - 5)
    if startSuffix > 0 then
        set fileSuffix to characters startSuffix thru length of theFilename as string
        if fileSuffix is not equal to ".enex" then
            set theNewFilePath to (theNewFilePath & ".enex")
        end if
    else
        set theNewFilePath to (theNewFilePath & ".enex")
    end if
    set allNotes to find notes
    export allNotes to theNewFilePath format ENEX
end tell

martes, marzo 13, 2018

El Ayuntamiento de Madrid y las comercializadoras de electricidad verdes

Ayer vi un tuit que me llamó la atención: El grupo municipal de Ahora Madrid afirmaba que la comercializadora que suministre la luz a los edificios de @Madrid estará obligada a vender energía 100% renovable.:

Eso es una falsedad que se publicita una y otra vez desde colectivos verdes y partidos políticos - no sé si por ignorancia, por malicia política o por mentir directamente -: Si se contrata la electricidad con una comercializadora verde, vas a consumir energía eléctrica generada exclusivamente de fuentes renovables.

En España, las centrales de generación eléctrica vuelcan toda su energía, tras elevarla de tensión, a la red de transporte gestionada por Red Eléctrica de España. Una vez que la energía se inyecta en esa red no se puede discriminar su origen. No hay transporte independiente para la energía generada por las centrales renovables. La energía es transportada por la red de de Alta Tensión hasta las subestaciones, ya propiedad de cada empresa eléctrica. Estas subestaciones dan servicio a áreas de población, con independencia de quien contratemos la electricidad.

Entender que aunque estés con una comercializadora verde no recibes energía de origen renovable es sencillo:

  • Tengamos dos vecinos que viven en el mismo bloque de viviendas.
  • Un vecino, Concienciado™ ha contratado su suministro eléctrico con GreenPowerStuff, que le afirma que toda la energía que consumirá es de origen renovable.
  • Otro vecino, del mismo bloque, Melasuda™ ha contrado la electricidad con la comercializadora MeLaPela que le ofrece la electricidad más barata, sin tener en cuenta el criterio verde.
  • A ambos vecinos le llega la electricidad por la misma acometida del edificio, con lo que no se puede discriminar el origen de la energía consumida

Entonces, ¿Cuál es el truco?. En teoría , existe un una garantía de origen en la generación eléctrica que puede transferirse a las comercializadoras y así demostrar que la energía que compra las mismas es de origen renovable. Pero como hemos dicho antes, todo lo generado en España va a pool, así que suerte con distinguir el origen de la electricidad que consume cada hogar. Y algunos,ven esta garantía de origen como el timo estampita

lunes, marzo 12, 2018

Flying above the fire: managing forest fires in Europe

Los pasados días 5 y 8 de Marzo se celebró en Bruselas el European Civil Protection Forum, donde se ponen en común la experiencia adquirida durante la gestión y resolución de desastres por parte de los cuerpos de protección civil europeos, se estudian los futuros retos a los que se tendrán que hacer frente y se intercambia información para mejorar la cooperación en el marco europeo. Uno de los temas que se trató en el forum fue el de los incendios forestales.

En España, el 43 Grupo de Fuerzas Aéreas es un pilar en la lucha contra incendios forestales, teniendo como misión primaria operar los Canadair CL-215T y Bombadier 415 en misiones de extinción de incendios, allí donde son requeridos.

El teniente Fernando Adrados, piloto del 43 Grupo, ha impartido una de las conferencias, narrando su experiencia a los mandos de los apagafuegos del 43 Grupo, especialmente durante el pavoroso incendio de Pedrógão Grande en Portugal. También cuenta su historia para ingresaar en el Ejército del Aire y llegar hasta piloto de apagafuegos. Disfrutad de la conferencia.

jueves, marzo 08, 2018

Las noticias sobre el temporal de Huelva a nivel nacional

Me ha llamado la atención en el Telediario de RTVE del día 6 abrió con los daños ocurrido en la costa de la provincia de Huelva la semana anterior. Imágenes tomadas por un dron, donde se puede ver perfectamente como el mar rompe en los chalets de primera fila. Y digo que me llama la atención, porque ocurrió la semana anterior, los días 28 de Febrero y 1 de Marzo. Tengo varias fotografías que me mandaron familiares donde se aprecia el destrozo causado por el mar, aquí un par de ejemplos del día 28 de Febrero:

Lo que no tengo tan claro es si ser la noticia de apertura tiene que ver la visita el día anterior de Mariano Rajoy - Presidente del Gobierno de España - y Susana Díaz - Presidente de la Junta de Andalucía - a la zona afectada por el temporal. Es decir, desde el 28 de febrero se sabe los destrozos del temporal cuales han sido, pero parece que sólo salta a ámbito nacional en las noticias, cuando los políticos están allí. Si asumo que esta teoría es cierta, dice mucho como funcionan - a veces - los medios de comunicación, donde parece que todo lo que se salga de Madrid o Barcelona no existe.

Por terminar esta entrada, lo ocurrido en La Antilla, es algo que no me coge de sorpresa: Allí hemos sabido siempre que el día que entrara un temporal de suroeste y que coincidiera con una marea viva (luna llena el 2 de Marzo), eso iba a ocurrir. Y que la única solución es una escollera. Para que os hagáis una idea de cuál es la altura de las olas que se pueden formar, el espigón que protege al puerto de Huelva, a unos 20 km, cuya coronadura se levanta cerca de tres metros del agua, puede ser sobrepasado sin muchos problemas por las olas en caso de temporal.

miércoles, marzo 07, 2018

Cifrar un disco externo o un USB con MacOS X High Sierra

Supongamos que queremos cifrar un disco externo o un pincho USB por si se nos pierde nadie tenga acceso a los datos. Y el sistema operativo que estamos usando es MacOS X , en su última versión, High Sierra (10.13). Los pasos que hay que dar son los siguientes:

En primer lugar, un dispositivo que vaya a ser cifrado, debe de tener una tabla de particiones de tipo GUID Partition Table. Para que un dispositivo tenga esa tabla de particiones debe de borrarse y formatearse de acuerdo a este estándar de particiones. Esto se hace usando la Utilidad de discos. Lo ejecutamos , seleccionamos Mostrar todos los dispositivos en el menú de Visualización (si se pulsa comando-2) la vista cambia directamente. La utilidad de disco nos mostrará el siguiente menú:

En este caso se puede ver un disco, TDK LoR TF10 Media que va a ser el que vamos a cifrar. En este caso, al tener dicho disco un sistema de ficheros FAT, se puede ver el volumen y el disco. Procedemos a borrarlo y a crear una tabla de particiones de tipo GPT: Pulsamos boton derecho y elegimos borrar

La Utilidad de Discos desplegará un cuadro de diálogo donde debemos elegir el formato del sistema de ficheros, el nombre que le daremos al volumen y el tipo de tabla de particiones que se va a uar. La tabla de particiones debe ser Mapa de particiones GUID y el sistema de ficheros Mac OS Plus (con registro, encriptado) o APFS (encriptado) - bueno, cualquiera de los encriptados -. En el ejemplo, se ve que el volumen se va a llamar KEYS. Pulsamos en borrar para que el contenido se borre y se cree la nueva tabla de particiones. Como hemos elegido un sistema de ficheros encriptado, la Utilidad de Discos nos preguntará por la contraseña que se va usar para cifrar. Una vez introducida la contraseña, pulsamos en borrar y el sistema nos creará el sistema de ficheros encriptado

Si expulsamos el disco y lo volvemos a introducir, el sistema nos mostrará un cuadro de diálogo para que introduzcamos la contraseña del disco cifrado para poder acceder al mismo.

viernes, marzo 02, 2018

De confirmarse, lo de los Mossos d'Esquadra es un escándalo

Siento dar la turra con el tema catalán, pero desde mi punto de vista, si se confirma las noticias que está publicando El Periódico, Los Mossos intentaron acceder sin autorización a datos de ciudadanos y Un informe de la Policía acusa a los Mossos de seguimientos sobre políticos, abogados y periodistas contrarios al procés, estamos ante un escándalo de aúpa, un par de órdenes de magnitud por encima de los casos de corrupción que ha habido en España.

No sé si se es consciente como la Generalidat de Cataluña está usando a los Mossos d'Esquadra como una policía política en el peor sentido de la palabra. De probarse todo este operativo ante un juez, estamos antes un cuerpo de policía que se ha dedicado a intentar robar datos de manera ilegal de diversas bases de datos de ciudadanos, perfilando a los mismos y que se ha dedicado a seguimientos a todos aquellos que no comulgaman con la rueda de molino del proceso independentista. Que han sido cómplices del golpe de estado que han intentado dar Puigdemont secundado por los de ERC y la CUP.

Si fuera una empresa con sede en Cataluña, ¿Qué confianza puedo tener en mis comunicaciones y en mis datos?. Si han intentado hacer esto con los ciudadanos de a pie, intentando acceder hasta los registros sanitarios, ¿De verdad no van a intentar acceder a los datos de las empresas?. Y llegado el momento, como buena policía política, usar esa información frente a todos aquellos que no estén a favor de la Generalidad.