@ agnasg

¿Deja de usar linked lists?

23-05-2013 11:07 AM

¿Deja de usar linked lists? ¿Quién usa linked lists hoy en día? Yo jamás he usado linked list en aplicaciones reales, solamente como ejercicios de programación, pruebas de concepto, y en general situaciones irreales. Cuando se trata de aplicaciones web, no tiene sentido usar una liked list, PHP tiene arreglos, arreglos asociativos etc. Y en aplicaciones C++ utilizo un sistema de manejo de memoria que al inicio reserva una cantidad de memoria suficiente, y luego creo las estructuras que voy a necesitar, almacenadas en arreglos. Y en el peor caso, utilizo strings del STL. Yo creo que los linked lists son excelentes para explicar conceptos, pero en la vida real, un contenedor del STL es más que suficiente. Y si no quieres usar STL, utilizas el framework que prefieras. Una aplicación desarrollada con linked list es la obra de un novato que no sabe lo que es una aplicación de misión critica, donde los usuarios requieren una aplicación a prueba de fallas. Enlace.

el side project de mi side project

11-05-2013 11:39 AM

Un “side project” es un proyecto que no forma parte de nuestro trabajo de 8am-5pm, sino es un proyecto mascota que se trabaja fuera de horario de oficina. Es quizás de donde van a salir los fondos para mi casa en la playa. La nueva, digo. Pues yo tengo un side project además de mi side project, que como sabrá el que lee regularmente este blog (sí, me refiero a Uds. dos), es un juego. O varios juegos pero eso es otro cuento. El side project de mi side project es una herramienta para extraer y transformar datos de un repositorio a otro. Tengo dos clientes en este momento esperando que lo termine (que agregue nuevas características para hacerlo más potente y “fácil” de usar). Lo he probado todo: técnicas para controlar la procrastinación, curas de sueño, juegos de cartas, consultas psíquicas, ver videos de gatos, meditación trascendental, yoga y zen. Nada funciona. Desde ayer estoy aplicando la revolucionaria e innovadora técnica de trabajar. Es increíble. En serio funciona. Estoy maravillado. Pruebela usted mismo, de verdad funciona. Resultados garantizados.

La definitiva guía de git para el absolutamente flojo

11-05-2013 2:37 AM

Hay un conjunto de 3-4 instrucciones que se deben realizar para inicializar un proyecto con git. Debido a que estas instrucciones las ejecuto solamente al comienzo de los proyectos, nunca me acuerdo cuáles son. Así que, de una vez y por todas, para que nunca más pierda 5-10 minutos googleando, a continuación presento para la posteridad la definitiva guía de git para el absolutamente flojo:

cd myproject
git init
git add .
git commit

Después de esto se puede continuar con la rutina de:

git status
git commit -a

Tomado de aquí. Para más comandos ver aquí.

La verdad es lo contrario

07-05-2013 6:44 AM

Yo, procrastinador como soy, tengo una serie de técnicas cuidadosamente desarrolladas para evitar, evadir, desviar, dilatar, ignorar el trabajo. Entre ellas está visitar cada 5 minutos reddit, Hacker news,  stumbleupon, slashdot, etc. Como conozco muy bien estos sitios, ya me imagino el contenido de un artículo nada más por el título: éste es alguien que se le acabó la imaginación, no sabe sobre qué escribir, y escribió este accidente en el internet llamado artículo, o entrada o como se dice en inglés, post. Pero a veces los títulos son sospechosamente atractivos, polémicos o intencionalmente cursi como para llamar la atención. A ésos les huyo con precaución redoblada, porque no me quiero ver envuelto en una situación de rehenes por estar entrando en una agencia bancaria desde donde, desde el comienzo, se oyen gritos y disparos. Pero por alguna razón durante dos días este articulo “I am a Bad Software Developer” (“Soy un mal desarrollador de software”) se mantuvo entre las primeras entradas en estos sitios. Yo lo ignoraba repetidamente convencido de que su cursilería lo haría desaparecer rápidamente, pero no, continuaba ahí, a veces hasta creciendo en popularidad.

Finalmente hice click convencido de que me iba a arrepentir. Es como este video, nada es lo que parece. El artículo parece un tratado de cómo conseguir trabajo, cuándo abandonar tu trabajo, por qué debes hacer un alto en tu trabajo para pensar quién eres realmente, etc. Finalmente se convirtió en algo privado, intimo, una especie de confesión, una anotación en un diario personal, una reflexión durante el baño, un mal sueño. Sí, me arrepentí, mis sospechas eran justificadas. Tarde o temprano en nuestras carreras nos sentimos deprimidos porque tarde o temprano descubrimos que no es como decían nuestros padres, que la recompensa del trabajo duro es un desfile en nuestro honor por la avenida central de la ciudad, con papelillos y fuegos artificiales. No. La recompensa de trabajar duro es más trabajo duro. Y, como le sucede al señor del artículo en cuestión, no es suficiente hacer el tipo de cosas que hacen los buenos programadores, como leer buenos libros de programación, participar en el desarrollo de software libre, y otras cosas por el estilo. Hay que ser  un buen programador. Cómo se logra eso es algo que no se puede explicar en pocas palabras (o en muchas palabras) pero definitivamente actuar como tal no es suficiente. Esto es lo contrario de como les pasaba a las cortesanas romanas, no basta con ser decente sino actuar y hacer cosas decentes. En fin, actuar como un buen programador y ser un programador son dos cosas diferentes y necesarias. No es suficiente una sola.  Pero al final no creo que ese sea el problema de este señor que cree ser un mal programador, su problema es que no sabe quién es, y quizás sus amigos no son lo suficientemente amigos para decirle la verdad. Tarde o temprano un mal amigo te dice “no seas duro contigo mismo”. La verdad es lo contrario, debes ser duro contigo mismo, siempre, todo el tiempo. Porque no hay tiempo que perder. Nunca.

¿Cómo centrar múltiples divs horizontalmente?

30-04-2013 10:02 AM

Nuestra primera aproximación a este problema va a ser un simple:

float:left;

Cómo eso no funciona en lo absoluto tenemos que recurrir a google. La respuesta más común en google es algo así como:

.parent
{
text-align:center;
display: block;
border: 1px solid red;
}
.child
{
display: inline-block;
border: 1px solid black;
width: 100px;
}

donde parent es la clase del div principal y child la clase de los divs que vamos a centrar. Luego de algunas pruebas llegué a la conclusión de que esto solamente funciona (+/-) en FF, Chrome e IE9. En IE8 falla miserablemente.

4 horas después mi solución fue más o menos la misma que al comienzo pero con unos detalles adicionales:

.imyourfather {

text-align: left;
vertical-align: middle;
margin: 0px auto;

}

.child {

margin-right: 3px;
float:left;

}

Por qué esto tiende a fallar al comienzo y luego de 4 horas no deja de funcionar no tengo idea realmente. css+IE8 es un potro difícil de domar, no tengo paciencia para esperar el día  en que ya no tengamos que darle más soporte a ese engendro del demonio. Yo creo que fue IE lo que enloqueció  a los personajes de Rabbits.

 

Cómo aumentar tu productividad cuando estás programando

17-04-2013 1:03 PM

Estoy trabajando  bien limitado de tiempo, porque estoy en varios proyectos en este momento, y he estado buscando formas para aumentar mi productividad. Permanecer más tiempo del debido sentado es mala idea (casualmente Niko menciona una de las consecuencias, dolor de espalda, cosa que ya estoy sufriendo :( , no, no voy a probar tiro con arco (no, arquería no existe)). Así que aquí está mi lista definitiva para aumentar la productividad.

  1. Concentración.  Mantener el flow evitando las distracciones. Mantener las pestañas del navegador con videos de gatos cerradas.
  2. Efectividad: incrementar la producción de líneas de código sin bugs por minuto, regularmente optimizadas que cumplan el objetivo de la forma más aproximada. O casi.
  3. Realizar descansos de 15 cada 45 minutos, no solamente para reducir el cansancio, sino para aumentar la concentración.
  4. No hay una forma correcta de programar. Cada quien tiene su forma de hacerlo con efectividad, descubre la tuya y úsala.
  5. No hacer listas. No escribir en el blog mientras se programa. No ver videos de gatos durante períodos de 45 minutos.

arena.xlsm

13-04-2013 8:09 AM

Desde hace unas semanas ha habido algún parloteo  (más y más y más)sobre un nuevo rpg desarrollado enteramente en excel por un contador de oficio que tiene el desarrollo de juegos como pasatiempo. El juego tiene todo lo que un rpg normal debe tener, 2000 enemigos,  1000 posibles combinaciones de objetos, historia, 8 encuentros con bosses, etc. El juego finalmente ha sido liberado para la alegría de los fanáticos. Porque realmente hay que ser fanático para jugar un rpg, desarrollado en excel, hecho por un aficionado. En serio. Aqui hay un review, no necesariamente válido ni imparcial. No, yo no lo voy a jugar.

Apartarse de la manada

08-04-2013 10:43 AM

The man who follows the crowd will usually get no further than the crowd. The
man who walks alone is likely to find himself in places no one has ever been.
– Alan Ashley-Pitt

(“Cuando sigues a la manada llegas tan lejos como la manada,
pero cuando sigues tu propio camino puedes llegar a sitios donde nadie ha estado.”)

Estoy escribiendo un parser de html porque necesito hacer un despliegue básico del contenido de cualquier página web (en forma rudimentaria, solamente el texto). Llegó a mi vista este enlace en linkedin.com que contiene algunas ideas sobre cómo hacerlo.  Por ejemplo usar IHTMLDocument2 que permite obtener los elementos  HTML, los  tags, etc. O utilizar alguna librería como libxml2, HTML Tidy, etc. O, quizás, la sugerencia más descabellada “I just suggest you write parser using tools like lex and yacc in person. It can be time consuming…” (“Te voy a sugerir escribir un parser utilizando herramientas como lex y yacc en persona. Puede ser largo en tiempo…”) ¿Puede ser largo en tiempo? Eso es lo que yo llamo un eufemismo. Cualquiera de las soluciones utilizando librerías o mi propio desarrollo (ya he hecho algún avance programando a mano la solución) implica un tiempo de desarrollo de unos días. Quizás una semana y pico. Utilizar lex y yacc, que son las herramientas que se utilizaban hace años para producir compiladores puede requerir meses. Sí, ciertamente puede ser una solución poderosa pero, puede tomar algún tiempo. Eso es lo que yo llamo apartarse de la manada. Pero no estoy particularmente interesado en eso en estos días.

Resumen del mes

31-03-2013 9:29 AM

Terminó el mes y tengo una larga lista de enlaces a cosas importantes que alguna vez vamos a necesitar pero que no vamos a encontrar cuando la necesitemos. O probablemente ya se nos haya olvidado que la anotamos en alguna parte, por ejemplo, aqui:

No funciona

20-02-2013 3:30 PM

En windows XP, al presionar Inicio (o Start en Inglés) aparecen varios menús adecuadamente desorganizados para confundir al usuario y hacer su vida miserable. Al menos en mi versión, de arriba a abajo y de izquierda a derecha separados por diminutas líneas está un menú definido por el usuario, un menú con los últimos comandos ejecutados (actualizado según la actividad de las manchas solares), un menú con acceso a documentos y otras carpetas de uso dudoso, un menú del sistema con enlace al panel de control, manejo de impresoras y, finalmente, un menú con otras herramientas, posiblemente entre ellas la más últil, que es “Buscar”.

En las páginas Web, en las aplicaciones Web 2.0 y en cualquier otra aplicación que se precie de ser moderna (o lo intente), el botón de Buscar se coloca en un lugar visible, práctico, cómodo, pues el 50% del tiempo un usuario que no esté jugando o perdiendo el tiempo seguramente estará buscando comandos, aplicaciones, herramientas, funciones, documentos etc..

Pues bien, en Windows debido a la infinita sabiduría de sus creadores, el “Buscar” está perdido, como ha quedado dicho, en un panel que parece un menú y que a su vez se divide en 5 sub-menús, y, como si fuera poco, está en el menú menos visible, abajo y a la derecha. Es como si la intención de un usuario al abrir un menú fuese entretenerse en cavilaciones sobre las motivaciones más oscuras de Nostradamus cuando escribió la centuria XXXVII. No, un usuario, cuando abre un menú, lo que quiere es, ¡sorpresa!, BUSCAR algo.

Ok, nuestra desdicha no termina aquí, apenas comienza. Este es el comando Buscar más idiota de todos los tiempos. Es tan torpe su diseño que ni siquiera voy a perder el tiempo describiendo sus fallas. Quiero concentrarme en la más importante: No funciona.

Se supone que un buscador sirve para buscar cosas, normalmente documentos. Una función fundamental es buscar un documento con un texto en particular. Yo no me acuerdo cuál script tiene el código curl para conectarse a un servidor https, pero estoy seguro que en alguna parte de los 3 GB de scripts que tengo hay uno que tiene la receta para hacer eso, y estoy seguro porque yo mismo lo escribí. Por razones que no vienen al caso describir en este momento (quería buscar los scripts modificados en las últimas 2 semanas), se me ocurrió la descabellada idea de usar el buscador de windows. No lo encontró. No. Nada. No existe. Yo sé que sí, y así, hastiado, lancé una búsqueda con el buscador de phpdesigner (que iba a hacer una búsqueda más lenta según mi línea de pensamiento en ese momento) y, sin sorpresa alguna, lo encontró. No se me ocurre ningún teorema o corolario o moraleja, sobre esto sino la frase lapidaria predilecta de todo político aspirante a un cargo público: NO FUNCIONA.