Redimensionar iFrame en IE y Firefox con Javascript

Ha sido especialmente tedioso conseguir que para un iframe, se me redimensionara la altura dependiendo del contenido que se cargara dentro de éste. Firefox lo realizaba a la perfección, pero no así Internet Explorer. Tomando un par de referencias me he construido la solución que quiero compartir.

En el archivo que declara el iframe:

javascript

  1. <script language="javascript">
  2. function grand(h)
  3. {
  4.   iframe=document.getElementById("mi_iframe")
  5.   iframe.height=h;
  6. }
  7. function reSize(h)
  8. {  
  9.     try
  10.   {
  11.     var oBody   =   mi_iframe.document.body;
  12.     var oFrame  =   document.all("mi_iframe");
  13.        
  14.         oFrame.style.height = oBody.scrollHeight + (oBody.offsetHeight - oBody.clientHeight);
  15.         oFrame.style.width = oBody.scrollWidth + (oBody.offsetWidth - oBody.clientWidth);
  16.     }
  17.     catch(e) //An error is raised if the IFrame domain != its container's domain
  18.     {
  19.      window.status =    'Error: ' + e.number + '; ' + e.description;
  20.     }
  21. }
  22. </script>

En el mismo fichero, declaramos el iframe y colocamos esto en el body para IE:

  1. <body onLoad="reSize(0)"><iframe id="mi_iframe" src="iframe.php" width="100%" frameborder="0" height="100%"></iframe></body>

En el contenido del iframe (iframe.php en el ejemplo):

javascript

  1. <script language="javascript">
  2.      function redimensiona()
  3.      {
  4.       var navegador = navigator.appName
  5.       if (navegador == "Microsoft Internet Explorer")
  6.       {
  7.         top.reSize(0);
  8.       }
  9.       else
  10.       {
  11.         principal=document.getElementById("div_principal");
  12.         top.grand(principal.scrollHeight+40);
  13.       }      
  14.      }
  15. </script>

El código HTML del contenido de este iframe sería algo así como:

  1. <html><body onLoad="redimensiona()"><table id="div_principal"><tr><td>Incluir contenido de la pagina</td></tr></table></body></html>

Referencias:

A 2 personas les gusta esta entrada

Enigma – Principles of lust

Siguiendo con el meme que proponía CrowDat en este post, hago referencia aquí a uno de los temas que más me marcaron en mi adolescencia, en este caso me alejo de mi vertiente metalera y escojo el tema Principles of Lust de Enigma (grande Michael Cretu).

Y como me recuerda CrowDat, un buen meme que se precie tiene que ser pasado, así que me gustaría que Piponazo recogiera el testigo.

Sé el primero en valorar positivamente

Enlazar MySQL Query Browser en Ubuntu con Lampp (Xampp para Linux)

Para los que usamos Lampp y reconocemos como un fastidio usar PHPMyAdmin, existe una solución para que cada vez que se arranca Lampp, se inicie también un socket al demonio de mysql que permita la ejecución de MySQL Query Browser.

Para crear el socket sería necesario hacer esto cada vez que se quiere iniciar Lampp:

$ sudo mkdir /var/run/mysqld
$ cd /var/run/mysqld
$ sudo ln -s /opt/lampp/var/mysql/mysql.sock mysqld.sock

Podemos automatizar este proceso de forma que sólo sería necesario realizarlo una sola vez. Abrimos el archivo /opt/lampp/lampp como root, buscamos el case startmysql y añadimos las tres líneas anteriores al último else, tal y como sigue a continuación:

«startmysql»)
if testrun /opt/lampp/var/mysql/`/bin/hostname`.pid mysqld
then
$de && echo «XAMPP: XAMPP-MySQL laeuft bereits.»
$de || echo «XAMPP: XAMPP-MySQL is already running.»
else
if testport 3306
then
$de && echo «XAMPP: Ein anderer MySQL daemon laeuft bereits.»
$de || echo «XAMPP: Another MySQL daemon is already running.»
else
/opt/lampp/bin/mysql.server start > /dev/null &
$de && echo «XAMPP: Starte MySQL…»
$de || echo «XAMPP: Starting MySQL…»
sudo mkdir /var/run/mysqld
cd /var/run/mysqld
sudo ln -s /opt/lampp/var/mysql/mysql.sock mysqld.sock
fi
fi

