Librería PHP para leer y escribir EPUB (eBooks)

Los libros electrónicos cada día están más de moda, y EPUB parece ser que será el formato que se convertirá en estándar para estos libros, algo que debemos tener en cuenta los desarrolladores para realizar exportación a este formato.

OPL’s EPUB library nos permite leer, escribir y editar los ficheros EPUB, la cual podemos usarla para crearnos un plugin de WP y exportar nuestras entradas o exportar los contenidos de nuestra web en este formato.

OPL’s EPUB library

JS Bin: edita, testea y haz debug de Javascript online

JS Bin es una aplicación que nos permite crear nuestros scripts y testearlos o hacerles debug de forma colaborativa. Su interfaz es muy sencilla, consta de tres pestañas: javascript, el html en el que se incluye el javascript y la salida del HTML y el Javascript.

Además, permite añadir librerías javascript con jQuery o YUI, y exportar el trabajo a una URL propia.

JS Bin

Vía / WebAppers

Google pretende indexar AJA

Aunque es de hace unos días la noticia, ni me había enterado. Google pretende hacer crawlable las páginas basadas en AJAX, para que sus páginas sean accesibles por los resultados de búsqueda.

Lo que pretende es que tanto los usuarios como los motores de búsqueda puedan ver el mismo contenido, incluso que te lleve a la URL Ajax y no a una copia estática. Del mismo modo, el diseñador podrá comprobar que todo su contenido se indexa y que se reproduce correctamente.

Desgraciadamente, Google ya nos indica cómo debemos realizar nuestro AJAX para que podamos tenerlo indexado en Google, por lo que al final lo deberemos hacer tal y cómo ellos lo piden para que no nos penalice por temas de SEO y esas cosas.

Aquí nos dejan una presentación: http://docs.google.com/present/view?id=dc75gmks_120cjkt2chf

A proposal for making AJAX crawlable

Librería PHP para Google Analytics

Librería PHP que nos permite obtener los datos de Google Analytics tipo Visitas y Páginas Vistas de forma muy sencilla y cómoda:

//session_start for caching, if desired
session_start();
//get the class
require 'ga/analytics.class.php';
//sign in and grab profile
$analytics = new analytics('david@davidwalsh.name', 'myP@ssw0rd');
$analytics->setProfileByName('davidwalsh.name');
//set the date range for which I want stats for (could also be $analytics->setDateRange('YYYY-MM-DD', 'YYYY-MM-DD'))
$analytics->setMonth(date('n'), date('Y'));
//get array of visitors by day
print_r($analytics->getVisitors());
//get array of pageviews by day
print_r($analytics->getPageviews());

Google Analytics PHP API class

Vía / David Walsh Blog

Método para crear acortadores de URLs

Buen método para crear acortadores de URLs, el truco está en usar números en base36 (incluye todos los números y letras): http://dominio.com/258j

El número 248j se traducirá a base 10 y nos dará el id de la tabla que almancena las URLs (que tendrá una primary key numérica y preferiblemente autoincremental). Así, por ejemplo, 258j equivale a 100099, por lo que sólo habría que obtener la URL que tenga esa ID.

How URL shortening scripts work?

Vía / DZone

Funciones en Javascript

Normalmente el uso que hacemos de las funciones en javascript es bastante sencillo, pero en algún otro momento puede que necesitemos un uso más avanzado.

El tutorial que os paso explica detalladamente todos los usos que podemos realizar de funciones. Lo que yo desconocía era el uso de callee, que tiene un puntero a la función que se está ejecutando en ese instante, fundamental para la recursividad:

alert((function(n){ if(n <= 1){return 1;}else{return n*arguments.callee(n-1);}})(10));

Functional Javascript

Consejos para realizar un login seguro

Buena serie de consejos a tener en cuenta cuando desarrollamos nuestro sistema de login. Algunos son ya conocidos, pero no está mal recordarlos:

  • Logitud de la contraseña y nombre de usuario: tiene que tener mínimo 6-8 caracteres.
  • Encriptar la contraseña: aunque casi todo el mundo usa MD5 o SHA-1, no está mal del todo usar SHA-2 (disponible en PHP5), ya que las anteriores ya no son tan seguras como hace tiempo.
  • Añade una semilla a la contraseña: cuando encriptes la contraseña es recomendable añadirle un texto para que el hash sea mas seguro.
  • No uses nombres sencillos para el administrador: evita usar nombres como “admin”, “root”, …
  • Registra los intentos de login: así se podrá detectar cuando estamos siendo atacados.
  • Maneja los errores: cuando se produce un login fallido, o evita que se produzca un error, o muestra un error personalizado, no muestres errores de código que puedan dar pistas al atacante.
  • Filtra la entrada: filtra lo que el usuario meta en su usuario para evitar inyecciones de código y no compruebes si la contraseña es correcta mediante SQL.
  • Usa LIMIT o WHERE 1: es importante para evitar comprometer muchas cuentas si sufrimos un ataque.
  • Usa nonce: nonce es un número único para la sesión, así nos aseguramos de que no se realicen ataques de fuerza bruta usando diccionario.
  • Usa sólo $_POST: $_GET es más sencillo de usar que $_POST, aunque no quita que usando $_POST no nos encontremos con problemas.
  • Cuentas MySQL: utiliza un usuario con permiso de select para realizar el login, así, si rompen tu seguridad, no podrán hacer deletes, updates o inserts.
  • Auto logout: Si quieres darle mayor seguridad, desconecta al usuario automáticamente pasado un cierto tiempo de inactividad. Aunque desde el punto de vista de la usabilidad no es muy recomendable.
  • Bloque la cuenta: si se han intentado varios logins consecutivos y han sido fallidos, se debería bloquear la cuenta.

PHP Secure Login Tips And Tricks

Vía / DZone

Laboratorio: curvas Bézier en PHP

Las curvas Bézier son muy utilizadas en diseño 3D y gráficos vectoriales, pero también nos puede ser muy útil cuando queremos realizar una determinada curva entre dos puntos.

De forma resumida, la curva Bézier está formada por cuatro puntos: punto origen (p0), punto final (p3) y dos puntos más (p1 y p2) con los que se realizan vectores que forman la curva:

Bezier_cubic_anim.gif

El script que lo realiza es muy sencillo, tan solo hay que pasarle los 4 puntos y el valor de t (que va desde 0 a 1).

function PointOnCubicBezier( $p0, $p1, $p2, $p3, $t ) {
    /* cálculo de los coeficientes polinomiales */
    $cx = 3.0 * ($p1[0] - $p0[0]);
    $bx = 3.0 * ($p2[0] - $p1[0]) - $cx;
    $ax = $p3[0] - $p0[0] - $cx - $bx;
 
    $cy = 3.0 * ($p1[1] - $p0[1]);
    $by = 3.0 * ($p2[1] - $p1[1]) - $cy;
    $ay = $p3[1] - $p0[1] - $cy - $by;
 
 
    /* calculate the curve point at parameter value t */
    $squared = $t * $t;
    $cubed = $squared * $t;
 
    $res[0] = ($ax * $cubed) + ($bx * $squared) + ($cx * $t) + $p0[0];
    $res[1] = ($ay * $cubed) + ($by * $squared) + ($cy * $t) + $p0[1];
 
    return $res;
}

¿Y todo esto por qué? pues porque estamos realizando mejoras en el Top de Bitacoras.com y necesitábamos una curva que ofreciera una pendiente poco pronunciada entre dos puntos.

También os paso un ejemplo para que juguéis con los posibles valores de los puntos, teniendo una escala de 1000×100.

Vía / Wikipedia