CSSEmbed: incrustar imágenes en tus CSS

CSSEmbed es un script que te sustituye las imágenes de un CSS por su representación en base64. ¿Qué conseguimos con esto? reducir el número de peticiones HTTP, por ejemplo. Para ello debemos usar DATA URIs, las cuales sustituyen a las URLs por el contenido codificado en base64.

.ejemplo {
background: url(imagen.png);
}
/* Sustituido por */
.ejemplo {
background:   url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAADwCAMAAACe2r56AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJl
YWR5ccllPAAAAwBQTFRFAAMAAAQA8fbw6O3nAQYAHCEbCA0HlpuV3uPdyM3HR0Dwv8S+BAYRSjvmYmdhDw0yPzTG1NnTCAkdoKWfO0A6LzQuLSiXRjnbeH
13goeBtbq0ERYQbnNtqq+pGxxhjJGL7tgZEBVARUpEExA9FBhLTlNNJSokWV5YGBtXOzK6ODCwIiF2JiOBQzfRNCysMCmhKSWMCwonHx9sJisl3cQWMTYwys/J5
s4YU0kH1bsWZGljl5yWFBMANC8EAgcBwKsUg4iCt6ESExgSREEFgncNWlEHHR4BEhcRn48PqZoRjZKMoaagZFwKwMW/mYcQZWpkT1ROl4UOY1sJx7MUq7Cqy
LQVv6oToZERWl9ZmIYPGxwARktFeX54CQ4ICA4AZV0LNTAFkH0OUFVPVUsJioAOHh8Cb3RuMjcxmJ2XeGsKPjoHPEE7fXAPNjEGMy4D1rwXPTkGcWMLXFMJkX
4Pem0McmQMFhUBDgwBBw0AMDUvoqehBgwA8/jyqJkQJCYBW2BaJigD3sUXeWwLYloIDgsIcGIKDAsoUUcFOzcEY2hiHiMdJykErLGry9DKiX8Ne24Ntru13+TePD
gFMzgyPDO7qpsSuKITFhsVwcbANDkzybUWuaMUQ0AEDw0CXlULbmgN1drUKC0nEhA1gHULExIAHyADR0xGLC8CcHVvHyQea2UKUVZQVVJPICUfDhMNTUEIdH
FusZkT6/DqCg8JQj8D6e7oalsLQUZAICBtLicFrbKs38YY2b8aGyBLPUI8CxAKppYWTEAHz7scsJgSICEEyc7ISUYKFxYCopISHB1idXp0uqQVFRgbkn8QbGYLEA4D
NzIH+/OhHh5rTkIJzNHLISIFBgsFRTja6dEbCQoeV1RRCQYDKigdSEUJ2t/ZMzQXQT4CFRI/588ZSkUaCgs...
}

Lógicamente con versiones inferiores a IE8 da problemas y hay que usar alternativas, pero en el resto de navegadores va bien. Se puede ver un ejemplo real en las imágenes de las búsquedas de Google.

CSSEmbed

|

Jaxl: librería para Jabber

Jaxl (Jabber XMPP Library) es una librería que nos permite realizar comunicaciones mediante Jabber (el protocolo de IM que usa Gtalk, entre otros). Permite encriptación TLS, autenticación DIGEST-MD5 y PLAIN, administración de servidor y notificación de GMail, entre otras cosas.

Jaxl

Recibe información del servidor por IM (Jabber)

Interesante script que permite recibir por IM, usando Jabber (GTalk), el estado de tu servidor. Para ello hace lectura de /proc/loadavg y envía el resultado cada poco rato. El script utiliza la librería Jaxl para la comunicación mediante Jabber.

Podemos modificar el fichero de lectura para obtener cualquier otro tipo de datos, o bien modificar el script para que obtenga información propia de nuestra aplicación.

Get real time system & server load notification on any IM using PHP and XMPP

Vía / PHPDeveloper.org

jsPDF: crea PDFs directamente desde Javascript

Interesante javascript que nos permite crear PDFs sin necesidad de aplicaciones en el servidor, sino usando únicamente una librería PDF. Su uso es muy sencillo, devolviendo una URL con Content-type y codificada en Base64:


var doc = new jsPDF();
doc.setFontSize(22);
doc.text(20, 20, 'This is a title');

doc.setFontSize(16);
doc.text(20, 30, 'This is some normal sized text underneath.');	

// Output as Data URI
doc.output('datauri');

A mí en Firefox no me ha funcionado, pero en Chrome sí.

jsPDF

Vía / DZone

Glyde: proxy PHP para descargas directas

Glyde es un script proxy PHP, el cual podemos instalarlo en nuestro servidor pudiendo acceder a URLs que tenemos capadas ya sea en nuestra oficina o por la nueva ley que se ha inventado la ministra para lo de las páginas de enlaces (en este caso nuestro servidor no podrá estar en España, lógicamente).

Entre las características que ofrece nos encontramos con:

  • Muy fácil de instalar, tan sólo hay que copiarlo y ya funciona
  • URLs encriptadas
  • Bloqueo de IPs (aunque yo casi le metería protección por htaccess)
  • Caché en el servidor
  • Soporte de Javascript
  • Panel de administración

Glype

Evitar ejecuciones múltiples en cron con PHP

Cuando tienes una aplicación web, los procesos cron son muy útiles para automatizar tareas de todo tipo: mantenimiento, background, … El problema que nos podemos encontrar es cuando el tiempo que tarda en ejecutarse un cron supera el tiempo de espera entre ejecuciones, con lo que nos encontramos con dos cron ejecutándose en el mismo momento, pudiendo repercutir negativamente en la propia tarea del cron.

Para evitar esta situación, el script al que hago referencia nos va a venir muy bien, porque añade bloqueos al cron para evitar que dos procesos se ejecuten. Una solución sencilla es crear un fichero, y si el fichero existe, pues no ejecutar el cron. El problema que tiene esto es que si el cron termina abruptamente, el fichero seguirá existiendo por no haberse borrado y el resto de procesos cron no se ejecutarán.

El autor en este script añade la posibilidad de saber si el cron sigue ejecutándose o se terminó incorrectamente, para lo cual en el fichero de bloqueo guarda el PID del proceso cron que lo crea y comprueba si el PID sigue existiendo. Este script sólo es útil en entornos linux.

How to use locks in PHP cron jobs to avoid cron overlaps

Vía / PHPDeveloper.org

Hacks para CodeIgniter

Ya he mencionado anteriormente que CodeIgniter me parece el mejor framework PHP que hay, por lo que considero que los hacks a los que hace referencia el artículo de Nettuts nos pueden venir muy bien a quienes usamos CI:

  • Autoload de modelos
  • Prevenir colisión de nombres de controladores y modelos
  • Validación de formularios con valores únicos
  • Ejecutar CI desde la línea de comandos
  • Usar CI para múltiples sitios
  • Permitir cualquier tipo de ficheros a la hora de subir ficheros

6 CodeIgniter Hacks for the Masters

Terrastore: base de datos documental

Terrastore es una BD documental distribuida que ofrece escalabilidad sin quitarle consistencia. Entre sus características encontramos:

  • Accesible mediante HTTP
  • Distribuida: permite distribuir los nodos por cualquier servidor de nuestra red
  • Elasticidad: permite quitar y poner nodos sin necesidad de parar el servicio o cambiar la configuración
  • Escalabilidad en la capa de datos: los documentos se dividen y reparten por los nodos con balanceo automático y unión de las partes
  • Escalabilidad computacional: las queries y updates se distribuyen por los nodos reduciendo el tráfico
  • Consistencia: ofreciendo consistencia para los documentos, garantizando que siempre obtendrás el último valor de un documento, con aislamiento de la lectura de posibles commits de modificación

Terrastore

Vía / High Scalability