Nicehacks: Un directorio de Software Libre inspirado en Sweetcode

¿Recuerdan Sweetcode? Era un directorio de proyectos de Software Libre innovadores, diferentes, mantenido por Daniel Egnor. De un momento a otro los updates se hicieron más y más distanciados y el sitio finalmente desapareció.
Le envié un mail a Dan preguntándole si podía ayudarle a revivir el proyecto, mas nunca contestó. Anoté en mi lista de cosas que me gustaría hacer algún día un directorio como Sweetcode.

Adelantemos la cinta un par de años más tarde, y el Domingo pasado me puse a trazar mis metas para la semana y revisando mi olvidada lista me topé con esa entrada. Me dije, «Hey, esto lo puedo hacer en dos patadas en Rails.» Así que ayer Lunes en la noche lancé dos patadas, registré el dominio y aquí lo tienen: Nicehacks.

Para los que nunca vieron Sweetcode, no se trata de un directorio como los que ya abundan, sino enfocado a software diferente, original, innovador. Este nodo en E2 explica muy bien el concepto.
Nicehacks es sólo una inspiración de Sweetcode, ya que Sweetcode es Sweetcode por Dan Egnor.

Le envié un mail pidiéndole permiso para poner los posts pasados de Sweetcode (son del 2003, wow, como pasa el tiempo), esperemos que conteste. Por lo pronto, ayúdenme pasando la voz y enlazando la página, así como también enviando algún software (libre/Open Source) interesante, innovador, útil, peculiar o simplemente diferente que conozcan a: submit@nicehacks.org

No perdamos el enfoque

Este es un extracto modificado y extendido de un, eh, desquite escrito en otro lado que no viene al caso mencionar. Es una lección que he estado aprendiendo últimamente y que estoy viendo repetirse a menudo y me encuentro a mí mismo diciendo la misma frase: «No hay que perder el enfoque.»

Muchas personas dicen entonces que eso no es «el standard de la industria,» o parte de las «mejores prácticas.» Y en repetidas veces esas cosas nos llevan erradamente a perseguir procedimientos o caminos en lugar de concentrarnos en resolver el problema.

«Hay que usar la mejor herramienta para el trabajo,» dice la sugerencia. Pero si tengo un apuro en abrir el case de mi computadora en una emergencia y lo único que tengo a la mano es un cuchillo y no un destornillador estrella, ¿adivinen qué es lo que voy a usar?

No, tonto. Tienes que conseguirte el destornillador estrella. Es el standard. Nos regimos y seguimos reglas sin entender el verdadero significado de por qué han sido definidas y la razón de su existencia.

Un extremo claro son los hospitales donde no te pueden atender a menos que llenes antes un formulario, porque «ese es el procedimiento.» Procedimientos, primero — el ser humano después. Se pierde el enfoque y la claridez de lo que se está haciendo, el objetivo que se quiere lograr; en el caso de un hospital, brindar atención médica a las personas.

Por supuesto, es otro gigantesco error irnos al otro extremo y decir que las reglas y procedimientos no sirven para nada e ignorarlos olímpicamente. Se llaman «mejores prácticas» por un motivo válido. Se establecen procedimientos por ciertas razones. Lo importante es entender y discernir el propósito de cada procedimiento y hacer lo correcto en cada caso.

Cuando perdemos el enfoque todo se viene abajo. Pensamos que el numerito obtenido de un examen determina la proficiencia de una persona en dicho curso y no es así. Pensamos equivocadamente que se puede representar la aptitud o inteligencia de una persona con un solo número y es una tontería.
Alabamos una buena nota y castigamos una mala nota sin discernir que es una mera figura, una representación pálida. Alguien con una plagia o una memoria fotográfica puede transcribir, palabra por palabra, lo que tiene y obtener una buena nota. Alguien que ha estudiado duro, pero que al final se llenó de nervios por la importancia que tiene pasar este curso obtiene al final una mala nota. No rindió al 100% de sus habilidades, no por su conocimiento, sino por un factor externo. Y no podemos decir «No sabe, no estudió, la nota baja lo demuestra,» porque es un estúpido escalar que no representa nada.

