javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

sábado, 31 de mayo de 2008

Cargar datos a una tabla en PostgreSQL desde un archivo de texto

La forma de cargar datos a una tabla de PostgreSQL desde un archivo es muy fácil. Bastará con usar el comando COPY que nos proporciona el prompt de postgres para obtener los datos y cargarlos a la tabla.

En este ejemplo usaremos un archivo llamado tipo_usuario.txt. El archivo contendrá los tipos de usuario de un sistema. Contará con dos columnas separadas por tabulador, la primer columna tendrá el id del tipo de usuario y la segunda columna tendrá el nombre del tipo de usuario.
Cada registro estará separado por una nueva línea por lo que el archivo quedaría de la siguiente manera:

1       Administrador
2 Editor
3 Redactor

En cuestion a la base de datos, deberemos tener una tabla llamada tipo_usuario en la que cargaremos los datos. Esta tabla podría tener la siguiente estructura:

CREATE TABLE tipo_usuario(
id NUMERIC(2) NOT NULL PRIMARY KEY,
nombre VARCHAR(50) NOT NULL);

Para cargar el archivo deberemos de ingresar al prompt de postgres. En este caso voy a usar como datos el usuario javoaxian y la base de datos javoaxian.
javoaxian@darthmaul:~$ psql -U javoaxian -d javoaxian

Una vez que estamos dentro del prompt de postgres ejecutaremos el siguiente comando para cargar nuestra información:

javoaxian=> \COPY tipo_usuario FROM '/home/javoaxian/tipo_usuario.txt' WITH DELIMITER AS '\t'

Listo, esto es todo para cargar los datos en la tabla desde un archivo de texto.

viernes, 30 de mayo de 2008

Obtener la fecha y hora exacta con Java aún con cambios de horario en nuestra zona horaria

Hace algún tiempo binario01 me comentó que tenía un problema con Java haciendo una aplicación en Eclipse. El problema consistía en que obtenía la fecha con la clase Date pero le devolvía la hora incorrecta ya que acababa de haber un cambio de horario en su país Venezuela.

Me he encontrado en algunas partes donde preguntan esta cuestión y, he también he visto que han entrado a este blog con esa misma duda aunque no entran al comentario donde respondí la forma de solucionar ésto, por tal motivo preferí crear este post.

La forma de resolver este problema es usando las clases Locale y Calendar. Transcribo el código que puse en mi respuesta a la duda:

Locale l = new Locale("es","VE");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/Caracas"),l);
System.out.println("FECHA: " + cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH)+1) + "-" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));

El código anterior se encarga de obtener la fecha y hora exacta de Venezuela con Java aun habiendo el cambio de horario y manda a imprimir a la salida estandar la fecha y hora.

Si por ejemplo, quisieran obtener la fecha y hora de México-Distrito Federal se podría obtener de la siguiente manera:

Locale l = new Locale("es","MX");
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/Mexico_City"),l);

Los argumentos que se especifican en la clase Locale son el idioma "es" y el código del país "MX" o "VE".
Los argumentos que le pasamos al método getTimeZone de la clase TimeZone son la región "America/Caracas" o "America/Mexico_City" y el objeto de la clase Locale que creamos previamente.

Si no saben el código de su país y su time zone, pueden ver este artículo donde les muestro como pueden obtener su zona horaria.

Espero que este código les sea de utilidad para obtener su fecha y hora correcta en Java.

jueves, 29 de mayo de 2008

Cómo obtener el código y la zona horaria de nuestro país

Buscando algunas cosas en internet, me encontré con este sitio, el cual aparte de poder hacer conversiones del "time zone" o zonas horarias entre diferentes países, nos indica el código de nuestro país y la o las zonas horarias que existen en él, ya que en algunos casos hay países que cuentan con más de una zona horaria como es el caso de México, o en el caso de Venezuela, que únicamente cuenta con una zona horaria.

Para obtener la o las zonas horarias de nuestro país entraremos a este enlace. Seleccionaremos el país del que queremos saber la zona horaria y presionaremos "GO":


Después de eso te devolverá el código del país y la o las zonas horarias de éste.


Como se puede observar el código de México es "MX" y cuenta con 8 zonas horarias. Si seleccionamos una zona horaria, como por ejemplo America/Mexico_City, nos indicará que nuestra zona horaria es "America/Mexico_City".


Ahora si presionamos sobre "America/Mexico_City" no mostrará datos sobre la fecha y hora de esta zona:


Ojala que esto les ayude a obtener el código y la zona horaria de su país y región o, del país que deseean saber estos datos.

martes, 27 de mayo de 2008

Conectar Eclipse con Subclipse a un repositorio de Subversion por medio de SSH

Esta vez voy a explicar cómo podemos conectar Eclipse con el plugin Subclipse a un repositorio ya creado de Subversion (SVN) por medio de SSH.

Para comenzar, deberemos tener ya instalado Eclipse (ver este artículo), Subclipse (ver este artículo) y tener creado ya un repositorio de SVN (ver este artículo).

Para fines de esta explicación usaré un repositorio que se encuentra en la ruta /home/javoaxian/SVN, dicho repositorio ya cuenta con las tres secciones principales de SVN, las cuales son: trunk, branches y tags, dentro de trunk cuento con una sección llamada javoaxian que es donde se situarán los archivos de nuestro proyecto, la cuenta de usuario del servidor donde nos conectaremos será javoaxian. Y como nombre del dominio del servidor usaré a localhost aunque también pueden usar la ip como por ejemplo 127.0.0.1 .

Arrancaremos eclipse y abriremos la perspectiva de SVN seleccionando en el menú de eclipse: Window -> Open Perspective -> Other...


