MAT: Limpiando metadatos en Ubuntu

Capítulo 3 del tema de metadatos y software libre. Ya los limpiamos de LibreOffice y de los JPG, pero ahora toca el capítulo final. ¿Si te digo que hay un toolkit que los limpia de casi todos los formatos? Ok, podría haber empezado por ahí… pero así me ha dado para tres artículos.

¿Qué es MAT? Es Metadata Anonymisation Toolkit, una serie de herramientas que borrarán los metadatos de vuestros archivos en Ubuntu: ofimáticos, imágentes, pdf, torrents… No soporta todos los formatos del mundo, pero sí muchos de los más habituales.

Aunque si vamos a ser sinceros, este no es un software de Ubuntu sino de Debian, pero al ser una aplicación el Python bastan con unas cuántas dependencias instaladas y la cosa irá como la seda.

Lo primero, a instalar las dependencias:

sudo apt-get install python-hachoir-core python-hachoir-parser python-pdfrw python-cairo python-poppler python-mutagen libimage-exiftool-perl libimage-info-perl

Con esto instalado basta bajarse el archivo comprimido con el programa desde su sitio oficial. Una vez descargado lo descomprimís y le otorgáis permisos de ejecución. Podéis hacerlo desde el entorno gráfico con un click derecho en Propiedades->Permisos->Permitir ejecutar el archivo como un programa sobre el archivo mat-gui; pero si preferís también podéis hacerlo desde comandos:

sudo chmod  +x mat-gui

Llegados a este punto deberíais tener el programa instalado y funcionando. Para su uso tendrás un entorno gráfico extremadamente simple: Un botón para agregar archivos, otro para limpiarlos, un botón para buscar qué ficheros tienen metadatos y un botón de cierre/apagado de la aplicación. Todos con iconos muy intuitivos. En su menú de Preferencias (se accede a través del menú Edit) podrás definir opciones como si quieres que genere una copia limpia de metadatos o si prefieres que directamente sobreescriba el original (la opción Backup), y algunas más menos interesante.

En fin, con esto ya podéis vivir más tranquilos en cuanto al tema de ir dejando vuestra información por la red.

Eliminar metadatos de fotos en Ubuntu

Si hablábamos el otro día de metadatos en OpenOffice/LibreOffice hoy vamos a ver cómo borrar los metadatos de las fotos, en este caso sólo del formato jpg. Muchas veces subimos fotografías desde el móvil, lo cual lleva un montón de metadatos inscrustados, los llamados EXIF.

Y es que si una cámara ya va proporcionar la fecha y la hora en la que fue tomado y el modelo (y en caso, por ejemplo, de mi cárama Olympus un montón de datos técnicos, como el modo de flash, el perfil de color…) un móvil puede traer hasta las coordenadas geográficas del lugar donde se ha tomado la foto.

Ya sea por respeto a nuestra intimidad, paranoia o simplemente que hayamos puesto una excusa y esa foto nos la pueda joder («-Cariño estaba trabajando» «-Pues según esta foto a esa hora estabas en el bar») en Ubuntu/Mint/Debian tenemos una herramienta que permite que nuestros jpg se queden limpitos de ellos: jhead.

Se trata de una herramienta de línea de comandos, por lo que lo primero es instalarlo:

sudo apt-get install jhead

Luego la orden para eliminar los datos tampoco tiene mucha ciencia:

jhead -purejpg /ruta/imagen.jpg

Basta con pasarle la ruta de la imagen que queremos dejar sin metadatos y punto. Pero lo verdaderamente útil, como en todo el software de consola, viene cuando queremos trabajar con muchos archivos:

