SlideShare a Scribd company logo
1 of 70
Download to read offline
JRuby
+ Rails =
Awesome Java Web Framework!
Nick Sieger
nsieger@engineyard.com
Jfokus 2011
Ruby: Developer
  Happiness


   =
“Ruby is the glue
     that doesn't set”
                     – Dave Thomas

http://pragdave.pragprog.com/pragdave/2006/06/glue_that_doesn.html
Ruby =
                     innovation

http://www.flickr.com/photos/vermininc/2777441779/
Testing


 RSpec
http://rspec.info/             http://cukes.info/
Ruby
Dynamic language of the cloud
Ruby: Dynamic,
Object-Oriented




http://www.flickr.com/photos/listenmissy/4869202176/
Duck-Typing
def area(width = 10, height = 2 * width)
  width * height
end

p   area           #   =>   200
p   area 5         #   =>   50
p   area 5, 20     #   =>   100
p   area "10", 4   #   =>   ?
Duck-Typing
p area "10", 4 # => "10101010"

# From Ruby API docs:

#   String#*(num)
#
#   Returns a new String containing num copies of
#   the receiver.
#
#      "Ho! " * 3   #=> "Ho! Ho! Ho! "

area true, false
  # => NoMethodError: undefined method `*' for
  #      true:TrueClass
Flexible Syntax
def set_options(env, opts)
end

set_options(:production, {"caching" => "on", "debug" => "false"})

set_options(:production,   "caching" => "on", "debug" => "false")

set_options :production, {"caching" => "on", "debug" => "false"}

set_options :production,   "caching" => "on", "debug" => "false"
Blocks
       list = [1, 2, 3, 4]

       list.each {|n| puts n }
Ruby
       list.each do |n|
         puts n
       end



       List<Integer> list = Arrays.asList(1, 2, 3, 4);

Java   for (Integer n : list) {
           System.out.println(n);
       }
Blocks
       File.open(__FILE__) do |file|
         file.each_line do |line|
Ruby       puts line
         end
       end



       BufferedReader file =
           new BufferedReader(new FileReader("Blocks.java"));
       try {
           String line;
           while ((line = buf.readLine()) != null) {
Java           System.out.println(line);
           }
       } finally {
           file.close();
       }
Open Classes

msg = "Scramble this so you can't read it!"
msg.rot13!

  # => NoMethodError: undefined method `rot13!' for
  #    "Scramble this so you can't read it!":String
Open Classes
class String
  def rot13!
    0.upto(length - 1) do |i|
      case self[i]
      when ?a..?z
         self[i] = ?a + ((self[i] - ?a) + 13) % 26
      when ?A..?Z
         self[i] = ?A + ((self[i] - ?A) + 13) % 26
      end
    end
    self
  end
end
Open Classes

puts msg.rot13!
  # => "Fpenzoyr guvf fb lbh pna'g ernq vg!"
puts msg.rot13!
  # => "Scramble this so you can't read it!"
Rails 3
Dynamic framework of the cloud
Opinionated
             Framework

              Request-    Convention    Defaults
 Place for
               based         over        with
everything               Configuration
                MVC                     Choices
Place for everything
            application code
            configuration &
             environments
                routes
            (URL structure)
          database migrations
             static assets
           (images, js, css)
                 tests
Request-based MVC
Request    Routing    Controller
                                      Model
            Action     Action
                                   ActiveRecord
           Dispatch   Controller



                        View
                                    Database
Response              ActionView
Convention over Configuration
URL          GET /people

             resources :people
Routing        #=> people#index

             # app/controllers/people_controller.rb
             class PeopleController < ApplicationController
               def index
Controller       @people = Person.all
               end
             end

             # app/models/person.rb
Model        class Person < ActiveRecord::Base
             end

View         app/views/people/index.html.erb
Defaults with Choices
                 Default        Alternatives

                                DataMapper, MongoMapper,
ORM              ActiveRecord   Sequel, Any object with
                                ActiveModel
                                HAML, XML Builder,
View Templates   ERb            Markaby, RedCloth (Textile),
                                BlueCloth (Markdown)
JavaScript
                 Prototype      jQuery
Framework
                                MySQL, PostgreSQL,
Database         SQLite3        Oracle, more via JRuby +
                                JDBC

Test Framework   Test::Unit     RSpec, Cucumber
Why Rails?

    COMPARING JVM WEB
       FRAMEWORKS
                      Matt Raible
                http://raibledesigns.com




      Images by Stuck in Customs - http://www.flickr.com/photos/stuckincustoms
                                                                                © 2010, Raible Designs
                                 © 2010 Raible Designs



http://j.mp/raible-jvm-frameworks
Why Rails?
Consider...


              Information                  Available
Project                     Development
                 Books,                     skilled
maturity          Docs
                               speed
                                          developers
Installing Rails

 INSTALL   gem install rails
New Application

$ rails new coolapp -m http://jruby.org
      create
      create README
      create Rakefile
      ...
Dependencies with Bundler

$ cd coolapp

$ bundle install
Fetching source index for http://rubygems.org/
Using rake (0.8.7)
Using abstract (1.0.0)
...
Using rails (3.0.3)
Your bundle is complete!
Generate Scaffolding

$ rails generate scaffold person email:string password:string
      invoke active_record
      create    db/migrate/20101214020707_create_people.rb
      create    app/models/person.rb
      invoke    test_unit
      create      test/unit/person_test.rb
      create      test/fixtures/people.yml
       route resources :people
         ...
Migrate Database

$ rake db:migrate
(in /Users/nicksieger/Projects/rails/coolapp)
== CreatePeople: migrating ===========================
-- create_table(:people)
   -> 0.0040s
   -> 0 rows
== CreatePeople: migrated (0.0040s) ==================
Start Dev Server

$ rails server
=> Booting WEBrick
=> Rails 3.0.3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-12-13 20:11:28] INFO WEBrick 1.3.1
[2010-12-13 20:11:28] INFO ruby 1.8.7 (2010-12-10) [java]
[2010-12-13 20:11:28] INFO WEBrick::HTTPServer#start: pid=21022 port=3000
First Page
Controller
class PeopleController < ApplicationController
  # GET /people
  # GET /people.xml
  def index
    @people = Person.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml { render :xml => @people }
    end
  end

  def   show; end
  def   new; end
  def   edit; end
  def   create; end
  def   update; end
  def   destroy; end
end
Model

class Person < ActiveRecord::Base
end
Console

$ rails console
Loading development environment (Rails 3.0.3)
irb(main):001:0> Person.create :email => "nsieger@engineyard.com", ...
=> #<Person id: 1, email: "nsieger@engineyard.com", ...>
Rails 3 and JRuby




http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done
http://ci.jruby.org/
JRuby
Dynamic toolkit of the cloud
Getting JRuby
http://jruby.org/download
JRuby via Maven
        Group ID: org.jruby
Artifact IDs: jruby, jruby-complete
JRuby
drive java • embed • compile
Drive Java
       synth = javax.sound.midi.MidiSystem.synthesizer
Ruby   synth.open
       channel = synth.channels[0]




       import javax.sound.midi.*;

Java   Synthesizer synth = MidiSystem.getSynthesizer();
       synth.open();
       final MidiChannel channel = synth.getChannels()[0];
Drive Java
       frame = javax.swing.JFrame.new "Music Frame"
Ruby   frame.set_size 600, 100
       frame.layout = java.awt.FlowLayout.new




       import java.awt.*;

Java   JFrame frame = new JFrame("Music Frame");
       frame.setSize(600, 100);
       frame.setLayout(new java.awt.FlowLayout());
Drive Java
       KEYS.each do |value, char|
         button = javax.swing.JButton.new char
         button.add_action_listener do |e|
Ruby       channel.note_on value, 99
         end
         frame.add button
       end

       for (Iterator i = keys.entrySet().iterator(); i.hasNext(); ) {
           Map.Entry entry = (Map.Entry) i.next();
           final Integer value = (Integer) entry.getKey();
           String name = (String) entry.getValue();
           JButton button = new JButton(name);

Java       button.addActionListener(new java.awt.event.ActionListener() {
               public void actionPerformed(java.awt.event.ActionEvent e) {
                   channel.noteOn(value, 99);
               }
           });
           frame.add(button);
       }
MIDI Swing
Embed
import org.jruby.embed.ScriptingContainer;

public class EmbedJRuby {
    public static void main(String[] args) {
        ScriptingContainer container = new ScriptingContainer();
        container.runScriptlet("puts 'Hello from Ruby'");
    }
}
http://wiki.jruby.org/
      RedBridge
Compile
# engine.rb
require 'java'
java_package 'demo'

class Engine
  java_implements 'java.lang.Runnable'

  java_signature 'void run()'
  def run
    puts "The #{self.inspect} is running."
  end
end
Compile
// Starter.java
import demo.Engine;

public class Starter {
    public static void main(String[] args) {
        Runnable engine = new Engine();
        engine.run();
    }
}
Compile

$ jrubyc --javac engine.rb Starter.java
Generating Java class Engine to demo/Engine.java
javac -d . -cp jruby.jar:. demo/Engine.java Starter.java
Compile
// Engine.java
package demo;

public class Engine implements Runnable {
    public void run() { ... }
}
Compile

$ java -cp jruby.jar:. Starter
The #<Engine:0x59c958af> is running.
JRuby 1.6
             Release soon!
ruby 1.9.2 • c-ext • perf • dynopt • java
activerecord-jdbc
 ActiveRecord with JDBC databases

INSTALL   gem install activerecord-jdbc-adapter
Warbler
              INSTALL    gem install warbler




• Create a Java EE .war file from a Rails application
• “Looks like Java” to the ops staff


                                                         deploy
   Rails
                    warble           app.war             to java
   app
                                                       appserver
JRuby Deployment
Ruby servers   WAR files     Cloud

  WEBrick      GlassFish   EY AppCloud

  Trinidad      Tomcat     AppEngine

 TorqueBox       JBoss       AWS EB
Enterprise Software
 Evolving and adapting long-running
   projects with legacy codebases
Sagrada Família,
Barcelona, Spain
passion
                       facade


   nativity
   facade


scaffolded interior
Ryugyuong Hotel,
2005     North Korea      2010
seismic retrofit
Szkieletor,
Kraków, Poland
Hybrid Rails/Java App
                    ActionDispatch

  Rails       ActionController/ActionView
  MVC

                     ActiveModel

   Java     Java       JDBC            SOAP
 Backend   POJOs    DataSource       interface
https://github.com/nicksieger/
        spring-petclinic
Metaphor     Use Ruby, JRuby, and Rails to...

Sagrada      • Build new facade faster
Familia      • Scaffolding during refactoring

Ryugyong
             • Revive a project with a new face
  Hotel

 Seismic     • Reinforce business rules with a DSL
 retrofit    • Harden security


Szkieletor   • Find novel uses for abandoned code
engineyard.com/services
Resources
                    Resources for
                 Getting Started with
  JRuby.org         Ruby on Rails



JRubyConf 2010   Rails for
    Videos       Zombies
Nick Sieger
nsieger@engineyard.com
Slides: http://j.mp/sieger-jfokus
Images
http://en.wikipedia.org/wiki/File:Sagrada_Familia_01.jpg
http://www.flickr.com/photos/gonzalvo/4257293127/
http://www.flickr.com/photos/mgrenner57/263392884/
http://www.flickr.com/photos/koocheekoo/38407225/
http://www.flickr.com/photos/27649557@N07/5000528445/
http://www.flickr.com/photos/gpaumier/446059442/
http://www.flickr.com/photos/ilm/12831049/
http://en.wikipedia.org/wiki/File:Ryugyong_Hotel_-_May_2005.JPG
http://en.wikipedia.org/wiki/File:Ryugyong_Hotel_October_2010.jpg
http://en.wikipedia.org/wiki/File:ExteiorShearTruss.jpg
http://en.wikipedia.org/wiki/File:ExtReenfDetail.jpg
http://en.wikipedia.org/wiki/File:Szkieleteor_in_krakow.JPG
http://www.flickr.com/photos/bazylek/3194294047/
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011

More Related Content

What's hot

ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overviewhesher
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is hereSebastiano Armeli
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web DevsRami Sayar
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot CampTroy Miles
 
Why Task Queues - ComoRichWeb
Why Task Queues - ComoRichWebWhy Task Queues - ComoRichWeb
Why Task Queues - ComoRichWebBryan Helmig
 
CF and Java
CF and JavaCF and Java
CF and Javabluemini
 
Testing Backbone applications with Jasmine
Testing Backbone applications with JasmineTesting Backbone applications with Jasmine
Testing Backbone applications with JasmineLeon van der Grient
 
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMClojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMsunng87
 
Node.js System: The Approach
Node.js System: The ApproachNode.js System: The Approach
Node.js System: The ApproachHaci Murat Yaman
 
Avoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jsAvoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jscacois
 
Moose: Perl Objects
Moose: Perl ObjectsMoose: Perl Objects
Moose: Perl ObjectsLambert Lum
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
Introduction to CoffeeScript
Introduction to CoffeeScriptIntroduction to CoffeeScript
Introduction to CoffeeScriptStalin Thangaraj
 

What's hot (20)

ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overview
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is here
 
node ffi
node ffinode ffi
node ffi
 
What's New in ES6 for Web Devs
What's New in ES6 for Web DevsWhat's New in ES6 for Web Devs
What's New in ES6 for Web Devs
 
FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
 
Node Boot Camp
Node Boot CampNode Boot Camp
Node Boot Camp
 
ORMs in Golang
ORMs in GolangORMs in Golang
ORMs in Golang
 
Why Task Queues - ComoRichWeb
Why Task Queues - ComoRichWebWhy Task Queues - ComoRichWeb
Why Task Queues - ComoRichWeb
 
CF and Java
CF and JavaCF and Java
CF and Java
 
Testing Backbone applications with Jasmine
Testing Backbone applications with JasmineTesting Backbone applications with Jasmine
Testing Backbone applications with Jasmine
 
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMClojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVM
 
Node.js System: The Approach
Node.js System: The ApproachNode.js System: The Approach
Node.js System: The Approach
 
Avoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jsAvoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.js
 
Moose: Perl Objects
Moose: Perl ObjectsMoose: Perl Objects
Moose: Perl Objects
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Introduction to CoffeeScript
Introduction to CoffeeScriptIntroduction to CoffeeScript
Introduction to CoffeeScript
 
Javascript tid-bits
Javascript tid-bitsJavascript tid-bits
Javascript tid-bits
 
Event loop
Event loopEvent loop
Event loop
 
JavaScript ES6
JavaScript ES6JavaScript ES6
JavaScript ES6
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 

Similar to JRuby + Rails = Awesome Java Web Framework at Jfokus 2011

JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing UpDavid Padbury
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developergicappa
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Racksickill
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleRaimonds Simanovskis
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends旻琦 潘
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkDaniel Spector
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...bobmcwhirter
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Arun Gupta
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js frameworkBen Lin
 
Java, Ruby & Rails
Java, Ruby & RailsJava, Ruby & Rails
Java, Ruby & RailsPeter Lind
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVCAlive Kuo
 
The Enterprise Strikes Back
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes BackBurke Libbey
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsMike Subelsky
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiJackson Tian
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.jsguileen
 
RubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteRubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteDr Nic Williams
 

Similar to JRuby + Rails = Awesome Java Web Framework at Jfokus 2011 (20)

JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
 
Play framework
Play frameworkPlay framework
Play framework
 
Jet presentation
Jet presentationJet presentation
Jet presentation
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
Oracle adapters for Ruby ORMs
Oracle adapters for Ruby ORMsOracle adapters for Ruby ORMs
Oracle adapters for Ruby ORMs
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
 
Java, Ruby & Rails
Java, Ruby & RailsJava, Ruby & Rails
Java, Ruby & Rails
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
The Enterprise Strikes Back
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes Back
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
 
RubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - KeynoteRubyEnRails2007 - Dr Nic Williams - Keynote
RubyEnRails2007 - Dr Nic Williams - Keynote
 

Recently uploaded

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 

Recently uploaded (20)

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 

JRuby + Rails = Awesome Java Web Framework at Jfokus 2011