Metroflog

¿Necesito decir más?

¿Necesito decir más?
“Tragedy is when I cut my finger. Comedy is when you fall into an open sewer and die.”
Este feature (característica) de Gnome me trajo como loco varios días. Resulta que en mi laptop de trabajo puedo subir y bajar el volumen con el teclado, bien nice como se ve en la siguiente captura:
Pero de un tiempo para acá dejó de hacerlo. La tecla sí respondía, o sea seguía saliendo la ventana del volumen de la imagen de arriba, la barrita se modificaba de acuerdo a lo que presionaba en el teclado (arriba o abajo) pero el volumen no se modificaba. Básicamente, al volumen le valía mère lo que yo hiciera.
Si a ti te pasa lo mismo, la respuesta está en el panel de control del sonido que se encuentra en System | Preferences | Sound o si tienen Gnome-Do (y si no lo tienen a instalarlo ya) solo teclear Sound + Enter. En la lista que dice Default Mixer Tracks hay que seleccionar el dispositivo y la pista (track) que controlan las teclas de volumen de tu teclado. Para mi caso, Master es la indicada. Una vez seleccionada todo a la normalidad.
(Gracias a Coolarm’s blog por postear esto, seguramente aun estuviera buscandole solución de no ser por este blog)
Entonces, dices que quieres ponerte a desarrollar la siguiente gran aplicación Web 2.0 que revolucionará al mundo. Tienes las ganas, la idea y el conocimiento, ahora solo necesitas un ambiente de desarrollo adecuado. Antes de que corras por un teclado ergonómico, una silla cómoda, mouse inalámbrico y cualquier otra cosa que te ayude a programar de manera más cómoda, no me refería a eso con ambiente de desarrollo.
Lo que vamos a hacer ahora es configurar hosts virtuales con tu servidor Apache2 que ya instalaste en tu workstation. La razón es que, si eres como yo, tienes varios sitios en desarrollo al mismo tiempo y quieres que cada uno tenga su propia configuración y no usar URLs como localhost/miapp1 y localhost/miapp2.
Básicamente es editar algunos archivos, hacer vínculos simbólicos por aquí y por allá… nada complicado. Primero definamos algunas cosas:
Primero tenemos que editar un archivo. El nombre no importa mucho, pero el lugar donde va guardado si. Para crearlo usamos:
sudo gedit /etc/apache2/sites-available/miapp1.local
Sudo porque necesitamos permisos de superusuario para escribir a ese directorio. El directorio sites-available tiene archivos de configuración para los sitios disponibles en Apache2. Hay una diferencia entre disponibles y habilitados: puedes tener varios sitios disponibles pero mientras no estén habilitados estos no pueden ser accedidos por medio Apache2.
En el archivo vamos a poner lo siguiente:
<VirtualHost 127.0.0.1:80>
ServerAdmin correo@miapp1.com
ServerName miapp1.local
ServerAlias miapp1.local
DocumentRoot /home/cesar/webapps/miapp1/
ErrorLog /home/cesar/webapps/miapp1/logs/error.log
</VirtualHost>
En donde dice VirtualHost 127.0.0.1:80 ese es el IP para la interfaz loop, es tu propia computadora (ahora ya entiendes el chiste de no hay lugar como 127.0.0.1). El :80 es el puerto por defecto que se usa cuando no le pones nada a la dirección. ServerAdmin básicamente puede ser cualquier correo, es lo que sale cuando hay un error 500 (interno) y Apache2 manda un aviso que te puedes contactar con [ServerAdmin] para notificarle del error. Lo importante es ServerName y ServerAlias, ya que es el nombre que se va a usar para el host virtual, lo que vamos a poner en la barra de direcciones. ServerAlias es básicamente otro nombre para dar con el mismo host, como podría ser http://www.miapp1.com y http://miapp1.com. En este caso lo dejamos igual.
DocumentRoot es la raíz de miapp1. Es crítico que Apache2 pueda leer el contenido del directorio. Por último ErrorLog nos servirá para diagnosticar cualquier problema al arrancar el servidor, y Apache2 debe poder ESCRIBIR a ese directorio, ya que si no puede no va a arrancar (yo lo aprendí por las malas). Asegúrense de que el directorio exista antes de arrancar el servidor.
Ahora si ponemos en la barra de direcciones del navegador ‘miapp1.local’ va a tratar de resolver esa dirección mediante DNS, o sea en pocas palabras cree que es una dirección disponible públicamente en la Web y ¡obvio que no lo es! así que tenemos que decirle que se olvide de buscarla en otro sitio y se limite a buscarla en nuestra computadora. Para eso editamos el archivo /etc/hosts
sudo gedit /etc/hosts
Va a tener algo como esto:
127.0.0.1 localhost
127.0.1.1 cesar-laptop
Agregamos una nueva entrada, así:
127.0.0.1 localhost
127.0.1.1 cesar-laptop
127.0.0.1 miapp1.local
Le estamos diciendo “checa computadora, cuando veas que alguien se refiere a miapp1.local ni te molestes en buscarlo en otra parte, su dirección IP es 127.0.0.1 o sea, tu misma”.
Ahora habilitamos el sitio:
sudo a2ensite miapp1.local
La herramienta a2ensite nos crea el vínculo simbólico necesario en vez de tenerlo que hacer manualmente nosotros, y hasta nos pide que recarguemos Apache2 con lo siguiente:
sudo /etc/init.d/apache2 reload
En este momento si ponemos miapp1.local en la barra de direcciones de nuestro navegador debe de mostrarnos el sitio.
¿Y si algo sale mal?
El primer lugar para buscar información es el log de error que configuramos. Ahí podremos encontrar pistas para ver qué es lo que salió mal y corregirlo. Muchas aplicaciones y frameworks (como Wordpress y CodeIgniter) usan mod_rewrite para que las URLs sean amigables (http://www.miapp1.com/ver/perfil/juanita en vez de http://www.miapp1.com/perfiles.php?user=juanita) y si no lo tenemos habilitado Apache2 nos dará un error. Para habilitar un módulo:
sudo a2enmod rewrite
La herramienta a2enmod habilita un módulo que se encuentre disponible (pero no habilitado). En este caso rewrite.
Si nada de esto parece resolver el error, pueden ver el contenido de /var/log/apache2/error.log para ver que salió mal:
cat /var/log/apache2/error.log
Dándole una hojeada a Foundations of Ajax de Apress, en la Breve historia de las aplicaciones web, me encontré la mención de XForms, y al pasar por una serie de vínculos me topé con este post en xml.com.
XRX es un paradigma parecido a AJAX y representa: XForms en el cliente (browser), Interfaces REST y XQuery en el servidor. Aunque podría compararse también con LAMP, WAMP o *AMP, hay características que lo asemejan más (e incluso lo llevan a competir directamente con) AJAX.
En buena parte comparto el entusiasmo por XRX de Dan McCreary (autor del post) ya que en uno de sus ejemplos pone como escenario el sitio web de una empresa de bienes raíces. Habiendo programado y diseñado varios de estos animalitos yo mismo, les puedo decir que es algo bastante tedioso cuando uno no está enamorado de su trabajo (o es Maestro en Ciencias o Científico Loco como algunos que yo conozco). Dan dice lo siguiente refiriéndose a las ventajas de este inexplotado paradigma (traducción mía):
Los métodos tradicionales requieren hacer 40 inserciones en tablas separadas dentro de una base de datos relacional. El uso de XForms y eXist resulta en una sola línea de código XQuery:
store(collection, file, data)
Eso es todo. Simple. Elegante.
Ahora explíquenme ¿CÓMO PODRÍA no entusiasmarse cualquier webdev mortal con semejante aseveración?
Sin embargo, en este nuevo mundo maravilloso con casas hechas de caramelo, hermosas mujeres, cerveza gratis y nubes de algodón que nos pinta XRX hay algunas “consideraciones” que debemos tener en cuenta los MySQL-PHP-JavaScripteros:
Aún con todas las desventajas que conlleva (por ahora), creo que vale la pena echarle una hojeada a XRX e invertir un poco de tiempo para ser de los primeros en dominar este paradigma y después de leer varios libros, ingerir cantidades industriales de cafeína (o refresco de cebada) y acentuar las ojeras con estilo y orgullo, poder teclear store(collection, file, data) y sentirse como un campeón.

De acuerdo a un comunicado de Reuters, Guns N’ Roses prepara su *nuevo* disco, que pasara más de diez años en el horno, y será lanzado el próximo mes. Además el día 28 de Octubre (este mes) se relanzará el memorable Apetite for Destruction.
El también ansiadísimo Rockband 2 incluirá entre las rolas jugables a “Shackler’s Revenge” del mismo Chinese Democracy.
La neta no me siento muy emocionado, pero trae buenos recuerdos, a ver cómo está el nuevo CD.
Ha iniciado la cuenta hacia atrás para lo que será la nueva versión de Ubuntu: Intrepid Ibex. Como probablemente ya sepan, la numeración de las versiones viene dada por el año (2008) y el mes (Octubre = 10) así que para esta próxima versión denominada Intrepid Ibex, el número es 8.10.
¿Y porqué tengo que actualizar? Veamos:
Pueden ver cuantos días faltan para esta nueva versión en el widget que se encuentra en la barra de la derecha de este blog. Cuando la bolita blanca llegue al centro, ya saben, a actualizar.