Tag Archive for 'ruby'

Problemas con rake con Ruby 1.8 y Ruby 1.9 instalados

ruby.jpg Hace un par de meses que no tengo salida de video en mi laptop, pero he podido laborar con ella por medio de un ssh -X.

Sin embargo, pienso mandarla a reparar pronto, así que decidí mudar mis proyectos de trabajo a una máquina de escritorio que tengo por ahí.

En la de escritorio usaba primariamente Ruby 1.9. y no había tocado la instalación de Ruby 1.8 desde hacía ya un buen rato.

Debo agregar que todos los proyectos del trabajo que usan Rails, lo hacen sobre Ruby 1.8. Así que me puse a instalarle todas las gemas que hacían falta, entre ellas: Rails.

Cuando terminé, accedí a uno de mis proyectos y quise ver el listado de las tareas con un simple:

1
rake -T

Sólo para ser presentado con un críptico:

1
2
rake aborted!
no such file to load -- cucumber/rake/task

WTF? pensé, ¿qué tiene que ver el cucumber con un rake -T?
Así que instalé el cucumber en el ambiente de Ruby 1.8 para ver si eso solucionaba el problema, y no, seguía igual.

Entonces escribí:

1
rake -T --trace

Y cuál sería mi sorpresa al ver:

1
2
3
rake aborted!
no such file to load -- cucumber/rake/task
/usr/local/lib/ruby19/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'

!!!
¿Por qué esta utilizando las gemas del 1.9 si tengo activado el 1.8?

Después de darme de topes un rato ubiqué el problema …

El archivo rake que se encuentra alojado en /usr/local/bin/rake indica de manera explícita que debe ejecutarse con Ruby 1.9:

1
#!/usr/local/bin/ruby19

Lo que hay que hacer es editarlo con:

1
sudo gedit /usr/local/bin/rake

Y cambiar esa línea por esta otra:

1
#!/usr/bin/ruby

Listo, ahora rake empleará la versión de Ruby que tengamos activada en nuestro sistema. :)

El artículo de Instalar Ruby 1.9 junto a Ruby 1.8 en Ubuntu 9.04 y 9.10 ya incorpora esta corrección.

Artículos relacionados:

lotu — Un framework para desarrollo de juegos en Ruby

ruby.jpg Pues aquí estoy con un nuevo proyecto. :)

Un framework para desarrollar juegos en Ruby.

Los antecedentes

Después de terminar mi clon de Tetris llamado rubytris, decidí darme a la tarea de implementar otro clon de los juegos de antaño —¡y uno de mis favoritos!: Missile Command.

Debo comentar que a medio camino se me ocurrió utilizar comportamientos de direccíón (steering behaviors) para modelar el movimiento de los misiles —y algunos otras entidades— para una experiencia más envolvente.

Así, le puse pausa al Missile Command y comencé a desarrollar otro proyecto llamado ruby_steering_behaviors que cuenta ya con los comportamientos necesarios para utilizarlo en mi juego nuevo).

Durante la implementación de esos dos proyectos comencé a desarrollar abstracciones y clases útiles que no tenía en rubytris (mi primer juego):

  • Estados de juego
    Auxiliado por una máquina de estados es mucho más sencillo implementar las diversas pantallas de juego, entradas (splash screens) y menús.
  • Manejador de recursos
    Para un fácil acceso a las imágenes, fuentes y sonidos.
  • Manejador de eventos
    Un sistema de disparo y captación de eventos.
  • Funciones auxiliares
    Para facilitar el despliegue de texto, imágenes, sonidos.
  • Clases útiles
    Un contador de cuadros por segundo (FPS counter).
    Un visor (viewport) para poder tener espacios virtuales de tamaños arbitrarios, con acercamientos, alejamientos y control de entrada.

Desgraciadamente el trabajo y otras actividades de mi vida cotidiana me absorbieron demasiado y dejé ambos proyectos abandonados por un rato.

Pero, ahora que logré hacerme de un tiempecito decidí retomarlos y me pregunté:
¿por qué no desarrollar un framework que incluya todo eso (más lo que salga)? ¿podría ser provechoso para alguien más? Creo que sí.

Y así nació lotu.

lotu

lotu es un framework naciente que está basado en gosu, una biblioteca para creación de juegos en 2D.

Siendo gosu una biblioteca, te provee únicamente con las funciones básicas para crear un juego y nada más.

lotu, por otro lado se encargará de hacer el proceso de creación de juegos simple e intuitivo. gosu provee las herramientas y lotu los medios. gosu da el con qué y lotu provee el cómo.

Sin un marco de trabajo (framework), eres totalmente libre de organizar tu código de la forma que más te plazca, pero corres el riesgo de caer en el caos completo.

Un framework impone ciertas convenciones, te enseña un estilo de trabajo. Si las convenciones ayudan a desarrollar de una manera más rápida y menos compleja tu proyecto, entonces podemos decir que el framework es exitoso.

Como experimento he decidido desarrollar a la par mi juego nuevo y lotu. Espero que de esta manera ambos se retroalimenten y así obtener un mejor resultado.

lotu gem

Nunca antes había hecho una gema en Ruby. Se me hacía un proceso esotérico y extraño (lotu es mi primera gema ¡que emoción!). :D

Pero jeweler realmente te la pone fácil, demasiado diría yo jeje. Si no me crees, checa este video:
Gemcutter & Jeweler

La gema la puedes instalar con:

1
sudo gem install lotu

Sin embargo si quieres ir al día con el desarrollo te aconsejo que lo cheques en github.

Otros frameworks

¿Por qué no usar un framework existente como chingu?

La razón principal es aprendizaje. ;)

¡Es hora de programar! :D

Artículos relacionados:

Cómo mostrar las sentencias SQL en la consola de Rails

Al operar la consola de Rails, muchas veces quisieramos que al usar nuestros modelos se nos mostrara el SQL que se está generando.

Sólo agrega las siguientes líneas a tu archivo ~/.irbrc

1
2
3
4
5
6
7
8
if ENV['RAILS_ENV']
  # Called after the irb session is initialized and Rails has been loaded
  IRB.conf[:IRB_RC] = Proc.new do
    logger = Logger.new(STDOUT)
    ActiveRecord::Base.logger = logger
    ActiveResource::Base.logger = logger
  end
end

Ahora, cuando interactúes con la base de datos verás algo como esto:

1
2
3
>> Oficina.find 1
  Oficina Load (1.2ms)   SELECT * FROM "oficinas" WHERE ("oficinas"."id" = 1) 
=> #<Oficina id: 1, nombre: "CAMPECHE BCMR", organizacion_id: 2, activa: true>

Referencia

Showing SQL statements in the Rails console

Artículos relacionados:

Programando un PBBG en Ruby & Rails

lobo_tuerto

Después de mi corto regreso a la programación de videojuegos, y de haber visto por ahí y leído acerca de algunos PBBGs, finalmente he decido darme a la tarea de desarrollar uno.

PBBGs

Seguramente se preguntarán ¿qué es y cómo se juega un PBBG?

PBBG == Persistent Browser Based Game
Eso básicamente quiere decir: juego persistente para navegador.

La infraestructura y herramientas necesarias para desarrollar videojuegos en el ámbito del desarrollo web no son ni remotamente cercanas a las que existen para el desarrollo de escritorio.

Así, esto se convierte básicamente en un arte, hay que diseñar y desarrollar un videojuego alrededor de una estructura de operación ya establecida como lo es el protocolo HTTP, el modelo cliente-servidor y los tiempos de respuesta acostumbrados de una página web.

Por esta razón, la gran mayoría de los PBBGs se inclinan por uno de estos dos géneros:

  • Juegos de rol
  • Juegos de estrategia

O alguna mezcla rara entre ellos.

El modelo de participación preferido y más fácil de implementar es por turnos, aunque algunos de los PBBGs más modernos están incorporando un modelo de participación en tiempo real.

Si no conoces aún algún PBBG, aquí te dejo unos enlaces para que te des una idea de cómo son y cómo se juegan:

Los juegos de estrategia tradicionalmente se dividen en: por turno (TBS) [turn based strategy] y en tiempo real (RTS) [real time strategy]. En los PBBG he visto mucho el uso de tiempo instantáneo (ITS) [instant time strategy].

Instant Time Strategy (ITS)

Por lo que he visto la estrategia en tiempo instantáneo es muy popular entre los desarrolladores de PBBGs.

Modelan combates enteros con ecuaciones y obtienen de manera inmediata el resultado de las peleas.

Aunque adecuado a la situación, este nivel de abstracción se me antoja demasiado alto para mi proyecto. Me llama la atención el implementar algo más cercano al tiempo real (o una mezcla de tiempo real y turnos).

Ahora con tecnologías como Ajax, lenguajes como Ruby y frameworks como Rails, no es tan complicado hacer un PBBG.

Ya que andamos hablando de tecnologías, les presento mi stack de desarrollo.

Mi development stack

Aquí pongo la lista de las herramientas que estoy utilizando para llevar a cabo este proyecto:

  • Linux (nada mejor para el desarrollo en general)
  • PostgreSQL (una robusta base de datos)
  • Ruby (sigo enamorado de este lenguaje)
  • Rails (web development framework)
  • jQuery (javascript framework)
  • Formtastic (excelente para lidiar con formas)
  • Authlogic (para implementar la autenticación de usuarios)
  • Haml (lenguaje para escribir las vistas HTML de la aplicación)
  • Sass (lenguaje para escribir el CSS de la aplicación)
  • Compass (framework CSS para hacer el layout de la aplicación)
  • git (version control system)
  • emacs (editor de código)

Tengo grandes planes para este PBBG: misiones, peleas entre clanes, clases variadas, habilidades especiales, mercado, subastas y una vibrante comunidad a su alrededor.

Pero como todo: debe empezar por algún lado.

Modelando los combates

Veamos un elemento que considero fundamental para este PBBG: El sistema de batallas.

En mi caso particular, si algo deseo ver funcionando primero son los combates.

Había comentado antes que quiero mis batallas en tiempo real (o algo que se le acerque). El tiempo real que puedes conseguir en una aplicación web no es el común de 60 fps de los videojuegos tradicionales.

Aquí tienes que pensar en término de peticiones por segundo a tu servidor web. GET, POST, params, sesiones, etc.

A continuación pongo una lista con algunas de las características que me gustaría ver en el sistema de batallas:

Representar y llevar a cabo un combate entre varios participantes

  • Duelos entre jugadores
  • Duelos entre NPC y jugadores
  • Duelos entre grupos de jugadores

Durante el combate los personajes podrán hacer uso de habilidades especiales, objetos y armas

  • Un guerrero puede dar un golpe especial con su arma
  • Un brujo puede hacer uso de alguna magia
  • Un guerrero puede hacer uso de una poción para curarse

En la pelea, los jugadores podrán seleccionar un objetivo para atacar

  • Un guerrero puede seleccionar al enemigo de su preferencia para recibir sus ataques

En el próximo artículo pondré algo de código del sistema de batallas, las decisiones de diseño que se tomaron y una breve explicación de cómo funciona.

Suena bien para comenzar, ¿no?

Artículos relacionados:

Ruby steering behaviors

steering_b1

O, como dirían en español:
Comportamientos de dirección en Ruby.

Estos sirven para crear agentes autónomos que navegan un ambiente. Un agente armado con estos comportamientos puede ir tras otro, huir de él, esconderse, ser parte de una formación, etc.

Unos de los más interesantes de observar son los comportamientos en manada (flocking behaviors), pero sobre eso ya vendrá otro artículo. :)

En este fin de semana programé estos cuatro:

  • Seek (búsqueda)
  • Flee (huir)
  • Arrive (llegar)
  • Pursuit (persecusión)

Espero poder incluir los demás pronto, aunque creo que refactorizaré un poco antes de implementar más cosas.

Estoy planeando usarlos en mi siguiente juego, que como les había comentado es un clon del Missile Commander (ese donde tenías que derribar los misiles enemigos con los propios antes de que tocaran el suelo y destruyeran tu base).

El código

No está comentado por el momento y seguramente se puede mejorar en muchas partes, ya lo iré limpiando y ajustando en las próximas semanas.

Entre las cosas que contiene hay una clase llamada Viewport que creé para poder jugar con mis agentes en un espacio más grande sin que el tamaño de la pantalla fuera una limitante. Velo como un sandbox que puedes configurar con un tamaño arbitrario.

Por ejemplo, puedes tener un espacio virtual de 4000×3000 pixeles dentro de un viewport que mide 800×600 pixeles (reales) dentro de tu pantalla configurada a 1024×768.

Además se comporta como un toroide, es decir, los agentes pasan de un lado al otro, no pueden salirse de él.

Esto lo implementé porque estoy pensando mostrar cada comportamiento en un viewport diferente, pero todos en la misma pantalla.
Creo que también se podría usar para implementar un mini mapa, ¿no?

El demo

Hay tres agentes de diferentes colores en el demo.

Usa tu ratón. Al dar clic en algún lugar de la pantalla se pondrá una marca verde y sucederán 3 cosas:

  • El agente verde huirá de ella.
  • El agente blanco llegará a ella.
  • El agente rojo perseguirá al blanco, prediciendo su posición futura, ésta se muestra como una marca blanca enfrente del agente blanco.

Presiona D para ocultar el texto informativo.
Presiona Esc para salir del demo.

Pueden bajar la aplicación demo de GitHub: ruby_steering_behaviors

Estoy usando como referencia el excelente libro: Programming AI by Example.

Implementación en C++

Para los que anden buscando una implementación en C++ existe OpenSteer.

OpenSteer is a C++ library to help build steering behaviors for autonomous characters in games and animation. OpenSteer provides an app which displays predefined demos of steering behaviors. You can prototype, visualize and debug your own as a plug-in.
License: MIT License

Artículos relacionados:

Rubytris en GitHub

rubytris

Sólo para informarles que mi proyecto ya tiene un hogar en GitHub :D

Rubytris (¡con nuevo nombre!)

 
Este fin de semana refactoricé un buen de código, aunque visualmente no cambió mucho, por dentro es básicamente otro. :)

Si usan git y lo quieren probar, solo deben hacer un:

1
git clone git://github.com/lobo-tuerto/rubytris.git

El siguiente fin de semana le volveré a meter mano, creo que es una buena idea terminar bien este proyecto antes de saltarme a otro. ;)

Artículos relacionados:

Una manita de gato al clon de Tetris

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

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:

Cómo instalar PostgreSQL en Ubuntu 9.04 y 9.10

postgresql-pwns-mysql

Acabo de incorporarme a un proyecto en Rails en el que usan PostgreSQL, y como recién formateé y le puse Ubuntu 9.04 a la laptop, necesito ahora instalarle ese manejador de base de datos.

Y es un buen pretexto para por fin escribir la guía de cómo instalarlo en Ubuntu.

Como siempre, vamos a la consola y tecleamos:

1
sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev pgadmin3

Eso instala el cliente y servidor de la base de datos, algunos scripts de utilería y la aplicación pgAdmin para administrar la base de datos. El paquete de libpq-dev nos servirá para poder compilar la gema Ruby de PostgreSQL más adelante.

Confirmemos que la instalación terminó adecuadamente teclando:

1
psql --version

En mi caso la respuesta fue:
psql (PostgreSQL) 8.4.2

Cambiar la contraseña del usuario administrador

Ahora necesitamos establecer la contraseña del usuario administrador postgres. Teclea la siguiente línea en la terminal (cambia la palabra password por la contraseña que desees usar):

1
2
3
sudo su postgres -c psql
ALTER USER postgres WITH PASSWORD 'password';
\q

Eso altera la contraseña dentro de la base de datos, ahora necesitamos hacer lo mismo para el usuario Linux postgres:

1
2
sudo passwd -d postgres
sudo su postgres -c passwd

Te aparecerá un prompt, introduce la misma contraseña que pusiste antes.

Poner a punto pgAdmin

Listo, de ahora en adelante podemos usar pgAdmin o la terminal para administrar nuestra base de datos como el usuario postgres. Pero antes de que te metas a pgAdmin deberías configurar el PostgreSQL Admin Pack, que te permite llevar un mejor registro y monitoreo de tu base de datos.

Ejecuta lo siguiente desde la línea de comandos en tu terminal:

1
sudo su postgres -c psql < /usr/share/postgresql/8.4/contrib/adminpack.sql

Para ejecutar pgAdmin ve a tu menú de aplicaciones:
Aplicaciones → Programación → pgAdmin III

Cambiar el esquema de autentificación de PostgreSQL

Al ejecutar algunos comandos de base de datos, es posible que te encuentres con un error que dice algo como:

FATAL: la autentificación Ident falló para el usuario «x»

Para evitarlo necesitas editar el archivo /etc/postgresql/8.4/main/pg_hba.conf y cambiar el esquema de autentificación. Abre el archivo con privilegios de root:

1
sudo gedit /etc/postgresql/8.4/main/pg_hba.conf

Y cambia esto:

1
2
# "local" is for Unix domain socket connections only
local all all ident

Por:

1
2
# "local" is for Unix domain socket connections only
local all all md5

Reinicia el servidor de PostgreSQL tecleando en tu terminal:

1
sudo /etc/init.d/postgresql-8.4 restart

PostgreSQL Ruby gem

Si planeas usar PostgreSQL dentro de Ruby, necesitarás esto:

1
sudo gem install postgres

En Rails, puedes crear una aplicación configurada para usar PostgreSQL con este comando:

1
rails miaplicacion -d postgresql

¡Listo! :D

Recursos

Install PostgreSQL on Ubuntu 8.04 (cómo acceder de manera remota a tu servidor)
Switching Rails to PostgreSQL

Artículos relacionados:

Cómo instalar Ruby/Gosu en Ubuntu 9.04 Jaunty Jackalope

ruby.jpg

Gosu es un framework escrito en C++ para desarrollar juegos 2D. Cuenta con bindings para Ruby, y eso, es lo que nos interesa — tee-hee!
Además lo necesitas, si quieres probar el clón de Tetris que escribí. :)

Instalación de dependencias para Ruby 1.8

Para instalar la gema Gosu, necesitarás los siguientes paquetes:

  • g++
  • libgl1-mesa-dev
  • libpango1.0-dev
  • libboost-dev
  • libsdl-mixer1.2-dev
  • ruby
  • ruby1.8
  • ruby1.8-dev

Copia y pega el siguiente comando en tu terminal:

1
sudo apt-get install g++ libgl1-mesa-dev libpango1.0-dev libboost-dev ruby ruby1.8 ruby1.8-dev libsdl-mixer1.2-dev

Instalación de la gema

Ahora instala Gosu como gema con el comando:

1
sudo gem install gosu

Con los paquetes mencionados arriba ya instalados, la gema se compilará sin problemas.

Instalación de dependencias adicionales para el soporte de OpenGL en algunos ejemplos

En algunos ejemplos del framework Chingu requieren que la gema ruby-opengl esté disponible. Instálala tecleando esto en tu terminal:

1
2
sudo apt-get install libgl1-mesa-dri libglu1-mesa freeglut3 libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev
sudo gem install ruby-opengl

Soporte para Ruby 1.9

Para usar Gosu con Ruby 1.9, sólo reemplaza todas las ocurrencias de 1.8 por 1.9. El comando para instalar las dependencias, queda entonces como:

1
sudo apt-get install g++ libgl1-mesa-dev libpango1.0-dev libboost-dev ruby1.9 ruby1.9-dev libsdl-mixer1.2-dev

Después de eso, sudo gem install gosu debería funcionar sin problemas.

Recursos

Para usar la versión C++ de Gosu y/o instalarlo en otras plataformas, checa:
GettingStartedOnLinux
GettingStartedOnOsx
GettingStartedOnWindows

Artículos relacionados:

Lobos en línea

De pata de lobo

Horizonte en el desierto 3/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 3/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Horizonte en el desierto 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 1/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Horizonte en el desierto 1/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007] Atardecer entre matorrales 2/3.
Desierto de Real de Catorce, San Luis Potosí, México. [Febrero 2007]

Qué estoy haciendo...

Posting tweet...

Powered by Twitter Tools

Mapa de visitas

Mira…

Calendario

septiembre 2010
L M X J V S D
« ago    
 12345
6789101112
13141516171819
20212223242526
27282930  

FireStats icon Con la potencia de FireStats