Y entonces aparecen los que se van al otro extremo y puntillean, ¿Significa eso que debemos de eliminar todas las notas? ¿Que el sistema no sirve y que no debemos basarnos en ello? Que no, carambas. Es necesario tener un punto de referencia, una manera de medir el aprendizaje — pero tomémoslo como tal, como una referencia.
«Veo que sus notas de colegio, estimado entrevistado, son deficientes. Es usted, pues, un bruto y no lo necesitamos en nuestra empresa.»
Ajá. El divorcio de mis padres durante esa época no tuvo nada que ver. ¿Qué tal si me hace un par de preguntas o me toma un examen de aptitud y vemos si, en la práctica, soy realmente útil para su empresa? ¿O si mira los proyectos que he estado haciendo?

Oh no, papelito manda.

El año pasado cuando entrevisté a personas buscando un programador me importó un comino o dos si venían vestidos en terno o en chancletas, si habían estudiado en La Católica o con su primo Juancito. A todos les hice las mismas preguntas y ninguno, NINGUNO, pudo completarme una tarea de programación. Mi elección se hizo en base a la forma cómo intentaron razonar para salir del apuro, porque lo que buscaba es alguien que sepa razonar, no que tenga las siglas «Ing.» delante de su nombre, sino alguien con aptitud, alguien con potencial y capacidad. No alguien que sepa «Java» y «PHP» porque nuestra industria se mueve tan rápido que «Java» y «PHP» van a ser obsoletos o desplazados de todas maneras.

Debemos de detenernos un momento a pensar y observar si estamos siguiendo reglas ciegamente o estamos usando la razón. Hace años atrás renuncié a un buen trabajo en Lima por la sencilla razón que ese trabajo se convirtió en todo y llegué al límite de querer abandonar por completo a mi Señor.
La incomprensión de personas no creyentes no me sorprendió — lo que me sorprendió fue la incomprensión de creyentes que consideraron «tonta» y absurda mi decisión. «¿Por qué un creyente no puede ser rico?» preguntó una creyente y es como si no hubiese entendido nada en toda su vida.
Su patrón de éxito estaba marcado por lo que el mundo dice y no por lo que Dios dice. Nuestra mira y nuestra meta es otra. Es tan desorientado como decir que lo más importante en el colegio es haber llenado la mayor cantidad de álbumes de figuritas que todos los demás en la historia del colegio. «¿Y por qué un alumno no puede tener la mayor cantidad posible de álbumes?»

Mi conclusión es: no debemos perder el enfoque del por qué de las cosas, del motivo y razón detrás de cada standard, cada regla, costumbre o procedimiento. No obedezcamos ciegamente las cosas porque «así son,» «siempre han sido así» y «los demás también lo hacen» sino usemos el razonamiento y la sabiduría para hacer siempre lo Correcto.

(Y lo Correcto en reiteradas ocasiones rompe las reglas.)

Another World

Another World fue uno de esos juegos que marcaron historia. Recuerdo jugarlo arduamente con mi primo y terminarlo gracias a la intervención de Oliver.

Buscando un poco acerca del paradero de Eric Chahi, el autor del juego, descubrí esta noticia fabulosa: hay una nueva versión para Windows XP de Another World, en alta resolución. Esta es la página oficial de este proyecto y hay una demo del primer nivel para descargar.

La «alta resolución» se refiere no solamente al hecho que la resolución es ahora superior al 320×200 original, sino también que los fondos han sido redibujados con mucho más detalle, lo cual le da una frescura.

Lo más interesante de la página es Eric Chahi describiendo detalles de la realización del juego. Hay screenshots del editor de vectores, dibujos conceptuales de los personajes y niveles, el lenguaje de scripts que usó para crear el juego y muchas anécdotas bastante interesantes (filmó a su hermanito haciendo los movimientos de Lester). Recuerdo en el colegio leer en una revista de juegos un artículo sobre el juego y allí había una foto de la mano de Eric filmada haciendo la secuencia cuando Lester abre la lata.

Eric hizo de hombre orquesta creando la historia, dibujando, animando y programando todo — lo único en lo que no participó fue en la música, compuesta por Jean-Francois Freitas (la música de cierre final es genial).
Algo que desconocía fue que Eric también hizo una pintura para la caja del juego. Y para cerrar con broche de oro, hizo la música del menú de esta nueva edición de Alta Resolución. Un artista completo.

Retrazos: un pequeño proyecto

No hace mucho publiqué este dibujo hecho con ciertas limitaciones: 5 minutos de tiempo máximo, un canvas de 300×300 pixels y un solo color para acompañar los trazos.
He venido haciendo otros varios más, y como mi cerebro olvida selectivamente lo que prometimos acerca de las amanecidas programando, empecé a armar este pequeño proyecto en esas «horas extras.»

La idea inspiradora de esto provino de las mini-sagas y, más que nada, de este artículo de Kathy Sierra, sobre la «creatividad a velocidad.»

El proyecto se llama «Retrazos» y la dirección es retrazos.jgwong.org.

Es, en esencia, una galería de los dibujos que he venido haciendo todo este tiempo, y que pienso seguir produciendo de manera regular. Poco a poco he ido dejando de lado las limitaciones originales. Los hago a 400×400 pixels, a veces los hago en menos de 5 minutos, a veces no. Ya estoy queriendo dejar la limitante de un solo color también. Y creo que eso es bueno, pues estoy logrando hacer algo que me hincaba a menudo: dibujar más.

Nada reemplaza al trabajo duro y a la práctica constante, así que con esto mato dos pájaros de un tiro: dibujar más y poner en práctica lo que voy aprendiendo de Ruby on Rails. El sistema lo hice en menos de lo que canta un gallo — es sencillo, tiene su backend de administración y hasta su feed RSS. ;)
Suscríbanse y avísenme si no funciona, ya que mi lector de feeds es sólo texto y no he hecho pruebas extensivas.

Espero que les guste. Ahora me toca tener la suficiente disciplina y tiempo para mantenerlo actualizado.

Ultimamente estoy percibiendo que la única forma de obtener más tiempo es reduciéndolo…

Mejorando mi carrera

Una de las metas más relevantes que me he trazado para este año 2006 es «He mejorado en mi carrera, soy más veloz, más eficiente.» A principios de año me sentí estancado, como si hubiese llegado a cierto punto donde mis conocimientos me son suficientes para mi trabajo y todos los proyectos que veía eran más de lo mismo y nada nuevo, ningún reto, a menos que yo mismo me imponga uno para mejorar procesos. Eso es algo que me ha venido preocupando.
He estado intentando aprender cosas nuevas (PEAR DataObjects, AJAX), pero sentía, como le contaba a mis padres, que todos alrededor mío siguen avanzando y yo me estoy quedando atrás.

He tenido muchas sorpresas con lo que el Señor me ha estado enseñando con esta meta trazada, todo por diversos factores como, por ejemplo, mis ideas prehistóricas de cómo debo hacer las cosas o la falta de interactuar más con otras personas, colegas, amis linuxeros.
Voy a darles una vista general de las cosas que me han venido aconteciendo últimamente. Todo esto ha venido sucedido desde Enero y entre punto y punto hay a veces varias semanas o meses de separación. Algunas se solapan entre sí. Bueno, empecemos:

– Primeramente como mencioné ambiguamente en un post atrás, Tabo me habló de Python y Django y ese solo consejo me abrió muchas posibilidades. Ya entendí que PHP no es el futuro, a menos que reescriban todo el lenguaje desde cero y reinventen Python o Ruby.

– Luego encontré este fabuloso blog de Kathy Sierra junto con este todavía más fabuloso post acerca de la neurogénesis y una interesante conclusión: «Aprender cura el cerebro.»

– Me puse a aprender Python y Django simultáneamente.

– Hablando con Antonio acerca de PHP5, Ruby y un poco de Python, llegué a una conclusión importante que me dio mucha confianza: que puedo aprender cualquier cosa. Al descubrir esto me dí cuenta que una parte de mí dejó de creer que tengo la capacidad de aprender, un tipo de «ya estoy muy viejo para aprender tantas cosas,» lo cual me parece absurdo. ¿Desde cuándo he empezado a pensar así y por qué?

– Cuando regresé de Lima volví a visitar el blog de Kathy (tengo mi lector RSS desactivado por motivos productivescos) y me encontré con este post acerca de cómo volverse un experto en cualquier rama. Menciona la diferencia entre expertos, novatos y mediocres, pero lo más interesante es este párrafo que se los traduzco:
«Oh si, acerca de esa cosa de que nunca es tarde… la mayoría de nosotros puede despedirse de la medalla Olímpica de patinaje sobre hielo. Y a mis 5′ 4», mi carrera de basketball no tiene probablemente esperanzas. Pero piensa en esto… la actriz Geena Davis casi calificó para el equipo Olímpico de tiro con arco de Estados Unidos en un deporte que ella tomó a la edad de 40, menos de tres años antes de las calificaciones Olímpicas.«

