Elgg es una aplicación open source que permite crear redes sociales de forma sencilla y con bastantes características que completarán nuestra web.
Entre las características del administrador nos encontramos con administración de usuarios, objetos, ficheros y del sitio, gráficas con relaciones de los usuarios, múltiples sitios por instalación, internacionalización, sistema de etiquetas, ACL, vistas, eventos, plugins y API para widgets.
Además permite RSS, FOAF, XFN, OpenId, OpenSocial, OAuth, JSON, Ajax con jQuery, sistema de caché que permite memcached.
Lógicamente, el usuario final dispondrá de su perfil, panel, feeds de su actividad, preferencias, blog, aplicaicones OpenSocial, repositorio de ficheros, foros y mucho más.
Elgg necesita PHP 5.2+, Apache, GD, MySQL 5+ y mod_rewrite. A parte OpenSocial necesita Mcrypt y la librería PHP SOAP. Elgg
Vía / WebAppers
Lo mejor de la experiencia es que vamos aprendiendo de ella, y vamos mejorando, aunque no siempre es asà y siempre nos vienen bien unos cuantos consejos sobre el desarrollo web.
Hazlo sencillo, las caracterÃsticas que añadas, que sean para mejorar, no para distraer. Cuánto más fácil mejor para el usuario, mejor para tÃ.
Ãbrete lo máximo, comparte tus contenidos, crea una API para que otros puedan usarte, usa feeds.
Testea. Si, es lo más aburrido, lo de “beta” que está tan de moda ahora, no es solo algo de diseño, es una necesidad.
Empieza con lo básico y ve añadiendo funcionalidades de forma rápida y constante.
Persevera, no te dejes convencer de que no se puede hacer, si crees en el proyecto, sigue adelante.
No reinventes la rueda, sigue estándares, reutiliza herramientas y código en tus proyectos.
Planifica tu aplicación web para que admita escalabilidad y para que pueda crecer.
No pierdas de vista los microformatos, Adobe Apollo para la creación de aplicaciones de internet, Whobar para manejar identidades digitales y Akismet para luchar contra el spam.
FÃjate en la tendencia del contenido y el software social generado por los usuarios.
Una de los grandes problemas con los que nos podemos enfrentar a la hora de desarrollar una aplicación web es que el rendimiento en las etapas iniciales no es similar a cuando hay muchos datos y muchos usuarios concurrentes. Para los usuarios se pueden hacer pruebas de estrés, pero para el volumen de datos que debe manejar la base de datos hay que rellenar las tablas con datos de prueba. Para ello, este listado puede sernos bastante útil:
GenerateData: para mí uno de los mejores, y del que ya hablé hace tiempo.
DBMonster: para generar datos aleatorios en la base de datos. Muy completo pero algo más complejo.
Datagenerator: este me ha gustado bastante, es sencillo y no por ello simple. Permite introducir datos en Mysql, Firebird, Interbase, MSSQL, Oracle, SQLite y PostgreSQL.
En el post original mencionan otros, pero no me han llegado a gustar.
Otro interesante artículo sobre caché y los distintos modos de poder llevarlo a cabo. Para aquellos que quieran añadir caché a su sistema y ahorrar recursos y no sepan qué hacer, puede venirles muy bien este wiki y el listado de tipos de cache que hay:
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.