Otro poema, del 98. De los que escribí luego de dejar de escribir.
------------------------------------------------
Tome mi disfraz de hormiga, y caminé,
Sólo,
En la fila de las negras voces,
En las voces de las grandes filas,
En las cara de siluetas desteñidas
y en tus labios rotos camine.
Solo para encontrar más negro,
Más cientos de hormigas disfrazadas de colores
Formadas como estrellas en una larga fila negra,
De silencios,
De misterios negros y oscuras cicatrices.
Vi como el silencio se desvanecía,
vi la luz, vi el mar
y vi una sonrisa perdida entre los destellos del viento,
luego la vi desaparecer.
Este manto negro que me cubre...
Este manto negro, piel de hormiga, que me esconde...
Como pesa ya este manto negro…!
Como pesa ya este tiempo eterno,
Como se me impregna por entre los poros esta tinta inmaterial,
que se va secando,
que se va apropiando de mis nuevos huesos negros,
de mi sangre, de mi alma y de mis ojos negros.
A donde me llevará la noche?
En que lugar susurrare ahora tu nombre,
Como poder recordarte si me olvido,
Si me pierdo en este oscuro horizonte?
Acércate más...
Acércate más que no te encuentro,
Acaríciame el rostro para saber que lo tengo,
Grita mi nombre,
No dejes que me olvide,
No dejes que me pierda,
Quítame este manto negro...
Piel de hormiga, hormiga adentro.
Caminar...
Por esta larga fila, caminar.
Por esta oscura línea, caminar.
Tanto tiempo y caminar,
Tanta hormiga y caminar,
Tanta tinta negra que se seca y nos envuelve,
Tan espeso el aire que nos une,
Ahorcándonos en esta tinta negra,
Y nos aprieta, y nos estrecha
y nos va juntando hasta que somos uno,
una sola línea,
mil puntos y una sola línea disfrazada en tinta negra,
y caminar,
Caminar...
carcasco .30.10.1998
jueves, octubre 15, 2009
miércoles, septiembre 16, 2009
Balanceo de Carga para dos websphere application server 6.1 usando mod_proxy_balancer
Hace varios días que vengo trabajando en un problema que me ha quitado el sueño y la tranquilidad.
Hace como mes y medio empece a leer sobre el tema de balanceo de carga desde Apache usando el mod_proxy_balancer.
http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
Desde las guías todo parecía sencillo. Sinceramente no estaba muy claro de las modificaciones que se estaban planteando, pero para variar, empece a probar sin terminar de leer la documentación :p
Hice unas pruebas y asumi que todo estaba funcionando bien. El tema se quedó dormido durante algún tiempo, pero luego tuve que retomarlo desafortunadamente con las fechas ya bastante apretadas.
http://www.howtoforge.com/load_balancing_apache_mod_proxy_balancer
Me pareció excelente que se pudiera tener no solamente el balanceo de carga sino la tolerancia a fallos. De manera que si un server se caía, podía seguir operando con el otro server.
-- la version 1 de mi httpd.conf
Al tener mi servidor balanceando carga entre los 2 nodos, la mitad de los requerimientos va a un server y la otra mitad al otro. Pero... si entro a mi aplicacion y me firmo. Esto se guarda en una variable de sesion. Y balanceando la carga se pierde.... :(
Es decir..
Pinto pantalla de login (Nodo1)
Recibo parametros de login valido y guardo variables de sesion(nodo2)
Reenvio a pantalla de inicio (Nodo1)
El problema es que en el nodo1, nunca guarde variables asi que asume que no esta firmado y vuelve a pedir la clave.
Lei un poco sobre el tema y hablaba del stickysession.
Ahora que ya entendí les cuento que la famosa stickyession es una cookie con un id de session. Que tiene 2 partes. La session y el route.
Cookie
No obstante no lograba que funcionara en mi esquema.
Yo tengo 2 nodos con Websphere Application Server 6.1. Los 2 tienen la aplicacion instalada y funcionando.
Luego de buscar bastante y hacer bastantes pruebas encontré que la cookie de session se envía diferente en websphere que en tomcat. Y que el apache no la entendía.
Cookie
https://issues.apache.org/bugzilla/show_bug.cgi?id=42513
No hay un parque para esto en los releases.
Tuve que recompilar el apache para inlcuir la modificación en el modulo. (esto será un post aparte).
El truco no era la recompilada de apache, el truco era, la recompilada en Windows de apache :S
Bueno... luego de recompilado el apache con la recomendación que dan en el bug. Logre que la cookie tuviera el formato adecuado... pero... aun así no funcionaba!
Cookie
En algunos post, encontre que este valor es llamado route. y se configuraba en los tomcat como jvmrouteid. En websphere no encontraba nada por el estilo.
Un poco de suerte me llevo a una url donde se miraba el debug de una traza en websphere con balanceo de carga y hablaba de un Clone ID ... http://www-01.ibm.com/support/docview.wss?uid=swg27014498&aid=1
Buscando en la documentación encontre como configurarlo y funcionó.
http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//index.jsp?topic=/com.ibm.websphere.zseries.doc/info/zseries/ae/rprs_custom_properties.html
Application servers > server1 > Web container > Custom Properties
Para el nodo uno le puse un cloneid de "nodo1" y al otro "nodo2".
Ahora sí. Mis cookies quedaban de la siguiente forma:
para el nodo1:
para el nodo2:
Con mi apache recompilado y con mis cookies en buen estado procedí a realizar las configuraciones que me hacían falta en el apache.
Primero habilité los módulos necesarios:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Luego algunos parámetros generales de la configuracion:
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
Configuré el balance con mis 2 nodos:
<Proxy balancer://clusterPerfilUno>
BalancerMember http://192.168.15.121:9080 route=nodo1
BalancerMember http://192.168.15.123:9080 route=nodo2
ProxySet lbmethod=byrequests
</Proxy>
donde dice "route=nodo1" es el nombre que haya puesto al cloneid en mi WAS. Luego hago el proxypass en mi aplicacion hacia el balanceo.
La stickysession la hago sobre la cookie que logre setear. Y seteo el reverse para el regreso de las conexiones.
<Location /app>
Order allow,deny
Allow from all
ProxyPass balancer://clusterPerfilUno/app stickysession=JSESSIONID nofailover=On
ProxyPassReverse http://192.168.15.121:9080/app
ProxyPassReverse http://192.168.15.123:9080/app
</Location>
Puse el loglevel en debug para rastrear posibles errores y me sale algo asi:
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //clusterPerfilUno/app
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(280): ICON: proxy: BALANCER: Found value 00006BXDRmMTJiopXVx9UnRFUCR:nodo1 for stickysession JSESSIONID
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(296): proxy: BALANCER: Found route nodo1
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(579): proxy: BALANCER (balancer://clusterPerfilUno) worker (http://192.168.15.121:9080) rewritten to http://192.168.15.121:9080/app
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy.c(993): Running scheme balancer handler (attempt 0)
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_http.c(1920): proxy: HTTP: serving URL http://192.168.15.121:9080/app
Si no tengo buena la cookie recibo el found value (null) for stickysession JSESSIONID.
con esto logre hacer el balanceo de carga usando mod_proxy_balancer con un websphere 6.1 en los nodos.
En los proximos días estaré haciendo pruebas de esto y si encuentro algo mas lo publico.
Espero poder publicar la recompilada del apache sobre windows y también una segunda alternativa que estuve a punto de implementar.
Cabe mencionar que el IHS de IBM es una alternativa que no logre a terminar de evaluar para resolver este problema.
saludos!
Hace como mes y medio empece a leer sobre el tema de balanceo de carga desde Apache usando el mod_proxy_balancer.
http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
Desde las guías todo parecía sencillo. Sinceramente no estaba muy claro de las modificaciones que se estaban planteando, pero para variar, empece a probar sin terminar de leer la documentación :p
Hice unas pruebas y asumi que todo estaba funcionando bien. El tema se quedó dormido durante algún tiempo, pero luego tuve que retomarlo desafortunadamente con las fechas ya bastante apretadas.
http://www.howtoforge.com/load_balancing_apache_mod_proxy_balancer
Me pareció excelente que se pudiera tener no solamente el balanceo de carga sino la tolerancia a fallos. De manera que si un server se caía, podía seguir operando con el otro server.
-- la version 1 de mi httpd.conf
LoadModule proxy_balancer_module modules/mod_proxy_balancer.soHice unas pruebas y asumi que todo estaba funcionando. Pero desafortunamente en ese momento no puse mucha importancia al tema de la sesion.
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /balancer-manager !
ProxyPass / balancer://clusterWAS/ stickysession=BALANCEID nofailover=On
ProxyPassReverse / http://192.168.15.124:9080/
ProxyPassReverse / http://192.168.15.127:9080/
<Proxy balancer://clusterWAS>
BalancerMember http://192.168.15.124:9080 route=http1
BalancerMember http://192.168.15.127:9080 route=http2
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Allow from all
</Location>
Al tener mi servidor balanceando carga entre los 2 nodos, la mitad de los requerimientos va a un server y la otra mitad al otro. Pero... si entro a mi aplicacion y me firmo. Esto se guarda en una variable de sesion. Y balanceando la carga se pierde.... :(
Es decir..
Pinto pantalla de login (Nodo1)
Recibo parametros de login valido y guardo variables de sesion(nodo2)
Reenvio a pantalla de inicio (Nodo1)
El problema es que en el nodo1, nunca guarde variables asi que asume que no esta firmado y vuelve a pedir la clave.
Lei un poco sobre el tema y hablaba del stickysession.
Ahora que ya entendí les cuento que la famosa stickyession es una cookie con un id de session. Que tiene 2 partes. La session y el route.
Cookie
JSESSIONID=00009jrrrDW78YKKVP6BTuDqqFg.-1
Esto lo pude ver gracias al pluggin firebug de firefox. Que en la pestaña de red muestra los paquetes enviados.No obstante no lograba que funcionara en mi esquema.
Yo tengo 2 nodos con Websphere Application Server 6.1. Los 2 tienen la aplicacion instalada y funcionando.
Luego de buscar bastante y hacer bastantes pruebas encontré que la cookie de session se envía diferente en websphere que en tomcat. Y que el apache no la entendía.
Cookie
JSESSIONID=00009jrrrDW78YKKVP6BTuDqqFg:-1
La diferencia es el ":" en lugar del ".".https://issues.apache.org/bugzilla/show_bug.cgi?id=42513
No hay un parque para esto en los releases.
Tuve que recompilar el apache para inlcuir la modificación en el modulo. (esto será un post aparte).
El truco no era la recompilada de apache, el truco era, la recompilada en Windows de apache :S
Bueno... luego de recompilado el apache con la recomendación que dan en el bug. Logre que la cookie tuviera el formato adecuado... pero... aun así no funcionaba!
Cookie
JSESSIONID=00009jrrrDW78YKKVP6BTuDqqFg.-1
Fue luego de esto cuando comprendí que el problema es que el -1 que estaba mostrando debía ser el nombre del nodo.En algunos post, encontre que este valor es llamado route. y se configuraba en los tomcat como jvmrouteid. En websphere no encontraba nada por el estilo.
Un poco de suerte me llevo a una url donde se miraba el debug de una traza en websphere con balanceo de carga y hablaba de un Clone ID ... http://www-01.ibm.com/support/docview.wss?uid=swg27014498&aid=1
Buscando en la documentación encontre como configurarlo y funcionó.
http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//index.jsp?topic=/com.ibm.websphere.zseries.doc/info/zseries/ae/rprs_custom_properties.html
Application servers > server1 > Web container > Custom Properties
Para el nodo uno le puse un cloneid de "nodo1" y al otro "nodo2".
Ahora sí. Mis cookies quedaban de la siguiente forma:
para el nodo1:
JSESSIONID=0000gQCnyQMY94sb5oVXZsLU0lR:nodo1para el nodo2:
JSESSIONID=0000gQCnyQMY94sb5oVXZsLU0lR:nodo2Con mi apache recompilado y con mis cookies en buen estado procedí a realizar las configuraciones que me hacían falta en el apache.
Primero habilité los módulos necesarios:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Luego algunos parámetros generales de la configuracion:
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
Configuré el balance con mis 2 nodos:
<Proxy balancer://clusterPerfilUno>
BalancerMember http://192.168.15.121:9080 route=nodo1
BalancerMember http://192.168.15.123:9080 route=nodo2
ProxySet lbmethod=byrequests
</Proxy>
donde dice "route=nodo1" es el nombre que haya puesto al cloneid en mi WAS. Luego hago el proxypass en mi aplicacion hacia el balanceo.
La stickysession la hago sobre la cookie que logre setear. Y seteo el reverse para el regreso de las conexiones.
<Location /app>
Order allow,deny
Allow from all
ProxyPass balancer://clusterPerfilUno/app stickysession=JSESSIONID nofailover=On
ProxyPassReverse http://192.168.15.121:9080/app
ProxyPassReverse http://192.168.15.123:9080/app
</Location>
Puse el loglevel en debug para rastrear posibles errores y me sale algo asi:
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //clusterPerfilUno/app
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(280): ICON: proxy: BALANCER: Found value 00006BXDRmMTJiopXVx9UnRFUCR:nodo1 for stickysession JSESSIONID
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(296): proxy: BALANCER: Found route nodo1
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_balancer.c(579): proxy: BALANCER (balancer://clusterPerfilUno) worker (http://192.168.15.121:9080) rewritten to http://192.168.15.121:9080/app
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy.c(993): Running scheme balancer handler (attempt 0)
[Wed Sep 16 16:16:57 2009] [debug] mod_proxy_http.c(1920): proxy: HTTP: serving URL http://192.168.15.121:9080/app
Si no tengo buena la cookie recibo el found value (null) for stickysession JSESSIONID.
con esto logre hacer el balanceo de carga usando mod_proxy_balancer con un websphere 6.1 en los nodos.
En los proximos días estaré haciendo pruebas de esto y si encuentro algo mas lo publico.
Espero poder publicar la recompilada del apache sobre windows y también una segunda alternativa que estuve a punto de implementar.
Cabe mencionar que el IHS de IBM es una alternativa que no logre a terminar de evaluar para resolver este problema.
saludos!
Etiquetas:
load balance,
mod_proxy_balancer,
was 6.1,
websphere
miércoles, agosto 26, 2009
ORA-04030: out of process memory when trying to allocate 123404 bytes
Hace algunos días empece a recibir errores extraños en una de nuestras aplicaciones. Ocasionalmente nos reportaban que no podian hacer algo o que no se mostraba cierta información, pero cuando volvían a probar la aplicacion empezaba a funcionar correctamnete.
El problema con este tipo de reportes, es que son bastante difíciles de encontrar y de replicar, por consiguiente se empiezan a volver difíciles de resolver.
La aplicación es una aplicación web en java que consulta una base de datos oracle, ambos servidores estan corriendo sobre windows.
Lo primero que hicimos fue empezar a generar logs adicionales a los bloques de codigo que pensabamos pudieran estar fallando, empezamos a encontrar errores de este tipo desde mis programas:
java.sql.SQLException: ORA-04030: out of process memory when trying to allocate 123404 bytes (QERHJ hash-joi,kllcqas:kllsltba)
y desde el sistema operativo empece a ver errores en el event viewer que decían que no se podía asignar memoria a un thread de la base de datos.
Aclaro que no soy DBA, soy desarrollador. Pero a veces como desarrollador es necesario involucrase en temas de infraestructura para poder identificar los problemas que suceden.
Tenía una maquina con 4gb de ram y cuando miraba la memoria de la maquina no pasaba de los 2gb.
Encontramos 2 temas que estaban causando el problema:
1. El servidor es un windows de 32 bits, y por ser un windows de 32 bits no puedo tener ningún proceso en ejecución con mas de 2gb de uso de memoria.
Se modifico el boot.ini del servidor para que pudieran utilizarse hasta 3 gb de ram en un solo proceso.
http://technet.microsoft.com/es-es/library/bb124810.aspx
2. Revisando los parámetros de la base de datos, encontré que se tenía configurado un SGA de 2GB y un PGA de 1.6GB. Por lo que el tamaño del proceso que estaría ejecutando el oracle llegaría a tener hasta 3.6 GB en memoria. Procedímos a cambiar los parámetros de configuracion de la base de datos para corregir el tema.
Este cambio se hizó en los parámetros, sga_target y pga_aggregate_target.
saludos!
El problema con este tipo de reportes, es que son bastante difíciles de encontrar y de replicar, por consiguiente se empiezan a volver difíciles de resolver.
La aplicación es una aplicación web en java que consulta una base de datos oracle, ambos servidores estan corriendo sobre windows.
Lo primero que hicimos fue empezar a generar logs adicionales a los bloques de codigo que pensabamos pudieran estar fallando, empezamos a encontrar errores de este tipo desde mis programas:
java.sql.SQLException: ORA-04030: out of process memory when trying to allocate 123404 bytes (QERHJ hash-joi,kllcqas:kllsltba)
y desde el sistema operativo empece a ver errores en el event viewer que decían que no se podía asignar memoria a un thread de la base de datos.
Aclaro que no soy DBA, soy desarrollador. Pero a veces como desarrollador es necesario involucrase en temas de infraestructura para poder identificar los problemas que suceden.
Tenía una maquina con 4gb de ram y cuando miraba la memoria de la maquina no pasaba de los 2gb.
Encontramos 2 temas que estaban causando el problema:
1. El servidor es un windows de 32 bits, y por ser un windows de 32 bits no puedo tener ningún proceso en ejecución con mas de 2gb de uso de memoria.
Se modifico el boot.ini del servidor para que pudieran utilizarse hasta 3 gb de ram en un solo proceso.
http://technet.microsoft.com/es-es/library/bb124810.aspx
2. Revisando los parámetros de la base de datos, encontré que se tenía configurado un SGA de 2GB y un PGA de 1.6GB. Por lo que el tamaño del proceso que estaría ejecutando el oracle llegaría a tener hasta 3.6 GB en memoria. Procedímos a cambiar los parámetros de configuracion de la base de datos para corregir el tema.
Este cambio se hizó en los parámetros, sga_target y pga_aggregate_target.
saludos!
sábado, agosto 01, 2009
Silla (poema)
Antes de ser programador (durante mi adolescencia) era más artístico. Escribí algunos poemas que a veces leo y que guardo con mucho cariño. Hoy publicaré un poema o escrito que hice hace ya algún tiempo en una fugaz comunicación entre los 2 lados de mi cerebro.
-------------------------------------------
Silla
Una mañana desperté, y estaba muerto. Escupiendo gusanos por mi ojos, estaba sentado frente al monitor de siempre, con la manos sobre el teclado, con raíces brotando de mis uñas y encarnándose en el decadente espacio de la alfombra.
Muerto.
Con un pequeño resplandor en mi rostro, reflejo del ups aún prendido.
A lo lejos, todavía se escuchan los susurros sobrantes de cientos de reuniones sobre la mesa, de miles de discusiones infructuosas y banales. Hoy nada.
Solo yo,
Muerto.
Desvestido ya; más la ropa está aún planchada sobre mis piernas.
No recuerdo cuando me quedé dormido, no recuerdo cuando olvidé mi nombre, o el tuyo. Solo sé que paso… y que seguía sentado.
Una mancha de café sobre la mesa... y en el amarillo de mis dientes.
¿Cuándo comenzó a endurecerse mi rostro… y cuándo mis manos?
¿Cuándo empezó a confundirse el día y la noche… y cuándo dejo de importarme?
Todo pasa… Y el pasado se convierte en un pequeño resentimiento a la nostalgia, y en seguir allí. Absorbiendo la luz del monitor, dejando que mis ojos se carcoman. Y mi voz, cada ves mas callada y sola.
Sentado.
¿Cuántas veces tendré que morir para olvidar esto?
¿Cuántas veces volver a pensar lo mismo… y seguir tratando?
¿Cuantos silencios?… solo quedo yo, sentado, destruyéndome, viendo como mi deformado cuerpo se esconde tras mi mente… Y la luz del monitor! siempre allí, prendido, con su maldito calor quemándome, pegando mis articulaciones hasta el punto de no poder levantarme.
Sigo aquí sentado en esta silla cada vez mas grande, las ventanas cada vez mas chicas, el frió del aire, la Luz del monitor, las gigantescas paredes, el inalcanzable techo, las enormes sillas y mis delgadas y secas piernas que se enredan en sus patas llegando a la alfombra, arañándola, rasgándola, como queriendo enterrarse. Y los gusanos que se arrastran por mi cuerpo y me comen.
Y me seco, y me muero… Ya mi cuerpo no responde y no se levantarme. Solo seguir sentado. Me quedo quieto… y por momentos duermo. Abro los ojos y es igual, duermo otra vez. Seguir tratando. Solo puedo a veces respirar, las noche cada ves es mas larga, y el amanecer que no termina de llegar. Vuelvo a dormir, despierto. Miro el reloj y sigue igual. La misma luz enfrente, mis manos igual. Cada ves mas oscuro y mas silencio.
Me estoy quedando solo.
Como molestan estos malditos gusanos.. y la luz! No me deja dormir, ni respirar. Y este café que me mata, y el silencio. Y este sueño que no acaba, esta noche interminable. La incomodidad de mi silla,
y volver a dormir…
carcasco - 02 de Octubre del 2,001
-------------------------------------------
Silla
Una mañana desperté, y estaba muerto. Escupiendo gusanos por mi ojos, estaba sentado frente al monitor de siempre, con la manos sobre el teclado, con raíces brotando de mis uñas y encarnándose en el decadente espacio de la alfombra.
Muerto.
Con un pequeño resplandor en mi rostro, reflejo del ups aún prendido.
A lo lejos, todavía se escuchan los susurros sobrantes de cientos de reuniones sobre la mesa, de miles de discusiones infructuosas y banales. Hoy nada.
Solo yo,
Muerto.
Desvestido ya; más la ropa está aún planchada sobre mis piernas.
No recuerdo cuando me quedé dormido, no recuerdo cuando olvidé mi nombre, o el tuyo. Solo sé que paso… y que seguía sentado.
Una mancha de café sobre la mesa... y en el amarillo de mis dientes.
¿Cuándo comenzó a endurecerse mi rostro… y cuándo mis manos?
¿Cuándo empezó a confundirse el día y la noche… y cuándo dejo de importarme?
Todo pasa… Y el pasado se convierte en un pequeño resentimiento a la nostalgia, y en seguir allí. Absorbiendo la luz del monitor, dejando que mis ojos se carcoman. Y mi voz, cada ves mas callada y sola.
Sentado.
¿Cuántas veces tendré que morir para olvidar esto?
¿Cuántas veces volver a pensar lo mismo… y seguir tratando?
¿Cuantos silencios?… solo quedo yo, sentado, destruyéndome, viendo como mi deformado cuerpo se esconde tras mi mente… Y la luz del monitor! siempre allí, prendido, con su maldito calor quemándome, pegando mis articulaciones hasta el punto de no poder levantarme.
Sigo aquí sentado en esta silla cada vez mas grande, las ventanas cada vez mas chicas, el frió del aire, la Luz del monitor, las gigantescas paredes, el inalcanzable techo, las enormes sillas y mis delgadas y secas piernas que se enredan en sus patas llegando a la alfombra, arañándola, rasgándola, como queriendo enterrarse. Y los gusanos que se arrastran por mi cuerpo y me comen.
Y me seco, y me muero… Ya mi cuerpo no responde y no se levantarme. Solo seguir sentado. Me quedo quieto… y por momentos duermo. Abro los ojos y es igual, duermo otra vez. Seguir tratando. Solo puedo a veces respirar, las noche cada ves es mas larga, y el amanecer que no termina de llegar. Vuelvo a dormir, despierto. Miro el reloj y sigue igual. La misma luz enfrente, mis manos igual. Cada ves mas oscuro y mas silencio.
Me estoy quedando solo.
Como molestan estos malditos gusanos.. y la luz! No me deja dormir, ni respirar. Y este café que me mata, y el silencio. Y este sueño que no acaba, esta noche interminable. La incomodidad de mi silla,
y volver a dormir…
carcasco - 02 de Octubre del 2,001
jueves, julio 09, 2009
Programando GreaseMonkey
Soy un adicto a Ikariam, lo acepto. :D
En mi alianza juego con gente de España y Argentina y nos cuesta un poco mantenernos sincronizados para algunas "campañas".
Decidí hacer un pequeño script para que al lado de la fecha pueda poner la fecha de GT y de ARG.
GreaseMonkey es un complemento de Firefox que permite pogramar javascripts adicionales a las paginas que sean actualizados en el browser. Algo asi como... modificar la pagina de cualquier servidor web con funcionalidad javascript programada por nosotros.
El ejemplo que use fue:
El server de Ikariam muestra la hora del servidor en españa. Yo quería modificar la pagina de ikariam para que al lado aparezca la hora de Guatemala y la de Argentina.
Las primeras lineas dan información del script:
// ==UserScript==
// @name HoraArgGua
// @namespace http://carcasco.blogspot.com
// @description Poner varios horarios en el ikariam
// @include http://s6.ikariam.es/index.php*
// ==/UserScript==
Las funciones que puse despues son cosas que solo utilicé de la misma pagina ikariam. Luego mi funcion de cambia de horario.
busco el elemento que quiero cambiar:
servertime = document.getElementById('servertime');
Si existe entonces creo un nuevo elemento:
detalleHoras = document.createElement('span');
Y lo inserto luego de ese. Es decir, agregue un tag de html extra a la pagina:
servertime.parentNode.insertBefore(detalleHoras, servertime.nextSibling);
Adicional hice la funcion que calcula la fecha (puro javascript) y cambio el innerHtml del elemento recién creado.
saludos!
Codigo Completo:
=================
En mi alianza juego con gente de España y Argentina y nos cuesta un poco mantenernos sincronizados para algunas "campañas".
Decidí hacer un pequeño script para que al lado de la fecha pueda poner la fecha de GT y de ARG.
GreaseMonkey es un complemento de Firefox que permite pogramar javascripts adicionales a las paginas que sean actualizados en el browser. Algo asi como... modificar la pagina de cualquier servidor web con funcionalidad javascript programada por nosotros.
El ejemplo que use fue:
El server de Ikariam muestra la hora del servidor en españa. Yo quería modificar la pagina de ikariam para que al lado aparezca la hora de Guatemala y la de Argentina.
Las primeras lineas dan información del script:
// ==UserScript==
// @name HoraArgGua
// @namespace http://carcasco.blogspot.com
// @description Poner varios horarios en el ikariam
// @include http://s6.ikariam.es/index.php*
// ==/UserScript==
Las funciones que puse despues son cosas que solo utilicé de la misma pagina ikariam. Luego mi funcion de cambia de horario.
busco el elemento que quiero cambiar:
servertime = document.getElementById('servertime');
Si existe entonces creo un nuevo elemento:
detalleHoras = document.createElement('span');
Y lo inserto luego de ese. Es decir, agregue un tag de html extra a la pagina:
servertime.parentNode.insertBefore(detalleHoras, servertime.nextSibling);
Adicional hice la funcion que calcula la fecha (puro javascript) y cambio el innerHtml del elemento recién creado.
saludos!
Codigo Completo:
=================
// ==UserScript==
// @name HoraArgGua
// @namespace http://carcasco.blogspot.com
// @description Poner varios horarios en el ikariam
// @include http://s6.ikariam.es/index.php*
// ==/UserScript==
function dezInt(num,size,prefix){prefix=(prefix)?prefix:"0";var minus=(num<0)?"-":"",result=(prefix=="0")?minus:"";num=Math.abs(parseInt(num,10));size-=(""+num).length;for(var i=1;i<=size;i++){result+=""+prefix;}
result+=((prefix!="0")?minus:"")+num;return result;}
function getFormattedDate(timestamp,format){var currTime=new Date();currTime.setTime(timestamp);str=format;str=str.replace('d',dezInt(currTime.getDate(),2));str=str.replace('m',dezInt(currTime.getMonth()+1,2));str=str.replace('Y',currTime.getFullYear());str=str.replace('y',currTime.getFullYear().toString().substr(2,4));str=str.replace('G',currTime.getHours());str=str.replace('H',dezInt(currTime.getHours(),2));str=str.replace('i',dezInt(currTime.getMinutes(),2));str=str.replace('s',dezInt(currTime.getSeconds(),2));return str;}
function cambiarHorario() {
var d = new Date();
d.setMinutes(d.getMinutes()+d.getTimezoneOffset()-6*60);
var strHoraGt = "GT: "+ getFormattedDate(d, 'd/G:i');
d = new Date();
d.setMinutes(d.getMinutes()+d.getTimezoneOffset()-3*60);
var strHoraArg = "AR: "+ getFormattedDate(d, 'd/G:i');
document.getElementById('servertime').nextSibling.innerHTML=" | "+strHoraGt+" | "+strHoraArg;
}
iniciaCambioHorario = function() {
var servertime,detalleHoras;
servertime = document.getElementById('servertime');
if (servertime) {
detalleHoras = document.createElement('span');
detalleHoras.innerHTML="";
servertime.parentNode.insertBefore(detalleHoras, servertime.nextSibling);
}
cambiarHorario();
}
iniciaCambioHorario();
martes, julio 07, 2009
Extraño accidente en Zona 10
viernes, julio 03, 2009
WordPress.com desde Guatemala resuelto
WordPress.com desde Guatemala resuelto
El "fallo" o "bloqueo" que habia mencionado fue corregido.
Que casualidad que 3 empresas distintas tuvieron el msmo fallo al mismo tiempo. :S
saludos!
Suscribirse a:
Entradas (Atom)

