Archivo del Autor: kaleemsagard

Post técnico #3: Carga dinámica de reglas en Drools y el mismatched input

Regularmente, cuando se trabaja con Drools, se cargan las reglas de negocio desde archivos .drl. Pero en ocasiones se necesita cargar las reglas de forma más dinámica o desde otras fuentes de datos, por ejemplo, una variable, una respuesta de un servicio web o un campo en una base de datos. Particularmente, cuando intenté leer las reglas y generar el conocimiento en Drools cargándolas desde un campo en una base de datos, en un entorno JEE6, PostgreSQL 9.1 y Drools 5.2.1, obtenía el siguiente error:

[ERR 101] Line 1:1188 no viable alternative at input ”
[ERR 102] Line 1:1188 mismatched input ‘<eof>’ in rule “Una regla de negocio”
Parser returned a null Package

Al indagar en la regla, la posición 1188 era el final de la misma, es decir, el último caracter. Después de darle muchas vueltas y no encontrar nada sospechoso, ni una pista, el editor de variables en tiempo de depuración de Netbeans me echó una mano: la regla no tenía el caracter de retorno de carro en los finales de linea, de manera que toda la regla era una sola línea. Al poner las respectivas finalizaciones de línea en su lugar dentro de la regla (en el campo dentro de la base de datos que contenía la regla) y leer de nuevo desde la base de datos, la generación del conocimiento fue exitosa y la regla pudo ser ejecutada.


Post técnico #2: PostgreSQL y lectura streams corruptos

Cuando se emplea PostgreSQL -puede ocurrir con otros Sistemas de Gestión de Bases de Datos (DBMS por sus suglas en inglés), no lo sé- en un entorno JEE 6 (lo cual se realiza a través de un driver JDBC suministrado por PostgreSQL aquí), JPA2 (EclipseLink), Glassfish 3.1, puede que durante la ejecución de nuestra aplicación, al intentar cargar información desde nuestra fuente de datos, se obtenga el siguiente problema:

… invalid stream header: BB656430…
Caused by: java.io.StreamCorruptedException: invalid stream header: BB656430
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at org.quartz.impl.jdbcjobstore.PostgreSQLDelegate.getObjectFromBlob
(PostgreSQLDelegate.java:102)
at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectTrigger
(StdJDBCDelegate.java:2135)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveTrigger
(JobStoreSupport.java:1554)
… 58 more

Después de indagar y echarle la culpa a algún stream que pudiera quedar abierto mientras se leía la base de datos con anterioridad o a la serialización defectuosa del objeto que se pretende almacenar como BLOB en alguna tabla, es mejor echarle una mirada a la versión del driver JDBC con el cual se está realizando la conexión al  DBMS; la versión de dicho driver debe ser superior a la del DBMS. Tuve este problema cuando intentaba conectarme a PostgreSQL 9.1 mediante el driver postgresql-8.3-603-jdbc3, cuando en realidad el driver que necesitaba era el postgresql-9.1-901-jdbc4. Para instalar dicho driver en la máquina virtual de Java se debe copiar el .jar del driver JDBC obtenido desde el sitio de descargas de PostgreSQL en el directorio $JVM_PATH/jre/lib/ext/, borrar el existente en tal directorio y reiniciar el equipo. En el url, $JVM_PATH hace referencia al directorio donde se ubica la Máquina Virtual de Java (JVM por sus siglas en inglés) que se está utilizando para compilar y ejecutar la aplicación. En mi caso (Sistema operativo: GNU/Linux Fedora 16, JVM: OpenJDK 1.6.0) el url completo era el siguiente:

/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/

Para saber cuál era este directorio, desde mi IDE Netbeans (que es el que utilicé en ese momento para compilar y correr la aplicación), me dirigí al menú Tools->Java Platforms. Allí se lista la información necesaria sobre la plataforma utilizada por el IDE.

Plataformas de Java en Netbeans IDE

Así que no olviden actualizar sus drivers después de actualizar sus servidores.


Vida y capitalismo son antónimos

La era contemporánea en occidente y buena parte de oriente se caracteriza por ser un tiempo rápido, en el que afán es la medida de nuestros pasos, de todos nuestros movimientos. El mundo moderno nos ofrece una amplia cantidad de opciones aparentemente realizables, nos seduce con la posibilidad de tener una vida llena de logros y recuerdos, en todas las áreas y con todas las personas. Ante esta gama de historias futuras, de retos superados, de estatus social, la ambición no sólo llama a la puerta, sino que irrumpe descaradamente en el habitáculo de los deseos humanos y sirve una cena de mentiras en la mesa: “puedes elegir hacer y obtener todo lo que se te ofrece y en efecto alcanzarlo”.

