lunes 20 de octubre de 2008

Apadrina a un vago

Todos los que me conocéis sabéis que en mi vida he trabajado (23 años y sumando), que ningún familiar me da dinero, pero, aún así, me las he arreglado para vivir bastante bien gracias a unas pocas becas. El problema es que ya no estudio y el dinero empieza a acabarse, por lo que he tenido que buscar una forma alternativa de ganar dinero. En menos de un mes empezaré a trabajar, pero no es algo que quiera hacer durante mucho tiempo (si te pagan por ello, no puede ser bueno). Después de mucho pensar, he encontrado la solución más fácil: acepto donaciones. Así que ya sabéis, si os sobra dinero (y si no, también) y no sabéis qué hacer con él, dádmelo y ayudad a malcriarme un poco más. A cambio, me comprometo a agradecer las donaciones en mi blog y a hacer aquéllo que me pidan, siempre que no implique gastar dinero (no me voy a gastar la donación en agradecerla, necesito comer). Para empezar a donar:




A partir de ahora, podréis ver este botón en el lateral del blog, para que podáis hacer donaciones cada vez que entréis al blog.

Y por último, debo pediros que aviséis a toda la gente que podáis (y si les sobra dinero, mejor) de que pueden mantener a un vago vivo con sus donaciones.

¡¡Gracias a todos!!

miércoles 15 de octubre de 2008

Configurando DynDNS para nuestro servidor

En esta entrada explicaré cómo hacer visible nuestro servidor al resto del mundo, ya que de momento sólo podíamos acceder a él desde nuestra red casera. El primer paso será abrir una cuenta en www.dyndns.com. Al abrir la cuenta puedes escoger el nombre del dominio (en mi caso, borjadp.homeunix.org), que pasará a ser la dirección de nuestro servidor. Cada vez que nuestro router se conecta a internet recibe una dirección IP dinámica del ISP, por lo que no podemos asociar nuestro nombre de dominio a una IP fija. El objetivo de dyndns es proporcionarnos un dominio que apunte a la IP que nosotros le especifiquemos en cada momento. Para comunicarle dicha IP al servidor de dyndns utilizaremos el programa ddclient, que en Ubuntu se instala con el comando:

$sudo aptitude install ddclient

Durante la instalación nos preguntará qué servicio de IP dinámica usamos, que, en nuestro caso, es dyndns. A continuación nos pide el nombre de dominio que usaremos en nuestra máquina, nuestro nombre de usuario y contraseña y la interfaz de red que usaremos (en mi caso, eth0). Si nos equivocamos en algún paso, podremos editar la configuración en el fichero /etc/ddclient.conf. Una vez instalado, debemos configurarlo para que detecte la IP pública del router y no la IP del servidor dentro de la red local. Para ello, añadimos la línea:
use=web, web=checkip.dyndns.org
al fichero de configuración de ddclient.

Algunos routers tienen ya incluídas opciones de configuración para servicios como dyndns y puede ser más sencillo utilizarlos en lugar de ddclient, pero ésta es la opción que funciona siempre.

El siguiente paso es configurar el router para hacer visible nuestro servidor, pero eso ya depende del modelo que uno tenga. En mi caso, un router D'Link 524, viene preconfigurado el acceso para HTTP, por lo que sólo he tenido que indicar la IP del servidor dentro de mi red.

Así que ahora, para acceder a mi servidor escribid borjadp.homeunix.org y a mi instalación de Drupal borjadp.homeunix.org/html.

martes 14 de octubre de 2008

Instalando Drupal

Este artículo se puede considerar continuación del anterior, ya que sigo intentando montar un servidor en casa (pero poco a poco, no es que sea difícil). En este caso instalaré el CMS (Content Managing System) libre Drupal, para poder tener un blog, galería de fotos y algo más de forma fácil (el juego sí que lo programo, el resto ya es demasiado...). Esta instalación, al igual que la anterior, la haré en Ubuntu 8.04, ya veré luego si lo intento en Mac OS X.

Lo primero es escoger la versión, que, en mi caso, será la 5, ya que por lo que he podido ver en lo poco que he buscado, tiene muchos más módulos disponibles, pues la versión 6 es bastante reciente, y quiero tener todo el trabajo hecho. El segundo paso, claro está, es ir a la guía de instalación de la página oficial. Lo primero que hay que hacer es descargar Drupal aquí y extraerlo, en mi caso, en el directorio drupal-5.11.

Antes de seguir con la instalación de Drupal, tenemos que cumplir los requisitos. Para ello debemos instalar y configurar un servidor web, una base de datos y PHP. Para el servidor web usaré Apache 2, que se instala con el comando:

$sudo aptitude install apache2

Esta instalación nos deja como directorio base de Apache /var/www. Para más información sobre la configuración básica de Apache en Ubuntu: doc.ubuntu-es.org.

En cuanto a la base de datos, en la entrada anterior expliqué cómo instalar PostgreSQL 8.2, que será la que usaré ahora, tan sólo tendremos que crear las bases de datos para Drupal:

$createuser --pwprompt --encrypted --no-adduser --no-createdb drupal
$createdb --encoding=UNICODE --owner=drupal drupal

Con esto creamos el usuario drupal (con la contraseña que queramos) y la base de datos drupal, perteneciente al usuario drupal.

Para instalar PHP, más los módulos necesarios para ejecutar Drupal, escribiremos:

$sudo aptitude install php5 php5-pgsql php5-gd libapache2-mod-php5

Una vez hecho ésto, debemos cambiar ciertos parámetros en los ficheros de configuración de php para que Drupal funcione sin problemas. Para ello debemos editar el fichero /usr/share/php5/php.ini-dist y cambiar los siguientes parámetros:
->memory_limit = 8M memory_limit = 16M (en mi caso, ya venía así por defecto)
->register_globals = Off por register_globals = On
->session.save_handler = files por session.save_handler = user
->descomentar error_reporting = E_ALL & ~E_NOTICE (en mi caso, ya estaba así)
->session.cache_limiter = nocache (en mi caso, ya venía así)

Ahora seguiremos con la instalación de Drupal. Para ello debemos copiar el contenido del directorio drupal-5.11 a /var/www/html:

$sudo mkdir /var/www/html
$sudo mv drupal-5.11/* drupal-5.11/.htaccess /var/www/html

El último paso antes de iniciar la instalación de Drupal desde el navegador es dar permisos de escritura al fichero /var/www/html/sites/default/settings.php. Para ello:

$sudo chmod 666 /var/www/html/sites/default/settings.php

Ahora debemos abrir un navegado e ir a la dirección http://localhost/html/install.php. Ahora debemos dar los datos de la base de datos y eliminar los permisos de escritura del fichero anterior:

$sudo chmod 444 /var/www/html/sites/default/settings.php

Ahora ya sólo queda seguir las instrucciones en pantalla para configurar nuestro servidor.

En otra entrada intentaré explicar como tener este servidor más el del juego juntos y cómo hacerlos visibles fuera de nuestra red local.

miércoles 8 de octubre de 2008

Instalación de JuegOnline

En este artículo voy a explicar cómo instalar el proyecto que hice para la carrera. De momento no está tan avanzado como me gustaría, pero tengo intención de continuarlo y hablar de él aquí para todos aquellos a los que pueda interesar usarlo o aprender algo de Java, Tomcat, PostgreSQL o Struts a medida que continúo con su desarrollo (si es que tengo tiempo, que en breve empezaré a trabajar).

El primer paso es descargarlo de mi página de sourceforge. Para ello bajamos el único fichero que hay (de momento, espero tener alguna actualización en breve) JuegOnline-0.1.0.tar.gz. Dentro de este fichero se encuentra otro fichero comprimido con el código de la aplicación, llamado juego-0.1-src.tar.gz (que extraeremos donde queramos, quedando el directorio juego-0.1) y un fichero README con las instrucciones para hacerlo funcionar, las cuales explicaré ahora.

El software utilizado para desarrollar la aplicación fue el siguiente:
-Sistema operativo: Ubuntu Linux 7.04 y Mac OS X 10.4, aunque debería poder funcionar en cualquier sistema UNIX sin muchos cambios. Ahora estoy utilizando Ubuntu Linux 8.04, por lo que muchos programas se instalarán mediante apt, aunque todos ellos se pueden compilar directamente y ser usados de la misma manera (lo que he tenido que hacer para OS X y que explicaré en otra entrada).

-Una implementación de J2SE 5.0: En Linux he usado el JDK 1.6.0 de Sun y en OS X el JDK 1.5 de Apple.

-La herramienta maven 2 para gestionar el proyecto (compilar, generar la documentación, los jars, etc). Es una herramienta con utilidades similares a Ant, pero más avanzada y con más posibilidades.

-Base de datos PostgreSQL 8.2 con el driver postgresql-8.2-504.jdbc3.jar. Aunque se puede cambiar por otra base de datos relacional cambiando unos pocos scripts. En algún momento intentaré hacerlo compatible con MySQL.

-Un servidor de aplicaciones conforme a las especificaciones Servlet 2.4 y JSP 2.0. Yo he usado Apache Tomcat 5.5.

-Una implementación de JSP Standard Tag Library 1.1 (JSTL). He usado Jakarta Standard Taglibs 1.1.2.

-El framework Modelo-Vista-Controlador Apache Struts 1.2.9 para JSP.

Dado que hace ya un año que acabé el proyecto, hay versiones nuevas de casi todo el software usado (de algunos ya las había incluso cuando empecé a programar...), así que tendré que ver si de alguna merece la pena actualizar o si hay algún problema de compatibilidad con las versiones nuevas.

Antes de nada, y dado que vamos a instalar una aplicación hecha en Java, tendremos que instalar el JDK (Java Development Kit). En mi caso he usado el JDK oficial de Sun, que se encuentra en los repositorios de Ubuntu (multiverse). Para instalarlo:
$sudo aptitude install sun-java6-jdk
Una vez hecho esto, el primer paso será instalar maven. Cuando hice el proyecto tuve que compilarlo desde las fuentes, pero ahora está disponible en los repositorios de Ubuntu (universe), así que para instalarlo llega con:
$sudo aptitude install maven2
Con esto se instalará la versión 2.0.8. Para comprobar si está instalado correctamente y si detecta la instalación de java:
$mvn --version
El siguiente paso es un poco más complicado. Se trata de la instalación de la base de datos. A pesar de estar ya disponible la versión 8.3 de PostgreSQL (también en los repositorios de Ubuntu) instalaremos la versión 8.2, que es la que he usado durante el desarrollo de la aplicación. Para ello basta con escribir:
$sudo aptitude install postgresql-8.2
Para poder controlar la ejecución del servidor de bases de datos, deberíamos borrarlo del directorio init.d (directorio donde están los servicios del sistema). Para pararlo:
$sudo /etc/init.d/postgresql-8.2 stop
Para que no se ejecute al encender el ordenador:
$sudo chmod -x /etc/init.d/postgresql-8.2
Los binarios de postgresql no se encuentran en el PATH una vez instalado, por lo que habrá que añadirlos a mano:
$export PATH=/usr/lib/postgresql/8.2/bin:$PATH
Antes de inicializar la base de datos debemos indicar en qué directorio se guardarán los datos, para ello, utilizamos la variable de entorno PGDATA. No debemos crear el directorio, sólo especificarlo, ya que postgresql se encarga de crearlo. Dicho directorio pertenecerá al usuario que ejecute la base de datos:
$export PGDATA=$HOME/PostgreSQLData
$initdb
Una vez hecho esto, debemos crear los usuarios y las bases de datos del juego. Para no tener que cambiar la configuración (aunque sería recomendable), crearemos la base de datos "juego" y el usuario "juego" con contraseña "juego". Para ello:
  • Debemos arrancar el servidor de bases de datos:
$postgres / postmaster /pg_ctl start
  • Crearemos el usuario con la orden:
$createuser -P juego
La opción -P hace que postgresql nos pida una contraseña para el usuario (que será juego). Luego nos preguntará si será superusuario, debemos responder que no. Ahora nos preguntará si podrá crear bases de datos y nuevos usuarios y sólo responderemos que sí a la creación de nuevas bases de datos. El siguiente paso es crear la base de datos llamada juego y que pertenecerá al usuario juego, para ello:
$createdb -U juego -W juego --enconding=UNICODE
Ahora ya sólo queda comprobar que todo haya salido bien; para ello intentaremos entrar a la base de datos mediante el usuario juego tecleando:
$psql juego juego
Para parar el servidor de bases de datos tan sólo hay que pulsar CTRL-C en el terminal desde el cual hemos lanzado postgres o, en caso de haber usado pg_ctl, escribir:
$pg_ctl stop
Ahora instalaremos el contenedor de aplicaciones Apache Tomcat en su versión 5.5, que se encuentra en los repositorios de Ubuntu. Para ello bastará con escribir:
$sudo aptitude install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps
Ahora, para evitar problemas más adelante, debemos pararlo y eliminar los permisos de ejecución para que no se inicie al arrancar el sistema:
$sudo /etc/init.d/tomcat5.5 stop
$sudo chmod -x /etc/init.d/tomcat5.5
Una vez instalado debemos crear la variable de entorno CATALINA_HOME, apuntando al directorio base de Tomcat. En mi caso:
$export CATALINA_HOME=/usr/share/tomcat5.5
Debemos modificar el fichero conf/tomcat-users.xml para crear un usuario en el rol de gestor del servidor, en mi caso he modificado el usuario tomcat:
<user username="tomcat" password="tomcat" roles="tomcat,manager"></user>
De esta forma podremos acceder a la aplicación web Tomcat Manager como el usuario "tomcat" con la contraseña "tomcat" (esta contraseña debería cambiarse al usar la aplicación).
Para que la aplicación pueda conectarse a la base de datos, necesitamos bajar el driver JDBC para Postgresql. En mi caso, uso la versión 8.2-508 JDBC 3. Una vez descargado, se copia al directorio $CATALINA_HOME/common/lib. Ahora hay que definir un datasource global llamado "jdbc/GameDS". Para ello añadiremos lo siguiente al fichero conf/server.xml dentro de la etiqueta <GlobalNamingResources>:
<!-- PostgreSQL -->
<resource name="jdbc/GameDS" auth="Container" type="javax.sql.DataSource" driverclassname="org.postgresql.Driver" url="jdbc:postgresql://localhost/juego" username="juego" password="juego" maxactive="4" maxidle="2" maxwait="10000" removeabandoned="true" removeabandonedtimeout="60" logabandoned="true" validationquery="SELECT COUNT(*) FROM PingTable"/>
Y añadimos las siguientes líneas a conf/context.xml dentro de la etiqueta <Context>:
<ResourceLink name="jdbc/GameDS" global="jdbc/Game" type="javax.sql.DataSource"/>
Ahora necesitamos compilar y ejecutar el código de la aplicación, que, gracias a maven, debería ser bastante sencillo. Lo primero es crear el paquete .war de la aplicación. Para ello, desde el directorio base de la aplicación, juego-0.1, ejecutamos:
$mvn package
En ese directorio se encuentra el fichero pom.xml que especifica los parámetros necesarios para que maven compile la aplicación. Con esto conseguimos crear el fichero Game.war en el directorio ~/juego-0.1/dev/game/target/.

Ahora que ya tenemos todo lo necesario para ejecutar la aplicación, vamos a listar los pasos a seguir:
1. Arrancar el servidor de bases de datos. Debemos arrancarla con el mismo usuario con el que ejecutamos initdb, escribiendo:
$postmaster
o
$postgres
En ambos casos, el servidor se ejecuta en primer plano, por lo que podremos ver el registro de la base de datos en la pantalla sin necesidad de abrir ningún fichero.
En mi caso tengo un problema, me obliga a crear, cada vez que reinicio la máquina, un directorio /var/run/postgresql perteneciente al root (ya que un usuario normal no tiene permisos para ello) y con permisos de lectura, escritura y ejecución para el usuario que ejecuta postgres. Si alguien me puede explicar cómo cambiar eso, por favor, que lo haga en los comentarios. Yo aún no he tenido tiempo de mirarlo bien.

2. Arrancar el contendor de aplicaciones web Tomcat. Para ello debemos tomar antes el rol de root, de lo contrario, la aplicación no tendrá permisos para acceder a los ficheros necesarios y dará errores. Luego, tecleamos:
$$CATALINA_HOME/bin/startup.sh
3. Ahora debemos iniciar la base de datos del juego, para ello se proporciona un script sql que se ejecuta con la siguiente orden:
$mvn sql:execute
Me acabo de dar cuenta de que en la versión que he subido a sourceforge hay un par de errores en este script, que debemos corregir antes de ejecutar la orden anterior. El fichero es ~/juego-0.1/src/resources/sql/PostgreSQLCreateTables.sql. Para solucionar dichos problemas, debemos añadir, en cualquier parte del fichero:
-- Table PingTable:
DROP TABLE PingTable;
CREATE TABLE PingTable();
Y cambiar nexval('UsersSeq') por nextval('UsersSeq'). Espero subir en breve una versión con estos errores corregidos.

4. El último paso es desplegar la aplicación. Para ello tenemos las siguientes órdenes de maven:
$mvn install
$mvn tomcat:deploy
No sé por qué, pero fallan. Cuando hice el proyecto funcionaban sin problemas, así que ya veré cómo puedo hacerlo en otro momento. De todas formas, esto se puede hacer fácilmente con Tomcat Manager. Para acceder a él, escribimos en el navegador http://localhost:8180/manager/html, nos pedirá el nombre de usuario y contraseña que hemos definido antes (en mi caso, Tomcat, Tomcat) y ya estaremos en la página de gestión de Tomcat. Desde ahí podremos desplegar nuestra aplicación manualmente especificando la ruta del fichero Game.war.

5. Para acceder a la aplicación, escribiremos en la barra de direcciones de nuestro navegador http://localhost:8180/Game/.

Para ir terminando, os copio aquí un fragmento de mi fichero /etc/bash.bashrc:
# ------------------------------------------------------
# Programming Tools.
# ------------------------------------------------------

# This sets JAVA_HOME for maven:
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export PATH=$PATH:$JAVA_HOME

# This changes the data directory for PostgreSQL:
export PGDATA=$HOME/PostgreSQLData

# This adds PostgreSQL binaries to PATH:
export PATH=/usr/lib/postgresql/8.2/bin:$PATH

# This is needed to use Tomcat:
export CATALINA_HOME=/usr/share/tomcat5.5

La ventaja de usar /etc/bash.bashrc con respecto a ~/.bashrc, es que esas variables de entorno estarán presentes para todos los usuarios del sistema, aunque hay que tener privilegios de root para poder editar ese fichero.

Para próximas entradas dejo:
  • Cómo arreglar los errores que he comentado aquí.
  • Qué voy a añadir en las próximas versiones.
  • Cómo usar eclipse para el desarrollo y cómo integrarlo con maven (puede que esto ayude).
  • Un pequeño manual de instrucciones.
  • Instalación en Mac OS X.
  • Hacer la aplicación disponible desde fuera de nuestra máquina (esto ni lo he intentado, de momento...).
  • Explicaros cómo podéis ayudar a traducir la aplicación, que ya está preparada para ello.

Por último, recordad que la aplicación está alojada en sourceforge y que para todas aquellas dudas que tengáis al respecto tengo la dirección de correo borjadp@users.sourceforge.net.

Y si alguien ha tenido la paciencia de leer esto y, sobretodo, de probar la aplicación, ¡¡gracias!!

Cosas varias... sobre París

Juro que estoy preparando una entrada sobre mi proyecto y otra sobre el resto del viaje a Toronto, pero mientras voy a poner aquí unos enlaces que puede que os gusten a aquéllos que estuvisteis en París conmigo (y puede que a otros también...):

El primero es una página de mapas en perspectiva isométrica con los monumentos y lugares interesantes resaltados. Por defecto aparece New York, pero también están, entre otras muchas, París y Amsterdam. Aquí.

El segundo es un blog de un tipo que se dedica a grabarse en vídeo cuando hace turismo y, visto el tiempo que se pasa haciéndolo, parece que vive de ello (ya estoy tomando nota...). Y, como antes, también hay una sección sobre París aquí.

Y por último una web de fotografía dedicada en exclusiva a París. Lo que más me gusta de ésta es la sección de panoramas, vistas en 360º de casi todos los puntos de la ciudad. Para verlos, pinchad aquí.

lunes 15 de septiembre de 2008

Excursión a New York

Elsa, claro que no me olvido de ti, pero es que no he encontrado nada que tenga que ver contigo. Por cierto, he decidido que el año que viene voy a Barcelona a estudiar Física, así que ya puedes ir buscando piso para compartir. Bueno, tal vez ésto sí tenga que ver contigo:
Es la piscina del Hilton en el que estamos; imagino que si eso mismo lo ves tú en España no te bañas xD. No tengo nada más que pueda relacionar contigo... lo siento!! Y ya que estamos con fotos del hotel, aquí el yacuzzi y la habitación en la que dormimos:
Y sigo con fotos de la excursión. Aquí está el chino que nos guía por el campus de Harvard (que no es para tanto, por mucha fama que tenga; pero sí es mejor que Paris VIII):
Y cómo no, la tercera réplica de la Estatua de la Libertad que veo (me gustaban más las de París...):
Y después de eso, a dar una vuelta por la Quinta Avenida y, ya de paso, visitar la Apple Store más famosa y cumplir el sueño de una modelo que insistía en sacarse una foto conmigo:
Y para terminar, visita a Times Square, el edificio Chrysler, la estación central, el Empire State y la juguetería más grande que he visto en mi vida, con noria dentro, réplicas en Lego de los edificios más importantes de la ciudad y ¡un T-Rex!
Y mañana Washington; en cuanto pueda subiré más fotos para seguir dándoos envidia!

domingo 14 de septiembre de 2008

Por Toronto

Bueno, ya sé que muchas queríais estar donde estoy yo ahora y que me envidiáis, así que, si os consuela, os diré que no me gusta la ciudad. Ésto es lo único medio bonito que he conseguido ver de momento:
Y aquí están más fotos de la CN Tower / Tour CN (aquí todo está en inglés y francés aunque sólo se habla el primero), que es la torre más alta del mundo (hasta que acaben de construir la torre Burj Dubai):


Y aquí el anochecer desde lo más alto de la torre:

Y para que veáis que no todo es hacer turismo, una foto de la escuela de inglés (verídico):

Y ahora cosas que tienen que ver con vosotras:
  • Ésta para Paloma (su regalo):
  • Ésta para Teresa:
  • Y ésta para Helena (es el musical de Dirty Dancing):

Bueno, que sepáis que ésto lo he escrito desde el Hilton de Boston :D En cuanto pueda pongo más cosas del viaje a New York!!