Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Use RubyMotion
Search
Brent Hargrave
April 10, 2013
Programming
68
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Use RubyMotion
Brent Hargrave
April 10, 2013
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
190
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Domain-Driven Transformation
hschwentner
2
2.3k
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
560
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
ChromeでローカルLLM
ryu1013
0
140
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
3.7k
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Scaling GitHub
holman
464
140k
Music & Morning Musume
bryan
48
7.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Building AI with AI
inesmontani
PRO
1
1.3k
From π to Pie charts
rasagy
1
400
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Building Adaptive Systems
keathley
44
3.2k
Thoughts on Productivity
jonyablonski
76
5.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Transcript
Use RubyMotion Brent Hargrave @brenthargrave Lower Manhattan iOS Meetup April
10, 2013 Tuesday, May 21, 13
What is RubyMotion? Tuesday, May 21, 13
What is RubyMotion? Terminal-based toolchain for writing native iOS apps
in Ruby Tuesday, May 21, 13
Awesome... so what? Tuesday, May 21, 13
Awesome... so what? Write apps faster, with fewer bugs, than
in Xcode / Obj-C Tuesday, May 21, 13
How? Tuesday, May 21, 13
How? •Language: more expressive Tuesday, May 21, 13
How? •Language: more expressive •Configuration: not in Xcode Tuesday, May
21, 13
How? •Language: more expressive •Configuration: not in Xcode •Editor: is
not Xcode Tuesday, May 21, 13
How? •Language: more expressive •Configuration: not in Xcode •Editor: is
not Xcode •Testing: baked-in Tuesday, May 21, 13
Ruby •No header files! •No #import statements! •Terse syntax Tuesday,
May 21, 13
AFNetworking NSURLRequest *request = [NSURLRequest requestWithURL:url]; AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { // handle success } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { // handle failure }]; [operation start]; in Objective-C Tuesday, May 21, 13
AFNetworking request = NSURLRequest.requestWithURL url operation = AFJSONRequestOperation.JSONRequestOperationWithRequest request, success:
lambda { |request, response, id| # handle success }, failure: lambda { |request, response, error, id| # handle failure } operation.start straight Ruby port Tuesday, May 21, 13
AFNetworking AFMotion::Operation::JSON.get("request/path") do |result| if result.success? # handle success elsif
result.failure? # handle failure end end “authentic” Ruby port Tuesday, May 21, 13
Ugh, Ruby performance? •RubyMotion’s Ruby != MRI •Compiled, not interpreted
•Ruby => AST => LLVM IR => machine code Tuesday, May 21, 13
Ruby in Objective-C Runtime Tuesday, May 21, 13
Ruby inherits from Obj-C # kinda/sorta what's happening class String
< NSString #... end rb_string = "foo" rb_string.methods.include? "capitalizedString" #=> true Tuesday, May 21, 13
OK, so it’s fast. What about memory? Tuesday, May 21,
13
OK, so it’s fast. What about memory? ARC-like reference counting,
not garbage collected. Tuesday, May 21, 13
Configuration: Rake, not Xcode # -*- coding: utf-8 -*- $:.unshift("/Library/RubyMotion/lib")
require 'motion/project' Motion::Project::App.setup do |app| # Use `rake config' to see complete project settings. app.name = 'sample_app' end Tuesday, May 21, 13
Builds: Rake, not Xcode Tuesday, May 21, 13
Editor: [anything], not Xcode •Vim •Emacs •TextMate •Notepad? Tuesday, May
21, 13
Editor: [anything], not Xcode •Eliminates faux vs. *actual* source structure
conflicts Tuesday, May 21, 13
Xcode is dead, long live Xcode! Tuesday, May 21, 13
RubyMotion & Xcode •Xcode artifacts can be used in RM
•Storyboards •CoreData models Tuesday, May 21, 13
RubyMotion & Xcode Motion::Project::App.setup do |app| # ... app.pods do
pod "RestKit" pod "AFNetworking" end end Tuesday, May 21, 13
RubyMotion & Xcode •Obj-C inside RM •RM in Xcode/Obj-C Tuesday,
May 21, 13
But... Tuesday, May 21, 13
Apple.can_ban? RubyMotion #=> true Tuesday, May 21, 13
RubyMotion.profiler.exists? #=> false Tuesday, May 21, 13
RubyMotion.open_source? #=> false Tuesday, May 21, 13
RubyGems •Share RM code using gems •But few existing gems
work! •No “eval” or “require” Tuesday, May 21, 13
Smug Hipsters Tuesday, May 21, 13
Keep an eye on it. Tuesday, May 21, 13
Next great mobile startup? Tuesday, May 21, 13
Next great iOS library? Tuesday, May 21, 13
Questions? Tuesday, May 21, 13
Questions? •@brenthargrave •http://brent.is •github.com/jamescallmebrent Tuesday, May 21, 13