SlideShare a Scribd company logo
Will Green
will@hotgazpacho.org
@hotgazpacho
   History
   The DLR
   Why IronRuby?
   The Million Dollar Question
   Rusty Washers
   Getting IronRuby
   Additional Resources
Or, how Microsoft learned to stop worrying and love dynamic languages




                   +                                =
Sources:
http://commons.wikimedia.org/wiki/File:Ruby_logo.png
http://dlr.codeplex.com/
http://www.myfreewallpapers.net/cartoons/pages/phineas-and-ferb.shtml
   Compiler that translates Ruby source code
    into .NET IL (Intermediate Langauage)
   Ran Ruby code on the .NET CLR (Common
    Language Runtime)
   Started by Dr. Wayne Kelly and Prof. John
    Gough of the Queensland University of
    Technology
   Lost relevance around the beginning of 2008
   “A high-performance Ruby to .NET bridge
    that allows seamless integration of CLR and
    Ruby objects in the same Win32 process.”
   Developed by John Lam and Ceasar Larry
   Runs Ruby code on the .NET Common
    Language Runtime
   Abandoned when John Lam was hired by
    Microsoft
   “IronRuby is a Open Source implementation of
    the Ruby programming language for .NET,
    heavily relying on Microsoft's Dynamic
    Language Runtime”
   Microsoft’s implementation of Ruby
     John Lam hired as Program Manager
     Current Program Manager (also for IronPython) is
     Jimmy Schementi
   First previewed at MIX 2007
   Version 1.0 released at MIX 2010
     Targets Ruby 1.8.6
You got your dynamic in my static!
      You got your static in my dynamic!




Source: http://www.flickr.com/photos/25517107@N00/2950954830/
 A common runtime for dynamic languages on
  the .NET platform
 Provides interop among various dynamic
  languages
     Use libraries from multiple languages simultaneously
   Allows hosting dynamic languages in static .NET
    assemblies
     New .NET static type: dynamic
   IronRuby
   IronPython
   IronScheme
   ClojureCLR
   IronJS (JavaScript)
   Nua (Lua)

                          JS
What is it good for?
   Sometimes, you just ‘gotta interop with
    “Enterprise” systems written in .NET
     SOAP and COM
     WCF (Windows Communication Foundation)
     services
   Access to the BCL == Base Class Library
     Very extensive, rich set of standard libraries
   IronRuby eases the pain
   Standardized Packaging System
   Central Repository for hosting packages
   Allows installation and management of
    multiple versions of a package
   Allows distribution of binary packages
    targeting a specific platform
     Ruby Gems 1.3.7 includes my patch to recognize
     universal-dotnet, universal-dotnet-2.0, and
     universal-dotnet-4.0 as platforms
   Acceptance Testing
     Cucumber
   Unit Testing, BDD style
     RSpec / Shoulda
   Factories instead of Fixtures
     Factory Girl
     Machinist
   Mocking
     RSpec Mocks
     Caricature
      ▪ Mock .NET types (death to sealed and internal!)
      ▪ http://github.com/casualjim/caricature
   Believe in Magic!
     http://github.com/thbar/magic
   DSL for creating UIs
     Windows Presentation Foundation
      ▪ Current hotness for client UI development on Windows
     Silverlight
      ▪ WPF for the Web
     Windows Forms
      ▪ Traditional battleship-grey Windows apps
   Think Builder for Windows UIs
DEMO
   <script type=“text/ruby”></script>
   Requires Silverlight, but you get to do this:
DEMO
Source: http://777denny.wordpress.com/2009/07/04/what-does-the-bible-say-about-money-take-this-quick-quiz-to-
find-out/
YES!
   YES!
   IronRuby.Rack
     Rack adapter for IIS (HttpHandler)
     Included in IronRuby source on GitHub
     Needs some tweaks*
   ActiveRecord Adapters
     sqlite3-ironruby
     Ironruby-sqlserver
DEMO
Where does IronRuby fall short?




 Source: http://www.flickr.com/photos/92709190@N00/230032831
   85.94% pass rate
     vs 97.53% for MRI
   Latest statistics at http://ironruby.info/
   Need RubySpec contributions!
     RubySepc helps ALL Ruby implementations!
     http://rubyspec.org/
   OpenSSL
     Needs .NET implementation
     Should not be an issue with .NET crypto APIs
   Putting my money where my mouth is
     If someone will write the RubySpec specs for
     OpenSSL, I will implement it for IronRuby
   IronRuby doesn’t implement the C API
   However, equivalent libraries with .NET code
    can be created (and packaged as Gems!)
     eg. iron-term-ansicolor
      ▪ My lib for color console output on Windows
   Cucumber’s parser, Gherkin, is now Ragel
    based
   Ragel does not target C# or .NET
   Work-around:
     Ragel does target Java
     IKVM is Java (the langauge) for .NET
     Use IKVM to create a .NET assembly
     Still has some issues
   IronRuby does not support FFI
     FFI = Foreign Function Interface
      ▪ http://wiki.github.com/ffi/ffi/why-use-ffi
   Perhaps could be implemented via p/Invoke?
     Crazy thought, or craziest thought?
   Mono == An open source, cross-platform,
    implementation of C# and the CLR that is
    binary compatible with Microsoft.NET
   Most active contributors to IronRuby are
    ‘Softies, so running on Mono is not a priority
   However, running on Mono is something the
    team would like
Give it to me!




Source: http://new.music.yahoo.com/timbaland/albums/give-it-to-me-4-track-single--193920848
   Binary Releases on CodePlex
     http://ironruby.codeplex.com/
   Source is synched from MS internal TFS to
    Github
     http://github.com/ironruby/ironruby
     Community contributions accepted, in some areas
     of the code, via pulls from forks
Get Involved in the Dynamic Revolution!




Source: http://www.macwallpapers.eu/wallpaper/1280x960-Freedom-Ernesto-Che-Guevara/
   Mailing List:
    http://rubyforge.org/mailman/listinfo/ironruby-core
   How to Contribute:
    http://wiki.github.com/ironruby/ironruby/
   IronRuby web site:
    http://ironruby.net/
   Jimmy Schementi’s blog
    http://blog.jimmy.schementi.com/
   IronRuby in the Browser:
    http://www.rubyinside.com/ironruby-silverlight-
    ruby-in-browser-3192.html
   “IronRuby Unleashed” by Shay Friedman
    (Sams)
   “IronRuby In Action” by Ivan Porto Carrero
    (Manning)
   Jimmy Schementi (MS) - @jschementi
   James Deville (MS) - @jredville
   Ivan Porto Carrero (MVP) - @casualjim
   Shay Friedman (MVP) - @ironshay
   Michael Letterle (MVP) - @mletterle
   Ben Hall (MVP) - @Ben_Hall
   Thibaut Barrère - @thibaut_barrere
   Mike Moore - @blowmage

http://twitter.com/casualjim/ironruby-community

More Related Content

What's hot

Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Charlie Gracie
 
Intro for RoR
Intro for RoRIntro for RoR
Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)
lennartkats
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Presentation
Ruby Presentation Ruby Presentation
Ruby Presentation
platico_dev
 
Por que Rails?
Por que Rails? Por que Rails?
Por que Rails?
Marcelo Boeira
 
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
corehard_by
 
Introduction to llvm
Introduction to llvmIntroduction to llvm
Introduction to llvmTao He
 
Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
Mark Stoodley
 
Pharo Arm Status
Pharo Arm StatusPharo Arm Status
Pharo Arm Status
ESUG
 
llvm-py: Writing Compilers In Python
llvm-py: Writing Compilers In Pythonllvm-py: Writing Compilers In Python
llvm-py: Writing Compilers In Python
mdevan
 
Go Programming Language by Google
Go Programming Language by GoogleGo Programming Language by Google
Go Programming Language by Google
Uttam Gandhi
 
Extending Ruby using C++
Extending Ruby using C++Extending Ruby using C++
Extending Ruby using C++
Tristan Penman
 
LLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time OptimizationLLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time Optimization
Vivek Pansara
 
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
corehard_by
 
Overview of .Net Framework 4.5
Overview of .Net Framework 4.5Overview of .Net Framework 4.5
Overview of .Net Framework 4.5
Bhushan Mulmule
 
Kotlin from-scratch
Kotlin from-scratchKotlin from-scratch
Kotlin from-scratch
Franco Lombardo
 
Jython
JythonJython
[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...
[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...
[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...
DaeHyun Sung
 

What's hot (20)

Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
 
ruby-cocoa
ruby-cocoaruby-cocoa
ruby-cocoa
 
Intro for RoR
Intro for RoRIntro for RoR
Intro for RoR
 
Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Introduction
 
Ruby Presentation
Ruby Presentation Ruby Presentation
Ruby Presentation
 
Por que Rails?
Por que Rails? Por que Rails?
Por que Rails?
 
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
 
Introduction to llvm
Introduction to llvmIntroduction to llvm
Introduction to llvm
 
Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
 
Pharo Arm Status
Pharo Arm StatusPharo Arm Status
Pharo Arm Status
 
llvm-py: Writing Compilers In Python
llvm-py: Writing Compilers In Pythonllvm-py: Writing Compilers In Python
llvm-py: Writing Compilers In Python
 
Go Programming Language by Google
Go Programming Language by GoogleGo Programming Language by Google
Go Programming Language by Google
 
Extending Ruby using C++
Extending Ruby using C++Extending Ruby using C++
Extending Ruby using C++
 
LLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time OptimizationLLVM Compiler - Link Time Optimization
LLVM Compiler - Link Time Optimization
 
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
 
Overview of .Net Framework 4.5
Overview of .Net Framework 4.5Overview of .Net Framework 4.5
Overview of .Net Framework 4.5
 
Kotlin from-scratch
Kotlin from-scratchKotlin from-scratch
Kotlin from-scratch
 
Jython
JythonJython
Jython
 
[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...
[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...
[LibreOffice Korea-Japan online Seminar] Introduce to LibreOffice & Korean Is...
 

Similar to IronRuby for the Rubyist

IronRuby: Ruby on the .NET Platform
IronRuby: Ruby on the .NET PlatformIronRuby: Ruby on the .NET Platform
IronRuby: Ruby on the .NET Platform
Andre John Cruz
 
The story of language development
The story of language developmentThe story of language development
The story of language development
Hiroshi SHIBATA
 
Introduction To Rails
Introduction To RailsIntroduction To Rails
Introduction To Rails
Eric Gruber
 
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyFast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyKyle Drake
 
Dynamic Languages on the JVM
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVMelliando dias
 
World of Node.JS
World of Node.JSWorld of Node.JS
World of Node.JS
Alexander Shtuchkin
 
Bitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRubyBitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRuby
Brian Sam-Bodden
 
Ruby on Rails - An overview
Ruby on Rails -  An overviewRuby on Rails -  An overview
Ruby on Rails - An overview
Thomas Asikis
 
Ruby Meets Cocoa
Ruby Meets CocoaRuby Meets Cocoa
Ruby Meets Cocoa
Robbert
 
Why Ruby?
Why Ruby? Why Ruby?
Why Ruby?
IT Weekend
 
XSS Without Browser
XSS Without BrowserXSS Without Browser
XSS Without Browser
kosborn
 
MacRuby For Ruby Developers
MacRuby For Ruby DevelopersMacRuby For Ruby Developers
MacRuby For Ruby Developers
Renzo Borgatti
 
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
Jung Kim
 
Ruby, Rails, and the Open Source Community
Ruby, Rails, and the Open Source CommunityRuby, Rails, and the Open Source Community
Ruby, Rails, and the Open Source Community
Jim Myhrberg
 
Ruby on Rails : First Mile
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First Mile
Gourab Mitra
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the restgeorge.james
 

Similar to IronRuby for the Rubyist (20)

Athens Ruby Meetup #3: IronRuby
Athens Ruby Meetup #3: IronRubyAthens Ruby Meetup #3: IronRuby
Athens Ruby Meetup #3: IronRuby
 
IronRuby: Ruby on the .NET Platform
IronRuby: Ruby on the .NET PlatformIronRuby: Ruby on the .NET Platform
IronRuby: Ruby on the .NET Platform
 
The story of language development
The story of language developmentThe story of language development
The story of language development
 
Introduction To Rails
Introduction To RailsIntroduction To Rails
Introduction To Rails
 
ruby pentest
ruby pentestruby pentest
ruby pentest
 
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::SynchronyFast, concurrent ruby web applications with EventMachine and EM::Synchrony
Fast, concurrent ruby web applications with EventMachine and EM::Synchrony
 
Dynamic Languages on the JVM
Dynamic Languages on the JVMDynamic Languages on the JVM
Dynamic Languages on the JVM
 
ruby-cocoa
ruby-cocoaruby-cocoa
ruby-cocoa
 
World of Node.JS
World of Node.JSWorld of Node.JS
World of Node.JS
 
Concurrency in ruby
Concurrency in rubyConcurrency in ruby
Concurrency in ruby
 
Bitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRubyBitter Java, Sweeten with JRuby
Bitter Java, Sweeten with JRuby
 
Ruby on Rails - An overview
Ruby on Rails -  An overviewRuby on Rails -  An overview
Ruby on Rails - An overview
 
Ruby Meets Cocoa
Ruby Meets CocoaRuby Meets Cocoa
Ruby Meets Cocoa
 
Why Ruby?
Why Ruby? Why Ruby?
Why Ruby?
 
XSS Without Browser
XSS Without BrowserXSS Without Browser
XSS Without Browser
 
MacRuby For Ruby Developers
MacRuby For Ruby DevelopersMacRuby For Ruby Developers
MacRuby For Ruby Developers
 
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
차세대컴파일러, VM의미래: 애플 오픈소스 LLVM
 
Ruby, Rails, and the Open Source Community
Ruby, Rails, and the Open Source CommunityRuby, Rails, and the Open Source Community
Ruby, Rails, and the Open Source Community
 
Ruby on Rails : First Mile
Ruby on Rails : First MileRuby on Rails : First Mile
Ruby on Rails : First Mile
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the rest
 

Recently uploaded

When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 

Recently uploaded (20)

When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 

IronRuby for the Rubyist

  • 2. History  The DLR  Why IronRuby?  The Million Dollar Question  Rusty Washers  Getting IronRuby  Additional Resources
  • 3. Or, how Microsoft learned to stop worrying and love dynamic languages + = Sources: http://commons.wikimedia.org/wiki/File:Ruby_logo.png http://dlr.codeplex.com/ http://www.myfreewallpapers.net/cartoons/pages/phineas-and-ferb.shtml
  • 4. Compiler that translates Ruby source code into .NET IL (Intermediate Langauage)  Ran Ruby code on the .NET CLR (Common Language Runtime)  Started by Dr. Wayne Kelly and Prof. John Gough of the Queensland University of Technology  Lost relevance around the beginning of 2008
  • 5. “A high-performance Ruby to .NET bridge that allows seamless integration of CLR and Ruby objects in the same Win32 process.”  Developed by John Lam and Ceasar Larry  Runs Ruby code on the .NET Common Language Runtime  Abandoned when John Lam was hired by Microsoft
  • 6. “IronRuby is a Open Source implementation of the Ruby programming language for .NET, heavily relying on Microsoft's Dynamic Language Runtime”  Microsoft’s implementation of Ruby  John Lam hired as Program Manager  Current Program Manager (also for IronPython) is Jimmy Schementi  First previewed at MIX 2007  Version 1.0 released at MIX 2010  Targets Ruby 1.8.6
  • 7. You got your dynamic in my static! You got your static in my dynamic! Source: http://www.flickr.com/photos/25517107@N00/2950954830/
  • 8.  A common runtime for dynamic languages on the .NET platform  Provides interop among various dynamic languages  Use libraries from multiple languages simultaneously  Allows hosting dynamic languages in static .NET assemblies  New .NET static type: dynamic
  • 9. IronRuby  IronPython  IronScheme  ClojureCLR  IronJS (JavaScript)  Nua (Lua) JS
  • 10. What is it good for?
  • 11. Sometimes, you just ‘gotta interop with “Enterprise” systems written in .NET  SOAP and COM  WCF (Windows Communication Foundation) services  Access to the BCL == Base Class Library  Very extensive, rich set of standard libraries  IronRuby eases the pain
  • 12. Standardized Packaging System  Central Repository for hosting packages  Allows installation and management of multiple versions of a package  Allows distribution of binary packages targeting a specific platform  Ruby Gems 1.3.7 includes my patch to recognize universal-dotnet, universal-dotnet-2.0, and universal-dotnet-4.0 as platforms
  • 13. Acceptance Testing  Cucumber  Unit Testing, BDD style  RSpec / Shoulda  Factories instead of Fixtures  Factory Girl  Machinist  Mocking  RSpec Mocks  Caricature ▪ Mock .NET types (death to sealed and internal!) ▪ http://github.com/casualjim/caricature
  • 14. Believe in Magic!  http://github.com/thbar/magic  DSL for creating UIs  Windows Presentation Foundation ▪ Current hotness for client UI development on Windows  Silverlight ▪ WPF for the Web  Windows Forms ▪ Traditional battleship-grey Windows apps  Think Builder for Windows UIs
  • 15. DEMO
  • 16. <script type=“text/ruby”></script>  Requires Silverlight, but you get to do this:
  • 17. DEMO
  • 19. YES!
  • 20. YES!  IronRuby.Rack  Rack adapter for IIS (HttpHandler)  Included in IronRuby source on GitHub  Needs some tweaks*  ActiveRecord Adapters  sqlite3-ironruby  Ironruby-sqlserver
  • 21. DEMO
  • 22. Where does IronRuby fall short? Source: http://www.flickr.com/photos/92709190@N00/230032831
  • 23. 85.94% pass rate  vs 97.53% for MRI  Latest statistics at http://ironruby.info/  Need RubySpec contributions!  RubySepc helps ALL Ruby implementations!  http://rubyspec.org/
  • 24. OpenSSL  Needs .NET implementation  Should not be an issue with .NET crypto APIs  Putting my money where my mouth is  If someone will write the RubySpec specs for OpenSSL, I will implement it for IronRuby
  • 25. IronRuby doesn’t implement the C API  However, equivalent libraries with .NET code can be created (and packaged as Gems!)  eg. iron-term-ansicolor ▪ My lib for color console output on Windows
  • 26. Cucumber’s parser, Gherkin, is now Ragel based  Ragel does not target C# or .NET  Work-around:  Ragel does target Java  IKVM is Java (the langauge) for .NET  Use IKVM to create a .NET assembly  Still has some issues
  • 27. IronRuby does not support FFI  FFI = Foreign Function Interface ▪ http://wiki.github.com/ffi/ffi/why-use-ffi  Perhaps could be implemented via p/Invoke?  Crazy thought, or craziest thought?
  • 28. Mono == An open source, cross-platform, implementation of C# and the CLR that is binary compatible with Microsoft.NET  Most active contributors to IronRuby are ‘Softies, so running on Mono is not a priority  However, running on Mono is something the team would like
  • 29. Give it to me! Source: http://new.music.yahoo.com/timbaland/albums/give-it-to-me-4-track-single--193920848
  • 30. Binary Releases on CodePlex  http://ironruby.codeplex.com/  Source is synched from MS internal TFS to Github  http://github.com/ironruby/ironruby  Community contributions accepted, in some areas of the code, via pulls from forks
  • 31. Get Involved in the Dynamic Revolution! Source: http://www.macwallpapers.eu/wallpaper/1280x960-Freedom-Ernesto-Che-Guevara/
  • 32. Mailing List: http://rubyforge.org/mailman/listinfo/ironruby-core  How to Contribute: http://wiki.github.com/ironruby/ironruby/  IronRuby web site: http://ironruby.net/  Jimmy Schementi’s blog http://blog.jimmy.schementi.com/  IronRuby in the Browser: http://www.rubyinside.com/ironruby-silverlight- ruby-in-browser-3192.html
  • 33. “IronRuby Unleashed” by Shay Friedman (Sams)  “IronRuby In Action” by Ivan Porto Carrero (Manning)
  • 34. Jimmy Schementi (MS) - @jschementi  James Deville (MS) - @jredville  Ivan Porto Carrero (MVP) - @casualjim  Shay Friedman (MVP) - @ironshay  Michael Letterle (MVP) - @mletterle  Ben Hall (MVP) - @Ben_Hall  Thibaut Barrère - @thibaut_barrere  Mike Moore - @blowmage http://twitter.com/casualjim/ironruby-community