SlideShare une entreprise Scribd logo
1  sur  41
Motion in the Middle
RubyMotion as a Gateway to
iOS Development
ME
ME
CYRUS INNOVATION
FLATIRON SCHOOL
RUBYBLIND
NYC RUBYMOTION
@seldomatt / blog.seldomatt.com / github/seldomatt
RUBYMOTION
Build iOS and OSX Apps with Ruby
“You have to learn
the Cocoa APIs
anyway, so I don’t
see the advantage
in adding
another layer
of abstraction…”
RUBY COCOA
ARC
A
R
C
BSTRACTION IN THE RIGHT PLACES
EADING/TRANSLATING
OMMUNITY
ABSTRACTION IN THE RIGHT PLACES
OBJECTIVE C RUNTIME
RUBY IMPLEMENTATION
“STRING”
[NSMutableString stringWithString:@”string”];
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen] bounds]];
UIViewController *rootController = [[UIViewController alloc] initWithNibName:@”RootController” bundle:nil];
self.window.rootViewController = rootController;
[self.window makeKeyAndVisible];
return YES;
}
class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
rootController = UIViewController.alloc.initWithNibName(“RootController”, bundle:nil)
@window.rootViewController = rootController
@window.makeKeyAndVisible
true
end
end
“…by design, we expose the entire same
API as the one you would get in Obj-C.
The iOS SDK is mature and
well documented…It would have been
a bad idea to restrict what you could do
with RubyMotion.”
- Laurent Sansonetti, creator of RubyMotion
COCOA FUNCTIONALITY
+
IDIOMATIC RUBY
Reading /
Translating
ACCESS TO ALL OBJ-C
LIBRARIES
Pointers
Static Typing
Garbage Collection
Memory Management
So far…
SOLID UNDERSTANDING OF THE COCOA
APIs
QUICKLY IMPLEMENT IDEAS USING RUBY
ACCESS TO ALL LIBRARIES
TROUBLESHOOTING UNDER THE HOOD
“I decided not to ship RubyMotion with a
wrapper/DSL mainly for two
reasons…first, it is a very hard task,
designing a good API takes time and
energy and there is a lot to
cover…second, rubyists love to write
DSLs (since Ruby is good at it), and I
didn’t want to steal the happiness.”
- Laurent Sansonetti, creator of RubyMotion
GEMS
BUBBLEWRAP – HTTP requests, alerts, notifications, etc.
TEACUP – CSS-like stylesheets for laying out UI
SUGARCUBE/SWEET TEA – syntactic sugar
MOTION-MODEL - =~ ActiveRecord
PROMOTION – RM application framework
rubymotion-wrappers.com
TESTING
MacBacon – rspec port / ships with RM
Motion-Frank – cucumber integration testing
Motion-Facon – mocking/stubbing
GET STARTED
Motion in the Middle
by
Matthew Salerno
@seldomatt
github/seldomatt
blog.seldomatt.com
meetup.com/rubyblind

Contenu connexe

En vedette

Nervous system ch 12
Nervous system ch 12Nervous system ch 12
Nervous system ch 12Kaylal88
 
пищевые добавки
пищевые добавкипищевые добавки
пищевые добавкиAkuJIa
 
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)Alkis Vazacopoulos
 
Excel+ppt+word2003使用技巧方法大全
Excel+ppt+word2003使用技巧方法大全Excel+ppt+word2003使用技巧方法大全
Excel+ppt+word2003使用技巧方法大全0hanfeng0
 
Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...
Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...
Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...Alkis Vazacopoulos
 
Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"
Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"
Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"08600 Vasilkov
 
Impulse!final inauguracion
Impulse!final inauguracionImpulse!final inauguracion
Impulse!final inauguracionorbitalight
 

En vedette (11)

Nervous system ch 12
Nervous system ch 12Nervous system ch 12
Nervous system ch 12
 
пищевые добавки
пищевые добавкипищевые добавки
пищевые добавки
 
Test powerpoint
Test powerpointTest powerpoint
Test powerpoint
 
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)Partial Differential Equations (PDE’s)  Industrial Modeling Framework (PDE-IMF)
Partial Differential Equations (PDE’s) Industrial Modeling Framework (PDE-IMF)
 
