MacRuby2. first = Job.find_by_company('Clemson University')
second = Job.find_by_company('Strategic Technologies')
startup = Company.new('Venetica')
Company.find_by_name('IBM').acquire(startup)
startup2 = Company.new(:name => '3volve Technology, LLC')
startup2.destroy
startup3 = Company.new(:name => 'Snooty Monkey, LLC')
me.career.to_s
3. Product.create(:name => 'Virtual Access',
:price => 50000, :platform => WIN32)
Product.create(:name => 'Jasper',
:price => 35000, :platform => JAVA)
Product.create(:name => 'VeniceBridge',
:price => 70000, :platform => J2EE)
Product.create(:name => 'IBM OmniFind Yahoo Edition',
:price => 0, :platform => J2EE)
Product.create(:name => 'Live Syllabus', :price => 0,
:platform => RUBY_ON_RAILS)
Product.create(:name => 'BubbleTimer', :price => 20,
:platform => RUBY_ON_RAILS)
Product.create(:name => 'NewsMilk iPhone', :price => 0,
:platform => IPHONE)
Product.create(:name => 'WinTheTrophy',
:price => 0, RUBY_ON_RAILS)
Product.create(:name => 'Time Portal',
:price => 35, MAC_RUBY)
me.products.to_s
5. YARV Rubinius
MRI
JRuby IronRuby MacRuby
8. cocoa = ruby_on_rails if you.online?
cocoa = ruby_libraries if you.skool == old
cocoa = j2ee if you.wear?(suits)
cocoa = dot_net if you.evil?
cocoa.analogy.to_s
10. 1985
NeXTSTEP
OPENSTEP
11. 1985
NeXTSTEP
OPENSTEP
1996
12. 1985
NeXTSTEP
OPENSTEP
1996
BSD Mach Kernal +
OPENSTEP Cocoa
= Mac OS X
13. 1985
NeXTSTEP
OPENSTEP
1996
Cocoa
BSD Mach Kernal +
OPENSTEP Cocoa
Foundation AppKit
= Mac OS X
15. Typed
Cocoa in 60 seconds
16. Typed
Late bound
Cocoa in 60 seconds
17. Typed
true == YES
Late bound
Cocoa in 60 seconds
18. Typed
true == YES
Late bound
false == NO
Cocoa in 60 seconds
19. Typed
true == YES
Late bound
false == NO
garbage == collected
Cocoa in 60 seconds
20. Typed
true == YES
Late bound
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
21. Typed
true == YES
Late bound
Object == NSObject
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
22. String == NSString
Typed
true == YES
Late bound
Object == NSObject
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
23. String == NSString
Typed
Hash == NSMutableDictionary
true == YES
Late bound
Object == NSObject
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
24. String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES
Late bound
Object == NSObject
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
25. String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Object == NSObject
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
26. String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Array == NSMutableArray
Object == NSObject
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
27. String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Array == NSMutableArray
Object == NSObject
nil can do some crazy shit
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
28. init returns self String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Array == NSMutableArray
Object == NSObject
nil can do some crazy shit
false == NO
garbage == collected it’s complicated
Cocoa in 60 seconds
29. init returns self String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Array == NSMutableArray
Object == NSObject
nil can do some crazy shit
false == NO
garbage == collected it’s complicated
my_object.method1.method2(arg1, arg2)
Cocoa in 60 seconds
30. init returns self String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Array == NSMutableArray
Object == NSObject
nil can do some crazy shit
false == NO
garbage == collected it’s complicated
my_object.method1.method2(arg1, arg2)
[[myObject message1] message2: arg1 label2: arg2];
Cocoa in 60 seconds
31. init returns self String == NSString
Typed
wordy
Hash == NSMutableDictionary
true == YES camelCased
Late bound
Array == NSMutableArray
Object == NSObject
nil can do some crazy shit
false == NO
garbage == collected it’s complicated
my_object.method1.method2(arg1, arg2)
[[myObject message1] message2: arg1 label2: arg2];
my_object.method1.method2(arg1, :label2 => arg2)
Cocoa in 60 seconds
33. Everything is an NSObject
native numbers, strings, arrays, hashes
MacRuby in 60 seconds
34. Everything is an NSObject
garbage == collected
native numbers, strings, arrays, hashes
MacRuby in 60 seconds
35. Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
garbage == collected
native numbers, strings, arrays, hashes
MacRuby in 60 seconds
36. Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
[obj isLame] == obj.lame?
garbage == collected
native numbers, strings, arrays, hashes
MacRuby in 60 seconds
37. Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
[obj isLame] == obj.lame?
garbage == collected
framework ‘foundation’
framework ‘Cocoa’
native numbers, strings, arrays, hashes
MacRuby in 60 seconds
38. wrappers
Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
[obj isLame] == obj.lame?
garbage == collected
framework ‘foundation’
framework ‘Cocoa’
native numbers, strings, arrays, hashes
MacRuby in 60 seconds
39. wrappers
Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
[obj isLame] == obj.lame?
garbage == collected
framework ‘foundation’
framework ‘Cocoa’
native numbers, strings, arrays, hashes
[[myObject message1] message2: arg1 label2: arg2];
MacRuby in 60 seconds
40. wrappers
Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
[obj isLame] == obj.lame?
garbage == collected
framework ‘foundation’
framework ‘Cocoa’
native numbers, strings, arrays, hashes
[[myObject message1] message2: arg1 label2: arg2];
my_object.method1.method2(arg1, :label2 => arg2)
MacRuby in 60 seconds
41. wrappers
Everything is an NSObject
[obj setLame: YES] == obj.lame(false)
[obj isLame] == obj.lame?
garbage == collected
framework ‘foundation’
framework ‘Cocoa’
native numbers, strings, arrays, hashes
[[myObject message1] message2: arg1 label2: arg2];
my_object.method1.method2(arg1, :label2 => arg2)
my_object.method1.method2(arg1, label2:arg2)
MacRuby in 60 seconds
47. Cocoa vs. Ruby
wordy expressive
initWithContentRect:style
game.bets.last.valid?
Mask:backing:defer:scree
n:
48. Cocoa vs. Ruby
wordy expressive
initWithContentRect:style
game.bets.last.valid?
Mask:backing:defer:scree
n:
49. HotCocoa::Mapping.map(:button => :NSButton) do
def init_with_options(button, options)
button.initWithFrame options.delete(:frame)
end
end
require 'hotcocoa'
include HotCocoa
button :frame => [0,0,20,100]
HotCocoa Constructors
52. HotCocoa::Mapping.map(:button = :NSButton) do
custom_methods do
def bezel=(value)
setBezelStyle(value)
end
def on?
state == NSOnState
end
end
end
require 'hotcocoa'
include HotCocoa
go_button = button :state = on
puts 'yeah!' if go_button.on?
HotCocoa Methods
55. MacRuby 0.4
(March)
Xcode Templates
Embed MacRuby
HotCocoa coverage /
HotCocoa::Graphics
Threaded GC
Control Ruby Runtime from
Obj-C API
56. MacRuby 0.5
YARV LLVM
Faster I/O on CFStream
Pass RubySpec
59. Mac
iPhone
Ruby on Rails
Product Design/Mgmt.
snootymonkey.com sean@snootymonkey.com