Nuevos posts rápidos

Últimamente no ando muy sobrado de tiempo, por lo que no posteo tanto como me gustaría, además, hay pocos temas que considere interesantes como para hacer un post, pero si son lo suficientemente interesantes para realizar un post rapidillo, a ser posible automático.

Es por ello que me he creado un plugin para WordPress, que cuando tenga tiempo lo puliré y publicaré, que me permite postear directamente desde Google Reader usando lo de “Enviar a”, vamos que con una llamada a una URL tipo http://sentidoweb.com/[path_seguridad]/[token]/${title}%20${source} publicaré directamente en mi blog, así podré pasaros posts que considere interesantes.

Peticiones en paralelo de CURL con PHP

Cuando realizamos una petición CURL normalmente usamos el método sencillo: hacer petición, esperar respuesta. ¿Pero que ocurre cuando queremos hacer varias peticiones de forma simultánea? por ejemplo para un crawler o una aplicación parecida. En estos casos tenemos que echar mano de curl_multi_*.

Si nos encontramos en esta situación podemos echar mano de la clase ParallelCurl, que de forma muy sencilla nos ayudará en nuestra tarea:

$pc = new ParallelCurl($max_requests, $curl_options);

// 3 peticiones en paralelo que empiezan simultaneamente
$pc->startRequest($url1, 'on_request_done');
$pc->startRequest($url2, 'on_request_done');
$pc->startRequest($url3, 'on_request_done');

$pc->finishAllRequests();

Parallel cURL execution in PHP

Vía / PHPDeveloper.org

Librería PHP para evitar SQL injection y XSS

Algo que debemos tener muy en cuenta cuando realizamos nuestra aplicación web es limpiar la entrada de datos de contenido malicioso, ya sea para SQL injection o cross-site scripting (XSS). Los frameworks suelen tener su propia librería que se encarga de ello, pero para aquellos que no usen framework o hagan una aplicación muy sencilla, esta librería les vendrá muy bien.

// Output an unsafe string, presumably user input
$xss = '';
echo 'If your entered your name as ' . $xss . ', we\'d be in trouble.
' . "\n"; // Sanitize that string, and output it safely $htmlContentContext = sgSanitizer::sanitizeForHTMLContent($xss); echo "But if we sanitize your name, " . $htmlContentContext . ", then all is well.
\n";

Genius Open Source Libraries

Vía / PHPDeveloper.org

Trabaja con datos mediante SQL con Javascript

Me han pasado una librería con la que podemos trabajar con datos en Javascript usando sentencias SQL, aunque los datos hay que recuperarlos de ficheros mediante Ajax y deben estar en un formato específico. La librería no admite inserts aún y los datos no se almacenan en el cliente, sino en el servidor, pero puede ser una interesante alternativa hasta que las bases de datos de HTML5 estén plenamente disponibles en todos los navegadores.

var sql="select NombreCompania, NombreContacto, CargoContacto from clientes order by 3, 2 desc" ;
var res=myJSSQL.Query(sql);

Dispone de una librería PHP que convierte una BD de MySQL o Postgres en el formato específico de la librería javascript.

JavascriptSQL

Boomerang: medición de rendimiento desde la perspectiva del usuario

Boomerang es una librería desarrollada por Yahoo que permite medir diferentes aspectos de rendimiento de nuestra web desde la perspectiva del usuario final. Añadiendo un script y distintas funciones, podemos comprobar diversos aspectos de nuestra web como:

  • El tiempo que el usuario cree que tarda en cargarse la web
  • El tiempo de carga de contenido dinámico
  • El ancho de banda durante la carga de la página
  • Tiempo de carga de diferentes módulos, por ejemplo módulos de Twitter o Facebook
  • Latencia HTTP
  • Latencia DNS
BOOMR.init({
  user_ip: "",
  beacon_url: "http://yoursite.com/path/to/beacon.php",
  BW: {
    base_url: 'http://yoursite.com/path/to/bandwidth/images/"
  }
});

Además permite etiquetar páginas para realizar distintos tests y poder compararlos, realizar tests a usuarios aleatorios y evitar abusos de uso

Boomerang

Vía / WebAppers

Manejar y generar excepciones en Javascript

Los que hemos trabajado con Java estamos acostumbrados a tratar y lanzar excepciones para controlar los errores, algo que en Javascript no es muy común, pero en librerías algo elaboradas podría ser muy útil.

// Clases de errores
function DivisionByZeroError() {
    this.name = "DivisionByZeroError";
}
function DivisionByStringError() {
    this.name = "DivisionByStringError";
}
// Funcion que devuelve un error
function divisionCanFail(a, b) {
    if (b == 0) {
        throw new DivisionByZeroError();
    }
    if (typeof b == "string") {
        throw new DivisionByStringError();
    }
    return a / b;
}
// Funcion de test
function decoratedDivision(a, b) {
    try {
        alert(divisionCanFail(a, b));
    } catch (error if (error.name == "DivisionByZeroError")) {
        alert("A division by zero...");
        alert("Exception class: " + error.name);
    } catch (error if (error.name == "DivisionByStringError")) {
        alert("Exception class: " + error.name);
    }
}

decoratedDivision(5, "isThisANumber?!");
decoratedDivision(5, 0);

Exceptional JavaScript