Archive for Julio, 2009

Una manita de gato al clon de Tetris

// Julio 31st, 2009 // No Comments » // game development

lobo_tuerto

Al parecer el proyecto de los steering behaviors va para largo.

Por mientras, este fin de semana le daré una manita de gato a mi clon de Tetris, incluso le cambiaré el nombre y lo subiré a GitHub. Entre otras cosas quiero convertirlo en gema y separar el único archivo que contiene todas las clases en varios ficheros.

También traduciré los comentarios al inglés, y será el juego que mantendré de manera oficial.
El antiguo Metris se quedará en su artículo como un programa didáctico en español para quien lo quiera usar.

Comenzaré ahora mismo. :)

Actualización 2009-08-01 03:29am

La refactorización va viento en popa, también ya casi termino la traducción al inglés y la separación en varios archivos. :D

De paso modifiqué el algoritmo que obtenía los colores al azar de las piezas — ¡ya no más piezas oscuras que apenas se ven en el tablero ni piezas con colores desabridos!

¡Ah! y ya tengo el nuevo nombre… jojojo. :D

Artículos relacionados:

Optimizando operaciones sobre vectores en Ruby con memoization

// Julio 29th, 2009 // 1 Comment » // game development, programación

ruby.jpg

Ahora que estaba haciendo el clon del Missile Commander, me dieron ganas de implementar un movimiento más realista en los misiles.

En lugar de que simplemente tuvieran una velocidad lineal desde que salen hasta que explotan al llegar a su destino, quería que aceleraran a la hora de hacer su despegue.

Recordé que tengo un muy buen libro que habla sobre steering behaviors (comportamientos de dirección), y decidí implementarlos en Ruby.

Los steering behaviors usan mucha matemática de vectores, así que me puse a desarrollar una pequeña clase para realizar un par de cálculos comunes: longitud y normalización — conforme las necesite, le iré agregando otras operaciones útiles.

La clase Vector2d

Esta es la clasecita que me ayudará a darle vida a un sinnúmero de entidades virtuales en mis futuros proyectos. :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
require 'benchmark'
 
class Vector2d
  attr_reader :x, :y
 
  def initialize(x=0,y=0)
    clear_length
    @x = x
    @y = y
  end
 
  def clear_length
    @length = nil
    @length_sq = nil
  end
 
  def length
    Math.sqrt(length_sq)
  end
 
  def sub_memoized_length
    Math.sqrt(memoized_length_sq)
  end
 
  def memoized_length
    @length ||= Math.sqrt(length_sq)
  end
 
  def length_sq
    @x*@x + @y*@y
  end
 
  def memoized_length_sq
    @length_sq ||= @x*@x + @y*@y
  end
 
  def normalize
    Vector2d.new(@x/length, @y/length)
  end
 
  def normalize!
    @x = @x/length
    @y = @y/length
    clear_length
    self
  end
 
  def x=(x)
    clear_length
    @x = x
  end
 
  def y=(y)
    clear_length
    @y = y
  end
end
 
Benchmark.bm do |x|
  a = Vector2d.new(23,45)
 
  x.report do
    1.upto(1000000) do
      a.length
    end
  end
 
  x.report do
    1.upto(1000000) do
      a.sub_memoized_length
    end
  end
 
  x.report do
    1.upto(1000000) do
      a.memoized_length
    end
  end
end

Conforme la programaba se me ocurrió hacer unas optimizaciones, lo que dio como resultado los métodos que incluyen la palabra memoized en su nombre.

Hice unas benchmarks (pruebas de tiempo) —¡mi primer benchmark en Ruby! :D — para medir que tanto afectaban mis supuestas optimizaciones, y esto fue lo que descubrí:

1
2
3
4
5
6
7
8
9
10
-*- mode: compilation; default-directory: "~/development/gamedev/steering/" -*-
Compilation started at Wed Jul 29 23:52:19
 
/usr/bin/ruby -w /home/lobo/development/gamedev/steering/vehicle.rb 
      user     system      total        real
  1.460000   0.000000   1.460000 (  1.480273)
  1.310000   0.000000   1.310000 (  1.352205)
  0.270000   0.000000   0.270000 (  0.276391)
 
Compilation finished at Wed Jul 29 23:52:22

Una breve explicación

La prueba consistió en calcular la longitud de un vector determinado, un millón de veces.

La técnica de optimización usada se llama: Memoization.

En computación, memoization es una técnica de optimización que se usa principalmente para incrementar la velocidad de los programas de computadora al evitar que las llamadas repetidas a una función recalculen los resultados de entradas previamente procesadas.

El primer método medido:

1
2
3
  def length
    Math.sqrt(length_sq)
  end

Calcula calcula la raíz cuadrada cada vez que es llamado, además calcula la suma de los cuadrados de X y Y.
Tarda: 1.480273 segundos

El segundo método:

1
2
3
  def sub_memoized_length
    Math.sqrt(memoized_length_sq)
  end

Se ahorra el cálculo de los cuadrados de X y Y al guardar en una variable de instancia el cálculo realizado previamente.
Tarda: 1.352205 segundos

El tercer método:

1
2
3
  def memoized_length
    @length ||= Math.sqrt(length_sq)
  end

Se ahorra el cálculo de la raíz cuadrada mientras X y Y no cambien.
Tarda: 0.276391 segundos

¿Qué tal? :)

En los juegos es necesario hacer todas las optimizaciones posibles, ya que las operaciones se están realizando una y otra vez en cada ciclo del game loop.

Creo que estás me vendrán muy bien. :D

P.D. Estas pruebas fueron hechas con Ruby 1.9.

Artículos relacionados:

Temporada de caza: Mario y Bowser juntos

// Julio 29th, 2009 // No Comments » // arte & diseño, juegos

mario-bowser-hunting-season

En esta antigua obra de arte podemos ver a Mario y Bowser luchando lado a lado.
¿Qué los habrá convertido en rivales? :)

Vía: One shot: the ancient tale of Mario and Bowser

Artículos relacionados:

¡Luigi, Mamma mia!

// Julio 27th, 2009 // No Comments » // juegos, videos

¡Wooooralesss, los fans del Mario Bros no pueden perderse este video!

Artículos relacionados:

Music and life — Alan Watts

// Julio 27th, 2009 // No Comments » // andanzas, videos

Una pequeña reflexión sobre la vida que creemos normal y los objetivos que nos fijamos en ella.

Artículos relacionados:

Torchwood — Children of Earth

// Julio 26th, 2009 // No Comments » // tv

Torchwood- Season 2 - Gareth David Lloyd as Ianto, Eve Myles as Gwen, John Barrowman as Captain Jack, Naoko Mori as Toshiko, Burn Gorman as Owen - Todd Anthony/BBC America

Hace un par de días vi los primeros dos episodios de una historia que es contada en cinco partes.

(Nunca antes había visto un episodio de Doctor Who o de Torchwood, pero después de leer un par de reseñas en la red me entró la curiosidad y me dispuse a conseguir una versión de evaluación de la mentada tercer temporada.)

Así, ayer llegando del SHDH comencé a ver el número tres. Había estado resistiéndome a aventarme el acostumbrado maratón-de-serie-nueva, viendo sólo un episodio al día, pero después de ver el tercero no pude más —literalmente.

Y quiero que sepan que estaba rendido, sumamente agotado, anduve en el SHDH desde pasaditas las 10am. El caso es que después del 3, me seguí con el 4, y como la serie iba tan bien que me echo el 5 al plato de una vez. A final de cuentas terminé durmiéndome cerca de las 3am jejeje. :)

Todos los actores tienen actuaciones estupendas, la trama esta literalmente de no mames y el final… el final… VÉANLA.

Torchwood: Children of Earth tiene sus partes cómicas y sus partes oscuras, muy oscuras. Después de ver el final, me fui a dormir con todo tipo de emociones fluyendo dentro de mí.

No es perfecta, pero creo que es de lo mejor que he visto en series de ciencia ficción. Los primeros cuatro episodios contribuyen muy bien a aumentar la tensión, y cuando ésta es finalmente liberada en el quinto, es abrumador.

Artículos relacionados:

Alan Moore: 25,000 años de libertad erótica

// Julio 26th, 2009 // 1 Comment » // libros y revistas

alan-moore-25000-years-of-erotic-freedom

Alan Moore es un conocido escritor, autor de varios cómics (historietas), entre ellos: From Hell, The League of Extraordinary Gentlemen y más recientemente: Watchmen.

El tema de este artículo es para comentarles que está por lanzar en Octubre, un libro titulado: 25,000 Years of Erotic Freedom.

Se ve que la obra va a estar magnífica, y siendo el señor Moore, no podría esperar menos, sólo lean lo que viene a continuación:

Con cada avance tecnológico, la pornografía ha proliferado y se ha degradado en calidad. Hoy, la encuentras por doquier, ¿pero dónde está el arte? 25,000 Years of Erotic Freedom recorre la historia de la pornografía y argumenta que el éxito y la vitalidad de una sociedad está íntimamente ligada con su permisividad en cuestiones sexuales.

Esta historia del arte erótico nos trae algunas de las ilustraciones más provocativas jamás publicadas, mostrándonos la evolución de la pornografía en diversas culturas desde la era prehistórica hasta los tiempos modernos. Comenzando con la Venus de Willendorf, creada entre 24,000 – 22,000 aec (antes de la era común), y terminando con fotografías contemporáneas, también contiene una línea de tiempo que cubre los trabajos eróticos más grandes en varias culturas. 25,000 Years of Erotic Freedom captura hábilmente la antigua e irreprimible creatividad del espíritu sexual, haciendo de este libro un tratado sobre el arte erótico.

Moore dice:

Las culturas sexualmente progresivas nos dieron la literatura, la filosofía, la civilización y muchas otras cosas más, mientras que las culturas sexualmente restrictivas nos dieron el Oscurantismo y el Holocausto.

Hmm, interesante lo que comenta Alan Moore, ¿no lo creen?

Definitivamente un libro que estará en mi colección.

Depredado en

Alan Moore: 25,000 Years of Erotic Freedom

Artículos relacionados:

Tributo a la multifacética Annie Lennox

// Julio 26th, 2009 // No Comments » // videos

Bakcwards/Forwards by DJ Earworm
Aquí podemos observar a la siempre cambiante Annie Lennox a lo largo de su trayectoria como artista.

Artículos relacionados:

Twitter Tools para WordPress

// Julio 26th, 2009 // No Comments » // Web

twitter

Después de probar un par de plugins para WordPress que no me funcionaron, me encontré con Twitter Tools.

Recién me sumo a la ola de twitteros y este plugin me ayudará a integrar mi blog con mi cuenta de Twitter sin dolor. :)

Para los que no saben, Twitter es un servicio web en el que lo único que tienes que hacer es contestar a la pregunta:

¿Qué estás haciendo?

Si quieren seguirme, aquí está mi Twitter: lobo_tuerto

Artículos relacionados:

SHDH9 — SuperSizedNerdCore Edition

// Julio 25th, 2009 // 3 Comments » // andanzas, eventos, programación

shdh9-logo

¿Tienes una mente inquieta, te encanta programar y aprender por el sólo gusto de hacerlo? ¿Te apasiona la tecnología y conocer como funcionan las cosas?

¿Si? También a mí.

Siempre me pregunté si no existiría un lugar donde se reuniera gente afín a mi. Gente curiosa respecto a la tecnología, código, cables y arte. Hackers, geeks y nerds que pusieran sus conocimientos en acción.

Ser un lobo solitario es bueno, pero nada como andar y sentirse en manada. Se aprende más rápido si tienes una fuente dispuesta de donde aprender. Y que mejor si puedes compartir y enseñar también.

Zed Shaw ilustró muy bien en un ensayo lo que sería el lugar ideal para ir a pasar mis fines de semana. Hmph, y recién me entero de que hay algo que se le parece mucho, aquí, ¡en México! :D

Esta es la página del evento: SHDH 9 – SuperSizedNerdcore Edition (Sábado 25 de Julio de 10am a 10pm). En la wiki pueden consultar las personas que asistirán y leer sobre lo que planean hacer este día.

Realmente lamento no haber podido publicar esto con tiempo, apenas ayer en la noche (muy noche) me enteré de ello. Pero, según leí, se realiza cada seis semanas, y ahí me tendrán. :)

En concreto, el SHDH es un evento en el que varias personas se reúnen para desarrollar sus proyectos personales, compartir conocimiento, evangelizar nuevas tecnologías y en general para pasársela bien en compañía de otros geeks.

Si extrañabas un lugar como este, pues bienvenido a casa. ;)

P.D. Por cierto, le doy las gracias a mi buen ex-compañero de la ESCOM Nation84 por pasarme el dato.

Artículos relacionados:

FireStats icon Con la potencia de FireStats