Detectar el navegador desde PHP

Detectar el navegador desde PHP puede resultar útil para proyectos en los que dependiendo el dispositivo tengamos que mostrar contenido diferenciado, por ejemplo si sabemos que tenemos un SWF embebido y el mismo no es soportado por dispositivos móviles, deberemos mostrar un mensaje amigable en lugar de un horrible cuadrado gris.

Con esta función detectaremos si el usuario ingresa desde un smarthphone, una tables o desde un navegador de escritorio:

 

Importar fichero SQL de gran tamaño (actualizado)

A partir del problema para importar un fichero SQL de gran tamaño (http://cesarmansilla.com/blog/2014/11/06/importar-fichero-sql-gran-tamano/) me topé con la necesidad de optimizar aún más el proceso, ya que al tener que pasar esta base desde el servidor de desarrollo al servidor de producción la solución planteada no resultó la más óptima.

Lo que hice fué sencillo, pero en una primera instancia se me pasó por alto: creé el fichero .sql nuevamente, pero esta vez con batch inserts. El fichero final resultó de 1/4 parte del peso (de 442MB a 123MB). Luego lo comprimí con 7-Zip para obtener un archivo .gz de 43MB. Nada mal!

Al código que utilicé en un principio le hice algunos ajustes y quedó de la siguiente manera:


Este es el ejemplo de lo que genera el script:

 

Clase AS3 para manejo de elementos

Con esta clase podremos manipular elementos en nuestros proyectos.
Son acciones muy comunmente utilizadas, como por ejemplo vaciar contenedores de elementos o distribuirlos en el stage para diseños fluidos.

Al tratarse de una clase estática, simplemente la importamos y comenzamos a utilizar sus métodos:

  • DisplayUtil.remove():
    Elimina un elemento de su contenedor
  • DisplayUtil.clear():
    Elimina todos los hijos que contenga el objeto pasado como parámetro
  • DisplayUtil.layoutX():
    Distribuye los elementos del contenedor en el eje X
  • DisplayUtil.layoutY():Distribuye los elementos del contenedor en el eje Y
  • DisplayUtil.layout():
    Distribuye los elementos del contenedor en un eje cartesiano
  • DisplayUtil.filterChildren():
    Filtra objetos de un contenedor que cumplan con todas las propiedades requeridas
  • DisplayUtil.addChildren():
    Agrega a un contenedor los elementos pasados como parámetro en el array
  • DisplayUtil.kidnapChildren():
    Lleva los elementos de un contenedor a otro

Ejemplos de uso:

Podrán encontrar los archivos, junto a un ejemplo en mi repositorio de GitHub: AS3-Utils-DisplayUtil

Importar fichero SQL de gran tamaño

Me topé con la necesidad de importar un fichero SQL de gran tamaño (8,500,00 registros) a mi base de datos. Pasé por varias instancias antes de encontrar la solución.

En principio, los códigos me fueron entregados en un fichero txt, separados cada uno por un salto de linea (al menos es algo). El tamaño de este archivo era de 89MB, a partir de acá sabía que estaba frente a un problema.

Intento #1: Procesar el fichero tal como estaba. Pasaron 5 minutos y recién se habían insertado 6,000 registros…

Cambié algunas directivas para asegurarme de que no se generara un timeout,  leí el contenido del archivo y lo recorrí con un bucle, primero intenté insertar en base directamente, luego mostrar las consultas en pantalla. Ninguna funcionó.

 Intento #2: Divide y vencerás (si no te cansas antes)…

Abrí el archivo y fuí dividiendolo en varios archivos más pequeños(copy / paste). En principio fueron de a 1,000,000 de códigos, luego 500,000 y así… Después pensaba recorrer cada uno de estos archivos, pero ejecutar tantas consultas no solucionaba el problema.

Intento #3: Desde linea de comandos. Consta de varios pasos porque tuve que crear el archivo “.sql“, pero si ya tenés este archivo, solamente deberás hacer la parte de ejecución desde consola.

Creación del archivo SQL:

Ejecución desde consola:

Abrir la consola (Inicio > “cmd” desde Windows) y ubicarse el directorio donde la instalación de MySQL, por ejemplo.

Nos conectamos a la base de datos con la siguiente instrucción (luego de ejecutarla nos pedirá ingresar la contraseña):

A partir de acá podemos ejecutar sentencias en nuestra base de datos, en nuestro caso ejecutaremos las sentencias del archivo “mysql_full.sql” que acabamos de crear (442MB):

Solo resta esperar a que termine la ejecución, el tiempo dependerá de la potencia del equipo. Pero sin duda es la forma más rápida y efectiva de importar fichero SQL de gran tamaño.

Obtener info de una fanpage

Podemos obtener info de una fanpage o perfil de Facebook a partir de su URL.

Tomemos como ejemplo la fanpage de WordPress: https://www.facebook.com/WordPress

A partir de este dato, debemos hacer una pequeña modificación en la URL, cambiamos la “www” por “graph“, en este caso nos quedaría: https://graph.facebook.com/WordPress

Solo resta procesar esta nueva URL con PHP para parsear la info y almacenarla en un array:

Si mostramos el contenido de la variable en pantalla, veremos:

Podemos usar esto por ejemplo para saber la cantidad de likes de una fanpage, para conocer su ID, etc.

Redireccionar aplicación desde tab

En ciertas ocasiones es necesario redireccionar una aplicación a partir de un tab de Facebook hacia el canvas, por ejemplo para contar con más espacio de trabajo, ya que el canvas se puede configurar para que ocupe el total de alto y ancho del navegador del usuario, en cambio un tab (o solapa) tiene un ancho máximo de 810px.

Para esto podemos valernos de una variable que Facebook envía al iframe y que contiene cierta información del usuario y de la aplicación. Previamente debemos procesar esta variable ya que es un hash y debemos decodificarlo para obtener su info en un array.

La variable en cuestion se llama “signed_request” y podemos procesarla de la siguiente manera:

 

Firma personalizada en Gmail

Podemos crear una firma personalizada en Gmail, pero convengamos el nivel de personalización es un tanto escaso, similar a un editor de texto. ¿Qué tal si quisiéramos usar algo como esto?

Ejemplo de firma

Sencillo! Debemos tener nuestro diseño en HTML, en mi caso hice esto: http://cesarmansilla.com/blog/samples/firma_ejemplo.html

Una vez hayamos ingresado a la URL seleccionamos todo el contenido (CTRL + a) y lo copiamos (CTRL + c). Con esto nos vamos al panel de configuración de Gmail y en la solapa “General” buscamos la sección de firmas, allí veremos un editor, simplemente debemos pegar (CTRL + v) lo que acabamos de copiar en el navegador.

Guardamos los cambios y listo.

Solo debemos tener algunas consideraciones a la hora de maquetar el HTML:

  • Maquetar con tablas
  • Usar estilos (CSS) inline, es decir no usar clases externas
  • No usar métodos abreviados para declarar el CSS
  • No abusar de las imágenes, puede ser tomado como SPAM
  • No usar Javascript