@ agnasg

agnasg


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:
[cce lang=”c” width=”480″]
int version = 0;
s / version;
SerializePlacement(s);
files.SerializeSettings(s);
s % dir;
s % splitter;
[/cce]

¿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:

[cce lang=”c” width=”480″]
w.DrawImage(40, 240, CtrlImg::save());
[/cce]

“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.