Monday, April 28, 2008
Ubuntu 8: Hardy Heron LTS
Hace pocos días salió a la luz Hardy Heron, no fuimos pocos los que recién parido quicimos tenerlo en nuestras manos y gozar de su belleza. Lo bajé de la web TuxPUC que es de un grupo de Investigación alrededor del tema de Linux y Software Libre que existe en mi universidad. Pertenecí a este grupo hace algún tiempo.
Quemé la imagen del Hardy Heron 8.04 LTS Alternate a un CD y procedí con algunos comandos para actualizar mi sistema.
gksu "sh /cdrom/cdromupgrade"
Durante el proceso de Upgrade guardé una copia de algunos archivos que el sistema de actualización sugería reemplazar. Alrededor de 300 MB fueron descargadas pues tengo más software instalado que el que vino en el CD de Gusty Gibbon. Entonces no les contaré tanto sobre el Hardy Heron sino del comportamiento de otras aplicaciones ya instaladas en Ubuntu antes del upgrade.
LDAP
cp /etc/ldap/ldap.conf /etc/ldap/ldab.conf.bak
Se ha insertado en la primera línea un comentario sobre la versión de este archivo de configuración.
Se ha reemplazado el dc base de ejemplo de example a nodomain.
Es seguro reemplazar este archivo.
MySQL
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
Se ha agregado una anotación con prioridad de Importante sobre cambios generales al archivo de configuración de mysql. Yo Había activado skip-external-locking para administración remota pero no tuve éxito así que puedo reemplazar este archivo sin problemas.
Asterisk
cp /etc/asterisk/extensions.conf /etc/asterisk/extenstions.conf.bak
Se han corregido ciertas imprecisiones en los nombres de comandos del CLI de asterisk. También se han reemplazado algunas comillas simples por comillas dobles. Es conveniente rescatar configuraciones personales como pueden ser extensiones creadas por nosotros en este archivo.
Por ejemplo yo tengo las siguientes líneas. Sin embargo es curioso que la actualización de asterisk no reemplaza iax.conf. Entonces no realiza el reemplazo por tratarse de archivos de configuración sino únicamente de los que se hayan tenido cambios desde la versión anterior.
;
[positivo]
exten => 444,1,Dial(IAX2/Rita)
exten => 444,2,Hangup
exten => 445,1,Dial(IAX2/Bob)
exten => 445,2,Hangup
exten => 600,1,Dial(IAX2/Ziggy)
exten => 600,2,Hangup
;
ProFTPd
cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak
Se ha agregado una línea imprescindible en la versión 1.3 de proftpd que es una instrucción Include. Se debe reemplazar el archivo de configuración anterior.
PHP5
cp /etc/php5/cli/php.ini /etc/php5/cli/php.ini.bak
Se ha incrementado la memoria que un script puede usar en memoria de 32M a 128M.
Se ha incluido las opciones para la salida de errores.
La función dl() que se emplea en servidores multihilo como IIS o Zeus es automáticamente desabilitada en ellos por lo que está activa por defecto.
El valor para cgi.fix_pathinfo es por defecto 0 pero la documentación señalaba 1, esto ha sido corregido.
El parámetro fastcgi.log ha sido renombrado a fastcgi.logging.
Al final del archivo se ha incluido una línea que hace referencia a la extensión imap.so.
cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak
Los cambios en este archivo son los mismos que se presentan en /etc/php5/cli/php.ini. Adicionalmente, al final del archivo se hace referencia a la extensión mcrypt.so.
SASL
cp /etc/default/saslauthd /etc/default/saslauthd.bak
Se ha agregado unas línea de Descripción del demonio de Autenticación SASL.
Se ha agregado unas líneas para un nombre corto para este demonio.
Ahora es necesario emplear el flag -m.
Tremendo Bug
PHP5 no trae imagick ni recode. imagick.so y recode.so están en los repositorios oficiales de Ibuntu pero existen problemas con libWand.so.9.
El buen Olexandr Zanichkovsky coloca en su repositorio de launchpad los paquetes arreglados.
deb http://ppa.launchpad.net/ozanichkovsky/ubuntu hardy main
Que dicho sea de paso, aún no logro instalar.
Etiquetas:
hardy heron,
ubuntu,
ubuntu 8.04 LTS
Friday, April 25, 2008
Git y Mercurial: QuickStart for the impatient
Deseaba probar los sistemas de control de versiones Git y Mercurial así que decidí versionar un pequeño proyecto para postear al Twitter de manera automatizada los últimos feeds de los blogs que administro. Veamos las fuentes de este proyecto como simpleas archivos alacenados en un directorio simple. Inicialmente este directorio se llamaba RSStoTwitter y pensa cambiarlo a RSS2Twitter pero uno de los blogs está sindicado con Atom así que el nombre no era preciso. No me he preocupado en revisar si el Atom es un RSS, pero supongo que amgos son estructuras XML sencillas y transformables entre sí ya que su finalidad e sla misma. No nos desviemos más y vayamos a lo nuestro.
He creado tres directorios para realizar las pruebas.
git_github: versionará empleando Git y es alojado en el servidor libre de GitHub.com
git_assembla: versionará empleando Git y es alojado en el servidor libre de Assembla.com
hg_freehg: versionará empleando Mecurial (HG por el símbolo del elemento químico Mercurio) y es alojado en el servidor libre FreeHG.org
Para el caso de Git se puede emplear la seguridad de un certificado RSA el cual podemos crear desde el directorio home de nuestro usuario:
cd .ssh
ssh-keygen -t rsa
Para mostrar la llave pública realizamos la impresión en pantalla de un archivo generado en el proceso anterior:
cat id_rsa.pub
Esta llave se puede ingresar tanto en el Sitio de Assembla que hayamos creado como en el Perfil de GitHub.
Assembla es un poco más complejo debido a las mayores opciones que permite. Por ejemplo el soporte para Git debemos agregarlo ya que no está activo por defecto y podemos elminar Subversion.
qct
qgit
Para el caso de GitHub realicé lo siguiente:
cd twitterrssmultifeed/
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:adagio/twitterrssmultifeed.git
git push origin master
Ese archivo README está vació pero ya se encuentra en el repositorio. Luego de copiar las fuentes de mi aplicación las agregué, hice commit y nuevamente push. Para el caso de Assembla no realicé el paso de crear un archivo README que no forma parte de mi aplicación sino de un ejemplo. Así que luego de copiar las fuentes en el directorio ejecuté los siguientes comandos.
git add .
git-commit -m "first commit"
git remote add origin git@git.assembla.com:twitterrssmultifeed.git
git push origin master:refs/heads/master
Debido al certificado RSA el password me es solicitado, esto se puede automatizar.
Para el caso de Mercurial realizar un proceso similar fue algo accidentado ya que no completaba la operación de commit. Lo más sencillo fue clonar el repositorio al directorio local:
cd mercurial_freehg/
clone http://freehg.org/u/adagio/twitterrssmultifeed/ twitterrssmultifeed/
Y Luego de copiar las fuentes emplear una aplicación que realice el commit ( hg status, hg add, hg commit ):
qct
Esta aplicación detecta de forma automática el sistema de control de versiones empleado. Seguramente lo hace buscando los ficheros .git o .hg, de forma similar para otros sistemas como subversion o cvs.
Finalmente el proceso de push lo realicé sin problemas.
hg push http://freehg.org/u/adagio/twitterrssmultifeed/
Vemos que Git y Hg el proceso de commit está separado del push. La teoría de estos sistemas debe justificar esta implementación y el uso de herramientas gráficas totalmente integradas al sistema operativo como Tortoise nos ocultan estos interesantes detalles que podrían ser muy útiles cuando deseamos conocer si ya hemos sobreescrito algún archivo entre otras aplicaciones bastante prácticas.
Pensaba probar el promocionado sistema Bazaar pero parece que los dos que he explicado son mejores. Es una interesante tarea para quien los use conocer sobre la comparación de fuentes, creación de forks, exportación de proyectos, candados, etc. Pero personalmente le doy el uso más sencillo de versionado personal.
Alrededor de estas tecnologías sitios como Assembla están brindando la posibilidad de realizar un seguimiento a reporte de bug, tener salas de chat, establecer hitos, seguir un proceso formal de desarrollo, entre otras herramientas que deben ser seleccionadas de acuerdo a la naturaleza del proyecto que se tenga.
Saludos.
He creado tres directorios para realizar las pruebas.
git_github: versionará empleando Git y es alojado en el servidor libre de GitHub.com
git_assembla: versionará empleando Git y es alojado en el servidor libre de Assembla.com
hg_freehg: versionará empleando Mecurial (HG por el símbolo del elemento químico Mercurio) y es alojado en el servidor libre FreeHG.org
Para el caso de Git se puede emplear la seguridad de un certificado RSA el cual podemos crear desde el directorio home de nuestro usuario:
cd .ssh
ssh-keygen -t rsa
Para mostrar la llave pública realizamos la impresión en pantalla de un archivo generado en el proceso anterior:
cat id_rsa.pub
Esta llave se puede ingresar tanto en el Sitio de Assembla que hayamos creado como en el Perfil de GitHub.
Assembla es un poco más complejo debido a las mayores opciones que permite. Por ejemplo el soporte para Git debemos agregarlo ya que no está activo por defecto y podemos elminar Subversion.
qct
qgit
Para el caso de GitHub realicé lo siguiente:
cd twitterrssmultifeed/
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:adagio/twitterrssmultifeed.git
git push origin master
Ese archivo README está vació pero ya se encuentra en el repositorio. Luego de copiar las fuentes de mi aplicación las agregué, hice commit y nuevamente push. Para el caso de Assembla no realicé el paso de crear un archivo README que no forma parte de mi aplicación sino de un ejemplo. Así que luego de copiar las fuentes en el directorio ejecuté los siguientes comandos.
git add .
git-commit -m "first commit"
git remote add origin git@git.assembla.com:twitterrssmultifeed.git
git push origin master:refs/heads/master
Debido al certificado RSA el password me es solicitado, esto se puede automatizar.
Para el caso de Mercurial realizar un proceso similar fue algo accidentado ya que no completaba la operación de commit. Lo más sencillo fue clonar el repositorio al directorio local:
cd mercurial_freehg/
clone http://freehg.org/u/adagio/twitterrssmultifeed/ twitterrssmultifeed/
Y Luego de copiar las fuentes emplear una aplicación que realice el commit ( hg status, hg add, hg commit ):
qct
Esta aplicación detecta de forma automática el sistema de control de versiones empleado. Seguramente lo hace buscando los ficheros .git o .hg, de forma similar para otros sistemas como subversion o cvs.
Finalmente el proceso de push lo realicé sin problemas.
hg push http://freehg.org/u/adagio/twitterrssmultifeed/
Vemos que Git y Hg el proceso de commit está separado del push. La teoría de estos sistemas debe justificar esta implementación y el uso de herramientas gráficas totalmente integradas al sistema operativo como Tortoise nos ocultan estos interesantes detalles que podrían ser muy útiles cuando deseamos conocer si ya hemos sobreescrito algún archivo entre otras aplicaciones bastante prácticas.
Pensaba probar el promocionado sistema Bazaar pero parece que los dos que he explicado son mejores. Es una interesante tarea para quien los use conocer sobre la comparación de fuentes, creación de forks, exportación de proyectos, candados, etc. Pero personalmente le doy el uso más sencillo de versionado personal.
Alrededor de estas tecnologías sitios como Assembla están brindando la posibilidad de realizar un seguimiento a reporte de bug, tener salas de chat, establecer hitos, seguir un proceso formal de desarrollo, entre otras herramientas que deben ser seleccionadas de acuerdo a la naturaleza del proyecto que se tenga.
Saludos.
Google Aplication Engine (GoogleApp Engine)
Hoy probé un poco del poder del motor de aplicaciones de Google. Basta bajar el instalador, ejecutarlo y empezar a realizar algunas pruebas.
Creé un directorio de trabajo con el nombre librodevisitas donde copié el contenido de la aplicación de ejemplo guestbook.
Realicé algunas modificaciones al archivo app.yaml que es un archivo similar al manifest en java, es decir un archivo descriptivo que guía el despliegue de la aplicación. En este caso se requiere el nombre de la aplciación, la versión, el lenguaje intérprete y la versión de la interfaz para aplicaciones empleada. La línea más importante es la que indica el script a ejecutar que en este caso es un archivo de texto con código en lenguaje python (archivo *.py).
application: librodevisitas
version: 1
runtime: python
api_version: 1
handlers:
- url: .*
script: librodevisitas.py
También modifiqué el archivo librodevisitas.py originalmente llamado guestbook.py y reemplacé algunas cadenas para mostrar una interfaz en lenguaje español además de agregar un un título de encabezado de página.
Para ejecutar la aplicación web procedemos a desplegarla con la aplicación dev_appserver.py ubicada en la raíz del directorio google_appengine en nuestro sistema de archivos.
Entonces ubicándonos en el directorio que contiene al de nuestro trabajo ejecutamos el servidor de aplicaciones indicando el puerto por el cual se publicará la aplicación y el nombre del directorio que contiene los archivos. Por ejemplo:
dev_appserver.py --port=9999 librodevisitas
En un navegador web podemos ver nuestra aplicación en la dirección http://localhot:9999
Además GoogleApp Engine ofrece alojamiento libre para las aplicaciones que desarrollamos con esta tecnología. Me he registrado y con el link de Create App podemos indicar un nombre para la aplicación (que formará parte del nombre de dominio) y el nombre clave de la aplicación (que debe coincidir con los datos del archivo *.yaml).
Una forma sencilla de subir las fuentes que tenemos localmente es crear un *.tar.gz (archivo consolidado y comprimido) con los archivos necesarios.1
Al subirlo el sistema se encargará de la descompresión de este archivo.
Luego mi aplicación ya estaba disponible en: http://appdrop.com/apps/librodevisitas/
Provecho. Espero tu firma.
Creé un directorio de trabajo con el nombre librodevisitas donde copié el contenido de la aplicación de ejemplo guestbook.
Realicé algunas modificaciones al archivo app.yaml que es un archivo similar al manifest en java, es decir un archivo descriptivo que guía el despliegue de la aplicación. En este caso se requiere el nombre de la aplciación, la versión, el lenguaje intérprete y la versión de la interfaz para aplicaciones empleada. La línea más importante es la que indica el script a ejecutar que en este caso es un archivo de texto con código en lenguaje python (archivo *.py).
application: librodevisitas
version: 1
runtime: python
api_version: 1
handlers:
- url: .*
script: librodevisitas.py
También modifiqué el archivo librodevisitas.py originalmente llamado guestbook.py y reemplacé algunas cadenas para mostrar una interfaz en lenguaje español además de agregar un un título de encabezado de página.
Para ejecutar la aplicación web procedemos a desplegarla con la aplicación dev_appserver.py ubicada en la raíz del directorio google_appengine en nuestro sistema de archivos.
Entonces ubicándonos en el directorio que contiene al de nuestro trabajo ejecutamos el servidor de aplicaciones indicando el puerto por el cual se publicará la aplicación y el nombre del directorio que contiene los archivos. Por ejemplo:
dev_appserver.py --port=9999 librodevisitas
En un navegador web podemos ver nuestra aplicación en la dirección http://localhot:9999
Además GoogleApp Engine ofrece alojamiento libre para las aplicaciones que desarrollamos con esta tecnología. Me he registrado y con el link de Create App podemos indicar un nombre para la aplicación (que formará parte del nombre de dominio) y el nombre clave de la aplicación (que debe coincidir con los datos del archivo *.yaml).
Una forma sencilla de subir las fuentes que tenemos localmente es crear un *.tar.gz (archivo consolidado y comprimido) con los archivos necesarios.1
Al subirlo el sistema se encargará de la descompresión de este archivo.
Luego mi aplicación ya estaba disponible en: http://appdrop.com/apps/librodevisitas/
Provecho. Espero tu firma.
Etiquetas:
google,
googleapp,
googleapp engine
Saturday, April 19, 2008
Arquitectura de Servidores de Aplicación Web
Hoy les voy a presentar la arquitectura de servidores de una aplicación web que estoy desarrollando.
El usuario se conecta a través de un navegador web (Firefox) a la Internet y accede al sitio web que publica el Servidor Web (Apache con el módulo PHP activo).
La gestión de casos emplea persistencia de datos en el Servidor de Base de Datos (MySql) y emplea tanto entradas como notificaciones a través del correo electrónico (Agente de Tranporte de Correo Sendmail). La interfaz para el usuario es generada dinámicamente gracias al lenguaje PHP.
Dentro del contenido web el usuario encontrará el Java Applet que le permitirá realizar la llamada gracias al protocolo IAX2, la implementación de este protocolo (IaxClient) se comunicará con el servidor VoIP (Asterisk) para realizar el registro del usuario y enviar el identificador de usuario al que se desea llamar. Los mensajes para remarcar un número o colgar también son recibidos por el servidor VoIP.
El usuario se conecta a través de un navegador web (Firefox) a la Internet y accede al sitio web que publica el Servidor Web (Apache con el módulo PHP activo).
La gestión de casos emplea persistencia de datos en el Servidor de Base de Datos (MySql) y emplea tanto entradas como notificaciones a través del correo electrónico (Agente de Tranporte de Correo Sendmail). La interfaz para el usuario es generada dinámicamente gracias al lenguaje PHP.
Dentro del contenido web el usuario encontrará el Java Applet que le permitirá realizar la llamada gracias al protocolo IAX2, la implementación de este protocolo (IaxClient) se comunicará con el servidor VoIP (Asterisk) para realizar el registro del usuario y enviar el identificador de usuario al que se desea llamar. Los mensajes para remarcar un número o colgar también son recibidos por el servidor VoIP.
Wednesday, April 16, 2008
De los carritos a control remoto al Re-Volt
Hola:
Hoy les voy a contar sobre los carritos a control remoto y el videojuego Re-Volt.
De niños hemos tenido carritos que controlábamos con las manos pero eran luego los carritos a pilas los que escapaban de nuestro control y nos daban un espectáculo fuera del manual de especificaciones del juguete. Ya algo más grandecitos algunos tuvimos y otros siguieron soñando con el carrito a control remoto. Era estupendo, entre sus aplicaciones más bonitas tenía la de atropellar a nuestros amigos y parientes. Recuerdo que en un centro comercial de Larco vi un precioso overcraft amarillo fosforescente que para mi cumpleaños o navidad pude gozar gracias al cariño efectivo de uno de mis tíos. En la sala de mi casa, sobre el parquet encerado este vehículo era el amo y señor, y según el manual el show mayor era verlo en el agua, saltando y salpicando a todos. Esto último no lo pude concretar porque no lo llevé a la playa y no tenía aún la pequeña piscina armable. Pero definitivamente recuerdo la textura de su chasís y su flotador, el olor de su material y sus baterías... y la fatídica experiencia de su deceso. Primero fue la antena del control remoto y luego el set de baterías. Se acabó la alegría para siempre.
Luego podría haber comprado otro pero veía los altos costos, siempre había algunos más sorprendentes, y la cosa sería comprar uno de los que vuelan. El Blackhawk, el Apache... que son de los "elitóteros" o los F-16, F-22... que son de los "avuncitos". Ya si uno era un maldito podria tener el F-117 Nighthawk Stealth Fighter Aircraft que es la madre total. Mmm pero allí quedé resignado... frente a la tv ( léase youtube ) viendo las carreras de MiniNascar o a mi vecino que tiene unos Mini Minor ( como el Morris de Mr. Bean ) que fácilmente pueden entrar en la categoría de los carritos.
Algo de googleada y youtubeada y click... di con revolt. Directo al emule y el bondadoso instalador que por pocos megas me daría la ilusión virtual del RC. Es como el webcam sex. Casi. Ya no sería mi primera vez pero sí en la modalidad de los chicos de ahora... puro internet, la cosa fría, realidad virtual, la realidad que no es real. Pero que cosota! Lo gocé al 100%. Varios carritos, varias pistas, arena, calles, juguetes... el plus del videojuego fueron las armas. Se pueden lanzar una diversidad de proyectiles como cohetes (espero implementen la mama rata), globos de agua, bombas y también dejar trampas de chorros de aceite de carro, entre otras muchas otras diversiones (falta también poder darle su chiquita al carrito del ser querido).
No falta un ovni y algunos trucos. Me gustó el truco de revelar autos secretos y poder emplear armas a mi antojo. Los otros trucos matan el juego. Ya queda como tarea para ustedes que revisen el editor de pistas y el modo multiplayer (alguien tiene que hacer la tesis :P). Pa darle una ojeada aquí un video ni oficial ni muy visitado en el youtube pero a en mi opinión es una agradable presentación de Re-Volt.
Bless
Hoy les voy a contar sobre los carritos a control remoto y el videojuego Re-Volt.
De niños hemos tenido carritos que controlábamos con las manos pero eran luego los carritos a pilas los que escapaban de nuestro control y nos daban un espectáculo fuera del manual de especificaciones del juguete. Ya algo más grandecitos algunos tuvimos y otros siguieron soñando con el carrito a control remoto. Era estupendo, entre sus aplicaciones más bonitas tenía la de atropellar a nuestros amigos y parientes. Recuerdo que en un centro comercial de Larco vi un precioso overcraft amarillo fosforescente que para mi cumpleaños o navidad pude gozar gracias al cariño efectivo de uno de mis tíos. En la sala de mi casa, sobre el parquet encerado este vehículo era el amo y señor, y según el manual el show mayor era verlo en el agua, saltando y salpicando a todos. Esto último no lo pude concretar porque no lo llevé a la playa y no tenía aún la pequeña piscina armable. Pero definitivamente recuerdo la textura de su chasís y su flotador, el olor de su material y sus baterías... y la fatídica experiencia de su deceso. Primero fue la antena del control remoto y luego el set de baterías. Se acabó la alegría para siempre.
Luego podría haber comprado otro pero veía los altos costos, siempre había algunos más sorprendentes, y la cosa sería comprar uno de los que vuelan. El Blackhawk, el Apache... que son de los "elitóteros" o los F-16, F-22... que son de los "avuncitos". Ya si uno era un maldito podria tener el F-117 Nighthawk Stealth Fighter Aircraft que es la madre total. Mmm pero allí quedé resignado... frente a la tv ( léase youtube ) viendo las carreras de MiniNascar o a mi vecino que tiene unos Mini Minor ( como el Morris de Mr. Bean ) que fácilmente pueden entrar en la categoría de los carritos.
Algo de googleada y youtubeada y click... di con revolt. Directo al emule y el bondadoso instalador que por pocos megas me daría la ilusión virtual del RC. Es como el webcam sex. Casi. Ya no sería mi primera vez pero sí en la modalidad de los chicos de ahora... puro internet, la cosa fría, realidad virtual, la realidad que no es real. Pero que cosota! Lo gocé al 100%. Varios carritos, varias pistas, arena, calles, juguetes... el plus del videojuego fueron las armas. Se pueden lanzar una diversidad de proyectiles como cohetes (espero implementen la mama rata), globos de agua, bombas y también dejar trampas de chorros de aceite de carro, entre otras muchas otras diversiones (falta también poder darle su chiquita al carrito del ser querido).
No falta un ovni y algunos trucos. Me gustó el truco de revelar autos secretos y poder emplear armas a mi antojo. Los otros trucos matan el juego. Ya queda como tarea para ustedes que revisen el editor de pistas y el modo multiplayer (alguien tiene que hacer la tesis :P). Pa darle una ojeada aquí un video ni oficial ni muy visitado en el youtube pero a en mi opinión es una agradable presentación de Re-Volt.
Bless
Subscribe to:
Posts (Atom)