Shoes es un pequeño entorno multi-plataforma para escribir aplicaciones gráficas en Ruby.
El objetivo de Shoes no es generar aplicaciones de muy alta complejidad, sino más bien ser una plataforma para desarrollar utilidades o fundamentalmente, aprender y practicar. Sin embargo, a veces es sorprendente el nivel de cosas que se pueden llegar a lograr.
Shoes está basado en Ruby y puede utilizarse en Windows, Mac OS X o Linux, y el proyecto fue iniciado originalmente por _why, una celebridad del mundo Ruby que desapareció de la web en agosto de 2009, sin que se sepa más de él, cerrando todas sus cuentas, pero dejó además de Shoes, una serie de productos notables como la clásica "Why's (poignant) Guide to Ruby", realmente un libro completo sobre Ruby pero completamente ilustrado y muy divertido, licenciado bajo Creative Commons (libro completo en pdf comprimido como zip).
Pero volvamos a Shoes. Así describía _why algunas de las cosas que se pueden hacer con esta herramienta, en la guía original "Nobody Knows Shoes":
Y veamos algunos ejemplos en la práctica, con un poco de código y capturas de pantalla, empezando con algo similar al canónico "Hola, Mundo":
Shoes.app :width => 300, :height => 200 do
2 button("Click me!") { alert("Good job.") }
3 end
Da por resultado lo siguiente, en Windows, Linux y OS X, respectivamente:
Y un ejemplo un poco más complicado, pero donde pueden ver lo sencillo y práctico de este entorno:
#
# Shoes Clock by Thomas Bell
# posted to the Shoes mailing list on 04 Dec 2007
#
Shoes.app :height => 260, :width => 250 do
@radius, @centerx, @centery = 90, 126, 140
animate(8) do
@time = Time.now
clear do
draw_background
stack do
background black
para @time.strftime("%a"),
span(@time.strftime(" %b %d, %Y "), :stroke => "#ccc"),
strong(@time.strftime("%I:%M"), :stroke => white),
@time.strftime(".%S"), :align => "center", :stroke => "#666",
:margin => 4
end
clock_hand @time.sec + (@time.usec * 0.000001),2,30,red
clock_hand @time.min + (@time.sec / 60.0),5
clock_hand @time.hour + (@time.min / 60.0),8,6
end
end
def draw_background
background rgb(230, 240, 200)
fill white
stroke black
strokewidth 4
oval @centerx - 102, @centery - 102, 204, 204
fill black
nostroke
oval @centerx - 5, @centery - 5, 10, 10
stroke black
strokewidth 1
line(@centerx, @centery - 102, @centerx, @centery - 95)
line(@centerx - 102, @centery, @centerx - 95, @centery)
line(@centerx + 95, @centery, @centerx + 102, @centery)
line(@centerx, @centery + 95, @centerx, @centery + 102)
end
def clock_hand(time, sw, unit=30, color=black)
radius_local = unit == 30 ? @radius : @radius - 15
_x = radius_local * Math.sin( time * Math::PI / unit )
_y = radius_local * Math.cos( time * Math::PI / unit )
stroke color
strokewidth sw
line(@centerx, @centery, @centerx + _x, @centery - _y)
end
end
Todo esto da por resultado este coqueto reloj analógico, que obviamente, funciona:
Espero haber generado interés suficiente. La mejor manera de familiarizarse con Shoes (y probablemente con Ruby, para quien no lo hizo) es descargarlo y empezar a divertirse.