domingo, 20 de julio de 2008

Archlinux + XFCE4 + Teclas multimedia

Hola, resulta que he instalado Arch con XFCE en mi portátil y no podía usar las teclas multimedia para el sonido. Así que trasteando he aprendido algunas cosas que quizás sirvan a otro.

El sistema X tiene tres eventos que son los que nos interesan: XF86AudioMute, XF86AudioLowerVolumen y XF86AudioRaiseVolume.

Si abrimos la configuración de atajos de teclado por defecto, podemos ver que hay 3 comandos asociados a estas tres opciones:
  • XF86AudioRaiseVolume: aumix -v+10
  • XF86AudioLowerVolume: aumix -v-10
  • XF86AudioMute: aumix -v0
Todo tiene bastante sentido, entonces ... ¿por qué no funciona?

Pues suponiendo que lo que tienes es una instalación limpia de arch, es por dos motivos fundamentales:
  1. Porque el paquete aumix no está instalado
  2. Porque los eventos XF86Audio* no están asociados a las teclas.
Solución:
El primer problema es sencillo de manejar con un pacman -S aumix-gtk
El segundo es igualmente sencillo pero hay que dar algunos pasos más:
  • Lo primero es ver los códigos de las teclas de sonido de nuestro teclado. Para eso utilizamos la utilidad xev y vemos los códigos al pulsar las teclas. En mi caso eran 160 para el mute, 174 para el lower y 176 para el raise.
  • Una vez que tenemos esto, editamos el fichero .Xmodmap en nuestro home agregando el siguiente contenido:
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume

  • El siguiente fichero a editar es el .xinitrc al que agregamos:
usermodmap=$HOME/.Xmodmap
if [ -f $usermodmap ]; then
xmodmap $usermodmap
fi
exec startxfce4

Y teniendo en cuenta que en los atajos por defecto ya estaban asociado los eventos al reiniciar lo tendréis funcionando.

martes, 13 de mayo de 2008

El demonio cpufreqd

Me gusta probar nuevas distribuciones en mi portátil, aunque me cuesta salir de las "debian-based". El asunto es que aunque no tengo una gran máquina (un Centrino 1.7 Ghz) me gusta aprovechar las cosas al máximo.

Este procesador, como casi todos los de portátiles, tiene una función llamada escalado de frequencia que es una tecnología que permite hacer trabajar el procesador a frecuencias menores con el objetivo de ahorrar batería al mismo tiempo que disminuye el calentamiento.

Hay muchas formas de retocar esta funcionalidad, a mi me gusta cpufreqd por su sencillez. Este tipo de aplicaciones definen una política de comportamiento para diferentes estados como pueden ser:
  • Portátil conectado a la red eléctrica.
  • Portátil en modo batería con carga entre 70-100 %
  • Portatil con modo batería con carga menor al 20%
  • ...
El motivo que me hizo "descubrir" esta aplicación fueron los problemas tanto con Debian como con Ubuntu que tenía en mi portátil. Por algún motivo dichas distribuciones configuraban mi máquina para funcionar siempre a la máxima frecuencia (1.7Ghz) cuando está conectada a la red eléctrica.

Aparentemente esto es lo deseable ya que así rinde al máximo, pero no para mí. Cuando trabajo con el portátil suelo estar navegando o editando código, tareas que, sobre todo la última, no necesitan el procesador a pleno rendimiento y que sin embargo si necesitan, sobre todo la última, un mínimo de concentración. Y aquí es donde surge mi problema, ya sea por la edad del portátil o porque es un Amilo Pro (no es la gama más alta del mercado), el ventilador hace mucho ruido, y cuando el procesador trabaja a 1.7Ghz hace que esté continuamente haciendo el pulsing (arrancando y frenando a ritmo constante).

El ruido es bastante molesto, así que me puse manos a la obra para solucionar el problema. Instalé los paquetes cpufreqd y cpufreq-utils que están disponibles via apt. Eliminé también el paquete powernowd que es el que traen las últimas distribuciones basadas en Ubuntu.

El primer paso es ver si el demonio cpufreqd es capaz de arrancar, en mi caso no arrancaba porque le tenía que indicar el tipo de tecnología de mi procesador, la cual es speedstep-centrino. Para ello hay que editar el fichero /etc/default/cpufreq.d y añadir la línea CPUFREQ_CPU_MODULE="speedstep-centrino". Por supuesto hay que reiniciar el demonio para que los cambios surtan efecto.

Una herramienta útil es cpufreq-info con la que podemos saber el estado actual del procesador y las posibilidades que da. En mi caso la respuesta es:

cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which need to switch frequency at the same time: 0
hardware limits: 800 MHz - 1.73 GHz
available frequency steps: 1.73 GHz, 1.33 GHz, 1.07 GHz, 800 MHz
available cpufreq governors: conservative, ondemand, powersave, userspace, performance
current policy: frequency should be within 800 MHz and 1.73 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 800 MHz.

Son importantes las líneas hardware limits: 800 MHz - 1.73 GHz y available frequency steps: 1.73 GHz, 1.33 GHz, 1.07 GHz, 800 MHz que marcan las posibilidades del procesador que tengamos.

Sabiendo las posibilidades de nuestra máquina, lo único que resta hacer es editar el fichero /etc/cpufreqd.conf y elegir la política que queremos o editar la nuestra propia. En mi caso sustituí la Perfomance High que siempre mantenía el procesador al 100% por On Demand High, que pone la frecuencia entre 800 Mhz y 1.7Ghz según la demanda del sistema. Como se puede observar al escribir esto estaba funcionando a 800Mhz estando conectado a la red.

Silencioso y eficiente ;)

lunes, 14 de abril de 2008

Latex: Más vale tarde que nunca

Viendo ahora los resultados que se pueden obtener usando Latex me arrepiento bastante de no haberlo descubierto antes de terminar la carrera. Pero bueno, más vale tarde que nunca y voy a tratar de usarlo a partir de ahora.

Si quieres saber como va esto te lo explico. Yo estoy escribiendo un trabajo usando Vim, pero se puede usar cualquier cosa. Siguiendo la sintaxis que puedes encontrar en cualquier tutorial la forma de obtener tu documento es:

# latex trabajo.tex

# dvipdf trabajo.dvi trabajo.pdf

Y listo. Pensando en lo que hay que hacer para escribir un documento con referencias de más de 100 páginas en Word u OpenOffice.org, puedo asegurar que nunca dejaré el Latex.

viernes, 25 de enero de 2008

El profiler de Netbeans

He necesitado echar mano de NetBeans para un proyecto de la Universidad. El proyecto consistía en indexar una gran cantidad de documentos, y luego proporcionar una interfaz "tipo google" para acceder a dichos documentos por relevancia, según el modelo clásico del espacio vectorial.


Bueno a lo que importa, dado el tamaño de la colección empecé a tener problemas con la memoria teniendo constantemente excepciones del java heap que me tenían ya mosqueado porque yo iba volcando todo a disco. Ya lo solucioné, pero en el camino descubrí la herramienta profiler.



Es simplemente IMPRESIONANTE, puedes ver cada cosa que objeto que se va alojando en la memoria, como van saliendo por el recolector de basura, .... Y todo en una lista ordenadita por "quien ocupa más" que es perfecta para detectar memory leaks.


¡QUIERO UN PROFILER PARA PYTHON!


Un saludo