Fuente: Ubuntu Forums

Sé el primero en valorar positivamente

Why motivation doesn’t really matter

Muy adecuado para mi momento actual. De obligada lectura.

¿Alguna vez habéis querido hacer algo, pero simplemente no estabais suficientemente motivados para hacerlo? Este es siempre mi primer motivo para no pasar a la acción, y estoy seguro de que probablemente también será el vuestro. Si no estáis motivados, simplemente no tenéis la energía o el impulso para hacer lo que tenéis que hacer, ¿verdad? Bastante simple.

Pero aquí hay tres de los mayores problemas que surgen por pretender estar altamente motivados todo el tiempo:

  1. Quizá no te importa realmente lo que estás haciendo. Quizá no importa en realidad y te estás forzando a hacer algo que no quieres hacer. En este caso, tu falta de motivación es tu subconsciente que te dice “esto no es importante” o “esto no se alinea con mis valores.”
  2. La energía llega en oleadas. Y del mismo modo que cada ola tiene su cresta, también tiene una depresión. A veces tu nivel de motivación será como un tsunami arrollador. En otras ocasiones, será un flujo estable. Son ritmos naturales y seguir estos ritmos es importante, porque si no lo haces, te quemarás.
  3. A veces no te animarás antes de pasar a la acción, pero te sentirás bien después de haberlo hecho. Pongamos por ejemplo hacer ejercicio. Mucha gente teme o aborrece hacer el esfuerzo de sudar la camiseta. No están motivados a priori, al menos no lo suficiente para romper la resistencia mental ante el trabajo. Pero se sienten sensacionales cuando han terminado el ejercicio. Por lo tanto, a veces no puedes confiar en tener una alta motivación a priori, a veces hay que confiar en que la motivación llegará después.

¿Quiere esto decir que la motivación no es importante? No, sigue siendo importante y juega su papel. Pero demasiado a menudo resulta fácil caer en la trampa de pensar que hay que estar totalmente entusiasmados por algo antes de hacerlo. No vas a tener siempre un entusiasmo total. Y está bien. Es lo que se llama seguir tu ritmo natural.

El motivo por el cual empecé a considerar este modo diferente de abordar mis objetivos fue porque las soluciones típicas de motivación no funcionaban para mí. A veces funcionaban y otras no. A veces visualizar el éxito era muy motivante y otras simplemente fracasaba tontamente. Sólo cuando me permití dejarme ir, el éxito me llegó de forma más fácil. Lo admito, esto puede parecer difícil al principio, pero es cuestión de confianza. Tienes que confiar en tu auténtico ser para decirte cuando es hora de pasar a la acción y cuando lo es para sólo estar.

Aquí tenemos algunos ejemplos para practicar este modo no-competitivo de manifestar tus deseos:

  1. Practica escuchar tu intuición. Muchos de nosotros tendemos a cuestionar la validez de nuestra intuición. Favorecemos nuestra mente racional y su método de explicación seguro y lógico. Nuestra mente intuitiva, sin embargo es igual de válida. Tal como dijo Einstein una vez “La mente intuitiva es un don sagrado y la mente racional es un sirviente fiel. Hemos creado una sociedad que honra al sirviente y ha olvidado el don.” Aprende a honrar tu don intuitivo practicando el hacerte preguntas y escuchando la respuesta que te das sin intentar deducir la respuesta lógicamente.
  2. Tómate el tiempo de preguntarte qué quieres realmente. A menudo queremos adherirnos a la consecución de nuestros objetivos y olvidamos escuchar lo que realmente queremos. En lugar de crear objetivos como medio de satisfacer nuestros deseos, nos convertimos en esclavos de ellos. Siempre que sientas que tu objetivo te está frenando, pregúntate “¿Qué quiero en realidad?” y escucha en silencio la respuesta que recibes.
  3. Acepta que no estarás siempre locamente motivado. Si esperas a estar increíblemente motivado para pasar a la acción estás poniendo mucha presión en ti mismo. Es mejor aligerar la presión permitiéndote estar medianamente interesado o incluso en un estado de temor. Al permitirte estar en este estado haces que sea más fácil moverte y continuar porque ya no te estás resistiendo. Cuando te resistes al estado en que estás, lo perpetúas.
  4. Conéctate a tu flujo. Todos tenemos momentos en que somos más creativos o tenemos más energía, y todos tenemos momentos en que nos apetece descansar o recargar. Para algunos de nosotros, esos recesos y flujos pueden darse en ciertos momentos del día, para otros se darán de forma totalmente aleatoria. La clave está en poner atención y explotar esos flujos de energía. Cuando pasas a la acción volcándote totalmente estás lleno de energía y al permitirte relajarte cuando estás en un estado de calma, te respetas y te honras a ti mismo. Cumplirás más cosas siguiendo tus ritmos naturales que tratando de forzarte a ti mismo.