– Luego Droper compartió este post que me gustó mucho sobre Matemáticas para Programadores.

– De ese post salté a este otro enlace que me pareció todavía más fascinante y, a mitad del artículo pensé «¿Desde cuándo las matemáticas me parecen fascinantes?» Siempre le he tenido miedo a las matemáticas y he tenido muchas dificultades toda mi vida.

– Recordé entonces a mi hermano que nunca fue bueno en matemáticas en el colegio. Cuando ingresó a Ingeniería Civil no se rindió ante la idea de tener que masticar matemáticas. Hoy le gustan las matemáticas y daba clases a los hijos de algunos creyentes en Covida. Creo que una de las cosas que lo inspiró fue Johnny Rico, el protagonista de Starship Troopers (el libro, la película no existe).
Al principio a Johnny le hacen un examen del cual los resultados son: «insuficiente entendimiento intuitivo de relaciones espaciales… insuficiente talento matemático… preparación matemática deficiente… tiempo de reacción adecuado… buena vista.» Como algo paralelo a toda la historia, uno ve a Johnny estudiando duro matemáticas, recibiendo tutoría de diversas personas y preocupándose por haber dejado sus libros en otra nave espacial.
Johnny dice «Matemáticas es trabajo duro y ocupa tu mente — y no duele aprender todo lo que puedas de ello, no importa en qué rango estés; todo lo que sea de importancia está fundado en matemáticas.»
He aprendido que esa última frase es muy cierta. Von Neumann se levantaría de su tumba y te comería el cerebro personalmente si te atreves siquiera a cuestionar eso.

– Mirando en el mismo website de Math a Day, llegué a este artículo y mientras lo leía pensaba, «Esta persona ha trabajado en Amazon, haciendo cosas realmente interesantes — ¿por qué yo no hago esas cosas?» y llegué a muchas conclusiones que todavía quiero terminar de meditar. Mas una de ellas es firme: Amazon usa mucha matemática brillante para funcionar.
El artículo trata acerca de practicar programación, como cuando uno practica pesas. No es algo que haces en tu trabajo diario, sino algo que debes hacer de manera separada, dedicada, aparte.
Si aprecias tu carrera, por favor lee ese artículo. La parte que más me llamó la atención es la siguiente:
De todas tus habilidades como programador, ¿cuáles de ellas podrían ser consideradas «intemporales»? Encáralo: la mayoría de tu conocimiento técnico tiene un tiempo de vida, una fecha de expiración.
[…]
Lo que yo creo que encontrarás es que matemáticas, ciencias de la computación, escritura, y habilidades sociales son en su mayor parte intemporales, habilidades universales. Las tecnologías más específicas, lenguajes y protocolos eventualmente expiran, para ser reemplazadas por mejores alternativas.»

– En un momento dado me dí cuenta que, sin querer, estaba logrando cumplir esta meta que me había trazado. A diferencia de otras metas donde le pongo bastante empeño conciente, esta meta cayó por sí sola y las cosas se movieron «sin esfuerzo» de parte mía. Me dí cuenta que es el Señor quien estaba moviendo las circunstancias.

– Pasaron varias semanas y una noche decidí mirar Ruby y Rails y cambié mi rumbo. Quedé fascinado con el lenguaje Ruby y sigo aprendiendo desde entonces más de Ruby y Rails.

– De un momento a otro me dí cuenta que había crecido. Fue progresivo, y en un tiempo relativamente corto, pero mi vida ha dado muchos giros comparado a lo que «tenía» a principio de año.

– Una vez que estuve en Peruserver cogí por segunda vez un libro de matemáticas que hay en la biblioteca y Antonio me dijo, «Ya que tanto quieres aprender, ¿por qué no te metes a la universidad?»

– Sigo aprendiendo Ruby y Rails. He meditado seriamente la idea de meterme a la universidad, mas por ahora no siento la Voluntad del Señor por esa ruta; otras puertas se han estado abriendo por otra ruta que espero comentar en otro post. Eso no descarta que siga aprendiendo y creciendo por mi cuenta.
Gracias a Savre, voy a hacer averiguaciones para tomar cursos y llenar esas lagunas que tengo.

Y la vida continúa… :) No hay conclusión, no hay punch line. Esta es mi vida y siguen apareciendo oportunidades y puertas que se abren, puertas que se cierran, todo siempre interesante.