Archive for the ‘Informática’ Category

Google Speaker Series: Inteligencia Amplificada

Tuesday, April 29th, 2008

Hoy ha tenido lugar en Gløshaugen una conferencia protagonizada por Patrick J. Hayes a la que estoy muy contento de haber podido asistir.

Patrick J Hayes

En la conferencia, Patrick ofreció tres razones por las que rechazaba el test de Turing como mecanismo para determinar la existencia de inteligencia o no en una “máquina”:

  1. Mala definición del experimento: Según el método científico, se debería enunciar una hipótesis para posteriormente deducirla a partir de consecuencias observables. Sin embargo el test de Turing se centra en demostrar que una máquina no es capaz de pensar cuando no supera el test, mientras el hecho de que la máquina supere el test plantea cuestiones sin resolver.
  2. La máquina desde el principio debe estar diseñada para mentir , con lo que, por ejemplo, debe ocultarle al interrogador su alta capacidad de cálculo numérico o la velocidad de escritura. En ese aspecto, no parece razonable afirmar que la máquina puede hacer algo más que simular inteligencia.
  3. Cualquier experimento debe ser reproducible de manera objetiva en cualquier situación, sin embargo en este caso el resultado del experimento depende en gran medida de la cultura del interrogador, de su procedencia, personalidad, etc…

Tras esto, propuso una alternativa a la definición de IA, como “Inteligencia Amplificada” (manteniendo el acrónimo) desde un punto de vista más práctico, donde la máquina supone una prótesis cognitiva que extiende la inteligencia humana de la misma manera que unas gafas extienden la capacidad de visión. Según Patrick, Deep blue no fué quien derrotó a Garri Kasparov, sino el hombre que había sentado en la silla escribiendo en la terminal los movimientos en cada jugada.

También remarcó que “cuando algo funciona correctamente, automáticamente deja de ser IA, para convertirse en un simple algoritmo”, dando un claro ejemplo de lo que se consideraba Inteligencia Artificial a mediados de los años 50, cuando John Bakus propuso a la IBM una forma de convertir un lenguaje de alto nivel (FORTRAN) en lenguaje entendible por la máquina de manera automática.

Sin ninguna duda, esta conferencia ha sido altamente enriquecedora, aunque personalmente considero que la definición del test de Turing es un concepto de lo más valioso aún 50 años después de ser expuesto. Google, incluso, lo sabe bien desde el mismo momento en que pretende desarrollar una máquina que supera dicho Test. ¿Qué objetivo puede querer conseguir Google con esto?, ¿Conquistar el mundo?, según Patrick, conquistar el mundo es una obcecación exclusivamente Estadounidense … pero… Google no, el mundo ya lo tienen, ahora mismo están con la Luna. El objetivo real puede ser más sencillo que todo eso, por ejemplo, intentar sentar en la silla del interrogador a la “máquina inteligente” para detectar si un correo electrónico ha sido enviado por un ser humano o por otra “máquina menos inteligente” que solo sabe escribir SPAM.

BUG 5930745: Nada de Oracle funciona.

Monday, April 28th, 2008

De acuerdo, todo parece funcionar correctamente, ya has terminado tu aplicación de ADF (con un gran esfuerzo) y se ejecuta correctamente en tu servidor local. Ahora intentas subirla al servidor y… “java.lang.NoSuchMethod exception” … “error 500″… ¿Se puede saber que clase de información es esa para depurar un error? ¿Qué se supone que hay que hacer ahora?

Codigo fuente de Windows Vista robado

Tuesday, April 8th, 2008

Se ve que han vuelto a filtrar trozos de código fuente de Microsoft. Aquí esta la función principal de Windows Vista.

Windows vista source code

¡Feliz cumpleposting!

Wednesday, April 2nd, 2008

Cumpleposting feliiz!!

Cumpleposting feliiz!!

Acabo de ver que hoy he cumplido 100 posts y dentro de poco (seguramente gracias al titiritero) 450 comentarios. Este blog se está haciendo mayor.

There are currently 100 posts and 449 comments, contained within 17 categories and 4 tags.

Autobackup de la base de datos

Friday, March 28th, 2008

