Por Cesar, Octubre 11th, 2008, en linux, FLOSS, tips. No hay comentarios.
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)
Por Cesar, Octubre 10th, 2008, en aplicaciones, FLOSS, tips. 4 Comentarios.
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:
- Vamos a suponer que el directorio raíz de la aplicación Web es /home/cesar/webapps/miapp1. Puede ser cualquier otro directorio siempre y cuando Apache pueda leer el directorio.
- Queremos que en vez de usar algo como http://localhost/webapps/miapp1 usar http://miapp1.local/ Ya se que es estúpido usar el directorio home de un usuario como raíz de Apache, así que no lo hagan en un servidor real.
- Queremos hacerlo a las de ya.
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
-
-
-
-
DocumentRoot /home/cesar/webapps/miapp1/
-
ErrorLog /home/cesar/webapps/miapp1/logs/error.log
-
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
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:
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
Por Rafyta, Octubre 10th, 2008, en programacion, tecnología, internet. No hay comentarios.
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:
- Ningún browser soporta aún XForms (excepto Firefox, pero con una extensión del mismo nombre).
- Tienes que aprender XML y usarlo como si fuera HTML o Microsoft Word (nada del otro mundo).
- Aprender XPath
- Familiarizarte con eXist
- Aprender XQuery
- Conseguir un hospedaje que soporte eXist/XQuery y convencer a tu cliente de que mude su sitio con ellos.
- Pelear a muerte con todos los die-hard AJAXeros y PHP/MySQLeros
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.
Por Rafyta, Octubre 9th, 2008, en noticias, entretenimiento, nostalgia, hay-un-mundo-alla-afuera. 1 Comentario.

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.
Por Cesar, Octubre 9th, 2008, en sistemas operativos, linux, FLOSS. 2 Comentarios.
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:
- En vez de 8.04 ahora es 8.10. Le puedes presumir a tus amigos el número 10, que es mejor que el 04 obviamente, porque es más grande.
- Gnome 2.24 que desde el departamento de no-puedo-creer-que-no-lo-tuviera-antes Nautilus (el manejador de archivos), ahora tiene soporte para tabs como Konqueror hace 100 años (en vida computacional). También un boton de expulsar para los medios expulsables, ¡que mono!
- Xorg 7.4 que debido a la maldad de los drivers de video binarios (como nVidia y ATI) estos no son soportados aún y por lo tanto los usuarios de estas tarjetas tendrán que usar drivers libres de castigo… mientras salen los nuevos.
- El kernel 2.6.27 que podría decir todas las diferencias y mejoras que trae, pero sabes que solo tu y yo las entenderíamos, así que mejor ahí la dejamos. Es bueno tener lo último.
- Directorio privado encriptado, para guardar tu colección de… estampillas.
- Cuenta de invitado con restricciones para poder prestar tu laptop sin miedo. Los invitados no pueden guardar archivos permanentemente ni accesar a los directorios Home
- El nuevo Network Manager. Ya quedamos que lo más nuevo es lo mejor así que sin comentarios.
- Cuando arrancas el sistema hay una entrada que te permite seleccionar la configuración del último arranque exitoso. Si, así como Windows.
- DKMS, una onda para los drivers.
- Samba 3.2 con soporte para la nueva versión de este protocolo de Microsoft tan popular.
- Plugin para ver videos de la BBC desde Totem. YEAH!
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.
Por Cesar, Septiembre 30th, 2008, en lol, tips, Google. No hay comentarios.
Prepárate y obten ese trabajo en Google que tanto has deseado:
Eso (escabullirte entre las preguntas del entrevistador) es lo que pasa casi siempre cuando obtienes una oferta de una compañía de tecnología. Tan solo lograste escabullirte. Gracias a la naturaleza fallida del proceso de entrevistas, es muy probable que alguien en la ronda de entrevistas no se impresione contigo, aún si eres Alan Turing. Especialmente si eres Alan Turing, de hecho, ya que significa que obviamente no sabes C++.
(Leído aquí)
Por Cesar, Septiembre 30th, 2008, en programacion, hay-un-mundo-alla-afuera, opinion. 8 Comentarios.
Continuando con la serie de posts sobre la aventura que es buscar un nuevo trabajo como programador, ahora les traigo la prueba definitiva para determinar si sabes programar en Java.
A lo largo de las ya múltiples entrevistas telefónicas que he tenido que pasar, hay una serie de preguntas que no faltan. Inclusive hay algunos que solamente hacen estas preguntas, y ninguna otra, como si esto fuera la prueba fehaciente de que sabes programar en Java.
- ¿Cuál es la diferencia entre una clase y un objeto?
- ¿Cómo creas un nuevo thread (hilo)? ¿Y de otra manera?
- ¿Qué es una interfaz?
- ¿Qué es una clase abstracta
- ¿Puede una clase pública extender una interfaz? ¿Y una clase abstracta?
- ¿Cuál es la diferencia entre un List y un Set?
- ¿Qué es un constructor?
Hay más preguntas, pero estas las han repetido siempre. ¿Qué les parece? en lo personal, no creo que ayude a determinar el nivel de conocimiento de un candidato, sin embargo si son cosas que cualquier novato de Java debe saber.
Por Rafyta, Septiembre 29th, 2008, en aplicaciones, plugins, web2.0, blogs, internet. No hay comentarios.

