HitTest de un MovieClip en un contenedor escalado

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

Actionscript:
  1. posx = (clip._x + clip.sensible_mc._x);
  2. posy = (clip._y + clip.sensible_mc._y);
  3.  
  4. var point:Object = {x:posx, y:posy};
  5. _referencia.localToGlobal(point);
  6.  
  7. if(sensible_mc.hitTest(point.x,point.y,true))
  8. {
  9. trace("Choque");
  10. }
  11. else
  12. {
  13. trace("No Choque");
  14. }

Trabajar con más de una base de datos

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

PHP:
  1. require("my_class.php");
  2. /* En esta clase está el método refrescarTabla() que hace lo siguiente:*/
  3. $this->selec_bbdd = @mysql_select_db( $this->bbdd , $this->conexion ) or $this->err();
  4.  
  5.  
  6. /*  Inicio la conexion con la BBDD con la base de datos 1*/
  7. $conexion_1 = new ConsultaMySql();
  8. $conexion_1->conectar();
  9. $conexion_1->actualizarDatos(IPSERVER_1,USERBBDD_1, PASSBBDD_1,NAMEBBDD_1)
  10.                    
  11. /* Inicio la conexion con la  base de datos 2*/
  12. $conexion_2 = new ConsultaMySql();
  13. $conexion_2->actualizarDatos(IPSERVER_2,USERBBDD_2, PASSBBDD_2,NAMEBBDD_2);
  14. $conexion_2->conectar();
  15. /*  **********************************/
  16.  
  17. /* Una operacion con bbdd 1*/
  18. $conexion_1->refrescarTabla();
  19. $conexion_1->consulta = "SELECT * FROM tabla";
  20. $conexion_1->ejecutar_consulta();
  21. $resultado_1_bbdd1 = $conexion_1->result_array_asoc();
  22.  
  23. /* Una operacion con bbdd 2*/
  24. $conexion_2->refrescarTabla();
  25. $conexion_2->consulta = "SELECT * FROM tabla";
  26. $conexion_2->ejecutar_consulta();
  27. $resultado_1_bbdd2 = $conexion_2->result_array_asoc();
  28.  
  29. /* Otra operacion con bbdd 1*/
  30. $conexion_1->refrescarTabla();
  31. $conexion_1->consulta = "SELECT * FROM tabla";
  32. $conexion_1->ejecutar_consulta();
  33. $resultado_2_bbdd1 = $conexion_1->result_array_asoc();
  34. /* Codigo para visualizar los resultados*/
  35.  
  36.  
  37. /* Fin codigo*/
  38.  
  39. /* Cierro las conexiones*/
  40. $conexion_1->cerrar_conexion();
  41. $conexion_2->cerrar_conexion();

Pues nada más, espero que os sirva.

BUG en MySQL

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!!!

Información servicios de SMS

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"!

emprendedor

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."