@ agnasg

agnasg


Yo, procrastinador

15-08-2011 11:43 AM
Interesante discusión sobre la procrastinación: suele atribuirse a falta de disciplina, o simple pereza. El autor sugiere que la procrastinación es el resultado de nuestra lucha interna por la libertad, de separarnos de un “yo” interior que nos ordena hacer nuestras tareas, un ser que nos maltrata y nos tortura como un dictador: “¡hazlo!”, “¡hazlo ahora!”. El autor sugiere como solución revisar la forma como nos hablamos a nosotros mismos, dejar de castigarnos y reconocer nuestra tendencia natural a trabajar productivamente (sic). Yo he trabajado en profundidad esto y he descubierto que no importa lo que hagamos, siempre conseguiremos una excusa para procrastinar.  Entre ellas mi favorita, la búsqueda de la perfección: no trabajo porque mis ideas y mi inspiración “en este momento” me hacen sospechar que el resultado será de calidad dudosa, por lo que es mejor que lo deje para más tarde, cuando me sienta “más inspirado”. Por lo pronto, y como no quiero procrastinar más, aquí están unos…
Enlaces rapiditos
  • En una presentación en QuakeCon, John Carmack dijo que “Los script interpreters pueden ser dañinos“. Los script interpreters son la piedran angular de muchísimos juegos pues aceleran la programación de los objetos del juego, como NPCs, items, animaciones, eventos, etc.. El lenguaje interpretado más común es Lua, utilizado por World of Warcraft y otros juegos. La afirmación es bien curiosa porque Doom 3, uno delos juegos más populares de Id Software, la compañía de Carmack, tiene 500 mil líneas de código script.
  • Hablando de Quake, esta es otra guía para entender el código fuente de Quake. Si bien es cierto que yo recomiendo a cualquier aspirante a programador de juegos entender perfectamente cómo funciona esta engine, mi segunda recomendación es abandonarla una vez cumplido el objetivo anterior. Puede convertirse en una adicción pensar en términos de Quake todo el tiempo.
  • Google Chrome ahora soporta C/C++ como lenguaje de desarrollo de aplicaciones. Esto es realmente interesante. Ya he dicho anteriormente que cuando una plataforma soporta C/C++ aumenta en un 51% mi interés en esa plataforma. Desde hace más de un mes mi navegador por defecto es Chrome. Firefox lo utilizo únicamente para validar la compatibilidad html/css, o para ver algún error javascript en el código. No he encontrado (o no he buscado) una alternativa similar para Chrome. En Chrome esto se hace en Herramientas->Herramientas para Desarrolladores al fondo a la izquierda hay un botón para abrir la cónsola 🙂
  • C++0x fue unánimemente aprobado. Si todo sale bien con la publicación del estándard, tendremos finalmente C++11

The Raid

12-08-2011 9:08 AM

Este es un documental sobre las experiencias, los éxitos y los fracasos de un grupo de jugadores de World of Warcraft (WoW) haciendo el raid final en Icecrown. El raid de Icecrown es el encuentro final con el Rey Lich, jefe de la Scourge. Para llegar a él, el grupo de jugadores que componen el raid (10 ó 25) deben vencer a 11 distintos enemigos siendo Marrowgar el primero.

Los raids, junto a los combates en las arenas jugador contra jugador son algunos de los sitios donde la estrategia juega una parte fundamental para tener éxito.  Si bien es cierto que los jefes en los raids de WoW trabajan en base a un script, es decir, repiten el mismo mecanismo de ataque cada vez, una estrategia debe ser definida para vencerlos. Entender, aprender y ejecutar esta estrategia correctamente es una labor difícil, que puede requerir días y semanas de continua práctica. Algunos jugadores odian esto porque les recuerda el trabajo: parece más un castigo que algo divertido. Pero la recompensa es incuestionable. Cuando el jefe cae finalmente vencido, la satisfacción no se parece a nada en este mundo… que podamos experimentar en nuestro día a día.

Todo es relativo

06-08-2011 12:26 PM

El día había empezado como suelen empezar estos días. Me conecté al internet a las 5:50 am. y tuve la primera conversación (via skype) con mi cliente actual, un israelí. La diferencia de horario es un problema, lo que para él es el comienzo de la tarde para mí es tempranas horas de la mañana, inclusive antes del primer café. Trabajé hasta las 9 ese día y desayuné rápidamente. Nos quedaban 4 horas de trabajo, así que teníamos que aprovecharlo al máximo.

