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

jueves, 20 de diciembre de 2007

La maldad de los asistentes

Es un hecho que las distribuciones modernas de GNU/Linux están cada vez más adaptadas al usuario inexperto. Para casi todo existen cómodos asistentes que nos ayudan a cosas triviales como conectar a la red, actualizar el sistema o importar nuestra colección musical.

El problema es que si tú, como usuario avanzado, caes en el uso contínuo de los asistentes, empiezas a abstraerte y poco a poco, vas olvidando como funcionan las cosas por dentro. Personalmente, ese fue uno de los motivos que me hizo pasar a GNU/Linux, el entender como funcionan las cosas.

Comento esto porque me siento avergonzado. Hace poco tuve que configurar un portatil con la distribución Guadalinex, todo fue de perlas hasta que quise activar el WiFi. El caso es que la tarjeta externa Conceptronic no conseguía entrar a la red, a pesar de que la veía.

Sigo sin entender, por qué ese asistente no detecta la red, cuando en Ubuntu Edgy (sistema anterior del portatil) si la detectaba y en teoría son distribuciones similares.

El caso es que abriendo un terminal la solución era bien sencilla, pero llevo tanto tiempo gestionando mi sistema con asistentes que no lo recordaba.

¿Sera que no detecta la tarjeta? Era tan fácil como:
# iwconfig

Pues ahí aparecía la tarjeta ese no es el problema.

¿Será que no ve la red? Solución:
# sudo iwlist ra1 scan

Pues sí, sí la ve. Aunque desde el asistente la detecta con intensidad 0% y desde aqui con 78%. Puede que por ahí esté el problema.

Pero es un problema del asistente, ¿cómo configurar la red sin asistentes ni NetworkManager ?

Pues en mis comienzos hace años no tenía problema para lidiar con /etc/network/interfaces, sólo es cuestión de recordar como gestionar la red desde consola.

Para probar simplemente tengo que hacer:
# sudo ifconfig ra1 up
# sudo iwconfig ra1 essid elnombredelaESSID
# sudo iwconfig ra1 key s:lacontraseña
# sudo dhclient ra1


Y ya funciona. Conclusión: Mi Hardware funciona perfectamente, así como los drivers. El problema: El asistente de NetworkManager.

Ahora ya lo he automatizado todo y no tengo problema para conectar, pero ¿realmente era necesario recurrir a google para eso? De ahora en adelante trataré de recordar porqué es mejor hacerlo todo desde consola, para tener una idea clara de como funcionan las cosas, sin capas que impidan ententer.

Conste que me parece fenómeno que haya asistentes, porque es una forma de atraer al usuario común, pero a los que nos gusta este mundillo, deberíamos no olvidar las buenas costumbres.

Un saludo.

P.D. Información extraida de un post Helektron.com.

miércoles, 21 de noviembre de 2007

Instalar un servidor LAMP en 3 clicks

Debido a cuestiones académicas me veo obligado a empezar a trastear con el mundillo de los servidores LAMP (Linux + Apache + MySQL + PHP).

Durante este último año he estado trabajando con Turbogears y la verdad es que siguiendo la guía es bastante fácil instalar automáticamente todos los paquetes necesarios.

En cuanto a LAMP, pues al a ver tantísima información en la Web, uno no sabe muy bien como guiarse para conseguir hacerlo rápido y empezar a programar inmediatamente.

Pues buscando, buscando, me topé con una de esas funcionalidades que no sabes que existen y que una vez descubierta, no puedes creer que vivieras sin ella. Me refiero al marcar paquetes por tareas de Synaptic.

  1. Bien, abrimos Synaptic/Editar/Marcar paquetes por tareas... (1º click)
  2. Señalamos servidor LAMP (2º click)
  3. Le damos a aplicar (3º click)
Servidor instalado, gracias Synaptic ;)

Como sabéis, ya sólo queda colocar vuestros documentos en /var/www y a tocar localmente todo lo que necesitéis.

lunes, 22 de octubre de 2007

Configurando un cliente para el CVS de sourceforge

Esto es algo bastante común cuando se quiere trabajar en aplicaciones libres, y aunque parece que la tendencia augura un mejor futuro a SVN, nunca está de más tener a mano una forma rápida de descargar un proyecto de software y tenerlo listo para participar.

Para esta configuración es fundamental tener instalado el Open Secure Shell y CVS.

1.- Se crean los archivos .cvsignore y .cvsrc en el home del usuario, un ejemplo del contenido para un proyecto escrito en python puede ser:

  • .cvsignore:
*.png *.jpg *.xpm *.bak *.gladep *~ *dump*.sql *.pdf *.conf* *.pyc *.pyo .*.swp *.pywc
  • .cvsrc:
update -Pd
diff -uw
cvs -z 3

2.- El siguiente paso es exportar las variables:

#export CVSROOT= :ext:user@n_proyecto.cvs.sourceforge.net:/cvsroot/n_proyecto
#export CVS_RSH=ssh

3.- Y por último sólo tenemos que hacer el checkout para descargar el código

# cvs checkout nombre_rama_proyecto


Tras introducir nuestra clave de usuario de sourceforge se descarga el código. Entre las opciones de cvs recordar las tres fundamentales:
  • cvs update
  • cvs ci
  • cvs add fichero