GeSHI (Generic Syntax Highlighter) es un script PHP que resalta el código que indiquemos realizado en un total de más de 50 lenguajes de programación, entre los que se encuentran PHP, Java, HTML, CSS, C#, Javascript y SQL.
Inicialmente desarrollado para el sistema de foros phpBB, finalmente ha pasado a ser un proyecto independiente. Entre sus caracterÃsticas destaca la cantidad de lenguajes que admite, la facilidad de añadir un lenguaje nuevo y la facilidad para modificar la salida del script.
Lo que más me gusta de este script es que enlaza con las URLs de las funciones de los lenguajes. GeSHI
Interesante estudio que muestra la velocidad de tres frameworks PHP (Cake PHP, CodeIgniter y Zend Framework).
Realiza diferentes pruebas: sin usar caché, usando caché propio, usando caché externo, acceso a BD, acceso mediante Active Records, … Los resultados demuestran que CodeIgniter es el más rápido y Cake PHP el más lento.
Es también destacable los datos sobre número de peticiones por segundo cuando se usa un framework a cuando se usa HTML estático. Por eso es recomendable realizar un caché para servir HTML estático.
El autor también realiza una comparativa de funcionalidades entre CodeIgniter y Zend Framework, aunque lo miraría con cuidado, porque dice que CI no admite internacionalización y no es cierto. PHP framework comparison benchmarks
Para aquellos que usan JDownloader (y Windows) les gustará la noticia de que ha salido un plugin para romper reCAPTCHA, que aunque está en versión beta, rompe bastantes códigos.
Para hacerlo, realiza varias técnicas para convertir la imagen en una que pueda ser leída por un OCR, y lo curioso de todo esto es que está realizado en PHP y pasado a C++ con HIPHOP de Facebook.
El código lo podéis ver en el PDF que viene en el plugin.
Una de las novedades que trae PHP 5.3 son los namespaces, un modo de encapsulación de elementos. Gracias a los namespaces podemos ejecutar un mismo código usando diferentes namespaces y así obteniendo diferentes resultados.
Esta opción nos permite sobreescribir funciones de PHP y usarlas en nuestro código:
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.
No soy muy amigo de Flash, no soy enemigo, pero sinceramente, prefiero hacer las cosas en HTML, CSS y Javascript, tampoco voy a entrar en la polémica HTML vs Flash. Pero sí es cierto, que subir ficheros desde la web puede ser un poco desesperante, sobre todo para aplicaciones web tipo galerías de imágenes en donde se suelen subir varios ficheros simultáneamente.
Subir ficheros mediante Flash nos aporta varias ventajas frente a el HTML normal: puedes poner filtros de archivos, tratar los ficheros previamente, subidas multiples, indicador de progreso, … Y aunque nos pese, el cliente/usuario siempre tiene la razón, y estas comodidades son muy bien valoradas por los usuarios.
El tutorial que os paso explica cómo crear el uploader Flash y como realizar la parte PHP, a mi me va a venir de perlas.