Musiqueando 6 (20190603)

La música es como la gastronomía, esto es algo que razonaba el otro día en el bus. Porque hay muchas formas de disfrutar de la gastronomía: tenemos los platos tradicionales de toda la vida que nunca nos fallan, tenemos cosas experimentales o innovadoras que pueden resultarnos chocantes pero que están sorprendentemente buenos, podemos encontrar el sabor más delicioso en las cosas más sencillas y también en las más elaboradas y tenemos diversas recetas tradicionales del resto del planeta que no conocemos, que recogen la tradición de su cultura. Todo un mundo de comida que disfrutar para que luego muchos se empeñen en gastarse la pasta en el Burguer King o el PizzaMovil. Lo dicho, la música es como la gastronomía.

Ya que hablábamos antes de combinar, mezclamos rapcore, nü-metal noventero, folk indio y música de Bollywood ¿qué nos sale? Algo, al menos, raro. En el año 2016 nacían los Bloodywood como una banda-parodia que lanzaba versiones metalizadas de temas radioformuleros y solo un año después conseguían hacer ruido en Youtube con una versión de Heavy de Linkin’ Park, pues fueron muchos los que dijeron que el tema sonaba más a los Linkin’ Park originales en la versión de Bloodywood que en la de sus creadores originales. Tras eso logran un segundo éxito en la India gracias a otra versión de un popular tema de música punjabi (Tunak Tunak Tun) contando con la colaboración de otro grupo parodia, los brasileños Bonde Do Metaleiro. El éxito de sus versiones en youtube les anima a empezar a componer temas propios, con una orientación ya más seria abarcando temas como la depresión o el abuso escolar. El grupo sigue cosechando éxito en Youtube y en su país de origen y, poco a poco, se abren hacia mercados extranjeros. De momento están confirmados para tocar en Wacken 2019 y Ubisoft usará uno de sus temas en su videojuego Beyond Good and Evil 2.

Roky Erickson se nos moría el día que empezaba a escribir esto, así que decidí aplazar un par de semanas otra cosa que os iba a comentar para dedicarle unas líneas. Nacido en 1947 en Austin, Texas, fue un músico precoz pues con 19 años ya conocía el éxito con los 13th Floor Elevators, que publicaban el esencial The Psychedelic Songs of the 13th Floor Elevators en 1966. Tres años después, tras una detención por posesión de drogas, acabaría internado en un psiquiátrico de Houston donde se le sometería a un tratamiento por electrochoque complementado con torazina después de ser diagnosticado con esquizofrenia. Su popularidad iría en declive desde aquel momento, pasándose los años 70 bastante desaparecido de los grandes escenarios, aunque su creatividad seguía desbordando, lanzando un par de discos excelentes con su proyecto Roky Erickson and the Aliens entre finales de los 70 y principios de los 80. Tras eso de nuevo volvería a estar desaparecido hasta que a finales de los 80 la prensa reportaba que había sido detenido acusado de robar correo, cargo del que se libró tras demostrarse que solo lo había acumulado pero no lo había abierto. Es en aquel momento cuando varias bandas populares como REM, ZZ Top o Primal Scream deciden grabar un disco tributo que provoca que su carrera resucite, generando un renovado interés por la música de los 13th Floor Elevators y también por su carrera en solitario. El nuevo éxito traería dinero a sus cuentas que le permitiría pagar mejores médicos y medicación para contener su enfermedad y, gracias a eso, volver a los escenarios: en los 90 realizaría algunas grabaciones y en 2005 daría en el festival Austin City Limits su primer concierto completo en 20 años. Casi 40 años después del lanzamiento del debut de los 13th Floors Elevators la carrera de Roky había resucitado, manteniéndose activo hasta sus últimos días. Su legado ha sido reivindicado por mucha gente, desde Billy Gibbons y Alice Cooper hasta Johnny Depp, Eddie Glass de Nebula o Tobias Forge de Ghost.

