Your SlideShare is downloading. ×
IJTC%202009%20JRuby
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

IJTC%202009%20JRuby

831
views

Published on

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
831
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. JRuby Charles Oliver Nutter JRuby Guy Sun Microsystems Except where otherwise noted, the content of this presentation is licensed under  the Creative Commons Attribution­Share Alike 3.0 United States License (http://creativecommons.org/licenses/by­sa/3.0/us/). 1
  • 2. Agenda • Ruby and JRuby overview > Facts and figures > Short Ruby tutorial • Real-world JRuby > Graphics and games > Web applications > GUI programming • Interactive: what do you want to know? 2
  • 3. The JRuby Guys • Charles Oliver Nutter and Thomas Enebo • Longtime Java developers (10+ yrs each) • Engineers at Sun Microsystems for 2 years • Full-time JRuby developers • Also working on JVM dynlang support • Wide range of past experience > C, C++, C#, Perl, Python, Delphi, Lisp, Scheme > Java EE and ME, JINI, WS 3
  • 4. What Is Ruby • Dynamic-typed, pure OO language > Interpreted > Open source, written in C > Good: easy to write, easy to read, powerful, “fun” > Bad: green threads, unicode support, libraries, “slow” • Created 1993 by Yukihiro “Matz” Matsumoto > “More powerful than Perl and more OO than Python” • Very active community, wide range of apps • Ruby 1.8.x is current, 1.9 is in development 4
  • 5. Ruby Growth (Gartner Projection) 5
  • 6. Ruby Conferences in 2008 RubyConf, RailsConf, RailsConf EU, acts_as_conference, Euruko, Ruby Kaigi, Mountain West RubyConf, eRubyCon, Ruby Hoedown, Amsterdam Ruby en Rails, Scotland on Rails, RubyFools Copenhagen, RubyFools Oslo, Voices that Matter, South Carolina Ruby Conference, Lone Star RubyConf, RuPy, Gotham Ruby Conference, Silicon Valley Ruby Conference, RubyCamp, Conferencia Rails, Rails Summit Latin America, Ruby Manor, Atlanta Merb Day, ... 6
  • 7. Ruby Books in 2008 NetBeans™ Ruby and Rails IDE with JRuby, Learning Rails, Rails for .NET Developers, Wicked Cool Ruby Scripts, JRuby Cookbook, Enterprise Recipes with Ruby and Rails, Developing Facebook Platform Applications with Rails, Foundation Rails 2, Enterprise Rails, Ruby On Rails Bible, Rails: Up and Running, Rails Pocket Reference, Ruby Phrasebook, Scripted GUI Testing with Ruby, Aptana RadRails, Advanced Rails Recipes, Deploying Rails Applications, The Art of Rails, Simply Rails 2, Practical REST on Rails 2 Projects, Ruby on Rails Web Mashup Projects, FXRuby: Create Lean and Mean GUIs with Ruby, RailsSpace, Ferret, Professional Ruby on Rails, Ruby: The Programming Language, Rails for PHP Developers, Pulling Strings with Puppet, Practical Reporting with Ruby and Rails, The Ruby Programming Language, Design Patterns in Ruby, Advanced Rails 7
  • 8. JRuby • Java implementation of Ruby language > “It's just Ruby!” • Started in 2002, open source, many contributors > Ola Bini, Marcin Mielzynsky, Nick Sieger, Vladimir Sizikov, MenTaLguY, Wayne Meissner • Aiming for compatibility with current Ruby version > Ruby 1.8.6 • Improvements on Ruby > Native threading, better performance, many libraries 8
  • 9. Ruby Quick Tour: Pure OO • Everything is an Object > Circle.new(4) => instance of Circle > “abc”.length => 3 > 1.to_s => “1” • All Objects are instances of Classes > 1.class => Fixnum • Single-Inheritance • Object is base class of all classes 9
  • 10. Ruby Quick Tour: Basics • Literals > Fixnum: 1 > Float: 1.0 > Bignum: 12345678987654321 > String: “one” 'one' %Q[one] %q[one] ... > Multiline string (“here doc”): x = <<EOS extend across two lines EOS > Symbol: :one, %s[one] > Regexp: /^foow+.*bar$/, %r[^foo$] > Array: [1, “ein”, :ichi] > Hash: {:one => 1, :two => 2} 10
  • 11. Ruby Quick Tour: Basics • String interpolation > a = “foo” > b = “bar#{a}baz” => “barfoobaz” • Operator overloading > def +(arg); ... • Attributes > class Foo attr_accessor :a end x = Foo.new x.a = “hello” puts x.a => “hello” 11
  • 12. Ruby Quick Tour: Duck Typing • Dynamic typing • “If it waddles like a duck and it quacks like a duck...” def make_it_waddle(waddler)    waddler.waddle end make_it_waddle(Duck.new)    make_it_waddle(Penguin.new) make_it_waddle(Octopus.new) • Runtime errors rarely happen > Unit testing helps prevent them 12
  • 13. Ruby Quick Tour: A Simple Class cl ass H l o el # i ni t i al i ze i s Ruby' s const r uct or def i ni t i al i ze( message) @ essage = m m essage end def pr i nt # i nser t t he @ essage i nt o a st r i ng m put s " Hel l o # m {@ essage}" end end # const r uct a Hel l o obj ect hel l o = H l o. new " Devoxx! " ) el ( hel l o. pr i nt 13
  • 14. Ruby Quick Tour: Blocks/Closures # t w f or m s: br aces {} and do . . end o at [ 1, 2, 3] . each {| num | put s “I see # ber {num }“ } ber [ 1, 2, 3] . each do | num | ber put s “I see # {num }“ ber end # m hods t hat accept bl ocks et def f oo yi el d “hel l o“ end def f oo2( &bl ock) bl ock. cal l ( “hel l o“) end 14
  • 15. Ruby Quick Tour: Modules # A col l ect i on of obj ect s cl ass M oduct s yPr # Enum abl e pr ovi des i t er at i on m hods er et i ncl ude Enum abl e er # def i ne an ' each' m hod t hat i t er at es et def each # yi el d each el ement i n t ur n end end l i st = M oduct s. new yPr l i st . sel ect {| i t em i t em pr i ce > 5. 00} | . l i st . sor t {| a, b| a. nam < > b. nam e = e} l i st . max 15
  • 16. Ruby Quick Tour: RubyGems • Ruby's packaging system > Think CPAN, Maven, apt, rpm • Shipped with JRuby > Step 1: unpack JRuby > Step 2 (optional): add 'bin' to PATH > Step 3: bin/gem install <whatever_you_desire> > You're ready to go! • All major Ruby projects are in gems > Look for 'gem install ....' in upcoming slides 16
  • 17. Where is JRuby being used? • Graphics and Games > Ruby + graphics = cool • JRuby on Rails > Better deployment options, better performance • GUI development > Makes Swing much nicer to use, easier to handle 17
  • 18. Ruby-Processing • “Processing is an open source programming language and environment for people who want to program images, animation, and interactions.” > Basically a cool Java library for 2D graphics • Ruby-Processing wraps Processing with JRuby > Cool, rubified 2D graphics environment for you > Eye-candy demos for us > Thanks to Jeremy Ashkenas for putting these together 18
  • 19. JMonkeyEngine • JMonkeyEngine: 3D Scenegraph library > OpenGL, Used Commercially 19
  • 20. DEMO Pretty Graphics! 20
  • 21. Web Applications: Ruby on Rails • A Full-stack MVC web development framework • Open Source (MIT), Many Contributors • Written entirely in Ruby • First released in 2004 • Growing popularity > RailsConf attendance: 500, 1000, 2500 since 2006 > Four Rails books downstairs (and more Ruby books) > Hundreds of job postings and growing fast 21
  • 22. Rails Precepts • Convention over Configuration > Why punish the common cases? > Encourages standard practices > Everything simpler and smaller • Don't Repeat Yourself (DRY) > Framework written around minimizing repetition > Repetitive code harmful to adaptability • Agile Development Environment > No recompile, deploy, restart cycles > Simple tools to generate code quickly > Testing built into framework 22
  • 23. The Rails Way: Controllers # app/ cont r ol l er s/ per son_ cont r ol l er . r b cl ass Per sonCont r ol l er < Appl i cat i onCont r ol l er ver i f y : m hod = : post , et > : onl y = [ : cr eat e, : updat e, : del et e] > Rails def l i st Example @ l _ peopl e = Per son. f i nd : al l al end al i as : i ndex : l i st def updat e @ r y = Per son. f i nd( par am : i d] ) ent s[ @ r y. updat e_ at t r i but es( par am : per son] ) ent s[ r edi r ect _ t o : act i on = ' l i st ' > end ... 23
  • 24. The Rails Way: Views < - - app/ vi ew per son/ l i st . r ht m - - > ! s/ l < abl e> t < r> t < f or col um i n Per son. cont ent _ col um % % n ns > < h> % col um hum nam % < t h> t <= n. an_ e >/ < end % % > < tr> / Rails < f or per son i n @ % peopl e % > Example < r> t < f or col um i n Per son. cont ent _ col um % % n ns > < d> % h per son. send( col um nam % < t d> t <= n. e) > / < end % % > < d> % l i nk_ t o ' Show , : act i on = ' show , : i d = per son % < t d> t <= ' > ' > >/ < d> % l i nk_ t o ' Edi t ' , : act i on = ' edi t ' , : i d = per son % < t d> t <= > > >/ < d> % l i nk_ t o ' D t <= est r oy' , { : act i on = ' dest r oy' , : i d = per son }, > > : conf i r m = ' Ar e you sur e?' , : m hod = : post % < t d> > et > >/ < tr> / < end % % > < t abl e> / < = l i nk_ t o ' Pr evi ous page' , { : page = @ son_ pages. cur r ent . pr evi ous } i f % > per @ son_pages. cur r ent . pr evi ous % per > < = l i nk_ t o ' N % ext page' , { : page = @ son_ pages. cur r ent . next } i f > per @ son_pages. cur r ent . next % per > 24
  • 25. The Rails Way: Persistence # connect t o t he dat abase Act i veRecor d: : Base. est abl i sh_connect i on( : adapt er = "m > ysql ", : dat abase = "m > ydb", : host = "l ocal host ", : user nam = "m > e > ydb_user ", : passw d = "f oo" ) or > # cr eat e a model obj ect cl ass Cont act < Act i veRecor d: : Base end # per si st ! Cont act . cr eat e "nam = "Char l es N t er ", e" > ut "t i t l e" = "J Ruby D > evel oper " Cont act . cr eat e "nam = "Thom Enebo", "t i t l e" = "J Ruby D e" > as > evel oper " # quer y Cont act . f i nd( : al l ) . each {| c| put s c. name} nut t er = Cont act . f i nd_by_ nam "Char l es N t er ") e( ut Rails # updat e nut t er . t i t l e = "D k O ar ver l ord of t he U ver se" ni Example nut t er . save 25
  • 26. Rails Walkthrough 26
  • 27. Production JRuby on Rails • Sun's Kenai.com – project hosting site > www.kenai.com • Oracle's Mix – digg-like social customer site > mix.oracle.com • ThoughtWorks' Mingle – collaborative project mgmt > mingle.thoughtworks.com • Trisano – infectious disease tracking for US gov'ts > www.trisano.org • Many others in government, large biz, telecom 27
  • 28. GUI Programming • Swing API is very large, complex > Ruby magic simplifies most of the tricky bits • Java is a very verbose language > Ruby makes Swing actually fun • No consistent cross-platform GUI library for Ruby > Swing works everywhere Java does (everywhere) • No fire-and-forget execution > No dependencies: any script works on any JRuby install 28
  • 29. GUI Library Options • Rubeus – gem install rubeus > Builder-like DSL syntax • Profligacy – gem install profligacy > Rubified layout expression language > Trivial event binding without listeners • MonkeyBars – gem install monkeybars > Leverage GUI builders > MVC structure • ...and 5+ others for Swing, SWT, and Qt 29
  • 30. DEMO Swing in Ruby 30
  • 31. Thank you! • JRuby - www.jruby.org > wiki.jruby.org • GlassFish - glassfish.dev.java.net > gem install glassfish > Looking for bug reports, feature requests! • Charlie's blog: blog.headius.com • Tom's blg: www.bloglines.com/blog/ThomasEEnebo 31

×