Instalar MongoDB y PHPMongo en CentOS

Esta vez vamos con un tema que me interesa bastante últimamente, las bases de datos no relacionales, usadas en servicios tan populares como Facebook o Twitter. Una de las más populares, aunque no la única, es MongoDB. Otras que también habrá que investigar son CouchDB, Redis o Cassandra. Ya habrá tiempo…

Yo voy a detallar el proceso de instalación de MongoDB en CentOS aunque para otras instalaciones es conveniente mirar la guía que MongoDB ofrece.

Para CentOS hay que editar el fichero /etc/yum.repos.d/10gen.repo

vi /etc/yum.repos.d/10gen.repo

Y añadir:

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0

Ya estamos en disposición de instalar mongoDB

yum install mongo-10gen
curl http://downloads.mongodb.org/linux/mongodb-linux-i686-2.0.2.tgz > mongo.tgz
tar xzf mongo.tgz

Por defecto MongoDB guarda los datos en /data/db pero es un fichero que no se crea automáticamente así que habrá que crearlo.
No obstante, sí, como era mi caso, no tenéis mucho espacio en la partición raíz de vuestro servidor, sugiero hacer un enlace y listos. Por ejemplo:

ln -s /expert/htwebs/mongodb /data
cd /expert/htwebs/mongodb
mkdir db

Aunque también se le puede indicar a MongoDB que use un directorio distinto con la opción –dbpath

/usr/bin/mongodb/bin/mongod --dbpath=/expert/htwebs/mongodb/db

Bueno, pues ya lo tenemos instalado, para levantar la base de datos:

/usr/bin/mongodb/bin/mongod

Y ahora vamos con las instalado de PHPMongo. La información está sacada de la página de php.net.

tar zxvf mongodb-mongo-php-driver-1.2.6-83-gcdb8c36.tar.gz
cd mongodb-mongodb-php-driver-
phpize
./configure
sudo make install

Una vez instalado editamos el php.ini y añadimos la extensión de mongo.

vi php.ini
extension=mongo.so

Localizamos el extension_dir de nuestro php.ini y movemos allí mongo.so

extension_dir = "/usr/local/lib"
mv /usr/local/lib/php/extensions/no-debug-non-zts-20060613/mongo.so /usr/local/lib

Reiniciamos el apache y si hacemos un phpinfo(); ya deberíamos ver el módulo de MongoDB instalado

/usr/local/apache2/bin/apachectl graceful

En el próximo post daré algunas notas del manejo básico de MongoDB que es muy sencillo.

Técnicas de crawling (3ª Parte) – CURL vía Proxy

Técnicas de crawling (3ª parte) - CURL vía ProxyEn esta última parte de “Técnicas de crawling” quería compartir un script para aquellas veces que los servidores a los que hacemos las peticiones tienen limitaciones en cuanto a número de peticiones por X tiempo por cada IP. O para aquellos que simplemente nos bloquean el acceso a una IP determinada.

Para ello podemos utilizar la misma opción de CURL que en la vez pasada pero añadiendo la opción de que accedemos a través de un proxy. Lógicamente tenemos que tener un listado de proxys y sus puertos para poder hacer una petición con éxito. Hay varias webs con listados de proxys, por ejemplo: http://hidemyass.com/proxy-list/

La función es muy sencilla y prácticamente idéntica a la anterior

function descarga_proxy($parametros){
  //En este fichero tenemos el listado de ip´s de proxys y su puerto. Ej 127.0.0.1:8080
  $listProxy = file('proxylist.txt');
  $proxy = $listProxy[array_rand($listProxy)];
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
  curl_setopt($ch, CURLOPT_POSTFIELDS,'post_variables');
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  //Aquí añadimos la opción del proxy
  curl_setopt($ch, CURLOPT_PROXY, $proxy);
  curl_setopt($ch, CURLOPT_COOKIEJAR, str_replace('\\','/',dirname(__FILE__)).'/file_cookies.txt');
  curl_setopt($ch, CURLOPT_COOKIEFILE, str_replace('\\','/',dirname(__FILE__)).'/file_cookies.txt');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)");
  $data = curl_exec($ch);
}