Hay un momento para ser productivo y hay un momento para descansar. Del mismo modo que en la naturaleza hay un momento para la actividad y la vida nueva en primavera, y hay un momento para descansar y retraerse al interior en invierno. Igual que la naturaleza sabe que su crecimiento perpetuo es insostenible, nosotros tenemos que darnos cuenta de que esperar ser productivos todo el tiempo nos puede llevar a quemarnos o a ser menos productivos.

Puede que sea hora de que empecemos a escuchar nuestros cuerpos. Pienso que cuanto más seguimos el modo de actuar de la naturaleza, más inteligentemente vivimos.

Fuente: Yoriento

Sé el primero en valorar positivamente

Serializer / Parser de ficheros XMI en Java con Netbeans

Ante las preguntas de ana y GG en este post, me he decidido a liberar el código de un proyecto que estaba desarrollando y que desafortunadamente, por falta de tiempo, he tenido que cancelar.

Se trata de un generador y parser de ficheros XMI, uno de los tantos estándares de XML, concretando, una especificación para el intercambio de diagramas que fue escrita para proveer una manera de compartir modelos UML entre diferentes herramientas de modelado.

La forma tanto de utilizar el serializer (escritura en fichero XMI) como la de utilizar el parser es muy sencilla y parecida. Por ejemplo, para el serializer basta con:

  1. KXmlSerializer serializer = new KXmlSerializer();
  2. serializer.startTag(null, "packagedElement");
  3. serializer.attribute(NAMESPACE_XMI, "xmi:id", pClassID);
  4. serializer.attribute(null, "name", pClassName);
  5. serializer.attribute(null, "visibility", "public");
  6. serializer.attribute(null, "isAbstract", "true");
  7. serializer.endTag(null, "packagedElement");

Lo que da lugar a un XMI del tipo:

  1. <packagedElement xmi:type="uml:Class" name="Jam" xmi:id="BOUML_0x1f883_4" visibility="public" isAbstract="true">

Espero que le sirva a alguien el código desarrollado. Podéis descargarlo de aquí.

Sé el primero en valorar positivamente

Crea tu propio libro y ponlo a la venta con Bubok

Tener un hijo, plantar un árbol y escribir un libro. Las tres cosas que se supone debemos completar antes de diñarla. El mecanismo de la primera no necesita mucha explicación. Para la segunda bastan unas pocas semillas y eso que, lejos de las pantallas, se le sigue llamando «el campo». Y para la tercera, lejos de editoriales planetarias y anagramas con el símbolo del euro, resulta que hace ya un año que existe Bubok. Una especie de Lulu a la española. Pues vaya, que después de un año me entere de proyectos como este, como lector (al menos) empedernido que me considero…

Os dejo con la descripción bastante exacta que hacen del servicio en IncubaWeb.

Bubok es un servicio web a través del cual puedes preparar y publicar tus libros para su difusión en formato impreso o PDF. Pero no solo eso.

En realidad es toda una plataforma de venta de libros online pues una vez te registras en la página (genial el sistema, muy impactante) dispones de tu dirección personal del tipo tunombre.bubok.com en la que ofrecer tu perfil de escritor y acceso a la tienda segura donde adquirir los libros en formato físico o en descarga de PDF. Si quieres ver un ejemplo, tienes la página de Alberto Vázquez-Figueroa, que dicho sea de paso es una obligación visitar y poder descargar material de este gran autor de forma gratuita.

La tienda virtual es también digna de mención, pues no solo es sencillísima de usar sino que su aspecto y velocidad es impresionante, y además incluso puedes personalizar tu copia del libro impreso. La verdad es que el funcionamiento de todo Bubok es impresionante, merece la pena solo visitar sus secciones, la visita virtual, incluso la ayuda online es una gozada.

