viernes, julio 21, 2006

Como tener aMsn 0.97 con antialias y con la posibilidad de utlilizar cualquier fuente que tengamos instalada.

Con ésto instalamos la última versión estable de amsn (salida hace muy poco) y le damos el aspecto que se merece a uno de los mejores mensajeros escritos hasta el momento.

Abrimos un terminal y con ésto quitamos la versión anterior de amsn y de tcltls ( el símbolo $ reprecenta que estoy en la consola por lo tanto no se escribe ):

$ sudo aptitude remove amsn tcltls

Ahora instalamos los paquetes necesarios para compilar el amsn y demás:

$ sudo aptitude install build-essential libc6-dev libx11-dev libxft-dev imagemagick libjpeg62-dev libpng12-dev

Descargamos y compilamos de ésta manera tk y tcl para que nos proporcione antialias en las fuentes:

$ wget ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5a6-src.tar.gz
$ tar xzvf tcl8.5a6-src.tar.gz
$ cd /tcl8.5a6/unix
$ ./configure --prefix=/usr
$ make
$ sudo make install

$ cd
$ wget ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tk8.5a6-src.tar.gz
$ tar xzvf tk8.5a6-src.tar.gz
$ cd tk8.5a6/unix
$ ./configure --prefix=/usr --enable-xft
$ make
$ sudo make install


Nota: Las versiones de tcl y tk cambian con el tiempo, si quieren verificar si existe una nueva, deben entrar a esta pagina LINK

Ésto es para que funcionen las nuevas versiones sobre el amsn:

$ cd /usr/bin
$ sudo rm wish
$ sudo ln -s wish8.5 wish

Finalmente compilamos el amsn:

$ cd
$ wget http://ufpr.dl.sourceforge.net/sourceforge/amsn/amsn-0.97.tar.bz2
$ tar xzvf amsn-0.97RC1.tar.gz
$ cd /amsn-0.97RC1
$ ./configure --with-tcl=/usr/lib/ --with-tk=/usr/lib/
$ make
$ sudo make install

Si todo salió bién escribimos amsn y al iniciar seción nos ofrecerá descargar tls (sin ésta libreria no podemos conectarnos), elegimos el adecuado para nuestra arquitectura de procesador (la más común x86, para procesadores de 32 bits), ponémos instalar y finalmente tendremos nuestro amsn listo para funcionar con la posibilidad de cambiarle las fuentes a cualquiera que tengamos instalada y con antialias.

Para la nueva version de Amsn debemos compilarla de nuevo haciendo lo que hicimos antes (solo Amsn, no tcl, ni tk8)

para los que se perdieron ahi va detallado

Bajamos el Amsn última version de ACA
Siempre bajen el que pone "Tarball Source", ya que es ese el que compilaremos

lo descomprimimos

doble click en el archivo bajado y descomprimir donde quieran

cd /donde descomprimimos el .tar.bz2

$ ./configure --with-tcl=/usr/lib/ --with-tk=/usr/lib/
$ make
$ sudo make install

Nota: Quizas les de un error en el tcl; o sea, les pide de descargarlo para su arquitectura, pero jamas para de pedirlo......
Esto lo arreglamos de esta manera:

$ locate pkgIndex.tcl

Esto nos dara la ubicacion de este archivo, por ejemplo "/usr/lib/tls1.50/pkgIndex.tcl"

$ sudo gedit /usr/lib/tls1.50/pkgIndex.tcl

En este archivo habrá algo como esto:

package ifneeded tls 1.5 "[list load [file join $dir .. libtls1.50.so] ] ; [list source [file join $dir tls.tcl] ]"

Y debemos agregarle un cero a 1.5, quedando:

package ifneeded tls 1.50 "[list load [file join $dir .. libtls1.50.so] ] ; [list source [file join $dir tls.tcl] ]"

Esto deberia arreglar el problema del tcl...

Muchas Gracias, y espero que les funcione

jueves, julio 06, 2006

Metáfora de la Carne o el Pescado

Lejos, lo mejor que he leido, sobre por que usamos linux

Copiado textualmente de un post de Maverick

POST ← Ubuntu-es

Imagina que entras en un restaurante para comer. El camarero, antes de mostrarte la carta, te sirve un plato de estofado. El plato tiene buena pinta; cuando miras a tu alrededor ves que todo el mundo está comiendo estofado.

Cuando lo pruebas, notas que su sabor es horrible. No parece ternera ni cerdo. Pero todos siguen con su estofado, así que supones que tendrás que comértelo de todos modos

Ya llevas la mitad del plato cuando entra otra persona, que se sienta en la mesa de al lado. Le sirven estofado, pero devuelve el plato. Pide lenguado en salsa

Extrañado, te preguntas si el pescado también será tan malo como el estofado. Ves que esa persona tarda alrededor de un cuarto de hora en quitar todas las espinas y limpiar la pieza, pero la comida parece gustarle. Un señor que hay sentado a tu lado se da cuenta de que estás observando al chico del pescado, y te comenta "No entiendo como puede comer pescado. ¡Pierde todo el tiempo tan sólo para limpiarlo!". El chico se da cuenta y le contesta "Pero merece la pena la espera"

Además, oyes conversaciones en las que se dice que alguno de los que comió estofado el día anterior está con gastroenteritis, posiblemente por comer carne en mal estado. Mientras la persona del pescado está acabando, llama al cocinero para explicarle que el plato estaba exquisito, pero con un poco de zumo de limón hubiera quedado más jugoso. Decides llamar tú también al cocinero para comentarle que el estofado es asqueroso, pero te responde que el hecho de comer estofado te prohíbe preguntar de dónde salió la carne, y no puedes cambiar las patatas por champiñones en caso de que no te gusten. "¿Cómo es posible que no pueda saber qué animal estoy comiendo?", le dices. Por lo visto, la empresa que distribuye la carne guarda celosa ese secreto, aunque asegura que es de calidad y apta para el consumo humano.

La persona del pescado se dispone a marchar, y se va sin pagar la cuenta. Preguntas al camarero, y te dice que el pescado es gratuito, pero el estofado hay que pagarlo. El señor de antes te comenta "Si es gratis, seguro que no es de fiar", aunque piensas si realmente algo puede estar más malo que la carne que te acabas de comer. Pagas una cantidad exorbitada por un estofado malísimo, y marchas del restaurante. En tu camino a casa, ves que en otro restaurante el pescado cuesta dinero, aunque ni la mitad que la carne. El camarero te dice que el pescado es el mismo, pero esta vez lo sirven con extra de guarnición si quieres. Si no, también es gratis

A la semana siguiente, vuelves al mismo restaurante. Piensas si probar el pescado o seguir con la carne. Nuevamente, todos los comensales han pedido estofado. En una mesa encuentras al chico de la semana pasada, en lugar de lenguado ha pedido merluza al ajillo. Te invita a sentarte a su lado.

"¿Quieres pescado? Si no te ves capaz de limpiarlo, te puedo echar una mano. Está buenísimo. Si lo pruebas y no te gusta, no pasa nada, siempre podrás volver al estofado". Se ríe y añade "¿De verdad te gusta? Es malísimo"

Empiezas a dudar, y recuerdas lo que te dijeron la semana pasada. Le preguntas acerca de la procedencia del pescado, podría ser que estuviera en mal estado. Te contesta que ese pescado es del día, que puedes ir tú mismo a la lonja a comprobar como el dueño del restaurante lo adquiere todos los días. Nadie te garantiza que sea bueno, pero resulta que sí lo es. Tú mismo puedes comprobarlo. Te comenta que los grandes gourmets siempre piden pescado para comer. Como necesitan cierta garantía de calidad por su estatus social, pagan a un notario para que vaya todos los días al puerto a comprobar que, efectivamente, el pescado es fresco. El resto de comensales se aprovechan de esto, pues el notario no sólo garantiza el pescado de los más exigentes, sino todos los palés que pasan por la lonja.

Además añade "¿O es que acaso puedes comprobar la procedencia de la carne? Sabes, cualquiera puede pescar su propio pescado y comerlo como más le guste. En cambio, la empresa que controla la carne no permite cocinarlo de maneras que no sean las que ellos quieren. Ni siquiera dicen qué animal estás comiendo, ¿Te parece normal? ¿Si su carne es tan buena, qué tienen que esconder?"