Esto hace que el humano que nos intro-rodea, ese mismo que vive allí afuera y que tenemos aquí dentro, desarrolle su vida con rapidez en busca de la acumulación de capital antes de que no sea posible apilar más, antes de que la fuerza de trabajo, inalienable por cierto, se agote, o bien antes de que la palabra despido sea escuchada como un escupitajo en la cara, si es que se es empleado, o que la enfermedad nos recueste cortésmente en una cama ajena, si es que se tiene EPS, o que la ignorancia de atreva a estancar la profesión, cerrándole el paso al conocimiento, si es que se estudia. Tal acumulación es necesaria porque el sistema así lo requiere, pues es el fin del capitalismo en el marco individual; dinero es la vía para comerse entero ese “exquisito” plato que se nos ha puesto en frente.

Es allí donde la mentira se devela: la mano negra oculta en el entorno en que se vive conspira efectivamente para que las condiciones laborales, sociales y educativas sean lo más inestables posibles (contratos a término definido, por comisiones, por resultados, educación posible sólo mediante créditos bancarios, relaciones amorosas cortas, sexualidad variable, salud inaccesible si no es prepagada), generadoras de temor en medio de esa tranquilidad tan deseada, mostrando con ello la posibilidad del fracaso a la vuelta de la esquina, justo detrás de las posibilidades infinitas iluminadas bajo la luz de la farola en medio de esta larga noche. Este temor no puede desbocar en otra cosa que en más trabajo (o en el suicidio o en la rebelión), más rápido -más dinero para la élite- pues la posibilidad de no realizar las posibilidades está presente; cuánto más rápido se acumule dinero, más pronto se podrán lograr los sueños. ¡Falso ideario!; si el cuerpo no aguanta ese ritmo, entonces ahí sí la enfermedad y el estancamiento gritan presente en la cotidianidad incesante….y el desempleo no se hace esperar ¿quién quiere contratar a una persona enferma o a un pusilánime? Es esta otra de las ya muchas contradicciones del capitalismo: trabajas duro (rápido y por mucho tiempo) para quedarte sin trabajo (rápido y por mucho tiempo).

En esta lógica queda envuelto el ser humano, se ufana de su gloria bajo el estandarte del vivir rápido: hacer muchas cosas de poca importancia. Y las cosas que no son importantes no se recuerdan; si se vive rápido se es superficial, para cuando te des cuenta no habrás hecho nada memorable, sentirás que la vida no ha durado nada. ¿La alternativa? Vivir lentamente, disfrutar lo que se hace y entonces la vida habrá valido la pena. Vivir lentamente es hacer pocas cosas a las que se les dedica todo el tiempo. Son estos actos los que serán recordados al final de la linea, no son todos los posibles de ese exquisito plato servido por la ambición, sino que son algunos pocos, los reales ¿Pero qué canalla consumista dijo que debemos comprar todo lo que se nos ofrece? Se ofrecen muchas cosas sólo para satisfacer las necesidades de todos y todas, no para que cada uno de nosotros las copemos todas.

Vivir lentamente, recordar nuestros actos, pasar sobre la vida evitando que la vida pase sobre nosotros.


Post técnico #1: Push grandes en git

Este es mi primer push técnico, así que he decidido tildarlo como tal, para que los que no les gusta lo técnico no tengan que leerlo.

El caso es que he estado utilizando git en un proyecto y me encontré con el problema de no poder enviar (push) a otro repositorio un commit de gran tamaño, en este caso de 27MB aproximadamente. La transferencia la realizo mediante http y al intentar subir dicho commit obtenía el error

error: RPC failed; result=22, HTTP code = 500

fatal: The remote end hung up unexpectedly

y el envío (push) fallaba.

El meollo del problema radica en que el buffer empleado por HTTP para publicar archivos es demasiado pequeño. Lo que tenemos que hacer es incrementarlo a través de las configuración de Git, así:

git config http.postBuffer [size]

Donde size es el tamaño del buffer en bytes que queremos asignar. Por ejemplo, si queremos que el buffer de publicación sea de 100MB (es decir, si queremos que el límite superior del tamaño de los archivos sea de 100MB) entonces utilizamos el siguiente comando:

git config http.postBuffer 104857600

Y ahora si podemos enviar nuestros commits al repositorio en cuestión.


Fútbol pa’l pueblo, porque ya ni pan hay

Me acerco a la gran plaza y se siente el ambiente, todo es amarillo azul y rojo, las vuvuzelas suenan como queriendo sincronizar su canto. Recuerdo que este mismo día el ministro del interior pedía perdón público al país por el asesinato del líder comunista Manuel Cepeda y me pregunto si alguna de las miles de personas que caminan a mi lado lo sabrán o si al menos relacionarían el nombre Manuel Cepeda con una víctima del terrorismo de Estado.

El caso es que la vista del estadio es espectacular. Avanzo por el puente y me encuentro con el primer síntoma de que aun hay algo de racionalidad en esta patria boba: una protesta de mujeres en contra de la violencia entre géneros (más particularmente del que va dirigido del hombre a la mujer) a propósito de Hernán Darío Gomez, DT de la Selección Colombia de Mayores, quien apenas el día anterior había agredido física y verbalmente a una mujer. Estaban custodiadas-segregadas por el cuerpo policial y gritaban a viva voz su denuncia. Estoy seguro que más de un enajenado mental no logró vincular el hecho con la protesta.

Llego a la entrada de la tribuna norte y me encuentro sólo con gambas (entre ellxs, yo), un panorama muy distinto de lo que vi en occidental mientras descendía por el puente: aquí también hace presencia la lucha de clases, que permea a toda la retrasada sociedad colombiana, como bien lo hiciera notar Aurelio Suárez esa misma noche en una entrevista a un programa televisivo. Y lo retrasado de esta tierra de putas y traquetos se hace notar aun más cuando se tiene que pasar por tres cordones de seguridad…alcancé a terminar con las “emociones levantadas” de tanta tocadera.

Me dirijo lentamente a mi cita con la silla 165 de la fila P sector 8, como preguntándome con qué me voy a encontrar, contrario a muchxs de lxs que corrían a mi lado, cual si fueran atacados por una alimento putrefacto que les haya hecho aflojar la pasta. No pude saber porqué corrían, si aun faltaba media hora para el inicio del partido. Ha de ser que iban a calentar la silla, pues era una noche fría. A veces pienso que el concepto “pasión” fue borrado de mi diccionario.

En cuanto entro a la tribuna logro darme cuenta que los televisores son unos grandes mentirosos: la grama es mucho más alucinante en vivo, con un verde que casi te hace sentir que te encuentras en un planeta distinto, como si más allá de ella no existiera nada; sientes ganas de ir a sentir el placer de orinar en medio de ella. En fin, busco mi silla y me acomodo, aquí las vuvuzelas hace las veces de los grillos en el campo; son el sonido de fondo. Un sentimiento empieza a invadir tu cuerpo, no sabes si sentir temor o placer, pues se abre camino entre tus emociones sin pedirte permiso alguno, de modo que las políticas imperialista de USA se le quedan pequeñas. Lo logro controlar, detener y darme cuenta que no es más que la euforia de masas, el deseo de sentirse parte de algo grande, imparable, sublime. Debe ser esto lo que siente la hinchada regular y que hace que no se despeguen del estadio cada vez que juega el equipo de sus amores, pues, como toda “euforia de masas”, se siente un orgasmo en el climax del hecho.

Estadio El Campín

El estadio se encuentra casi lleno, como si Fidel o Lenin fueran a anunciar la conversión del mundo entero al comunismo….pum, vuelvo a la realidad y me doy cuenta que no son ni Fidel, ni Lenin…ni siquiera un Jaime Caicedo con alguna vanguardia popular armada los que están allí, sólo son los árbitros ingleses y 22 mojigatos que no tienen más de 20 años. Se abren paso los placeres del nacionalismo fascista: himno de Costa Rica, silencio total. Himno de Colombia, a viva voz. ¿Por qué en las formaciones del colegio no se entonaba con los mismos ánimos? ¡Ah, cierto!!, la euforia de masas.

Comienza el espectáculo, ¡por fin!! puedo concentrarme en el juego, en el fútbol, en el deporte…..o..no? Mierda, a pesar de que comienza el partido no logro disfrutar del encuentro, pues las culicagadas de la fila de adelante hacen más ruido y se mueven más que las rameras del rey. No puede ser, resulta que estoy rodeado de estudiantes de algún colegio que en lugar de concentrarse en la esférica, están mirando lo sexy que hace el saque de portería el arquero de Costa Rica o lo bien que lo mueve James Rodríguez con quien una de ellas aseguraba que se iba a casar. Bueno, digamos que al menos eran mujeres de ambiente.

Así pasan cuarenta y cinco minutos, entre zapateos que imitan el venir de las olas, acompañado por supuesto de “la ola”, mujeres moviendo sus caderas y gritando el nombre de su nación, hombres levantando los brazos para alentar al equipo que han venido a ver y claro, 60dB * n de sonido monofónico (siendo n la cantidad de vuvuzelas presentes en el espacio vectorial con una pérdida inversamente proporcional al cuadrado de la distancia). Pero de “aquello”, nada.

Inicia el segundo tiempo, y todo continúa igual que en el primero, hasta que por fin llega la anotación esperada…¡¡y del lado norte, en donde me encontraba!! Al parecer, se produjo un ataque de pulgas asesinas infernales, pues todos saltaban y gritaban y se rascaban (cogían) unos a otros. El ataque parecía provenir del anotador del gol, pues sus compañeros acudieron rápidamente a auxiliarlo, tirándosele encima y gritando, mientras los jugadores de Costa Rica se alejaban de él. Debí haberme bañado muy bien, pues no me pasó lo mismo. El partido se detuvo. Cuando las pulgas se fueron, el partido reinició. Pronto, la anotación volvió a llegar, pero del lado contrario; grave error el de Lara haber sacado a Valencia, pues antes de que pudiéramos echar un madrazo llegó un tercer gol, una vez más de Costa Rica. Afortunadamente durante estas dos últimas anotaciones las pulgas atacaron únicamente a los jugadores de Costa Rica, pues yo estaba preocupado de que lograran entrar en mi ropa.

Partido Colombia - Costa Rica

La desesperanza se apoderó de varios, la platica se iba perdiendo. Pero el futuro yerno de los papás de la mocosa de adelante mío logró sacar un centre que culminó en un cabezazo que mando el balón al fondo de la red, sin que el arquero de Costa Rica (que ya no les parecía tan sexy a las presentes, pues un hijo de puta, como lo tildaban ellas mismas, no creo que sea muy sexy) pudiera hacer mucho. De nuevo, las pulgas asesinas hicieron presencia en las graderías; creo que me picaron dos o tres, pues me hicieron mover los brazos. Afortunadamente el efecto para mí fue corto. Como si no bastara con esto, en el último minuto llega la pena máxima a favor del local y es efectivamente cobrada por el yerno que, a partir de este momento, tenía más que confirmada la mano de la pretendiente que él ni siquiera conocía, pero que seguía allí delante mío siendo atacada una vez más por los bichos, al igual que la gran mayoría del estadio.

Se termina el encuentro y se desata la euforia, el culo deja de estar fruncido y toda penetración se hace posible, como seguramente lo concretaran lxs más entonadxs y satisfechxs horas más tarde, en sus nichos de amor. El anunciador hace saber a los asistentes, en un inglés robótico y en formal castellano, que los espera a todos de nuevo en el próximo encuentro, el día sábado. El estadio empieza a desocuparse, la grama queda nuevamente allí, sola y hermosamente verde, como una inconmesurable esmeralda. La fiesta sigue en la calle, ¡¡por fín, el mundo es comunista, han muerto las clases sociales!!…..a no, es sólo “la fantasía hippie de nuevo”. En realidad sólo fue un partido que un equipo de desconocidos, tan odiados como amados, ha logrado ganar, por el bien de la economía de la ciudad.

De lo que estoy seguro es que ninguno recordaba en ese momento el atropello de H.D. Gómez el día anterior, así como ustedes tal vez no recuerdan que al principio del texto hablé de Manuel Cepeda o de la protesta femenina. Cuando volví a casa me enteré que Hernán Darío Gómez había renunciado a la dirección técnica de la Selección Colombia de Mayores, dando una ejemplar muestra de coherencia y responsabilidad que uno que otro AUV debió seguir cuando fue presidente del República.

Ni modo, felicidad total ante una victoria, indiferencia total ante cien pesos de alza en la gasolina y ante cuatro millones de desplazados. Final, final, no va más…


Seguir

Get every new post delivered to your Inbox.

Únete a otros 130 seguidores