Hay que tener mente abierta, mente abierta siempre

22-01-2012 1:10 PM

Varias veces he tenido que hacer un programa Windows para ejecutar alguna tarea o para algún cliente. Desde 1998 he usado directamente la librería Win32 sin ningún wrapper o librería especializada en GUIs. Ya he hecho media docena de estos programas, pero todos han sido simples, con un menú de “Archivo” con las operaciones básicas de “Guardar”, “Guardar Como”, “Salir”, etc.. Nada complicado. Pero desde hace unas semanas he estado pensando en un programa que me ayude a hacer páginas web estáticas. He estado evaluando para este propósito WebsitePainter pero está lleno de problemas y la única vez que lo utilicé para una página real (para un cliente, utilizando los 30 días de evaluación) terminé editando la página html directamente, lo cual fue realmente doloroso porque WebsitePainter utiliza <div> con style “position:absolute”. No una mala idea si tienes un programa que haga el posicionamiento, pero una pesadilla si lo tienes que hacer a mano.

Intento fallido.

Así que decidí hacer un programa que haga esta tarea por mí, pero que lo haga correctamente:

  • Impidiendo que un div se sobreponga sobre otro.
  • Colocándolos en el mismo orden en que están en la pantalla.
  • Y permitiendo más styles (o cualquier style) sobre estos div’s

Pero no iba utilizar mi “low level” framework basado en Win32. Necesito un generador de GUIs para esto. Las opciones obvias e inmediatas son QT y wxWidget (hay otra solución basada en Java descartada por razones obvias). Sin embargo, no obstante, a pesar de que eran obvias, decidí comenzar evaluando una cuarta opción poco conocida. Ultimate++.

No he terminado la evaluación y no sé si voy a utilizarlo, pero si quiero mencionar algo sobre el proceso de acercamiento a un nuevo API. Porque nosotros como programadores debemos tener una mente muy abierta y dispuesta a estudiar un nuevo API. Debemos estar dispuestos a analizar 6 nuevos APIs antes de desayuno. Una mente muy abierta es lo más importante. Y eso se traduce en esperar lo inesperado y visualizarlo desde el punto de vista del API, no desde nuestro punto de vista. Ultimate++ tiene una idiosincrasia muy particular. A veces nos parece que está forzando la sintáxis de C++ al límite. Por ejemplo esta puede ser una típica rutina:

int version = 0;
s / version;
SerializePlacement(s);
files.SerializeSettings(s);
s % dir;
s % splitter;

¿Me perdí de algo aquí? ¿Qué se supone que va a suceder con esa instrucción “s % dir”. Todavía no tengo idea. Pero lo que quiero comentar es esta sencilla instrucción:

w.DrawImage(40, 240, CtrlImg::save());

“w” es el parámetro a la función “Paint”, y DrawImage () es uno de sus métodos. Pero qué es “CtrlImg::save()”? A mi me parece una llamada a un método en el espacio o clase CtrlImg. Algo así como cuando hacemos std::setw(20) para establecer el ancho de una salida en una operación sobre “cout”, la salida por defecto en C++. Entonces, ¿qué estamos guardando con esa llamada a “save()” si en el contexto no hay nada que guardar?. Por eso decía que hay que tener la mente bien abierta cuando entramos en contacto con un nuevo API, porque es como cuando entramos en contacto con una civilización extraterrestre: lo que nos resulta normal es anormal para ellos, y lo que es normal para ellos es anormal para nosotros (”Los oscuros años luz” de Brian Aldis… ¿alguien?) Pues para no estirar demasiado el suspenso esa oscura instrucción es en realidad una constante, o definición, o una etiqueta: CtrlImg::save() retorna un apuntador a la imagen del ícono de “save”, “guardar”. Lo normal en cualquier API o librería es colocar eso en mayúsculas o al menos colocar un comentario en alguna parte (este ejemplo lo estoy sacando de los tutoriales) donde se indique de qué se trata (o en la documentación la cual olvida por completo mencionar algo sobre el tipo de cosas que normalmente se pasan como parámetro a DrawImage). Claro, esto se hubiera resuelto si hubiese conseguido la documentación de DrawImage, antes de que mi mente comenzara a especular (al final conseguí la declaración: DrawImage(int x, int y, const Image& img)). Hay que tener mente abierta, mente abierta siempre.