"Una vez que te has acostumbrado a limpiar el pescado de espinas, aunque tardes un poquito más en comer, te quedas más a gusto. Insisto, te echo una mano hasta que te acostumbres. No entiendo cómo puede haber gente que pague por esa ¿carne?". Le recuerdas que mucha gente marcha sin pagar. "Sí, claro que puedes irte sin pagar. Pero pudiendo comer un buen pescado, no comería ese estofado ni aunque me lo regalasen. Y si lo pruebas lo entenderás"

lunes, julio 03, 2006

Instalar apropiadamente los sensores

Para continuar con asuntos relaccionados con el hardware vamos a instalar lm-sensors para poder conocer el estado de nuestra máquina en todo momento:

$ sudo aptitude install lm-sensors

Para configurarlo crearemos un script mkdev.sh con el siguiente contenido:

#!/bin/bash
# Here you can set several defaults.
# The number of devices to create (max: 256)
NUMBER=32
# The owner and group of the devices
OUSER=root
OGROUP=root
# The mode of the devices
MODE=600
# This script doesn't need to be run if devfs is used
if [ -r /proc/mounts ] ; then
if grep -q "/dev devfs" /proc/mounts ; then
echo "You do not need to run this script as your system uses devfs."
exit;
fi
fi
i=0;
while [ $i -lt $NUMBER ] ; do
echo /dev/i2c-$i
mknod -m $MODE /dev/i2c-$i c 89 $i || exit
chown "$OUSER:$OGROUP" /dev/i2c-$i || exit
i=$[$i + 1]
done
#end of file

cambiamos los permisos del archivo de forma que pueda ejecutarse, y lo ejecutamos.

$ chmod +x mkdev.sh
$ sudo ./mkdev.sh

Ejecutamos después sensors-detect, que nos hará una serie de preguntas mientras intenta determinar qué módulos deberíamos cargar. Si no sabes contestar a alguna pregunta, simplemente pulsa enter para seleccionar el valor por defecto.

$ sudo sensors-detect

Esta es la salida de sensors-detect para mi PC:

To make the sensors modules behave correctly, add these lines to
/etc/modules:

#----cut here----
# I2C adapter drivers
i2c-viapro
# modprobe unknown adapter bt878 #0 [sw]
i2c-isa
# I2C chip drivers
eeprom
via686a
#----cut here----

Then, run /etc/init.d/module-init-tools

To make the sensors modules behave correctly, add these lines to
/etc/modprobe.d/local and run update-modules:

#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----cut here----

Vamos a añadir los módulos listados a /etc/modules como nos indican. En este caso se necesita un poco de Google o de prueba y error para determinar en qué orden se deben cargar, ya que dependiendo del orden puede que algunos sensores no funcionen. Una vez determinado el orden pasamos a editar el archivo:

$ sudo gedit /etc/modules

En mi caso este es el orden a utilizar:

1. via686a
2. eeprom
3. i2c-viapro
4. i2c-isa

Cargaremos los módulos en el orden específicado para comprobar que funcione

$ sudo modprobe via686a
$ sudo modprobe eeprom
$ sudo modprobe i2c-viapro
$ sudo modprobe i2c-isa
$ sudo depmod -a
$ sudo update-modules

Y por último ejecutamos sensors para comprobar los sensores que detecta y que sus valores sean correctos:

$ sensors
Philips PAL_BG -i2c-1-61
Adapter: bt878 #0 [sw]
eeprom-i2c-1-50
Adapter: bt878 #0 [sw]
Unknown EEPROM type (0)
via686a-isa-6000
Adapter: ISA adapter
CPU core: +1.76 V (min = +2.00 V, max = +2.50 V) ALARM
+2.5V: +1.21 V (min = +0.06 V, max = +3.10 V)
I/O: +3.33 V (min = +3.12 V, max = +3.45 V)
+5V: +4.88 V (min = +4.73 V, max = +5.20 V)
+12V: +12.43 V (min = +11.35 V, max = +12.48 V)
CPU Fan: 7258 RPM (min = 2657 RPM, div = 2)
P/S Fan: 0 RPM (min = 2657 RPM, div = 2) ALARM
SYS Temp: +60.6°C (high = +45°C, hyst = +40°C) ALARM
CPU Temp: +45.8°C (high = +60°C, hyst = +55°C)
SBr Temp: +27.4°C (high = +65°C, hyst = +60°C)

