Monthly Archives: February 2009

Instalación de Internet Explorer 7 en Linux OpenSuse 11.1 utilizando PlayOnLinux y Wine

Introducción.

Wine es un software que permite ejecutar aplicaciones Windows en otros sistemas operativos como Linux y FreeBSD.  Su funcionamiento se basa en incorporar una capa de traducción que obtiene los llamados del  sistema operativo simulado y los convierte en llamados del sistema operativo huésped.  Sobre él se utilizará PlayOnLinux, que es un software que facilita la instalación de aplicaciones, principalmente juegos, sobre Wine.

Internet Explorer 7 es el navegador web desarrollado por Microsoft para la plataforma Windows.  Muy conocido por sus graves problemas de seguridad y sus incumplimientos severos a los estándares web.  Se aconseja no utilizarlo en ninguna plataforma y utilizar en su lugar un navegador mejor como Opera, Firefox, Chrome o Safari.

Desafortunadamente si usted desarrolla software web deberá verificar que sus aplicaciones funcionen correctamente sobre los principales navegadores, incluyendo a IE.  Este es un buen método para tener acceso a IE para pruebas sin tener que utilizar el sistema operativo Windows.

Instalación de Wine + PlayOnLinux.

Obtener la última versión disponible desde la siguiente ubicación.

http://www.winehq.org/download/

$ wget http://ufpr.dl.sourceforge.net/sourceforge/wine/wine-1.1.14-openSUSE11.1.i586.rpm

$ sudo zypper install wine-1.1.14-openSUSE11.1.i586.rpm

$ sudo zypper install PlayOnLinux

Instalación de Internet Explorer 7.

Ejecute PlayOnLinux desde la línea de comando.

$ /usr/bin/playonlinux

O en OpenSuse 11.1, acceda a los siguientes menúes.

Applications > PlayOnLinux.

Presione el botón Install de la barra de herramientas.

1

Seleccione la rama Internet del lado izquierdo y la opción Internet Explorer 7 del lado derecho.

2

Presione los botones Unzip, Ok y Close para realizar la instalación de las librerías base.

e1

Seleccione el idioma en que se desea instalar IE y presione el botón Forward.

3

Presione el botón Next para iniciar la instalación.

4

Lea los términos de la licencia y presione el botón I Accept para continuar.

5

Seleccione la casilla Install the latest updates … y presione el botón Next para continuar.

6

Presione el botón Restart Now para finalizar la instalación.

7

Seleccione las casillas On your desktop y In your menu si se desea que se creen íconos de acceso directo en el escritorio y en el menú del usuario respectivamente.  Presione el botón Forward para continuar.

8

Presione el botón Forward para finalizar el proceso de PlayOnLinux.

9

Ejecución de IE7.

Si se decidió crear los accesos directos durante la instalación, IE puede ejecutarse desde ellos, tanto en el escritorio como bajo Applications > Applications > Internet Explorer 7.

Si no se crearon los accesos directos, estos pueden crearse con la siguiente información.

  • Tipo: Aplicación.
  • Nombre: Internet Explorer 7.
  • Comando: /usr/share/playonlinux/playonlinux –run "Internet Explorer 7".

10

Enlaces.

haXe – el lenguaje multiplataforma

Introducción.

haXe (se pronuncia hex), es otra de los muchos lenguajes de programación que andan por ahí en Internet, opensource y listos para que uno los aprenda, se sorprenda y aproveche según sus características.

La finalidad de este lenguaje es la de ser multiplataforma, es decir, puede generar código para las plataformas de JavaScript, Flash, PHP, NekoVM y C++.  Según los desarrolladores del lenguaje, el lenguaje le evita al desarrollador tener que aprender los intríngulis a cada una de las plataformas mediante la unificación de estas a través del lenguaje unificado, que incluye una librería estándar para todas las plataformas y una serie de librerías para acceder al API de cada una de las plataformas objetivo.

Instalación.

Linux Ubuntu 8.10.

$ sudo apt-get install haxe

