Obtener logs de todas las queries con MySQL 5.0

En algunas ocasiones necesitamos tener un log de todas las queries que se realizan, sobre todo en preproducción para poder tener una visión general de qué consultas se realizan y del coste.
En MySQL 5.1 es sencillo porque se puede poner el tiempo máximo para slow queries a milisegundos, por lo que todas las queries serían lentas y obtendríamos datos de sobre las consultas bastante interesantes.
En MySQL 5.0 tan solo se puede reducir el tiempo de slow queries a un segundo, por lo que es necesario usar tcpdump para capturar el tráfico de MySQL a un log y luego mediante otros comandos obtener las queries.
Logging all the queries with MySQL 5.0

Bordes irregulares con CSS3 y webkit

Jugando un poco con las CSS3 y Webkit (en mi caso Chrome) me ha dado por crear bordes irregulares. Lo he hecho mediante -webkit-border-top-left-radius y similares.
El concepto es sencillo, hay dos colores: el de fondo (no puede ser transparente) y el del borde, en las curvas concavas se usan los colores tal cual, y en las curvas convexas se usan al revés (el color borde se simula usando el color de fondo, y el fondo con el borde).
bordeslocos.png
La verdad es que lo he hecho rápido y me he liado bastante y está muy a ojo, pero espero estudiarlo un poco mejor cómo va e incluso hacer un plugin para jquery.
Ejemplo

Lista de herramientas para generar datos de prueba

Una de los grandes problemas con los que nos podemos enfrentar a la hora de desarrollar una aplicación web es que el rendimiento en las etapas iniciales no es similar a cuando hay muchos datos y muchos usuarios concurrentes. Para los usuarios se pueden hacer pruebas de estrés, pero para el volumen de datos que debe manejar la base de datos hay que rellenar las tablas con datos de prueba. Para ello, este listado puede sernos bastante útil:

  • GenerateData: para mí uno de los mejores, y del que ya hablé hace tiempo.
  • DBMonster: para generar datos aleatorios en la base de datos. Muy completo pero algo más complejo.
  • CSV Data Generator: basado en Ruby genera ficheros CSV.
  • Datagenerator: este me ha gustado bastante, es sencillo y no por ello simple. Permite introducir datos en Mysql, Firebird, Interbase, MSSQL, Oracle, SQLite y PostgreSQL.

En el post original mencionan otros, pero no me han llegado a gustar.

Test (Sample) Data Generators

Evitar spam en formularios mediante Javascript

Buen método para evitar spam en los formularios sin la necesidad de CAPTCHA. Se trata de añadir mediante javascript eventos al formulario que detectan el uso por parte de humanos: focus y click.
Cuando un usuario quiere rellenar el formulario, uno de esos eventos debe lanzarse, por lo que mediante javascrip se añade un valor específico a un input tipo hidden que es el que usaremos para saber si el usuario es un robot o una persona.
En el caso de no tener javascript habilitado (navegadores de algún móvil o lectores de texto para invidentes), mediante la etiqueta NOSCRIPT añadiremos un campo que añada una pregunta tipo: “cuanto son dos más siete”, que sustituirá al captcha.
Invisible Human Check for Web Form Validation
Gracias Gerardo por el aviso

|

Open Blog: CMS de blogs creado en CodeIgniter

Open Blog es un CMS para crear un propio blog realizado en CodeIgniter.
Tiene una interfaz de usuario limpia y fácil de usar, se instala y configura también de forma sencilla. Soporte a multilenguaje, plantillas, urls friendly, panel de administración, editor WYSIWYG, páginas estáticas, blogroll, feeds, y soporte a plugins.
Open Blog

Autosugerencias usando MySQL índices fulltext

Interesante seríe de tres artículos que nos muestra como crear un autosuggest tipo Google usando los índices full-text de MySQL. El método no es nada sencillo (php, mysql y listo), por lo que no será fácil probarlo, pero tampoco complicado o imposible (se necesita ser un usuario algo más avanzado).
Se trata de coger el fichero del índice full-text y usando un programa C, que es necesario compilar junto a MySQL, accederá a los términos que cumplan el texto base del auto-suggest y lo devolverá.
Como ya he comentado se trata de una aplicación externa, por lo que su integración con nuestra aplicación web deberá ejecutarla como proceso externo.
Implementing an AutoSuggest feature using MySQL fulltext indices

Comparativas de licencias opensource

Seguro que a alguno le pasa como a mí que se pierde entre tanta licencia. Si formas parte de mi grupo, te vendrá bien esta comparativa sobre licencias opensource que se basa en 4 preguntas:

  • ¿Puedo darle mi nombre al trabajo derivado?
  • ¿Debería el trabajo derivado continuar siendo opensource?
  • ¿Puedo cambiar el tipo de licencia del trabajo derivado?
  • ¿Puedo vender el trabajo derivado?

Los tipos de licencia que comenta son:

Open Source licenses comparison table

$fx(): librería javascript para animaciones

$fx() es una librería que nos permite realizar animaciones de elementos HTML de forma sencilla. Altera las propiedades CSS a lo largo del tiempo pasando solo una pequeña configuración. Además se pueden combinar efectos, grupos de ellos, encadenarlos o ejecutarlos en paralelo, incluso indicar diferentes callbacks para dar una mayor flexibilidad.
Para aquellos que necesiten tan solo hacer animaciones y no quieran cargar todo el core de jQuery o Mootools, les puede venir muy bien.
$fx()
Vía / Script & Style

UI.Layout: plugin de jQuery para crear layouts

UI.Layout es un plugin para jQuery que nos permite crear layouts en nuestras aplicaciones web, ya sean complejos o sencillos. Con este plugin podemos añadir toolbars, menús, paneles de ayuda, status bars, …

Entre sus características encontramos:

  • Sencillez: potente pero fácil de usar y de aprender
  • Layouts ilimitados: 5 regiones por layout
  • Docenas de opciones: cada aspecto es personalizable, globalmente y por región
  • Control total de las CSS: docenas de clases auto-generadas crean cualquiero aspecto UI
  • Extensible: callbacks, métodos y utilidades especiales
  • Botones personalizados: puedes integrar tus propios botones
  • Collapsable: cada panel puede ser cerrado, usando la animación que desees
  • Ocultable: los paneles se puede ocultar completamente, de inicio o en cualquier momento
  • Redimensionables: cada panel se puede redimensionar, automáticamente o indicando límites
  • Slidable
  • Cabeceras y pies de página: para cada región
  • Hotkeys: puede usarse cursores o teclas para definir hotkeys
  • Se puede usar cualquier elemento para los paneles
  • Integrable con cualquier widget o plugin jQuery

UI-Layout

Vía / WebAppers