La productividad es una de las estadísticas más importantes en el trabajo freelance, porque la mayoría de los proyectos son cortos. 2 semanas es la duración máxima para un proyecto típico, así que normalmente no hay mucho tiempo para distracciones. Pero la productividad es relativa, a veces me parece que no he hecho nada, y al mismo tiempo mi cliente salta de la felicidad porque ha logrado algo que los 4 programadores anteriores no lograron hacer en meses de pérdida de tiempo.

El mercado freelance tiene sus peculiaridades. En un momento dado puede haber una oferta de 400 proyectos, y cada uno de ellos es cotizado por 20-30 programadores. Pero no todas esas cotizaciones son reales: el 90% provienen de programadores sin experiencia, o peor aún, de programadores que en realidad no tienen tiempo para hacer el proyecto así que le van a dedicar un tiempo marginal. El cliente quiere resultados inmediatos y no está dispuesto a competir por el tiempo del programador: requiere y exige dedicación exclusiva. Por eso el uso de skype u otro programa de chat, que permite un monitoreo constante del avance del proyecto. Un “how’s going?” cada 45 minutos es normal en estos casos. Yo trato de evitar estos clientes pero no siempre es posible. La combinación de un proyecto interesante + una plataforma divertida (joomla por ejemplo) y una buena recompensa monetaria es irresistible, así que el monitoreo via chat es una molestia soportable.

Decía que el 90% de los programadores que cotizan no tienen experiencia y eso resulta raro luego del primer análisis. Pero no es raro. Hay un flujo constante de programadores vírgenes de la India, Vietnam, Rumanía y otros países buscando trabajo fácil, rápido y sin compromiso. Pero nada de eso existe. Ningún proyecto es fácil, el proyecto más rápido puede consumir al menos 4 horas, y precisamente los clientes exigirán soporte adicional durante uno o dos días más. Proveer una respuesta rápida y efectiva es fundamental para conseguir un buen feedback (o puntuación dentro de los sitios que manejan la contratación de los freelance). Por otra parte, los clientes no pierden tiempo en delicadezas con los freelance, así que el trato interpersonal es tan rudo como el de los capataces que motivaban a los trabajadores que empujaban las piedras de las pirámides. Claro, si tú eres el mejor empujador, no tienes que preocuparte por el capataz. Pero si estás buscando trabajo rápido y fácil, disfrutaras del látigo certero y oportuno cada vez que trates de engañar al capataz.  Y el capataz es como un director de orquesta, puede detectar quién está fallando en un grupo de 30 personas. Así que estos programadores desisten eventualmente luego de uno o dos meses. Y por supuesto, son sustituidos por nuevos programadores sin experiencia. Los programadores realmente buenos y comprometidos con el modelo (por ejemplo yo, que de una u otra forma estoy en esta actividad desde el 2003) eventualmente son contratados por alguna compañía o por un grupo de compañías que buscan programadores online para tercerizar las actividades IT. Eventualmente estas compañías contratan el 100% del tiempo del programador, por lo que el programador desaparece del mercado. Yo he estado durante meses en esta situación. Así que la relación de programadores de 90% inexpertos / 10% con experiencia comienza a tener sentido.

A la 1 de la tarde estábamos revisando los últimos detalles de la implementación del día y apenas nos quedaba 1 hora para planificar mi trabajo de la tarde. Mi cliente se tenía que ir a dormir y yo tenía que ir a almorzar. Al final no resultó gran cosa así que cuando mi mamá me llamó, alrededor de las 4 de la tarde yo había terminado. Mi mamá quien habla por teléfono como si la casa se estuviera incendiando (y es sorda a mi voz, ella no me oye pero a los demás sí) necesitaba que fuera a la casa urgentemente porque mi papa no se podía montar en la cama, estaba en el piso. Mi papa sufre de artrosis, lo que le impide caminar y moverse. Llegué en 40 minutos, lo senté en la cama, le cambié la ropa hablé un poco con él tratando de determinar si se sentía bien o no. Luego conversé con mi hermano mayor que llegó al rato, nos tomamos las cervezas, hablamos la pajita acostumbrada. En fin salí para casa de unos amigos donde me esperaba una botella que había comprado la semana anterior alrededor de las 7:30 de la noche.

Como yo “me metí” a hippie hace unos años, no tengo carro sino que uso el transporte público. En la avenida, un borrachito (o drogadicto) danzaba en honor a la luna entre los carros, e hizo de las delicias de los presentes con su acto suicida. Algunos de los que estábamos ahí le insistíamos que se apartara de la avenida pero sin éxito. El viaje hacia el centro fue en realidad placentero, nada parecía indicar la tragedia que ocurriría a continuación. Los personeros del gobierno en su infinita torpeza una vez más se atravezaron en mi vida y tuve que bajarme en forma anticipada antes de llegar a la Hoyada porque la cola estaba infernal. Están construyendo una vía expresa para el transporte público, pero se les olvidó el resto de las personas que transitan por el lugar durante la construcción (y quizás después de la construcción). Crucé la avenida despreocupadamente pero alerta. Esta es una zona donde lanzan cuchillos con liguitas así que hay que estar preparado para esquivar lo que sea (dejo como tarea para los lectores españoles entender la expresión “lanzan cuchillos con liguitas”).

Éramos varias personas cruzando por el sitio. Yo no estaba solo. Un motorizado y su parrillero (la persona que viaja en el “asiento de atrás de la moto”) confundieron mi maletín con un porta laptop. O quizás les gustó mi maletín. Tenía unas carpetas y otras cosas que lo hacían lucir abultado, así que quizás parecía contener un laptop. Pero yo no tenía un laptop. El parrillero, haló el maletín, pero  de una forma tan hábil que no supe sino mucho tiempo después lo que había ocurrido. Me hizo girar en redondo, 180º, en el mismo instante en que yo pegaba un brinco para evitar que el motorizado me atropellara. Mi pierna izquierda fue sometida a una torsión que se volcó completamente en mi tobillo. Triple factura inmediata. Los médicos en el hospital han estado lanzando una moneda: “cara” me ponen 2 tornillos y 1/3 de caña, “sello” me ponen un yeso. Al parecer va a ser un yeso pero como el pie ha estado inflamado me han dejado una férula, que es un medio yeso, o media luna como la llama mi hermano.

Yo tengo 4 hermanos y entre todos sumanos 272 años sin fracturas. Mi fractura del 22 de julio fue la primera. Un amigo de mi hija quedó perplejo ante esta estadística. Él con sus ventitantos años acumula dos fracturas de pierna y una de brazo. Así que este accidente que para mí ha sido la peor experiencia de mi vida luego de mi divorcio, al parecer es un pasatiempo para otros. Como siempre, todo es relativo.

Usa Irrlicht

20-07-2011 10:49 AM

Un diagrama de flujo para decidir las tecnologías necesarias para desarrollar un juego.  Para sintetizar un cuento largo, solamente si el juego es estrictamente 2D puedo justificar el uso de libSDL.  En todos los demás casos Irrlicht debe ser seleccionado.  Del lenguaje ni, hablar, C/C++ debe ser usado sin cuestionamiento alguno.

            +-------------------+
            +                   |                   U   U SSSSS AAAAA
            v                   |     +------------>U   U S     A   A
¿Quieres programar un juego?+---|     |             U   U  SS   AAAAA
            +                No |     |      +----> U   U    S  A   A
            |Sí                 |   Sí|      |      UUUUU SSSSS A   A
            |                   +     |  +---+
            |                 ¿Es 3D?++  |    I RRRRR RRRRR L     U CCCCC H  H TTTTT
            v                   ^        |Sí  I R   R R R R L     I C     H  H   T
¿No sabes qué lenguaje usar?    |No      |    I RRRRR RRRRR L     I C     HHHH   T
   |        +                   |        +    I R  R  R  R  L     I C     H  H   T
   |        |                   +--+¿Es 2.5D? I R   R R   R LLLLL I CCCCC H  H   T
   |No      |Sí                          ^                  ^
   |        |                            |                  |
   |        v       Sí                   |No                |
   |    ¿Es C/C++?+------+               +        Sí        +
   |        +            +        ¿Es isométrico?+----------+
   |        |            |               ^
   |        | No         |               |
   |        |            |            No |
   |        v            v               +      Sí
   +------->¡Usa C/C++! +----------->¿El juego es 2D?+--------->Usa libSDL