Linux OpenSuse 11.1.

$ wget http://haxe.org/file/hxinst-linux.tgz

$ tar zxvf hxinst-linux.tgz

$ ./hxinst-linux

Demostración – Hola Mundo.

$ vi HelloWorld.hx

class HelloWorld
{
public static function main()
{
trace("Hello World!");
}
}

Compilación con Flash como objetivo.

$ haxe -swf VersionFlash.swf -main HelloWorld

screenshotflashVer mas información.

Compilación con JavaScript como objetivo.

$ haxe -js HelloWorld.js -main HelloWorld

screenshotjavascriptVer mas información.

Compilación con PHP como objetivo.

$ haxe -php HelloWorldPHP/ -main HelloWorld

screenshotphpVer mas información.

Compilación con Neko como objetivo.

$ haxe -neko HelloWorld.n -main HelloWorld

$ neko HelloWorld.n

screenshotneko

Ver mas información.

También es posible convertir los bytecodes de Neko a código binari o dependiente de la máquina con las siguiente instrucción.

$ nekotools boot HelloWorld.n

$ ./HelloWorld

Compilando el HelloWorld bajo OpenSuse 11.1 encontré un problema con la librería libgc.  Cuando intentaba generar la versión para Neko, obtenía siempre el siguiente mensaje.

nekoc: error while loading shared libraries: libgc.so.1: cannot open shared object file: No such file or directory
Error : Neko compilation failure

Este problema se solucionó instalando el paquete gc de la siguiente manera.

$ sudo zypper install gc

Enlaces.

Lenguajes y frameworks basados en J2ME para probar

Hecl – the mobile scripting language.

Es un lenguaje de alto nivel basado en scripts que se ejecuta sobre Java, específicamente diseñado para J2ME.  Su finalidad es la de permitir desarrollar ágilmente interfaces de usuario y aplicaciones sencillas.  Puede invocar directamente código Java e incluye un buen soporte de widgets UI, acceso al sistema de archivos, RecordStores, conexiones HTTP y kXML.

Según se aprecia en el blog del desarrollador, se encuentran trabajando bastante en su integración con Android.

J2ME Polish.

Es un conjunto de herramientas y tecnologías diseñadas para facilitar el desarrollo de aplicaciones móviles con J2ME.  Consta de los siguientes módulos: Lush, UI atractivo, similar al web y desarrollado de forma similar a CSS.  Janus, herramientas para desarrollar y migrar las aplicaciones móviles a otras plataformas como Windows Mobiles, iPhone y Android.  Torch, facilita la implementación de las comunicaciones a través de HTTP.  Trunk, facilita el manejo de la persistencia de datos de la aplicación.  Marjory, base de datos en línea de las especificaciones de los dispostivos móviles para facilitar el ajuste de las aplicaciones a estos.

OpenBaseMovil.

Es un framework para apoyar el desarrollo rápido de aplicaciones móviles con J2ME.  Provee características como persistencia a través de una base de datos, un motor de scripting para extender la aplicación y según se promete, portarla a otras plataformas como Windows Mobile y Android, desarrollo de la capa de presentación a través de un lenguaje declarativo basado en XML, entre otras cosas.

Kalmeo.

Mantiene tres proyectos: Kuix, un framework para el desarrollo de las intefaces de usuario utilizando XML y CSS.  Kutil, un conjunto de herramientas destinadas a enrriquecer el desarrollo de aplicaciones como un administrador de eventos, un manejador de tareas, un parser XML y un codificador GZIP.  Kaprice, es una aplicación de demostración para el manejo de listas de mercado utilizando las herramientas de Kalmeo.

Mobile Processing.

Es un lenguaje opensource basado en J2ME para el desarrollo rápido de aplicaciones móviles, especialmente ricas en contenido gráfico.  Su orientación sigue los lineamientos del proyecto Processing.

Con este lenguaje he hecho algunas cositas, sin embargo desde hace casi un año lo he tenido olvidado.  Mi entusiasmo duró hasta que me enfrenté con el desarrollo de las interfaces de usuario que me parecieron enrredadas y poco elegantes, también encontré que la comunidad es reducida y no encontré apoyo para solucionar mis dudas.  A pesar de esto el lenguaje es interesante y tal como lo plantea desde sus objetivos, útil para el desarrollo rápido de prototipos y proyectos pequeños.  Hay que darle una nueva oportunidad.

Mojax.

Es un framework para el desarrollo de aplicaciones móviles basadas en Ajax y que viven de manera independiente, es decir, no requieren del contexto de un navegador web.  Está basado en J2ME y permite el acceso a varios de los recursos físicos de los dispositivos móviles.

Hace unos meses cuando cursaba la especialización hice algunas cositas en él, incluyendo un proyecto para uno de sus módulos.  Salvados ahora todas las dificultades que encontré en su momento con el desarrollo del proyecto, es hora, al igual que con MP, de darle otra oportunidad a este lenguaje, el cual considero es muy útil para el desarrollo de mashups, es decir, aplicaciones que integren datos y funcionalidades de múltiples fuentes.

Introducción a Pike

Pike es un lenguaje interpretado, de plataforma cruzada, basado en tipos y orientado a objetos con una sintáxis híbrida entre C, Java y Python.  Aparentemente su orígen se remota a principios de los '90 con las aplicaciones estilo MUD.  Ahora espera ser un lenguaje flexible, rápido y multipropósito con las siguientes características.

  • Opensource: GPL, LGPL, MPL.
  • Se ejecuta en Linux y Solaris.  Con algunas restricciones bajo Windows.
  • Sintáxis conocida: estilo C.
  • Manejo automático de memoria.
  • Tipos de datos de alto nivel.
  • Orientación a objetos.
  • Manejo de excepciones.
  • Extensibilidad a través de librerías dinámicas escritas en C.
  • Acceso a la red.
  • Acceso a bases de datos (MySQL, mSQL, PostgreSQL y Oracle).
  • Manipulación de imágenes.
  • GUI con GTK.
  • Soporte de criptografía.
  • Desarrollo web.

El código del Hola Mundo es algo ya conocido por su sintáxis.

int main() {
    write("Hello world!\n");
    return 0;
}

A pesar de que no encontré ninguna aplicación significativa escrita en este lenguaje, se mencionan algunos MUDs, un administrador LDAP y un misterioso sistema de entretenimiento del cual sólo se pueden consultar screenshots.  A mi me parece que este lenguaje puede ser útil para implementar ciertos scripts de automatización de una manera más rápida y flexible que en Bash, su acceso a bases de datos es muy interesante en este aspecto.  También puede llegar a ser útil para el desarrollo de pequeñas aplicaciones de apoyo que puedan ser desarrolladas de manera mas ágil con respecto a los lenguajes tradicionales.

Enlaces.

Instalación de Apache, MySQL y PHP en Linux Ubuntu

Estos son los pasos que se siguieron para instalar los paquetes de [L]AMP: Apache, MySQL y PHP en mi equipo de desarrollo ahora que estoy estrenando Ubuntu Intrepid (8.10) -nuevamente-.

Apache.

$ sudo apt-get install apache2 libapache-mod-suphp

MySQL.

$ sudo apt-get install mysql-admin mysql-client mysql-navigator mysql-server phpmyadmin

PHP.

$ sudo apt-get install php5 php5-cli php5-dbg php5-gd php5-interbase php5-mcrypt php5-mysql php5-sqlite php5-suhosin php5-xdebug php-soap

Luchando contra el tipo fecha de SQL Server

Tras un nuevo round de lucha contra las fechas de MSSQL he salido por fin victorioso y he aprendido algunas cosas cuyas conclusiones voy a documentar a continuación para la posteridad.

MSSQL apesta.  Le faltan muchas cosas que acostumbra uno a utilizar con bases de datos mas sencillas como MySQL.  Por ejemplo: cómo hago un ENUM ?  como hago un DATETIME ? como hago …?

La arquitectura de la conexión es un cuento un poco mas largo.  El servidor de base de datos es un Windows XP con un MSSQL 7.0 mientras que el servidor web es un Linux OpenSuse que conecta el PHP5 al motor de base de datos a través de FreeTDS.

Desde hace unos días para acá el formato de fecha se modificó mágicamente, ya no aparecía 13/02/2009 13:13:31 (DMY) sino feb 13 2009 13:13.  Este también fue el primer problema que tuve alguna vez con MSSQL al rededor del 2002.  En esa época lo solucioné con el modificador SET DATEFORMAT, sin embargo esta vez no fue suficiente.

Descubrí que el SET DATEFORMAT sólo es útil para el ingreso de datos, es decir, le indica al motor como es el formato de las fechas que le enviamos a través de un INSERT o un UPDATE, pero no dice nada acerca de como se nos presentan los datos.  Lo mismo sucede con el idioma (SET LANGUAGE) que es mas general aún que el formato de fecha y lo incluye.

Después de muchos experimentos y pruebas encontré que la presentación de las fechas podía ser manipulada desde el servidor Linux, que en este caso actua como cliente de la base de datos mediante la configureción del FreeTDS.

El el archivo /usr/local/freetds/etc/locales.conf es necesario modificar la sección [default] para incluír la siguiente línea especificando el formato de las fechas.

date format = %d/%m/%Y %H:%M:%S

El formato de los campos es el mismo de strftime.  Con el formato propuesto la fecha aparece como DD/MM/AAAA HH:MM:SS utilizando el horario militar.  Es necesario reiniciar Apache para que el cambio sea tomado en cuenta.

$ sudo service apache2 restart

Como mencioné anteriormente, la modificación del DATEFORMAT o en su defecto del LANGUAGE, nos permiten garantizar que la aplicación reciba correctamente los datos tipos fecha de manera independiente a como fue instalado el MSSQL o se haya realizado la configuración regional del servidor.  Para esto terminé agregando las siguientes líneas al constructor de la superclase de los controladores de Kohana, es decir, en un sitio donde se pueda garantizar que siempre se ejecuta antes que cualquier otro código del sistema suceptible de acceder a la base de datos.

$this -> db = Database::instance();
$this -> db -> query('SET LANGUAGE spanish');
// $this -> db->query('SET DATEFORMAT dmy');

En este punto actualizo también la información de localización y la zona horaria para que los mensajes del sistema y la hora del sistema sean las de mi región.  Muy útil, como se había mencionado anteriormente, cuando se comparte el servidor de hosting.

setlocale(LC_ALL, "es_CO");
putenv("TZ=America/Bogota");

Generando diagramas entidad-relación con SchemaSpy

Introducción.

SchemaSpy screenshot - All relationships

SchemaSpy screenshot - All relationships

Dando vueltas el mes pasado por los lados de SourceForge encontré esta aplicación y no había tenido tiempo de probarla hasta el día de hoy.  Para mi satisfacción resultó ser muy interesante.  Es una aplicación desarrollada en Java que genera el diagrama Entidad-Relación de una base de datos y otras cositas, como sus desarrolladores la llaman, un navegador gráfico de esquemas de metadatos de una base de datos.  Puede acceder a cualquier motor de base de datos desde que se cuente con su correspondiente driver JDBC.

Requerimientos.

Para utilizar la aplicación se requiere lo siguiente.

  1. Contar con Java5 o superior.
  2. Descargar la última distribución de SchemSpy.
  3. Obtener el driver correspondiente a su base de datos.

Para realizar la conexión con una base de datos Microsoft SQL Server recomiendo utilizar el driver de jTDS ya que el proporcionado por Microsoft me generó problemas del siguiente estilo.

Driver version is x.x.xxx.xxx
com.microsoft.sqlserver.jdbc.SQLServerException: The "variant" data type is not supported.
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
        at com.microsoft.sqlserver.jdbc.TypeInfo.init(Unknown Source)
        at com.microsoft.sqlserver.jdbc.StreamColumns.processBytes(Unknown Source)
        at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(Unknown Source)
        at one_con.main(one_con.java:26)