Estos días en los que el servidor ha estado caído he estado muy tentado de coger y traspasarlo todo a otro servidor aunque sea temporalmente. Sin embargo me he encontrado con el problema de no tener acceso a la base de datos actualizada, con lo que no podía hacer nada. Hubiera deseado tener a mano aunque sea una versión de la base de datos del mismo día o del día anterior a la caída.

La cuestión es que he dado con una solución bastante buena y sencilla, enviarme por correo electrónico la base de datos una o dos veces al día (no en todos los servidores es posible hacer esto).

Para esto simplemente hay que crearse un script en el servidor que haga lo siguiente.

#!/bin/sh

mysqldump -u user -ppassword -h host.domain database | gzip > ~/database.sql.gz

echo “This is an autogenerated mail with the backup” | mutt -s “[databasebak]” -a ~/database.sql.gz miemailparabackup@servidor.com

Es necesario disponer del comando mutt que se encarga de enviar un correo electronico con formato MIME capaz de codificar un fichero binario adjunto.

A este script podemos llamarlo “~/scripts/dbbak.sh” con lo que solo nos quedaría editarnos un fichero “crontab.txt” parecido a:

SHELL=/bin/bash

#h m dom mon dow command

35 0,12 * * * ~/scripts/dbback.sh

Y por último instalamos el fichero crontab recien creado con

crontab crontab.txt

Espero que os sea de ayuda.

The program ‘java’ can be found in the following packages:

Sunday, March 9th, 2008

The program ‘java’ can be found in the following packages:

* cacao

* j2re1.4

* kaffe

* jamvm

* java-gcj-compat

* gij-4.1

* gij-4.2

* sablevm

Try: sudo apt-get install <selected package>

bash: java: command not found

Y eso que lo acababa de instalar. No hay que olvidarse de hacer un

sudo update-alternatives –config java

sudo update-alternatives –config javac