phpDesigner

12-01-2012 9:13 AM

En realidad yo no he tenido problemas con los editores y los IDE’s en mi vida como programador. Como desde que comencé a programar aprendí a utilizar VI (conocido ahora como VIM por la versión más popular en linux y windows) todas mis necesidades de edición estaban resueltas. Cuando comencé a programar en C++, Win32 el Visual C++ de Microsoft era lo suficientemente versátil y cómodo. Luego estos últimos años que he estado programando en PHP, Eclipse Helios resultaba suficiente. Excepto por un problema. Eclipse Helios está programado en Java, y eso sí que es un problema. El pc pierde el 50% de su performance, queda inestable, y cuando salgo de Eclipse y entro posteriormente en otro programa exigente en cuanto a memoria y recursos hay un 75% de probabilidad que la maquina se cuelgue o se reinicie. Java es algo así como un virus (lo que decían antíguamente de Windows).

Así que un sustituto de Eclipse es una necesidad urgente para mí en este momento. El problema es que un buen IDE requiere tantas caracterísitcas que es un milagro conseguir un producto que las cumpla todas. Adicionalmente mi búsqueda estaba orientada a productos software libre, pero eso era demasiado pedir, así que pensé que dado que paso 8-10 horas diarias trabajando con estas herramientas bien valía la pena unos dólares de inversión para “hacer mi vida más divertida”.

El primer producto que evalué fue phpDesigner. Simplemente: esto es perfecto.  Manejo de proyectos, resaltado del código, buscador con todas las opciones (en el texto seleccionado, en el archivo, en el proyecto, en un directorio), completador de código, teclas programables, bookmarks, etc, etc, etc.  Cada característica, inclusive las que son decorativas están ahí. Y el soporte es inmediato. Algo que me molestó (y que me molesta mucho de algunos editores y programas en windows) es que al hacer una búsqueda el programa presenta un popup diciendo que no encontró nada y que si debe buscar desde el comienzo del archivo. ¿A quién se le ocurre programar eso así?. Yo hago 150-200 búsquedas diarias. ¿Se supone que tengo que responder esa pregunta 200 veces diarias?. Los programas deben comportase lo menos invasivos posible.  Si encuentran algún problema deben hacer algo sin preguntar, pero informando lo que hicieron. En este caso dado que no encontró la búsqueda basta con decir no lo encontré, o comenzar desde el comienzo del archivo e indicar que dado que no lo encontró, lo buscó desde el comienzo. Estuve buscando como cambiar eso, leí la documentación, busqué en el wiki, pero no lo encontré. Así que abrí un ticket de soporte preguntando cómo hacerlo. En pocas horas me respondieron indicando que eso se puede desactivar en el menú de buscar, opciones de búsquedas, “trabajar silenciosamente”. Y funcionó de maravilla. Yo hubiera colocado esa opción en “Configuración” que fue donde lo estuve buscando, pero eso no importa, es cuestión de opiniones.

En resumen, tuve suerte, pdpDesigner el primer IDE de php que evalué resultó insuperable, ni siquiera tuve que evaluar el siguiente en la lista. Así que phpDesigner: recomendado!

Se acabó esto

02-01-2012 5:12 PM

Este se suponía que era el post final del 2011, donde decía “En recta final del 2011, estamos preparándonos para el 2012, año apocalíptico, esperemos que solamente en términos amarillistas”.  Últimamente he estado demasiado concentrado en la programación, y poco a la lectura y a la escritura.  Tanto que ya no leo reddit, slashdot, hackernews, nada de eso. Programación y más programación. Son sitios webs, aplicaciones webs, php, css, javascript. No me he aburrido todavía. Y no parece que llegue a suceder en algún momento de un futuro cercano. Del resto, como diversión he estado jugando wow, como ya dije hace unos meses. El patch 4.3 tiene cosas realmente interesantes. Y la nueva profesión secundaría de Cataclismo, arqueología, me tiene cautivado. Es catalogada como la segunda profesión más aburrida del juego, luego de fishing. Misma que también me gusta endemoniadamente. Es decir, me gustan los juegos que otros catalogan de aburridos. O en wow hay gente de perfiles bien diferentes, o los diseñadores son unos genios porque hay entretenimiento para todos, incluyendo un fanático de los juegos de perseverancia, y dominio y auto control. Interesante. Algún significado debe haber detrás de todo esto.

