Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas
Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas

jueves, 10 de febrero de 2011

Video: Kata con Números Romanos (Ruby, 15 minutos)

http://www.flickr.com/photos/mightyohm/3986677172/

Como comenté el viernes, ayer tuvimos la reunión mensual del grupo Agiles.org en Buenos Aires, dedicada a un Coding Dojo en el que practicamos un ejercicio entre la docena de asistentes, rotando de a pares y avanzando con TDD para resolverlo.

El ejercicio en si consiste en pasar de números arábigos (los que usamos todos los días) a números romanos. Esta antigua forma de numeración tiene la particularidad de ser un poco irregular con sus dígitos que restan antes de llegar a los múltiplos de 5 y 10, como en el caso del 4 (IV) y el 9 (IX).

Lo bueno de este ejercicio en particular es que es bastante corto y las reglas son conocidas por casi todo el mundo. En el Dojo de ayer (del que pronto espero publicar un video con al menos la introducción y algunos momentos) llevó bastante tiempo porque ibamos rotando entre gente con diferente grado de conocimiento de la plataforma y lenguaje elegido (Visual Studio y C#), el teclado era raro para todos (menos para el dueño), y para muchos era la primera vez con ejercicios de este estilo y/o TDD.

Mientras rotábamos practiqué el ejercicio varias veces por mi lado y sobre el final hice una versión bastante parecida a lo que obtuvimos entre todos.

Dejo el video para quien le pueda interesar, con las siguientes aclaraciones:

  • La respuesta no es la única correcta. De las que obtuve, es una de las más concisas.
  • Lo que grabé es lo que se considera un Kata: hice el ejercicio muchas veces y al final fluyó bastante. Dura 15 minutos incluyendo tiempo de escribir algunos comentarios que representan lo que iba pensando. Probé relatarlo pero el tiempo era más largo porque no puedo escribir el códido tan derecho.
  • Como siempre, la elección del entorno es arbitraria. Esta vez lo hice en Ruby usando unit/test que es lo más básico. Hice un uno con Ruby/RSpec pero me parece que va a llamar más la atención el framework de BDD que el ejercicio. Si hay interés puedo publicar otras variantes.
  • En un Randori Dojo, aunque el ejercicio es el mismo, la dinámica es totalmente diferente. Lleva mucho más tiempo pero el foco está más en la práctica de las interacciones y el juego de pares que en la técnica misma. Recomiendo mucho hacer las dos cosas. Los katas son ejercicios más individuales, los dojos como ensayos con una banda.
  • Espero que les guste la música. Si no, pueden dejar el video mudo. Todo lo demás está en el código.

martes, 1 de febrero de 2011

Meditación programática: Koans

Zen (http://www.flickr.com/photos/josefeliciano/3849557951)

Los Köan (pronunciación japonesa del chino 公案) o Koan, son ejercicios mentales de la meditación Zen, consistentes en diálogos o preguntas que plantean un problema que muchas veces no tiene respuesta directa. El objetivo de un Koan es el aprendizaje durante el proceso de elaboración de la respuesta, más que la respuesta en sí.

Un ejemplo clásico es la pregunta: "Cuando dos manos aplauden hay un sonido. ¿Cuál es el sonido de una sola mano?".

Tomando esta idea como base, de manera similar a la idea de los Code Katas que comentaba en un post reciente, diferentes personas empezaron a generar Code Koans para diferentes lenguajes. Como siempre, la adaptación es libre y no sigue exactamente los mismos principios, sino que e inspira en la idea motora.

Los Koans dentro del campo de la programación parten del objetivo de comenzar con conceptos sumamente básicos y realizar ejercicios generalmente abiertos, pero que frecuentemente llevan a la necesidad de experimentar o investigar un poco más allá del alcance mismo del planteo.

Hay colecciones de Koans para varios lenguajes, entre ellos Ruby Koans (Jim Weirich y Joe O'Brien), JavaScript Koans (Liam McLennan), .NET Koans (Cory Foy) y los Clojure Koans (Aaron Bedra).

La mayoría de estos proyectos están inspirados en el primero, los Ruby Koans, de los que incluyo algunos ejemplos para que se entienda el concepto general.

Los Koan suelen estar agrupados por temas, por ejemplo en los de Ruby, hay series para arrays, blocks, clases, excepciones, módulos, strings, y muchas más.

Los Koans se basan siempre en la práctica de Test-Driven Development (curso gratuito en español disponible), donde las "preguntas" están formuladas como tests, que el aprendiz debe implementar y pasar. La diferencia con TDD tradicional es que el test principal ya está escrito (lo que no significa que no podamos agregar más).

Lo primero a ejecutar en los Ruby Koans es (desde la línea de comandos):

$ ruby path_to_enlightenment.rb

y el resultado es algo como:

AboutAsserts#test_assert_truth has damaged your karma.

The Master says:
  You have not yet reached enlightenment.
  Do not lose hope.

The answers you seek...
  Failed assertion, no message given.

Please meditate on the following code:
  /Users/ . . . /koans/about_asserts.rb:10:in `test_assert_truth'

mountains are merely mountains
your path thus far [X_________________________________________________] 0/274

El mensaje juega con el estereotipo del Maestro Zen y el estilo de los consejos, pero más allá de eso, nos da un indicio: nos dice que meditemos en el método test_assert_truth dentro del archivo about_asserts.rb. Si abrimos este archivo y lo miramos, encontramos este test donde el motivo de la falla es más que obvio:

  # We shall contemplate truth by testing reality, via asserts.
  def test_assert_truth
    assert false                # This should be true
  end

Al cambiar a assert true y ejecutar de nuevo, obtenemos un mensaje similar sobre el siguiente test que falla, y otra frase Zen diferente para inspirarnos. Por supuesto, a medida que avanzamos la respuesta es menos evidente que cambiar un false a true. El primer ejercicio solamente sirve para que entendamos el procedimiento.

En varios casos, la manera de resolver el test no es evidente y tenemos que buscar más información en libros o en la web, pero esto es lo que buscan los Koans: forzarnos a aprender algo, pero siguiendo baby steps.

viernes, 28 de enero de 2011

Zapatero a tus zapatos; con Ruby

Shoes

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":

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:

GoodJob WinGoodJob Linux
GoodJob OS X

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:

Shoes Clock

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.

jueves, 9 de diciembre de 2010

Video: Virtual Alt.Net sobre Ruby on Rails

El pasado 20 de noviembre se realizó otra de las reuniones que organiza semanalmente la comunidad Alt.Net Hispano, esta vez dedicada a por completo a Ruby on Rails, y a cargo de Mario Chávez (Twitter: @mario_chavez).

Unable to display content. Adobe Flash is required.

Durante la sesión Mario recorre una serie de recursos interesantes que dejo detallados aquí para quienes quieran accederlos directamente:

  • Rails Hispano es un podcast sobre RoR en español, que se publica mensualmente, de media hora de duración.
  • Ruby on Rails Tutorials, de Michael Hartl: son varios tutoriales en video y texto, en inglés, y aunque hay parte del contenido pago, mucho es accesible en línea en forma gratuita.

Finalmente, agrego una noticia de color sobre Ruby. Para los fanáticos del Ratón Mickey puede ser interesante el anuncio de la primer conferencia Magic Ruby, a realizarse del 4 al 5 de febrero de 2011 en Disney's Contemporary Resort de Orlando, Florida, que conecta via monorail con los parques temáticos. Lo interesante de la conferencia es que es gratuita (aunque hay que pagar el pasaje y la estadía, claro).

 

lunes, 29 de noviembre de 2010

Keynote de RubyConf 2010 de Matz (el creador de Ruby)

Yukihiro 'Matz' Matsumoto

Encontré publicadas las keynotes de la última Ruby Conference ocurrida hace unos días en New Orleans.

Quienes quieran escuchar el divertido acento de Matz hablando en inglés, pueden ver el video, que lamentablemente no está disponible para embeber en este post.

Durante la presentación habló entre otras cosas sobre las novedades planificadas para Ruby 2.0 y algunos proyectos como Rite, la implementación que está diseñando para correr embebida en dispositivos pequeños como relojes, teléfonos o televisores inteligentes.

Para quienes quieran simplemente revisar el material de la presentación, si ubiqué los slides que incluyen todo el contenido, incluyendo algunas bromas, y si pude embeber aquí abajo:

 

 

viernes, 19 de noviembre de 2010

Atención Zombies: Ruby on Rails los espera

Rails for Zombies

La gente de EnvyLabs acaba de presentar su última poducción: Rails for Zombies.

Bajo este título que juega con el reciente rebrote de zombies en el cine, la televisión y la sección de política de los diarios, el sitio es en realidad un excelente recurso para aprender Ruby on Rails.

Para los que no conocen bien Ruby, es recomendable pasar primero por el tutorial en línea TryRuby, para tener una base mejor, aunque el contenido de este curso es realmente básico.

El material está realmente bien producido, con introducciones en video y prácticas dentro del browser donde se presentan problemas que uno tiene que resolver escribiendo código que es validado en el momento (y funciona mejor que TryRuby, que a veces tiene algunos problemas).

No esperen convertirse en expertos con este recurso, pero es una buena introducción a este framework de desarrollo web que muestra su simplicidad y elegancia, y adicionalmente dentro de un contexto divertido.

 

miércoles, 27 de octubre de 2010

MacRuby 0.7 disponible

macruby_logo.png
La noticia es de principios de mes, pero más vale tarde que nunca.
Esta versión de Ruby para Mac OS X es la primera en implementar la versión 1.9.2 de Ruby, pasando el 90% de las pruebas en RubySpecs, lo que es un avance enorme aunque todavía no alcanza para correr Rails.
El soporte para Cocoa ya estaba estable, pero se extendió a permitir bloques en C, lo que facilita la pasar tanto bloques como punteros C a algunas APIs. Esto es gracias al uso de BridgeSupport, que permite completar la metadata necesaria en LLVM (el motor de ejecución de Mac OS) para interactuar con Cocoa, Objective-C y C en general.
Hay mejoras también en el manejo de Sandbox, Concurrencia y Rendimiento en general. Por ejemplo, esta versión aprovecha directamente el nuevo thread pool de Snow Leopard, parte de Grand Central Dispatch.

martes, 26 de octubre de 2010

IronPython y IronRuby liberados como Open Source

Después de atravesar una situación compleja tras el alejamiento de Jimmy Schementi de Microsoft, quien lideraba gran parte de los esfuerzos por mantener las implementaciones de Python y Ruby sobre el framework .NET, y tras especulaciones y charlas de las que algún día nos enteraremos, la historia ha tenido  un desenlace positivo.

En su último post, Jason Zanders, responsable máximo del equipo de Visual Studio, anunció que ambos lenguajes, que ya habían sido cambiados a licencia Apache 2.0, quedaron definitivamente liberados para ser mantenidos por la comunidad, incluyendo los agregados recientes de integración para ambos dentro de Visual Studio.

La mejor noticia, desde mi humilde punto de vista, es que los coordinadores de los proyectos son Miguel de Icaza, Michael Foord, Jeff Hardy, y Jimmy Schementi para IronPython, y Miguel y Jimmy para IronRuby.

No quiero especular, pero es totalmente esperable que ambos lenguajes mejoren el nivel de soporte en Mono y sobre todo en MonoDevelop, lo que puede seguir potenciando Mono como motor de desarrollo multi-plataforma, cubriendo desde *nix, Windows, Mac OS, dispositivos embebidos, teléfonos y hasta consolas de juego.

Para quienes no lo han visto todavía, en el último release de IronRuby (antes de pasar el proyecto a la comunidad) el equipo ya incluye integración con Visual Studio, con una serie de templates sumamente interesantes, como puede verse en esta pantalla: