sábado, 28 de febrero de 2009

Problemas de teclado con Ubuntu 8.10 + VMPlayer

Por alguna cuestión VMPlayer no reconoce algunas teclas en Ubuntu (o sea, las teclas en Ubuntu funcionan bien, pero no "llegan" al sistema operativo ejecutando en VMPlayer). La solución es sencilla: hay que agregar la siguiente línea al archivo de configuración ubicado en ~/.vmware/config

nokeycodeMap = true


jueves, 19 de febrero de 2009

pg_dump y "canceling statement due to statement timeout"

Al realizar backups de tablas grandes, pueden producirse "statement timeout":

pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: canceling statement due to statement timeout


Si esto sucede porque tenemos configurado "statement_timeout" a nivel general, esta configuración también está afectando las sentencias ejecutadas por pg_dump (esto sucede al menos con PostgreSql 8.1). Este se soluciona seteando la siguiente variable de entorno:

~# export PGOPTIONS="-c statement_timeout=0"
~# pg_dump test_db


También podemos hacerlo en 1 línea

~# PGOPTIONS="-c statement_timeout=0" pg_dump test_db


o también:

~# env PGOPTIONS="-c statement_timeout=0" pg_dump test_db


Tomado de: http://www.mail-archive.com/pgsql-general@postgresql.org/msg79518.html

martes, 17 de febrero de 2009

Formateo de excepciones en Python

Muy simple:
formatted_lines = traceback.format_exc().splitlines() # hacerlo en el exception handler
exc = "\n".join(formatted_lines)
print exc

jueves, 5 de febrero de 2009

Imports de Python como en Java

En Java, si tenemos 2 directorios con fuentes, y en cada directorio una misma estructura de paquetes, la JVM se encarga automáticamente de buscar cada clase/paquete en los distintos directorios. Por ejemplo, podemos tener src1 y src2 en el classpath, cada directorio con los mismos paquetes:

src1/ar/com/ejemplo/Uno.java
src2/ar/com/ejemplo/Dos.java


Desde una clase podemos hacer referencias a Uno y Dos sin mayores problemas, por ejemplo:

import ar.com.ejemplo.Uno;
import ar.com.ejemplo.Dos;


Pero con Python esto se complica y no funciona automáticamente. Si tenemos src1 y src2 en el PYTHONPATH, cada directorio con estructura similar:

src1/__init__.py
src1/ejemplo/__init__.py
src1/ejemplo/uno.py

src2/__init__.py
src2/ejemplo/__init__.py
src2/ejemplo/dos.py


Con PYTHONPATH=src1:src2

from ejemplo import uno -> importa OK
from ejemplo import dos -> ImportError


Con PYTHONPATH=src2:src1

from ejemplo import uno -> ImportError
from ejemplo import dos -> importa OK


Esto se puede solucionar utilizando pkgutil, modificando src1/ejemplo/__init__.py y src2/ejemplo/__init__.py de forma que incluya:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


De esta manera, usando "extend_path" logramos lo que buscábamos, independientemente del orden en que están src1 y src2 en el PYTHONPATH.

from ejemplo import uno -> importa OK
from ejemplo import dos -> importa OK

lunes, 2 de febrero de 2009

Referencia rápida MySql 5.0

Diariamente trabajo y administro bases de datos PostgreSql, pero cada tanto uso MySql y siempre olvido los comandos para crear BD y usuarios, así que ahí va una referencia rápida sobre cómo hacerlo sobre MySql 5.0 (versión incluida en Debian Etch):

Para crear BD
$~ mysqladmin create nombre_base_de_datos


Para crear un usuario y asignar permisos
$~ mysql nombre_base_de_datos
[mysql] create user nombre_usuario identified by '**********';
[mysql] grant all on nombre_base_de_datos.* TO 'nombre_usuario'@'localhost';
[mysql] set password for 'nombre_usuario'@'localhost' = PASSWORD('********');
[mysql] flush privileges;

Links:
http://dev.mysql.com/doc/refman/5.0/en/server-administration.html
http://dev.mysql.com/doc/refman/5.0/en/adding-users.html
http://dev.mysql.com/doc/refman/5.0/en/passwords.html

domingo, 1 de febrero de 2009

SocketProcessId.getpid could not get unique port

Intentando ejecutar JBoss 5 (la versión para Java 6) en Ubuntu me apareció el siguiente error:

2009-02-01 02:49:32,115 INFO  [com.arjuna.ats.jbossatx.jta.TransactionManagerService] (main) Setting up property manager MBean and JMX layer
2009-02-01 02:49:32,788 DEBUG [com.arjuna.ats.arjuna.logging.arjLoggerI18N] (main) [com.arjuna.ats.arjuna.recovery.TransactionStatusManager_1] - Starting service com.arjuna.ats.arjuna.recovery.ActionStatusService on port 4713
2009-02-01 02:49:32,812 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (main) Error installing to Create: name=TransactionManager state=Configured com.arjuna.ats.arjuna.exceptions.FatalError: [com.arjuna.ats.internal.arjuna.utils.SocketProcessId_2] - SocketProcessId.getpid could not get unique port.
at com.arjuna.ats.internal.arjuna.utils.SocketProcessId.getpid(SocketProcessId.java:105)
at com.arjuna.ats.arjuna.utils.Utility.getpid(Utility.java:277)
at com.arjuna.ats.arjuna.common.Uid.(Uid.java:105)
at com.arjuna.ats.arjuna.utils.Utility.getProcessUid(Utility.java:289)
at com.arjuna.ats.internal.arjuna.recovery.TransactionStatusManagerItem.(TransactionStatusManagerItem.java:366)
at com.arjuna.ats.internal.arjuna.recovery.TransactionStatusManagerItem.createAndSave(TransactionStatusManagerItem.java:84)
at com.arjuna.ats.arjuna.recovery.TransactionStatusManager.start(TransactionStatusManager.java:145)
at com.arjuna.ats.arjuna.recovery.TransactionStatusManager.(TransactionStatusManager.java:72)
at com.arjuna.ats.arjuna.coordinator.TxControl.(TxControl.java:355)
at com.arjuna.ats.jbossatx.jta.TransactionManagerService.create(TransactionManagerService.java:178)

(y continúa...)

No sé exactamente cuál era el problema, pero lo pude solucionar mapeando al IP correcto el nombre de host que devuelven los comandos "hostname" y "hostname -f".

Ejemplo:

#~ hostname -f
unhost.example.com

Antes de solucionar el problema, "unhost.example.com" tenía asociado un IP incorrecto (o sea, un IP que no correspondía a ningun IP del sistema). Para solucionar el problema asocié a "unhost.example.com" el IP de la placa de red.

Esta cuestión también impide que Glassfish 2.1 arranque correctamente.