No soy muy de indie, o como yo lo llamo “pop desganao”, porque me suele resultar un género bastante tedioso, pero tampoco soy un talibán que vaya a desechar un disco solo por una etiqueta. Esta semana en el curro le he estado dando vueltas a Bloco do Eu Sozinho del grupo brasileño Los Hermanos, un trabajo controvertido en su momento pues tras haber cosechado bastante éxito comercial con su primer disco el grupo decidió lanzar algo más íntimo y melancólico. A su sonido muy deudor de gente como Weezer o Radiohead le añadieron elementos brasileños de samba y bossa-nova, una combinación que le daba un plus de originalidad pero que les alejaba de lo que deseaba su discográfica, que decidió no invertir en promoción para el disco. Las ventas cayeron mucho, cierto, pero la crítica quedó encantada y con el tiempo el disco alcanzó un status de culto, considerado por la mayoría de sus fans como el mejor disco del grupo y uno de los mejores discos brasileños de la primera década de los dosmiles.

Y vamos a acabar la entrega de esta semana echándole un ojo a los Reverend Goat, un grupo del que tengo muy poco que decir… porque no se mucho más de ellos que lo que pone en su página de Facebook: que vienen de la comarca de Valdeorras (Ourense), que les encanta guitarrear, que están preparando un lanzamiento y que han adelantado un tema del mismo. De momento solo he podido escuchar ese tema, The Mask, construido sobre un riff granítico que suena como si lo hubieran horneado los mismísimos Melvins de la época del Stoner Witch. Así que os comparto aquí este adelanto y me quedaré pendiente de más novedades por parte de este prometedor proyecto.

Memoization: Acelerando funciones recursivas. Ejemplo con Javascript.

En su día hablamos aquí sobre la recursividad y sus «peligros«. Las funciones recursivas son muy costosas a nivel de recursos pues al llamarse a si mismas repiten varias veces el mismo paso ¿hay una solución?

Memoization (memorización) es una técnica consistente en almacenar los resultados de funciones muy costosas para devolverlos directamente en lugar de volver a calcularlos.

Por ejemplo, la siguiente función que ya vimos en un artículo anterior nos permitiría calcular un factorial con javascript:

function factorial(num)
{
    if (num < 0) {
        return 0;
    }
    else if (num == 0) {
        return 1;
    }
    else {
        return (num * factorial(num - 1));
    }
}

¿Podemos optimizar mucho esta función cacheando los datos? Podemos:

