September 19th, 2010
node.js es un proyecto en constante evolución, permanentemente se liberan versiones nuevas y el manejo de las mismas puede volverse un tema molesto, para lidiar con este problema podemos usar nave, el cual nos permite instalar, remover y seleccionar que versión de node.js usar por default, un concepto muy familiar si han utilizado rvm en ruby.
Para instalar nave podemos usar npm
# Instalando nave y sus dependencias vía npm
npm install nave
A continuación podrán ver el listado de opciones de nave y un ejemplo de lo fácil que es cambiar entre versiones de node.js
- install Install the version passed (ex: 0.1.103)
- use Enter a subshell where is being used
- use Enter a subshell, and run “node “, then exit
- usemain Install in /usr/local/bin (ie, use as your main nodejs)
- clean Delete the source code for
- uninstall Delete the install for
- ls List versions currently installed
- ls-remote List remote node versions
- ls-all List remote and local node versions
- latest Show the most recent dist version
- help Output help information

September 1st, 2010
En el repo de TJ Holowaychuk ya se encuentra disponible el primer draft del ebook Mastering Node, el cual va cubrir todos los aspectos fundamentales de node.js, ademas de temas como testing, deployment y frameworks de desarrollo como Express, aunque al ser un proyecto comunitario y open source es posible que se puedan ir agregando nuevos tópicos en el futuro.

August 30th, 2010
Nodul.es es un indice que agrupa todos los módulos disponibles para node.js, en el podemos buscar módulos por nombre, por autor o por categoría, pudiendo ver las dependencias de los mismos e instrucciones para la instalación.


Nodul.es nació dentro del Node Knockout, el mismo acaba de terminar y en este link pueden ver la lista de los demás proyectos presentados.
August 13th, 2010
Basándome en el bundle para Textmate creado por Tj Holowaychuk, modifique y adapte esta serie de snippets para Gedit que pueden bajar desde mi repo en github.
- al – addListener()
- ar – assert.response()
- c – comment
- cd – process.chdir()
- ci – clearInterval()
- cl – console log
- compile – process.compile()
- cs – concat string
- ct – clearTimeout()
- cwd – process.cwd()
- emit – emit()
- exit – process.exit()
- i – sys.inherit()
- kill – process.kill()
- md – module dependencies
- nt – process.nextTick()
- ok – Object.keys()
- p – require(‘sys’).puts(require(‘sys’).inspect(obj))
- r – require()
- rf – fs.readFile()
- rfs – fs.readFileSync()
- se – setEncoding()
- sgid – process.setgid()
- si – setInterval()
- st – setTimeout()
- suid – process.setuid()
- te – throw new Error()
- try – try catch block
- um – process.umask()
- ver – process.version
Download node.js snippets for Gedit.
August 13th, 2010
Desde su aparición, Sinatra, ha despertado la admiración de mucho, no solo de aquellos que trabajan con Ruby, sino de developers de otros lenguajes que han decidido crear micro frameworks Sinatra like para utilizar en su lenguaje favorito y portar su filosofía a otros ámbitos, en node.js tenemos a Express, el mismo esta madurando rápidamente y esta recibiendo mucho apoyo de la comunidad.
Instalación
Hay varias opciones para instalar Express, la primera opción es instalarlo desde su instalador online corriendo el siguiente comando.
$ curl http://expressjs.com/install.sh | sh
# Si necesitamos permisos adicionales
$ curl http://expressjs.com/install.sh | sudo sh
La segunda opción es usar npm (node package manager), el cual es conveniente instalar ya que muchos módulos y frameworks para node.js lo están usando como medio de distribución.
# Instalando Express y sus dependencias vía npm
$ npm install express
La ultima opción es clonar el repo de github y compilarlo.
$git clone git://github.com/visionmedia/express.git
#Actualizamos los sub modulos
$ git submodule update --init
#Compilamos
$ make install
Hello World
Vamos a comenzar con un ejemplo simple, si ven el código a continuación verán que lo primero que hacemos es cargar el modulo express, creamos un server que por convención son llamados apps, luego crearemos la ruta, la misma puede consistir en un string o en una expresión regular, seguimos con una callback y un metodo HTTP, en el ejemplo usamos un metodo GET que apunta a / y cuyo callback dispara la función que nos devuelve el Hello World.
var express = require('express'),
app = express.createServer();
app.get('/', function(req, res){
res.send('Hello Worldn');
});
app.listen(3000);
Si todo sale bien, deberíamos de ver algo así.

Otro ejemplo
Ahora pasemos a un ejemplo un poco mas complejo, en el mismo usaremos un archivo con un array JSON el cual hará de datasource.
[
{ "name": "Minke" },
{ "name": "Lidewij" },
{ "name": "Eva" },
{ "name": "Helen" },
{ "name": "Wieke" },
{ "name": "Fatima" }
]
El código del ejemplo comienza cargando el modulo Express y el modulo fs encargado de acceder al file system, levantamos el server, parseamos el datasource y lo asignamos a una variable, seguimos creando las rutas, el modelo, otra ruta para / la cual mostrara las instrucciones de uso y por ultimo le decimos a nuestra app que se quede escuchando en el port 3000.
var express = require('express'),
fs = require('fs');
var app = express.createServer();
var players = JSON.parse(fs.readFileSync('players.json', 'utf8'));
app.resource = function(path, obj) {
this.get(path, obj.index);
this.get(path + '/:id', obj.show);
};
var Player = {
index: function(req, res){
res.send(players);
},
show: function(req, res){
res.send(players[req.params.id] || { error: 'player not found' });
}
};
app.resource('/players', Player);
app.get('/', function(req, res){
res.send([
'<p>GET /players</p>',
'<p>GET /players/1</p>',
].join('n'));
res.end();
});
app.listen(3000);
Es hora de correr y probar el ejemplo, primero intentemos obtener todos los registros.
# Muestra la totalidad de los registros
$ curl http://localhost:3000/players/

Ahora probemos traer un registro especifico.
#Devuelve el nombre del registro 3
$ curl http://localhost:3000/players/3

Recursos
- Express (High performance, high class web development for Node.js)
- Express (github repo)
- npm (node package manager)
- kiwi (otro node package manager para node.js)