SilverStripe es otro CMS open source del estilo Drupal o Joomla, el cual es muy intuitivo y fácil de usar, flexible, basado en MVC, escalable, cumple estándares, fácil de extender mediante módulos y mucho más.
Es necesario PHP y aunque hay una comunidad detrás trabajando para mejorar el CMS, noto que la ayuda no es demasiado extensa. La administración es muy completa, además incluye módulos para e-commerce, blog, foros, flickr, Google Maps. Para aquellos cuyos conocimiento de desarrollo no sea muy amplio, les será de gran ayuda para que puedan desarrollar sus aplicaciones. SilverStripe
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.
SQLite es una posibilidad a tener en cuenta cuando no es posible realizar aplicaciones web que accedan a una BD (MySQL, Oracle, …), ya que no existe servidor de BD sino un conjunto de rutinas y los datos se guardan en un fichero en el servidor.
Para aquellos que programen con CodeIgniter les podrá venir muy bien esta explicación para integrar CI y SQLite. CodeIgniter PDO SQLite3 quick setup
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.
Ahora os cuento sobre TCPDF, una librerÃa basada en FPDF, que hace tiene muy buena pinta, hasta que tenga un rato para ver que tal funciona, os paso las caracterÃsticas que tiene:
Ya he hablado anteriormente de Drizzle, una base de datos muy ligera y rápida, pensada para aplicaciones web. Lo que se echaba en falta era una librería PHP para poder desarrollar.
Drizzle PHP Extension es una extensión que nos permite desarrollar bajo PHP usando Drizzle de forma sencilla.
$drizzle= drizzle_create();
$con= drizzle_con_add_tcp($drizzle, "127.0.0.1", 0, "root", NULL, "sakila", 0);
$result= drizzle_query($con, "SELECT * FROM film LIMIT 3");
drizzle_result_buffer($result);
while (($row= drizzle_row_next($result)) != NULL)
print implode(':', $row) . "\n";
La versión PHP5.3 está recién salida del horno, y una de las cosas más interesantes que trae son las funciones para trabajar con internacionalización (que no solo de inglés vive la web).
Para ello existen unas nuevas clases que nos ayudarán a crear páginas en varios idiomas o sin los problemas que antes nos encontrábamos para debido al “formato” en inglés:
Locale: divide los datos de localidad en componentes (pais, lenguaje, …)
Collator: compara y ordena strings de acuerdo con las reglas locales.
Number formatter: permite formatear números de diferentes modos (comas decimales, separador de miles, …)
Date formatter: formatea fechas y obtiene fechas de texto.
Message formatter: permite crear mensajes desde strings parametrizados dependiendo de las reglas locales.
Normalizer: para trabajar con Unicode de forma normalizada, ya que hay caracteres que son representados por distintos códigos Unicode.
Grapheme: trabaja con “graphemes” (no se traducirlo), que son las representaciones de las letras, las cuales puede constar de varios caracteres.
IDN: permite trabajar con nombres de dominios en formato internacional (eñes, acentos, …)
En el artículo explican más detalladamente cada clase.