Técnicas de crawling (2ª Parte) – CURL

Técnicas de crawling - 2ª Parte - CURLEn la primera parte de “Técnicas de crawling” hemos utilizado la función file_get_contents para guardar en $texto el contenido íntegro de la página a buscar.
Sin embargo, en ocasiones , el servidor destino puede no aceptar una petición o bien necesitamos simular un proceso de registro o guardado de cookies.
Para todo esto usamos CURL. Aquí un script básico para loguearse en Linkedin y coger por ejemplo mi página del muro de Linkedin.

function download_linkedin($loginEmail, $loginPass){
  $ch = curl_init();
  //Accedemos a la página de login y enviamos los parámetros necesarios
  curl_setopt($ch, CURLOPT_URL, 'https://www.linkedin.com/secure/login');
  curl_setopt($ch, CURLOPT_POSTFIELDS,'csrfToken=ajax%3A7770961518878939486&session_key='.$loginEmail.'&session_password='.$loginPass.'&session_login=Ingresa&session_login=&session_rikey=');
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_COOKIEJAR, str_replace('\\','/',dirname(__FILE__)).'/linkedin_cookies.txt');
  curl_setopt($ch, CURLOPT_COOKIEFILE, str_replace('\\','/',dirname(__FILE__)).'/linkedin_cookies.txt');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)");
  curl_exec($ch);

  //Accedemos a mi muro de Linkedin
  curl_setopt($ch, CURLOPT_URL, 'http://www.linkedin.com/home?trk=hb_logo');
  curl_setopt($ch, CURLOPT_COOKIEJAR, str_replace('\\','/',dirname(__FILE__)).'/linkedin_cookies.txt');
  curl_setopt($ch, CURLOPT_COOKIEFILE, str_replace('\\','/',dirname(__FILE__)).'/linkedin_cookies.txt');
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)");
  $myProfile = curl_exec($ch);
  $actualizaciones = str_replace('data-contentPermalink','mipermalink',$actualizaciones);
  $err = 0;
  $err = curl_errno($ch);

  //Comprobamos errores y si no los hay guardamos en un fichero el html resultante.
  if ($err != 0){
    echo 'error='.$err."\n";
    return(false);
  } else {
    $file1 = "/myProfile.html";
    $archivo1 = fopen("$file1","w");
    fwrite($file1,$myProfile);
    fclose($file1);
    return(true);
  }
  curl_close($ch);
}

Técnicas de crawling (1ª parte) – Procesos con hijos

Técnicas de crawlingHola de nuevo. Esta vez me voy a adentrar un poco en parte de lo que es mi mundo habitual en mi trabajo, la recogida masiva de datos.

Simpelemente voy a tratar de dar tres pinceladas de técnicas de crawling por si a algún paracaidista de mi blog le pueden venir bien en un futuro estos scripts.

La primera de ellas es un proceso de recogida masiva de url´s en PHP partiendo de que tenemos dichas url´s almacenadas en BD. Aunque también podrían formar parte de un array o cualquier otra colección. Y en dichos procesos para “librar” en cierto modo la secuencialidad de un PHP sencillo, lo mejor es establecer procesos hijos de un padre para ganar en tiempo, siempre y cuando el procesador de la máquina nos lo permita.

//Primero establezco un timeout para servidores lentos
$context_http = stream_context_create(Array('http' =>Array('timeout'=>15)));
$datos = Array();
$z = 0;
//Añadimos todos los parámetros necesarios en el array mediante un bucle de consulta a BBDD
$query = "select url from tabla";
$res = mysql_query($query) or die("Query failed: $query");
while($row = mysql_fetch_array($res)){
  $datos[$z]['url'] = $url;
}