para arreglar el problema :(.

JBO-29000: Exception [TOPLINK-4002] - Luchando contra JDeveloper y ADF

Monday, March 3rd, 2008

Definitivamente en Oracle necesitan contratar a algún que otro incompetente. El motivo esta bien claro, al ser todos tan eficaces y preparados, cuando se encuentran con un mensaje de error semejante siempre sabrían como resolverlo inmediatamente.Este error ocurria siempre que intentabamos insertar un usuario en la tabla USERS a traves de un formulario. Depurando paso por paso hemos descubierto que todo funcionaba correctamente hasta llegar a la llamada a uow.commit(); donde se lanza la excepción.

Hemos seguido todos los pasos (incluso varias veces) del tutorial para ADF que Oracle proporciona intentando adaptar todos los pasos a nuestra aplicación.

Dejando nuestro código en la clase que hace de PublicFacadeBean de la siguiente manera:

public Users createUser(Long userID, String name,String password, String email, String perm){
UnitOfWork uow = getSessionFactory().acquireUnitOfWork();

Users newInstance = (Users)uow.newInstance(Users.class);

newInstance.setId(userID);
newInstance.setName(name);
newInstance.setEmail(email);
newInstance.setPassword(password);
newInstance.setPerm(perm);
newInstance.setAtempts(0);

uow.commit();

return newInstance;
}

Tras probar un montón de alternativas y buscar información por todos lados (solo hemos descubierto que esta excepción se lanza siempre sea cual sea el problema, así que no nos vale investigar), al final nos iluminamos con la idea feliz de usar la técnica del avestruz, consistente en meter el “commit” en un bloque “try” (meter la cabeza debajo de la tierra y hacer como si no pasara nada).

try{
uow.commit();
}
catch (Exception e){

}

No dabamos crédito cuando descubrimos que con esto todo funciona bien, pero digo yo que podrían dar un poco más de detalle en los mensajes de error.

Recompilando el kernel (Ubuntu Gutsy)

Tuesday, December 11th, 2007

A pesar de lo que mucha gente cree, recompilar el kernel hoy en día no es excesivamente complicado. Además de esto en ciertas ocasiones puede ser necesario, por ejemplo, para poder instalar un módulo que necesitamos y que no viene incluido en el kernel (véase artículo relacionado).

Bueno, comenzamos, como siempre, instalando todos los paquetes necesarios para la compilación del kernel.

sudo apt-get install linux-kernel-devel linux-source build-essential pkg-config ncurses-dev qt3-apps-dev qt3-assistant qt3-designer qt3-dev-tools qt3-doc qt3-qtconfig

acto seguido descomprimimos el kernel en el directorio /usr/src

cd /usr/src
sudo tar xjf linux-source-2.6.22.tar.bz2

Y ahora tenemos que configurarlo (esto lo vamos a hacer de una forma realmente sencilla) : tecleamos

cd linux-source-2.6.22
make xconfig

y nos aparecerá un menú parecido a:

qconf

Abrimos (File>load) el fichero de configuración que se encuentra en /boot/config-2.6.22-14-generic y acto seguido lo guardamos como “.config

a continuación ejecutamos en este orden.

sudo su
make ; make modules ; make modules_install ; exit

estos tres pasos suelen tomarse bastante tiempo aunque no necesitan ninguna atención, a no ser que algo haya ido mal.

Una vez terminado, copiamos el kernel recien compilado al directorio /boot

sudo cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.22

creamos su correspondiente fichero initrd

sudo mkdir /lib/firmware/2.6.22.9
sudo mkinitramfs -o /boot/initrd.img-2.6.22 2.6.22.9

Y por último sólo nos queda añadir en el fichero de configuración del grub el nuevo kernel.

sudo gedit /boot/grub/menu.lst

Nos vamos a la linea donde aparece por primera vez

title Ubuntu 7.10, kernel 2.6.22-14-generic
root (hd0,?)
kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=???????-????-????-????-?????????????? ro quiet splash
initrd /boot/initrd.img-2.6.22-14-generic
quiet

y añadimos justo antes:

title Ubuntu 7.10, kernel 2.6.22
root (hd0,?)
kernel /boot/vmlinuz-2.6.22 root=UUID=???????-????-????-????-?????????????? ro quiet splash
initrd /boot/initrd.img-2.6.22
quiet

(Notar que los caracteres marcados como ? son diferentes dependiendo de la instalación de cada uno, así que hay que copiar y pegarlo sin modificarlos)

Una vez finalizado todo esto ya podemos reiniciar el ordenador con el kernel nuevo. Recordar que ahora probablemente necesitemos recompilar para el nuevo kernel todos los módulos que teníamos antes.

Windows se cuelga tras 49.7 dias

Monday, November 26th, 2007

Al parecer debido a un error de temporización en un algoritmo de la biblioteca Vtdapi.vxd cualquier versión de Microsoft Windows se cuelga irremediablemente tras 49,7 días. Afortunadamente en la web de Microsoft ya se pueden encontrar los parches para este problema para las versiones de Windows 95 y 98.

[Atención el chiste viene ahora]

49.7 días???!! Pero cómo???!!
Yo nunca he aguantado tanto sin que se me cuelgue!!
Quién descubrió el fallo?
Alguien que intentaba batir un record Guinness?
Ohhh, por dioss pero que no cunda el pánico, ehh?? que ya tenemos los parches para Windows 95 y 98, no preocuparse.
Y…. cómo es que no se han preocupado en sacar una versión del parche para Vista?
Que va, que va, nadie que yo conozca ha conseguido aguantar más de 49,7 días con el Windows Vista instalado, todos formatean el disco duro e instalan Ubuntu (o hasta los más cabezones se pelean durante varios días con los drivers del Serial ATA para instalar XP)

Firefox se cuelga en Ubuntu Gutsy

Monday, November 19th, 2007

Al parecer, debido a un bug en la versión que viene por defecto de Mozilla Firefox en Ubuntu Gutsy Gibbon, al tener instalada la barra google, el proceso firefox-bin se queda bloqueado en un bucle consumiendo el 100% de cpu. Esto suele ocurrir normalmente al intentar acceder a enlaces arbitrarios o al abrir una nueva ventana del explorador. El problema remite al deshabilitar la barra google o al instalar la versión oficial de Mozilla Firefox. No obstante podría no ser recomendable desinstalar la versión de Firefox de Ubuntu ya que se podrían romper algunas dependencias entre paquetes de Gnome.

Una solución podría ser utilizar el script de Ubuntuzilla para instalar la versión oficial de manera automática.