@ agnasg

La nueva expansión de world of warcraft será presentada el 6 de agosto

29-07-2015 12:52 PM

Esto está raro. ¿Este anuncio está super adelantado por algún motivo que me estoy perdiendo? Tengo meses que no juego wow pero parece que el barco se está hundiendo, única explicación de adelantar el anuncio de la nueva expansión, cuando deberían estar corrigiendo los entuertos. Raro. Enlace.

The Battle for Wesnoth

27-07-2015 7:11 AM

Estuve varias horas revisando toda la historia alrededor de The Battle for Wesnoth, juego que se encuentra en desarrollo desde 2003, tiene una gigantesca comunidad, y la lista de desarrolladores excede el centenar. Llegó a mis manos debido a un llamamiento por ayuda, para continuar/reiniciar su desarrollo (mencionado en Hackers News y en Reddit). Es un juego de estrategia basado en turnos, del tipo Tribal Wars, donde tienes tu ejército, tienes fortalezas, y debes usar estrategia para conquistar territorio. Parecido también en cierta forma a Civilizacion. Está desarrollado en C++ y si bien es cierto que parece tener graves problemas de diseño,  particularmente en el sistema que maneja las conexiones, lo puedo recomendar como un buen ejemplo de un gigantesco juego que vale la pena examinar. También es interesante ver las imágenes, íconos, fonts y toda la media en general. Tiene un lenguaje propio WML para diseñar los mapas, e interfase con python y lua.

Enlaces (este es casi el resumen del mes porque creo que voy a estar muy ocupado de aquí al 31)

  • Defininitivamente estoy de acuerdo que esto está fuera de control. Este juego sobre diseño de puentes debe ser prohibido.
  • Hoy aprendí que puedes hacer function overloading en C.
  • Esto estuvo dando vueltas por las páginas de programación hace unas semanas: Los 10 mandamientos de la Nasa para programación. La última,Todo el código debe ser compilado desde el primer día de desarrollo con todos los warnings del compilador habilitados (All code must be compiled, from the first day of development, with all compiler warnings enabled at the compiler’s most pedantic setting) no puede ser más cierta. Curiosamente esto no puede ser más cierto: ayer entregué un sistema (bien bien complicado, del tipo NP), sin ningún warning pero, olvidé validarlo en 32 bits (coloqué una constante MAXCOST como 2147483648, el cual es un número que genera el warning: this decimal constant is unsigned only in ISO C90 (esta constante es unsigned solamente en ISOC90), por lo que ahora tengo que agregar pruebas en un sistema 32bits (mi máquina de desarrollo es 64 bits).
  • A mi no me gustan los juegos de cartas (me refiero a juegos tipo The Gathering o Yu Gi Oh), pero este juego Guild of Dungeoneering tiene un excelente diseño (y el video es super divertido). Estuvo entre los 10 juegos más vendidos hace unas semanas. Reportado aquí.
  • Por cierto que aquí esta la discusión sobre esta loquera de los 30fps. Por ejemplo: juegos con tag 30fps. Pues sí, algunos desarrolladores bloquean el frame rate a 30 para garantizar que el juego funcione bien sin importar el equipo y la tarjeta grafica. Interesante.
  • “La gente recomienda no programar juegos RPG por su gran alcance. ¿De dónde viene el gran alcance en los RPGs?. Hmm. No es una dolencia de los RPGs nada más, el mencionado juego The Battle for Wesnoth adolece del mismo problema por lo que desde el comienzo el desarrollador original alineó el desarrollo del juego con la filosofía KISS (mantenlo simple estúpido (keep it simple stupid)).
  • Lo cual me lleva a esta intesantisima historia sobre el desarrollo del juego The Age of Decadence. El cuento trata sobre las ??? en esta lista: 1) Anunciar un nuevo RPG. 2) ??? 3) Ganancias. En serio que esas son las ??? más angustiosas (angustiantes no parece existir como palabra) de mi vida.
  • Me quedé contemplando durante varios minutos este post en los clasificados de Reddit “Hi there. Im interested in starting a paid/rev share project. (“Hola, estoy interesado en comenzar un proyecto pagado/ganancia compartida”) Recordé horas, días, semanas, proyectos, discusiones, peleas en el chat (las peores y más violentas peleas), proyectos no pagados, frustración, etc, etc, etc. ¿Por qué? Porque hay personas que no saben nada de trabajar en un proyecto, no saben nada de trabajar/producir/llevar ideas a productos terminados, hay personas que no parecen personas. O al menos no parecen comportarse como tales. Porque decir en mi opinión “persona razonable” es una redundancia, toda persona debe ser razonable. Entonces, yo, como desarrollador, o como freelancer, o como programador de juegos decido colocar mis próximos días/semanas en manos de un ser (no consigo otra palabra no tan peyorativa) que tiene una idea y cree saber como llevarla a un producto terminado. Es la pesadilla de convertir el “???” del punto anterior a una realidad. Por ejemplo esta página sobre “Ideas propuestas frecuentemente”, es interesante por las respuestas de los desarrolladores. “Si esa es una interesante idea pero creemos que ese cambio va en contra de la filosofía del juego, es decir, va en contra de KISS, o va a cambiar el balance del juego, etc. Eso es inaceptable para un creador de proyectos que “tienen una idea”. Ellos son la persona de la idea y no se puede discutir razonablemente con ellos. Y el problema es que esta persona, la persona de la idea no hace nada, él solamente tiene su idea y nada más. A este tipo de proyectos yo les digo “no gracias” de entrada sin preguntar siquiera “qué”. Y sobretodo por lo de “ganancia compartida”. Como dice alguien en los comentarios “everything about your post tells me you’re an “idea guy” (“todo en su post me dice que usted es “la persona de la idea”). Y es que si no sabes que  ”la persona de la idea” es lo más inútil e irrelevante de un proyecto, deberías estar lo más alejado posible de cualquier foro donde se publiquen anuncios para participar/desarrollar proyectos. ¡Gracias!

sourceforge have 24 hours down and nobody cares

19-07-2015 6:41 AM

sourceforge tiene ahora más de 48 horas caído, y a nadie le importa. Bueno mi post en reddit ha sido visitado por al menos 1000 vistantes continuamente desde entonces, así que si hay gente que todavía le importa. El punto es que con github y code.google.com sourceforge se ha vuelto irrelevante en los últimos años, como algunos comentadores han dicho. Sin embargo, por razones desconocidas todavía están alojados ahí importantes proyectos, incluyendo vim (el editor), unetbootin (una herramienta para bootear desde un pendrive) y, entre otros, irrlicht, el motor gráfico que uso diariamente para psyblast y otros proyectos personales. Como no es gran cosa lo que se puede hacer en este momento porque no hay acceso a los foros (hay 2-3 personas en el irc (#irrlicht:irc.freenode.net)) vamos a proponer la mudanza a github en lo que sourceforge vuelva a estar en línea. Mientras tanto hay un sitio no oficial con el repositorio:  https://github.com/osense/irrlicht-git

Sitio sourceforge de irrlicht (fuera de línea en este momento 19-07-2015 08:06)

Post en reddit reportando el problema (por agnas)

Viejas practicas

05-07-2015 10:22 AM

I-refuse-to-use-mallocLuego de muchos años y con el advenimiento de C++11 (y sus nuevas encarnaciones C++14 y C++17) me resultada realmente molesto ( o quizás hasta bochornoso) que mi vieja rutina strsave () continuara pululando dentro de mis aplicaciones y juegos. La primera versión la escribí en 1981 basado en el texto de K & R, y algo parecido se puede encontrar en casi cualquier aplicación desarrollada en C.

char *strsave (const char *id)
{
    char *str;

    if ((str = (char *) malloc (strlen (id) + 1)) == NULL) {
            g_write_debug ("strsave: out of memory");
            return NULL;
    }
    strcpy (str, id);
    return str;
}

La pregunta es ¿por qué? Con std:string esto dejó de ser necesario por lo menos hace 15 años. Viejas prácticas supongo, y que el programador C sigue escondido en alguna parte dentro de mí. std:string se puede encargar complemente del negocio de manejo de la memoria. La explicación clave es la siguiente: “std::string usa el allocator por defecto std::allocator, dado que std::allocator usa new y delete, la memoria heap es usada, así que el string es permanente hasta que el programa termina, o el programador hace algo al respecto.

Cuéntame uno de freelancing

03-07-2015 8:50 AM

… soy bailarina y traficante de armas.

Sofía Serrano

Leo con fruición la lección número 6 de este blogguer sobre freelancing: hacer crecer el negocio es más difícil de lo que usted piensa - Traté de comenzar un equipo de escritura  y por un tiempo funcionó.  Tenía 10 sub-contratistas (no todos trabajando al mismo tiempo) y estaba devorando negocio tras negocio como nadie. Pero se derrumbó. Rápidamente aprendí que el tiempo que dedicaba a entrenamiento, corregir sus errores y compensar las metas no cumplidas estaba excediendo la ganancia extra que estaba obteniendo. (Scaling is harder than you think it will be – “I tried to start a little writing team – and for awhile, it worked. I had 10 subcontractors (not all busy at once) and was passing off work like nobody’s business. But it fell apart.I quickly learned that the time I was spending trying to train them, fix their mistakes and compensate for their missed deadlines was easily offsetting the extra income I was making.“)

No sé cuántas veces tengo que explicar esto cada vez que alguien me pregunta por qué después de 10 años trabajando freelancing no me he expandido, por qué no he formado un equipo de trabajo. freelancing es diferente. No es obvia la estrategia para crecer y la razón está insinuada arriba: para crecer tienes que dejar de hacer freelancing y pasar a ser un gerente de proyectos, manejar recursos, etc., lo cual es exactamente lo que no queremos hacer cuando nos transformamos en freelancers. Yo formé o ayudé a formar variar compañías y mi rol fue básicamente ser el de líder de proyectos. Ya yo me sé ese capítulo. Ya vi esa película. Me transformé en freelancer justamente porque no quiero más reuniones con un equipo de trabajo los lunes o peor, los viernes por la tarde, para oír excusas y coartadas. Claro esto no está muy a la altura de las enseñanzas de Warren Buffett, y justamente  ahí está el punto, al decidirnos como freelancers le estamos diciendo see you later a Warren, y comenzamos a hacer nuestro propio camino.

Hay que ser coherente. O aprender a decir mentiras. Ejemplo: estoy trabajando un complicadísimo proyecto cuyo objetivo es una librería que sirva como wraper del api de una compañía que presta servicios de impresión de fotografías. Antes tenían un servicio basado en soap, ahora es REST. (hacer google SOAP vs. REST conduce a un montón de páginas con publicidad que no dicen nada útil, as usual, stackoverflow tiene una excelente respuesta). La primera pregunta que le hice a la persona que me está contratando fue “¿qué rol tiene usted en el equipo? ¿es usted el lider?”. La respuesta fue un “yes” tan poco creíble que no me sorprendió en lo absoluto cuando descubrí poco después que él no tenía idea de que C++ REST SDK no soporta SSL. Es decir, él no es el líder del proyecto, es un contratista que me está sub-contratando. De cuentos como este está lleno el ambiente de freelancing. Así que tenemos que desarrollar algo así como una caparazón para protegernos. Porque de nada sirve responder/corregir o entablar una discusión (¿cómo es que no sabes que C++ REST SDK no soporta SSL?). Es inútil. Sheldon no sobreviviría ni una semana como freelancer.

Se me olvidaba

30-06-2015 2:51 PM

En mi defensa entre más de 800 posts que hay en este blog, este es el primero llamado “Se me olvidaba”. Eso es algo.

Pues olvidaba mencionar ayer algunos puntos. Me acordé leyendo los links del mes de Emily Short, y  una nota en reddit esta tarde que me resultó interesante. Más de esto el próximo mes.

  • No tengo tiempo en este momento para escribir sobre el tema, porque voy saliendo a ver Jurasic World, pero un juego que debe aclarar que this is not a zombie story (esta no es una historia de zombies) me resulta verdaderamente perturbador.
  • Tampoco tengo mucho tiempo para hablar sobre el UI que estoy trabajando en  psyblast, y que ya no se cuántos de estos he hecho a lo largo de los años, ya perdí la cuenta. La regla aquí es reutilizar viejos componentes, de los cuales tengo toda una biblioteca. psyblast usa irrlicht así que no puedo sacar ventaja de lo que he hecho en Qt.
  • Lo que me lleva al cuasi-leit-motiv de este blog, reinventar la rueda etcétera. Pero esta vez lo voy a decir de una forma diferente. Resulta que en la serie de libros de Asimov, Fundación, se narra la historia de que toda la civilización va a colapsar (porque sí basicamente) y  como solución se debe plantar el germen para que la civilización renazca al otro lado del universo. El resto del primer libro y buena parte del segundo si recuerdo bien trata sobre cómo determinar qué significa eso, qué significa el otro lado del universo. Ciertamente puede ser el sitio más distante conocido (lo cual sería una solución bastante obvia) pero resulta que quienes determinaron lo de “el otro lado del universo” era algo así como socio-estadisticos, es decir, especialistas en el comportamiento estadístico de las masas sociales (o algo por el estilo). Así que “el otro lado del universo” tiene una connotación diferente. Por ejemplo, el planeta menos desarrollado socialmente. El cual resultó ser Terminus, un planeta poco avanzado, todo lo contrario de Trantor que era la capital del universo y consistía de una ciudad que abarcaba todo el planeta (algo así como Coruscant). Pues toda esta larga introducción es para mencionar que este desarrollador de juegos que desarrolló 340 juegos en 18 años debe estar al otro lado de mi universo. Lo digo no solamente por la cantidad sino por la calidad. Creo que el 95% es kk digital.

Junio está terminando, hora de resumir

29-06-2015 8:56 AM

Como Junio está terminando, ya hora de hacer un resumen rápido de lo más relevante. Estuve bastante inactivo en este blog porque me tomé unas vacaciones por los lados de Hollywood, pero no el de los ángeles sino el que está cerca de Miami. Realmente divertido. También fue divertido este mes como Blizzard anunció que no se iba a poder volar en Draenor y después anunció que sí. Parece que esto se ha vuelto una practica de mercadeo, decir no para luego decir si pero con ciertas condiciones. Creo que mi ex-esposa usaba esta técnica con frecuencia. Pero luego salió el patch 6.2 y todo el mundo está trabajando en el logro para poder volar, y todo el mundo olvidó de cómo se llegó a esto. Yo actualicé el juego (1.6gb ?) pero todavía no he renovado la suscripción. Lo que me lleva a lo ocupado que he estado luego de regresar de vaca.

El problema de tomar vacaciones es que para retomar el trabajo se tiene que trabajar duro. El secreto lo puedo compartir, gratuito como un servicio especial para los lectores de este blog: para retomar el trabajo sin mucho trabajo el secreto es comenzar. ¿Comenzar qué? Comenzar a trabajar bozo! Una vez que comenzamos y adquirimos velocidad de crucero ya se nos olvidó que no teníamos ganas de trabajar. Así en menos de una semana completé un proyecto (una simulación de un radar para detectar cambios climáticos). Y como es usual el cliente resultó ser complicado con un exceso de personalidad. Me pregunto si existe alguna correlación entre el regreso de vacaciones y tener problemas de compatibilidad con el estado anímico de los clientes y colegas. Un tema de reflexión dejado como tarea para la casa.

weather-radar

También hay otras cosas que pueden guardar relación con el regreso de vacaciones, por ejemplo, el tiempo que permanecemos concentrado en un proyecto. Para mí eso se traduce en cuanto tiempo estoy mirando, tecleando y cambiando de archivos en el IDE de mi proyecto. En estos últimos días (y en particular hoy) ese tiempo tiende a ser un minuto o menos, pues 9gag.com y las noticias de la jungla de Tanaan me llaman constantemente. Pero tengo que luchar contra estas distracciones. Quizás.

Enlaces mientras vacacionabas…

  • 5 problemas que todo ingeniero de software debe poder resolver en menos de 1 hora.
  • Algunos puzzles en C. Yo no sé por qué siente una fascinación tan persistente con estas travesuras. Quizás porque en nuestro día a día nos encontramos con tantos problemas como estos que…
  • Porque los puzzles los encontramos en nuestro día a dia. Este sitio que describe como encontrar un punto random en una esfera me ayudó a contruir en Treejs un haz de rayos centrados en un punto. Parecen dos cosas no relacionadas pero si lo están, si lo intentas.

El arte de escribir un algoritmo elegante

11-05-2015 4:32 AM

Como no quiero contradecir el espíritu del post de hoy no voy a dar mayores detalles. El mensaje para el día de hoy es el siguiente:

 

Todo algoritmo debe ser elegante. Si no es elegante, usualmente está malo

¿Cómo definimos elegante en programación?

  • Simple, cada instrucción se justifica por si misma armónicamente junto a las demás
  • Intuitivo, no puede haber otra forma más clara de hacerlo.
  • Claro, no hay que dedicarle sino pocos minutos para descubrir su efectividad.
  • Efectivo, debe hacer lo que debe hacer. Cumple con su objetivo rápidamente.

 

touch Sphere

23-04-2015 9:40 PM

Hace como dos meses dejé de jugar wow, algo así como mi descanso anual al menos hasta halloween (octubre). Así que estoy como realengo. Realmente realengo. Wizard 101 acaba de anunciar Jewel Socketing, similar a las gemas de wow o de Batmud. Pero de verdad no estoy para Wizard101 en estos días. He estado trabajando mucho mi juego psyblast, que es ceñudo, serio y complicado, y no quiero jugar, “jugar” sino juegos serios. Lo cual me lleva a Batmud.

Batmud…

Leo en el finger de un jugador nivel 24 en Bat Mud

He has killed: a cute and very fluffy bunny-rabbit .., 4211 exp

Esto representa su más importante kill, es decir, un nivel 24 tiene como su mejor victoria matar a un tierno conejo peluchin. En el nombre de los antiguos dioses del universo… Pero, claro, nivel 24 es bajo. ¿Cuál es el nivel max en Batmud? Hasta donde mi condición de mago nivel 28 me permite conocer, existe un nivel 103. No sé más allá, no puedo ver, no puedo sostener la mirada, siquiera de los porteros.

Aprender Batmud es como aprender a usar Unix (linux), de hecho, los manuales son iguales. Es como estar en la dimensión desconocida, las cosas existen, pero no sabemos cómo se llaman. Preguntar algo en el newbie channel a veces es como hablar con un autista, porque sus respuestas son crípticas: “- ¿cómo sé qué cosas puedo usar, o los  tipo de armaduras? – help slots, help eq, help eqset – ¿cómo hago para que el juego arranque en la última locación donde estuve? – help start, no siempre sirve… y así sucesivamente.

De hecho los que juegan estos muds parecen bots que tratan de aprender a pasar el test de turing aprendiendo con algoritmos genéticos. Ayer estu hablando con una tal Imma, pero luego de 20 minutos no quedé 100% convencido de que era un ser humano. Me preguntó “¿los bots son así de astutos hoy en día?” No me atreví a responder porque no quise afrontar el efecto neuronal ni las consecuencias sinápticas que mi respuesta podía tener. Miento, si le respondí: “no te imaginas”. Comenzó a hablar de eliza. Cuando huí desaforado leí que decía “ah, no eres un fan, ¡lástima!”.

¿Recomiendo Batmud? ¿Recomiendo los MUD en general? Si eres autista, hacker, edhc (endemoniado demente hardcore), ni siquiera tengo que mencionarlo. En caso contrario, la respuesta es un rotundo no.

Para una introducción en SHA1 o AES de Batmud clickea Batmud en las categorías. Será divertido. Es divertido… si lo intentas…

Nada puede ser 100% perfecto, por diferentes razones

29-03-2015 8:37 AM

Tomado de mi diario personal:

Interesante. Siempre, todo momento es oportuno para aprender algo nuevo. Estaba viendo a Mig (mi pareja)  cambiando de directorios en Win 7 y observé que ella usa los drop down menu en la secuencia de directorios de un path. De esa forma se puede cambiar directamente a un subdirectorio. La pregunta inmediata es ¿por qué los drop down menus no continuan a los subdirectorios del subdirectorio? Porque es Windows. Nada puede ser 100% perfecto, siempre debe haber algo malo que mejorar en la próxima version. Shit.

Un ejemplo de los drop down menu de Windows 7

win7-drop-down-menu