SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
JRuby

By Josh Moore
Who am I

 Josh Moore
    www.codingforrent.com
    twitter.com/codingforrent
    http://github.com/joshsmoore
  Ruby
    Watir at work
    Rails on the Google App Engine for hobby
        maintain rails_dm_datastore gem
Contents

 What is JRuby?
 Quick compare to MRI 1.8.7 and 1.9.1
 Gem Compatibility
 Java Integration
 Performance
 JRuby on Rails
 Short comings
 Google App Engine
What is JRuby

 Ruby interpreter on top of the JVM
   Started in 2001
   Runs rails in 2006
 Compatible syntax
   1.8.7/1.9.1(mostly)
Quick Comparison
        MRI 1.8.7              MRI 1.9.1             JRuby



Gems    Compatible             Fairly Compatible     Fairly Compatible



Rails   yes                    yes (Rails3)          yes



Speed          slow                 fast                   medium to fast
               Green threads        native threads         native threads


Pros    Compatibility               Fast                   medium Fast
                                    Better syntax?         Java integration
                                                           Ruby 1.8.x and 1.9
                                                           syntax

Cons    Slow                   ruby compatibility    C extension with
                               problems              compatibility problems
Ruby Gems

 Pure Ruby gems, no problem
 Gems with C extensions, have problems
    C extensions can work if invoked using
    the Foreign Function Invocation interface.
       Nokogiri
     Switch to using Java instead of C
       Hpricot
 Some gems are JRuby only
     Jemini
Performance




  Performance numbers using this project
Java Integration - Libraries
  Any library in the classpath can be accessed
  Maven is a Build/depedency management to for Java, acts
  like gems in ruby
      Similar to rake and gems put together
      Gemcutter - 10,467 gems
      Maven - 158,643 archives, thats a lot
      Coming with JRuby 1.5.0
Java Integration - Code

    nil == null
    self == this
    Java interfaces mapped to modules
    to_java converts ruby objects to Java objects
    Closer Convention
        Implement Java interfaces as blocks

b = JButton.new('click me')

b.add_action_listener do |event|
 JOptionPane.show_message_dialog nil, "Clicked"
end
Java Integration - Code
   Getters and Setters

Java                     Java in JRuby
   getA and setA            a and a=

   Object Creation
Java                     Java in JRuby
   new Object(1)            Object.new 1
Demo 1

Swing UI in Ruby
JVM Benefits

 World class garbage collection
 Performance
 Native Threads (really run rails in parallel)
 Pretty much runs on any hardware
JVM Optimization
JVM Optimization
Rails

  It just works (like most pure ruby libraries)
  Only deployment is different
       you can actually deploy and test in MRI and then deploy
       using JRuby
       deploy using warbler
Deploying Rails

  Packaged into WAR (Web Application Archive)
     Deployable on any Java Application server, or any Java
     hosting service.
     Including cloud hosting like Google App Engine
Known Problems

 ObjectSpace is disabled
 Slower startup time
 C extension incompatibilities
Rails on the
Google App Engine
    By Josh Moore
What is it?

  Cloud hosting solution provided by Google.
  Even more "cloudish" (ie less control and even
  easier scaling) then heroku
     All you do is submit your code and it runs you have no
     control over where it runs or what it is running on or even
     how many instances are running.
     Getting lots of request GAE simply starts up more
     instances of your app automatically.
     Computer resources scaled 100% dynamically
     Built for scalability, including sharding of data
Architecture
Persistence - Datastore

  No RDMS
  Datastore
     Fast
     Not a relational database
     No SQL, GQL instead
     Some fast SQL operations are slow
         Sums/counts are not really efficient so it is best to
         keep running totals.
         Joining can be very inefficient
     All these differences can be overcome, it just requires a
     paradigm shift.
Strengths

 Fluid scalability
     no configuration required
 Fairly complete API set
 Persistence designed for scalability
 Everything designed for dynamic scalability
 No need to worry about or configure anything on the server
 side
The Downsides/Restrictions

 Officially Java and Python
     Ruby support not official
 Restrictive
     Only 30 seconds per request (spin up time)
     Only one set of rules
     Cannot write to file system from app
     Code restrictions
         No Threads and other API restrictions
         Absolutely no C code
JRuby on GAE

 Tools - http://code.google.com/p/appengine-jruby/
    Project Run by John Woodell (Google employee)
    Also wraps the local development environment
 Work from MRI 1.8.7
    no need to mess with jruby
 Provide API wrappers for google services
 Rack adapter - Rails, Sinatra, or custom
    Rails patches provided
 Datamapper adapter
    No ActiveRecord
Rails

  Some Modification required
    Datamapper based
    TinyDS based
Demo 2
Why do I use JRuby and GAE

 I Learned Java in College
     Like to atleast have a chance of knowing what is going
     on under the hood
 GAE
     Still in its infancy so still lots of work to be done
Question?
http://api.wefeelfine.org:8080/ShowFeelings?
returnfields=feeling&limit=1&conditions=1

http://shootout.alioth.debian.org/u32/benchmark.php?
test=all&lang=yarv&lang2=ruby

http://blog.pluron.com/2009/05/ruby-19-performance.html

http://blog.headius.com/2009/04/how-jruby-makes-ruby-fast.
html

http://github.com/acangiano/ruby-benchmark-suite

http://www.jarvana.com/jarvana/info/repository_statistics

Mais conteúdo relacionado

Mais procurados

Micronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless EraMicronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless Eragraemerocher
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Ryan Cuprak
 
Ruby Plugins for Jenkins
Ruby Plugins for JenkinsRuby Plugins for Jenkins
Ruby Plugins for Jenkinscowboyd
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Ryan Cuprak
 
How we took our server side application to the cloud and liked what we got
How we took our server side application to the cloud and liked what we gotHow we took our server side application to the cloud and liked what we got
How we took our server side application to the cloud and liked what we gotBaruch Sadogursky
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Roberto Cortez
 
MongoDB training for java software engineers
MongoDB training for java software engineersMongoDB training for java software engineers
MongoDB training for java software engineersMoshe Kaplan
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Ryan Cuprak
 
Migrating to Java 11
Migrating to Java 11Migrating to Java 11
Migrating to Java 11Arto Santala
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules uploadRyan Cuprak
 
Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019graemerocher
 
Building Asynchronous Applications
Building Asynchronous ApplicationsBuilding Asynchronous Applications
Building Asynchronous ApplicationsJohan Edstrom
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the CloudRyan Cuprak
 
Using Apache Camel as AKKA
Using Apache Camel as AKKAUsing Apache Camel as AKKA
Using Apache Camel as AKKAJohan Edstrom
 
Your fist RubyMotion Application
Your fist RubyMotion ApplicationYour fist RubyMotion Application
Your fist RubyMotion Applicationtoamitkumar
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Ryan Cuprak
 

Mais procurados (20)

Micronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless EraMicronaut: Evolving Java for the Microservices and Serverless Era
Micronaut: Evolving Java for the Microservices and Serverless Era
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
 
Migrating to Java 9 Modules
Migrating to Java 9 ModulesMigrating to Java 9 Modules
Migrating to Java 9 Modules
 
Coding Your Way to Java 12
Coding Your Way to Java 12Coding Your Way to Java 12
Coding Your Way to Java 12
 
Ruby Plugins for Jenkins
Ruby Plugins for JenkinsRuby Plugins for Jenkins
Ruby Plugins for Jenkins
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 
How we took our server side application to the cloud and liked what we got
How we took our server side application to the cloud and liked what we gotHow we took our server side application to the cloud and liked what we got
How we took our server side application to the cloud and liked what we got
 
Better Career with Java
Better Career with JavaBetter Career with Java
Better Career with Java
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7
 
MongoDB training for java software engineers
MongoDB training for java software engineersMongoDB training for java software engineers
MongoDB training for java software engineers
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
Migrating to Java 11
Migrating to Java 11Migrating to Java 11
Migrating to Java 11
 
Javantura v4 - JVM++ The GraalVM - Martin Toshev
Javantura v4 - JVM++ The GraalVM - Martin ToshevJavantura v4 - JVM++ The GraalVM - Martin Toshev
Javantura v4 - JVM++ The GraalVM - Martin Toshev
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019Micronaut Deep Dive - Devnexus 2019
Micronaut Deep Dive - Devnexus 2019
 
Building Asynchronous Applications
Building Asynchronous ApplicationsBuilding Asynchronous Applications
Building Asynchronous Applications
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the Cloud
 
Using Apache Camel as AKKA
Using Apache Camel as AKKAUsing Apache Camel as AKKA
Using Apache Camel as AKKA
 
Your fist RubyMotion Application
Your fist RubyMotion ApplicationYour fist RubyMotion Application
Your fist RubyMotion Application
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
 

Semelhante a JRuby and Google App Engine

Ruby On Google App Engine 2nd Athens Ruby Me
Ruby On Google App Engine 2nd Athens Ruby MeRuby On Google App Engine 2nd Athens Ruby Me
Ruby On Google App Engine 2nd Athens Ruby MePanagiotis Papadopoulos
 
Dynamic Languages on the JVM
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVMelliando dias
 
Rails On Spring
Rails On SpringRails On Spring
Rails On Springswamy g
 
Bitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRubyBitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRubyBrian Sam-Bodden
 
JRuby in a Java World
JRuby in a Java WorldJRuby in a Java World
JRuby in a Java WorldMark Menard
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMRaimonds Simanovskis
 
Ruby on Google App Engine: Upgrade to Google App "Turbo" Engine
Ruby on Google App Engine: Upgrade to Google App "Turbo" EngineRuby on Google App Engine: Upgrade to Google App "Turbo" Engine
Ruby on Google App Engine: Upgrade to Google App "Turbo" EngineJoseph Ku
 
Charles Nutter Presentations
Charles Nutter PresentationsCharles Nutter Presentations
Charles Nutter Presentationswebuploader
 
Why don't you Groovy?
Why don't you Groovy?Why don't you Groovy?
Why don't you Groovy?Orest Ivasiv
 
[2014.11.18] java script execution environment survey
[2014.11.18] java script execution environment survey[2014.11.18] java script execution environment survey
[2014.11.18] java script execution environment surveyDongGyun Han
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLBarry Jones
 
Rollin onj Rubyv3
Rollin onj Rubyv3Rollin onj Rubyv3
Rollin onj Rubyv3Oracle
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Arun Gupta
 
Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRubyelliando dias
 
Java2 platform
Java2 platformJava2 platform
Java2 platformSajan Sahu
 
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and PopularityDjango vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularityrorbitssoftware
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Railsmithunsasidharan
 

Semelhante a JRuby and Google App Engine (20)

Practical JRuby
Practical JRubyPractical JRuby
Practical JRuby
 
Ruby On Google App Engine 2nd Athens Ruby Me
Ruby On Google App Engine 2nd Athens Ruby MeRuby On Google App Engine 2nd Athens Ruby Me
Ruby On Google App Engine 2nd Athens Ruby Me
 
Dynamic Languages on the JVM
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVM
 
Rails On Spring
Rails On SpringRails On Spring
Rails On Spring
 
Bitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRubyBitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRuby
 
JRuby in a Java World
JRuby in a Java WorldJRuby in a Java World
JRuby in a Java World
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVM
 
Ruby on Google App Engine: Upgrade to Google App "Turbo" Engine
Ruby on Google App Engine: Upgrade to Google App "Turbo" EngineRuby on Google App Engine: Upgrade to Google App "Turbo" Engine
Ruby on Google App Engine: Upgrade to Google App "Turbo" Engine
 
Day 8 - jRuby
Day 8 - jRubyDay 8 - jRuby
Day 8 - jRuby
 
Charles Nutter Presentations
Charles Nutter PresentationsCharles Nutter Presentations
Charles Nutter Presentations
 
Why don't you Groovy?
Why don't you Groovy?Why don't you Groovy?
Why don't you Groovy?
 
[2014.11.18] java script execution environment survey
[2014.11.18] java script execution environment survey[2014.11.18] java script execution environment survey
[2014.11.18] java script execution environment survey
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
Rollin onj Rubyv3
Rollin onj Rubyv3Rollin onj Rubyv3
Rollin onj Rubyv3
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009
 
Introduction to JRuby
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
 
Java2 platform
Java2 platformJava2 platform
Java2 platform
 
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and PopularityDjango vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
Django vs. Ruby on Rails Comparison: Web Frameworks Performance and Popularity
 
Ruby BDD for Java
Ruby BDD for JavaRuby BDD for Java
Ruby BDD for Java
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 

Último

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 

Último (20)

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

