Mirah & Dubious Talk Ruby|Web 2010

1,742 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,742
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Mirah & Dubious Talk Ruby|Web 2010

  1. 1. Friday, September 10, 2010
  2. 2. Extreme Performance with Mirah and Dubious Friday, September 10, 2010
  3. 3. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  4. 4. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  5. 5. Friday, September 10, 2010
  6. 6. JRuby on AppEngine It rocks, but has some limitations. Friday, September 10, 2010
  7. 7. Limitations • Not as supported as Java & Python • Long spin up times • Uses more CPU(more expensive) • getting more performance requires writing Java Friday, September 10, 2010
  8. 8. Spin Up • Rails app instances take a long time to spin up • you can’t keep app instances running (yet) Friday, September 10, 2010
  9. 9. Long Spin Up Times • Rails instances take 16 seconds or more to spin up • AppEngine limits requests to 30 seconds • Users will hit cold instances Friday, September 10, 2010
  10. 10. Spin Up Workarounds DeferredDispather • Splits Initialization into three requests(two redirect back) • runtime & rack • require app • dispatch normally Friday, September 10, 2010
  11. 11. Friday, September 10, 2010
  12. 12. CPU Usage • On AppEngine CPU == $$$$ • JRuby uses more CPU than Java or Python Friday, September 10, 2010
  13. 13. CPU Usage • On AppEngine CPU == $$$$ • JRuby uses more CPU than Java or Python Friday, September 10, 2010
  14. 14. JRuby on AppEngine Optimization 1. Write app in Rails 2. Find parts that are slow/get heavy traffic 3. Rewrite them with Java Servlets Friday, September 10, 2010
  15. 15. Kinda Sucks, Right? Friday, September 10, 2010
  16. 16. Enter Mirah & Dubious Friday, September 10, 2010
  17. 17. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  18. 18. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  19. 19. Mirah (Duby) Friday, September 10, 2010
  20. 20. Mirah - Ruby in Javanese Friday, September 10, 2010
  21. 21. “Charles Oliver Nutter wanted to create a language that essentially looked like Ruby, but was statically typed and compiled to fast JVM bytecode. Mirah is the result.” - mirah.org Friday, September 10, 2010
  22. 22. Mirah • Uses Ruby syntax+types • Behaves like Java • Extensible through macros Friday, September 10, 2010
  23. 23. Features From Ruby • Optional arguments ✓ • Internal iteration ✓ • Closures ✓ • Literals ✓ • String interpolation ✓ • Mixins, “open” classes (soon) Friday, September 10, 2010
  24. 24. Ruby def fib(a)   if a < 2     a   else     fib(a - 1) + fib(a - 2)   end end Friday, September 10, 2010
  25. 25. Mirah github.com/mirah/mirah/examples/fib.mirah def fib(a:int)   if a < 2     a   else     fib(a - 1) + fib(a - 2)   end end Friday, September 10, 2010
  26. 26. Macros Friday, September 10, 2010
  27. 27. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  28. 28. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  29. 29. Dubious Friday, September 10, 2010
  30. 30. Dubious A Web Framework in Mirah Friday, September 10, 2010
  31. 31. Friday, September 10, 2010
  32. 32. High Performance, Light weight, Rails like Friday, September 10, 2010
  33. 33. High Performance, Light weight, Rails like Friday, September 10, 2010
  34. 34. Written in Mirah, so it’s as fast as Java. Friday, September 10, 2010
  35. 35. App Instances Spin Up in ~1 sec Friday, September 10, 2010
  36. 36. High Performance, Light weight, Rails like Friday, September 10, 2010
  37. 37. Few Dependencies Friday, September 10, 2010
  38. 38. Examples Friday, September 10, 2010
  39. 39. High Performance, Light weight, Rails like Friday, September 10, 2010
  40. 40. import dubious.* import models.* class ContactsController < ApplicationController   # GET /contacts   def index     @contacts = Contact.all.run     render index_erb, main_erb   end   # GET /contacts/1   def show     @contact = Contact.get(params.id)     render show_erb, main_erb   end   # GET /contacts/new   def new     @contact = Contact.new     render new_erb, main_erb   end   # GET /contacts/1/edit   def edit     @contact = Contact.get(params.id) Friday, September 10, 2010
  41. 41. import dubious.* import models.* class ContactsController < ApplicationController   # GET /contacts   def index     @contacts = Contact.all.run     render index_erb, main_erb   end   # GET /contacts/1   def show     @contact = Contact.get(params.id)     render show_erb, main_erb   end   # GET /contacts/new   def new     @contact = Contact.new     render new_erb, main_erb   end   # GET /contacts/1/edit   def edit     @contact = Contact.get(params.id) Friday, September 10, 2010
  42. 42. import dubious.* import models.* class ContactsController < Appli   # GET /contacts   def index     @contacts = Contact.all.run     render index_erb, main_erb   end Friday, September 10, 2010
  43. 43.   end   # GET /contacts/new   def new     @contact = Contact.new     render new_erb, main_erb   end   # GET /contacts/1/edit   def edit     @contact = Contact.get(param     render edit_erb, main_erb   end Friday, September 10, 2010
  44. 44.   end   # render templates   def_edb(index_erb, 'views/contacts/index.html.erb')   def_edb(show_erb, 'views/contacts/show.html.erb')   def_edb(new_erb, 'views/contacts/new.html.erb')   def_edb(edit_erb, 'views/contacts/edit.html.erb')   def_edb(main_erb, 'views/layouts/contacts.html.erb') end Friday, September 10, 2010
  45. 45. import com.google.appengine.ext.duby.db.Model import com.google.appengine.api.datastore.* import dubious.TimeConversion import java.util.Date class Contact < Model   property :title, String   property :birthday, Date   property :url, Link   property :platform, String   property :editor, String   property :summary, Text   property :address, PostalAddress   property :phone, PhoneNumber   property :private, Boolean   # timestamps   property :created_at, Date   property :updated_at, Date   def before_save     @updated_at = Date.new     @created_at = updated_at if @created_at.nil?   end   def coerce_date(o:Object)     TimeConversion.new('jsdate').parse(String(o)) Friday, September 10, 2010   end
  46. 46. import com.google.appengine.ext.duby.db.Model import com.google.appengine.api.datastore.* import dubious.TimeConversion import java.util.Date class Contact < Model   property :title, String   property :birthday, Date   property :url, Link   property :platform, String   property :editor, String   property :summary, Text   property :address, PostalAddress   property :phone, PhoneNumber   property :private, Boolean   # timestamps   property :created_at, Date   property :updated_at, Date   def before_save     @updated_at = Date.new     @created_at = updated_at if @created_at.nil?   end   def coerce_date(o:Object)     TimeConversion.new('jsdate').parse(String(o)) Friday, September 10, 2010   end
  47. 47. <h1>New contact</h1> <% f = form_for(@contact) %>   <%= f.start_form %>   <%= f.error_messages %>   <p>     <%= f.label :title %><br />     <%= f.text_field :title %>   </p>   <p>     <%= f.label :summary %><br />     <%= f.text_area :summary %>   </p>   <p>     <%= f.label :birthday %><br />     <%= f.date_select :birthday %>   </p>   <p>     <%= f.label :platform %><br />     <%= f.radio_button :platform, 'Mac' %>Mac     <%= f.radio_button :platform, 'PC' %>PC     <%= f.radio_button :platform, 'Linux' %>Linux   </p>   <p>     <%= f.label :editor %><br />     <%= f.select :editor, ['Vim','Emacs','TextMate','Other' Friday, September 10, 2010
  48. 48. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  49. 49. • JRuby on AppEngine • Mirah • Dubious • Hack Friday, September 10, 2010
  50. 50. Get Started Demo Time Friday, September 10, 2010
  51. 51. Me Nick Howard Avid Rubyist Commiter on Dubious @baroquebobcat Work at Gnip in Boulder, CO Friday, September 10, 2010
  52. 52. Contribute Mirah & Dubious mirah.org Code github.com/mirah/mirah github.com/mirah/dubious Examples rails-annex.appspot.com dubious-demo.appspot.com Mailing List groups.google.com/group/mirah Friday, September 10, 2010

×