martes, 28 de febrero de 2012

node.js + socket.IO + mongoDB = real time apps (parte 1)




Parte 1: Preparando el ámbiente....

Hace unos días terminé una simple aplicación tweetland.com.ar que realicé con el objetivo de aprender (existe otro?) más sobre Node.js y mongoDB... en el camino también me topé con Socket.IO que es una gran librería para realizar aplicaciones en tiempo real.

Lo primero es preparar el ambiente, para ello primero descargamos node.js (desde su home page node.js), una vez descargado la instalación sigue los pasos tradicionales:
./configure
make
make install *
* este último como root
Una vez instalado, seguimos con la instalación de módulos. Para ello node cuenta con npm (que es Node Package Manager) que nos permite instalar los módulos con un simple comando npm install . Las instrucciones para instalar npm están en su home page, igualmente se las dejo:
curl http://npmjs.org/install.sh | sh
En este momento ya tenemos instalado tanto node.js como su manejador de paquetes npm. Por lo general lo que suelo hacer es crear un directorio, en mi caso lo llamo nodeapps, como workspace.
Ingreso al mismo:
cd "path to nodeapps"
y dentro de él comienzo a instalar los modulos que requiero. Esto es importante porque al instalar los modulos npm creará el directorio node_modules (siempre y cuando no exista antes), e instalará los modulos en dicho directorio.
Y esto es importante porque cuando dentro de nuestro código hagamos algo como:
var sys = require('sys');
node automáticamente buscará el módulo sys dentro de directorio node_modules en el directorio actual y de no encontrarlo seguira con la busqueda recursiva hacia arriba, por lo cual siempre es importante tener en mente donde se instalán los módulos que vamos a utilizar.

Antes de seguir adelante realicen la instalación de algunos módulos que utilizaran, estos son express, socket.io, mongoose .

Y este último módulo es justamente el que utilizaremos para interactuar con nuestra base de datos mongoDB, que es una base orientada a objetos (JSON), de alta performance y escalable. (en otro post explicaré un poco más como funciona ya que es una tecnología relativamente nueva y muy interesante).
Para realizar la instalación tenemos que descargar la versión que corresponda desde mongoDB download , y una vez descargada la descomprimimos

 pepo@sokol:~/DESARROLLO/POSTS/node_socket_mongo$ wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.2.tgz

2012-02-28 11:42:19 (1.06 MB/s) - `mongodb-linux-i686-2.0.2.tgz' saved [38157227/38157227]

pepo@sokol:~/DESARROLLO/POSTS/node_socket_mongo$ tar -xzf mongodb-linux-i686-2.0.2.tgz
Una vez descomprimido ya podríamos arrancar el servicio mongod y comenzar, pero antes prefiero crear la estructura de directorios que utilizaré con mi base, para eso creo dos directorios data y logs, el primero guardará los archivos de la base de datos y el segundo los archivos de logs. También creo el archivo de configuración con el que voy a levantar el servicio, en mi caso tiene la siguiente forma:
cat mongod.config 

dbpath = /home/pepo/nodeapps/data/
logpath =/home/pepo/nodeapps/logs/mongodb.log
bind_ip = 127.0.0.1
noauth = true 
verbose = true 
 La opción bind_ip está configurada para que sólo escuche las peticiones sobre el localhost (ya que por defecto lo hace sobre todas las interfaces) e indicamos que no tendremos autenticación y configuramos el verbose.

Para levantar el servicio simplemente ejecutamos:
bin/mongod --config mongod.config *
* Dentro de directorio descomprimido de mongoDB

Y veremos algo como:
 # mongodb-linux-i686-2.0.2/bin/mongod --config mongod.config 
all output going to: ./logs/mongodb.log

Por último para probar  el servicio ingresamos de la siguiente forma (siempre desde el directorio de binarios de mongoDB):
pepo@sokol:bin$ ./mongo
MongoDB shell version: 2.0.2
connecting to: test
> show dbs
local    (empty)
Bueno, y con esto ya tenemos nnuestro entorno instalado y configurado para comenzar a programar aplicaciones en con node.js con mongoDB, pero eso quedará para la próxima....

  

domingo, 12 de febrero de 2012

5 buenas herramientas para probar sitios móviles

En este tiempo de diversas resoluciones de pantallas es cada vez más importante poder contar con buenas herramientas para probar facilmente como se un sitio en diferentes dispositivos, en este link les dejo 5 muy buenas herramientas que facilitan esa tarea.

http://bit.ly/xA20TT