//Ejecutamos un bucle con el listado de valores
foreach($datos as $z=>$valores){
  $pid = pcntl_fork();
  if($pid == -1) die('could not fork');
  elseif($pid) $procesos[] = $pid;
  else {
    echo 'Hijo->' . $z . " - " . date('H:i:s') . "\n";
    $texto = @file_get_contents($url,false,$context_http);
    exit;
  }
}

Evolución de la prensa online en el siglo XXI

Prensa digitalVuelvo a la carga en mi blog con aquellos aspectos que cada cierto tiempo rondan mi cabeza. Y esta vez le toca un repaso histórico y nostálgico a la prensa online.

Por mi trabajo en Iconoce (http://www.iconoce.com) e Iconoce Sentio, me ha tocado estar pegado a la actualidad de la prensa online durante los últimos 10 años. Y el panorama ha cambiado, vaya si lo ha hecho. Todavía recuerdo con algo de nostalgia aquellos primeros diarios con un html infinito. Con su menú izquierdo, su parte central, su menú derecho. Y cuantos más contenidos mejor. Parecía que cuanto más bajara el scroll de la página mejor periódico era. Eso sí cuidando el tamaño del html que los módems de aquellos tiempos no soportaban cualquier cosa.

Pero poco a poco el diseño y la organización inteligente de los contenidos fue ganando mucho peso. La usabilidad pasó de ser un palabro raro a ser el leit motiv de todo periódico online que se preciara. Y surgieron las redacciones online. Ya no valía con volcar exclusivamente el periódico, había que crear. En este tema uno de los precursores en España fue El Mundo. El diario del polémico Pedro J llevó la voz cantante en la prensa online española durante mucho tiempo.

A principios de la década pasada todavía existía algún gran grupo de comunicación que no había volcado su publicación escrita a internet. El argumento de que internet se iba a cargar a la prensa escrita era poco menos que una profecía de Nostradamus. Y todavía hoy sigue vigente esa amenaza que en parte se ha convertido en realidad.

Pero poco a poco fueron surgiendo estrategias de pago por contenidos. Se desató una guerra mediática por este asunto y por ganar la guerra de las audiencias en internet. Los grandes medios generalistas, lease El País o El Mundo se enfrascaron en esa guerra y se fueron sucediendo varios intentos de pago por contenidos que siguen hasta la fecha (hablaremos más tarde de este asunto).

Cambios de formatos
Y en cuestión de formatos también han acaecido muchos cambios. Tras el html plano, empezó la revolución del flash. Gráficos, animaciones y diseños innovadores fueron poniéndose de moda. Hasta el punto de que varios periódicos se publicaron durante mucho tiempo en formato flash. Quién no recuerda ese formato flash tipo catálogo del supermercado y que todavía subsiste en algún medio como el Alerta Cantabria (http://www.eldiarioalerta.com). Me parecía un sistema muy gráfico, pero no triunfó y en gran parte por la imposibilidad de indexación de los contenidos. Porque ¿qué decir de los contenidos y de la estrategia de los titulares impactantes?. Aparecer en las primeras posiciones de San Google ha provocado quizás una simplificación del arte periodístico y una búsqueda del impacto y el click con el titular, más allá del hecho puramente informativo. Pero bueno, eso sería harina de otro costal…

En cuanto a los formatos también se popularizó el uso de RSS por parte de los medios. La masiva popularización de los agregadores de RSS provocó que la gran mayoría de medios se apuntaran al servicio de los RSS.

Hoy en día la guerra parece apuntar a los nuevos formatos digitales de consumo (smartphones, tabletas, etc…). Las grandes cabeceras del país, con los grupos Vocento, Prisa y Zeta a la cabeza se han metido en el negocio de Kiosko y Mas. En el bando contrario El Mundo, Expansión y Marca entre otros integran la plataforma Orbyt. La primera se limita a una laaaaarga serie de pdf’s de las más variadas publicaciones que tienen una calidad excepcional en su visualización en tabletas. Orbyt va un poco más allá y permite una plataforma de navegación con muchas más funcionalidades que la mera lectura. Pero su abanico de publicaciones es menor. En cualquiera de los dos casos se trata de plataformas de pago que esperan como agua de mayo poder rentabilizar su negocio a través de los nuevos soportes tecnológicos. ¿Lo conseguirán?. He visto ya muchos fracasos en el pago por contenidos como para augurarles un buen destino.

Y hablando de fracasos, durante estos 10 años de experiencias he asistido a un gran número de aperturas de medios online y también a numerosísimos cierres que creo que ya desgranaré en algún post más adelante.

El futuro de las comunicaciones sociales digitales. ¿La interacción por voz?

Interacción por vozDesde mi experiencia de más de 12 años conectado a internet he vivido ya varias formas de comunicación interpersonal a través de medios digitales.

En este proceso de comunicación empecé por el e-mail, para pasar al messenger, blogs, foros, para acabar hoy día utilizando las anteriores más Twitter y a veces Facebook y Linkedin. Y cuando me pongo a pensar en cuál será la siguiente forma de comunicarme, habitualmente me surge la misma necesidad: la interacción por voz.

Las tecnologías de reconocimiento de voz han avanzado que da gusto y creo que no tardaremos mucho en ver esto implementado en varios gadgets como teléfonos móviles o tabletas. Me gustaría que llegara el día en que mientras yo esté conduciendo de vuelta del trabajo pueda, mediante comandos de voz, activar el móvil, transmitir lo que quiero publicar y dictarle la orden al dispositivo de:
* “Publicar Twitter”
* “Postear muro Facebook”
* “Enviar e-mail”.
¿A que suena bien? ;-)

Y no ya solo cuando tenemos las manos ocupadas en otro quehacer, sino también me sucede muchas veces que el hecho de sacar el móvil, buscar la aplicación y comenzar a teclear lo que quiero publicar me supone una “pereza” que descarta muchas de las ideas que quiero expresar. Quizás parezca excesivamente “vago”, pero creo que todos en mayor o menor medida agradecemos cualquier ahorro de esfuerzo y muchos de los avances tecnológicos van encaminados precisamente a hacernos la vida más cómoda.

Personalmente me surgen ideas que me gustaría compartir constantemente: cuando como o bebo algo que me gusta, cuando voy a algún sitio que me llama la atención, cuando acabo de salir de una película o concierto. Y en todas estas circunstancias muchas veces me veo cohibido de publicar esos tweets solo por no interrumpir una charla entre amigos, para que no me digan eso de “¡deja el móvil ya!” o por no pararse un minuto a sacar el móvil, buscar la aplicación y, sobre todo, TECLEAR…

Creo que el servicio (Twitter, Facebook o el que venga mañana) que sea capaz de ofrecer esta funcionalidad de manera sencilla y eficaz tendrá mucho ganado en la batalla por la supremacía del mundillo internet y las comunicaciones. Es posible que ya existan ciertas aplicaciones que ofrezcan parte de este servicio (por ejemplo Dragon Dictation), pero al menos un servidor aún no ha visto una tan completa que esté ya implementada y funcionando. Esperaré ansioso.

Eventos Web y Social Media: productivos, pero mejorables…

Congreso Web Zaragoza

Congreso Web Zaragoza

Recientemente he tenido la oportunidad de asistir a varios eventos de esta temática (Web y Social Media) y vaya por delante que me parece que este tipo de actos terminan siendo muy productivos, pero creo que hay varias facetas susceptibles de mejora y las voy a detallar.

INFRAESTRUCTURA
Lo primero de todo, estos eventos deben contar con una infraestructura mínima. A saber, una buena conexión a internet, una wifi estable y gratuita, un enchufe por persona, una mesa y silla cómodas y un aforo limitado en algunos casos.

PREPARACIÓN
Considero que en estos congresos el asistente debe estar obligado a hacer un trabajo previo. Es decir, si por ejemplo me apunto a un taller de programación para iphone o android, quizás sea procedente que todos los asistentes acudan con un mac-book o un portátil en cada caso, con x programas instalados, con móviles para probar las aplicaciones y con una hoja de ruta establecida previamente y que el asistente esté obligado a leer.

ESPECIALIZACIÓN
Estos actos reúnen personas de muy distinta tipología y experiencia profesional, ahí reside parte de su encanto pero eso tiene también su peligro. Tiene el peligro de que nunca ninguna charla va a contentar a todo el público, quizás ni siquiera a una mayoría. Las expectativas sobre las charlas o ponencias van muy vinculadas a lo que profesionalmente puedas sacar de esos actos. Se juntan programadores, diseñadores, emprendedores, community managers,… es decir, una gran amalgama de personas que esperan cosas distintas de la misma charla. En definitiva creo que hay que especializar mucho más  ciertos eventos. Si bien quizás no el evento entero (porque pierde esa gracia que antes comentaba), sí especializar muy mucho las distintas áreas dentro de un mismo evento.

CONECTORES
Esta idea me la dio mi amigo Jordi Martí (@itortv) porque ellos la aplican en los eventos que organiza su empresa (The Init). En este tipo de actos la gente viene a aprender y a buscar contactos profesionales. La organización debería contar con “CONECTORES”, que no dejan de ser personas que van preguntando en los pasillos o corrillos que se forman a qué se dedica cada uno y qué busca. Y es este conector quien les indique aquellas personas con las que creen que deberían ponerse en contacto. Simple y efectivo.

PARTICIPACIÓN
En todos los eventos queremos escuchar la opinión de los/as ponentes/as pero hay que fomentar cuasi-obligatoriamente la participación de los asistentes. Bien sea con preguntas participativas cuando proceda, con ejercicios prácticos, con tests, etc. Debemos terminar las charlas con la sensación de que hemos sido parte del acto y que hemos sacado algo personal de ello.

ERRORES A EVITAR
Y también creo que hay cuestiones básicas a evitar y que, por desgracia, se repiten recurrentemente:
* Hay que evitar las charlas clónicas. Estos actos se repiten cíclicamente por toda la geografía española y es fácil que acudas a tres congresos y escuches las mismas charlas con las mismas diapositivas y las mismas explicaciones.
* Hay que tratar de que los ponentes sean buenos en su campo profesional, que nos puedan enseñar algo, pero que sean a su vez buenos comunicadores. No vale con saber mucho, sino que hay que saber explicarlo también.
* El asistente sí puede tener, dependiendo del evento, la oportunidad de vender “su libro” (me refiero a vender su empresa o proyecto), pero creo que no debería hacerlo el ponente casi en ninguna circunstancia.

Pero no quiero terminar sin insistir en lo que apuntaba al principio. Este tipo de eventos termina siendo realmente positivos, pero muchas veces lo son más, por las conversaciones informales que se producen en los pasillos que por las propias charlas, ponencias o talleres.

Porqué me gusta tanto Twitter

twitter-logoComo decía en mi presentación voy a hablar de Twitter, el que ha sido para mí el gran descubrimiento del último año. No pretende ser ningún análisis exhaustivo sobre una aplicación que casi todos conocéis, solo mi visión particular.

Como muchos me registré en el pajarito por probar. De hecho mi primer ingreso data de Enero del 2010, pero no fue hasta mediados de ese año cuando le empecé a dar verdadero uso.

Al principio no le veía la “gracia”. Mensajes cortos con tu red, ¿para qué?. Creo que todavía no conocía el significado de red.
Una vez que defines tus intereses (en mi caso era un interés profesional) hay que ser muy proactivo en la búsqueda de los mejores a los que seguir. Ojo, no confundir los mejores con los que tienen mayor número de followers, sino los que más se ajustan a tus intereses o filias personales.

Cuando consigues quitarle el miedo a los primeros tweets y cuando acumulas personas para esa red y filtras a aquellos que realmente te interesan, se convierte en casi una adicción. No hay día que no dedique un buen rato a curiosear en mi “timeline” y obtener referencias de muchos temas interesantes. A ello ayuda también mucho mi reciente adquisión de un smartphone. Creo que ambas plataformas casan a la perfección. Pequeños textos para una pantalla pequeña y manejable.

Pero ¿por qué?, ¿por qué me gusta tanto?.

* Me ha permitido “conocer”, primero virtualmente y luego “desvirtualizando” en la realidad a grandes profesionales de mi sector empresarial
* Me ha permitido “charlar” con toda esa gente e intercambiar experiencias que en otro ámbito o por cualquier otra vía serían muy difíciles
* Me gusta porque es poco intrusivo. Tú dejas ahí tu comentario y quien quiera que lo lea, lo comente o lo que sea. Si no, caerá por su propio peso
* Es dinámico, exige atención si lo quieres abarcar todo, pero las opciones de localización son tan amplias que no tiene porque escaparse nada
* Y luego ya en el plano más de desarrollador, es tan tan tan fácil manejar y comprender la API de Twitter, ya podía ser así Facebook… Y eso que oigo voces que dicen que la API se va a volver más restrictiva y privativa, lo cual me parecería un grave error por su parte.

Pero no todo iban a ser pros, también hay algún contra. Desde hace algún tiempo vengo leyendo a distintas personas hablar de que hemos perdido cierta capacidad de análisis, de lectura sosegada de textos largos. Que nos centramos en pequeñas frases.
Y creo que es cierto, lo vengo notando últimamente. Me cuesta concentrarme en los textos de más de 4 ó 5 párrafos. Y para compensarlo trato de leerme todos los fines de semana un periódico casi entero en formato papel, que lo uno no quita lo otro.

Y para terminar dejo aquí este jocoso vídeo del blog de Alfredo Vela en el que una señora, “la conchi”, ilustra muy claramente lo que quiero decir. http://kcy.me/2ng2

El próximo post igual también lo dedico a hablar sobre la complicada relación de Twitter con los famosos. O quizás me meta en temas de ocio para hablar de mi gran pasión extra-profesional, el baloncesto.

Saludos

¡Comenzamos!

Hello World!. Qué típico, ¿verdad?. Pero bueno es una manera de empezar por fin mi propio blog. Tras mucho tiempo dándole vueltas y diciéndome a mí mismo que estaría bien plasmar en algún sitio todas esas cosas que me revolotean la cabeza, por fin me he decidido a dar el paso.

Y lo primero ha sido elegir con quién me “aliaba”: ¿Wordpress o Blogger?. Pero ahí está San Google que me localiza un par de enlaces http://www.electrorincon.com/%C2%BFwordpress-o-blogspot/2010-05 y http://blogandweb.com/blogs/blogs-guia-para-principiantes-ii-%C2%BFblogger-o-wordpress/ .

Saco la conclusión de que WordPress limita mucho la programación pero que si tienes un dominio propio donde poder subir toda la aplicación esa limitación desaparece. Hace un par de años ya gestioné un blog con Blogger y la verdad que las opciones de personalización eran más bien caóticas. Así que me acordé que tenía el dominio http://jorge.sarenet.es y me lancé a instalarlo allí y empezar a cacharrear.

Y aquí estamos (qué manía de hablar en plural mayestático!!!), aquí estoy divagando sobre mis aficiones y mi trabajo, que últimamente vienen a ser casi lo mismo. Y para empezar comenzaré disertando en el siguiente post sobre mi gran descubrimiento del último año: Twitter y por qué me gusta tanto.

Un saludo y bienvenid@s a mi humilde espacio de conversación. Agradeceré cualquier sugerencia sobre edición del blog o contenidos que me podáis ofrecer.