Excel+ppt+word2003使用技巧方法大全
Excel+ppt+word2003使用技巧方法大全Excel+ppt+word2003使用技巧方法大全
Excel+ppt+word2003使用技巧方法大全
 
Liceo Alberti - Rewind
Liceo Alberti - RewindLiceo Alberti - Rewind
Liceo Alberti - Rewind
 
Question 6
Question 6Question 6
Question 6
 
Syntax
SyntaxSyntax
Syntax
 
Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...
Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...
Advanced Process Monitoring for Startups, Shutdowns & Switchovers Industrial ...
 
Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"
Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"
Презентация Васильківської ЗОШ І-ІІІ ст№9 "Вулиця Бурки"
 
Impulse!final inauguracion
Impulse!final inauguracionImpulse!final inauguracion
Impulse!final inauguracion
 

Similaire à Motion in the Middle: RubyMotion as a Gateway to iOS Development

RubyMotion Introduction
RubyMotion IntroductionRubyMotion Introduction
RubyMotion IntroductionLori Olson
 
MacRuby & RubyMotion - Madridrb May 2012
MacRuby & RubyMotion - Madridrb May 2012MacRuby & RubyMotion - Madridrb May 2012
MacRuby & RubyMotion - Madridrb May 2012Mark Villacampa
 
RubyMotion: Hack Your iOS App Like Never Before
RubyMotion: Hack Your iOS App Like Never BeforeRubyMotion: Hack Your iOS App Like Never Before
RubyMotion: Hack Your iOS App Like Never BeforeJoseph Ku
 
Programming iOS in C#
Programming iOS in C#Programming iOS in C#
Programming iOS in C#Frank Krueger
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsMatteo Manchi
 
iPhone SDK dev sharing - the very basics
iPhone SDK dev sharing - the very basicsiPhone SDK dev sharing - the very basics
iPhone SDK dev sharing - the very basicskenshin03
 
Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III) Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III) Mobivery
 
Using Ruby in Android Development
Using Ruby in Android DevelopmentUsing Ruby in Android Development
Using Ruby in Android DevelopmentAdam Blum
 
漫游iOS开发指南
漫游iOS开发指南漫游iOS开发指南
漫游iOS开发指南jeff kit
 
Mac ruby to the max - Brendan G. Lim
Mac ruby to the max - Brendan G. LimMac ruby to the max - Brendan G. Lim
Mac ruby to the max - Brendan G. LimThoughtWorks
 
MacRuby to The Max
MacRuby to The MaxMacRuby to The Max
MacRuby to The MaxBrendan Lim
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Filippo Matteo Riggio
 
Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014
Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014
Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014Fábio Pimentel
 
Intro to iOS Application Architecture
Intro to iOS Application ArchitectureIntro to iOS Application Architecture
Intro to iOS Application ArchitectureMake School
 
Cucumber meets iPhone
Cucumber meets iPhoneCucumber meets iPhone
Cucumber meets iPhoneErin Dees
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Sarp Erdag
 
State ofappdevelopment
State ofappdevelopmentState ofappdevelopment
State ofappdevelopmentgillygize
 

Similaire à Motion in the Middle: RubyMotion as a Gateway to iOS Development (20)

RubyMotion Introduction
RubyMotion IntroductionRubyMotion Introduction
RubyMotion Introduction
 
MacRuby & RubyMotion - Madridrb May 2012
MacRuby & RubyMotion - Madridrb May 2012MacRuby & RubyMotion - Madridrb May 2012
MacRuby & RubyMotion - Madridrb May 2012
 
Rubymotion talk
Rubymotion talkRubymotion talk
Rubymotion talk
 
RubyMotion: Hack Your iOS App Like Never Before
RubyMotion: Hack Your iOS App Like Never BeforeRubyMotion: Hack Your iOS App Like Never Before
RubyMotion: Hack Your iOS App Like Never Before
 
Programming iOS in C#
Programming iOS in C#Programming iOS in C#
Programming iOS in C#
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
 
Lightning Talk - Xamarin
Lightning Talk - Xamarin Lightning Talk - Xamarin
Lightning Talk - Xamarin
 