jhead -purejpg /ruta/*.jpg

Podemos usar comodines para afectar a todos los archivos de una carpeta concreta, ahorrándonos el trabajo de ir uno a uno.

Como ya dije arriba, este software sólo trabaja con jpg y sus derivaciones: jpeg, JPEG y JPG. En cualquier caso es el formato más habitual en cámaras y móviles, pero de todas formas en el futuro hablaremos de más opciones para trabajar con imágenes.

Quitar barra de Hola Search

Ayer la gente de Questionarity me comentó que podría ser interesante hablar de otro adware, Hola Search, que según parece se está extendiendo bastante entre equipos con Windows, metiéndose en Chrome, Safari, Explorer o Firefox. Se trata de otro de esos browser hijackers (secuestrador de navegadores) que se instalan a traición como un programa legítimo al descargar software de ciertas fuentes (teóricamente legítimas), te redirige las búsquedas a una página fraudulenta, te cambia la página de inicio y te bombardea con publicidad . Yo como siempre insistiré en que si queréis instalar algo lo hagáis siempre desde la web del fabricante, que los terceros suelen colar estas cosas. Tranquilo, ya nos hemos ocupado de cosas así antes y lo bueno de este tipo de malware es que es muy evidente su infección, por su propia naturaleza, no es silencioso.

He de reconocer que en este  caso todavía no me las he visto con este cabroncete, pero hice una simulación con una máquina virtual, forzando la infección en un Windows Server 2k3.

En fin, la prevención está bien para el futuro, pero seguro que lo que te interesa ahora mismo es ver cómo te cargas esto. En fin, casi todo el Adware se elimina de la misma forma, y este Hola Search no es una excepción. Todo es cuestión de bajarse una serie de programas para liquidarlo (luego vendrán los comentarios «Pues yo lo desinstalé y ya va»… vale bonito, ya verás qué risa cuando reinicies) y ejecutarlos. Lo primerito, para evitar conflictos: desactiva tu antivirus habitual. Ya lo pondrás a rular después.

Primero los colegas de Infospyware nos proporcionan AT-Destroyer, lo descargas, instalas, ejecutas, le das a Search and Destroy y esperas. Cuando acabe os pedirá reiniciar. Obedeced.

Todavía no está acabada la cosa. Comprobad que no se ha reactivado el antivirus en el reinicio, y si lo ha hecho lo desactiváis otra vez. Ahora toca descargar Adwcleaner. El procedimiento es como antes: descargáis, instaláis, ejecutáis y pulsáis Delete. Cuando acabe, otra vez a reiniciar.

Ahora lo mejor es que paséis un antivirus en la nube, probad en este caso con Panda Cloud, aunque si tenéis otro preferido también valdrá. El caso es comprobar que no haya nada raro por el equipo.

Y para finalizar, como siempre desinstaláis todo lo que habéis necesitado para la limpieza, descargáis CCleaner y lo usáis para limpiar coockies y basurillas varias, y de paso ponéis un poco en orden el registro.

Y con todo esto ya deberíais tener vuestro navegador (sea Chrome, Firefox o Explorer) y vuestro equipo limpito de Hola Search (y puede que de otra cosa más disimulada que estuviera también espiándoos)

Borrar metadatos personales de OpenOffice y LibreOffice

Son famosas las cagadas con los metadatos de políticos, valga este mismo como ejemplo y Chema Alonso tiene muchos más en su blog, cuando intentan falsear o filtrar una información «comprometedora». Para ciertas cosas es útil estar gobernado por inútiles, no lo niego (es que si además de desalmados llegan a ser listos íbamos a estar bien jodidos).

Existen muchas herramientas para borrar los metadatos de OpenOffice y Libre Office, pero si no buscamos una seguridad paranoica, sino simplemente evitar que vayan datos junto al archivo como nombre, dirección… hay formas sencillas de hacerlo.

Si estás elaborando un documento nuevo, lo mejor es guardarlo ya sin los metadatos. Es fácil configurar el OpenOffice para que lo haga:

  • Te vas al menú Herramientas y allí seleccionas Opciones.
  • En opciones, en el árbol de la izquierda eliges Seguridad. En la derecha verás un apartado Opciones de Seguridad y alertas. Allí pulsas el botón Opciones.
  • Dentro del menú que se te abrirá marcas Elimina la información personal al guardar.

libre office

Con esto ya logras que el archivo se guarde sin tus datos personales. ¿Y con los archivos ya guardados?. Bueno, los archivos nativos de OpenOffice y LibreOffice realmente son un archivo comprimido (en tar.gz creo) que podéis abrir con cualquier compresor/empaquetador (7zip, FileRoller, WinZip…) y donde podéis ver varios xml que forman el documento. Los metadatos están guardados en meta.xml así que, si borráis ese archivo (o lo modificáis para eliminar lo que no queréis que salga) está arreglado, muerto el perro se acabó la rabia. También tenéis otros xml por ahí como el settings, donde se guardan datos sobre impresoras, servidores… que pueden ser sensibles. Incluso se podría hacer un script que borre estos metadatos, si buscáis un poco seguro que hay más de uno colgado (y si no, pedidlo y me curro uno en algún artículo).

En fin, otra ayudita para vuestro anonimato y que no os pase como a muchos politicastros. Si queréis algo más profundo y currado, a Chema Alonso me remito again.

Scripts para parar, arrancar y reiniciar Apache y MySQL en Ubuntu

Muchos desarrolladores tenemos en nuestro equipo un entorno LAMPP para testear nuestros trabajos web. Como generalmente uso el ordeador para trabajar tengo configurado que arranquen con el equipo por defecto tanto MySQL como Apache, ya que rara vez estoy ON en mi equipo y no estoy trasteando con algo de código.

Pero a veces, para virtualizar o para trabajar con algún editor de vídeo me veo obligado a tener toda la memoria posible para que la cosa no se torne inusable
. Cierto que son sólo dos líneas en el terminal… pero con cada script las dejo en una sola:

Script para parar Apache 2 y MySQL:

#!/bin/bash/

sudo apache2ctl -k stop
sudo /etc/init.d/mysql stop

Script para arrancar Apache2 y MySQL

#!/bin/bash/

sudo apache2ctl -k start
sudo /etc/init.d/mysql start

Y finalmente, script para reiniciarlos

#!/bin/bash/

sudo apache2ctl -k restart
sudo /etc/init.d/mysql restart

Te dará una serie de warnings, pero ni caso, funciona (compruébalo intentando conectar con MySQL o intentando ver algunha página en local).

En fin, por hoy nada más.

AngularJS: animaciones con scroll

No tenía muy claro cómo titular esta entrada, dado que su título original es AngularJS: Scroll Animations. Como en ocasiones anteriores se trata de una «traducción-no-literal»/explicación de un artículo tutorial en inglés.

En fin, ¿a qué nos referimos con esto de animaciones con scroll? Seguro que habéis visto más de una página que las tiene. Se trata de animaciones que se activan conforme vas haciendo scroll en la página, al alcanzar una determinada posición. La web Let’s Free Congress es presentada con ejemplo de esto en el texto original.

AngularJS logo

La idea es que la animación comience cuando el usuario llegue a la parte de la pantalla, para lo cual nos serviremos de la directiva scrollPosition, que se nos presenta así en el ejemplo original

.directive('scrollPosition', ['$window', '$timeout', '$parse', function($window, $timeout, $parse) {
    return function(scope, element, attrs) {

        var windowEl = angular.element($window)[0];
        var directionMap = {
          "up": 1,
          "down": -1,
          "left": 1,
          "right": -1
        };

        // Recuperamos el elemento con el scroll
        scope.element = angular.element(element)[0];

        //Almacenamos los elementos que escuchan a este evento
        windowEl._elementsList = $window._elementsList || [];
        windowEl._elementsList.push({element: scope.element, scope: scope, attrs: attrs});

        var element, direction, index, model, scrollAnimationFunction, tmpYOffset = 0, tmpXOffset = 0;
        var userViewportOffset = 200;

        function triggerScrollFunctions() {

          for (var i = windowEl._elementsList.length - 1; i >= 0; i--) {
            element = windowEl._elementsList[i].element;
            if(!element.firedAnimation) {
              directionY = tmpYOffset - windowEl.pageYOffset > 0 ? "up" : "down";
              directionX = tmpXOffset - windowEl.pageXOffset > 0 ? "left" : "right";
              tmpXOffset = windowEl.pageXOffset;  
              tmpYOffset = windowEl.pageYOffset;  
              if(element.offsetTop - userViewportOffset < windowEl.pageYOffset && element.offsetHeight > (windowEl.pageYOffset - element.offsetTop)) {
                model = $parse(windowEl._elementsList[i].attrs.scrollAnimation)
                scrollAnimationFunction = model(windowEl._elementsList[i].scope)
                windowEl._elementsList[i].scope.$apply(function() {
                  element.firedAnimation = scrollAnimationFunction(directionMap[directionX]);  
                })
                if(element.firedAnimation) {
                  windowEl._elementsList.splice(i, 1);
                }
              }
            } else {
              index = windowEl._elementsList.indexOf(element); //TODO: Add indexOf polyfill for IE9 
              if(index > 0) windowEl._elementsList.splice(index, 1);
            }
          };
        };
        windowEl.onscroll = triggerScrollFunctions;
      };   
    }]);

Tal directiva se ha utilizado en este ejemplo. En ella podéis ver como la barra de la pantalla del móvil progresa según bajáis la barra.

En fin, la cosa es explicar ahora como usar esto. Como en el ejemplo original, iremos desgranando poco a poco el código, despedazándolo para ver cómo funciona.

Lo principal es añadir la directiva al elemento que queremos animar:

.row.show-for-large-up
  .teaser(scroll-position, scroll-animation='fireupApplicationDesignAnimation')
    .row
      .large-6.columns.left-align.margin-top
        h1(data-i18n="_CareerDesign_APPLICATIONDESIGNTITLE")

Esto le dice a AngularJS que cuando el usuario llegue al área determinada del DOM debe dispararse la animación. En vuestro controlador deberíais tener algo así

$scope.fireupApplicationDesignAnimation = function(scrollDirection) {
        scrollDirection > 0 ? reduceAmount() : aumentAmount(); // We want to increase on scrollDown
        setOffsetForImage();
    };

La directiva envía al controlador la dirección del scroll, lo que permite mostrar animaciones basadas en él. En ocasiones querrás ejecutar la animación sólo una vez en lugar de que ocurra cada vez que el scroll esté a su altura. Puedes lograrlo devolviendo un valor true y chequeándolo antes de lanzar la animación, como en este ejemplo:

$scope.fireupMarketingDesignAnimation = function() {
      if(!firedMarketingAnimation) {
        window.animations.marketingAnimation.init();
        firedMarketingAnimation = true;
        return firedMarketingAnimation;  
      }
    }

Como podéis ver en el ejemplo la función que lanza la animación está dentro de un if que hará que sólo se ejecute una vez.

En fin, resumiendo ¿Cómo funciona la directiva?. El proceso es el siguiente:

  • Crea un array de elementos que requieren un eventListener del tipo onScroll. Puedes tener varios almacenados, y si devuelves un true para una sola ejecución serán eliminados para reducir el uso de memoria.
  • Añade un eventListener onScroll que comprueba en qué parte de la página está el usuario.
  • Recorre tus elementos vinculados con la directiva comprobando si se han activado las animaciones.
  • Si no lo han hecho y el usuario se posiciona junto a ellas con el scroll entonces se activan. Esto obliga a hacer mucho uso de $parse, así que léete bien su documentación para entenderlo al 100%.
  • Si la animación llamada a través de scope devuelve true, la extrae del array, como dijimos en el primer punto.

La conclusión:

La directiva es útil cuando necesitas lanzar varias animaciones en un periodo de tiempo específico. También te permitirá definir un comportamiento específico según la posición del scroll o hasta para realizar cambios en propiedades CSS3 relacionándolas con la posición de la página.

En este ejemplo en Codepen, creado por el autor del artículo original, podéis ver cómo también funciona en horizontal. Si movéis el scroll lentamente veréis como el balón lo sigue. Eso sí, probad con Chrome porque a mi en Firefox en lugar de una pelota se me ve una especie de mojón raro.

En fin, finalmente recomendar el blog de jjperezaguinaga Surviving by Coding, donde podréis encontrar mucha info sobre AngularJS y otros temas de desarrollo web, en inglés.

Firefox: evitar tracking, que no rastreen tus datos

Ayer hablábamos del complemento Collusion como una gran herramienta para saber a qué webs envían información las webs que visitamos. Y como ya os dije, Collusion sirve para diagnosticar, pero no para combatir. Sabemos quién envía a quién, pero olvídate de cortarles el grifo con eso.

Tranquilos, ya os dije que había opciones para evitar que nos sigan. La primera, como podréis ver en la web de Mozilla, viene de forma nativa en el navegador. Por si no entendéis la explicación en inglés, os la repito por aquí:

  • Pulsáis el botón Firefox de la parte superior izquierda.
  • Os metéis en Opciones.
  • Ahí buscáis Privacidad.
  • En Rastreo activáis el checkbox «Decir a los sitios web que no quiero ser rastreado».

Luego le dais a OK y vía.

Pero claro, esto para según qué páginas puede no ser suficiente, y podéis necesitar un complemento para evitar el tracking. Desde aquí vamos a hablar de dos: Do Not Track Plus y Ghostery.

logotipo Ghostery

Ambas cumplen perfectamente la función de evitar el tracking, si bien Ghostery es la que está recibiendo mejores críticas por parte de los usuarios, ya que te da mayor flexibilidad a la hora de bloquear las cookies (Do Not Track Plus lo bloquea todo, Ghostery bloquea lo que quieras bloquear), te permite participar (si quieres) en una recogida de estadísticas para elaborar un ranking de sitios potencialmente invasivos y se trata de un proyecto Open Source, mantenido por la comunidad y con gran transparencia.

Do Not Track Plus Logo

En cualquier caso, ya ves que gozas de buenas herramientas para poder evitar las intromisiones habituales de ciertos sitios en tu red. Y si quires mayor seguridad, siempre puedes recurrir a las redes Tor.

Collusion: Comprueba a dónde envían tus datos las webs que visitas

Con el asunto de PRISM, el espionaje de la NSA, los diversos proyectos europeos (en España tenemos SITEL espiándonos desde 2009, por cierto que es curioso como ciertos medios atacaron a Rubalcaba por implantarlo pero no han comentado nada de que el gobierno de Rajoy lo siga utilizando), las filtraciones de Snowden… en fin, todo esto ha puesto la seguirdad y la paranoia en primera línea de información.

Ahora la gente empieza a preguntarse «¿Qué hacen las grandes compañías con mis datos?», empiezan a ser conscientes de que los millones de Facebook y Google tienen que salir e algún sitio y de que «si no pagas tú eres el producto». Por suerte muchos ya llevaban tiempo pensando esto, y más en el campo del desarrollo y de la seguridad web.

Collusion es un término que hace referencia a cuando dos personas u organizaciones se asocian para perjudicar a una tercera. También es un proyecto de Mozilla que vio la luz en 2012 y que nos permite saber, mediante un complemento del navegador, a quién envían la información las páginas que visitamos. Veremos burbujas de tres colores: azul para los sitios que visitamos, rojas para los anunciantes y blancas para webs que reciben alguna información. Luego el software generará un gráfico tipo telaraña uniéndolas para monstrarnos las relaciones. En algunos casos son cosas esperables (Google Analytics u otros servicios de estadísticas, Gravatar…) y en otros en cambio nos encontramos cosas sorprendentes (y desagradables).

gráfico collusion
Gráfico de collusion generado en sólo un día de uso.

Collusion es una buena herramienta para conocer quién conoce qué sobre nosostros, que podemos integrar como complemento en nuestro navegador Mozilla. Eso sí, sólo nos vale como herramienta de análisis, no nos protegerá del seguimiento. Tranquilos, hay formas de hacerlo, y mañana os hablaré de un complemento que os ayudará con eso.

AngularJS: Introducción y Hello World

Llevo unos días trasteando con el framework de Javascript AngularJS, libre y mantenido por Google. En su momento no lo incluí en mi pequeña selección de frameworks a ir mirando, pero al final he acabado por dedicarme a trastear con él. De momento tampoco he avanzado mucho, que este mes estoy liado, pero en el futuro os iré comentando.

Comencemos por la primera pregunta ¿para qué vale AngularJs? En fin, la idea de este framework es dinamizar las páginas HTML estáticas vinculando elementos de ese HTML con un modelo de datos que hemos definido en Javascript (a mano, o desde un JSON), permitiendo la interactividad con el usuario. En este caso, aunque se usa un patrón MVC la potencia es que nos permite, mediante bindings {{}} , acceder a la funcionalidad o a los datos. Es cierto que el resultado final lo podemos conseguir de otras muchas formas, pero AngularJS nos ahorrará muchas líneas de código. Algunos lo comparan ya con lo que significó jQuery en su momento para el desarrollo en Javascript.

AngularJS Logotipo
AngularJS

Para descargaros Angular, que por cierto cada versión tiene un nombre más delirante que la anterior (al momento de escribir esto estamos en la Monochromatic Rainbow, pero mi favorita es Flatulent Propulsion), podéis hacerlo desde la página del proyecto. Y desde la documentación de esa misma página he sacado el código para el primer ejemplo: un Hello World!. Pero claro, como hablamos de un framework que dota de actividad a vuestro CSS será más bien un Hello ______ (loquesea).

Empezamos, como siempre, por el marcado:


    <html ng-app>
      <head>
<script class="hiddenSpellError" type="text/javascript">// <![CDATA[
src</span>="http://code.angularjs.org/angular-1.0.2.min.js">
// ]]></script>
<script class="hiddenSpellError" type="text/javascript">// <![CDATA[
src</span>="script.js">
// ]]></script>
 </head>
 <body>
 <div ng-controller="HelloCntl">
 Your name: <input type="text" value="World" />
 <hr/>
 Hello {{name}}!
 <div>
 </body>
 </html>

Bien, como puedes ver en la cabecera cargamos como un script la librería de AngularJS (está copiado de un ejemplo antiguo, así que revisa cual es la última versión en el momento en que lo hagas) y debajo cargamos otro script con lo que hayamos programado en Javascript. Puedes ver que al div le hemos asignado un atributo llamado ng-controller. La idea de esto es definir que ese div estará dentro del ámbito del controlador que le indicamos (recuerda, estamos trabajando en un modelo MVC). Luego verás que al input le hemos puesto también un atributo, en ese caso ng-model. Lo mismo, estamos vinculando ese atributo al ámbito del modelo de datos definido, o explicado de forma más simple: el texto que hay ahí será el modelo de datos y se llamará name. Finalmente ves que al lado de Hello hemos incluido {{name}}, esencialmente la idea es que ese elemento entre llaves está relacionado en el elemento del modelo con el mismo nombre (que a su vez está relacionado con el input) ¿qué va a ocurrir? Pues el llamado two-way-data-binding: modificarás el modelo desde la vista y justo al mismo tiempo verás como los datos de la vista se modifican.

Ahora vamos con la parte del javascript, donde definimos el controlador y el modelo:

    function HelloCntl($scope) {
       $scope.name = 'World';
    }

Como puedes ver aquí definimos la función HelloCntl, que fue la que vinculamos en el marcado al div. Abajo simplemente hacemos que, por defecto, el nombre que aparezca sea World (para formar el Hello World). Si bien, si lo modificamos veremos como este cambia.

Logo AngularJS

Finalmente vamos a hablar de otro de los fuertes de AngularJS: el testeo del código. Porque AngularJS nos permite escribir test para comprobar el correcto funcionamiento, sin tener que meternos en absurdas y largas pruebas con algún complemento del navegador para depurar javascript. El teste sería este:

    it('should change the binding when user enters text', function() {
        expect(binding('name')).toEqual('World');
        input('name').enter('angular');
        expect(binding('name')).toEqual('angular');
    });

Si queréis ver en acción todo el ejemplo antes de testearlo vosotros, en la página de Angular (de donde lo he copiado yo) podréis hacerlo. Además de ver otros, como un juego del tres en raya.

En fin, ya puedes hacerte una idea de la potencia de este AngularJS, más adelante espero escribir más sobre el tema. Yo lo veo como una potente herramienta, sobre todo para el desarrollo de Apps móviles con HTML5 y CSS.

También añadiré que la principal idea es usar AngularJS con Node.js en el lado del servidor, si bien podéis desde ese lado el lenguaje que prefiráis (Ruby, PHP, Python).

Ark – Burn the Sun

Tras muchas entradas seguidas sobre informáticas, tocaba volver al rock and roll y al a sección Joyas Musicales, que empieza a estar un poco abandonada. Hoy toca hablar de un must hear de principios de los dosmiles: Burn The Sun, de los Ark (me pregunto si el parecido con el título de un disco de ELF será casual). Un trabajo publicado por InsideOut music allá por 2001 y que en su día me repasé a conciencia.

No eran unos neófitos estos Ark en este su segundo disco. Todos eran músicos con una trayectoria más o menos dilatada, con un núcleo duro formado por el guitarrista Tore Østby (ex Conception), el baterista John Macaluso (trotamundos que había tocado en Powermad, Riot, TNT y por aquel entonces lo hacía con Yngwie) y el vocalista Jørn Lande (hasta aquel entonces había militado en Vagabond y The Snakes, y en esa época se convirtió en uno de los vocalista de moda en el metal/hard rock europeo). Junto a ellos dos invitados de lujo para completar la formación: el virtuoso bajista Randy Coven (Steve Vai, Leslie West, Yngwie Malmsteen, Holy Mother y profesor en Berklee) y el teclista Mats Olausson (Talisman, Yngwie Malmsteen). Lo dicho antes, una formación de músicos ya experimentados.

Ark Burn the Sun

En aquella época el progresivo comenzaba a ser la tendencia del momento dentro del metal melódico, y bandas como Dream Theater y Symphony X se convertían en las más populares del estilo. Podría parecer que Ark eran una superbanda creada ad-hoc para subirse al carro de la moda y hacer caja… pero para nada. Su primer disco además de un sólido experimento era la continuación lógica de los Conception de Østby.

El sonido de Ark combina un montón de influencias: en la base rítmica verás que han escuchado mucho Rush, hay pasajes ambientales heredados de King Crimson o los Led Zeppelin más experimentales, vocalmente las influencias metaleras de Dio y Coverdale en Lande se mezclan con pasajes más propios de Bjørk o armonías al estilo de Queen. En general es como si Neil Peart y David Coverdale intentaran componer el No Quarter de Led Zeppelin juntos.

Ark Formación segundo disco
La formación de Ark, con Lande como «Plantman»

El disco se abre con el temazo Heal the Waters, contundencia metalera donde los arreglos virtuosos no se pelean con las buenas melodías. El disco es oscuro, pero no cae en la falta de matices que suele llevar asociada esta etiqueta. Por así decirlo, oscuro en este caso no es negro sino más bien una enorme escala de grises que recorren con suma precisión. Torn, en cambio, se muestra como una canción ambiental con un impresionante trabajo bajístico de Coven en primer plano, tono ambiental que también escucharás en Walking Hour. En Absolute Zero o Noose en cambio es Jørn quien destaca explorando todo tipo de tesituras con su  voz, pasando de sus adorados clásicos del hard rock/metal (Dio/Plant/Coverdale) a cosas que recuerdan a Bjørk. Feed The Fire y I Bleed se alejan del corte más experimental y complejo del disco y se acercan a un rock duro más standar mientras que la pausada Resurrection o el tema título Burn the Sun se internan sin rubor en el metal progresivo más standar.

Y para el final me dejo dos piezas que merecen mención propia. La primera es el tema que cierra el disco, Missing you, una emotiva balada para lucimiento de Jørn que va creciendo en intensidad. La segunda, Just a Little, es una magistral pieza que bien podría haber sido firmada por los Queen más inspirados: jugando con una mezcla de jazz y flamenco en su inicio va derivando hace un tema de rock suave con unos impresionantes arreglos en la base rítmica y con un duelo guitarra/teclado digno de la elegancia de unos Purple de los 70.

Resumen general: Si no lo has escuchado hazlo ya. Jørn Lande hizo el mejor trabajo vocal de su carrera (junto a su colaboración en el Nostradamus de Kotzev, del que también os hablaré algún día). No es el típico disco de prog-metal de la época, es una intemporal obra maestra que puede medirse a los grandes del progresivo de los 70 sin despeinarse. Una lástima que el proyecto no tuviera continuidad después de esto.