Enemy Territory + PulseAudio : sonido

El et (enemy-territory) usa por el sistema de sonido OSS que está deprecated. Para poder escuchar correctamente todo, haremos los siguiente como root.

1)Vamos al directorio de instalación del et.
cd /usr/local/games/enemy-territory.

2) Ejecutamos como root:
wget -q -O - http://nullkey.kapsi.fi/et-sdl-sound/et-sdl-sound.gz | gzip -d > et-sdl-sound && chmod a+x et-sdl-sound

3) Editamos el archivo et-sdl-sound (vi /usr/local/games/enemy-territory/et-sdl-sound), buscamos y cambiamos lo siguiente. Luego salvamos:
SDL_AUDIODRIVER="pulse"

4) Editamos el archivo et que lanza el enemy ( vi /usr/local/games/enemy-territory/et ), lo dejamos así:

#!/bin/sh
# Needed to make symlinks/shortcuts work.
# the binaries must run with correct working directory
cd "/usr/local/games/enemy-territory/"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
#exec ./et.x86 "$@"
exec ./et-sdl-sound "$@"
5) Para ejecutar el enemy, lo haremos como siempre, lanzando el comando et, pero ahora tendremos sonido.

La modificación que permite esto se encuentra en:
http://nullkey.kapsi.fi/et-sdl-sound/

Que es el programador que ha realizado la modificación y al que le debemos un agradecimiento (y el link).

PD: 27 de Octubre de 2011. He actualizado los enlaces de la fuente.

Recuperación de Grub tras instalar Windows 7


Tras instalar windows 7 ( o cualquier otro Windows) se sobreescribe el MBR de nuestro disco duro y perdemos el arranque con GRUB. Para recuperarlo haremos los siguientes pasos.

1- Listamos las particiones de nuestros discos duros con el comando

sudo fdisk -l


2- Localizamos la partición que tiene linux, en mi caso la /dev/sbd6 . En la mayoría de los ordenadores suele estar en sda (primer disco duro).



3- Creamos un directorio con el mismo nombre de la partición
 y lo montamos
sudo mkdir /media/sdb6
sudo mount /dev/sdb6 /media/sdb6
4- Ejecutamos comando para que se instale de nuevo grub.

sudo grub-install --root-directory=/media/sdb5 /dev/sdb

Fuente: http://ubuntuforums.org/showthread.php?t=1014708

Oracle : crear una suma acumulada

Para crear una suma acumulada usaremos las funciones analíticas de oracle. Un ejemplo completo

--creacion de la tabla
create table gastos(nombre varchar2(30),dia integer,gasto integer);
--inserción de datos de prueba
insert into gastos values('diego',1,10);
insert into gastos values('diego',2,20);
insert into gastos values('diego',3,30);
insert into gastos values('fede',1,5);
insert into gastos values('fede',2,20);
insert into gastos values('fede',3,10);

--agrupa por nombre, ordena por día
select nombre,dia,gasto, sum(gasto) over (partition by nombre order by dia desc rows unbounded preceding) sum_acu from gastos;
Con partition dividimos en grupos.
Con order by indicamos el campo de ordenación

Acer aspire 1654 WLMI : bloqueo del teclado y el touchpad

Al parecer el modelo Acer aspire 1654WLMI suele tener el problema de que se bloquea el teclado y el touchpad de vez en cuando.

Este bloqueo ocurre tanto cuando se está ejecutnado windows XP como en el profeso de formateo e instalación

Al parecer esto se produce por un fallo en la batería. Para solucionar el problema del bloqueo hay que comprar una batería nueva (19V 3.42A) o bien ejecutar/arrancar el ordenador sin la bateria dañada defectuosa.

Como nota adicional, comentar que Acer tiene una partición oculta que sirve para restaurar el sistema. Para arrancar desde dicha partición, reiniciamos el ordenador y cuando aparezca el logo de acer pulsamos ALT+F10. Nos pedirá una contraseña que por defecto es 000000.

Sincronizar reloj manualmente: NTP

Para sincronizar manualmente el reloj de nuestra máquina usando el protocolo ntp usaremos el siguiente comando como root:
ntpdate -u hora.rediris.es

Actualmente el comando está deprecated y debemos escribir de forma equivalente. dependiendo de la versión que tengamos instalada el comnado será uno de estos dos:
sntp -s hora.rediris.es (opensuse 11.3)
sntp -p no -r hora.rediris.es (opensuse 11.4 y SLES 11)

RabbitVCS : instalación en Opensuse 11.4

RabbitVCS es un cliente SVN que nos permite manejar nuestros repositorios SVN desde nautilus.Es una herramienta muy cómoda e imprescindible si usamos gnome. Para su instalación realizaremos los siguientes pasos