iPhone SDK dev sharing - the very basics
iPhone SDK dev sharing - the very basicsiPhone SDK dev sharing - the very basics
iPhone SDK dev sharing - the very basics
 
Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III) Formacion en movilidad: Conceptos de desarrollo en iOS (III)
Formacion en movilidad: Conceptos de desarrollo en iOS (III)
 
Using Ruby in Android Development
Using Ruby in Android DevelopmentUsing Ruby in Android Development
Using Ruby in Android Development
 
漫游iOS开发指南
漫游iOS开发指南漫游iOS开发指南
漫游iOS开发指南
 
Mac ruby to the max - Brendan G. Lim
Mac ruby to the max - Brendan G. LimMac ruby to the max - Brendan G. Lim
Mac ruby to the max - Brendan G. Lim
 
MacRuby to The Max
MacRuby to The MaxMacRuby to The Max
MacRuby to The Max
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2
 
Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014
Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014
Conceitos e prática no desenvolvimento iOS - Mobile Conf 2014
 
Intro to iOS Application Architecture
Intro to iOS Application ArchitectureIntro to iOS Application Architecture
Intro to iOS Application Architecture
 
Cucumber meets iPhone
Cucumber meets iPhoneCucumber meets iPhone
Cucumber meets iPhone
 
iOS
iOSiOS
iOS
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
 
State ofappdevelopment
State ofappdevelopmentState ofappdevelopment
State ofappdevelopment
 