Para ser honestos no recuerdo exactamente cómo es que me topé con sweetcron hace sólo unos días, quizá una semana. Aunque hay algunos scripts muy buenos con funciones similares pululando por las interwebs, el pitch principal de Sweetcron es simple: En tu propio servidor, en tu propia base de datos. Es decir, si a twitter por azares del destino le cae un relámpago en su data center y se borran tus tweets, Sweetcron tiene todo respaldado en tu propia base de datos MySQL.
Anyway, si eres de los que se emocionan con algo y rápidamente quiere saber todo del asunto en cuestión, estos son los pasos que tienes que dar para tener tu lifestream vivito y coleando.
- Tener a la mano tus datos de acceso a la base de datos (servidor, base de datos, usuario, password y nombre de la tabla).
Tu servidor debe correr PHP 5+ y MySQL 4.1+
- Registrarte en Sweetcron.
- Revisar tu cahier électronique (e-mail) y descargar el script.
- Subir todo a tu servidor.
- Configurar unos archivos pedorrines de texto.
- Importar tus feeds de twitter (si tienes twitter ¿verdad?), flickr, picasa, youtube, qik, last.fm, etc.
- Editar el tema por defecto si no te gusta
- Presumir tu Unique Resource Locator como cho: Rafyta.
NOTA: La edición del tema lo veremos en el siguiente post.
Pasos 1 - 3:
Si necesitas una explicación, tal vez no deberías estar leyendo esto.
Paso 4: Subir todo a tu servidor
Tienes dos opciones: poner todo el contenido del folder sweetcron en el root folder (public_html, www, httpdocs o lo que sea), o ponerlo en un folder (p.e. tudominio.com/lifestream). Si el tuyo es un sitio personal como el mio, te recomiendo la primera opción. En este post vamos a suponer que decides ponerlo así. (aclaramos la diferencia más adelante).
Paso 5: Configurar unos archivos pedorrines de texto
- En system/application/config/ cambia el nombre de config-sample.php a
config.php
- Abre config.php en tu editor de texto favorito y reemplaza http://www.your-site.com/ con tu sitio, dejando la última diagonal.
- En system/application/config/ cambia el nombre de database-sample.php a database.php
- Abre database.php en tu editor de texto y pon los datos: username, password y database.
Si estás instalando Sweetcron en un folder (http://tusitio.com/lifestreaming o algo similar), necesitas hacer estos cambios adicionales:
- En config.php asegúrate de que base_url incluye el folder donde estás instalando.
- Abre el archivo .htaccess y cambia RewriteBase / a RewriteBase /<tu_folder>
Ahora vé a tu sitio y sigue las instrucciones. Si encuentras errores, probablemente no subiste correctamente el archivo .htaccess. Puedes crear un archivo de texto con el siguiente contenido y subirlo con el nombre .htaccess a tu folder de instalación.
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
Paso 6: Importar tus feeds
Entra al administrador: http://tusitio.com/admin y ve a la pestaña Feeds. ahí puedes añadir una por una todas las feeds que necesites.
Aunque hay pocas pestañas en el administrador, cubren todo lo que vas a necesitar:
- Dashboard: muestra tus últimos 5 Items
- Write: para postear directamente en tu sitio
- Items: administra los artículos individualmente, puedes borrarlos sin que se borren del sitio original, (borrar una foto no la dará de baja en tu cuenta de flickr).
- Feeds: la que acabas de usar
- Options: algunas preferencias
Si eres como yo, te estarás preguntando cuál es la diferencia entre Pseudo Cron y True Cron. En resumen, Pseudo actualizará tu sitio revisando tus feeds cada 30 minutos. True Cron te permitirá hacerlo con la frecuencia que tu quieras, pero debes utilizar el programa CronJobs de tu servidor *nix (o equivalente en cualquier otro). Si no sabes como hacer eso, sólo déjalo en Pseudo Cron.
Si por alguna razón necesitas actualizar YA, puedes ir a Items y presionar el botón Fetch New Items Now.
Paso 7: Editar el tema por defecto
Lo cubriremos en el próximo post.
Paso 8: Presume tu URL
Si hiciste algo con Sweetcron, muéstranos tu sitio, dejando un link en los comentarios.
Por Cesar, Septiembre 23rd, 2008, en frases. No hay comentarios.
Soy un programador. Mi actitud comienza con arrogancia, se mantiene en condescendencia y termina con hostilidad. Acostúmbrate.
(Visto en la firma de alguien)
Por Rafyta, Septiembre 20th, 2008, en tecnología, tips, hax0rs. 3 Comentarios.
Hoy abrí mi business e-mail con este mensaje esperando:


Me tardé más de 1.58364578 segundos en darme cuenta de que era phising. Algunas pistas:
- Todo el texto está en Arial. En francés se diría: Trés horrible.
- Descuento de 15% al pagar más de $1000 en línea (cosa que la enfermiza avaricia de Carlitos Slim no permitiría jamás).
- Más descuento (20%) al pagar más de $500, cosa que no tiene sentido.
- Link a un sitio muuuuuy suspechoso: http://87.98.225.140/includes/telmex.com.mx/index.htm
- Imagen hosteada en imageshack.
- Correo enviado desde Australia haciéndose pasar por Hi5.
- No tengo línea Telmex. 0_o
Posts anteriores