Solventando el desconcertante problema del clic izquierdo en Flash bajo Ubuntu 10.04

Introducción.

Este desconcertante problema me empezó a suceder desde que actualicé mis equipos a la versión 9.10 de GNU/Linux Ubuntu, debido a este bug las aplicaciones desarrolladas en Flash perciben correctamente los eventos del ratón con la excepción del clic izquierdo, haciendo imposible en la mayoría de los casos utilizar la aplicación.  Esto se puede apreciar muy bien en sitios como YouTube donde no es posible presionar el botón de Play para iniciar la reproducción del video.

Una “solución” parcial.

Hasta hace poco la única solución que le había encontrado a este problema tan molesto era el hacer un clic derecho sobre el botón o área que deseaba activar y con el menú contextual desplegado hacer un clic izquierdo sobre el mismo lugar.  Con esto y por alguna extraña razón Flash recibe exitosamente el evento del ratón.  Esta aproximación funciona bien pero después del tercer uso se hace terriblemente dispendiosa.

El problema.

Todo parece indicar que el problema surge debido a cambios importantes en el GDK (GIMP Drawing Kit) de la librería de gráficos GTK (The Gimp ToolKit) sobre la cual se ha desarrollado GNOME.  Con esta actualización, probablemente desde la versión 2.18, se ha implementado algo llamado client-side windows que hace que las ventanas GDK se comporten diferente en contravía de lo que se conocía anteriormente.  En ese órden de ideas, el plugin de Flash debería ser actualizado según los nuevos supuestos para permitirle funcionar con estas versiones nuevas de GTK.

El motivo del problema resultó ser el mismo que hace unos meses encontré utilizando Eclipse.

Las posibles soluciones.

Según el registro del bug 410407 en el LaunchPad de Ubuntu, existen tres posibles soluciones al problema, que no eliminan las causas por si mismos pero que las solventan y permiten utilizar normalmente las aplicaciones basadas en Flash.

  1. Deshabilitar Compiz.
  2. Remover los plugins instalados de Flash (como flashplugin-nonfree y flashplugin-installer)  e instalar los provistos directamente por Adobe.
  3. Manipular la variable GDK_NATIVE_WINDOWS para forzar a GDK crear ventanas X11.

En mi opinión, la solución mas práctica es la número 3.  Ya que con esta solución no se pierden los efectos del Compiz ni es necesario descargar e instalar nuevos paquetes.

Implementación de la solución #3.

Desde una terminal (shell) o la ventana de ejecución de programas (ALT+F2) invoque la siguiente instrucción (sin el símbolo $ por supuesto).

$ gksudo gedit /usr/lib/nspluginwrapper/i386/linux/npviewer

Agregue la siguiente línea justo antes de la última, es decir, está nueva línea deberá convertirse en la antepenúltima línea del script.

export GDK_NATIVE_WINDOWS=1

El contenido resultante de este archivo en mi máquina especificamente es el siguiente.

#!/bin/sh
TARGET_OS=linux
TARGET_ARCH=i386
export GDK_NATIVE_WINDOWS=1
. /usr/lib/nspluginwrapper/noarch/npviewer

Reinicie el equipo o al menos su entorno grafico para tener en cuenta este nuevo valor de configuración del GDK.

Enlaces.

haXe – el lenguaje multiplataforma

Introducción.

haXe (se pronuncia hex), es otra de los muchos lenguajes de programación que andan por ahí en Internet, opensource y listos para que uno los aprenda, se sorprenda y aproveche según sus características.

La finalidad de este lenguaje es la de ser multiplataforma, es decir, puede generar código para las plataformas de JavaScript, Flash, PHP, NekoVM y C++.  Según los desarrolladores del lenguaje, el lenguaje le evita al desarrollador tener que aprender los intríngulis a cada una de las plataformas mediante la unificación de estas a través del lenguaje unificado, que incluye una librería estándar para todas las plataformas y una serie de librerías para acceder al API de cada una de las plataformas objetivo.

Instalación.

Linux Ubuntu 8.10.

$ sudo apt-get install haxe

Linux OpenSuse 11.1.

$ wget http://haxe.org/file/hxinst-linux.tgz

$ tar zxvf hxinst-linux.tgz

$ ./hxinst-linux

Demostración – Hola Mundo.

$ vi HelloWorld.hx

class HelloWorld
{
public static function main()
{
trace(“Hello World!”);
}
}

Compilación con Flash como objetivo.

$ haxe -swf VersionFlash.swf -main HelloWorld

screenshotflashVer mas información.

Compilación con JavaScript como objetivo.

$ haxe -js HelloWorld.js -main HelloWorld

screenshotjavascriptVer mas información.

Compilación con PHP como objetivo.

$ haxe -php HelloWorldPHP/ -main HelloWorld

screenshotphpVer mas información.

Compilación con Neko como objetivo.

$ haxe -neko HelloWorld.n -main HelloWorld

$ neko HelloWorld.n

screenshotneko

Ver mas información.

También es posible convertir los bytecodes de Neko a código binari o dependiente de la máquina con las siguiente instrucción.

$ nekotools boot HelloWorld.n

$ ./HelloWorld

Compilando el HelloWorld bajo OpenSuse 11.1 encontré un problema con la librería libgc.  Cuando intentaba generar la versión para Neko, obtenía siempre el siguiente mensaje.

nekoc: error while loading shared libraries: libgc.so.1: cannot open shared object file: No such file or directory
Error : Neko compilation failure

Este problema se solucionó instalando el paquete gc de la siguiente manera.

$ sudo zypper install gc

Enlaces.

Problemas con el Flash Uploader de WordPress

Desde hace unos días para acá dejo de funcionar el Flash Uploader de mis sitios con WordPress que me permitía subir archivos de manera mas comoda.  Indagando un poco descubrí que el problema no se origina en mi WordPress sino que por el contrario, se origina en la última versión de Adobe Flash (10) la cual probablemente actualicé hace poco.

Para solucionar el problema existen dos caminos: regresar (downgrade) a la versión 9.x del plugin o esperar a que se libere WordPress 2.7 el cual supuestamente soluciona el problema.  Versiones posteriores no utilizarán Flash para el uploader.

Por mi parte elegí la primera opción ya que soy bastante impaciente y no me gusta esperar.  Para esto desinstalé la versión 10 que tenía e instalé la 9r151 que descargué de este sitio.

Para mas información acerca de problemas con el Flash Uploader recomiendo este post del foro de WordPress que parece un tratado de patología al respecto: Image/Media Uploader problems?.

Enlaces:

Problemas entre capas y objetos Flash en HTML

Tenía que publicar en uno de los portales un bloque con un logo hecho en Flash. La puesta fue muy fácil, el problema apareció cuando los menúes desplegables empezaron a aparecer por debajo del objeto Flash.

Hice pruebas envolviendo el object en un div y modificando el z-index, pero nadita.

Los objetos Flash traen ahora una propiedad que se llama wmode a la cual si se le asigna el valor de transparent no solo hace el fondo del SWF transparente sino que hace que el objeto respete el índice de profundidad.

Hay que poner el valor sugerido como parámetro del object y dentro de la etiqueta embed para que funcione en los dos navegadores.

Ejemplo:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="185"
height="205">
<param name="wmode" value="transparent">
<param name="movie" value="banner_iso9001_ntcgp1000.swf">
<param name="quality" value="high">
<embed src="banner_iso9001_ntcgp1000.swf" quality="high"wmode="transparent"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash"
width="185"
height="205"></embed>
</object>