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
360
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
BubbleWrap
Slides for my talk at #inspect 2013 - the first RubyMotion conference in Bruselles.
Marin Usalj
March 29, 2013
More Decks by Marin Usalj
See All by Marin Usalj
Code signing on iOS/OSX
supermarin
2
500
Launch Arguments - the mysteries
supermarin
1
260
Swift for CLI tools
supermarin
16
25k
CocoaPods intro
supermarin
2
260
Private pods - best practices
supermarin
1
200
CLI apps. For fun and profit
supermarin
4
16k
Alcatraz internals
supermarin
2
360
ObjectiveSugar & ObjectiveRecord
supermarin
5
590
Alcatraz - Xcode package manager
supermarin
3
360
Other Decks in Programming
See All in Programming
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
210
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
150
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
270
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
120
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
250
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
6.7k
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
200
初めての模倣学習とVLA
natsutan
0
100
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
250
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.9k
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
Featured
See All Featured
New Earth Scene 8
popppiees
3
2.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
How to Talk to Developers About Accessibility
jct
2
520
The Spectacular Lies of Maps
axbom
PRO
1
940
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Music & Morning Musume
bryan
47
7.3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
Git: the NoSQL Database
bkeepers
PRO
432
67k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
From π to Pie charts
rasagy
0
310
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