Muralla de macetas de insitu

Maceteros de pared de insitu en amarillo

Hoy vamos con otra idea de decoración que me ha gustado. Esta vez es una idea de la empresa Insitu en la que nos proporciona una estructura en forma de malla para poner en una pared y colocar nuestras macetas ahí. Lo que más me gusta es la simetría que transmite. No se si con maceteros de diferentes colores o con plantas distintas en cada uno, quedaría tan bien como podéis ver en la imagen.

Se vende solo la estructura (los maceteros no están incluidos y tendremos que comprarlos por separado) y esta disponible en dos colores: blanco y negro. También esta disponible en varios tamaños para que siempre tengamos uno que se adapte al uso que le queramos dar. Lo único malo es el precio, que me ha parecido demasiado caro para que sea solo la estructura (175$ el mas pequeño de 5 macetas ...). Si aun así queréis comprarlo podéis hacerlo en la tienda de su web. Siempre nos quedará la opción de intentarlo hacer nosotros.

Maceteros de pared de Insitu en blanco

temas: 

Equilibrium: Estantería de libros asimétrica

Equilibrium

Por internet he encontrado esta estantería asimétrica tan original, llamada Equilibrium y diseñada por Malagana. Aunque parece original, en la parte práctica no se yo si aguantará mucho peso de la forma en que está distribuida. Si os interesa, por lo que he leído se puede comprar directamente a los diseñadores contactando a través de su web (aunque no pone precio). De todas maneras creo que si eres un poco manitas igual se podría hacer una parecida.

temas: 

Usar el dwr remótamente

usar dwr remotamente

Usar el dwr remótamente

Direct Web Remoting (dwr) es una librería que proporciona una API que permite realizar llamadas remotas a objetos Java del servidor desde código JavaScript cliente a través de Ajax.

La forma más comun es tener la parte del servidor y del cliente en la misma máquina, pero puede darse el caso en el que queramos tener la página cliente en otra máquina y acceder al drw remótamente. Esto no funciona por defecto y para que funcione, tendremos que hacer lo siguiente.

En la parte javascript tendremos que ejecutar estas dos órdenes antes de llamar a cualquier función de cualquier clase java publicada con el dwr (observar que la segunda orden tendremos que ejecutarla por cada clase java que utilicemos):

dwr.engine.setRpcType(dwr.engine.ScriptTag);
MyClass._path = 'http://MYDOMAIN.COM/dwr';

Y en el fichero web.xml del servlet DwrServlet hay que poner a true los parámetros allowScriptTagRemoting y allowGetForSafariButMakeForgeryEasier:

<init-param>
    <param-name>allowScriptTagRemoting</param-name>
    <param-value>true</param-value>
</init-param>
<init-param>
    <param-name>allowGetForSafariButMakeForgeryEasier</param-name>
    <param-value>true</param-value>
</init-param>

Un ejemplo sencillo de la parte cliente de una clase java de nombre MyClass con una función de nombre myFunction publicada en un dwr que esta en la url http://DOMAIN1.COM/dwr sería el siguiente:

<html>
<head>
    <script type='text/javascript' src='http://MYDOMAIN1.COM/dwr/interface/MyClass.js'></script>
    <script type='text/javascript' src='http://MYDOMAIN1.COM/dwr/engine.js'></script>
</head>
<body>
    <script type="text/javascript">
        dwr.engine.setRpcType(dwr.engine.ScriptTag);
        MyClass._path = 'http://MYDOMAIN1.COM/dwr';
    
        MyClass.myFunction('parameter1',alert);
    </script>
</body>
</html>

Errores

Error 404 Not Found

Cuando se hace la llamada a una función de una clase java que esta publicada con el dwr (por ejemplo para una clase de nombre MyClass y una función myFunctión se llamaría a /dwr/call/plaincall/MyClass.myFunction.dwr), da un error http 404 Not Found.

Solución

El problema está en que cuando el dwr llama a la función de la clase, la llamada ajax la ejecuta como si el dwr estuviera en el mismo dominio que la aplicación cliente. Y como el dwr no esta en esa máquina, da ese error. Para que la llamada se haga con el dominio en el que esta el dwr (por ejemplo http://MYDOMAIN1.COM/dwr), tendremos que añadir en la aplicación cliente el siguiente código javascript antés de llamar a la función que queramos:

MyClass._path = 'http://MYDOMAIN.COM/dwr';

Error No data received from server

La petición ajax que se llama al ejecutar una función de una clase java publicada en el dwr, devuelve el estado http de exito 200. Pero no devuelve nada.

http://MYDOMAIN1.COM/dwr/call/plaincall/MyClass.myFunction.dwr No data received from server

Solución

El problema esta en que no hemos ejecutado el siguiente código javacript en la parte del cliente. Por lo que para solucionarlo tendremos que añadirlo a la parte cliente:

dwr.engine.setRpcType(dwr.engine.ScriptTag);

Error allowScriptTagRemoting is false

Cuando se hace la llamada a una función de una clase java que esta publicada con el dwr, nos aparece un error javascript que dice lo siguiente:

uncaught exception: allowScriptTagRemoting is false.

y en el log del servidor donde esta el dwr aparece la siguiente línea:

15:06:38,824 DEBUG DebuggingPrintWriter:43 - out(18): throw 'allowScriptTagRemoting is false.';

Solución

Tenemos que poner a true el parámetro allowScriptTagRemoting del servlet DwrServlet. Para ello tendremos que editar el fichero web.xml y añadir el siguiente parámetro para ese servlet:

<init-param>
    <param-name>allowScriptTagRemoting</param-name>
    <param-value>true</param-value>
</init-param>

Error Get is disallowed

Al llamar a una función de una clase java publicada en el dwr, nos da el siguiente error javascript:

engine.js (línea 1310) Error: java.lang.SecurityException, GET Disalowed

y en el log del servlet aparece el siguiente error:

15:16:34,238 ERROR Batch:75 - GET is disallowed because it makes request forgery easier. See http://getahead.org/dwr/security/allowGetForSafariButMakeForgeryEasier for more details.

Solución

Tenemos que poner a true el parámetro allowGetForSafariButMakeForgeryEasier del servlet DwrServlet. Para ello tendremos que editar el fichero web.xml y añadir el siguiente parámetro para el servlet indicado:

<init-param>
           <param-name>allowGetForSafariButMakeForgeryEasier</param-name>
           <param-value>true</param-value>
</init-param>
temas: 

Migración de una instalación de mldonkey

Migración de una instalación de mldonkey

En este artículo os voy a explicar como podéis migrar la configuración de una instalación del servidor de mldonkey de una máquina a otra diferente (ya sea por un cambio de máquina, por formatear, etc) y así no perder la configuración para que los demás usuarios nos sigan identificando como el mismo con los puntos conseguidos.

Lo primero de todo es parar el servicio por si se esta ejecutando:

>> sudo /etc/init.d/mldonkey-server stop

Una vez parado, vamos ha hacer una copia de seguridad de los archivos que vamos a sustituir:

>> sudo tar -zcvf mldonkey.tar.gz /var/lib/mldonkey

Ahora podemos reemplazar los ficheros actuales por los de la otra instalación que estamos migrando. Como ejemplo considero que tengo la carpeta de la antigua instalación del servidor mldonkey en /mnt/var/lib/mldonkey. Lo que hay que hacer es: borrar la configuración nueva, copiar la antigua configuración y poner al usuario mldonkey de propietario de estos archivos:

>> cd /var/lib/mldonkey
>> sudo rm -R .
>> sudo cp -R /mnt/var/lib/mldonkey/* .
>> sudo chown mldonkey:mldonkey -R .

Una vez que tenemos la antigua configuración, tenemos que actualizar un parámetro de ella (el uid del usuario mldonkey). Para saber el uid del usuario mldonkey en la máquina en la que esta instalado el servidor, debemos ejecutar el siguiente comando (como podéis ver el uid del usuario mldonkey es 115):

>> more /etc/passwd | grep mldonkey
...
mldonkey:x:115:123::/var/lib/mldonkey:/bin/false
...

Una vez tenemos el uid del usuario mldonkey, tendremos que ir al archivo /var/lib/mldonkey/downloads.ini y buscar la línea en la que se indica este parámetro y le ponemos el actual:

run_as_useruid = 132

Ya tenemos el servidor mldonkey listo y lo podemos volver a arrancar:

>> sudo /etc/init.d/mldonkey-server start

Optimizar Firefox

Optimizar Firefox

Introducción

Firefox me suele consumir bastantes recursos cuando lo uso (suelo tener bastantes pestañas abiertas a la vez). Pero por suerte podemos hacer varias cosas para optimizar este programa. A continuación veremos cuales son.

Optimizaciones

Compactar las bases de datos SQLite de Firefox 3

Firefox almacena los marcadores, páginas visitadas y otras cosas en bases de datos SQLite (extensión .sqlite). Pero no suele compactar estos ficheros y con el uso, van creciendo de tamaño. Compactando estas bases de datos podrás ganar algo de velocidad y liberar un poco del tan preciado espacio del disco duro. Para compactar la base de datos tenemos que tener instalado SQLite y el firefox cerrado.

Si no tenemos instalado SQLite podemos hacerlo instalando el paquete sqlite3 con nuestro gestor de paquetes gráfico preferido o ejecutando el siguiente comando:

>> sudo apt-get install sqlite3

Una vez tenemos todo lo necesario, procederemos a ejecutar este comando (fijaros que firefox tiene que que tener los profiles en la carpeta .mozilla/firefox dentro de vuestra carpeta home):

>> for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done

Una vez acabado el comando, ya tenemos las bases de datos de Firefox compactadas.

Activar el pipelining

El Pipelining consiste básicamente en configurar Firefox para que cuando visitamos una página web en vez de pedir uno por uno los recursos que tengan la misma url (imágenes, archivos, etc), pida varios a la vez. Al pedir varios recursos en paralelo teóricamente se incrementa la velocidad de descarga. Para activar esto en Firefox tenemos que modificar una variable de la configuración de Firefox. Para ello tendremos que escribir en la barra de direcciones lo siguiente: about:config, entonces nos informará de que es una zona peligrosa y nos preguntará si estamos seguros y le damos a ¡Tendré cuidado, lo prometo!. Ahora en el campo Filtro escribimos pipelining, entre los resultados que nos saldrán tendremos que dejar los siguientes parámetros con el valor que os indico:

  • network.http.pipelining: true
  • network.http.proxy.pipelining: true
  • network.http.pipelining.maxrequests: (aquí poner un valor entre 20 y 30)

Una vez que hemos puesto estos valores, cerramos la pestaña y ya esta.

Deshabilitar el pre-fetch

Firefox descarga páginas o imágenes de enlaces que crees que visitaras para así navegar mas rápido (ha esto se le llama pre-fetch). Esto esta bien para que parezca que la navegación es más rápida pero lo malo que consume recursos del sistema. Así que lo mejor es deshabilitarlo. Para ello tendremos que modificar una variable de la configuración de Firefox. Para ello tendremos que escribir en la barra de direcciones lo siguiente: about:config, entonces nos informará de que es una zona peligrosa y nos preguntará si estamos seguros y le damos a ¡Tendré cuidado, lo prometo!. Una vez nos haya mostrado todas las variables, tendremos que buscar la siguiente variable y ponerle de valor false:

  • network.prefetch-next: false

Limitar el uso de la memoria RAM

Firefox consume bastante memoria ram y con un uso prolongado puede alcanzar cifras increíbles (a mi me ha llegado a consumir mas de 1 GB). Lo mejor es limitarle la cantidad máxima de memoria que firefox pueda usar. Para ello tendremos que escribir en la barra de direcciones lo siguiente: about:config, entonces nos informará de que es una zona peligrosa y nos preguntará si estamos seguros y le damos a ¡Tendré cuidado, lo prometo!. Una vez nos haya mostrado todas las variables, tendremos que buscar la siguiente variable y de valor ponerle el que queramos (dependiendo de cuanta memorias ram tengamos en nuestro ordenador)

  • browser.cache.disk.capacity:

Evitar el hotlinking

Evitar el hotlinking

Vamos a ver como evitar el hotlinking. El hotlinking es la acción de usar una imagen de una página web en otra directamente (con la url del sitio original).

¿Cual es el problema del hotlinking? El problema esta en que esa imagen aunque la usen en otra web se esta descargando desde tu servidor y se esta consumiendo tu transferencia mensual de datos (Cuando contratas un host, tienes asignado una cantidad de MB que se pueden descargar de tu web cada mes y si los superan cortan el acceso a tu web). Por lo tanto no nos interesa que usen nuestras imágenes en otras webs.

Para evitar esto podemos indicarle al servidor web que no de las imágenes (o que de otra que le especifiquemos) si no es solicitada cuando estén mirando una de las webs que le indiquemos.

Pero aquí surge otro problema: si solo permitimos que nuestros sitios web accedan a nuestras imagenes, entonces las personas que usan un lector de rss online (tipo google reader, netvibes, etc) no se les mostrarán las imágenes de tus artículos. Por lo que tendremos que añadir también las webs de los principales lectores de rss online.

Para ello tendremos que poner en el archivo .htaccess las siguientes líneas (acordaros de sustituir el dominio de mi blog por los vuestros):

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^http?://(www.)?add.my.yahoo.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?bloglines.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feedlounge.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feedness.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feeds2.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feeds.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?bing.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?google.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?google/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?imagesgoogle/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?live.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?netvibes.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?newsalloy.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?newsgator.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?yahoo.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?yahoo.es/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http?://(www.)?blog.intropedro.es/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png|jpg)$ http://img24.imageshack.us/img24/4590/hotlinking.gif [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Con la orden RewriteRule indicamos las extensiones de las imágenes que no queremos servir al exterior y también la imagen que serviremos cuando nos pidan una imagen desde otra web. Aunque la imagen que dará el servidor web en vez de la pedida puede estar en nuestro servidor, os recomiendo ponerla en otro lado para no consumir nuestro ancho de banda.

Además os pongo unos cuantos ejemplos de imágenes hotlinking para que las utiliceis.

Ejemplo de hotlonking

Ejemplo de hotlinking

Ejemplo de hotlinking

Ejemplo de hotlinking

Wifi usb 300 Mbps con antena externa de 5dBi

Wifi usb 300

Introducción

Como algunos ya sabréis, me he comprado un nuevo wifi usb compatible con el protocolo 802.11n (300 Mbps) y con posibilidad de ponerle una antena externa para coger una mejor señal (ya que con el conceptronic que tenía antes, últimamente se me desconectaba cada dos por tres). También mire que fuera compatible con Linux. Y después de probarlo, la verdad es que estoy muy satisfecho con él. Además como se le puede cambiar la antena, si un día necesito coger señales wifi más débiles, siempre me puedo comprar una antena mejor que esta.

Me lo compre en ebay por unos 9 €. No tiene marca, pero si lo queréis aquí tenéis una lista con el mismo artículo.

Las principales características de este usb wifi son las siguientes:

  • Soporta los estándares IEEE 802.11n, 802.11g y IEEE 802.11b
  • USB 2.0
  • 1x2 MIMO technology
  • Antena externa de alta potencia de 5dBi
  • Chipset : RTL8191SU
  • Brand New
  • No soporta la banda de frecuencia de 5GHz
  • Métodos de modulación: BPSK/ QPSK/ 16-QAM/ 64-QAM/ DBPSK/ DQPSK/ CCK
  • Poder de transmisión:
    • IEEE 802.11n: 16 dBm (Max)
    • IEEE 802.11g: 19 dBm (Max)
    • IEEE 802.11b: 22 dBm (Max)
  • Modos de seguridad: 64/128-bit WEP, TKIP, AES, WPA and WPA2
  • Banda de frecuencia: 2.4GHz ISM Band*
  • Ratios de transferencia:
    • IEEE 802.11n 300Mbps (Max)
    • IEEE 802.11g 54Mbps (Max)
    • IEEE 802.11b 11Mbps (Max)
  • Ancho de banda:
    • 40MHz for 300Mbps
    • 20MHz for 150Mbps

Instalación

Conectándolo directamente a mi Ubuntu Lucid 10.04 no me ha funcionado. Entonces he intentado instalar el driver del chipset RTL8191SU de Realtek. Para bajar el driver, solo hay que ir a la web de Realtek y en la sección de descargas bajar el correspondiente al chipset de nuestro usb. Una vez lo hemos bajado tenemos que hacer lo siguiente:

>> unzip RTL8191SU_usb_linux_v2.6.0006.20100625.zip
>> cd rtl8712_8188_8191_8192SU_usb_linux_v2.6.0006.20100625/driver
>> tar -zxvf rtl8712_8188_8191_8192SU_usb_linux_v2.6.6.0.20100625.tar.gz
>> cd rtl8712_8188_8191_8192SU_usb_linux_v2.6.0006.20100625
>> make

Aunque no daba ningún error al compilarlo, me aparecían muchos warning como este:

warning: cast from pointer to integer of different size

Este error según he mirado por internet, suele ser provocado porque el código fuente no es compatible con la arquitectura de tu sistema operativo (el código fuente del driver era para 32 bits y yo tengo un Ubuntu de 64). Luego vi que en los requisitos del driver (que estaban en un power point que venía en el zip del driver) ponía eso.

Entonces mire que errores ponía al enchufar el usb sin instalar nada y si que se cargaba un módulo y este daba un error:

>> dmesg
[  195.680081] usb 1-4: new high speed USB device using ehci_hcd and address 9
[  195.833672] usb 1-4: configuration #1 chosen from 1 choice
[  195.834915] ==>ep_num:4, in_ep_num:1, out_ep_num:3
[  195.834922] ==>RtInPipes:3 
[  195.834927] ==>RtOutPipes:4  6  13 
[  195.834935] ==>txqueue_to_outpipemap for BK, BE, VI, VO, HCCA, TXCMD, MGNT, HIGH, BEACON:
[  195.834939] 1  1  0  0  2  2  2  2  2 
[  196.139432] Dot11d_Init()
[  196.155693] udev: renamed network interface wlan0 to wlan2
[  196.174397] rtl819xU: --->FirmwareDownload92S()
[  196.174402]
[  196.174413] usb 1-4: firmware: requesting RTL8192SU/rtl8192sfw.bin
[  196.178980] rtl819xU:request firmware fail!
[  196.178984]
[  196.179288] rtl819xU:Firmware Download Fail!!a
[  196.179290]
[  196.195633] rtl819xU: --->FirmwareDownload92S()
[  196.195637]
[  196.195652] usb 1-4: firmware: requesting RTL8192SU/rtl8192sfw.bin
[  196.203679] rtl819xU:request firmware fail!
[  196.203683]
[  196.204052] rtl819xU:Firmware Download Fail!!a
[  196.204055]
[  196.204060] rtl819xU:ERR!!! _rtl8192_up(): initialization is failed!
[  196.204063]
[  196.225748] rtl819xU: --->FirmwareDownload92S()
[  196.225756]
[  196.225768] usb 1-4: firmware: requesting RTL8192SU/rtl8192sfw.bin
[  196.243640] rtl819xU:request firmware fail!
[  196.243647]
[  196.245835] rtl819xU:Firmware Download Fail!!a
[  196.245840]
[  196.259225] rtl819xU: --->FirmwareDownload92S()
[  196.259232]
[  196.259246] usb 1-4: firmware: requesting RTL8192SU/rtl8192sfw.bin
[  196.286315] rtl819xU:request firmware fail!
[  196.286319]
[  196.287270] rtl819xU:Firmware Download Fail!!a
[  196.287273]
[  196.287281] rtl819xU:ERR!!! _rtl8192_up(): initialization is failed!

Como podemos ver, el módulo rtl819xU esta buscando el archivo /lib/firmware/RTL8192SU/rtl8192sfw.bin y no lo encuentra. Así que tendremos que ponerlo a mano. Para ello, en la carpeta /lib/firmware tenemos que crear una carpeta de nombre RTL8192SU y poner el archivo rtl8192sfw.bin que lo podemos bajar de aquí.

>> cd /lib/firmware
>> sudo mkdir RTL8192SU
>> cd RTL8192SU
>> sudo wget http://svn.debian.org/wsvn/kernel/dists/trunk/firmware-nonfree/realtek/RTL8192SU/rtl8192sfw.bin

Una vez hemos hecho lo anterior, volvemos a conectar el usb y ya nos funcionará correctamente.

>> dmesg
[  233.370036] usb 1-4: new high speed USB device using ehci_hcd and address 10
[  233.523575] usb 1-4: configuration #1 chosen from 1 choice
[  233.524816] ==>ep_num:4, in_ep_num:1, out_ep_num:3
[  233.524821] ==>RtInPipes:3 
[  233.524826] ==>RtOutPipes:4  6  13 
[  233.524833] ==>txqueue_to_outpipemap for BK, BE, VI, VO, HCCA, TXCMD, MGNT, HIGH, BEACON:
[  233.524837] 1  1  0  0  2  2  2  2  2 
[  233.834091] Dot11d_Init()
[  233.850132] udev: renamed network interface wlan0 to wlan2
[  233.869694] rtl819xU: --->FirmwareDownload92S()
[  233.869703]
[  233.869718] usb 1-4: firmware: requesting RTL8192SU/rtl8192sfw.bin
[  233.875771] rtl819xU:signature:8192, version:902b, size:30, imemsize:7408, sram size:9688
[  233.875775]
[  233.875887] rtl819xU:--->FirmwareDownloadCode()
[  233.875889]
[  233.875982] rtl819xU:--->FirmwareCheckReady(): LoadStaus(1),
[  233.877709] rtl819xU:<---FirmwareCheckReady(): LoadFWStatus(1), rtStatus(0)
[  233.877714]
[  233.877722] rtl819xU:--->FirmwareDownloadCode()
[  233.877724]
[  233.877864] rtl819xU:--->FirmwareCheckReady(): LoadStaus(2),
[  233.880317] rtl819xU:-->FirmwareEnableCPU()
[  233.880326]
[  233.882682] rtl819xU:IMEM Ready after CPU has refilled.
[  233.882689]
[  233.882695] rtl819xU:<--FirmwareEnableCPU(): rtStatus(0x0)
[  233.882698]
[  233.882703] rtl819xU:<---FirmwareCheckReady(): LoadFWStatus(2), rtStatus(0)
[  233.882705]
[  233.882711] rtl819xU:--->FirmwareDownloadCode()
[  233.882713]
[  233.882726] rtl819xU:--->FirmwareCheckReady(): LoadStaus(3),
[  233.883052] rtl819xU:DMEM code download success, CPUStatus(0x3f)
[  233.883054]
[  233.884426] rtl819xU:Polling Load Firmware ready, CPUStatus(ff)
[  233.884428]
[  233.885674] rtl819xU:FirmwareCheckReady(): Current RCR settings(0x157e20e)
[  233.885676]
[  233.885929] rtl819xU:<---FirmwareCheckReady(): LoadFWStatus(3), rtStatus(0)
[  233.885932]
[  233.885935] rtl819xU:Firmware Download Success!!
[  233.885937]
[  236.714949] ADDRCONF(NETDEV_UP): wlan2: link is not ready
[  257.057024] Linking with INTROWIFI2,channel:10, qos:0, myHT:1, networkHT:0, mode:6
[  257.057048] Linking with INTROWIFI2,channel:10, qos:0, myHT:1, networkHT:0, mode:6
[  257.057203] =====>rtl8192SU_link_change 1
[  257.059179] <=====rtl8192SU_link_change 2
[  257.059190] ===>ieee80211_associate_procedure_wq(), chan:10
[  257.110653] rtl819xU:==>SetBWModeCallback8192SUsbWorkItem()  Switch to 20MHz bandwidth
[  257.110660]
[  257.128254] rtl819xU:<==SetBWModeCallback8192SUsbWorkItem()
[  257.128276] =================>ieee80211_authentication_req():auth->algorithm is 0
[  257.133893] rtl819xU:rtl8192_qos_association_resp: network->flags = 2,0
[  257.133896]
[  257.133920] rtl819xU:qos active process with associate response received
[  257.133922]
[  257.133933] Associated successfully
[  257.133938] Using G rates:108
[  257.133942] Successfully associated, ht not enabled(0, 0)
[  257.133946] =====>rtl8192SU_link_change 1
[  257.137239] =============>ARFR0+rate_index*4:0xfff
[  257.146983] <=====rtl8192SU_link_change 2
[  257.146989] ============>normal associate
[  257.147744] ADDRCONF(NETDEV_CHANGE): wlan2: link becomes ready
[  262.092467] alg name:CCMP
[  262.092498] rtl819xU:EnableHWSecurityConfig8192:, hwsec:1, pairwise_key:4, SECR_value:c
[  262.092501]
[  262.092782] rtl819xU:====>to setKey(), dev:ffff8800544c0000, EntryNo:4, KeyIndex:0, KeyType:4, MacAddr00:1a:2b:19:61:c3
[  262.092786]
[  262.096875] alg name:CCMP
[  262.096888] rtl819xU:====>to setKey(), dev:ffff8800544c0000, EntryNo:1, KeyIndex:1, KeyType:4, MacAddrff:ff:ff:ff:ff:ff

Por si os interesan los datos de este usb:

>> lsusb
...
Bus 001 Device 004: ID 0bda:8172 Realtek Semiconductor Corp.
...

 

Conectar un Apache con un oc4j con mod_jk

Balancear con apache a un oc4j

Introducción

Mod_jk es un módulo de Apache que nos permite conectar el Apache con otros servidores (tomcat, oc4j) a través del protocolo ajp13. Aunque Oc4j tiene un modulo para Apache llamado mod_oc4j, yo no he conseguido que me funcione con un OC4J Standalone y un Apache Genérico (Sin utilizar el que traen alguans versiones de Oc4j). Para balancear contra servidores de oc4j tendremos que seguir los pasoso descritos en la guía de balancear tomcats con apache, pero en vez de hacer los pasos de configurar el tomcat, tendremos que hacer los siguientes.

Configurar el OC4J

Lo primero será configurar el Oc4j para que escuche peticiones por el protocolo ajp13.

Vamos a crear un fichero ajp-web-site.xml en el que le indicaremos que escuche en un puerto con el protocolo ajp13 y las aplicaciones que podrá servir por este protocolo. Un ejemplo de este fichero para que escuche por el puerto 3000 con el protocolo ajp13 y que sirva una aplicación de nombre MiAplicacion con un módulo de nombre MiModulo y en un contexto MiContexto sería el siguiente (podemos poner tantas líneas web-app como módulos queramos que sirva):

<web-site xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/web-site-10_0.xsd" port="3000" protocol="ajp13" display-name="OC4J 10g (10.1.3) Default Web Site" schema-major-version="10" schema-minor-version="0" >
    <default-web-app application="default" name="defaultWebApp" />
    <web-app application="MiAplicacion" name="MiModulo" load-on-startup="true" root="/MiContexto" />
</web-site>

Luego tendremos que ir a la carpeta C:\oc4j\j2ee\home\config y editar el fichero server.xml. En el tendremos que añadir la siguiente línea:

<application-servet ...>
    ...
    <web-site path="./ajp13-web-site.xml" />
    ...
</application-server>

Y por último reiniciamos el servidor.

Configurar el Apache

En nuestro archivo worker.properties tendremos que añadir la definición para el oc4j. Le indicamos el puerto, url y protocolo y lo añadimos a la lista de los workers:

worker.list=...,oracle
... 
worker.oracle.port=3000
worker.oracle.host=localhost
worker.oracle.type=ajp13

Luego tendremos que añadir al fichero de configuración del apache httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) los parámetros del modulo modjk indicandole que aplicaciones queremos balancear al oc4j:

# Cargamos el módulo JK LoadModule jk_module modules/mod_jk.so
# Path to workers.properties
JkWorkersFile "C:/Archivos de programa/Apache Software Foundation/Apache2.2/conf/worker.properties"
# Path to jk logs
JkLogFile "C:/Archivos de programa/Apache Software Foundation/Apache2.2/logs/mod_jk.log"
# Jk log level debug/error/info
JkLogLevel info
# Jk log format
JkLogStampFormat "%a %b %d %H:%M:%S %Y "
# JkOptions for forwarding
#JkOptions +ForwardKeySize +ForwardURICompat -ForwardDiretories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Aplicaciones que estan en el OC4J
JkMount /MIAPLICACION* oracle