Una comparación del rendimiento de los frameworks de Ruby: Sinatra, Padrino, Goliat y Ruby on Rails

El objetivo de este artículo, realizado originalmente por , es encontrar el mejor framework Ruby para una aplicación muy básica. Utilizaremos las últimas versiones de los entornos Sinatra, Padrino, Goliat y RoR.

Para correr las pruebas, se utilizó la siguiente infraestructura y configuraciones: ApacheBench 2.4.3 ab -n 1000 -c 100 localhost , un 2,3 GHz Intel Core i5 Sandy Bridge CPU , 4GB de DDR3 1333MHz RAM, 120 GB SSD Intel 330 , OS X Mavericks 10.9.1 , Ruby 2.0.0p247 y MySQL 5.6.14 en un entorno de desarrollo Sinatra. Las tablas a continuación contienen datos sobre el tiempo que se tarda en procesar 1.000 peticiones.

 

Sinatra 1.4.4

Web Server No Views and DB Views (Slim) Views (Slim) + MySQL (Sequel)
WEBrick 1.6.1 3.663 ms 8.594 ms 8.931 ms
Thin 1.6.1 0.626 ms 5.730 ms 7.159 ms
Unicorn 4.8.1 1.651 ms 8.240 ms 8.235 ms

 

Vamos a empezar con Sinatra. Resultó que Unicorn funciona más rápido con MySQL y Views que con sólo Views, ya que la diferencia es muy pequeña ( 0,005 s ), esto podría ser debido a un error.

Para eliminar cualquier inexactitud, volvemos a comprobar todos los resultados controvertidos muchas veces y tenemos valores bastante estables. Pero atención, se debe tener cuidado al construir aplicaciones de alta carga, ya que cualquier pequeño cambio pueden hacerlos más lentos. Recomendamos que siempre ejecute las pruebas en el servidor Web que desea utilizar en la producción.

Ya que Thin ha demostrado los mejores resultados, manteniendo la aplicación muy simple, decidimos utilizarla para el resto de las pruebas.

Padrino 0.11.4

Cache No Views and DB Views (Slim) MySQL (Sequel) Views (Slim) + MySQL (Sequel)
No cache 0.729 s 6.663 s 1.388 s 7.372 s
Memory 0.662 s 6.218 s 1.170 s 7.140 s

 

Aunque el framework Padrino está construido sobre Sinatra, con un montón de características útiles, como en Rails, su rendimiento sigue siendo similar a la de una aplicación limpia de Sinatra. Esta es una muy buena noticia para nosotros.

Goliath 1.0.2

No Views and DB Views (Slim) MySQL (Sequel) Views (Slim) + MySQL (Sequel)
2.075 s 7.477 s 4.314 s 10.184 s

 

Los resultados de Goliath se ven un poco extraños, porque esperábamos que este fuera el marco más rápido, gracias a su servidor HTTP incorporado. Si lo prueban y obtienen resultados diferentes, por favor no duden en señalarlo que en los comentarios con las características de su versión del test.

Rails 4.0.2

No Views and DB Views (Slim) MySQL (Sequel) Views (Slim) + MySQL (Sequel)
1.539 s 1.790 s 2.248 s 2.501 s

 

También decidimos testear Rails 4.0.2. Para las pruebas, habilitamos las clases de almacenamiento en caché en development.rb y deshabilitado sesiones y protección contra la falsificación. También utilizamos el toolkit de base de datos Sequel en lugar de ActiveRecord para que los resultados fueran más confiables. Como puede verse, resultó estar muy cerca de Goliat, y hasta un poco mejor.

Pueden mirar las aplicaciones que he creado para los testeos para asegurarse que son muy similares.

Confiamos en que esta información los ayude a elegir el framework Ruby correcto para su aplicación.

También puedes leer el artículo completo en inglés.

LikeFolio: invierte en lo que “sabes” (Fox Business Video)

Nuestro compañero, Alex Khizhnyak, nos trae la entrevista que realizó Fox Business a Nicole Sherrod de TD Ameritrade.

En el vídeo a continuación, ella está hablando sobre el éxito de LikeFolio, un proyecto web que ayuda a los inversores en línea mediante el análisis de datos de los medios sociales. Altoros ayudó SwanPowers, un socio de TD Ameritrade, la construcción de esta aplicación, que se basa en el concepto de “invertir en lo que sabes”. El sistema agrega sus conversaciones, actualizaciones de estado, gustos, y el check-in desde las redes sociales y traduce estos datos en ideas de inversión (utilizando la información de salida a bolsa).

 

Altoros fue invitado como Mentor al Workshop de dos días en la Conferencia de Ruby de Los Angeles

La Conferencia sobre Ruby de Los Angeles comenzó con un workshop de dos días. Lo más destacable de este evento es que los participantes podían no sólo acceder a conocimientos teóricos, sino también practicar con nuevas herramientas mientras colegas más experimentados hacían las veces de mentores.

Juan Pablo Genovese en L.A. Ruby Conference

Nuestro compañero, Juan Pablo Genovese, fue uno de los mentores invitados. Colaboró con los asistentes a probar distitos métodos de testeo A/B, como así también herramientas como Goliath, Httperf and JMeter. Como Juan Pablo mismo comentó: “estábamos aprendiendo como testear una web hasta la muerte”.

Chicas durante el segundo día del L.A. Ruby ConferenceAl día siguiente, los participantes pudieron asistir a un workshop gratuito organizado por RailsBridge, una organización sin fines de lucro que contribuye a la diversidad de la comunidad de Ruby. Esta organización ayudó a grupos de personas con baja representatividad en la comunidad a dominar Ruby para construir una comunidad Ruby más equilibrada. Nuestro desarrollador, Juan Pablo, fue invitado como mentor a compartir su rica experiencia.

Esta vez el workshop fue orientado a las damas. La única manera de que un hombre ingresara era trayendo una chica que quisiera aprender Ruby.

La conferencia de Ruby de Los Angeles tuvo lugar el pasado 21 y 22 de febrero, en Burbank, California.

beer-time

 

Este es el video con la participación de Juan Pablo

 

Te invitamos a leer también la crónica que realizó nuestra compañera Alena Vasilenko!

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

Corriendo Tests Capybara en navegadores remotos

Están preocupados por cómo sus aplicaciones funcinan en Internet Explorer? Creen que probando en la última versión del navegador usando distintos modos para emular versiones previas es suficiente? De ninguna manera! Incluso si nos saltamos algunas versiones antiguas, podemos encontrarnos con problemas que tienen muy poco soporte de json, etiquetas html5, ECMAScript, limites para los selectores CSS y muchos otros problemas que no pueden ser detectados con sólo cambiar el modo del navegador. Serán sorprendidos por algunos errores que se producen sólo bajo cierta plataforma y navegador. Para encontrar esos problemas, Eugene Melnikov, desarrollador Ruby de Altoros en Minsk, nos propone correr testeos capybara en navegadores remotos.

Usando una máquina virtual personal

  • Instale la máquina virtual con el navegador escogido. Puede utilizar su propia distribución o ievms
  • Asegúrese que Java y el navegador deseado están instalados en la VM
  • Corra en la VM Selenium Server
java –jar selenium-server-standalone-2.35.0.jar -role hub -multiWindow -browserSessionReuse
  • Corra el webdriver sobre la VM
java –jar selenium-server-standalone-2.35.0.jar -role webdriver -hub http://127.0.0.1:4444/grid/register -port 5555
  • Configure el reenvío del puerto TCP 4444 desde la máquina host a la guest.
  • Agregue a spec_helper.rb
if ENV["SELENIUM"] == 'remote'
   require 'selenium-webdriver'
    url = 'http://127.0.0.1:4444/wd/hub'
   capabilities = Selenium::WebDriver::Remote::Capabilities.internet_explorer
    Capybara.register_driver :remote_browser do |app|
     Capybara::Selenium::Driver.new(app,
                                    :browser => :remote, :url => url,
                                    :desired_capabilities => capabilities)
   end
    Capybara.server_port = 3010
   ip = `ifconfig | grep 'inet ' | grep -v 127.0.0.1 | cut -d ' ' -f2`.strip
   Capybara.app_host = http://#{ip}:#{Capybara.server_port}
   Capybara.current_driver = :remote_browser
   Capybara.javascript_driver = :remote_browser
 end
  • Corra los testeos