1) Instalar los repositorios siguientes desde Yast -> Repositorios de Software:
http://download.opensuse.org/repositories/home:/tzotsos:/vcs/openSUSE_11.4
http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.4/

2) Desde Yast -> Instalar / Desinstalar software. Instalamos los siguientes paquetes
rabbitvcs rabbitvcs-nautilus-extension python-nautilus

Nos tenemos ademas que asegurar que el paquete python-nautilus es el del respositorio de RabbitCVS (actualmente es la versión 0.7.2-16.1). Si usamos la versión python-nautilus que vienen en los repositorios openSuse (GNOME:Apps o el Oss) tendremos los siguientes errores:

- Al arrancar el escritorio Gnome no aparecerán los iconos del escritorio
- No podremos lanzar nautilus
- Si lanzamos nautilus desde un terminal aparecerá el siguiente error:
"ImportError: No module named nautilus"

Si tenemos estos problemas podemos corregirlos instalando el python-nautilus de los repositorios o desinstalando rabbitvcs:
sudo zypper rm rabbitvcs rabbitvcs-nautilus-extension python-nautilus

Comando Tar

El comando tar permite empaquetar / desempaquetar varios archivos en uno solo. Su funciónprincipal es la de empaquetar, aunque también permite usar compresión mediante gzip

Empaquetar:
tar vcf nombre_archivo.tar archivo1 archivo2

v: (verbose) muestra en la patanlla las operaciones
c: (create/crear) opción para crear el archivo
f: (file/archivo) indica que se pasara como argumento el nombre del archivo tar

Podemos también usar comodines para seleccionar archivos, por ejemplo si queremos empaquetar todos los archivos jpg el comando sería:
tar cvf imagenes.tar *.jpg

Desempaquetar:
tar xvf nombre_archivo.tar

v: (verbose) muestra en la patanlla las operaciones
x: (extraer) opción desempaquetar
f: (file/archivo) indica que se pasara como argumento el nombre del archivo tar

También podemos especificar el nombre del archivo que queremos extraer.En el ejemplo extraemos el archivo imagen1.jpg (hay que especificar la ruta completa):
tar xvf nombre_archivo.tar /imagen/imagen1.jpg

Del mismo modo podemos usar comodines (como el asterisco) para desempaquetar. En el ejemplo extraemos todos los archivos jpg
tar xvf nombre_archivo.tar imagen1.jpg --wildcards '*.jpg'

wildcards: indica que se usarán comodines (pattern , patrones)

Listar Archivos
Para listar los archivos contenidos en un tar usaremos el siguiente comando
tar tf mi_archivo.tar

t : opción listar

Archivos TGZ
Para manejar archivos tgz (tar comprimidos con gzip) usaremos los mismos comandos que antes pero añadiendo la letra Z:

Comprimir:
tar cvfz nombre_archivo.tgz archivo1 archivo2

Descomprimir :
tar xvfz nombre_archivo.tgz

Listar:
tar tf nombre_archivo.tgz

Apache: Mostrar los accesos de access_log en formato tabular

Con el siguiente comando en bash mostraremos 3 campos del archivo access_log de apache(/var/log/apache2/access_log). En dicho archivo se almacenan los accesos (peticiones) a nuestro servidor apache.

Se mostrarán 3 campos : ip, día (en fommato dd/mm/yyyy) y la hora. Al ser en formato tabular será facil de editar con cualquier hoja de cálculo. El comando es el siguiente:
cat access_log | cut -d ' ' -f 1,4 | perl -pi -e 's/((\d+\.\d+\.\d+\.\d+)|(::1)) \[(\d+\/.{3}\/\d{4}):/$1\t$4\t$5/' | sort -u

La salida será algo así:
::1 11/Feb/2011 12:35:26
::1 11/Feb/2011 12:35:27
192.168.1.2 11/Feb/2011 12:35:23
192.168.1.45 11/Feb/2011 12:35:24
192.168.1.57 11/Feb/2011 12:35:22
192.168.1.124 11/Feb/2011 12:35:26

Instalar Extension PDO_OCI en Suse Linux

En los siguientes pasos instalaremos el módulo php_pdo_oci en una maquina SLES 11 de 64 bits, que tiene instalado el instant client 11.2 Dicha máquina ya tenía instalado varias elementos necesarios para que este módulo funcione.

Sobre la instalación del instant client de Oracle, y el módulo oci8 hay más información en el siguiente post:

- Instalación del Oracle Instant Client y configuración de Oci8 en php y apache en Suse


Nos centraremos exclusivamente en la instalación del PDO_OCI, ejecutaremos los siguientes pasos como root:

1- Obtener extensión y descomprimir
wget http://pecl.php.net/get/PDO_OCI
tar zxvf PDO_OCI
cd PDO_OCI-1.0/
phpize

2- Fijar el directorio del home de oracle ( en el caso de que no esté definido)
export ORACLE_HOME=/usr/lib/oracle/11.2/client64

3-Creamos unos enlaces (el configure da problemas si no están) para la versión de 64 bits

ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client
ln -s /usr/include/oracle/11.2/client64 /usr/lib/oracle/11.2/client/include
4-Parcheamos para la versión 11.2 los archivos añadiendo en secciones similares las siguientes líneas (el número de linea es orientativo). De forma alternativa podemos sustituir la cadena de texto 10.2 por 11.2 Esto soluciona el error :
Configure: error: Unsupported Oracle version! 11.2

Archivo config.m4:
Línea 10
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
PDO_OCI_VERSION=11.2

Línea 125
11.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;

Archivo configure:
Línea 5492:
11.2)


case clntsh in
c|c_r|pthread*) ;;
*)
if test "$ext_shared" = "yes"; then
PDO_OCI_SHARED_LIBADD="$PDO_OCI_SHARED_LIBADD -lclntsh"
else


case clntsh in
c|c_r|pthread*) ;;
*)
LIBS="$LIBS -lclntsh"
;;
esac


fi
;;
esac


;;

5- Para Solucionar el errores:
Cannot find php_pdo_driver.h
Ejecutaremos lo siguiente:
mkdir include
ln -s /usr/include/php5/ include/php
Para el error
pdo_oci.c:34:1: error: unknown type name 'function_entry'
Editamos el archivo pdo_oci.c y cambiamos el function_entry por zend_function_entry


6- Ejecutamos el configure, compilamos e instalamos ( no debería salir mensaje de error)
./configure --with-pdo-oci=instantclient,/usr,11.2
make && make install
7- Añadimos el módulo a php
echo extension=pdo_oci.so > /etc/php5/conf.d/pdo_oci.ini
8- Reiniciamos apache
rcapache2 restart

9- Verificamos que se ha cargado correctamente con alguno de los siguientes comandos para listar los módulos cargados:
php -m | grep -i PDO
php -r "phpinfo();" | grep -i PDO_OCI
o directamente un phpinfo desde el navegador:

Ejecutar Hotot desde el escritorio

Tras la instalación de hotot ( Cómo instalar hotot en opensuse 11.3), cree un acceso directo en el escritorio apuntando a donde estaba el ejecutable, en mi caso:
/home/dieguz2/Programas/hotot/hotot.py

Pero me daba los siguientes errores:
Traceback (most recent call last):
File "./hotot.py", line 302, in
main()
File "./hotot.py", line 285, in main
agent.init_notify()
File "/home/dieguz2/Programas/hotot/hotot/agent.py", line 87, in init_notify
utils.get_ui_object('imgs/ic64_hotot.png')))
TypeError: pixbuf_new_from_file() argument 1 must be string, not None

Aparentemente sólo podía ejecutar hotot desde el directorio:
/home/dieguz2/Programas/hotot/

y llamando a
./hotot/hotot.py

Si nos e hacia así no encontraba varios de sus recursos.

Para poder ejecutarlo desde cualquier sitio haremos lo siguiente
1) Creamos un archivo en el directorio de hotot. En mi caso el directorio es /home/dieguz2/Programas/hotot/. Le damos permisos de ejecución
touch /home/dieguz2/Programas/hotot/runfromhere.py
chmod u+x /home/dieguz2/Programas/hotot/runfromhere.py

2) Editamos dicho archivo (cat > /home/dieguz2/Programas/hotot/runfromhere.py) y le añadimos el siguiente contenido:
#!/usr/bin/env python
# Copyright (C) 2010 dieguz2
# License: GNU GPL v3
# http://dieguz2.blogspot.com/
# script: runfromhere.py
# description: change current working directory to the path where the script is and then execute COMMAND
import os
import sys

command="./hotot/hotot.py" # command we want to execute
dirname= os.path.dirname(os.path.abspath(sys.argv[0])) # get path where this script is
os.chdir(dirname)
os.system(command)
En este script obtenemos el path absoluto donde está el script ( no es el mismo que el path de llamada). Como dicho script está alojado en el home de hotot, cambiamos a dicho directorio y ejecutamos hotot desde ahí

3) Para ejecutar hotot desde el escritorio o desde cualquier sitio, ejecutaremos el archivo que hemos creado.
/home/dieguz2/Programas/hotot/runfromhere.py



Otra forma alternativa es crear un shell script (o en python) como el siguiente y colocarlo por ejemplo en nuestro ~/bin de usuario. En este caso pondremos en la variable hotot_path la ruta donde está instalado hotot:
touch ~/bin/hotot.sh
chmod u+x ~/bin/hotot.sh
cat > ~/bin/hotot.sh
#!/bin/sh
hotot_path=/home/dieguz2/Programas/hotot
cd $hotot_path
./hotot/hotot.py