En cuanto al modelo de negocio, Bubok no te cobra nada por el alojamiento de tu espacio, ni siquiera por la elaboración de tus libros, solo gana cuando tu ganas, en una relación de 80% del precio de la venta para ti y el 20% para Bubok, y no es mal intercambio por disponer de una plataforma de esta calidad.

Más información aquí y aquí.

A 1 persona le gusta esta entrada

Instalar Ubuntu 8.10 Intrepid en HP 2133 Mini-Note mediante USB

hp2133

La verdad que no ha sido un camino de rosas instalar Ubuntu 8.10 Intrepid Ibex en mi nuevo y flamante HP 2133 (gracias Morty!).

Al final lo conseguí instalar en una ocasión con un CD Ubuntu 8.10 versión alternate y en otra ocasión con la versión Desktop.

Vamos a ver la instalación con la versión Alternate y seguidamente comentaré más o menos los cambios para instalar la Desktop.

Requisitos para este tutorial:

  • Un mini Notebook HP 2133, por supuesto.
  • ISO de Ubuntu 8.10 alternate.
  • Conexión por cable Ethernet disponible.
  • Un pc de escritorio con Ubuntu o Windows XP instalado.
  • Un pendrive USB. Como nota importante, reseño que utilizando un MP4 de Saytes todo eran problemas y que, sin embargo, utilizando un pendrive de 8gb de la marca Kingston la velocidad de lectura / escritura aumenta y el proceso transcurre sin errores.