Instalación.

La instalación de la aplicación no excede el descomprimir los paquetes descargados, sin embargo su ubicación es importante.  Para esto utilicé la siguiente estructura de directorios.

  1. ~/Applications/SchemaSpy – directorio de la aplicación.
  2. ~/Applications/SchemaSpy/drivers – controladores de acceso a la base de datos.

En la carpeta [1] se ubica el JAR de la aplicación: schemaSpy_4.1.1.jar.

En la carpeta [2] se ubican los JAR de los drivers JDBC: mysql-connector-java-5.1.7-bin.jar para MySQL y jtds-1.2.2.jar para MSSQL.

Ejecución.

Para esto acostumbro a crear scripts del shell que ubico en ~/Applications, sin embargo lo importante es su contenido que puede invocarse directamente desde la línea de comando.

Para MySQL.

$ java -jar SchemaSpy/schemaSpy_4.1.1.jar -dp ~/Applications/SchemaSpy/drivers/mysql-connector-java-5.1.7-bin.jar -t mysql -host HOST -db DBNAME -u DBUSER -p DBPASS -o OUTDIR

Para MSSQL.

$ java -jar SchemaSpy/schemaSpy_4.1.1.jar -dp ~/Applications/SchemaSpy/drivers/jtds-1.2.2.jar -t mssql-jtds -host HOST -port PORT -db DBNAME -s DBSCHEMA -u DBUSER -p DBPASS -o OUTDIR

Por supuesto se deben reemplazar apropiadamente las siguientes variables.

  • HOST – servidor de base de datos.
  • PORT (requerido por MSSQL) – puerto de conexión al motor de base de datos.  El puerto por defecto de MSSQL es el 1433.
  • DBNAME – nombre de la base de datos.
  • DBSCHEMA (sólo con MSSQL) – esquema de la base de datos.  Utilizo dbo.
  • DBUSER – usuario de la base de datos.
  • DBPASS – contraseña del usuario $DBUSER.
  • OUTDIR – ubicación donde la aplicación generará los archivos resultantes.

Los comandos utilizan la sintaxis del shell de Linux, para utilizarlos desde Windows adapte las rutas según su conveniencia, recuerde modificar los slashes (/) por backslashes (\).

Nota acerca de la generación de gráficos.

Para que se generen correctamente los gráficos de los diagramas Entidad-Relación es necesario que se cuente previamente con la librería Graphviz.  Para instalar esta librería desde Ubuntu Linux sólo es necesario ejecutar el siguiente comando.

$ sudo apt-get install graphviz

Conclusiones.

Muy intersante esta aplicación, me gustó bastante.  Genera una buena documentación de la base de datos en formato HTML con varias secciones que se pueden navegar entre ellas.  Incluye varias perspectivas de la misma información que facilita su documentación.  Incluso siendo una presentación local, incluye JQuery para mejorar la usabilidad de los reportes.

Enlaces.

Como borrar los directorios .SVN

Si alguna vez, por una extraña razón, necesita remover los directorios de SVN sólo es necesario seguir estos dos pasos.

$ find RUTA -type d -name .svn

Verifique que efectivamente sean las carpetas que desea eliminar bajo la ubicación RUTA y proceda con el siguiente comando.

$ rm -rf `find RUTA -type d -name .svn`