JRuby and Google App Engine

  • 2. Who am I Josh Moore www.codingforrent.com twitter.com/codingforrent http://github.com/joshsmoore Ruby Watir at work Rails on the Google App Engine for hobby maintain rails_dm_datastore gem
  • 3. Contents What is JRuby? Quick compare to MRI 1.8.7 and 1.9.1 Gem Compatibility Java Integration Performance JRuby on Rails Short comings Google App Engine
  • 4. What is JRuby Ruby interpreter on top of the JVM Started in 2001 Runs rails in 2006 Compatible syntax 1.8.7/1.9.1(mostly)
  • 5. Quick Comparison MRI 1.8.7 MRI 1.9.1 JRuby Gems Compatible Fairly Compatible Fairly Compatible Rails yes yes (Rails3) yes Speed slow fast medium to fast Green threads native threads native threads Pros Compatibility Fast medium Fast Better syntax? Java integration Ruby 1.8.x and 1.9 syntax Cons Slow ruby compatibility C extension with problems compatibility problems
  • 6. Ruby Gems Pure Ruby gems, no problem Gems with C extensions, have problems C extensions can work if invoked using the Foreign Function Invocation interface. Nokogiri Switch to using Java instead of C Hpricot Some gems are JRuby only Jemini
  • 7. Performance Performance numbers using this project
  • 8. Java Integration - Libraries Any library in the classpath can be accessed Maven is a Build/depedency management to for Java, acts like gems in ruby Similar to rake and gems put together Gemcutter - 10,467 gems Maven - 158,643 archives, thats a lot Coming with JRuby 1.5.0
  • 9. Java Integration - Code nil == null self == this Java interfaces mapped to modules to_java converts ruby objects to Java objects Closer Convention Implement Java interfaces as blocks b = JButton.new('click me') b.add_action_listener do |event| JOptionPane.show_message_dialog nil, "Clicked" end
  • 10. Java Integration - Code Getters and Setters Java Java in JRuby getA and setA a and a= Object Creation Java Java in JRuby new Object(1) Object.new 1
  • 11. Demo 1 Swing UI in Ruby
  • 12. JVM Benefits World class garbage collection Performance Native Threads (really run rails in parallel) Pretty much runs on any hardware
  • 15. Rails It just works (like most pure ruby libraries) Only deployment is different you can actually deploy and test in MRI and then deploy using JRuby deploy using warbler
  • 16. Deploying Rails Packaged into WAR (Web Application Archive) Deployable on any Java Application server, or any Java hosting service. Including cloud hosting like Google App Engine
  • 17. Known Problems ObjectSpace is disabled Slower startup time C extension incompatibilities
  • 18. Rails on the Google App Engine By Josh Moore
  • 19. What is it? Cloud hosting solution provided by Google. Even more "cloudish" (ie less control and even easier scaling) then heroku All you do is submit your code and it runs you have no control over where it runs or what it is running on or even how many instances are running. Getting lots of request GAE simply starts up more instances of your app automatically. Computer resources scaled 100% dynamically Built for scalability, including sharding of data
  • 21. Persistence - Datastore No RDMS Datastore Fast Not a relational database No SQL, GQL instead Some fast SQL operations are slow Sums/counts are not really efficient so it is best to keep running totals. Joining can be very inefficient All these differences can be overcome, it just requires a paradigm shift.
  • 22. Strengths Fluid scalability no configuration required Fairly complete API set Persistence designed for scalability Everything designed for dynamic scalability No need to worry about or configure anything on the server side
  • 23. The Downsides/Restrictions Officially Java and Python Ruby support not official Restrictive Only 30 seconds per request (spin up time) Only one set of rules Cannot write to file system from app Code restrictions No Threads and other API restrictions Absolutely no C code
  • 24. JRuby on GAE Tools - http://code.google.com/p/appengine-jruby/ Project Run by John Woodell (Google employee) Also wraps the local development environment Work from MRI 1.8.7 no need to mess with jruby Provide API wrappers for google services Rack adapter - Rails, Sinatra, or custom Rails patches provided Datamapper adapter No ActiveRecord
  • 25. Rails Some Modification required Datamapper based TinyDS based
  • 27. Why do I use JRuby and GAE I Learned Java in College Like to atleast have a chance of knowing what is going on under the hood GAE Still in its infancy so still lots of work to be done