Exhausto

29-11-2011 1:32 PM

Mi pc debe tener algo en el apache o el mysql. Mis aplicaciones se están colgando. Los sucesos están asociados a Chrome. Hasta ahora no me ha sucedido con Safari. ¿Por qué estoy usando este navegador? Porque firefox, el navegador que estuve usando durante 2 años se puso muy lento. Realmente lento.  Demasiado lento. Cambié a chrome pero ahora se está colgando con el mencionado problema con apache y mysql. No sé cuál de los 3 es el culpable. Y la verdad a veces, luego de resolver 300 bugs en una semana me quedo exhausto. Exhausto. Por ejemplo, en alguna parte, en este sitio http://new.quartz-pay.com/ los símbolos que requiere utf-8 no se están desplegando incorrectamente… en firefox… en algunas máquinas… ¿qué?. Es casi imposible detectar la razón de este problema. Y más aún si es el bug 300 en la lista… de una lista creada por alguién… en alguna parte sobre un sistema hecho por alguien… en alguna parte. Exhausto.

Raideo

16-11-2011 6:54 AM

Comencé a jugar Wow nuevamente luego de un descanso de 2 meses. He observado que de alguna forma necesito dedicarme a algo diferente a la programación para poder descansar con calidad. Hace años leer era algo relajante pero ahora no lo es. Además la lectura es para otros momentos. Hubo una época de mi vida cuando yo leía un libro mensual. Creo que dos. Normalmente libros de más de 400 páginas. Eso no es nada para un lector consuetudinario, pero lo es para alguien normal. Mi hermano hacía una mueca cuando veía mis libros de 10 centímetros de grosor. Así que comencé a jugar Wow. Una alternativa es la televisión, pero realmente no quiero ver tv. Creo que pierdo neuronas cuando lo hago. O mis neuronas se idiotizan viendo tv. Entonces, Wow. Ya mi toon nivel 85 había terminado una de las zonas de cataclismo, Vashj’ir. Pero descubrí que es una zona inútil en términos de reputación. Las zonas valiosas para hacer raideo son Deepholm, donde se puede ganar reputación de Therazane y Mount Hyjal donde se puede ganar reputación de Guardians of Hyjal. Con la primera puedes comprar un anillo nivel 346 y un encantamiento de hombrera que te da 50 de intelecto y 25 de haste (cosas importantes para un mago). Con la reputación de los Guardians of Hyjal te puedes comprar un encantamiento del casco de 60 de intelecto y 35 de crítico, más botas, pantalones, etc.. Ojalá hubiera leído la guía antes de comenzar cataclismo, en realidad la primera zona que hay que hacer es Mount Hyjal. Estoy planeando hacer raideo y todos estos encantamiento y equipos son vitales. Inclusive moví mi toon a un servidor latino para no tener problemas de comunicación. El problema es que el lag es terrible. Tan terrible que no se si voy a poder raidear. 800ms de latencia es la muerte en un raid.

Yo soy nosotros

03-11-2011 7:50 AM

Yo no soy yo. Yo soy nosotros. Desde que era adolescente descubrí que había alguien más viviendo en mi cuerpo. Algunas veces es él el que habla. Otras veces soy yo. A veces hablamos atropelladamente los dos, y la gente no nos entiende. Él escribe cosas como esta:

Cada día. Al amanecer. Al anochecer. Cuando te sientas a la mesa. Cuando enciendes el televisor. Cuando abres el periódico despreocupadamente. Cuando un vecino te saluda: “¡Buenos días vecino!”. Cuando te miras al espejo: murmuras para tus adentros, resignado, revelado, descubierto: estoy viviendo una mentira que ni yo mismo me creo. La verdad  me hace hipócrita…

En cambio yo escribo algo así como esto

Este sitio tiene un conjunto de librerías javascript que vale la pena revisar. Hay una librería para desplegar un archivo pdf, un decodificador de MP3 y una versión en javascript de bcrypt. Esto último me llamó la atención porque …

A él lo llamo agnas escritor, yo soy agnas programador. El se cuela aqui a escribir sus tonterías, oda al pesimismo, todos moriremos igual, el amor es un espejismo y otros infantilismos. Pero él tiene sus momentos. Todos tenemos nuestros momentos. Pero él los tiene en forma hiperbólica. Son extraídos de un universo que no se parece al que podemos palpar, aquí, ahora. Pertenecen a un espacio y a un tiempo diferente. Leemos:

Lo que la gente no entiende de las oportunidades es el componente “una sola vez en la vida”. Creemos que esto que vivimos estará esperando que nos decidamos. Nada más alejado de la realidad. Cuando visualizamos un nuevo camino que nos conducirá al destino que hemos esperado toda la vida, tiene un letrero en letras de neón, brillante, imposible de no ver, que dice nítidamente, “solo una vez en la vida”, “por pocos minutos”, “aproveche ahora”. Es increíble que, recelosos, dudemos, y desechemos la oportunidad, sin siquiera pensarla. A lo mejor es nuestra última oportunidad de ser felices, y la olvidamos sin más, como si fuera propaganda barata. No lo es. Las oportunidades siempre lucen como propaganda barata. Parecen el aviso publicitario de un circo. Generalmente no lo son, están confundidas, camuflageadas buscando de escabullirse subrepticiamente y huir de tu felicidad. Y ahí está el truco. Saber pescar esos tímidos y huidizos relámpagos vitales. Indescifrables. Indetectables. Pero que pueden transformar nuestra vida.

¡Santo estiércol! No se me ocurre nada. Es como una vez que dí una presentación en psicología en 4to año. Quizás una de mis primeras presentaciones. Todo el mundo se quedó callado. Cuando pregunté qué pasó, por que no dicen nada, la respuesta fue algo así como “no se me ocurre nada que decir”. O cuando leemos aquella metáfora de García Márquez: “el ambiente estaba tan húmedo que los peces podían volar por el aire…”. Ese es quizás el problema de agnas-escritor, transita su vida en el silencio, no despierta sino un éxtasis lacónico que puede ser admiración o repulsión por tanto sin-sentido. O tanto “así es”.

Por todo eso tengo a agnas-escritor encadenado y confinado al tractac.  ”La verdad  nos hace hipócritas” no aparecerá aquí en este blog. Tendrá que abrir otro en alguna parte. Si es algo que valga la pena, de esas cosas que puedo colocar en la categoría “Así es”, bueno tal vez lo permita en el tractac. Pero el resto no. He decidido dejar atrás ese sin-sentido que viví en el 2004-2007, ese período signado por una ebriedad mental donde solamente podían germinarse perlas como “La verdad  nos hace hipócritas”. Me parece increíble que agnas-escritor siga pensando de esa forma. Estos no son tiempos para estar pensando en eso…

Post escrito la noche de Halloween… agnas-escritor
bd_prevpage

Nice to meet you, I´m an Automation Business Logic Specialist

02-11-2011 8:13 AM

Desde los tiempos de la universidad cuando leí los ensayos de Dijkstra yo me identifico como un programador (para ser exactos estuve dedicado a vendedor de tecnología durante 15 años, pero esa es otra historia). Lo que yo hago es programar sistemas que tienen que ver con la lógica del negocio. Rara vez hago una simple página web. Pero la médula de lo que hago es programar. Sin embargo, estas recomendaciones profesionales, donde nos advierten que promocionarte como programador es colocar una fecha a tu despido me hicieron reflexionar. El problema es que para los funcionales (esa gente que sabe cómo funciona la compañía, usualmente los dueños,  el gerente de finanzas o el gerente general) los programadores son un gasto con una dudosa importancia que se la pasan trabajando en unos activos de alta depreciación llamado equipos de computación que son bien costosos de mantener. La lógica de negocio normalmente es simple, pero cuando pasa por el filtro del departamento de TI (tecnologías de información) se convierte en griego con acento chino. Es decir, incomprensible. Como vendedor tuve innumerables reuniones con estas personas (por ejemplo con el gerente de finanzas de un banco con 2000 agencias) y al oirlos hablar descubres la sencillez con que explican cómo funciona el negocio. Y ellos esperan esa misma sencillez pero traducido en términos informáticos claros. Así que la interacciones con ellos debe ser en términos de lógica de negocios. No en términos de que el driver de mysql de php debe estar instalado en /etc, o algo por el estilo. Así que soy un especialista en automatización de lógica de negocios. Encantado.

