Archive for the '14908' Category

Jugando con Node.js, Ubuntu, Sqlite3 y node-Sqlite

Friday, February 4th, 2011

Hace unos días, estuve jugando con Node.Js, la librería Javascript que puede ser usada para crear aplicaciones web en el servidor. Como puede ser complicado instalarlo en Windows, lo instalé directamente en Ubuntu. Me bajé el código de:

http://nodejs.org/#download

Expandí el archivo, y pasé al directorio que quedó creado. Ahí ejecuté los pasos:

./configure
make
sudo make install

(Noten que es diferente de lo que indica una de mis fuentes consultadas Learning Server-Side Javascript with Node.js: agregué el .configure, nacido hace décadas debido a la necesidad de detectar en qué sistema se va a ejecutar el make; recuerdo aquellos tiempos donde sólo había make 😉

Hecho esto, instalé Sqlite3 en mi Ubuntu (no Sqlite, sino la versión 3):

sudo apt-get install sqlite3

En un directorio de trabajo para este proyecto, ejecuté:

sqlite3 test.db

Esta es una línea de comando (no hay servidor que se esté ejecutando; va directamente al archivo recién creado como test.db (si existe, usa el existente)). Luego, ingresé:

create table customers(id int, name varchar(30), address varchar(30));
insert into customers(id, name, address) values (1, ‘Customer 1’, ‘Address 1’);
insert into customers(id, name, address) values (2, ‘Customer 2’, ‘Address 2’);
insert into customers(id, name, address) values (3, ‘Customer 3’, ‘Address 3’);

Mi creatividad para los datos de test es proverbial 😉

Hay una lista de módulos para Node.js:

https://github.com/ry/node/wiki/modules

Quería usar el módulo de node.js llamado express, lo bajé desde Express. Lo expandí bajo mi directorio de trabajo, con nombre express (podría haberlo puesto en otro lado, y comenzar a probar la variable de entorno NODE_PATH, para que las referencias a ese módulo se resolvieran desde cualquier parte). En el directorio recién creado express, ejecuté:

./install.sh

Luego, descargué el código de node-sqlite, desde grumdig github. (Tengo que probar otra implementación: http://github.com/orlandov/node-sqlite, que tiene llamadas asincrónicas.).

Expandí lo bajado en un subdirectorio de mi directorio de trabajo, pasé a ese directorio, e intenté las instrucciones de instalación:

node-waf configure
node-waf build

Pero la segunda falló. El build del binding de c++ a Sqlite3 requiere el código fuente de Sqlite3 (no vi indicado en ningún lado eso, pero es así). Así que investigué un poco, y ejecuté:

sudo apt-get install libsqlite3-dev

volví a intentar la instalación de node-sqlite, y funcionó.

Nota, si no tienen un compilador c++, como puede pasar en un Ubunto de uso, no de desarrollo, tendran que traerlo con un sudo apt-get g++, por ejemplo. Hay varios compiladores c++ para elegir.

Luego de escribir unos ejemplos de prueba, escribí una aplicación simple (noten que los require se refieren a mi directorio de trabajo):

/**
 * Module dependencies.
 */
var express = require('./express/lib/express');
var sqlite = require("./node-sqlite/sqlite");
var sys = require('sys');
/*
 * Open the database
 */
var db = sqlite.openDatabaseSync("test.db");
/*
 * Creates the web server
 */
var app = express.createServer();
app.get('/', function(req, res){
  res.send('Hello World');
});
app.get('/customers', function(req, res){
  res.writeHead(200, { 'Content-Type': 'text/html' });
  db.query("SELECT id, name, address from customers", function (records) {
    res.write('<h1>Customers</h1>\n');
    res.write('<table>\n');
    for (var i = 0; i < records.length; i++) {
        res.write('<tr>\n');
        res.write('<td>' + records[i].id + '</td>\n');
        res.write('<td>' + records[i].name + '</td>\n');
        res.write('<td>' + records[i].address + '</td>\n');
        res.write('</tr>');
    }
    res.write('</table>\n');
    res.end();
  });
}); 
/*
 * Start web server
 */
app.listen(3000);

Ejecutando la aplicación, la página http://localhost:3000/customers resultó:

Bueno, no será “qué bruto, qué aplicación!” 😉 😉 pero espero que les sirva por si tienen que pasar por todos estos pasos.

Como siempre, colecciono enlaces. Mis enlaces sobre Node.Js:

http://delicious.com/ajlopez/nodejs

Mi plan: implementar un servidor web en AjSharp, mínima sombra de Node.js; seguir con Node.js con páginas CRUD de una tabla; probar el otro node-sqlite3 con llamadas asincrónicas; generar código para todo esto.

Nos leemos!

Angel “Java” Lopez

http://www.ajlopez.com

http://twitter.com/ajlopez

Ejecutando AjGenesis usando Mono y Ubuntu

Friday, October 15th, 2010

En estos días, estoy trabajando en el desarrollo de una nueva versión (reescritura completa) de una aplicación Java, con una interfaz web. Es un trabajo de equipo, donde la mayoría de los integrantes son fans de Ubunto: son más productivos trabajando en Linux. El proyecto tiene generación de código, usando (… jeje.. adivinien… 😉 AjGenesis, mi proyecto de código abierto, que genera el código y texto que nosotros necesitamos. Ahora, el equipo quiere ejecutar AjGenesis pero no en Windows.

AjGenesis está escrito en VB.NET, y compilado para .NET 2.0. Yo temía que tuviera que hacer cambios para ejecutarlo bajo Ubuntu usando Mono project. Pero estaba equivocado. Ubunto tiene Mono pre-instalado. Pero AjGenesis usa el runtime de VB.NET. Bien, Mono tiene VB.NET compiler. Lancé la terminal en mi Ubunto (albergado en Virtual Box con host Windows 2008), y ejecuté:

sudo apt-get install mono-vbnc

(Imagino que este paso es necesario, pero debería tratar de ejecutar AjGenesis con sólo Mono instalado. El bueno de @MartinSalias me avisa que ejecuta en MacOS sin bajar nada).

Después, bajé los compilados binarios de AjGenesis (compilados desde el trunk). Y bajé algunos ejemplos, comoe AppExampleStep06.zip (descripto en Building an Application using AjGenesis (Part 6)) (Armando una Aplicación usando AjGenesis (Part 6)).

Puedo ejecutar AjGenesis.Console.exe usando

mono AjGenesis.Console.exe

Luego, marqué el .exe como ejecutable:

chmod +xr- AjGenesis.Console.exe

y ahora, puedo ejecutarlo directamente:

El directorio Build fue creado! Notable!

Luego de este experimento, tomé el código del proyecto usando subversion, y ejecuté el script de generación de código. El único problema fue una de las tareas, escritas en AjBasic, que estaba creando directorios en minúsculas y luego usándolos con letras en mayúsculas. Arreglé ese error, y ahroa, la generación de código está corriendo. Los miembros del equipo podrán desarrollar tanto en Windows como en Ubunto, usando Java, Tomcat, Maven, y AjGenesis.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez