septiembre 28, 2009

Technical Reminder (20090928)

Problema: Evitar que un elemento en un documento HTML capture todos los eventos que recibe, estando el evento definido como disparador de una secuencia de funciones JavaScript.

Contexto: Para controlar la forma en la que un usuario interactúa con elementos del documento HTML, es posible que se necesite validar e incluso deshacer la acción que el usuario acaba de efectuar. Si el intervalo entre eventos es muy corto, puede que no se procesen en el orden esperado y alguna de las acciones a deshacer llegue a término por el flujo básico.
Por ejemplo, si se desea implementar un teclado en pantalla, es necesario deshacer cada ingreso de un caracter efectuado desde la entrada de teclado (escuchando atentamente al evento keyup o keydown sobre el elemento input de la contraseña). Es posible (se verificó en pruebas) que al ingresar una gran cantidad de caracteres durante un corto intervalo de tiempo, el motor JS del navegador no procese correctamente la secuencia, continúe capturando los eventos y no retorne correctamente al valor anterior del campo (usando la función setTimeout, por ejemplo).

Solución: La opción más sencilla es la más fácil. Fijar el atributo disabled en true (form.field.disabled = true;) como primer paso en la secuencia a seguir cuando se detecta el evento keydown/keyup, evita que se capturen eventos posteriores, al menos hasta que termine la secuencia y se reestablezca el estado del elemento. En mi caso, incluye una notificación al usuario usando el viejo alert("Use el teclado gráfico") que lo detiene en su empeño al escribir :-)

PD. A quien crea que una implementación de este estilo está lejos de aquel principio "die gracefully", puede decirse a sí mismo que confunde la naturaleza del mismo. Es posible si el diseño y la arquitectura son los adecuados... en el ejemplo, es posible ingresar la contraseña, pero el formulario no debería ser procesado e incluso, el mensaje POST no debería ser enviado (restriccción impuesta al usuario por su seguridad).

En fin,... bis bald!!!

septiembre 15, 2009

Agonía

Cada día el calor es más agobiante. Pareciera que alguien jugara a subir la temperatura de la olla, lentamente, de forma prácticamente inperceptible para todos -salvo algún espíritu sensible-. El ahogo es cada vez más frecuente, la ansiedad constante producto de la respiración entrecortada y el sudor escaso anunciando la deshidratación.

Se ve venir el sopor, la pesadez del aire que tal vez se haga más húmedo debido al agua que pasa de los ríos a las nubes y a las corrientes de aire en general. Es posible que la humedad llegue a límites insoportables y se haga necesario aislarse del exterior... y al mismo tiempo no habrá agua suficiente para aliviar la sensación de calor, de fastidio constante. Como un eterno domingo en la mañana, acostados sobre una playa infinita dondequiera que vayamos. Sólo que sin olas arropando aquello que encuentran en su camino. Sólo el calor, ese maldito calor.

Es probable que, poco a poco, perdamos el conocimiento tras una crisis seguida por un desmayo repentino. Nada demasiado doloroso; quizás un poco prolongado respecto de lo que podría considerarse deseable en condiciones semejantes. Juntos todos y cada uno, tapizando poco a poco las calles y los jardines. Hundiéndose algunos en fuentes de mármol amarillento, arrastrándose otros hacia lagos secos y ríos pedregosos que suspiran por el esplendor del pasado. Todos llegando inexorablemente al fin de su existencia como seres vivos. Ninguno convirtiéndose en abono de algo más. La vida dejaría de ser el ciclo que conocemos para aventurarse, abriéndose paso a través de la bruma y la aridez, hacia nuevos e inexplorados horizontes.

Es aquí cuando, aún soñando, recuerdo lo insignificante que es un ser humano parado sobre esta tierra, salvo para otros como él.

septiembre 14, 2009

Ranting on monday

Cómo se recupera la habilidad para soñar a mediano o largo plazo, después de pasar un tiempo enfocándose en el presente?

Qué hacer cuando regresan las ambiciones de hacer y aprender, siendo que no se da abasto para hacerlo todo?

This is the money shot

septiembre 09, 2009

Technical Reminder (20090909)

Situación: Instalar Microsoft SQL Server 2000 sobre Windows XP Professional (caso particular con SP3, otros casos no son verificables pero seguramente se incluyen).

Requerimientos: Para esta versión de Windows, sólo es posible instalar la versión Developer o versiones de prueba de Enterprise.

Problema: Una vez se terminan de copiar los archivos, al aplicar la configuración definida previamente, se produce un fallo que deshace la instalación y se genera un log en %windir%\sqlstp.log (%windir% es la ruta a la carpeta principal de Windows, comunmente C:\Windows)
El fallo se registra en el log como:
C:\Archivos de programa\Microsoft SQL 2:44:57 Server\80\Tools\Binn\cnfgsvr.exe -F "C:\WINNT\sqlstp.log" - dbdebug - MSSQLSERVER -V 0 1 M -Q "SQL_Latin1_General_CP1_CI_AS" -H 262404 -U sa -P
Iniciando servicio...
SQL_Latin1_General_CP1_CI_AS -m -Q - T4022 - T3659
Conectando con servidor...
controlador = {sql server}; servidor = MyServer; UID = sa; PWD =; database = error de red general [Microsoft] [controlador ODBC para SQL Server] [memoria compartida] maestro. Compruebe su documentación de red.
[Microsoft][ODBC SQL Server Driver][Memoria compartida]ConnectionRead (recv()).


Solución: La mediocridad en el desarrollo de este software se hace visible cuando revisamos el contenido del archivo y vemos

12:30:08 Name = MYSERVER, Type = 0x1
12:30:08 ComputerName: MyServer
Como quien dice, el problema está en que el nombre del equipo no está completamente en mayúsculas. Si es mixto o todo en minúsculas, presentará este error al instalar esta versión de SQL Server 2000. Cambiando el nombre del equipo (no sólo a mayúsculas, sino efectuando un cambio real en el nombre, de lo contrario no lo modificará) y reiniciando la máquina, podremos instalar este DBMS sin problemas.

PD. La solución real es usar otro motor de bases de datos. Para los que tenemos clientes tercos o que están amarrados muy a su pesar, la solución listada arriba es la indicada. Más información disponible en este artículo de la Base de Conocimiento de MS.

Bruma

Hace falta una suma de factores para llegar a un estado en el que aquello que sentimos de una u otra forma se asemeje a lo que describía Bretón. Usualmente me demanda acusar fatiga en alto grado y dormir poco para lograr esa secuencia de sueño y vigilia en la que no se logra distinguir nada y a la vez todo está conectado de alguna forma. Los diálogos que llamarían reales, se escurren entre rendijas y se camuflan al ingresar en la memoria del Alfabravo que camina por un bosque hoy o que recorre algún pasaje de su infancia mañana; mutan y evolucionan para integrarse con el horizonte, difuminan la línea entre lo que los demás nos recordarán mañana y lo que nosotros mismos nos encargaremos de rememorar en el siguiente sueño.

Debe ser interesante conservar esa integración del subconsciente con el mundo consciente que construimos y sin duda debe llevar a nuevas perspectivas. A nuevas expectativas, a sueños más elaborados. Inclusive, puede que sea más fácil hacer los sueños realidad pues al final, con soñarlos será más que suficiente. Somos dioses en nuestros sueños, así no logremos correr en ellos.

Ahora que lo pienso, es raro recordar a Bretón por haberle leído en el examen del ICFES. Siempre se me aparece ese recuerdo como si surgiera de la bruma. Es el manifiesto surrealista, autorreferente.

Bis bald!!

septiembre 07, 2009

Tiranía del Lector 6: The dream is true

Some time has passed since he last meet them, and in a spontaneous, almost thoughtless way, he became aware of what he should write, like he was meant to put on paper each one of those words. It was a voice inside his own mind, and it said:


Propongo que haga un análisis profundo de la adicciòn a hattrick, considerando que es un juego de futbol en el que nunca se ven los muñequitos jugando. Los aspectos psicologicos.... las carencias afectivas.... las frustraciones... todo eso.... jeje.

frkzd



Felipe Pereira nació en un barrio cualquiera de clase media en Armenia. Más allá de las bromas constantes al tener el apellido equivocado o vivir en el lugar equivocado, Felipe creció conservando siempre en su mente la idea de ser uun futbolista profesional. Nunca tuvo recursos extra, nunca había dinero de más, aprendió a vivir sin lujos y con respeto hacia quienres se esforzaban por mejorar su hogar cada día.

En las tardes, Felipe acostumbraba salir a jugar fútbol en alguno de los potreros que servían bien a quienes buscaban un lugar en el cual correr y tirar gambetas. Siempre buscando divertise, cambiando de posición en la cancha, aprendiendo y mejorando. Poco a poco, se convirtió en un jugador "comodín", capaz de suplir cualquier ausencia con talento.

Y fue en una de esas tardes que un cazatalentos lo descubrió. Aquel hombre deambulaba en las ciudades y los pueblos, desde Acandí hasta Barbacoas. Se lo llevó a entrenar a la escuela de fútbol para la que trabajaba, y no pasó mucho tiempo antes de llevarlo a entrenar con un equipo profesional.
Semana tras semana, en los pasillos del club se hablaba de la nueva promesa. Y poco a poco se convirtió, tal y como sucedió en los potreros de Armenia, en aquel jugador que le resolvía cualquier dilema al DT de turno.