Al reiniciar tendremos acceso a los diferentes sensores para comprobar el estado del sistema. Para mostrar estos valores de forma gráfica podemos utilizar programas como gDesklets o GKrellM. Yo suelo utilizar los applets hardware-monitor o GNOME Sensors Applet del panel de Gnome.

Acelerar los discos con hdparm

Para empezar con el tema de los discos duros, y dado que los dispositivos de almacenamiento secundario son un verdadero cuello de botella en la ejecución, vamos a intentar optimizar el acceso utilizando para ello la herramienta hdparm. Primero vamos a comprobar la velocidad actual de transferencia con y sin buffer:

$ sudo hdparm -tT /dev/hdg

por supuesto, habrá que sustituir /dev/hdg por el disco sobre el que se quiera realizar la prueba. El sistema responde:

/dev/hdg:
Timing buffer-cache reads: 644 MB in 2.01 seconds = 320.13 MB/sec
Timing buffered disk reads: 138 MB in 3.01 seconds = 45.81 MB/sec

Muchas veces se desactivan opciones que mejorarían el rendimiento de acceso a disco por mantener la compatibilidad. Comprobemos la configuración actual:

$ sudo hdparm /dev/hdg

lo cual muestra:

/dev/hdg:
multcount = 0 (off)
IO_support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 65535/16/63, sectors = 234375000, start = 0

Lo primero en lo que tenemos que fijarnos es en si está activado o no el acceso directo a memoria (DMA), la opción using_dma. Esta opción posibilita al controlador de disco acceder directamente a la memoria del sistema para realizar transferencias, liberando a la CPU de ese trabajo.

En este caso como vemos DMA está activo. Si no lo estuviera escribiríamos:

$ sudo hdparm -d1 /dev/hdg

A continuación vamos a activar las transferencias de 32 bits, ya que como vemos (opción IO_support) por defecto solo se utilizan 16 bits:

$ sudo hdparm -c3 /dev/hdg
/dev/hdg:
setting 32-bit IO_support flag to 3
IO_support = 3 (32-bit w/sync)

También podríamos haber utilizado la opción -c1 en lugar de -c3, que indica al sistema que realice las transferencias de 32 en 32 bits, como -c1, pero sin activar una cierta secuencia de sincronización necesaria por parte de algunos sistemas. El sustituir -c3 por -c1 puede provocar una ligera mejora en las prestaciones, pero a cambio puede dar problemas dependiendo del dispositivo.

Por último, vamos a indicar al sistema que lea varios sectores en la misma interrupción, utilizando para ello la opción -m. Valores comunes suelen ser 2, 4, 8 o 16, aunque valores mayores pueden ser posibles. Para comprobar el límite para el dispositivo utilizaremos la opción -i:

$ sudo hdparm -i /dev/hdg
/dev/hdg:
Model=WDC WD1200JB-75CRA0, FwRev=16.06V16, SerialNo=WD-WMA8C2958000
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
BuffType=DualPortCache, BuffSize=8192kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234375000
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2
AdvancedPM=no WriteCache=enabled
Drive conforms to: device does not report version:

* signifies the current active mode

Como vemos el valor máximo para el dispositivo hdg es 16, por lo que activaremos la lectura de 16 sectores por interrupción:

$ sudo hdparm -c3 -m16 /dev/hdg
/dev/hdg:
setting 32-bit IO_support flag to 3
setting multcount to 16
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)

Una vez realizados los cambios, si eran necesarios, volvemos a realizar las pruebas de velocidad para comprobar si ha habido un aumento en la velocidad de acceso:

$ sudo hdparm -tT /dev/hdg

en el caso de que así sea, procederemos a guardar los cambios, bien utilizando la opción -k1 o editando el archivo de configuración /etc/hdparm.conf y añadiendo algo parecido a esto:

/dev/hdg {
dma = on
mult_sect_io = 16
io32_support = 3
}