Se abrirá la pantalla Open Perspective, donde deberemos seleccionar la opción SVN Repository Exploring.


Cambiará la perspectiva de eclipse.


Lo siguiente que haremos será presionar sobre la opción Add SVN Repository.


Esto abrirá la pantalla Add SVN Repository, en donde deberemos ingresar en la sección Url la conexión a nuestro repositorio, que en cuyo caso, lo que usaré en este artículo será la línea de conexión: svn+ssh://javoaxian@localhost/home/javoaxian/SVN. Ingresado este dato presionaremos "Finish".


Se presentará la pantalla Enter SSH Credentials, en la que deberemos ingresar la contraseña de la cuenta de usuario del servidor donde nos queremos conectar, que en este caso es javoaxian y presionaremos "OK".


Ahora aparecerá la pantalla Enter SVN Author Name, en la que deberemos, de preferencia, ingresar nuestro nombre completo aunque esto es elección de cada uno. En este caso voy a dejar el nombre de javoaxian, marcaré la casilla Save author name para que no me vuelva a pedir el nombre del autor y presionaremos "OK".


Se agregará en la sección SVN Repository el repositorio que acabamos de configurar. Ahora para hacer una copia del contenido del repositorio en nuestro eclipse, presionaremos sobre la flecha que se encuentra del lado izquierdo de nuestro repositorio, lo cual nos mostrará los directorio branches, tags y trunk y presionaremos en la flecha del lado izquierdo de trunk para que nos aparezca la sección javoaxian. Ahora con el botón derecho de nuestro ratón, presionaremos sobre la sección javoaxian, y se nos presentará un menú donde presionaremos sobre la opción Checkout...


Se nos presentará la pantalla Checkout from SVN, donde podemos usar su Wizard para especificar el tipo de proyecto que estamos creando. Como el proyecto que estamos creando está desde cero, usaremos la opción Check out as a project configured using the New Project Wizard para crear un proyecto que en este caso será de java, en donde el mismo eclipse nos pone como opción por default. Suponiendo que en nuestro repositorio ya tenemos un proyecto que configuramos con anterioridad, la opción que eclipse nos marcará por default será Check out as a project in the workspace ya que en el proyecto se crea un archivo llamado .project el cual indica el tipo de proyecto que esta configurado. Presionaremos "Finish".


Nos aparecerá la pantalla de New Project de eclipse. En esta ventana seleccionaremos Java -> Java Project y presionaremos "Next".


A continuación veremos la pantalla donde podremos ponerle el nombre a nuestro proyecto. Cabe mencionar que esta pantalla variará dependiendo del tipo de proyecto que estemos creando. Por ejemplo, en el caso de crear un proyecto de PHP con PHPEclipse únicamente se nos pedirá el nombre del proyecto, pero como podemos observar en el caso de un proyecto de java, se nos muestran más opciones. En este caso bastará con ingresar el nombre del proyecto, que en mi caso lo llamaré proyectoJavoAxian y presionaremos "Finish".


Eclipse nos preguntará si queremos abrir la perspectiva asociada al proyecto que estamos creando, que para este ejemplo será la perspectiva de java. Presionaremos "YES".


Es posible que nos aparezca una ventana donde se nos indica que estamos creando un proyecto que contiene recursos adicionales a un archivo .project normal. Aquí presionaremos "OK".


Eclipse nos pondrá la perspectiva de acuerdo al tipo de proyecto que creamos. Para este ejemplo, se abrió la perspectiva de Java.


En cualquiera de los casos, veremos que en el nombre del proyecto, aparecerá un asterisco color ginda, lo cual indica que hay un cambio en la copia que tiene eclipse y que deberá mandarse al repositorio. Los cambios creados en todo proyecto, es porque se crea el archivo .project. En el caso específico de java, también se crean los directorio src, bin y el archivo .classpath.


Para mandar estos cambios al repositorio, bastará con presionar con el botón derecho del ratón sobre el nombre del proyecto, y se nos mostrará un menú donde seleccionaremos las opciones Team -> Commit.


Se nos presentará una ventana donde se nos pide un comentario de los cambios que vamos a hacer en le repositorio y deberemos seleccionar los nuevos archivos que se van a agregar al repositorio y presionamos "OK".


Ahora podemos ver que se ha quitado el asterisco ginda que estaba en el nombre del proyecto.


Con esto quedó configurado nuestro proyecto de eclipse para que trabaje con nuestro repositorio SVN.

Las opciones para trabajar con el repositorio de Subversion se pueden localizar haciendo clic sobre el nombre del proyecto con el botón derecho del ratón y seleccionar la opción Team.

lunes, 26 de mayo de 2008

Instalar Xmms en Debian Etch, Lenny y Ubuntu Hardy Heron

Como muchos han podido observar, tanto en las versiones de Debian Etch, Lenny y Hardy Heron de Ubuntu, no cuentan en sus repositorios con el reproductor de música Xmms. Dado este motivo, explicaré como podemos instalar este reproductor de audio desde su código fuente.

Como primer paso, deberemos bajar xmms, la versión existente en el momento de hacer esta entrada es la 1.2.11, por lo que bajaremos el archivo xmms-1.2.11.tar.gz.

Una vez que descargamos el archivo, nos convertiremos en el usuario root, moveremos el archivo al directorio /usr/local/src y nos moveremos a dicho directorio.

javoaxian@darthmaul:~$ su -
root@darthmaul:~# mv /ruta/archivo/xmms-1.2.11.tar.gz /usr/local/src/

Ahora descomprimiremos el archivo:

root@darthmaul:~# tar -xzvf xmms-1.2.11.tar.gz

Nos creará un directorio con el nombre de xmms-1.2.11.

Entraremos en el directorio xmms-1.2.11 y ejecutaremos el comando configure.

root@darthmaul:~# cd xmms-1.2.11
root@darthmaul:~# ./configure

Es posible que nos aparezca un error como este:

checking for GLIB - version >= 1.2.2... no
*** The glib-config script installed by GLIB could not be found
*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the GLIB_CONFIG environment variable to the
*** full path to glib-config.
configure: error: *** GLIB >= 1.2.2 not installed - please install first ***

En cuyo caso, se puede resolver instalando el paquete libglib1.2-dev de la siguiente manera:

root@darthmaul:~# apt-get install libglib1.2-dev

Volveremos a ejecutar el comando configure.

root@darthmaul:~# ./configure

Es posible que al ejecutar nuevamente el comando nos aparezca otro mensaje de error semejante a este:

checking for GTK - version >= 1.2.2... no
*** The gtk-config script installed by GTK could not be found
*** If GTK was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the GTK_CONFIG environment variable to the
*** full path to gtk-config.
configure: error: *** GTK+ >= 1.2.2 not installed - please install first ***

Por lo que ahora instalaremos el paquete libgtk1.2-dev.

root@darthmaul:~# apt-get install libgtk1.2-dev

De nueva cuenta acabado de instalar el paquete anterior, ejecutamos el comando configure.

root@darthmaul:~# ./configure

Si todo funcionó correctamente, ahora ejecutaremos los dos siguientes comando para realizar su instalación:

root@darthmaul:~# make
root@darthmaul:~# make install

Una vez terminada la instalación, deberemos agregar a la variable de ambiente LD_LIBRARY_PATH la ruta para que encuentre las bibliotecas de xmms. Esto lo podemos hacer agregando las siguientes líneas en el archivo /etc/profile con la cuenta de usuario root (si gustan puede ser al final del archivo o antes de la línea umask 022):

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

Para que este cambio funcione, deberemos reiniciar nuestro ambiente gráfico o nuestra máquina.
Si queremos comprobar si funciona todo correctamente sin reiniciar el ambiente gráfico o el equipo, podemos abrir una consola y ejecutar el comando source sobre el archivo /etc/profile, así se cargarán los cambios en la consola donde ejecutamos este comando.

javoaxian@darthmaul:~$ source /etc/profile

Actualización 2008-06-06:
En ocasiones no funciona agregar la variable de ambiente LD_LIBRARY_PATH en el archivo /etc/profile, por tal motivo, si les manda el siguiente error:

xmms: error while loading shared libraries: libxmms.so.1: cannot open shared object file: No such file or directory

Pueden crear el siguiente enlace simbólico para que encuentre el archivo libxmms.so.1

root@darthmaul:~# ln -s /usr/local/lib/libxmms.so.1.3.1 /usr/lib/libxmms.so.1

Listo, para finalizar, ahora podremos ejecutar el comando xmms en la misma consola donde ejecutamos el comando source y deberá abrirse el programa Xmms.

Exportar el resultado de una consulta a un archivo en MySQL

En unos cuantos posts anteriores publiqué como podíamos cargar la información de un archivo a una tabla. Pues el día de hoy voy a explicar como podemos enviar el resultado de una consulta a un archivo.

Al igual que el comando LOAD DATA, nuestra cuenta de usuario de MySQL necesita el privilegio global FILE. Para poder asignarlos pueden consultar el artículo que mencioné anteriormente, ya qué allí menciono como podemos asignar los privilegios necesarios.

Una vez que contamos con los permisos, ahora en el prompt de mysql, ejecutaremos la consulta que deseamos enviar a nuestro archivo, con la única diferencia que especificaremos el archivo de salida y delimitador de campos. Para ejemplificar esto, pondré una consulta de la tabla pais en el archivo /tmp/pais.txt y los campos los limitaré por un tabulador.

mysql> SELECT * INTO OUTFILE '/tmp/pais.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' FROM pais;

Es importante mencionar que el archivo creado de esta forma, pertenece al usuario mysql, es por este motivo que indiqué que el archivo se guardara en el directorio /tmp.

Como podrán observar, es muy sencillo exportar datos a un archivo, por lo que espero que no tengan ningún problema al hacerlo.

domingo, 25 de mayo de 2008

¿Qué pasaría sin La Matrix estuviera sobre Window?

Con esta entrada que estoy publicando, llego a los 100 posts publicados, espero que les hayan sido de ayuda y que pueda continuar actualizando este blog.

Para festejar esto, les pongo un video que hace mucho que me lo proporcionaron pero que estuve buscando y nunca lo encontré en mis discos de respaldo. Por tal motivo me di a la tarea de buscarlo en YouTube y para mi suerte lo encontré. Como lo dice el nombre de esta entrada, es un video de lo que pasaría si la Matrix estuviera bajo un sistema Windows, espero que les agrade, ya es viejo, pero esta entretenido.

Manejar transacciones con ADOdb para PHP

La forma de usar transacciones con ADOdb para PHP es muy sencilla.

Lo primero que se deberá de hacer después de crear la conexión, es iniciar la transacción. Posteriormente ejecutar las sentencias sql que queremos que entren dentro de la transacción y verificar si se hicieron correctamente, en caso de no ser así deberemos lanzar una instrucción Rollback, y en caso de que todo estuvo bien, deberemos lanzar una instrucción Commit.

$bd = NewADOConnection('mysql');
$conexion = $bd->Connect("servidor","usuarioBD","contraseniaBD","nombreBD"));
$conexion->BeginTrans();
$insert1 = "INSERT INTO ....";
$insert2 = "INSER INTO ....";

if(!$conexion->Execute($insert1))
$conexion->RollbackTrans();
elseif(!$conexion->Execute($insert2))
$conexion->RollbackTrans();
else
$conexion->CommitTrans();

$conexion->Close();

Como se puede observar, tenemos que ir rastreando los posibles errores de nuestras instrucciones sql para lanzar nuestros Rollback igual que como lo haríamos normalmente con sql.

Afortunadamente esta biblioteca nos facilita un poco más el uso de transacciones gracias al uso de lo que en su página llaman Transacciones Inteligentes.

Las transacciones inteligentes nos permiten iniciar y concluir nuestra transacción sin necesidad de ir rastreando los posibles errores, bastará con usar el método StartTrans() el cual permite iniciar la transacción y poner donde queramos que inicie nuestra transacción el método CompleteTrans(). Este último método, se encarga de verificar si hubo algún error en las instrucciones sql que están dentro de la transacción y, si detecta algún error, entonces lanza automáticamente una instrucción Rollback, en caso contrario lanza una instrucción Commit.

El ejemplo anterior, puede quedar de la siguiente manera:

$bd = NewADOConnection('mysql');
$conexion = $bd->Connect("servidor","usuarioBD","contraseniaBD","nombreBD"));
$conexion->StartTrans();
$insert1 = "INSERT INTO ....";
$insert2 = "INSER INTO ....";

$conexion->Execute($insert1);
$conexion->Execute($insert2);

$conexion->CompleteTrans();
$conexion->Close();

Como podemos observar, es mucho más fácil usar transacciones con esta última forma.

Ahora bien si de todas maneras, necesitamos por alguna razón lanzar una instrucción Rollback en una transacción inteligente, podemos usar el método FailTrans().

$conexion->FailTrans();

Este método le indica al método CompleteTrans() que deberá lanzar un Rollback.

Para finalizar esta entrada, me gustaría mencionar que en los manejadores de bases de datos que he usado (PostgreSQL, Oracle, Sybase y MySQL), las transacciones inteligentes trabajan sin problema con excepción de MySQL, ya que para que funcionen las transacciones inteligentes con este manejador, deberemos especificar el driver mysqlt en lugar de mysql cuando creamos el objeto de conexión.

$bd = NewADOConnection('mysqlt');

Hace mucho use esta opción pero ya no la recordaba, por eso agradezco al joven Alvajandro que me recordó la opción para poder usar este tipo de transacciones con MySQL.

También recuerden que para que funcionen transacciones e integridad referencial en mysql, deberemos crear nuestras tablas con el type=innoDB.

sábado, 24 de mayo de 2008

Borrar un archivo o directorio recursivamente usando el Shell

Hace casi dos meses escribí el post Borrar un archivo o directorio recursivamente en GNU/Linux en el cual creé un programa en perl que se encarga de borrar recursivame archivos o directorios.. Pues el día de hoy simplifico ese programa en una sola línea de Shell.

Pondré como ejemplo el borrar el directorio .svn, el cual para los que no lo conocen es un directorio que se crea cuando trabajamos proyectos con Subversion (SVN) en cada uno de los directorios existentes, por lo que al momento de crear una versión para entregar necesitamos remover el directorio .svn de todos los directorios en los que se encuentra.

Para borrarlo haremos uso del comando find, dicho comando nos permite buscar archivos o directorios y con la opción -exec podremos usar el comando rm para borrar los archivos que encuentra.

La estructura para ejecutar este comando será la siguiente:

javoaxian@darthmaul:~$ find /directorio/en/donde/buscar -name archivo_o_directorio_a_buscar -exec rm \-rf '{}' \;

Aquí pongo un ejemplo para borrar el directorio .svn.

javoaxian@darthmaul:~$ find /home/javoaxian/proyectos/javoaxian -name .svn -exec rm \-rf '{}' \;

El comando anterior buscará en el directorio /home/javoaxian/proyectos/javoaxian todos los directorios .svn y los borrará. Puede que mande mensajes de error que no encontró el directorio o archivo para borrar.

Si no quieren que les mande mensajes de error, pueden ejecutar esta otra forma de usar los comandos rm y find combinados:

javoaxian@darthmaul:~$ rm -rf `find /home/javoaxian/proyectos/javoaxian -name .svn`

Para verificar que funcionó, podemos ejecutar el mismo comando find pero de la siguiente manera:

javoaxian@darthmaul:~$ find /home/javoaxian/proyectos/javoaxian -name .svn -print

Ésto busca en la ruta especificada el archivo .svn y lo muestra en pantalla. No deberá mostrar nada la salida del comando si se ejecutó correctamente.

Espero que les sea de ayuda.

viernes, 23 de mayo de 2008

Borrar los archivos que se encuentra e una lista dentro de un archivo de texto con una sóla línea de Shell

El día de hoy en el trabajo, un compañero me pregunto si recordaba una manera de borrar los archivos que se encontraban indicados en un archivo de texto usando comandos de shell. Entonces me dí a la tarea de tratar de recordar un poco y les muestro aquí la solución.

Supongamos que tenemos el archivo de texto archivos_x_borrar.txt, en dicho archivo se encuentra una lista de los archivos que deseamos borrar. Por ejemplo, el contenido de archivo_x_borrar.txt tiene lo siguiente:

archivo1.log
archivo2.log
archivo3.log
archivo4.log
archivo5.log

Como podemos observar en el ejemplo, queremos borrar 5 archivos. Resultaría fácil borrarlos directamente con el comando rm cada uno, pero si fueran 100 archivos ya sería un poco pesado.

Para borrarlos con una sola línea de shell, lo único que tenemos que ejecutar es lo siguiente:

javoaxian@sky:~$ rm `cat archivos_x_borrar.txt`

Listo, ahora si observan su directorio, ya no tendrán los archivos que se indicaban en el archivo de texto.

Saludos!!!

ADOdb para PHP

Para quienes apenas van empezando a programar en PHP o en su defecto necesitan de alguna biblioteca para conectarse a base de datos que les funcione de la misma manera para diversos manejadores de bases de datos, ADOdb para PHP es una buena alternativa.

Hace ya algunos años el buen JCLTOL me pasó la referencia a esta biblioteca, la he usado con diversos manejadores de bases de datos, entre los que se encuentran PostgreSQL, MySQL, Oracle y Sybase y debo mencionar que me ha funcionado bastante bien. En algunos casos como sybase me surgieron algunos problemitas pero nada que no se pudiera solucionar.

Las principales ventajas que le he encontrado ha esta herramienta son:

  • Podemos conectarnos a diversos manejadores de bases de datos entre los cuales se encuentran: MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP, y los genericos ODBC, ODBTP.
  • Usamos casi la misma funciones para todos los manejadores de bases de datos. (Digo casi porque para manipular campos blob, clob hacen algunas diferencias).
  • Permite migrar una aplicación de una base de datos a otra sin tantos problemas. (Esto depende también en gran medida de usar campos y funciones estandar en SQL y no sintaxis especial de cada manejador de base de datos).
  • Cuenta con buena documentación.
  • Permite manejar las sesiones de PHP en nuestra base de datos y no en el directorio /tmp que es el que se encuentra por default.
  • La forma de usarlo es muy sencilla.
  • Cuenta con documentación en español.
  • Permite crear paginaciones.
  • Entre otra muchas otras cosas.

La forma de instalación es muy sencilla. Deberemos bajar el archivo desde su página de descargas y presionar en la opción Download from SourceForge.

Aquí nos aparecerán 3 archivos, uno para compatibilidad entre php 4 y 5, otro para compatibilidad únicamente para php 5 y otro con compatibilidad para python. Deberemos decidir cual bajar.

En mi caso yo bajo el de compatibilidad para php 4 y 5 ya que todavía tenemos que trabajar en algunos casos con php 4.

Una vez que hayan descargado el archivo deberán descomprimirlo, de preferencia en alguno de los directorios de su proyecto para que cuando lo migren vaya incluida esta biblioteca.

La versión en el momento de hacer este documento es la 4.98 y el archivo que descargué fue el adodb489.tgz.

Para descomprimirlo ejecutamos esto:

javoaxian@sky:~$ tar -xzvf adodb489.tgz

Esto nos creará el directorio adodb.

Ahora en nuestros programas donde deseemos conectarnos a alguna base de datos bastará con incluirlo con una instrucción include, include_once, require o require_once.

include("/ruta/adodb/adodb.inc.php");

Para concluir, explicaré como conectarnos a nuestra una base de datos. Esto es muy sencillo, lo primero que haremos será crear un objeto de la conexión especificando el manejador de base de datos que vamos a usar. Para este caso usaremos oracle.

$bd = NewADOConnection('oci8');

Ahora ejecutaremos la instrucción para conectarnos al manejador, pasandole los argumentos de conexión a la base de datos:

$conexion = $bd->Connect("servidor","usuarioBD","contraseniaBD","nombreBD"));

Esto nos debe conectar a la base de datos que especificamos.
Ahora cerrar nuestra conexión, bastará con ejecutar lo siguiente:

$conexion->Close();

En documentos posteriores trataré de mostrar ejemplos de como usar ADOdb para PHP.

jueves, 22 de mayo de 2008

Cargar información a una tabla en MySQL desde un archivo de texto

Muchas veces cuando desarrollamos un sistema, necesitamos cargar información que usamos en muchos de los sistemas que implementamos, como catálogo de estados, delegaciones, etc. y estos catálogos los exportamos en archivos de texto para posteriormente cargarlos en una nueva aplicación.

Para poder hacer esta acción en MySQL necesitaremos usar el comando LOAD DATA dentro del prompt de mysql.

Como primer paso para poder ejecutar este comando necesitamos que el administrador de mysql nos de permisos para ejecutar esta acción. Si contamos con la cuenta de root de mysql, nos loguearemos con dicha cuenta y daremos los permisos globales de FILE como a continuación se muestra:

javoaxian@sky:~$ mysql -u root -p mysql
mysql> GRANT FILE on *.* to 'usuario'@'localhost';

Para ejemplificar habilitaré mi cuenta en mysql.

mysql> GRANT FILE on *.* to 'javoaxian'@'localhost';

Los privilegios de FILE no están incluidos cuando damos permisos GRANT ALL por lo que se deberán asignar por aparte los privilegios de FILE a los usuario que deseemos que usen dichos privilegios.

Ahora podremos usar con la cuenta que especificamos tanto el comando LOAD DATA (para cargar información de archivos a una tabla) como el comando SELECT ... INTO OUTFILE (para mandar el resultado de una consulta a un archivo).

Para cargar el archivo de texto a una tabla, deberán de verificar que la tabla cuente con el mismo número de campos que el archivo de texto, por ejemplo si van a cargar un catálogo de países a lo mejor el archivo cuenta con una columna de id's y otra con los nombres de los países, por lo tanto, en nuestra base de datos deberemos tener creada la tabla pais con un campo que corresponda al id y otro para el nombre.

Para ejemplificar supondremos que nuestro archivo de texto tiene separados los campos con tabulador.

Ahora para cargar nuestro archivo de texto, por ejemplo paises.txt a la tabla pais, ingresaremos a nuestra base de datos con nuestra cuenta:

javoaxian@sky:~$ mysql -u javoaxian -p javoaxian

Una vez en nuestra base de datos ejecutaremos lo siguiente para cargar el archivo a nuestra tabla:

mysql> LOAD DATA INFILE '/ruta/archivo/paises.txt' INTO TABLE pais FIELDS TERMINATED BY '\t';

Esto cargará toda la información que tengamos en el archivo paises.txt a nuestra tabla pais.

Jugar video juegos de Nintendo en Firefox con la extensión FireNes

FireNes es una extensión para Firefox que nos permite jugar a alrededor de 2500 juegos de Nintendo, sin la necesidad de bajar nada, ni emulador ni roms.

Lo único que se necesita es tener instalada la versión 1.5 o superior y que cuente con la versión de la máquina virtual de java 1.5 o superior.

Para instalarlo bastará con entrar a esta liga, donde se nos preguntará si queremos instalar la extensión.

Para abrir FireNes bastará con ir a Herramientas -> FireNes o Tools -> FireNes y se abrirá una barra con los juegos que podemos jugar.



Lo único que tendrán que hacer es dar doble clic sobre el juego que deseen.

Para responder a dudas, aquí está la página de faqs del sitio.

Agregar el plugin de java a Firefox en GNU/Linux

Para activar el soporte de java en nuestro navegador Firefox o cualquier otro que esté basado en el motor que usa Firefox haremos lo siguiente:

Antes que nada deberán instalar java, para eso pueden ir a este artículo en la sección Instalación de java.

Una vez instalado java y usando como ruta /usr/local/jdk1.6.0_04 para ejemplificar, realizaremos lo siguiente:

Nos convertiremos en usuario root.

javoaxian@sky:~$ su -

Ahora crearemos un enlace simbólico al directorio de plugins de firefox del plugin de java.

root@sky:~# ln -s /usr/local/jdk1.6.0_04/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/firefox/plugins/

Para otros navegadores como iceweasel.

root@sky:~# ln -s /usr/local/jdk1.6.0_04/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/iceweasel/plugins/

Para epiphany.

root@sky:~# ln -s /usr/local/jdk1.6.0_04/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/epiphany/plugins/

Con esto ya tenemos activado el plugin de java para nuestro navegador.

Para concluir, comprobaremos que esté activado el plugin. Bastará con abrir nuestro navegador y teclear lo siguiente en la barra de direcciones:

about:plugins

Donde nos aparecerá una salida similar a esta:

Java(TM) Plug-in 1.6.0_04-b12

File name: libjavaplugin_oji.so
Java(TM) Plug-in 1.6.0_04

MIME Type Description Suffixes Enabled
application/x-java-vm Java Yes
application/x-java-applet Java Yes
application/x-java-applet;version=1.1 Java Yes
application/x-java-applet;version=1.1.1 Java Yes
application/x-java-applet;version=1.1.2 Java Yes
application/x-java-applet;version=1.1.3 Java Yes
application/x-java-applet;version=1.2 Java Yes
application/x-java-applet;version=1.2.1 Java Yes
application/x-java-applet;version=1.2.2 Java Yes
application/x-java-applet;version=1.3 Java Yes
application/x-java-applet;version=1.3.1 Java Yes
application/x-java-applet;version=1.4 Java Yes
application/x-java-applet;version=1.4.1 Java Yes
application/x-java-applet;version=1.4.2 Java Yes
application/x-java-applet;version=1.5 Java Yes
application/x-java-applet;version=1.6 Java Yes
application/x-java-applet;jpi-version=1.6.0_04 Java Yes
application/x-java-bean Java Yes
application/x-java-bean;version=1.1 Java Yes
application/x-java-bean;version=1.1.1 Java Yes
application/x-java-bean;version=1.1.2 Java Yes
application/x-java-bean;version=1.1.3 Java Yes
application/x-java-bean;version=1.2 Java Yes
application/x-java-bean;version=1.2.1 Java Yes
application/x-java-bean;version=1.2.2 Java Yes
application/x-java-bean;version=1.3 Java Yes
application/x-java-bean;version=1.3.1 Java Yes
application/x-java-bean;version=1.4 Java Yes
application/x-java-bean;version=1.4.1 Java Yes
application/x-java-bean;version=1.4.2 Java Yes
application/x-java-bean;version=1.5 Java Yes
application/x-java-bean;version=1.6 Java Yes
application/x-java-bean;jpi-version=1.6.0_04 Java Yes

Abrir múltiples consolas en una sola ventana con Terminator

Terminator es una aplicación que nos permite abrir múltiples consolas con una sola ventana. Esto me recuerda a un funcionamiento muy parecido que tiene emacs (usando Ctrl-x 2, Ctrl-x 3 y sus variaciones) que permite abrir múltiples archivos en una sola ventana dividiendo la ventana tanto horizontal como verticalmente.

Para instalar esta aplicación en Debian, bastará con ejecutar lo siguiente:

javoaxian@sky:~$ su -
root@sky:~# apt-get install terminator

Para los que no cuentan con Debian, incluidos los de Ubuntu, deberán realizar lo siguiente:

Descargaremos Terminator desde aquí. La versión actual en el momento de hacer este post es la 0.8.1, por lo tanto bajaremos el archivo terminator_0.8.1.tar.gz .

Una vez que hayamos descargado el archivo, nos convertimos en root:

javoaxian@sky:~$ su -

En mi caso voy a mover el archivo que descargamos al directorio /usr/local/src.

root@sky:~# mv /ruta/donde/se/descargo/terminator_0.8.1.tar.gz /usr/local/src/

Ahora deberemos movernos al directorio /usr/local/src, descomprimimos el archivo y entramos al directorio que se crea.

root@sky:~# cd /usr/local/src
root@sky:~# tar -xzvf terminator_0.8.1.tar.gz
root@sky:~# cd terminator-0.8.1

Hecho lo anterior, ejecutaremos el siguiente comando para instalar el programa:

root@sky:~# ./setup.py install

Listo, ahora tenemos instalado Terminator. Para usarlo, bastará con ejecutar el comando terminator.

javoaxian@sky:~$ terminator&

Se nos abrirá una consola, donde podemos presionar con el botón derecho sobre ella para poder dividir nuestra consola.


También para mayor comodidad cuenta con comandos con teclas para poder hacer la división de la ventana, cómo por ejemplo:

Ctrl-Shift-E: Divide la consola verticalmente.
Ctrl-Shift-O: Divide la consola horizontalmente.
Ctrl-Shift-W o exit: Cierra la consola en la que nos encontramos.
Ctrl-Shift-Q: Cierra terminator.
F11: Pone en pantalla completa a terminator o regresar al tamaño inicial.
Ctrl-Shift-P: Pone el foco en la consola anterior.
Ctrl-Shift-N: Pone el foco en la consola siguiente.

Espero que esta aplicación les sea de ayuda, aquí dejo otra imagen con la separación de una ventana en 3 consolas.

sábado, 17 de mayo de 2008

Descomprimir archivos .rar en GNU/Linux

Por motivo de trabajo no he podido actualizar como quisiera mi blog, pero trataré de hacerlo lo más seguido posible.

Como dice el título del post, hoy voy a describir descomprimir archivos .rar en GNU/Linux.

Para poder usar este programa podemos descargarlo en esta página. Deberán bajar el archivo de acuerdo a su distribución o pueden bajar los fuentes e instalarlos.

En el caso de Debian y Ubuntu pueden instalarlo desde sus repositorios, para ésto, deberán convertirse en root.

javoaxian@darthmaul:~$ su -

Ahora ejecutaremos lo siguiente para instalarlo:

root@darthmaul:~# apt-get install unrar

Hecho esto, ya tendremos instalado el programa unrar, ahora para descomprimir nuestros archivos .rar podemos ejecutar lo siguiente:

javoaxian@darthmaul:~$ unrar e archivo.rar

El comando anterior extrae el contenido del archivo en el directorio actual, el inconveniente es que no respeta los directorios que existen en el archivo comprimido. Para que nos respete la jerarquía de directorios podemos ejecutar el comando con la opción "x".

javoaxian@darthmaul:~$ unrar x archivo.rar

Listo, ahora podemos descomprimir los archivos .rar que tengamos.

sábado, 10 de mayo de 2008

Fancy Zoom: Lightbox en JavaScript para nuestras aplicaciones Web


Fancy Zoom es una muy buena herramienta la cual te permite hacer zoom de las imágenes que se encuentran en nuestro sitio.

Este software es cuenta con licencia totalmente libre para uso no comercial y tiene un costo de $39 USD por sitio (un único pago). Trabaja con los formatos de imágenes jpg, gif, png, bmp o tiff.

Para instalarlo y usarlo es muy sencillo, bastará seguir los siguientes pasos:

  1. Descargar FancyZoom desde aquí (la versión vigente es la 1.1).
  2. Descomprimir el archivo FancyZoom 1.1.zip:
    $ unzip FancyZoom\ 1.1.zip

  3. Transferir los archivos FancyZoom.js y FancyZoomHTML.js que se encuentran dentro del directorio que se creó FancyZoom 1.1 -> js-global en el servidor donde se encuentra el sitio al que le queremos poner el efecto.
  4. Agregaremos las siguientes líneas en las páginas donde deseamos usar la aplicación:
    <script src="http://urlsitio/ruta/FancyZoom.js" type="text/javascript"></script>
    <script src="http://urlsitio/ruta/FancyZoomHTML.js" type="text/javascript"></script>

  5. Se deberá agregar en el body de la página la instrucción onload="setupZoom();". Por ejemplo:
    <body onload="setupZoom();">

  6. Listo, a quedado instalada la aplicación, ahora para poder usarla deberemos poner la imagen pequeña mostrada en nuestra página en el tag <img< y la imagen grande en un <a href> que abarca el tag <img>. Por ejemplo:
    <a href="imagenGrande.jpg"><img src="imagen_chica.jpg" /></a>
Presiona sobre la imagen de Tux para ver un ejemplo.

Para quienes desean saber más de FancyZoom dejo aquí el sitio de esta aplicación.

viernes, 9 de mayo de 2008

Extracción del audio de videos de YouTube en GNU/Linux

En esta ocasión y por la necesidad de una amiga que necesitaba extraer el audio de uno de los videos de YouTube, me dí a la tarea de investigar cómo poder hacer ésto.

Para comenzar, deberemos descargar el video que del cual deseamos separar el audio. Para poder realizar ésto, aquí dejo este artículo y este otro donde comento cómo se pueden bajar videos de YouTube en GNU/Linux.

Una vez que bajamos el video en formato .flv extraeremos el audio de éste. Para poder hacer ésto, necesitaremos de la aplicación mplayer.

Para los usuario de Debian o Ubuntu pueden ejecutar lo siguiente para instalar mplayer:

$ su -
$ apt-get install mplayer

Ahora que ya contamos con mplayer ejecutaremos lo siguiente para extraer el audio de nuestro video:

$ mplayer -dumpaudio archivo.flv

Se creará un archivo llamado stream.dump. Este archivo ya es en si un archivo en formato MP3 por lo que bastára con renombrar el archivo y ponerle la extensión .mp3.

$ mv stream.dump archivo.mp3

Ahora ya podrán reproducir este archivo con su reproductor de audio de su preferencia.

