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.