Claro esto ha tenido algunas respuestas con argumentos realmente débiles y que se salen del punto. No se trata de ocultar, o ir al grano, o hacer honor a la verdad cuando decimos a qué nos dedicamos. Si de esto último se trata, en honor a la verdad yo dedico menos del 50% a programar. La mayor parte del tiempo lo dedico a traducir en términos computacionales  reglas de negocio. Si eso es “programar” o no, no es exactamente el punto, sino que es sano traducirlo a algo que los funcionales puedan entender. Por razones profesionales y de sentido común es una buena práctica no comenzar a hablar en téminos legales como hacen lo abogados o en términos médicos como hacen los doctores. Los que no saben nada de eso van a preguntar de todas formas: ”¿puede explicar eso en español?” .

Hay una brecha

26-10-2011 10:18 AM

Nadie le dice esto a las personas que son principiantes, me hubiera gustado que alguien me lo dijera. Todos los que se dedican a realizar un trabajo creativo, lo hacen por su buen gusto. Pero hay una brecha. El primer par de años los resultados no son tan buenos. Trata de ser bueno, tiene potencial, pero no lo es. Pero tu buen gusto, lo que lo metió en el juego, puede ser tu perdición. Y tu buen gusto es lo que te decepciona de tu trabajo. Muchas personas nunca superan esta fase, muchos abandonan. La mayoría de las personas que conozco que hacen un trabajo interesante, pasaron por años de esto. Sabemos que nuestro trabajo no tiene esa cosa especial que queremos que tenga. Todos pasamos por esto. Y si usted está recién empezando o  está todavía en esta fase, tienes que saber que es normal y lo más importante que puedes hacer es hacer un montón de trabajo. Póngase una fecha límite para que todas las semanas se termine un objetivo. Es sólo al pasar por un gran volumen de trabajo que va a cerrar esa brecha, y su trabajo será tan bueno como sus ambiciones. A mí me tomó más tiempo para encontrar la manera de hacer esto que a nadie que  he conocido. Va a tomar algún tiempo. Es normal que tarde un poco. Usted va a tener que lucrar para lograrlo.

Ira Glass

Traducido de aquí debido a que fue mencionado aquí. Una interesante forma de explicar porqué el esfuerzo y la perseverancia son tan importantes. En cualquier arte y en particular en el desarrollo de juegos donde hay tantos factores que pueden influenciar el acabado final.

¡Muera Goofy !

21-10-2011 11:16 PM

Ok  esto es algo así como saqueos, caos urbano, se perdió la sindéresis,  es como la ejecución de Gadafy, o el linchamiento (suena como Goofy ¿verdad? pues es más o menos lo mismo,  un país gobernado por Goofy. En un país gobernado por Goofy sucedería lo mismo que sucedió en la vida real, la gente saldría a las calles, a matarlo).  Esto es fin de mundo. Blizzard  acaba de anunciar que si te suscribes 12 meses a World of Warcraft, obtienes Diablo 3 gratis. ¿Qué? Sí, eso es correcto, si te suscribes a Wow, te dan Diablo 3 (cinematic), eh, sí, correcto, gratis. ¿Esto es algo así como vergonzoso verdad?

Diablo-3

Y anunciaron ( o confirmaron dado que el nombre rodaba desde agosto) que la la nueva expansión es … Mist of Pandaria… y una nueva clase, Monje.

No, por más tentadora que es esta oferta, es solamente para anglosajones… o, mejor dicho para seres viviendo en United States of America, Canada, Europe, Australia, New Zealand, o Singapore… el resto, no aplicamos…

Simplemente…

Enlaces

  • Luego de leer este interesante tutorial para dibujar 2d para programadores, traté de instalar Inskcape (un paquete de dibujo vectorial código abierto). Para mi sorpresa, ya lo tenía instalado, pero una versión anterior. Yo he estado usando durante años Paint Shop Pro, y no lo he cambiado porque no he conseguido ningún otro que sea rápido, eficaz, y fácil de usar. Inskcape es un buen candidato, pero trabaja con vectores cosa que se aleja demasiado del tipo de cosas que quiero hacer (o quizás complica las cosas de una forma que me impide lograr rápidamente mi objetivo). Sin embargo, es un excelente paquete, altamente recomendable por lo que esta vez trataré de utilizarlo más.  La otra opción, es Gimp, igualmente código abierto. Sin embargo, no sé, nunca me ha gustado. Me siento como Alicia preguntándome si tomarme el liquido del frasco.
  • Como estoy programando un juego en javascript, estoy particularmente sensible a enlaces de cosas en javascript. Así que fui a parar a la página de List.js. Lo que me llamó la atención no fue la librería (que sirve para hacer, eh, listas de cosas, que igualmente puedes hacer con jquery) sino el icono, la imagen que aparece en la página. Excelente.
  • Un demo del algoritmo A* programado en javascript. Ya saben porqué está aquí…

El gato de 9 colas

18-10-2011 7:41 AM

Hay múltiples formas de quedarse atascado. La procrastinación es una (por ejemplo, déjame leer en qué forma Suspiria es una obra de arte, una de las películas de Dario Argento, un demonio de mi infancia). Otra forma es, como me está pasando en este momento, estar atascado por el agotamiento. Agotamiento de trabajar 10 horas+ al día, o agotamiento de trabajar una y otra vez lo mismo. O estar atascado por no saber qué hacer después (cuál es el siguiente paso). Estar atascado puede ser uno de los peores enemigos del programador así que hay que tener un arsenal de herramientas para combatirlo.

Aqui hay una receta de 10 pasos para combatir la procrastinación, así que no voy a agregar nada sobre el tema. Sobre el agotamiento físico, lo mejor que se puede hacer es dormir. El problema es cuando además se sufre de insomnio. Lo más importante es saber cuando te debes quedar en la cama y cuando te puedes levantar. Hacer esto en el momento incorrecto genera consecuencias catastróficas (por ejemplo no sirves para nada el día siguiente). Yo he combatido el agotamiento físico últimamente viendo El Orígen. Esta película que los que no saben nada de cine califican de insuperable (y, oh, blasfemia, la comparan con Matrix), es un somnífero eficaz. Si los largos diálogos del comienzo, y el absurdo-intrínseco de la sub-trama de Mal (la difunta esposa de Cobb, Leo Di Caprio) no te ponen a dormir, cuando la camioneta comienza a caer al agua te quedarás dormido. Eso es irresistible (e insufrible).

El otro tipo de agotamiento (el agotamiento de repetir una y otra vez lo mismo) es un tema para otro post, pero puedo adelantar algo. Lo que tienes que hacer lo tienes que hacer, punto. Si tienes que ir al baño tienes que ir, no importa cuantas veces lo hayas hecho anteriormente. Por ejemplo, en este momento estoy programando para mi juego en javascript el algoritmo A* de búsqueda de rutas (pathfinding). Realmente he trabajado en este algoritmo. Días. Semanas. Meses. Una y otra vez. Mi divorcio pudo deberse a este algoritmo. Quizás yo no hice el postgrado porque estaba ocupado con este algoritmo. Una y otra vez sin lograr los resultados perfectos (el motor de Deus Ex tiene un considerable trabajo sobre este algoritmo, sin embargo no es perfecto tampoco). EL motor de World of Warcraft resuelve el problema fácilmente: si no encuentra el camino el npc pasa por encima de rocas, o a través de árboles o paredes. Fácil. Así que me quedo contemplando su simplicidad: son 20-25 líneas de código. ¿Cómo pueden ser 25 líneas de código tan endemoniadamente difíciles de digerir?

Enlaces Atascados

  • Por si no lo han visto, aquí está el código compilado de “Hello, World” en Dart, el nuevo lenguaje de programación que Google va a utilizar para reemplazar a Javascript. La razón para crear Dart es, supuestamente, ofrecer una alternativa más moderna.
  • Notch ganó el arbitraje y ahora puede continuar utilizanzo el nombre Scrolls.  El creador de Minecraft había sido demandado por Bethesda porque el nombre Scrolls puede confundirse con su franquisia Elder Scrolls. Notch había propuesto resolver el problema con un juego de Quake: el ganador se quedaba con el nombre, pero la gente de Bethesda (que son dueños de Id Software, los creadores de Quake) ni siquiera respondieron el desafío.
  • Los accidentes de Abu Dhabi cayeron 40% mientras duró la falla de la red de Blackberry. Ouch!