(track sponsor)                         Jruby &                        Iron Ruby                        Amir BarylkoMonday...
AMIR BARYLKO                        JRUBY & IRON RUBY                                   PRAIRIE DEV CON                   ...
WHO AM I?   • Architect   • Developer   • Mentor   • Great       cook   • The      one who’s entertaining you for the next...
CONTACT AND MATERIALS   • Contact            me: amir@barylko.com, @abarylko   • Blog:http://www.orthocoders.com   • Site:...
RUBY INTRO                                    Dynamic languages                                        Toolbox            ...
DYNAMIC LANGUAGES          High level          Dynamically typed          Runtime over compile time          Closures ...
DEVELOPERS TOOLBOX   • Make        your toolbox grow!   • The      right tool for the job   • Not      a replacement   • C...
WELCOME TO RUBY          Created in mid-90s by          Several implementations:           “Matz” Matsumoto in Japan    ...
RUBY FEATURES          Everything is an expression      Operator overloading,                                           ...
RUBY SUPPORT          Hundreds of books                Lots of great web sites:                                         ...
RUBY LANGUAGE                                      Basic Types                                   Control Structures       ...
BASIC TYPES        Numbers          1.class => Fixnum          1.1.class => Float          (120**100).class => Bignum    ...
BASIC TYPES II   • Strings      he  + he => he he      “Thats right” => Thats right      He said “hi” => He said “hi”     ...
BASIC TYPES III      Arrays       a = [1, 5.5, “nice!”]       1 == a.first       1 == a[0]       nil == a[10]       a[1] ...
BASIC TYPES IV   • Hashes      h = {“one” => 1, 1 => “one”}      h[“one”] == 1      h[1] == “one”      h[“two”] == nil    ...
BASIC TYPES V       Symbols: constant names. No need to declare, guaranteed        uniqueness, fast comparison   :apple =...
CONTROL STRUCTURES          if           if count < 20             puts “need more”           elsif count < 40           ...
CONTROL STRUCTURES II        Statement modifiers         buy while need_more?         buy(5) if need_more?         buy unt...
CONTROL STRUCTURES III   • Case       case left            when 0..5              dont_buy_more            when 6..10     ...
METHODS       Simple          def play(movie_path)          ....          end       Default arguments          def play(...
METHODS II        Return value: the last expression evaluated, no need for         explicit return         def votes(vote...
METHODS III       No need also with arguments (but careful!! only if you know        what you are doing)         movie.pl...
RUBY LANGUAGE II                                     Classes                                      Mixin                   ...
CLASSES & OBJECTS       Initializer and instance variables         class Movie           def initialize(name)            ...
CLASSES & OBJECTS II       Attributes     class Movie       def initialize(name)         @name = name       end          ...
CODE ORGANIZATION        Code in files with .rb extension        Require movie will read movie.rb file and make its method...
CODE ORGANIZATION II       Relative to this file:         require File.join(File.dirname(__FILE__), media/movie)Amir Baryl...
MIXINS       What about module “instance methods”?       One of the greatest Ruby features!       You can define functio...
ENUMERABLE        Enumerable mixin, from the standard library documentation:           The Enumerable mixin provides coll...
ENUMERABLE II       It provides useful methods such as:             map             to_a             take_while       ...
EXAMPLES                                        rSpec                                     Enumerable                      ...
RSPEC TESTING LIBRARY   require java   require rubygems   java_import MovieLibrary   java_import Movie   describe MovieLib...
ENUMERBLE MIXIN   require rubygems   java_import MovieLibrary   java_import Movie   class MovieLibrary     include Enumera...
ENUMERBLE MIXIN   lib = MovieLibrary.new   lib.add(Movie.new "Blazing Saddles")   lib.add(Movie.new "Spaceballs")   lib.ad...
EXTEND LIBRARY              WITH METHOD MISSING   require File.dirname(__FILE__) + "....bin/Debug/MavenThought.MovieLibrar...
SIMPLE WEB WITH SINATRA   require   rubygems   require   sinatra   require   haml   require   singleton   java_import Movi...
BDD WITH CUCUMBER   Feature: Addition     In order to make my library grow     As a registered user     I want to add movi...
BDD WITH CUCUMBER   require File.dirname(__FILE__) + "...MavenThought.MovieLibrary.dll"   include MavenThought::MovieLibra...
DSL I                                    RAKE   desc "Builds the project"   task :build do   	 call_target msbuild_cmd, :b...
DSL II                        CRON - WHENEVER    every 10.minutes do       runner "MyModel.some_process"       rake "my:ra...
QUESTIONS?                          (Don’t be shy)Monday, June 13, 2011
CONTACT AND MATERIALS   • Contact            me: amir@barylko.com, @abarylko   • Blog:http://www.orthocoders.com   • Site:...
ONLINE RESOURCES       IronRuby: http://ironruby.net/       Jruby: http://jruby.org       Ruby language site: http://ww...
Upcoming SlideShare
Loading in...5
×

PRDC11-Jruby-ironruby

465

Published on

Presentation done at PRDC Regina

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

  • Be the first to like this

No Downloads
Views
Total Views
465
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "PRDC11-Jruby-ironruby"

  1. 1. (track sponsor) Jruby & Iron Ruby Amir BarylkoMonday, June 13, 2011
  2. 2. AMIR BARYLKO JRUBY & IRON RUBY PRAIRIE DEV CON JUN 2011Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  3. 3. WHO AM I? • Architect • Developer • Mentor • Great cook • The one who’s entertaining you for the next while!Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  4. 4. CONTACT AND MATERIALS • Contact me: amir@barylko.com, @abarylko • Blog:http://www.orthocoders.com • Site:http://www.maventhought.com • Download: http://www.orthocoders.com/presentations.Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  5. 5. RUBY INTRO Dynamic languages Toolbox FeaturesAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  6. 6. DYNAMIC LANGUAGES  High level  Dynamically typed  Runtime over compile time  Closures  Reflection  Platform independentAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  7. 7. DEVELOPERS TOOLBOX • Make your toolbox grow! • The right tool for the job • Not a replacement • Combine strengths • Problem solvingAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  8. 8. WELCOME TO RUBY  Created in mid-90s by  Several implementations: “Matz” Matsumoto in Japan MRI, YARB, JRuby  Smalltalk, Perl influences  Totally free!!  Dynamic typing  Object Oriented  Automatic memory managementAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  9. 9. RUBY FEATURES  Everything is an expression  Operator overloading, flexible syntax  Metaprogramming  Powerful standard library  Closures  Garbage collection  ExceptionsAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  10. 10. RUBY SUPPORT  Hundreds of books  Lots of great web sites: basecamp, twitter, 43  User conferences all over things, hulu, scribd, the world slideshare, Justin.tv  Active community (you can  Lots of web frameworks create a conference in your inspired by Ruby on Rails own city and top Ruby coders will go there to teach others, invite them and see)Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  11. 11. RUBY LANGUAGE Basic Types Control Structures Methods ModifiersAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  12. 12. BASIC TYPES  Numbers 1.class => Fixnum 1.1.class => Float (120**100).class => Bignum 3.times {puts “he “}Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  13. 13. BASIC TYPES II • Strings he + he => he he “Thats right” => Thats right He said “hi” => He said “hi” “He said “hi”” => He said “hi” “1 + 1 is #{1+1}” => 1 + 1 is 2 "#{Ho! *3}Merry Christmas" =>Ho! Ho! Ho! Merry ChristmasAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  14. 14. BASIC TYPES III  Arrays a = [1, 5.5, “nice!”] 1 == a.first 1 == a[0] nil == a[10] a[1] = 3.14 a.each {|elem| puts elem} a.sortAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  15. 15. BASIC TYPES IV • Hashes h = {“one” => 1, 1 => “one”} h[“one”] == 1 h[1] == “one” h[“two”] == nil h.keys == [“one”, 1] (or is it [1, “one”] ?) h.values == [“one”, 1] (or is it [1, “one”] ?) h[“one”] = 1.0Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  16. 16. BASIC TYPES V  Symbols: constant names. No need to declare, guaranteed uniqueness, fast comparison :apple == :apple :orange != :banana [:all, :those, :symbols] {:ca => “Canada”, :ar => “Argentina”, :es => “Spain”}Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  17. 17. CONTROL STRUCTURES  if if count < 20 puts “need more” elsif count < 40 puts “perfect” else puts “too many” end  while while count < 100 && need_more buy(1) endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  18. 18. CONTROL STRUCTURES II  Statement modifiers buy while need_more? buy(5) if need_more? buy until left == 0 buy unless left < 5Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  19. 19. CONTROL STRUCTURES III • Case case left when 0..5 dont_buy_more when 6..10 buy(1) when 10..100 buy(5) endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  20. 20. METHODS  Simple def play(movie_path) .... end  Default arguments def play(movie_path, auto_start = true, wrap = false) .... endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  21. 21. METHODS II  Return value: the last expression evaluated, no need for explicit return def votes(voted, num_votes) voted && num_votes || nil end  No need for parenthesis on call without arguments (same syntax to call a method and a field) buy() == buy movie.play() == movie.playAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  22. 22. METHODS III  No need also with arguments (but careful!! only if you know what you are doing) movie.play “Pulp fiction”, false, trueAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  23. 23. RUBY LANGUAGE II Classes Mixin EnumerableAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  24. 24. CLASSES & OBJECTS  Initializer and instance variables class Movie def initialize(name) @name = name end def play puts %Q{Playing “#{@name}”. Enjoy!} end end m = Movie.new(“Pulp fiction”) m.play => Playing “Pulp fiction”. Enjoy!Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  25. 25. CLASSES & OBJECTS II  Attributes class Movie def initialize(name) @name = name end } def name # attr_reader :name @name end # attr_accessor :name def name=(value) # attr_writter :name @name = value end end m = Movie.new(Brazil).name = “Pulp fiction”Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  26. 26. CODE ORGANIZATION  Code in files with .rb extension  Require movie will read movie.rb file and make its methods available to the current file  Require media/movie will read file from media dir relative to the current working dir $LOAD_PATH << media require movieAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  27. 27. CODE ORGANIZATION II  Relative to this file: require File.join(File.dirname(__FILE__), media/movie)Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  28. 28. MIXINS  What about module “instance methods”?  One of the greatest Ruby features!  You can define functions in Modules, and get them added to your classes.  Great code reuse,  Multiple inheritance alternative.  Code organizationAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  29. 29. ENUMERABLE  Enumerable mixin, from the standard library documentation: The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The class must provide a method each, which yields successive members of the collectionAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  30. 30. ENUMERABLE II  It provides useful methods such as:  map  to_a  take_while  count  injectAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  31. 31. EXAMPLES rSpec Enumerable Method Missing Sinatra BDD Cucumber DSLAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  32. 32. RSPEC TESTING LIBRARY require java require rubygems java_import MovieLibrary java_import Movie describe MovieLibrary do it "should be created empty" do lib = MovieLibrary.new lib.contents.should be_empty end it "should add an element" do lib = MovieLibrary.new m = Movie.new Blazing Saddles lib.add m lib.contents.should include(m) lib.contents.count.should == 1 end endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  33. 33. ENUMERBLE MIXIN require rubygems java_import MovieLibrary java_import Movie class MovieLibrary include Enumerable def each(&block) contents.each(&block) end endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  34. 34. ENUMERBLE MIXIN lib = MovieLibrary.new lib.add(Movie.new "Blazing Saddles") lib.add(Movie.new "Spaceballs") lib.add(Movie.new "Young Frankenstein") lib.each { |m| puts "The movie is #{m.title}"} puts "nn**** Using Inject" lib.inject([]) { |a, m| a << m.title } .each { |s| puts "The movie is #{s}" } puts "nn*** Using find" lib.find_all { |m| m.title.end_with? s } .each { |m| puts "The movies that end with s: #{m.title}"}Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  35. 35. EXTEND LIBRARY WITH METHOD MISSING require File.dirname(__FILE__) + "....bin/Debug/MavenThought.MovieLibrary.dll" require rubygems include MavenThought::MovieLibrary class Library def method_missing(m, *args) if m.id2name.include?("find_by") field = m.id2name.sub( /find_by_/, "") contents.find_all( lambda { |m| m.send(field) == args[0] } ) else super end end end lib = Library.new lib.add Movie.new( "Blazing Saddles", System::DateTime.new(1972, 1, 1)) lib.add Movie.new( "Spaceballs", System::DateTime.new(1987, 1, 1)) puts "Using find by title #{lib.find_by_title( "Blazing Saddles" )}"Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  36. 36. SIMPLE WEB WITH SINATRA require rubygems require sinatra require haml require singleton java_import MovieLibrary java_import Movie class MovieLibrary include Singleton end # index get / do @movies = MovieLibrary.instance.contents haml :index end # create post / do m = Movie.new(params[:title]) MovieLibrary.instance.add m redirect / endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  37. 37. BDD WITH CUCUMBER Feature: Addition In order to make my library grow As a registered user I want to add movies to the library Scenario: Add a movie Given I have an empty library When I add the following movies: | title | release_date | | Blazing Saddles | Feb 7, 1974 | | Young Frankenstein | Dec 15, 1974 | | Spaceballs | Jun 24, 1987 | Then The library should have 3 movies And "Blazing Saddles" should be in the list with date "Feb 7, 1974" And "Young Frankenstein" should be in the list with date "Dec 15, 1974" And "Spaceballs" should be in the list with release date "Jun 24, 1987"Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  38. 38. BDD WITH CUCUMBER require File.dirname(__FILE__) + "...MavenThought.MovieLibrary.dll" include MavenThought::MovieLibrary Given /^I have an empty library$/ do @lib = Library.new end When /^I add the following movies:$/ do |table| table.hashes.each do |row| movie = Movie.new row[:title], System::DateTime.parse(...) @lib.add movie end endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  39. 39. DSL I RAKE desc "Builds the project" task :build do call_target msbuild_cmd, :build end desc "Rebuild the application by cleaning and then building" task :rebuild => [:clean, :build] desc "Runs all the tests" task :test => ["test:all"]Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  40. 40. DSL II CRON - WHENEVER every 10.minutes do runner "MyModel.some_process" rake "my:rake:task" command "/usr/bin/my_great_command" end every 2.days, :at => 4:30am do command "/usr/bin/my_great_command" endAmir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  41. 41. QUESTIONS? (Don’t be shy)Monday, June 13, 2011
  42. 42. CONTACT AND MATERIALS • Contact me: amir@barylko.com, @abarylko • Blog:http://www.orthocoders.com • Site:http://www.maventhought.com • Download: http://www.orthocoders.com/presentations.Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  43. 43. ONLINE RESOURCES  IronRuby: http://ironruby.net/  Jruby: http://jruby.org  Ruby language site: http://www.ruby-lang.org  rSpec: http://rspec.info/  Sinatra: http://www.sinatrarb.com/  Cucumber: http://cukes.info/  Rake: http://rake.rubyforge.org/Amir Barylko - Jruby & Iron Ruby MavenThought Inc.Monday, June 13, 2011
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×