Dernier

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
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
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
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
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
[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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 

Dernier (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.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
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
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
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
[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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

Motion in the Middle: RubyMotion as a Gateway to iOS Development

Notes de l'éditeur

  1. Hey everyone, I want to quickly thank the organizers for having me and all the other great presenters today. Really quick, a few details about me…
  2. . I’m a developer at Cyrus, a software shop in Soho, we do mobile and web apps for startups and enterprise. I am a proud graduate of the Flatiron School right here in NYC, a program that’s changing lives (like mine) and the NYC tech scene, check ‘em out. I’m also the organizer of RubyBlind, a meetup where we host talks on Ruby and other programming languages and tools, as well as a co-organizer of the nycrubmotionmeetup – both of those are on meetup.com so check us out .And in case your interested in reaching out, there’s my twitter handle, github username and blog for you guys.
  3. . I’m a developer at Cyrus, a software shop in Soho, we do mobile and web apps for startups and enterprise. I am a proud graduate of the Flatiron School right here in NYC, a program that’s changing lives (like mine) and the NYC tech scene, check ‘em out. I’m also the organizer of RubyBlind, a meetup where we host talks on Ruby and other programming languages and tools, as well as a co-organizer of the nycrubmotionmeetup – both of those are on meetup.com so check us out .And in case your interested in reaching out, there’s my twitter handle, github username and blog for you guys.
  4. I’m here to talk to you about RubyMotion, a toolchain that allows you to build native iOS (and, as of about a month ago, OSX) apps with Ruby! Some of you may have read about RubyMotion before, maybe even tried it, and you may be a bit skeptical about sinking time and energy into this new toolchain, as opposed to learning native development. I used to be the same way.SOME OF YOU MAY HAVE USED BEFORE,MAY BE SKEPTICAL,LEARNING A NEW TOOL INSTEAD OF NATIVE DEVELOPMENT
  5. Four months ago, found out I was going to be on the mobile team at Cyrus building apps with RubyMotion. I was excited, but also a little wary. I’d heard from my iOS developer friends about BACK TO JANUARY OF THIS YEAR, FOUND OUT ON MOBILE TEAMEXCITED, BUT WARY
  6. Xcode,
  7. Interface builder
  8. and Objective C! There didn’t seem to be any of that in RubyMotion – what was I sacrificing by not learning these tools? Didn’t help matters when an older co-worker of mine saidDIDN”T SEEM TO BE ANY OF THAT IN RUBYMOTION – (THIS IS SORT OF A SELLING POINT) – BUT STILL, I THOUGHT MAYBE I”D BE MISSING SOMETHING,ONE OF MY PROGRAMMER BUDDIES SAID…
  9. “I don’t know about this RubyMotion stuff”, he said. “You have to learn the Cocoa APIs anyway, so I don’t see an advantage in adding another layer of abstraction.” Was I wasting my time?
  10. I forged ahead with RubyMotion, and less than four months later, my team at Cyrus and I have built and pushed Flavorpill’s new iOS app to the app store,
  11. and are working with a company in the UK to have another app for driving instructors in the app store shortly. What happened? How did I go from not having done any iOS development and being a serious skeptic to standing here in front of all of you singing RubyMotion’s praises?
  12. The central feature of RubyMotion is that it has staked a claim directly in the middle of the Ruby and Cocoa worlds (Cocoa are the Apple APIs). On the one side, you’re writing expressive, flexible Ruby code,, on the other side, that code is getting compiled as native code, making direct calls to all of the underlying APIs. By blending the two worlds, RubyMotion can act as a bridge from web to mobile development for Rubyists. STAKE A CLAIM RIGHT IN THE MIDDLE OF THE RUBY AND COCOA WORLDS. WRITE THE KIND OF CODE RUBYISTS LOVE TO WRITE – EXPRESSIVE FLEXIBLE – NOT SACRIFICING ANY OF THE FUNCTIONALITY OF THE IOS FRAMEWORKS.BLENDING, RUBYMOTION IS A BRIDGE
  13. Not one like this, pretty risky and intimidating
  14. but one like this, a solid path to your destination, in our case the excitingworld of mobile development. Now this is important, because if you’re telling your grandma or your mom about my talk later and you can’t think of the main points, just remember a bridge forms an arc. SAFE PASSAGE TO SUPERCOOL WORLD OF MOBILE DEVELOPMENT – THREE MAIN FEATURES THAT CONTRIBUTE TO THIS
  15. And in that arc are three reasons RubyMotion is a gateway to mobile development.Abstraction in the Right Places - Mixing the speed of Ruby with the power of the native frameworksReading/Translating – by which the RubyMotion developer unwittingly learns Objective C Community - the RubyMotion community is vibrant, growing, and mirroring it’s big brother the Ruby/Rails communityLet’s dig into these a little deeper…
  16. I know I mentioned this in the intro, but I just want to re-state it: When you build a RubyMotion app, you’re building NATIVE apps, just using Ruby instead of Objective-C.
  17. Part of the RubyMotion is a Ruby implementation that sits ON TOP of the Objective C runtime, the same runtime that native apps sit on top of (slide). The object model is implemented using this runtime, so all of your classes, methods, data structures, while they look like Ruby, are actually subclasses of their Objective C counterparts.
  18. For example, a string in RubyMotion, is actually a subclass of the Objective C NSMutableString class. What this means is that we can write the idiomatic, expressive Ruby that we all know and love, but our code is being compiled as native code, without any interpretation, conversion, or sacrifice in performance. AWESOME. On the flip side of this nice little abstraction, the cocoa APIs, the frameworks that we use in build all of the great functionality and interfaces of iOS apps, are completely exposed in RubyMotion. So the RM developer learns the same naked API calls as a native developer.
  19. Something like launching the app and instantiating your top level screen, which looks like this in native codelooks like this in RubyMotion – really similar, with only some slightly different syntax. I spoke to Laurent, the creator of RubyMotion, about this and he said
  20. “…by design, we expose the entire sameAPI as the one you would get in Obj-C. The iOS SDK is mature andwell documented…It would have been a bad idea to restrict what you could do with RubyMotion.” You heard it from Laurent, no restrictions or sacrifice in Cocoa functionality in RM….
  21. This mix of the speed of Ruby and the power of the Cocoa frameworks is a potent combination, one that lets us build highly functioning apps quickly and creatively. Now, that’s little bit about how RubyMotion’s benefits the app, but it also benefits the appdeveloper.
  22. …and that’s through learning some Objective C. Now, ALL of the documentation, save for the lovingly translated RubyMotiondocset, is in Objective C, so the RubyMotion developer looking for help is quickly going to see some code like this, or like this, and it’s going to make you do this.
  23. , or this…
  24. And, it’s going to make you do this
  25. Natural reaction for a Rubyist looking at some seriously verbose code. But by translating unfamiliar Objective C into our domain, Ruby, you slowly, somewhat unwittingly, learn some Objective C, which is beneficial for two reasons: The first is practical….
  26. Since it sits on top of the native runtime, RubyMotion apps are fully compatible with pure Objective C libraries. There are a lot of them out there, and you’re quickly going to run into a situation where you want to use one, say for image caching or persistence. When that happens, knowing some Objective C is going to be crucial to figuring out how to use these libraries, and ultimately allows you to use the widest set of tools available.
  27. The second reason, is that learning Objective C can expose the Rubyist to a number of CS concepts that are going on under the hood in Ruby. Things like Pointers, Typing, Memory Mgmt and Garbage collection are largely abstracted away in Ruby. As Rubyists, we consider this a good thing, and it sometimes is, but when you’re building an iOS app and you get your first weak reference error, knowing a little bit about reference counting and garbage collection is going to go a long way in helping you debug. Learning Objective C through translating from native to Ruby code gives the Rubyist, especially a beginner like me, a vehicle through which to learn these concepts and use them to build well designed, performant apps.
  28. So where does this leave us so far? We’ve got a solid understanding of the APIs, we’re implementing our ideas quicky using Ruby, we’ve got access to all the native libraries so the sky’s the limit as far as functionality, and we’ve learned some Objective C for troubleshooting under the hood. We’re now building apps with RubyMotion, and the first thing a Rubyist is going to do when you’re in the mud, building stuff? Try to make it better, and that brings me to one of the most exciting aspects of RubyMotion, the community.
  29. The RubyMotion community right now ismirroring all of the enthusiasm and collaborative spirit of it’s older brother the Ruby/Rails community. Now, we talked earlier about the very thin layer of abstraction over the native APIs in RubyMotion, which is a great thing. The flipside of that, however, is that there’s a ridiculous amount of room to inject DSL’s and Wrappers that make the those API calls more ‘Rubyish’.
  30. “I decided not to ship rubymotion with a wrapper/DSL mainly for two reasons… first, it is a very hard task, designing a good API takes time and energy,and there is a lot to cover … second, rubyists love to write DSLs (since Ruby is good at it), and i didn't want to steal the happiness” I love that quote because it really does touch on what makes Rubyists happy – contributing, and continually making things easier, more expressive, and better for developers. There are a bunch of gems that have sprung up to do just that –
  31. BubblewrapTeacupSugarcube/SweetTeaMotion-ModelPromotionIf you like, check these and a bunch of other great gems out on rubymotion-wrappers.com.
  32. There’s also, in an example of Rubyist bringing their good manners and hygiene to the mobile world, I strong testing culture emerging in the RubyMotion community. Some of the frameworks being used are: list testing frameworks.  MacBacon – ships with RM, a small rspec port for iOS, great for functional and unit testingMotion-Frank – cucumber acceptance testing, using the Shelley framework to give you all kinds of touch/scroll/pinch/tap user flowsMotion-Facon – mocking and stubbingWith the strong tradition of TDD in the Ruby/Rails world, it’s great to see this spilling over into RubyMotion, because well tested apps result in better applications, more modular design, and fearless refactoring, all of which result in freedom of creativity.
  33. Contributing frameworks and libraries, it’s what we do . This is where Rubyists really shine, and as Laurent pointed out, it’s what makes us happy. There are endless opportunities for contribution’s to the RubyMotion ecosystem, and the community really something special to be a part of, and one of my favorite things about being a RubyMotion developer. 
  34. So, what do do now? Get started – there are a bunch of great tutorials on line, there’s an excellent RubyMotion pragmatic programmers book, Laurent and the HipByte team are even offering their own training course, and the RM google group is outstanding as far as questions and troubleshooting. If you’re still skeptical about RubyMotion vs. native development, you’re certainly entitled to that and there are some great things about Objective C and native development, but I’ll just say this –four months ago, I had never done any mobile development, RM or otherwise – now, I’ve got an app in the app store and another on the way,and I’m fully immersed in a toolchain that’s making mobile development fun, envigorating, and creative. I owe that to RubyMotion, so I encourage all the Rubyists here to check it out and make your mark on the mobile world. Thanks!