SELENIUM=remote bundle exec rspec spec/features/

Ahora puede fácilmente cambiar de IE a Chrome, Firefox o cualquier otro y correr el test de nuevo.

Usando browserstack

  • Cree una cuenta en browserstack
  • Descargue y copie BrowserStackTunnel.jar dentro de spec/support/
  • Asegúrese que java y curl están instalados en su máquina
  • Agregue a spec_helper.rb
  if ENV["SELENIUM"] == 'browserstack'
    require 'selenium-webdriver'

    url = "https://#{AppConfig.browserstack['username']}:#{AppConfig.browserstack['accesskey']}@hub.browserstack.com/wd/hub"
    capabilities = Selenium::WebDriver::Remote::Capabilities.new
    capabilities['browser'] = ENV['browser'] || 'IE'
    capabilities['browser_version'] = ENV['browser_version'] || '8.0'
    capabilities['os'] = 'Windows'
    capabilities['os_version'] = '7'
    capabilities['browserstack.tunnel'] = 'true'
    capabilities['browserstack.debug'] = 'true'

    Capybara.register_driver :browser_stack do |app|
      Capybara::Selenium::Driver.new(app,
                                     :browser => :remote, :url => url,
                                     :desired_capabilities => capabilities)
    end

    Capybara.server_port = 3010
    Capybara.default_wait_time = 10
    Capybara.current_driver = :browser_stack
    Capybara.javascript_driver = :browser_stack

    RSpec.configure do |config|
      config.before(:all) do
        `java -jar spec/support/BrowserStackTunnel.jar #{AppConfig.browserstack['accesskey']} 127.0.0.1,#{Capybara.server_port},0 -v >log/browserstack.log 2>&1 &`
        visit '/'
        until (`curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:45691`.to_i == 200)
          sleep 1
        end
      end
      config.after(:all) do
        `ps -ef | awk '/BrowserStackTunnel.*,#{Capybara.server_port},/{print $2}' | xargs kill -9`
      end
    end
  end
  • Corra los tests
SELENIUM=browserstack browser=IE browser_version=11.0 bundle exec rspec spec/features/

Supuestos

Probar en navegadores asume el uso de selenium webdriver. Deberá asegurarse que todos sus tests se pasen utilizando selenium si previamente usaba webkit u otro.

Conclusión

Al usar una MV personal se mantiene mayor control sobre los navegadores, se puede incluso cambiar el perfil de los navegadores entre otras opciones. Pero browserstack le permite correr sus tests sobre muchas y diferentes combinaciones de plataformas y navegadores hasta incluso emuladores de móviles sin instalaciones adicionales. Sin embargo, la velocidad de los test depende de la latencia de la red y el plan elegido. Afortunadamente, se puede correr pruebas en varios hilos a través de a ravés de distintos navegadores o tests. Además, ofrece la posibilidad de hacer testeos en vivo y depurar su aplicación local o carpeta con el prototipo. Se puede hasta chequear la capacidad de respuesta!

Puede encontrarse más información, siguiendo este link.

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

RubyConf Argentina 2013

RubyConf Argentina 2013Altoros Argentina es sponsor, una vez más, de la RubyConf Argentina.

Como lo hace desde el 2011, Altoros Argentina, es partner de la conferencia regional sobre Ruby y tecnologías relacionadas más importante de la comunidad Ruby de Latinoamérica.

Al respecto, Manuel García, Director de las oficinas en Santa Fe, nos dice:

Nos enorgullece brindar apoyo a la comunidad rubysta, porque compartimos los ideales del software libre y de la inteligencia colectiva y queremos que esta comunidad crezca y se fortalezca

La RubyConf Argentina 2013 se realizará en Buenos Aires, los días 27 y 28 de Noviembre en la Ciudad Cultural Konez (Sarmiento 3131 – CABA)

