Flash
2 de February, 2010. Escrito por [Q]boss.
A raíz de este post que el Sr. Sotoca me hizo llegar, había escrito una mega-entrada para el blog tratando de puntualizar y corregir la multitud de incorrecciones o verdades a medias que se pueden leer en la entrada publicada por Enrique Dans en su blog. Pero luego lo he pensado mejor, y la verdad es que no merece ni la pena explicar algo que es tan evidente, así que lo he borrado y me quedo con una pequeña reflexión.
Todas las tecnologías y plataformas tienen fallos y puntos débiles (flash no está exenta, pero tampoco lo que se supone que son sus alternativas), pero si la web ha evolucionado como lo ha hecho y está en el punto en el que está, es entre otras cosas gracias a las capacidades de flash. Desde el punto de vista de una empresa desarrolladora de contenidos que no esté cegada en una tecnología, el hecho de que no existiera la posibilidad que aporta flash, sería un problema importante a la hora de afrontar según qué tipo de proyecto.
Y finalmente, es totalmente deshonesto hablar de flash en la web solamente como video, ni que fuera un simple player… quien vea así la plataforma está claro que ya está equivocado antes de comenzar.
Que un dispositivo que quiera venderse como una experiencia web completa similar a la del escritorio, no soporte esta tecnología, para mi es suficiente problema para no convencerme, porque existen muchísimos contenidos de mi interés que quedarán fuera de mi alcance. Así que quien no quiera flash en sus dispositivos, que no trate de engañar a la gente, y a todos aquellos que están aun escocidos de ver flash con tan buena salud, mala suerte, pero es muy triste emplear iPhone e iPad para sacar un debate que desde el inicio está muerto.
Linkitos interesantes:
- Enrique Duvós
- Richard Leggett (sobre HTML5)
- Recopilatorio Joan Garnet
- Why Flash Isn’t going anywhere
- Sobre flash, html 5, rendimiento y video
HitTest de un MovieClip en un contenedor escalado
23 de January, 2010. Escrito por Berto[Q].
A raíz de un proyecto que estoy desarrollando en [Q] me he encontrado con un problema que a priori puede parecer común pero que por lo menos a mi me ha traído por la calle de la amargura la tarde y parte de la noche de este sábado.
El caso es que al reescalar unos MovieClips en los que en la programación un hitTest hacía referencia a ellos, se volvía loco no detectando bien el choque. Pues bien, después de muchas peleas encontré la solución que era tan sencilla como utilizar localToGlobal
-
posx = (clip._x + clip.sensible_mc._x);
-
posy = (clip._y + clip.sensible_mc._y);
-
-
var point:Object = {x:posx, y:posy};
-
_referencia.localToGlobal(point);
-
-
if(sensible_mc.hitTest(point.x,point.y,true))
-
{
-
trace("Choque");
-
}
-
else
-
{
-
trace("No Choque");
-
}
Trabajar con más de una base de datos
20 de January, 2010. Escrito por elOtro[Q].
Nosotros generalmente usamos una clase propia encargada de gestionar las operaciones con la base de datos (conexión, ejecutar consultas, desconexion...).
Instanciamos el objeto para la gestión de la base de datos al principio de las páginas que necesitan conexión con la misma (es decir realizamos la conexión con la bbdd), y al final de la página cerramos la conexión de la misma.
Hay en ocasiones que un proyecto trabaja con más de una base de datos, por lo que será necesario hacer conexiones a esas bases de datos para la manipulación de la información. Pues bien, en las páginas que se necesite manipular información de las distintas bases de datos, instanciamos tantos objetos como base de datos se necesiten, y al final de la página cerramos todas las conexiones.
Yo pensaba que al tener objetos distintos para cada conexón sólo tenía que usar el objeto correspondiente para hacer las peticiones.
Pero no, es necesario que cada vez que se vaya a usar una base de datos distinta a la que estabas manipulando deberás actualizar la base de datos (@mysql_select_db). Yo lo hago mediante un método de la clase.
Un ejemplo
require("my_class.php");
/* En esta clase está el método refrescarTabla() que hace lo siguiente:
$this->selec_bbdd = @mysql_select_db( $this->bbdd , $this->conexion ) or $this->err();
*//* Inicio la conexion con la BBDD con la base de datos 1*/
$conexion_1 = new ConsultaMySql();
$conexion_1->conectar();
$conexion_1->actualizarDatos(IPSERVER_1,USERBBDD_1,
PASSBBDD_1,NAMEBBDD_1);/* Inicio la conexion con la base de datos 2*/
$conexion_2 = new ConsultaMySql();
$conexion_2->actualizarDatos(IPSERVER_2,USERBBDD_2,
PASSBBDD_2,NAMEBBDD_2);
$conexion_2->conectar();
/* **********************************//* Una operacion con bbdd 1*/
$conexion_1->refrescarTabla();
$conexion_1->consulta = "SELECT * FROM tabla";
$conexion_1->ejecutar_consulta();
$resultado_1_bbdd1 = $conexion_1->result_array_asoc();/* Una operacion con bbdd 2*/
$conexion_2->refrescarTabla();
$conexion_2->consulta = "SELECT * FROM tabla";
$conexion_2->ejecutar_consulta();
$resultado_1_bbdd2 = $conexion_2->result_array_asoc();/* Otra operacion con bbdd 1*/
$conexion_1->refrescarTabla();
$conexion_1->consulta = "SELECT * FROM tabla";
$conexion_1->ejecutar_consulta();
$resultado_2_bbdd1 = $conexion_1->result_array_asoc();/* Codigo para visualizar los resultados*/
/* Fin codigo*/
/* Cierro las conexiones*/
$conexion_1->cerrar_conexion();
$conexion_2->cerrar_conexion();
Pues nada más, espero que os sirva.
Escrito en PHP + MySQL | Deja un comentarioBUG en MySQL
15 de January, 2010. Escrito por elOtro[Q].
Muy buenas a todos,
estando desarrollando un proyecto necesitaba insertar un registro en la base de datos, o en caso de que ya existiera, actualizar un campo de dicho registro.
Pues bien, a partir de la versión 4.1 se puede hacer en MySQL todo esto en una sóla sentencia:
INSERT ... ON DUPLICATE KEY UPDATE.
La verdad que no era la primera vez que utilizaba esta sentencia, es mucho más cómodo que hacer primero una consulta a la base de datos para comprobar de la existencia del registro, para que en caso de existir actualizarlo o en caso contrario realizar una inserción.
Pues bien, en este proyecto no me funcionaba.
Tras verificar que todo estaba bien implementado y seguía sin funcionar, opté por hacer el ejemplo más simple para ver si me funcionaba esta sentencia o no. Y no me funcionó. Entonces me preguntaba: ¿Qué diferencia puede haber con proyectos anteriores para que en éste no me funcionara?.
pues estaba en el tipo de tabla en la base de datos que estaba usando. En este caso tenía una tabla del tipo InnoDB y en los anteriores MyISAM.
Tras indagar obtuve la respuesta a mi problema:
"A partir de la versión 5.0.36 de MySQL INSERT ... ON DUPLICATE KEY UPDATE no funciona en tablas InnoDB (no da ningún error pero no hace el UPDATE, sólo el INSERT). Es un bug que tiene MySQL!!."
Os pongo el link por si quereis echarle un vistazo.
BUG INSERT ... ON DUPLICATE KEY UPDATE
Espero que a alguien le sirva!!!
Escrito en PHP + MySQL, [Q] interactiva | Deja un comentarioInformación servicios de SMS
15 de January, 2010. Escrito por [Q]boss.
Este post no tiene mucho que ver con la temática habitual del blog, pero llevo unos días "bastante" hasta las narices de todas estas empresas que abusan totalmente de los usuarios, y ante las cuales todo son problemas a la hora de dejar de darles un dinero que nadie les autorizó a robar, incluidas las operadoras que se lavan las manos en un negocio del que seguro sacan su tajada. Así que buscando la solución para un familiar al que literalmente le estaban friendo a SMS de 0,30€ sin impuestos, di con una página en la que se comentaba sobre un servicio interesante. Aquí lo dejo por si a alguien le sirve:
En España para darse de baja de cualquier servicio de esos que nos cobran por avisos, suscripciones o como lo quieran llamar, se puede mandar un SMS gratuito al 224650 poniendo INFO (en mayúsculas). Al enviar dicho mensaje se recibe otro también gratuito en el que se indica la lista de servicios de este tipo que está contratado con el número del SMS al cual hay que mandar un mensaje con la palabra BAJA (en algunos lados dicen que las mayúsculas son necesarias) y el telefono personal de la empresa.
Es la manera de obtener un listado completo de servicios que nos están sangrando, y poder proceder a la solicitud de baja de todos ellos... recuperar el robo... es harina de otro costal. Suerte a los "afortunados"!
Escrito en tal y como yo lo veo | 1 Comentarioemprendedor
1 de January, 2010. Escrito por [Q]boss.

Retomamos nuestros palabros, y ha querido el destino que en unos cuantos días pasados haya rondado por mi cabeza repetidas veces el tema del emprendimiento, o lo que para muchos es lo mismo de como hipotecar tu vida por un sueño personal e intransferible. Ha ayudado sin duda la conversación con Javi, que casi siempre terminamos por los mismos derroteros, y luego porque el mismo Javi me ha mandado un interesante link a un blog que merece la pena pegar un ojo.
Para comenzar, nada mejor que tirar de nuestro análisis sistemático de palabros, recurrir a la RAE, y ver qué significa esto de ser "emprendedor".
emprendedor, ra.
1. (adj.) Que emprende con resolución acciones dificultosas o azarosas.
Bueno parece que si nos sentimos engañados, es por falta de cultura general, porque la definición está clara, a menos que seamos algo como lo que ya analizamos una vez en este rinconcito. Y si nos vamos a la acción misma, todavía nos lo pone más clarinete:
emprender.
(Del lat. in, en, y prendĕre, coger).
1. tr. Acometer y comenzar una obra, un negocio, un empeño, especialmente si encierran dificultad o peligro.
2. tr. coloq. Acometer a alguien para importunarlo, reprenderlo, suplicarlo o reñir con él. Juan la emprendió CON Luis. El joven la emprendió A golpes.
3. tr. ant. Prender fuego. Era u. t. c. prnl.~la para un sitio.
1. loc. verb. coloq. Tomar el camino con resolución de llegar a un punto.
Probablemente en los matices de la última frase sea donde muchos emprendedores de los que habla el artículo mencionado se diluyen, se desgastan o se queman. Es vital para emprender conocer el punto al que quieres llegar, y tener la resolución y el convencimiento personal de que puedes llegar. Quizás por el camino las cosas cambien y el objetivo final evolucione, pero el inicio ha de ser firme y claro.
Un final de año, es un buen momento para parar, descansar un poco, analizar y pensar si los años que dura tu aventura la has disfrutado, y sobre todo si estás más cerca del objetivo, frente a lo que puedes estar contento, o en caso contrario buscar soluciones. Pero nunca rendirte.
¡Feliz 2010, y que los reyes os traigan muchos ánimos para la batalla!
Y como reza la cabecera del blog antes mencionado, palabras de Neruda:
"Muere lentamente quien no viaja, quien se transforma en esclavo del hábito, quien no arriesga lo cierto por lo incierto para ir detrás de un sueño."
Felices Fiestas
25 de December, 2009. Escrito por [Q]boss.
![[Q] inteteractiva te desea Feliz Navidad y Próspero Año Nuevo [Q] inteteractiva te desea Feliz Navidad y Próspero Año Nuevo](http://www.q-interactiva.com/blog/imagenes/navidad2009.jpg)
Pues no queríamos dejar pasar las fiestas sin desearos lo mejor para estos días especiales (de una manera u otra) y sobre todo para el nuevo año que tenemos ya a la vuelta de la esquina. 2009 ha sido un año complicado, y deja tras de sí muchas sensaciones de muchos tipos, pero como somos positivos, nos quedamos con un montón de proyectos que han visto la luz y sobre todo la confianza de muchas personas y empresas que nos han ayudado a seguir creciendo profesionalmente y nos ofrecen unas perspectivas muy interesantes para 2010...
Esperamos que para vosotros 2010 sea también un gran año a todos los niveles, y cuando escribamos nuevamente estas líneas cuando corresponda, podamos decir que hemos compartido parte de vuestros éxitos, inquietudes e ilusiones.
¡Felices Fiestas a todos!
Escrito en [Q] interactiva, tal y como yo lo veo | 6 ComentariosLibrería AS3 para el procesamiento de imágenes
23 de December, 2009. Escrito por [Q]boss.

Pues me animo a volver a escribir para acercaros en esta ocasión una librería en AS3 para el trabajo con imágenes, en este caso unas clases que nos permitirán trabajar con más de 50 filtros que pueden arrojar resultados tan interesantes como los que nos muestra el autor:
Para aprender a usarla nada mejor que los ficheros para descargar y la documentación bien a mano.
De todas formas una buena explicación, aunque en inglés, la encontráis en la página original donde se detalla la librería.
Escrito en AS3, Flash, Recursos | Deja un comentario#013 Flash [Q] Tips: swfobject y respeta los estándares con flash
11 de December, 2009. Escrito por [Q]boss.
Este tip es un poco doble, en realidad el objetivo principal es el de lograr crear código para un objeto flash que valide correctamente los estándares correspondientes, y de paso hablaros de un imprescindible en todos aquellos que trabajamos con flash como es swfobject.
La manera "tradicional" de generar un HTML con un flash incrustado, y que incluso es la que se mantiene en la versión CS4 de la suite de adobe es la siguiente:
-
<script language="JavaScript" type="text/javascript">
-
AC_FL_RunContent(
-
'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0',
-
'width', '300',
-
'height', '300',
-
'src', 'test',
-
'quality', 'high',
-
'pluginspage', 'http://www.adobe.com/go/getflashplayer',
-
'align', 'middle',
-
'play', 'true',
-
'loop', 'true',
-
'scale', 'showall',
-
'wmode', 'window',
-
'devicefont', 'false',
-
'id', 'test',
-
'bgcolor', '#993399',
-
'name', 'test',
-
'menu', 'true',
-
'allowFullScreen', 'false',
-
'allowScriptAccess','sameDomain',
-
'movie', 'test',
-
'salign', ''
-
); //end AC code
-
</script>
-
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="300" height="300" id="test" align="middle">
-
<param name="allowScriptAccess" value="sameDomain" />
-
<param name="allowFullScreen" value="false" />
-
<param name="movie" value="test.swf" />
-
<param name="quality" value="high" />
-
<param name="bgcolor" value="#993399" />
-
<embed src="test.swf" quality="high" bgcolor="#993399" width="300" height="300" name="test" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
-
</object>
-
</noscript>
Hemos obviado el código javascript que ha generado también en dicho HTML. Pues bien, este código que ha generado el IDE de flash NO valida los estándares web que debería (esto no es nada nuevo, de hecho la solución que vamos a comentar tiene ya sus años, pero me jugaría bastante a que muchos de los que estáis leyendo esto, no os habéis preocupado demasiado de la validación de estándares de los objetos flash), y por tanto si en nuestras webs XHTML y CSS deseamos que sea una realidad el tema de la validación, deberemos tirar de recursos más elaborados.
Leer más
#012 ActionScript [Q] Tips: precargas AS3 en Internet Explorer
5 de December, 2009. Escrito por [Q]boss.
Imagino que unos cuantos de vosotros habéis topado previamente con el bug que se da en Internet Explorer cuando hacemos una precarga empleando los eventos Event.COMPLETE y ProgressEvent.PROGRESS de AS3. El bug en cuestión aparece cuando tenemos una película cacheada y volvemos a ella, para reproducirlo solamente tenéis que cargar la película y una vez cargada, pulsar F5 en vuestro navegador IE, o Ctrl + F5. Cabe destacar que esto solo ocurre con la película principal, y no las que se cargan internamente en ella.
Veréis como la precarga se queda en pantalla por los siglos de los siglos, y es que no se disparan correctamente los eventos antes citados. La solución más simple para el problema, es controlar este hecho, y qué mejor manera que viendo antes de preparar los eventos, si resulta que ya tenemos cargada por completo la película.
Imaginemos que tenemos la siguiente estructura clásica para el preloader:
-
function cargando(ev:ProgressEvent):void
-
{
-
var porcentaje:Number = Math.floor( (ev.bytesLoaded*100)/ev.bytesTotal );
-
trace ('cargado... '+porcentaje);
-
}
-
-
function cargaCompleta(ev:Event):void
-
{
-
trace('Listo!');
-
}
-
-
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, cargando);
-
this.loaderInfo.addEventListener(Event.COMPLETE, cargaCompleta);
Muchos optan por evitar el problema haciendo un preloader convencional con un Event.ENTER_FRAME, no obstante no es necesario, y aquí os dejamos el Tip de este viernes que nos permite la limpieza y eficiencia de la aproximación por eventos en vez de un enterFrame, sin tener que asumir el malfuncionamiento en Internet Explorer 6 y 7.
Si simplemente tenemos en cuenta comprobar inicialmente si la película está cargada por completo, algo tan sencillo como esto:
-
if (this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal == 1)
-
{
-
trace('ya está cargado por completo');
-
}
Por tanto nos quedaría algo así:
-
function cargando(ev:ProgressEvent):void
-
{
-
var porcentaje:Number = Math.floor( (ev.bytesLoaded*100)/ev.bytesTotal );
-
trace ('cargado... '+porcentaje);
-
}
-
-
function cargaCompleta(ev:Event):void
-
{
-
trace('Listo!');
-
}
-
-
if (this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal == 1)
-
{
-
// ya está cargado
-
cargaCompleta(null);
-
}
-
else
-
{
-
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, cargando);
-
this.loaderInfo.addEventListener(Event.COMPLETE, cargaCompleta);
-
}