sábado, septiembre 30, 2006

Instalación de WEKA en Linux


WEKA es un programa hecho en Java para realizar Data Mining (Minería de Datos). Mi intensión no es explicar qué es la minería de datos, pero para dar una definición rápida podría decir que Data Mining es el proceso mediante el cual se explora grandes volúmenes de datos en busca de patrones interesantes para el usuario del conocimiento.
Lo que mostraré a continuación es cómo se instala esta herramienta en Linux (Ubuntu Dapper).

Primero tenemos que instalar el paquete sun-java5-jdk (se encuentra en el repositorio multiverse), el cual contiene las herramientas para desarrollo, aparte de la máquina virtual y demáses. Nos cambiamos a superusuario y ejecutamos lo siguiente:

apt-get install sun-java5-jdk

luego debemos decirle a Linux que lo utilizaremos

update-alternatives --config java

aparecerá entonces una lista en dónde se encuentra java... nosotros tenemos que escoger entonces:

/usr/lib/jvm/java-1.5.0-sun/jre/bin/java

En este punto hay que tener ojo, ya que esta es la versión que se puede instalar ahora, pero despues lo más probable es que cambie a java-1.5.8, etc.

Luego hay que descargar WEKA desde la página:

http://www.cs.waikato.ac.nz/ml/weka/

y seguir las instrucciones, es decir:

  1. descomprimir el archivo zip que bajaremos
  2. entrar al directorio en dónde se descomprimió el archivo
  3. salir del modo superusuario (porque de lo contrario habrá un error ya que se intentará abrir una ventana del root en una sesión de un usuario)
  4. ejecutar java -jar weka.jar

Y listo!!!

jueves, septiembre 21, 2006

Web Services y MySQL


Continuando con la línea de los WebServices .NET en Linux, les mostraré cómo interactuar con MySQL. Asumiré que ya se tiene un servidor de base de datos operativo en el mismo computador y que obviamente se sabe SQL.
El código relacionado es el siguiente:

using System;
using System.IO;
using System.Data;
using ByteFX.Data.MySqlClient;
using System.Web.Services;

[WebService(Namespace="http://localhost:8080",Description="Un WebService con base de datos MySQL")]
public class MiServidor : System.Web.Services.WebService
{
[WebMethod(Description="Entrega el cargo dando el nombre")]
public string Obtener_cargo(string nombre)
{
string cargo="";
string connectionString = "Server=localhost;" +
"Database=personal;" +
"User ID=root;" +
"Password=mi_password;" +
"Pooling=false";
IDbConnection dbcon;
dbcon = new MySqlConnection(connectionString);
dbcon.Open();
IDbCommand dbcmd = dbcon.CreateCommand();
string sql =
"SELECT cargo FROM personas WHERE nombre = '" +
nombre + "'";
dbcmd.CommandText = sql;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read()){
cargo = (string) reader["cargo"];
}
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
return cargo;
}
}

La base de datos, para este caso, se llama personal, el UserID es el superusuario, y la password es el que tiene el superusuario en la base de datos.
Noten que el using que permite realizar la conexión con la base de datos MySQL es ByteFX.Data.MySqlClient y que es importante incluir, igualmente, el System.Data.
Para Compilar se debe colocar lo siguiente:

mcs –t:library –r:System.Web.Services,System.Data,ByteFX.Data –out:MiServidor.dll MiServidor.cs

domingo, septiembre 17, 2006

Parches para Windows Messenger


Para aquellos que les molesta, tanto como a mi, todas esas cosillas extras que tienen los messenger de Windows (Propagandas, pestañas, logos, etc.) y quieren agregar múltiples sesiones (que en un mismo computador se pueden colocar varias sesiones con un único messenger), les paso el dato de la siguiente página. Yo pude probar un parche de ahí y me funcionó perfecto.... Lo único es que está en inglés, así que tendrán que poner en práctica ese idioma.

http://apatch.ikhost.com/

lunes, septiembre 11, 2006

Montar imágenes ISO en Linux

Muchas veces tenemos imágenes ISO en nuestro computador las cuales no queremos quemar (grabar) en un CD, pero que sin embargo, queremos utilizar. Para hacer esa gracia en Windows, tenemos que instalar programas, pero en Linux eso es mucho más fácil basta con que hagamos lo siguiente:

mount -o loop "Nuestra_Imagen_ISO.iso" "lugar_de_destino_en_algún_directorio"
Ejemplo: mount -o loop tareas_anio_2006.iso /media/cdrom

sábado, septiembre 09, 2006

Aplicación Windows - Web Service Linux


En el Post anterior comenté como crear un Web Service en Linux bajo Mono y XPS. Considero que lo mejor que se puede hacer, por el momento en .NET bajo Linux, son los Web Service, dado que se pueden reducir mucho los costos (porque si queremos ser legales, no sale económico para una empresa tener que colocar un software original de Windows Server junto a todas las cosillas que vende Microsoft para sacarle dinero a sus clientes). Desarrollar otro tipo de aplicaciones de .NET en Linux son engorrosas, por eso que, aunque se puede desarrollar algo interesante bajo Linux, yo sugiero seguir usando Visual Studio por su robusta IDE.
A continuación muestro cómo comunicar una aplicación hecha en Visual Studio con el Web Service hecho anteriormente:

