Dagi3d v4

Migrando voy, migrando vengo, por el hosting yo me entretengo

Parece que ya se terminaron de propagar los nuevos dns y ya está funcionando todo correctamente en el nuevo vps.
La migración ha resultado relativamente sencilla ya que apenas hubo problemas con la parte de la web, a excepción de alguno con las aplicaciones que iba a mantener en el hosting antiguo, aunque gracias al soporte de Dreamhost se solucionó todo.
Lo que sí que dio algún que otro quebradero de cabeza fue la configuración del correo (espero que no se hayan perdido muchos durante el traslado) ya que nunca me había metido en un berenjenal así, pero como ya comenté, sin duda lo mejor para aprender es cacharrear.

La configuración del hosting viene a ser:

Web
  • Apache 2.2 + mod_fcgid
  • Resin
  • Tomcat
  • Php5
  • Ruby
  • Ruby On Rails + RMagick + fcgi
  • MySql

Correo
  • Postfix
  • courier + courier-pop + courier-mysql
  • pop-before-smtp

Dns
  • Bind

La gestión de las cuentas de correos la estoy haciendo con courier-mysql y las cuentas virtuales de postfix también con mysql. De momento tengo que meter todo en la base de datos a mano, así que me he puesto a programar una pequeña interfaz web con ruby on rails para gestionarlas. Si queda algo más o menos presentable ya sacaré el código por si a alguien le resulta útil.

Si Laurel Aitken levantara la cabeza...

ska, ska, ska!

Iluminación global en tiempo real

Impresionantes videos demostrativos de Fantasy Engine, un motor gráfico capaz de representar escenas con iluminación global a 30 fps y una resolución de 1280×1024 pixels.
Evidentemente han usado una tarjeta gráfica de última generación, pero si siguen avanzando por ahí, creo que dentro de unos años estaremos viendo videojuegos con una calidad fotorrealista y todo en tiempo real, con todas las posibilidades que ello conlleva.

Más info en Fantasy Labs
Vía CgChannel

Configurar servidor DNS

Recientemente contraté un vps en Rosehosting utilizando un descuento especial para poder tener disponible una máquina remota sin las limitaciones que tiene un servidor compartido y hacer pruebas.
La ventaja del vps es que hay libertad casi absoluta para instalar lo que uno quiera, y aunque también implica que todo lo tiene que administrar uno mismo, es una estupenda oportunidad para aprender y cacharrear.
Así que una vez ya estaba listo el vps, el primer paso era instalar y configurar en la ‘nueva’ máquina el servidor DNS que se encargase de gestionar todos los dominios y subdominios que se fuesen creando.

El servidor tiene instalado una Debian Sarge y utilicé el dominio dagi3d.com que tenía registrado pero no estaba usando y tras varias pruebas y leer distitnos how-to’s en internet, esta fue la solución a la que llegué:

Instalar Bind

apt-get install bind

Añadir la entrada del dominio a /etc/bind/named.conf.local

zone "dagi3d.com" {
 type master;
 notify no;
 allow-query { any; };
 file "/etc/bind/dagi3d.com.zone";
};

Configurar el fichero para la zona del dominio (/etc/bind/dagi3d.com.zone):

$TTL 3600
@ IN SOA dagi3d.com. info.dagi3d.com. (
            2006061701
            3H
            1H
            14D
            604800)
; DNS
        IN      NS      ns.dagi3d.com.
        IN      NS      ns2.dagi3d.com.
        IN      MX 10   mail.dagi3d.com.
; nombres
        IN      A       206.196.111.109
www     IN      A       206.196.111.109
mail    IN      A       206.196.111.109
ns      IN      A       206.196.111.109
ns2     IN      A       206.196.111.109

Basicamente se está indicando que los servidores de nombres y las peticiones a dagi3d.com, www.dagi3d.com y mail.dagi3d.com(para el correo), apunten a la ip 206.196.111.109
Lo ideal sería tener los distintos servicios en máquinas diferentes, pero en este caso no hay más recursos así que no queda otra face-smile.png

Luego bastaría con reiniciar el servidor dns:
/etc/init.d/bind restart

Y por último habría que indicar donde hayamos registrado el dominio, que éste utilizará los dns’s ns.dagi3d.com y ns2.dagi3d.com pero a su vez, también hay que indicarle de alguna manera la dirección ip de cada uno, ya que en primera instancia todavía no se conoce la dirección ip de los servidores pues todavía no se ha propagado la información por el resto de servidores dns y sería como un circulo vicioso.

Y estos son algunos de los enlace que utilicé y donde explican más detalladamente todo el proceso:

El siguiente paso será instalar Postfix + Courier para el correo y en otro post explicaré como instalar Apache + mod_fcgi + Ruby On Rails

Sesiones en aplicaciones web multiventana

Cuando estamos desarrollando una aplicación web, una manera de usar nuestras variables en las distintas peticiones que el usuario pueda hacer es ir guardándolas en la sesión. Evidentemente también se podrían ir arrastrando a través de la url pero esto supondría un engorro bastante grande, y más si lo que estamos tratando de guardar son objetos y no simples datos primitivos.
Pero si guardamos los objetos en la sesión nos podremos encontrar con problemas si el usuario decide abrir otra ventana con la aplicación ya que podría darse el caso que los objetos se estuviesen pisando unos a otros sin darnos cuenta.
Por ejemplo, se abre la ventana A y guardamos el objeto X en la sesión. A continuación abrimos la ventana B y guardamos bajo el mismo el nombre el objeto Y.
En ese caso, si realizásemos cambios en la ventana A, se estarían aplicando sobre el objeto Y en lugar del primero, que sería lo correcto.
Por eso he tratado de implementar en php una característica que ofrece el framework Seam de JBoss para tratar de solucionar este tema, que es el contexto conversacional. La idea en sí es bastante sencilla de implementar, ya que se trata simplemente se ir guardando en un array las distintas conversaciones que se vayan creando, guardando en la conversación actual de manera transparente las variables que deseemos.
Así tan sólo sería necesario ir arrastrando el identificador de la conversación a la que queremos acceder cuyo nombre se indicará al crear la instancia del contexto.

He colgado aquí un ejemplo de aplicación utilizando esta técnica y aquí el código fuente de ésta.

Si se abren varias ventanas con esta aplicación, se puede comprobar que está utilizando distintas conversaciones pero está grabando todas las variables en la sesión del usuario.

Y aquí está el código fuente de la clase.

Supongo que el siguiente paso será tratar de implementar esto en RubyOnRails face-smile.png