Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BubbleWrap
Search
Marin Usalj
March 29, 2013
Programming
3
320
BubbleWrap
Slides for my talk at #inspect 2013 - the first RubyMotion conference in Bruselles.
Marin Usalj
March 29, 2013
Tweet
Share
More Decks by Marin Usalj
See All by Marin Usalj
Code signing on iOS/OSX
supermarin
2
460
Launch Arguments - the mysteries
supermarin
1
190
Swift for CLI tools
supermarin
16
25k
CocoaPods intro
supermarin
2
220
Private pods - best practices
supermarin
1
170
CLI apps. For fun and profit
supermarin
4
16k
Alcatraz internals
supermarin
2
270
ObjectiveSugar & ObjectiveRecord
supermarin
5
540
Alcatraz - Xcode package manager
supermarin
3
300
Other Decks in Programming
See All in Programming
FormFlow - Build Stunning Multistep Forms
yceruto
1
150
レガシーシステムの機能調査・開発におけるAI利活用
takuya_ohtonari
0
590
Using AI Tools Around Software Development
inouehi
0
1.2k
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
210
人には人それぞれのサービス層がある
shimabox
3
670
XSLTで作るBrainfuck処理系
makki_d
0
190
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
1
530
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
910
Benchmark
sysong
0
130
Datadog RUM 本番導入までの道
shinter61
1
250
try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう
kajitack
3
500
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
110
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Designing for humans not robots
tammielis
253
25k
4 Signs Your Business is Dying
shpigford
184
22k
Building an army of robots
kneath
306
45k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Statistics for Hackers
jakevdp
799
220k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Building Adaptive Systems
keathley
43
2.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
The Language of Interfaces
destraynor
158
25k
Transcript
BubbleWrap Marin Usalj @mneorr Tuesday, April 2, 13
iOS consultant Ruby <3 Tuesday, April 2, 13
ObjectiveRecord ObjectiveSugar Kiwi Bubblewrap Tuesday, April 2, 13
[@3 times:^{ NSLog(@"Hello!"); }]; // Hello! // Hello! // Hello!
NSDate *future = @(24).days.fromNow; // 2012-12-25 20:49:05 +0000 NSDate *past = @(1).month.ago; // 2012-11-01 20:50:28 +00:00 NSString *sentence = NSStringWithFormat(@"This is a text-with- argument %@", @1234); [sentence split:@"-"] // array = this is a text, with, argument 1234 ObjectiveSugar github.com/mneorr/ObjectiveSugar Tuesday, April 2, 13
[cars each:^(id object) { NSLog(@"Car: %@", object); }]; // Car:
Testarossa // Car: F50 // Car: F458 Italia [cars map:^id(id car){ return @([[car substringToIndex:1] isEqualToString:@"F"]); }]; // NO (Testarossa) // YES (F50) // YES (F458 Italia) ObjectiveSugar github.com/mneorr/ObjectiveSugar Tuesday, April 2, 13
// creating [Person create:@{ @"name" : @"John", @"age" : @12
}]; Person *john = [Person create]; john.name = @"John"; // save/delete [john save]; [john delete]; // querying Person *johnDoe = [Person where:@"name == 'John' AND surname = 'Doe'"].first; NSArray *people = [Person where:@{ @"age" : @18 }]; ObjectiveRecord github.com/mneorr/ObjectiveRecord Tuesday, April 2, 13
“ActiveSupport for RubyMotion” Tuesday, April 2, 13
Tuesday, April 2, 13
Motivation Tuesday, April 2, 13
AFJSONRequestOperation.JSONOperationWithReuqest( NSURLRequest.requestWithURL( NSURL.URLWithString(‘http://mneorr.com’)), success: ? failure: ? ).start Tuesday, April
2, 13
AFJSONRequestOperation.JSONOperationWithReuqest( NSURLRequest.requestWithURL( NSURL.URLWithString(‘http://mneorr.com’)), success:^{ # handle good response } failure:^{
# handle bad response }).start Tuesday, April 2, 13
Tuesday, April 2, 13
AFJSONRequestOperation.JSONOperationWithReuqest( NSURLRequest.requestWithURL( NSURL.URLWithString(‘http://mneorr.com’)), success: lambda{|response| # handle good response }
failure: lambda{|response, error| # handle bad response }).start Tuesday, April 2, 13
Tuesday, April 2, 13
AFJSONRequestOperation.JSONOperationWithReuqest( NSURLRequest.requestWithURL( NSURL.URLWithString(‘http://mneorr.com’)), success: lambda{ |request, response, json| # handle
good response } failure: lambda{ |request, response, error, json| # handle bad response }).start Tuesday, April 2, 13
BW::HTTP Tuesday, April 2, 13
HTTP.get(‘http://mneorr.com’) do |response| if response.ok? # handle good response else
# handle failure end end Tuesday, April 2, 13
params = { foo: ‘bar’, baz: [:bang, :zsh] } HTTP.post(‘http://mneorr.com’,
payload: params) do |response| if response.ok? # handle good response else # handle failure end end Tuesday, April 2, 13
BW::Core Tuesday, April 2, 13
> Device.iphone? # true > Device.ipad? # false > Device.front_camera?
# true > Device.orientation # :portrait > Device.simulator? # true > Device.ios_version # "6.0" Tuesday, April 2, 13
JSON.parse("{\"foo\":1,\"bar\": [1,2,3],\"baz\":\"awesome\"}") => { foo: 1, bar: [1,2,3], baz: “awesome”
} JSON.generate({ foo: 1, bar: [1,2,3], baz: “awesome” }) => "{\"foo\":1,\"bar\":[1,2,3],\"baz\": \"awesome\"}" Tuesday, April 2, 13
BW.create_uuid => "68ED21DB-82E5-4A56-ABEB-73650C0DB701" '#FF8A19'.to_color => #<UIDeviceRGBColor:0x8d54110> App.open_url("http://mneorr.com") # Opens the
url using the device's browser. (accepts a string url or an instance of Tuesday, April 2, 13
Persistence Tuesday, April 2, 13
[Client]: hey, how hard is it to store some user
data? We may need to keep track of Foo and Bar! Tuesday, April 2, 13
Tuesday, April 2, 13
NSUserDefaults.standardUserDefaults .setValue(“Inspect”, forKey:”conference”) conf = NSUserDefaults.standardUserDefaults .valueForKey(“conference”) Tuesday, April 2,
13
Y U NO SAVE? Tuesday, April 2, 13
You didn’t #synchronize. Tuesday, April 2, 13
NSUserDefaults.standardUserDefaults .setValue(“Inspect”, forKey:”conference”) NSUserDefaults.standardUserDefaults .synchronize Tuesday, April 2, 13
include App Persistence[‘conference’] = “Inspect” conf = Persistence[‘conference’] Tuesday, April
2, 13
BW::Location Tuesday, April 2, 13
BW::Location.get do |result| result[:to].longitude result[:from].longitude end BW::Location.get_significant BW::Location.get_once Tuesday, April
2, 13
BW::UI Tuesday, April 2, 13
Tuesday, April 2, 13
view.when_swiped view.when_pressed view.when_panned view.when_pinched view.when_rotated view.when_tapped Tuesday, April 2, 13
@recognizer = view.when_swiped Tuesday, April 2, 13
BW::Media Tuesday, April 2, 13
@playa = BW::Media::Player.new @playa.play_modal(@local_file) Tuesday, April 2, 13
BW::Reactor (EventMachine) Tuesday, April 2, 13
“There is a ton of great stuff in BubbleWrap.” “If
you’re doing any RubyMotion work, I think you should definitely checkout BubbleWrap!” - the changelog Tuesday, April 2, 13
“To make our networking code painless, we’ll use BubbleWrap” -
smashingmagazine.com “Lots of good stuff in BubbleWrap” - Darrin Holst Tuesday, April 2, 13
“If there’s any one thing you can do after starting
a RubyMotion project, it’s immediately drop BubbleWrap into your repo.” - Nick, 37 Signals Tuesday, April 2, 13
github.com/rubymotion/bubblewrap bubblewrap.io Tuesday, April 2, 13
Questions Tuesday, April 2, 13
Thanks HipByte! Tuesday, April 2, 13