Pasos para la instalación:

  • Formatear el pendrive. Desmontarlo y desde una terminal escribir:
    sudo mkfs.vfat /dev/sdX1

    donde X es la letra de la unidad USB, en mi caso es sdb1.

  • Para hacer el pendrive bootable, vamos a Ubuntu en nuestro PC de escritorio, y buscamos en el menú Sistema => Administración la opción Create a USB Startup Disk.
  • Una vez finalizado el proceso, debemos eliminar las referencias al CD-ROM en los ficheros que ha grabado la utilidad de autoarranque del pendrive. Esto evita que te pida montar el CD en uno de los pasos. En una de las carpetas hay una serie de archivos con extensión cfg que habrá que modificar de la siguiente forma:
    • En text.cfg, modificar la linea 5:
      append  noprompt cdrom-detect/try-usb=true persistent file=/cdrom/preseed/ubuntu.seed initrd=/install/initrd.gz quiet --

      por esta

      append  noprompt cdrom-detect/try-usb=true persistent file=/preseed/ubuntu.seed initrd=/install/initrd.gz quiet --
    • En adtext.cfg, modificar la linea 4:
      append  file=/cdrom/preseed/ubuntu.seed priority=low initrd=/install/initrd.gz --

      por esta

      append  file=/preseed/ubuntu.seed priority=low initrd=/install/initrd.gz --
    • En gfxboot.cfg, modificar la linea 8:
      replace cli=file=/cdrom/preseed/cli.seed

      por esta

      replace cli=file=/preseed/cli.seed

      y la linea 11:

      replace ltsp=file=/cdrom/preseed/ltsp.seed

      por esta

      replace ltsp=file=/preseed/ltsp.seed
  • Desmontar el pendrive del equipo de escritorio e insertarlo en el HP 2133. Arrancar el equipo y pulsar F9 para escoger el dispositivo USB como el que arrancará primero.
  • Seguir los pasos de la instalación de forma normal teniendo en cuenta que, al menos en mi caso, en el paso Seleccionar e instalar programas no puedes elegir nada, porque si lo haces, el sistema te dice que no se puede descargar (a pesar de estar conectado vía cable). Al no elegir nada se instala el sistema base.
  • Cuando termina la instalación te suelta en un terminal. Inicias sesión e instalas gdm:
    sudo apt-get install gdm
  • ANTES DE REINICIAR vamos a hacer uso de los pasos que nos ofrece Daniel Alberto Rodríguez Méndez, para dejar la tarjeta gráfica instalada y que al reiniciar podamos ver el entorno gráfico.

    Lo que yo he hecho, guiándome por esta referencia, ha sido lo siguiente:

    • Bajarme el driver correspondiente a nuestra tarjeta gráfica de este enlace.
    • Descomprimir el fichero descargado con el siguiente comando:
      tar xvzf 85a-43862-u810-2d-bin.tar.gz
    • Nos colamos en el directorio que se ha extraído del archivo:
      cd 85a-43862-u810-2d-bin/

    • Copiamos el driver al directorio que nos comentan en el Readme:
      cp via_drv.so /usr/lib/xorg/modules/drivers/
    • Nos descargamos el magnífico xorg.conf.chi ya preparado en el sitio de dabeto en este enlace.
    • Lo renombramos a xorg.conf:
      mv xorg.conf.chi xorg.conf
    • Y lo copiamos, sobrescribiendo el xorg.conf original:
      mv xorg.conf /etc/X11/
    • Listo el tema gráfico. Ahora ya podemos reiniciar y, al volver a Ubuntu, deberíamos ver la pantalla de bienvenida. Pero podemos observar que no tenemos WiFi. Para cargar el driver, he encontrado tres formas válidas. La primera, sirve para todos los kernels y no la he encontrado en ninguna referencia. Simplemente observando los errores que me "chillaba" Ubuntu, me di cuenta de que se "casi" se reconocían los drivers del chipset WiFi, pero se informaba que había que bajarse e instalar la última versión. Las otras dos formaron parte de instalaciones anteriores y, o bien no funcionaban en el kernel 2.6.27-11-generic, o bien la WiFi se iba y volvía de vez en cuando.
      • Se trata de seguir los pasos indicados en este enlace, que son los siguientes:
      • wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
        tar xjf b43-fwcutter-011.tar.bz2
        cd b43-fwcutter-011
        make
        cd ..
        export FIRMWARE_INSTALL_DIR="/lib/firmware"
        wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
        tar xjf broadcom-wl-4.80.53.0.tar.bz2
        cd broadcom-wl-4.80.53.0/kmod
        sudo ../../b43-fwcutter-011/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

        Esta solución, al ser los drivers oficiales, funciona hasta en el kernel 2.6.27-11, al contrario que las dos soluciones que vienen a continuación.

      • La segunda solución, que no funciona en el kernel 2.6.27-11, trata de seguir los pasos de este enlace. Básicamente se traduce en ejecutar los siguientes comandos:
        sudo su
        wget docnielsen.dk/linux/hp2133-wlan-`uname -r`-wl.ko.gz
        mv hp2133-wlan-`uname -r`-wl.ko.gz wl.ko.gz
        gzip -d wl.ko.gz
        mv wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/
        depmod -a
        rmmod ndiswrapper
        rmmod wl
        insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/wl.ko
        reboot
      • Otra solución es seguir los pasos de este otro enlace, que dan en la sección "To install wireless". Esta solución trata de usar ndiswrapper, para instalar los drivers disponibles para Windows. Básicamente, se traduce en:
        • Ir a este enlace.
        • Seguir el Paso 1: All BCM43XX - Install NDISWrapper and Blacklist Native Driver.
        • Seguir el Paso 2a: SP34152 Driver Download / Extraction
        • Seguir el Paso 3: All BCM43xx - Configure NDISWrapper (and WPA Supplicant).
        • Una vez finalizados los pasos anteriores, seguir el paso HARDY BUG FIX.
        • Reiniciar Ubuntu.

Con esto, ya tenemos las dos cosas más importantes configuradas, que son la tarjeta gráfica y el chip WiFi. Es bueno seguir los consejos de una de las páginas que he dado para ajustar configuraciones como habilitar el escalado de la CPU o deshabilitar los altavoces externos cuando se enchufan unos auriculares.

Todo esto ha sido probado, como ya se ha dicho, con el CD de instalación Alternate. Recientemente he conseguido instalar de nuevo Ubuntu pero con el CD de instalación en su versión Desktop y realizando la instalación desde un lector de DVD externo conectado al puerto USB. Como contrapartida a lo que se puede leer en el 90% de los foros, a mi no me ha funcionado con el CD de instalación Desktop el incluir la opcion xforcevesa en los parámetros del kernel, ni tampoco arrancando directamente el CD con la orden live xforcevesa.

Lo que a mi me funcionó fue pulsar F4 y escoger la opción "Modo gráfico seguro" para la instalación. El único inconveniente es que no se veían los botones de aceptar y cancelar y tuve que ir jugando con la tecla Tab.

A 1 persona le gusta esta entrada