Uno de esos días en los que trabajaba duro para buscar que lo tuviese en cuenta el DT, vió su oportunidad y salió a su encuentro encuentro mientras el resto practicaba jugadas en espacio reducido. Era buen amigo de aquel hombre que le ofreció su primera oportunidad en el fútbol. Si había una opción era esta.
Le saludó. Éste se limitó a decirle, casi que con desgano, "mira, ahí está el que nos tiene a todos aquí y el que quiere ver que juguemos bien al fútbol". Felipe miró hacia la tribuna y pudo ver, sentado con cierta displicencia, a un joven no mayor de 30 años -que sin embargo no aparentaba más de 20-, viendo al grupo entrenar.

Aquel hombre, a quien sus amigos llamaban alfabravo, era quien gerenciaba aquel equipo, 'modestamente' nombrado Alfabravo Team. Felipe creyó ver un guiño de aprobación dado por alfabravo al DT, quien le dijo que desde la siguiente fecha, sería titular. Por si la sorpresa no era ya grande, continuó diciendo "de acuerdo a lo que hagas en cancha, planeamos dejarte como capitán del equipo, ya sea que juegues de defensa central o de lateral". Felipe no podía creerlo. Todo había llegado de golpe, en una breve conversación. Felipe jugaría por el Alfabravo y buscaría la gloria para él y para su equipo.

Desde mayo de 2004, alfabravo logró, junto a aquel modesto grupo de jugadores, conquistar logros y vencer en situaciones de clara adversidad. Escalaron posiciones y ascendieron entre la maraña de equipos que luchaban por llegar al lugar más alto. Ganaron varias veces el título de la liga y lograron ascender hasta tercera división; todo un logro para aquel equipo que comenzó con un estadio de poco más de mil asientos en un barrio popular al occidente de Bogotá. Jugadores de diferentes nacionalidades pasaron por esa grama, mostrando buen fútbol y enteresa.

Todos recuerdan a aquel alemán, el primer refuerzo extranjero del club. Paul Kallemberg dejó huella entre la hinchada por su temperamento, al igual que el turco Selay. Otros recuerdan a Francisco Echanove y Juan Sanpedro, leyendas en la historia del club. Algunos se quejan por el paso de Trofantidis, un lateral griego que solía correr por la banda izquierda sin mucho éxito al tirar los centros. Muchos aún tienen afiches de Sebastián Español, el portentoso y elegante central insignia del Alfabravo Team, quien se entendía muy bien -dicen muchos- con el arquero suabo Kamil Irak. Más adelante, llegarían jugadores de gran nivel, defensas europeos como Steve Mann y Paul Denoual, centrocampistas talentosos como James Dwyer y Jan Olsson, arqueros como Mathieu Lauer y el chino Chien-Huat.

Pero sin duda, son tres los jugadores a quienes todos recuerdan con nostalgia. El italiano Leonel Lasso, junto a los colombianos Germán Jacanamijoy y Felipe Pereira. Los dos primeros fueron delanteros consumados, goleadores, insignias. Temidos por los DTs rivales. Alabados por quienes querían comprar sus derechos deportivos. Alcanzaron un nivel sobrenatural desarrollando su talento para anotar.
Y junto a ellos, el hijo de la cantera, aquel que cuando dejó atrás los días de gloria como jugador, decidió dar una mano al equipo haciendo uso de su liderazgo y amplia experiencia. Felipe Pereira fue jugador y DT de aquel equipo al que todos, comenzando por alfabravo, querían ver jugar bonito cada semana.


Así se siente vivir Hattrick. Conoces a otros que realmente han soñado ver, tal y como se lee aquí, a su equipo jugando. Otros construyen comunidades alrededor del juego sin limitarse a él. Hattrick se convierte en motivo y en excusa para compartir, como siempre pasa con el fútbol y todo aquello que con él se relaciona. Porque el fútbol es la vida. Y puede ser tan real como se quiera.


Thanks to frkzd for his suggestion. Perhaps, he won't even read what I've done after his idea, but the process of making this up was really interesting and I'm happy about it. Hope it reaches someone out there at last.
Bis bald!!

septiembre 02, 2009

Technical Reminder (20090902)

Si al intentar sincronizar un proyecto en tu máquina con su versión en un repositorio CVS, Eclipse muestra el mensaje
cvs commit: sticky tag `X' for file yyyyy.zzz is not a branch

y no recuerdas haber creado branch alguno en el proyecto... el problema se resuelve rápidamente ejecutando la siguiente secuencia:
  1. Desconectar de la ubicación CVS los directorios en los que están los archivos con el sticky tag.
  2. Sincronizar el proyecto.
  3. Aplicar la opción Mark as merged para las carpetas que desconectamos y que apareceran con conflictos.
  4. Subir nuestros cambios.
  5. Ser felices.
Esto es válido siempre y cuando estemos seguros que nuestra versión no sobreescribe cambios aplicados por otros en  el repositorio. He leído que cvs update -a debería servir para este mismo propósito, pero en este entorno no aplica.

Si alguien conoce soluciones más elegantes, son bienvenidas.

Lo más fresco

Recollection

Creo firmemente que la pregunta no es si todos se hacen existencialistas en algún punto de su vida sino cuándo lo hacen. El qué hacen con es...