Para establecer comunicación con el Web Services creado en Linux, se debe agregar la referencia del Web Service al programa o aplicación que estamos creando. Para eso basta que se presione el botón encima de “Referencia Web”, que se encuentra en el editor de Proyectos del Visual Studio, y se seleccione “Agregar Referencia Web”. Entones se abrirá la siguiente ventana:




En la parte de URL se colocará la dirección de nuestro servicio Web, es decir, http://(dirección_ip):(nuestro_puerto)/web/(nombre_nuestro_servicio).asmx
En la parte de “Nombre de referencia Web” se coloca el nombre que queremos darle a nuestro servicio, de manera de ser reconocido por nuestra aplicación (programa).
En este caso haré funcionar el Web service que ya creé. El siguiente Window Form me ayudará en esto:



Con el siguiente código asociado:

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void btn_sumar_Click(object sender, System.EventArgs e)
{
int a = int.Parse(txt_a.Text);
int b = int.Parse(txt_b.Text);

MiServicio.Sumador nuevo_servicio = new MiServicio.Sumador();

int r = nuevo_servicio.Add(a,b);
lbl_sumador.Text = r.ToString();

}


Fíjense que dentro de mi aplicación llamé MiServicio a mi Web Services, luego se llama al método Add de la Clase Sumador. Recuerden que este método suma dos enteros pasados como parámetros. Cabe destacar que el botón de mi aplicación se llama btn_sumar.
PD: Obviamente aquí no se muestra la otra parte del código creado automáticamente por el Visual Studio.

viernes, septiembre 08, 2006

Web Services .NET en Linux


Una de las tecnologías emergentes dentro de la computación son los llamados Web Services, los cuales son Servicios que se proveen a través de internet. Algunos incluso han dicho que la nueva filosofía de programación será orientada a Servicios.... bueno.... yo no sé si eso será tan así (pregunten al grupo Gartner para eso, jajajaja), pero de todas maneras es bueno saberlo.
.NET es una tecnología que fué introducida por Microsoft para dar respuesta a esta y a otros muchos tipos de aplicaciones. Inicialmente sólo funcionaba en máquinas de Microsoft, sin embargo (y menos mal), fueron liberados el CLR (Common Lenguaje Runtime) y el compilador de C# lo que ayudó que otros sistemas operativos, como mi querido Linux, pudieran utilizar estas tecnologías.
A continuación les presentaré cómo se puede colocar un pequeño Web Service en Ubuntu Linux utilizando la tecnología .NET

Se ocuparán las siguientes herramientas:

  1. Mono: Plataforma que provee el software necesario para desarrollar y ejecutar aplicaciones .NET en programas clientes y servidores en Linux, Solaris, MacOSX, Windows y Unix. Paquetes necesarios:
    mono
    mono-jit
    mono-assemblies-base
    mono-mcs
  2. Servidor de páginas XSP: Un servidor http muy liviano escrito en .NET. Paquetes necesarios:
    mono-xsp (NO mono-xsp2, porque levantaremos un WebService en ASP.NET 1.0 y no en 2.0)

Para instalar todos estos paquetes basta seleccionarlos en el gestor de paquetes Synaptic (Ubuntu) o Adept (Kubuntu).
Luego se debe crear un directorio en dónde se guardara nuestro WebService. En este caso se escogerá /var/www/web. En el editor de texto preferido se agregará el siguiente código en /etc/xsp/debian.webapp:

<apps>
<web-application>
<name>web</name>
<vpath>/web</vpath>
<path>/var/www/web</path>
</web-application>
</apps>

Ahora hay que levantar el servidor xsp. Debemos ir a la carpeta /var/www/web y colocar xsp. Si en este punto ustedes colocan en su navegador web http://localhost:8080/web/ encontrarán que aparece el ERROR 404 (u otro error). No se preocupen, ese es un buen indicio, ya que significa que está corriendo nuestro servidor, pero que no encuentra la aplicación (eso es obvio ya que todavía no se ha puesto ninguna aplicación).
Lo siguiente que debemos hacer es crear la página asmx, la cual contendrá nuestro WebService. Esta página se dejará en el directorio /var/www/web. El archivo creado se llama Sumador.asmx

<%@ WebService Language=”C#” Class=”Sumador” %>

Las propiedades definen el lenguaje en que está escrito el WebService y el nombre de la clase principal respectivamente.
Ahora hay que crear la clase Sumador.cs. Esta clase no importa en dónde se dónde se cree y se compile, sin embargo, por convención lo haremos en el mismo directorio /var/www/web.
El nuevo Sumador.cs se deberá ver de la siguiente manera:

using System;
using System.IO;
using System.Web.Services;

[WebService(Namespace="http://localhost:8080",Description="Un WebService Simple")]
public class Sumador : System.Web.Services.WebService
{
[WebMethod(Description="Hace la Suma")]
public int Add(int primer_numero, int segundo_numero)
{
return primer_numero + segundo_numero;
}
}

Luego este programa se compila:

mcs –t:library –r:System.Web.Services –out:Sumador.dll Sumador.cs

La salida de esta compilación es Sumador.dll. Este archivo se debe dejar en el directorio /var/www/web/bin
Una vez hecho esto, se abre el navegador en http://localhost:8080/Sumador.asmx. Entonces se visualizará este WebService.

Al final se tendrá que ver algo parecido a esto: