Archive for 31 diciembre 2016

Los llibros de 2016

31 31UTC diciembre 31UTC 2016

Esti añu nun lleí muncho. Pasélu cásique en blanco. Namás lleí un llibru que me regaló el mi amigu Manolo. Lluéu dime cuenta de que llevaba munchu tiempu ensin disfrutar de la ficción, y un poco por probar púnxeme a lleer dellos clásicos de ciencia ficción. Y lluéu, fai poco,  entamé a lleer tol ciclu de Asimov de les fundaciones, darréu.

Y equí toi:

 

Robots e imperio Isaac Asimov
Los robots del amanecer Isaac Asimov
El sol desnudo Isaac Asimov
Bóvedas de acero Isaac Asimov
Yo, robot (releído) Isaac Asimov
Flores para Algernon Daniel Keyes
La Luna es una cruel amante Robert A. Heinlein
Quantum Manjit Kumar
Anuncios

Adaptar tamaño de un iFrame a la página contenida

29 29UTC diciembre 29UTC 2016

Cuando uno incluye una página web dentro de otra con un marco de tipo IFrame, se suele encontrar el problema de que tiene que ponerle un tamaño al IFrame sin saber cuál tendrá realmente la página de dentro (que de hecho puede variar). Y entonces aparecen unas bonitas barras de desplazamiento para hacer scroll dentro del IFrame. Esas odiosas barras dentro de una página que de por sí ya tenía barras.

Si uno lo intenta arreglar con JavaScript, y la página contenida no viene exactamente del mismo host que la contenedora, aparecen cuestiones de seguridad: los navegadores no permiten a la página contenida (que es la que conoce su propio tamaño) actuar sobre la contenedora. Lo que se llama Cross-Origin Resource Sharing, o CORS. Así que no puede ir alegremente desde la contenida a modificar el IFrame para que tenga el tamaño adecuado.

Internet está lleno de explicaciones sobre cómo solventar esto. A pesar de ello, no todos están explicados con claridad, y me hicieron falta unas cuantas pruebas para hacerlo funcionar. (Por cierto, no deja de ser una chapuza, y los propios IFrames no me gustan nada; como decía Bartleby, “preferiría no hacerlo”, pero en fin).

Total, que aquí está mi resumen.

La página contenida tiene que avisar a su contenedor para decirle su propio tamaño. Así que en la página contenida se podría incluir un código como este:

function notificarAlturaAlContenedor() {
 window.top.postMessage(document.body.offsetHeight + 50, "*");
}

if (document.addEventListener) {
 document.addEventListener("DOMContentLoaded", notificarAlturaAlContenedor, false);
 window.addEventListener("load", notificarAlturaPadre, false);
} else {
 document.attachEvent("onreadystatechange", notificarAlturaAlContenedor);
 window.attachEvent("onload", notificarAlturaAlContenedor);
}

La función notificarAlturaAlContenedor es la que importa, y envía un mensaje a la ventana contenedora. Este envío de mensajes parece ser el único mecanismo que se admite para CORS.

Debajo hay código que se ejecuta para asignar dicha función a los eventos que indican cuándo se ha cargado la página. Es decir, hacen que cuando se ha cargado la página (la contenida) se invoque a notificarAlturaAlContenedor() (si no… no la llamaría nadie). No he estudiado a fondo este código, y no sé si es realmente imprescindible todo él; sospecho que utiliza diversas opciones para asegurarse de que funciona en diversos navegadores.

Por supuesto, si la página contenida cambia dinámicamente de tamaño por medio de su propio JavaScript o lo que sea, en ese momento puede invocar explícitamente a notificarAlturaAlContenedor() para actualizar su tamaño.

Ya tenemos una página que “avisa” a su contenedor, enviándole un mensaje con su tamaño (ese “50” es arbitrario, es un margen adicional para asegurarse de que las barras de scroll no aparezcan). Falta que el contenedor, es decir, la página principal que tiene su IFrame, reciba este aviso y actúe en consecuencia, haciendo el IFrame más grande (o más pequeño).

Y para eso se puede poner esto en la página contenedora:

window.addEventListener('message', function(event) {
   document.getElementById("idDelIFrame").height=event.data;
 }, false);

Ese código añade una función que “escucha” los mensajes que le llegan. Dicha función es una función anónima, con el código escrito ahí mismo; y lo que hace la función es buscar el IFrame contenedor (que en este ejemplo se supone que tendrá id=”idDelIFrame”) y fijarle la nueva altura, que no es más que el contenido del mensaje (data).

Esto me ha funcionado. A partir de ahí, se puede estudiar con más calma qué es todo eso que sale ahí, pero creo que la base de lo que se está haciendo queda mínimamente comprensible. Como digo, hay mil ejemplos por ahí, seguramente mejores; pero al haber mil… yo al menos no los he entendido todos. Así que me lo apunto.

Opinión dirigida

21 21UTC diciembre 21UTC 2016

Más de toros.

En el periódico sacan como noticia un test que les han hecho a unos niños en clase. Supuestamente, el ejercicio trataba sobre siniestralidad en festejos taurinos, maltrato a los animales y responsabilidad política.

Y también supuestamente el test estaba sesgado. Dice el periodista que ha generado malestar entre algunos padres de alumnos “que consideran que excede al debate para dirigir la opinión de los jóvenes en un solo sentido”.

Bueno, es noticia que un ejercicio de un instituto de Castellón genere malestar entre algunos padres de alumnos. Con algo hay que rellenar.

Pero es que el ejercicio, y esto es parte de la noticia, se hizo en clase de religión.

A mí no me llama la atención que hablen de toros en clase de religión. Lo que me deja perplejo es que “algunos padres de alumnos” se sientan molestos porque algo dirige la opinión de los jóvenes en un solo sentido… siendo padres que matricularon a sus hijos ¡en la asignatura de religión!

Una sombra chiquitita

1 01UTC diciembre 01UTC 2016

En una clase magistral, Israel Sandoval, después de decirte durante media hora ejercicios estupendos para aprender a hablar con la guitarra, y después de explicarte cómo debes hacerlos durante el estudio (eso sí, nunca durante las actuaciones), tiene unas palabras para que no te estreses con tanto cerebro de por medio:

[…] cuando estás tocando creo que hay que confiar en el caos. Es imposible controlar todo. La música es una sombra chiquitita de lo que la vida es, ¿no? No puedes controlar todo. […] [Tienes que] pensar: “Va a estar bien”.

Amén. “Va a estar bien”, amigos.

Y más adelante suelta otra, sobre… la respiración cuando tocas la guitarra:

Si estoy pensando en eso [circunstancias de alrededor, fallos, incomodidades] me afecta negativamente a lo que toco. Pero si pienso: “Voy a respirar”, ya está, voy a estar pensando solo en respirar. Y dejar que… Es como si tocara otro, deja que toque otro. Eres tú, pero es una parte que tú no controlas, es la parte que se ha pasado la vida escuchando lo que tú estudias en tu casa.

Y habla de otra cosa capital: eso de sorprenderse a uno mismo, tan difícil (yo de hecho ni me lo planteo).

A veces, [hay que] pasar un rato intentando tocar cualquier cosa al azar. […] A veces me atrevo cuando estoy tocando en directo… Quiero tocar cosas que no sé tocar. No solo quiero tocar lo que sé tocar; si solo toco lo que sé tocar, me aburro de mí mismo.

La música es una sombra chiquitita de lo que es la vida; no puedes controlar todo. Deja que toque otro. Quiero tocar lo que no sé tocar.

Dicho así parece todo pedantería barata, pero oyendo decirlo a un tipo sincero y normal, cambia completamente. Tiene todo el sentido del mundo. Da gusto oír hablar a la gente cuando hay verdad. Al final, se reduce todo a eso.