function factorial(num) {
    // inicializamos si es necesario
    if (!factorial.cache) {
        factorial.cache = {};
    }
    if (num == 0) {
        return 1;
    } else if (num in factorial.cache) {
    // si ya tenemos en cache el factorial de num, lo devolvemos
        return factorial.cache[num];
    } else {
    factorial.cache[num] = num * factorial(num - 1);
    return factorial.cache[num];
}
 

De esta forma nos ahorramos varias llamadas a la función pues simplemente devolvemos un valor almacenado en memoria. Esta no es una técnica exclusiva de Javascript, podemos utilizarla con otros lenguajes de programación. Javascript sí tiene la particularidad de tratar las funciones como un objeto más, eso nos permite por ejemplo definirle la propiedad cache en el ejemplo de arriba (en otros lenguajes deberíamos pasarle como parámetro a la función el array de valores o declararlo como variable global), esto también nos permite hacer que una función reciba como parámetro una función o devuelva como resultado otra función, lo que se conoce como higher-order function o función de orden superior. Sirviéndonos de esto podríamos declarar una función genérica para nuestro memoization:

const memoization = function(func){
    const cache = {};
    return (...args) => {
        const key = [...args].toString();
        return key in cache ? cache[key] : (cache[key] = func(...args));
    }
}

De esta forma podríamos definir nuestra función factorial() tal que así:

var factorial = memoization(function(num) {		
    return (num <= 1) ? 1 : num * factorial(num-1);
})

Operadores de conjunto en SQL-Server: UNION, INTERSECT y EXCEPT

Los operadores de conjunto UNION, INTERSECT y EXCEPT nos permite combinar en una misma salida el resultado de distintas consultas SELECT, construyendo así una consulta más compleja, lo que se llama una consulta compuesta. Para poder combinar dos consultas con estos operadores necesitamos que se cumplan dos requisitos:

  • Que ambas consultas devuelvan el mismo número de columnas.
  • Que estas columnas contengan el mismo tipo de datos, o al menos tipos de datos que se puedan convertir de forma implícita.

Estos tres operadores se incorporaron a SQL-Server a partir de la versión 2008 y están también disponibles en la base de datos SQL de la plataforma Azure. Los tres operadores aceptan además el parámetro ALL, que modificará ligeramente los resultados ¿Cómo funcionan y qué diferencia hay entre ellas?

EXCEPT:

Este operador encuentra la diferencia entre las dos consultas y devuelve las filas que pertenecen únicamente a la primera consulta. Es decir, si una tupla aparece tanto en la consulta de la izquierda como en la de la derecha no será incluida en el resultado final. Si aparece solo en la de izquierda y en la de la derecha no, entonces será devuelta una vez.

Si añadimos ALL al EXCEPT notaremos una pequeña diferencia. Al igual que con el EXCEPT a secas el operador buscará la diferencia entre las dos consultas, pero los datos devueltos cambian. En este caso si una tupla aparece un número m de veces en la primera consulta, y la misma tupla aparece un número n veces en la segunda consulta, entonces esa tupla aparece m – n veces en la respuesta de salida, si dicha resta es mayor que 0.

/*consultamos una tabla de Productos 
y sacamos todos los resultados únicos 
que no que existen en la consulta sobre la tabla Almacén*/

Select Descripcion, Codigo from Productos
EXCEPT
Select Descripcion, Codigo from Almacen

/*Con ALL si la tupa Descripción,Codigo existiese tres veces
en el resultado de la primera consulta y una vez en la segunda
entonces en el resultado final saldría dos veces*/
Select Descripcion, Codigo from Productos
EXCEPT ALL
Select Descripcion, Codigo from Almacen

INTERSECT:

Este operador combina los resultados de dos consultas en un único resultado que comprime todas las filas comunes para ambas consultas. Es decir, funcionaría como un AND lógico: devuelve solo las ocurrencias existentes en ambas consultas.

Si añadimos ALL a este operador el resultado también cambiará. En ese caso si una tupla aparece un número m de veces en el resultado de la primera consulta y la misma tupla aparece n veces en la segunda, entonces esa tupla aparece el menor número de entre m o n en la respuesta de salida.

/*consultamos una tabla de Productos 
y sacamos todos los resultados únicos 
que también existen en la consulta sobre la tabla Almacén*/

Select Descripcion, Codigo from Productos
INTERSECT
Select Descripcion, Codigo from Almacen

/*Con ALL si la tupa Descripción,Codigo existiese tres veces
en el resultado de la primera consulta y una vez en la segunda
entonces en el resultado final saldría una vez solo*/
Select Descripcion, Codigo from Productos
INTERSECT ALL
Select Descripcion, Codigo from Almacen

UNION:

Finalmente vamos con UNION. Si antes os decía que INTERSECT funciona como un operador lógico AND entonces UNION funcionaría como un operador lógico OR. Devuelve las filas únicas que existen o en la consulta de la izquierda o en la de la derecha.

En este caso el operador ALL lo que hará será modificar el resultado del UNION de forma que en lugar de recibir solo las filas únicas recibamos tantas filas como haya en la primera consulta y en la segunda, un poco la operación contraria a la que realiza EXCEPT ALL. En este caso si una tupla aparece un número m de veces en la primera consulta, y la misma tupla aparece un número n veces en la segunda consulta, entonces esa tupla aparece m + n veces en la respuesta de salida.

/*consultamos una tabla de Productos 
y la tabla Almacén y sacamos los resultados únicos, distintos*/

Select Descripcion, Codigo from Productos
UNION
Select Descripcion, Codigo from Almacen

/*Con ALL si la tupa Descripción,Codigo existiese tres veces
en el resultado de la primera consulta y una vez en la segunda
entonces en el resultado final saldría cuatro veces*/
Select Descripcion, Codigo from Productos
UNION ALL
Select Descripcion, Codigo from Almacen

Musiqueando 5 (20190523)

La semana pasada recordábamos que llevamos 9 años sin Dio y me entró la vena melancólica. Porque la voz de Ronnie James ha significado mucho para mi durante años, no solo por las horas dándole vueltas a las cintas de Heaven and Hell y Long Live Rock and Roll en el walkman cuando estaba en el instituto, ni por los recuerdos de compartir cervezas con muy buenos amigos en las tres veces que tuve suerte de verle en directo. No, aunque haya tenido un romance con su voz durante más de 20 años, desde que un amigo me grabara en Long Live Rock and Roll de Rainbow, no son los buenos recuerdos los que hacen mi relación con su música tan especial sino los malos: hubo una época en la que tenía una situación laboral horrible, en una empresa/chiringuito en la que trabajaba sin contrato porque el empresaurio decía “estamos pendientes de una subvención de la Xunta para este proyecto, pero hay que ir empezando, cuando llegue la pasta lo formalizamos”, donde las jornadas se estiraban hasta las 12 o 13 horas, llegando una vez a tirarme consecutivas 36 horas en dicha oficina sin dormir, donde no sabía si cobraría o cuánto cobraría a fin de mes (en cuatro meses currando allí cobré de menos en tres)… en fin, una puta mierda con la que tragas porque necesitas dinero sí o sí hasta que de puro agotamiento mandas todo a la mierda. Bueno, pues en esa época me subía al bus todos los días, me enchufaba los auriculares de mi mp3 y ponía The Last In Line, siempre The Last In Line, el disco entero. ¿Por qué? Porque extrañamente me daba energías para afrontar la incierta jornada. Así que no voy a hablar de su influencia en los inicios del heavy metal, de su importancia en la historia del rock o de su rango vocal: para mi Dio es tan grande simplemente porque escucharle me hacía sentirme mejor cuando estaba jodido.

Mi descubrimiento musical excitante de los últimos días son The Main Squeeze, un grupo estadounidense (Bloomfield, Indiana) de funk que no hace ascos al rock clásico ni al soul y que, nueve años después de su formación, ya cuentan con tres discos de estudio, dos directos y un puñado de sesiones en su canal de Youtube donde hacen diversas versiones, desde darle una capa de rock a temas bailables de los últimos años a meterle un groove y una voz a lo Jackson 5 a clásicos del rock setentero, algo heredado de sus inicios como grupo para tocar en fiestas universitarias. Por compararlos con algunos de sus contemporáneos te diría que son más rockeros que Vulfpeck y más funkies que Vintage Trouble pero que la cosa anda entre esas dos bandas. Este verano se lanzarán a una gira Europea por lo que tendremos oportunidad de disfrutarlos a este lado del Atlántico.

Para los amantes de géneros como el afrobeat, el funk brasileño, la bossa-nova o el highlife el sello inglés Mr.Bongo es un referente, una gente que, además de publicar novedades o de importarlas a Europa, lleva treinta años, desde la apertura de su primera tienda física en 1989 en Londres, reeditando trabajos que era extremadamente difícil conseguir, discos que se publicaron entre los 60 y los 80 en África o América Latina en sellos locales en muchos casos ya desaparecidos y que ahora ellos devuelven a la vida a través de sus múltiples subsellos. Lo que nos ocupa hoy es una de sus últimas reediciones, un trabajo de highlife que publicó el sello ghanés Essiebones music en 1982, con los legendarios Ebo Taylor y Pat Thomas, junto a la banda base Uhuru Yenzo, regalándonos media hora de música donde los géneros tradicionales de Ghana se fusionan con el funk y el jazz. Hitsville-Revisited se titula el disco compuesto por cuatro temas, de Ebo Taylor, Pat Thomas & Uhuru Yenzo.

El potencial del arte para transformar la realidad, la fuerza de la música como motor para la evolución y la transformación social, construir un mundo mejor mediante el trabajo artístico, cambiar marcos mentales a través de las producciones de la cultura popular… son cuestione elevadas, temas para el debate filosófico y sociológico. Pero también son el viento que impulsa las velas de Ith, un proyecto que busca trascender lo musical para implicarse en lo social, un grupo que a través de sus composiciones orientadas al rock más clásico busca luchar contra el soterramiento social y artístico del gallego, contra el racismo, el machismo y en general los ataques contra la diversidad y los derechos humanos. Su último vídeo, de la canción Só Eu, es una muestra de esto: una denuncia de la hipocresía de una Europa que deja morir en el Mediterráneo a miles de personas que huyen en busca de refugio y auxilio. Tal vez no sea la canción que mejor define su sonido pero sí lo es de su compromiso social.

Añadir un PDF a un sitio web usando una etiqueta de HTML5

Existen varias formas de insertar un PDF dentro de un sitio web, una de ellas es usar alguna de estas etiquetas:

  • embed
  • object
  • iframe

Antaño solo teníamos la opción de usar la etiqueta iframe, dado que embed y object se añadieron para la especificación HTML5. En todo caso el procedimiento con las tres es el mismo: ponemos la URL del fichero PDF como valor del atributo src y definimos el tamaño mediante los atributos width y height:

<!--Ejemplos varios-->
<iframe src="http://rutaamipdf/fichero.pdf" width="95%" height="100%"></iframe>

<embed src="http://rutaamipdf/fichero.pdf" width="95%" height="100%"></embed>

<object src="http://rutaamipdf/fichero.pdf" width="95%" height="100%"></object>

¿Problemas? Pues sí, que con este método dependemos de que el navegador que está usando el usuario tenga incorporado algún visualizador de PDF. En algunos casos tiene que ser mediante un plugin externo, como en Chrome, en otros ya viene incluído por defecto en el propio navegador.

Comprobar de forma fácil si un número es par en una hoja de cálculo de Google Drive

En su día habíamos visto varias soluciones para comprobar con PHP si un número es par o impar. Esto también podemos necesitarlo cuando trabajamos con una hoja de cálculo de Google Drive, por suerte ya hay una función específica para ello:

La funció ES.PAR() recibe un número como parámetro y nos devuelve un valor booleno: verdadero si es par y falso si no lo es. Así de simple. Su funcionamiento sería como en el siguiente ejemplo:

=ES.PAR(22)

Importar datos de una hoja de cálculo de Google Drive a otra con IMPORTRANGE()

En los últimos tiempos casi todos los artículos técnicos están siendo de ofimática y, más en concreto, de Google Drive. Y esta nueva entrega sigue por ahí: ¿podemos importar datos de una hoja de cálculo a otra en Google Drive? Pues sí, podemos.

La función IMPORTRANGE() se encarga de ello, recibiendo dos parámetros (dos cadenas de texto, por tanto se les envían siempre entre comillas dobles): el primer parámetro será la URL de la hoja de cálculo donde está el origen de los datos, el segundo será una cadena donde especificamos la hoja y el rango de celdas a recoger. La sintaxis es tal que así:

=IMPORTRANGE("UrlDeLaHojaDeCálculo";"NombreDeLaHoja!CeldaInicio:CeldaFin")

Os voy a dejar un ejemplo más o menos real. Tengo una hoja de cálculo donde voy guardando los discos que añadiré a la próxima revisión de los 1100 discos esenciales (cuando crezca hasta 1250, dentro de unos meses). Ahora voy a importar de esa tabla las dos primeras columnas de las 20 primeras filas. Lo haría así:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/1QqGx-f4jC3ZHi1jkSa9eY9_vY-OiClXJ1nKTDwleVpfh3I/";"Hoja 1!A1:B20")

Otro dato importante: por seguridad la primera vez que importemos los datos se nos solicitará conceder permisos explícitamente sobre la hoja de origen. Una vez concedidos, la hoja de cálculo de destino podrá extraer datos de cualquier parte de la hoja de origen hasta que el permiso se revoque también de forma explícita.

Musiqueando 4 (20190508)

Hay un puñado de productores que son genios capaces de maximizar la capacidad de trabajo de los músicos y hacerles sacar lo mejor de sí mismos a la hora de grabar sus obras, pero también hay muchos productores que pecan de exceso de conformismo o de solo saber calcar fórmulas que les han traído el éxito a otros. El otro día veía una discusión online sobre el Rocka Rolla, el disco debut de Judas Priest que no está, precisamente, entre lo más destacado de su producción. Una curiosidad respecto a esta grabación es que los temas Tyrant, Epitaph y The Ripper ya estaban compuestos, finalizados y eran interpretados por el grupo en sus directos, mientras que Victim of Changes (en aquel momento titulada provisionalmente Whisky Woman) y Dream Deceiver estaban inacabados pero el proceso de ser finalizados para la grabación. El productor, Rodger Bain, rechazó esas canciones por no ser bastante comerciales. Un año y medio después esos temas conforman el grueso de Sad Wings of Destiny, el disco que daría el impulso definitivo al grupo y que se convertiría en uno de los pilares de la historia del heavy metal. ¿Fue cosa de la discográfica o del productor? Los precedentes de Bain eran excelentes: los tres  primeros discos de Black Sabbath y los dos primeros de Budgie, es evidente que no era un inútil pero con Judas Priest se estrelló, le falló la visión y el oído rechazando canciones que se mantendrían cuatro décadas en el repertorio de la banda.

The Pilgrim es el proyecto en solitario del líder de Black Rainbows y cabeza del sello Heavy Psych Sounds, Gabriele Fiori. Su última entrega, Walking into the Forest, es un trabajo alejado del stoner metal de su banda madre, un proyecto acústico de sonido desnudo y espíritu folk. Nada de casposos MTV Unplugged de los 90 por si lo estabas pensando, lo de Fiori es real, genuino, elaborado, similiar al álbum acústico de Brant Bjork del que ya hablamos en su día, picando del Neil Young desenchufado, del lado más folk de Jethro Tull, de Crosby Stills and Nash o de la etapa setentera de Terry Reid. Moviéndose entre lo onírico, lo bucólico, lo crudo y lo desértico nos deja piezas muy variadas como el rock desenchufado de Brainstorm, el bucolismo pastoril de When I call your Name o la pura morriña en Dragonfly. Kyuss y Fu Manchu dándose la mano con Donovan y Bob Dylan.

Hablando de Dylan, le fui a ver en la última gira en su paso por Compostela. Como bien sabéis soy un gran fan suyo, le tengo una enorme admiración como leyenda de la música del siglo XX y es uno de los músicos más presentes en mi lista de 1100 discos indispensables… pero voy a confesar que salí decepcionado. Es cierto que ya sabía que la comunicación con el público del legendario cantautor es nula, que su voz está muy cambiada por la edad y que con 77 años no le íbamos a pedir un show enérgico, yo todo eso lo llevaba ya asumido. Lo que sí me esperaba es que viniese acompañado de unos músicos sobresalientes, pero el grupo de apoyo me resultó bastante justito y apático. Y los arreglos de las canciones para que encajen en el sonido más blues-rocanrol de la gira tampoco me gustaron, clásicos ya universales como Like a Rolling Stone, Highway 61 o Blowing in the Wind acaban sonando irreconocibles, dando la impresión de que todo suena más como a Roy Orbison que al viejo Dylan. El sonido del pabellón, como de costumbre en Sar, tampoco ayudó a mejorar la experiencia. Por un lado decepcionado, por otro al menos puedo decir que le pude ver en concierto, ya que en su anterior visita a la ciudad me había tocado currar. Y uno tampoco ve todos los días a un premio Nobel tocando el piano y cantando.

Hace un par de días vi una foto en Facebook, en la cuenta de los Lucifer: Johanna Sadonis y Elin Larsson juntas en un estudio. No aclaraban mucho más ¿Qué se viene? ¿Nuevo disco de Lucifer con una colaboración de Elin? ¿Nuevo disco de Blues Pills con una colaboración de Johanna? ¿Nada de eso y simplemente se sacaron una foto juntas? Pues a saber, pero al menos nos da para dejar fluir la imaginación ¿No molaría escucharlas cantar un par de temas juntas?. Lo que parece seguro es que este año Blues Pills grabarán nuevo material, a ver cómo suena el grupo tras la marcha de Dorrian Sorriaux.

Todavía no hay disco nuevo de Sacri Monti, saldrá en julio y tendremos gira europea para poder volver a verlos en directo. Pero para amenizar la espera Tee Pee Records adelanta un tema en youtube con mucho aroma setentero, una canción que me suena entre Cream y Deep Purple como primer mordisco del que será su segundo trabajo. Prometen una buena dosis de sus hard rock protometálico fusionado con psicodelia.

No soy yo muy de hip-hop pero me he enganchado a un grupo de este género: Shabazz Palaces ¿por qué? Porque es como si alguien hubiera mezclado un poco de Run DMC y otro poco de Outkast con el espíritu psicodélico de All Them Witches o Causa Sui. Ciencia ficción, retrofuturismo y fantasía evasiva abrazándose a un susurrado hip hop sobre bases electrónicas con efectos cósmicos y espaciales. En los últimos años han agregado además percusión africana y ritmos afrobeat a sus composiciones ¿Una aproximación musical al Afrofuturismo? Ahí lo dejo. Tienen cuatro discos de los que me he devorado dos especialmente: Lese Majesty y Born on a Gangster Star, además de varios pequeños directos en la icónica estación de radio KEXP que te puedes encontrar en su canal de Youtube.

Y para despedirnos otro adelanto, el del próximo disco de Peter Frampton: All Blues. El mítico ex-guitarrista de los Humble Pie y autor del clásico superventas Frampton Comes Alive! y del pegajoso Baby I love your Way (y protagonista de una mítica escena en Los Simpson, como no) anunció en febrero que dejaría de girar después de este verano, ya que le han diagnosticado una grave enfermedad llamada miositis por cuerpo de inclusión que a medio plazo le acabará afectando a los dedos, impidiéndole tocar. Esto nos hace temer que este pueda ser también el último trabajo que pueda grabar el guitarrista, que nos dejará un repaso por 10 de sus clásicos del blues favoritos versionados por su banda y con varios guitarristas invitados: Larry Carlton, Steve Morse o Kim Wilson. Desde aquí esperamos que la medicina pueda ayudarle con su condición.

Importar datos desde una web a una hoja de cálculo de Google Drive

Seguimos con el tema de la ofimática y con las hojas de cálculo de Google Drive, que parece ser un material que os interesa. Hoy vamos a ver una función muy útil aunque un poco liosa: Con IMPORTHTML() podemos importar a la hoja tablas o listados de una web.

La función recibe tres parámetros: el primero, como es lógico, es la URL de la página desde la que queremos importar los datos, irá entre comillas dobles por ser una cadena de texto. El segundo, el formato que queremos importar (puede ser «table» para tablas o «list» para listas». Finalmente el tercero es un índice para indicar qué tabla quieres traer si hay varias dentro de la web, algo que puede ser lioso ya que a veces vamos «a ciegas» y puede que necesitemos varios ensayos de prueba y error hasta traer el dato que queremos. Por tanto la sintaxis sería tal que así:

=IMPORTHTML (dirección url; tipo de listado; índice numérico)

Vamos con un caso práctico, seguro que recuerdas que en su día vimos como exportar datos desde la web Basketball-Reference a formato Excel. Ahora vamos a hacer lo mismo pero usando directamente esta fórmula en una hoja de Google Drive:

=IMPORTHTML("https://www.basketball-reference.com/players/s/smithjr01.html";"table";1)

La línea de arriba importaría la primera tabla de la ficha de JR Smith, es decir, sus promedios en temporada regular. El resultado sería tal que así:

Ejecutar apps de Android en Linux con Anbox

Aunque el núcleo de Android es Linux sus aplicaciones no son compatibles de forma nativa con una distribución de GNU/Linux. Para correr aplicaciones Android en un sistema Linux necesitamos un emulador al estilo de Wine (que nos permite correr aplicaciones de Windows).

Existen hoy por hoy varios proyectos de emuladores que nos permiten hacer esto en nuestros sistemas Linux pero ha sido Anbox el que me ha parecido más interesante ¿por qué? Porque Anbox se sirve del propio kernel de nuestra distribución para trabajar, sobre el que extiende una capa de compatibilidad. ¿Qué implica esto? Que al no tener que emular el kernel consume menos recursos que sus competidores. Nuestro hardware queda menos cargado con el.

Podemos instalarlo mediante paquetes snap o desde la tienda de apps o los repositorios de nuestra distro. Una vez instalado basta con instalar en nuestro equipo el .apk de la aplicación que queremos correr. Para facilitar esta instalación lo mejor es que instalemos también AndroidDebugBridge (ADB), una herramienta para desarrolladores Android:

# Instalar ADB en Ubuntu y familia
$ sudo apt install android-tools-adb

# Instalar ADB en Fedora
$ sudo dnf install android-tools