Aquí dejo el enlace del artículo en el que me basé.

jueves, 8 de mayo de 2008

Descomprimir archivos .ace en GNU/Linux

Una alternativa para comprimir archivos es usar el sistema de compresión de WinAce (Programa de Windows).

Este sistema de compresión ha podido prevalecer ya que su nivel de compresión es bastante bueno. Por lo tanto, en ocasiones cuando bajamos algún archivo desde la red, encontraremos que su extensión es .ace.

Para podere descomprimir este tipo de archivos deberemos de instalar en nuestro GNU/Linux el programa unace. Dicho programa permite extraer los archivos que se encuentran en nuestro archivo .ace.

En el caso de los usuario de Ubuntu este paquete se encuentra en los repositorios universe. Para activar tus repositorios checa este artículo.

Para los usuarios de Debian, existen dos versiones en sus repositorios, la aplicación unace que se encuentra en los repositorios main o en sus discos y la aplicación unace-nonfree que se encuentra en los repositorios non-free. En este artículo muestro como tengo configurados mis repositorios main contrib y non-free.

Una vez configurados nuestros repositorios, deberemos instalarlo de la siguiente manera:

$ su -
$ apt-get install unace

Ahora para poder descomprimir nuestros archivos podemos ejecutarlo de la siguiente manera:

$ unace x /ruta/archivo/archivo.ace

Si deseas instalar la última versión de este programa o en otra distribución, puedes descargar el archivo desde aquí en la sección Download Center. Para cuando se realizó este artículo, la versión vigente para Linux es la 2.5.

Ya que se descargó el archivo, bastará con descomprimirlo:

$ tar -xzvf linunace25.tgz

Este nos creará los siguiente archivo:

$ ls
file_id.diz licence linunace25.tgz unace


Ya tenemos instalado el programa unace, ahora para ejecutarlo haremos lo siguiente:

$ /ruta/donde/se/descomprimio/unace x /ruta/archivo.ace

Para evitar poner la ruta de donde se descomprimió el comando unace podemos agregar a nuestra variable PATH la ruta del comando unace y así poder ejecutarlo sin necesidad de especificar su ruta. En varios artículo ya he explicado como hacer ésto, aquí dejo uno de esos artículo.

Si queremos listar el contenido de nuestro archivo .ace podemos poner la opción l:

$ unace l archivo.ace

Con ésto concluyo este post.

jueves, 1 de mayo de 2008

Aumentar el tamaño de la SWAP en nuestro GNU/Linux

Quizas en algún momento deseamos incrementar nuestra swap, ya sea porque la creamos con muy poca capacidad cuando instalamos nuestro GNU/Linux, o queremos usar una aplicación que requiere de más swap de la que nosotros tenemos o por cualquier otra razón. Aquí muestro una forma de poder incrementar nuestra swap sin necesidad de reparticionar nuestro disco duro.

La forma para conseguir ésto, es creando un archivo que se usará como swap.

Para comenzar, deberemos realizar los siguiente pasos como root, para lo cual nos transformaremos en él.

javoaxian@darthmaul:~$ su -

Ahora que ya somos el usuario root, deberemos decidir donde vamos a colocar el archivo y dirigirnos a esta ruta. En mi caso lo pondré en /opt.

root@darthmaul:~# cd /opt

Hecho lo anterior crearemos el archivo que funcionará como swap. En este caso lo llamaremos extension_swap y lo crearemos con un espacio de 500MB (500000).

root@darthmaul:~# dd if=/dev/zero of=/opt/extension_swap bs=1k count=500000

Una vez que acabe, se nos mostrará algo similar a ésto:

500000+0 registros de entrada
500000+0 registros de salida
512000000 bytes (512 MB) copiados, 10.0202 segundos, 51.1 MB/s

Ahora deberemos cambiarle los permisos al archivo creado para que sólo root pueda alterarlo:

root@darthmaul:~# chmod 600 extension_swap

Como siguiente paso, indicaremos que nuestro archivo extensio_swap será una área de tipo swap.

root@darthmaul:~# mkswap extension_swap

Con el comando anterior nos aparecerá algo similar a lo siguiente:

root@darthmaul:~# Configurando espacio de intercambio versión 1, tamaño = 511995 kB
sin etiqueta, UUID=fa833990-025f-436f-9baa-75aeeeb6a095

Con ésto hemos creado nuestro archivo extensio_swap que servirá de swap junto con la que ya tenemos en nuestro sistema pero todavía no la hemos dado de alta.

Para comprobar el incremento en nuestra swap ejecutaremos el siguiente comando antes de levantar nuestro archivo de swap:

root@darthmaul:~# grep SwapTotal /proc/meminfo

El sistema nos mostrará el tamaño de swap que tenemos, en mi caso es de 2GB:

SwapTotal:     2000084 kB

Ahora levantaremos nuestro archivo swap:

root@darthmaul:~# swapon /opt/extension_swap

Y volveremos ejecutar el comando para verificar la swap que tenemos:

root@darthmaul:~# grep SwapTotal /proc/meminfo

Donde en mi caso aparecerá lo siguiente:

SwapTotal:     2500076 kB

Algo importante de aclarar es que cada vez que reiniciemos nuestra máquina deberemos levantar el archivo extension_swap con el comando swapon.
Quizas para no tener que estar haciendo cada vez esto pueden crear un script que cuando arranque la máquina se levante también nuestro archivo extension_swap. Aquí pueden ver como arrancar un proceso al iniciar Debian o Ubuntu.

Por último, para dar de baja el incremento de swap de nuestro archivo extension_swap deberemos ejecutar lo siguiente:

root@darthmaul:~# swapoff /opt/extension_swap

Espero que les sea de utilidad.