Tenga en cuenta que las comillas que recubren a la instrucción find son invertidas: estas ( ` ), no estas  ( ' ).

Instalación de Ogre3D en Ubuntu Linux

ogre_demo

Introducción.

Ogre3D es tal vez la librería de renderización de gráficos 3D y opensource mas utiliza en diversos tipos de proyectos.  Al igual que Irrlicht, se encuentra desarrollada en C++ y para ella se proveen múltiples interfases para ser utilizada desde los lenguajes mas populares del momento, incluyendo a .NET, Java y Ruby.

Según he encontrado en algunos foros, esta librería es un tanto mas compleja y difícil de usar que Irrlicht.  Por ahora mi deseo es instalarla para después, con tiempo, leer acerca de su modelo de desarrollo.

La instalación de Ogre3D fue aún mas compleja que la de Irrlicht. El proceso no fue agradable del todo, encontré dos veces problemas que se solucionaron con búsquedas de problemas específicos (como los ^M en el Makefile :-s) y las librerías externas (OIS y CEGUI) son necesarias (sin ellas no compilan sus ejemplos), sin embargo es muy probable que si compile Ogre sin ningún mensaje de advertencia :-s

Instalación.

Librerías necesarias para el proceso de instalación.

$ sudo apt-get install automake libtool libzzip-dev libxaw-headers libxaw7-dev libxxf86vm-dev libxrandr-dev libfreeimage-dev nvidia-cg-toolkit libfreetype6-dev libfreetype6-dev libpcre3-dev

Creación del directorio de trabajo.

$ mkdir ~/Ogre

$ cd ~/Ogre

Instalación de la librería Object Oriented Input System alias OIS.

$ wget http://ufpr.dl.sourceforge.net/sourceforge/wgois/ois_1.2.0.zip

$ unzip ois_1.2.0.zip

$ mv ois ois-1.2.0

$ cd ois-1.2.0

El siguiente paso es necesario para evitar problemas con el configure que dice no encontrar el Makefile y esto se debe a que los archivos tienen saltos de línea DOS.

$ dos2unix bootstrap Makefile.in Makefile.am configure.ac acinclude.m4 aclocal.m4

$ chmod +x bootstrap

$ aclocal

$ ./bootstrap

$ ./configure

$ make

$ sudo make install

$ sudo ldconfig

$ cd ..

Instalación de la librería Crazy Eddie's GUI System alias CEGUI.

$ wget http://ufpr.dl.sourceforge.net/sourceforge/crayzedsgui/CEGUI-0.6.2b.zip

$ unzip CEGUI-0.6.2b.zip

$ cd CEGUI-0.6.2

$ ./bootstrap

$ ./configure

$ sudo make install

Instalación de la librería Ogre3D.

$ wget http://downloads.sourceforge.net/ogre/ogre-v1-6-1.tar.bz2?use_mirror=

$ mv ogre ogre-1.6.1

$ cd ogre-1.6.1/

$ bunzip2 ogre-v1-6-1.tar.bz2

$ tar xvf ogre-v1-6-1.tar

Si obtiene el siguiente mensaje de error entonces se debe ejecutar el próximo comando.

/usr/include/ft2build.h:56:38: error: freetype/config/ftheader.h: No such file or directory

$ sudo ln -s /usr/include/freetype2/freetype /usr/include/freetype

$ aclocal

$ ./bootstrap

$ ./configure

$ make

$ sudo make install

$ sudo ldconfig

Enlaces.

Instalación de Irrlicht en Ubuntu Linux

irrlicht_demo

Introducción.

Irrlicht es un motor opensource de gráficos 3D en tiempo real.  Es desarrollado en C++ pero tiene interfaces para los lenguajes .NET.  Soporta DirectX, OpenGL su propio software de renderización.

Instalación.

$ mkdir ~/Irrlicht

$ cd ~/Irrlicht

$ wget http://downloads.sourceforge.net/irrlicht/irrlicht-1.5.zip

$ unzip irrlicht-1.5.zip

$ sudo apt-get install build-essential sudo apt-get install g++ glutg3-dev libxxf86vm-dev

$ cd irrlicht-1.5/source/Irrlicht

Para generar la librería en modo depuración se debe ejecutar el siguiente comando.

$ make

En cambio, para generar la librería en modo producción se deberá ejecutar el siguiente comando.

$ make NDEBUG=1

Compilación de los ejemplos.

$ cd ../../examples/

$ make

$ cd ../bin/Linux/

Ejecutar los ejemplos.

Enlaces.