Ya tienen confirmada su presencia importantes speakers, como Brock Whitten (Harp platform), Thomas Edward Figg (Code Club), Ostap Cherkashin (Mingle), Jano González (HopIn) y Linda Sandvik (Code Club).

DigitalOcean, un nuevo y asombroso hosting VPS

DigitalOcean- es un nuevo y asombroso hosting VPS,  barato y fácil de usar, que puede convertirse en una de las opción interesante para startups, proyectos pequeños y en rápido crecimiento.

El servicio provee una precio asequible, a partir de 5 US$ / mes, y las facturas por hora. Esto se combina con la facilidad de uso: todo lo que necesita es conseguir una IP dedicada y acceso de root a su servidor, y ya puede empezar a trabajar, pues el panel de control es muy simple. DigitalOcean utiliza discos duros SSD y una red rápida que ofrecen velocidad de trabajo al los servidores. Por otra parte, el servicio promete audazmente un tiempo de actividad del 99,99% en la red, energía y disponibilidad del servidor virtual. Combine todo esto, y obtendremos una interesante solución para considerar.

Pero, excépticos, seguramente pensaremos: ¿dónde está la trampa? Para más detalles, por favor, lea la información sobre  DigitalOcean que el desarrollador de Ruby de Altoros, Eugene Melnikov, ha escrito:  http://altoros.github.io/2013/digitalocean-new-amazing-cloud-vps-hosting

Mandrill: un servidor SMTP gratuito para aplicaciones

Correos electrónicos transaccionales son parte importante de cualquier proyecto o negocio, no importa si se trata de una nueva empresa o una gran empresa. Pero si bien las grandes empresas pueden pagar la enorme cantidad de correos enviados y los costos de los servicios de distribución de correo, las empresas más jóvenes suelen buscar opciones más baratas. Mandrill de MailChimp es una de estas opciones.

Se trata de un servicio de distribución de correo transaccional que permite el envío de hasta 12.000 correos electrónicos por mes de manera gratuita. Si se necesita más, hay varias opciones a precios asequibles.

Mandrill brinda soporte para registros SPF y DKIM que garantizan que su correo electrónico no será considerado como spam por la mayor parte de los servicios de e-mail. Además, permite el seguimiento de estados de correo electrónico, como enviar, rebotados, recibidas, hecho clic, marcados como spam, etc. También es compatible con las plantillas y etiquetas especiales para las pruebas A / B, lo cual siempre es una ventaja.

Por favor, lea la descripción completa del servicio por nuestro especialista Eugene Melnikov, siguiendo este enlace http://altoros.github.io/2013/mandrill-free-smtp-server-for-application

ALTOROS Argentina dijo presente en el FLISOL 2013

Hace unos días, la Escuela de Artes Visuales “Prof. Juan Mantovani” (Santa Fe, Argentina) alojó al Festival Latinoamericano de Instalación de Software Libre (FLISOL) en cuyo marco Julio Lucero, Gastón Ramos y Pablo Oldani, tres desarrolladores de Altoros Argentina, brindaron charlas.

De esta manera, el primero de nuestros compañeros que tomó la palabra fue Gastón Ramos con su charla “Como viajar en el tiempo con mucho menos que un DeLorean”. En ella, exploró los problemas que enfrentan los programadores a la hora de reconocer cuál es la versión que “funciona” para entregar. En este sentido, Gastón defendió la tesis de que es necesario usar un sistema de control de versiones para gestionar los cambios en nuestros proyectos y explicó los fundamentos básicos de los sistemas de control versiones y los comandos principales de git.

A continuación, fue el turno de Pablo Oldani, quien brindó una “Introducción a Ruby” a través de la que se repasaron conceptos básicos del lenguaje y una breve explicacion de la filosofía y objetivos que fueron planteados al desarrollar ruby.

Finalmente, Julio Lucero repasó las palabras de Lawrence Lessig (creador de Creative Commons) basándose en la película “RIP: Remix Manifesto” en donde mostró algunos ejemplos de lo que pasó a lo largo de la historia en cuanto a la música, lo artístico, etc.