CodeIgniter 1.6.2

codeigniter.pngHa salido la nueva versión de CodeIgniter, la cual repara una treintena de errores y añade algunas novedades, entre las que nos encontramos mejoras en el Active Record, posibilidad de indicar el código de retorno http en la función redirect(), nuevo fichero para manejar las constantes, mejoras en el File Helper, y en la librería ZIP, Helper para compatibilidades entre PHP4 y PHP5.
Recomendable su actualización

Laboratorio: publicar en Twitter mediante CURL

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.

Recursos para generar nubes de etiquetas

Aunque sea algo que cada vez veo menos en la web, sí que es algo característico de la web2.0, por lo que quien necesite ayuda para crear sus nubes de etiquetas (tag cloud), podrá encontrarla en este listado de recursos.

Tutoriales, consejos y referencias

Inspiración

Generadores

Everything Tag Clouds

JIT: JavaScript Information Visualization Toolkit

Impresionante la librería que ha creado Nicolas Garcia Belmonte que permite crear gráficas RGraph, Treemaps o Hyperbolic Trees. ¿Y qué tipo de gráficas son estas? pues explicándolo llanamente, las que muestran relación entre elementos usándo árboles, pero algo más visuales, centrando nodos.
jit.png
Por lo poco que he visto, está desarrollado en Canvas y para IE lo simula mediante VML. También estaría bien mirar si permite ampliar nodos dinámicamente.
JIT

Drigg: clon de Digg con Drupal

Aquellos que quieran crear una web al estilo Digg ya lo pueden hacer mediante Drigg, un módulo para Drupal que nos ofrece este servicio. Para su uso es necesario disponer de otros dos módulos: user_karma y un módulo para votaciones (preferiblemente extra_voting_forms.
Es sencillo de usar y permite modificar el theme de forma fácil. Los fotos se realizan también de forma simple, pudiendo elegir entre 4 tipos de votos. Además permite crear votos automáticos para el inicio de la aplicación para darle actividad aleatoria a la aplicación.
Drigg
Vía / Smashing Apps

Usar Open Flash Chart desde CakePHP

Open Flash Chart es una de los mejores componentes Flash para crear gráficas, su uso es bastante sencillo, pero aún así, siempre viene bien tener una capa de abstracción para despreocuparnos de cómo se usa. Los que desarrollen usando CakePHP disponen de una librería que les facilitará la labor de realizar gráficas.

Un ejemplo de uso sería el siguiente:

<?php
$flashChart->begin(400, 250);
$flashChart->title('Example 4 - Pie Chart: My imaginary Browser Stats');
$browser_data = array(
'Firefox' => array(
'value' => 30
),
'Opera' => array(
'value' => 7
),
'IE' => array(
'value' => 38
),
'Other' => array(
'value' => 25
)
);
$flashChart->pie($browser_data);
echo $flashChart->render();
?>

Open Flash Chart Helper: draw charts the Cake way

Top de blogs en Bitacoras.com

Hace un rato hemos lanzado en Bitacoras.com nuestro top de bitacoras reborn, vamos, hemos mejorado el sistema y le hemos dado un nuevo estilo.
top_bitacoras.com.png
¿Qué tiene nuestro top que no tengan otros? pues que nos basamos en datos propios, no hacemos la media de lo que nos diga Google, Alexa u otros servicios. Tenemos nuestros blogs y sacamos nuestros datos.
Lógicamente nuestros datos no son perfectos, ya que al depender de los blogs registrados y de los pings que nos hacen, nos podemos perder entradas. Pero que no sea perfecto, no quita que sea fiable, ya que sinceramente, al menos yo, sospecho un tanto de Alexa y su ranking. Quizás por ello, sería interesante que si no estás registrado en Bitacoras.com, lo hagas y que nos mandes un ping cuando publiques.
Por último, si quieres añadir tu posición en Bitacoras.com en tu propio blog, ofrecemos un pequeño widget que os ayudará.

Marjory: webservice para indexar y buscar documentos

Marjory es un webservice que nos ayuda a indexar y buscar documentos realizado en PHP. Utiliza la búsqueda fulltext aunque también está disponible la búsqueda mediante Lucene (en un futuro pretenden sacar más).
No utiliza protocolos XML-RPC o SOAP, usa una interfaz REST para comunicarse con las otras aplicaciones. Aunque no estaría mal respuestas en JSON.
Está realizado con Zend Framework y usa la librería para Lucene como motor de búsqueda por defecto.
Marjory