code

Un concurso de bots de juegos en una RoR Meetup

Nuestra compañera, Olga Kurylionak, nos comparte lo sucedido en la Meetup de Ruby on Rails que se realizó en en Minsk, Bielorrusia (Europa del Este) el pasado 14 de septiembre.

En ella, más de 80 expertos en Ruby de la comunidad de desarrolladores de ese país discutieron sobre Ruby on Rails, cloud, entre otros temas. Cabe destacar que la comunidad de Ruby on Rails de Bielorrusia está patrocinada por Altoros,

Durante el encuentro, los participantes tuvieron la oportunidad de probar sus habilidades como programadores en un concurso de Codenjoy, un framework de entrenamiento para desarrolladores de código abierto.

Para el evento, nuestro equipo creó un conector en Ruby para este servicio. Los desarrolladores que participaron del concurso, pudieron escribir bots que jugaran al Tetris.

Miren el video para vero cómo competían los bots:

– Vea más en: http://blog.altoros.com/gaming-bots-ror-meetup.html#sthash.vE9PTOX9.dpuf

Implementando una Plataforma de Debate-Discurso con Juju

Con más de 100 servicios listos para implementar, Juju permite construir entornos públicos y privados y gestionarlo con sólo un par de comandos. Se puede seleccionar un componente de sistema listo (llamado charm) desde una tienda especial y empezar a combinar los elementos para crear el entorno que se necesita.

Sin embargo, ¿qué hacer si se necesita una solución que no está disponible en la tienda?

En Altoros se ha creado un Rack charm para Juju que simplifica la instalación de las aplicaciones Ruby on Rails y Sinatra en las plataformas en la nube soportadas por Juju.

En este post, Pavel Pachkovskij, desarrollador Ruby, nos brinda una guía de cómo implementar Discourse, una plataforma de siguiente generación para discusiones de una comunidad, usando Juju y el Rack charm.

Para empezar, se necesitará tener correctamente configurado un entorno Juju. Podemos aprender a hacerlo desde aquí.

Si quiere leer el artículo completo desde la página GitHub de Pavel y averiguar cómo agregar Discourse a su consola de administración Juju siga este link.

Les recomendamos leer también http://blog.altoros.com/deploying-the-discourse-discussion-platform-with-juju-service-orchestration.html#sthash.YbP3LBDg.dpuf

El poder de los enumeradores

Ruby viene equipado con la clase Enumerator, que inclue Enumerable. Esta clase es muy útil para un par de cosas, pero es realmente buena para generar secuencias (posiblemente infinitas).

Vamos con un clásica: la secuancia Fibbonacci puede ser implementada de esta manera:

fib = Enumerator.new do |yielder|
  a, b = 1, 0
  loop do
    yielder.yield b
    a, b = b, a + b
  end
end

fib.next #=> 1
fib.next #=> 1
fib.next #=> 2
fib.next #=> 3
fib.next #=> 5

fib.rewind # utilizar retroceso para restablecer el secuenciador
fib.next #=> 1
# y un montón de métodos de forma gratuita!

fib.take_while { |i| i <= 100 }
=> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

fib.first(10)
=> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

fib.select(&:prime?) # No deje que ruby asuma que su enumerador es finito (si no lo es)
=> '*colapso universal*' 

¿Qué pasa con las funciones matemáticas?

class Quadratic < Enumerator
  # argumentos de palabra clave, nuevos en Ruby 2.0
  # comprobar los enlaces para más información
  def initialize(a=0,b=0,c=0, floor: 0, ceiling: Float::INFINITY)
    super() do |yielder|
      x = floor
      while x <= ceiling do
        yielder << a*x**2 + b*x + c
        x += 1
      end
    end
  end
end

q = Quadratic.new 1, 0, 0, floor: -10, ceiling: 10

q.next
=> 100
q.next
=> 81
q.each.with_index { |n, i| puts "f(#{i-10})= #{n}" }
=> [10000,
 6561,
 4096,
 2401,
 1296,
 625,
 256,
 81,
 16,
 1,
 0,
 1,
 16,
 81,
 256,
 625,
 1296,
 2401,
 4096,
 6561,
 10000]

Ver más:

http://ruby-doc.org/core-2.0/Enumerator.html
http://blog.rubyhead.com/2013/02/26/ruby-2-0-getting-started-named-parameters/

Dos (o tres) potentes iteradores

Si ya tienes alguna experiencia de trabajo con Ruby, probablemente has tenido que lidiar con las colecciones.
Las colecciones pueden ser tediosas. Pero GAR (Gracias a Ruby) disponemos de un amplio arsenal para tratar con ellas!
En este post voy a mostrarte dos métodos iteradores de Ruby que realmente me agradan, sobre todo por su sencillez y belleza.

Mi caprichoso ejemplo

Hace poco, tuve que hacer un pequeño parser JSON para el feed público de Flickr, así que voy a usar algunos métodos de ese módulo como ejemplo para nuestro artículo.
Básicamente, el módulo tenía que ir a buscar un objeto JSON devuelto por la API de Flickr, y parsearlo a un objeto JSON de Ruby, chequeanbdo algunas validaciones.
Este tipo de funcionalidad no toma más de una docena de líneas de Ruby, pero es un buen ejemplo para lograr nuestro objetivo.

Nos centraremos en dos métodos para el módulo:

  • json_items: devuelve un array de hashes. Cada hash representa un elemento del feed de la API de Flickr.
  • check(item): comprueba si el hash dado satisface ciertas validaciones.

También nos saltaremos toda la codificación de la URL y algunas cosas de la validación para centrarnos en los métodos iterativos.

Por qué Coffeescript

Advertencia: Este artículo tiene la intención de fomentar un estilo de codificación (léase preferencias) que puede hacer su vida más fácil. Algunos de estas sugerencias podrían hacer que se parezca a ciertos lenguajes que pueden o no ser de su agrado de los lectores -o incluso ofenderlos. Venimos en paz, sin ánimo de faltarle el respeto a nadie.

Javascript es la única opción que tenemos como lenguaje interpretado por el navegador. Aunque potente, codificar la sintaxis JS pura, puede llegar a ser complicado, especialmente para los que vienen de lenguajes orientados a objetos como Ruby o Python. Coffescript aborda este problema con una solución transparente: un hermoso lenguaje que compila a JS. Como yo lo veo, CS tiene la intención de dejarlo hacer las cosas a manera de Ruby. Es decir, escribir menos, hacer más.