Slide 1

Slide 1 text

MacRuby Ruby + ObjC Friday, February 6, 2009

Slide 2

Slide 2 text

COCOA Apple's Objective-C based programming environment for Mac OS X Friday, February 6, 2009

Slide 3

Slide 3 text

COCOA • frameworks • APIs • accompanying runtimes Goal: native Mac applications Friday, February 6, 2009

Slide 4

Slide 4 text

OBJECTIVE-C 2.0 • reflective • object-oriented • garbage collection • 32 and 64-bit support Friday, February 6, 2009

Slide 5

Slide 5 text

obj.method parameter RUBY Friday, February 6, 2009

Slide 6

Slide 6 text

[obj method:parameter]; OBJECTIVE-C 2.0 Friday, February 6, 2009

Slide 7

Slide 7 text

friends = [] RUBY Friday, February 6, 2009

Slide 8

Slide 8 text

NSMutableArray *friends = [[NSMutableArray alloc] init]; OBJECTIVE-C 2.0 Friday, February 6, 2009

Slide 9

Slide 9 text

COCOA Goal => native Mac applications => ObjC Friday, February 6, 2009

Slide 10

Slide 10 text

:emo: Friday, February 6, 2009

Slide 11

Slide 11 text

bridge between the Objective-C runtime and MRI RUBYCOCOA Friday, February 6, 2009

Slide 12

Slide 12 text

No more ObjC code to write :) RUBYCOCOA Friday, February 6, 2009

Slide 13

Slide 13 text

Write cocoa apps in RUBY :) RUBYCOCOA Friday, February 6, 2009

Slide 14

Slide 14 text

potentially prohibitive cost :( RUBYCOCOA Friday, February 6, 2009

Slide 15

Slide 15 text

conversion cost :( RUBYCOCOA Friday, February 6, 2009

Slide 16

Slide 16 text

message forwarding cost :( RUBYCOCOA Friday, February 6, 2009

Slide 17

Slide 17 text

MacRuby Friday, February 6, 2009

Slide 18

Slide 18 text

APPLE'S OPEN SOURCE PROJECT MacRuby Friday, February 6, 2009

Slide 19

Slide 19 text

NOT A BRIDGE MacRuby Friday, February 6, 2009

Slide 20

Slide 20 text

BUILT ON TOP OF THE OBJECTIVE-C RUNTIME MacRuby Friday, February 6, 2009

Slide 21

Slide 21 text

all classes => Objective-C all methods => Objective-C all objects => Objective-C MacRuby Friday, February 6, 2009

Slide 22

Slide 22 text

CoreFoundation MacRuby Friday, February 6, 2009

Slide 23

Slide 23 text

native CoreFoundation data types MacRuby Friday, February 6, 2009

Slide 24

Slide 24 text

native threads MacRuby Friday, February 6, 2009

Slide 25

Slide 25 text

Objective-C Garbage Collector MacRuby Friday, February 6, 2009

Slide 26

Slide 26 text

CODE EXAMPLE Friday, February 6, 2009

Slide 27

Slide 27 text

$ macirb >> friends = [] => [] >> friends.class => NSMutableArray >> friends << "Juan" => ["Juan"] >> friends << "Denis" => ["Juan", "Denis"] Friday, February 6, 2009

Slide 28

Slide 28 text

>> friends << {first_name: "Laurent", last_name: "Sansonetti"} => ["Juan", "Denis", {:first_name=>"Laurent", :last_name=>"Sansonetti"}] >> friends.length => 3 Friday, February 6, 2009

Slide 29

Slide 29 text

>> name = "Matt Aimonetti" => "Matt Aimonetti" >> name.uppercaseString => "MATT AIMONETTI" >> name.upcase => "MATT AIMONETTI" Friday, February 6, 2009

Slide 30

Slide 30 text

X-CODE ENVIRONMENT Friday, February 6, 2009

Slide 31

Slide 31 text

FREE http://developer.apple.com/TOOLS/xcode/ Friday, February 6, 2009

Slide 32

Slide 32 text

WELL DOCUMENTED http://developer.apple.com/index.html Friday, February 6, 2009

Slide 33

Slide 33 text

WELL DONE Friday, February 6, 2009

Slide 34

Slide 34 text

GREAT TOOLS Friday, February 6, 2009

Slide 35

Slide 35 text

NEW PROJECT Friday, February 6, 2009

Slide 36

Slide 36 text

MacRuby.framework Friday, February 6, 2009

Slide 37

Slide 37 text

rb_main.rb Friday, February 6, 2009

Slide 38

Slide 38 text

# Loading the Cocoa framework. If you need to load more frameworks, you can # do that here too. framework 'Cocoa' # Loading all the Ruby project files. dir_path = NSBundle.mainBundle.resourcePath.fileSystemRepresentation Dir.entries(dir_path).each do |path| if path != File.basename(__FILE__) and path[-3..-1] == '.rb' require(path) end end # Starting the Cocoa main loop. NSApplicationMain(0, nil) Friday, February 6, 2009

Slide 39

Slide 39 text

MainMenu.nib Friday, February 6, 2009

Slide 40

Slide 40 text

Friday, February 6, 2009

Slide 41

Slide 41 text

V of MVC Friday, February 6, 2009

Slide 42

Slide 42 text

PREPARE BINDINGS Friday, February 6, 2009

Slide 43

Slide 43 text

C of MVC Friday, February 6, 2009

Slide 44

Slide 44 text

class Controller attr_writer :friendsTableView def awakeFromNib end def numberOfRowsInTableView(view) end def tableView(view, objectValueForTableColumn:column, row:index) end def tableView(view, setObjectValue:object, forTableColumn:column, row:index) end def addFriend(sender) end end Friday, February 6, 2009

Slide 45

Slide 45 text

class Controller attr_writer :friendsTableView end ivar = outlet Friday, February 6, 2009

Slide 46

Slide 46 text

class Controller def awakeFromNib end end called when instantiated by nib Friday, February 6, 2009

Slide 47

Slide 47 text

class Controller def awakeFromNib @friends = [] @friendsTableView.dataSource = self end end set the NSTableView data source Friday, February 6, 2009

Slide 48

Slide 48 text

class Controller def addFriend(sender) end end button action Friday, February 6, 2009

Slide 49

Slide 49 text

bind the UI with the Controller Friday, February 6, 2009

Slide 50

Slide 50 text

NSTableDataSource informal protocol Friday, February 6, 2009

Slide 51

Slide 51 text

def numberOfRowsInTableView(view) end NSTableDataSource protocol Friday, February 6, 2009

Slide 52

Slide 52 text

def tableView( view, objectValueForTableColumn:column, row:index ) end NSTableView selector Friday, February 6, 2009

Slide 53

Slide 53 text

def tableView(view, setObjectValue:object, forTableColumn:column, row:index) end NSTableView selector Friday, February 6, 2009

Slide 54

Slide 54 text

Compile Friday, February 6, 2009

Slide 55

Slide 55 text

HOTCOCOA Friday, February 6, 2009

Slide 56

Slide 56 text

PURE RUBY SEXINESS Friday, February 6, 2009

Slide 57

Slide 57 text

NO X-CODE Friday, February 6, 2009

Slide 58

Slide 58 text

RUBY DSL FOR COCOA Friday, February 6, 2009

Slide 59

Slide 59 text

$ hotcocoa sdruby Friday, February 6, 2009

Slide 60

Slide 60 text

$ hotcocoa sdruby PROJECT SETTINGS Friday, February 6, 2009

Slide 61

Slide 61 text

$ hotcocoa sdruby CORE OF THE APP CODE Friday, February 6, 2009

Slide 62

Slide 62 text

$ hotcocoa sdruby MENU BAR Friday, February 6, 2009

Slide 63

Slide 63 text

$ hotcocoa sdruby RAKE TASKS Friday, February 6, 2009

Slide 64

Slide 64 text

$ hotcocoa sdruby APP RESOURCES Friday, February 6, 2009

Slide 65

Slide 65 text

RUBY HELPERS def start application :name => "Sdruby" do |app| app.delegate = self window(:frame => [100, 100, 500, 500], :title => "SDRuby") do |win| win << label(:text => "Hello from HotCocoa", :layout => {:start => false}) win.will_close { exit } end end end Friday, February 6, 2009

Slide 66

Slide 66 text

NSApplication application :name => "Sdruby" do |app| end Friday, February 6, 2009

Slide 67

Slide 67 text

set the delegation application :name => "Sdruby" do |app| app.delegate = self end Friday, February 6, 2009

Slide 68

Slide 68 text

set the delegation # file/open def on_open(menu) end # file/new def on_new(menu) end # help menu item def on_help(menu) end # window/zoom def on_zoom(menu) end # window/bring_all_to_front def on_bring_all_to_front(menu) end Friday, February 6, 2009

Slide 69

Slide 69 text

NSWindow helper window(:frame => [100, 100, 500, 500], :title => "SDRuby") do |win| end Friday, February 6, 2009

Slide 70

Slide 70 text

NSTextField helper label(:text => "Hello from HotCocoa", :layout => {:start => false}) Friday, February 6, 2009

Slide 71

Slide 71 text

contentView.addSubview helper win << label(:text => "Hello from HotCocoa") Friday, February 6, 2009

Slide 72

Slide 72 text

window callback win.will_close { exit } Friday, February 6, 2009

Slide 73

Slide 73 text

$ macrake Friday, February 6, 2009

Slide 74

Slide 74 text

USE ANY COCOA FRAMEWORK Friday, February 6, 2009

Slide 75

Slide 75 text

WEBKIT Friday, February 6, 2009

Slide 76

Slide 76 text

framework 'webkit' Friday, February 6, 2009

Slide 77

Slide 77 text

win << web_view( :layout => {:expand => [:width, :height]}, :url => "http://sdruby.com") Friday, February 6, 2009

Slide 78

Slide 78 text

Friday, February 6, 2009

Slide 79

Slide 79 text

$ macrake deploy Raffle.app Friday, February 6, 2009

Slide 80

Slide 80 text

AND MUCH MORE Friday, February 6, 2009

Slide 81

Slide 81 text

DEMO APPS Friday, February 6, 2009

Slide 82

Slide 82 text

SD RUBY RAFFLE APP Friday, February 6, 2009

Slide 83

Slide 83 text

¿What to do with MacRuby? Friday, February 6, 2009

Slide 84

Slide 84 text

WEB APP CLIENT Friday, February 6, 2009

Slide 85

Slide 85 text

REUSE RUBY CODE Friday, February 6, 2009

Slide 86

Slide 86 text

RETHINK DESKTOP APPS Friday, February 6, 2009

Slide 87

Slide 87 text

WEBKIT INTEGRATION Friday, February 6, 2009

Slide 88

Slide 88 text

¿MacRuby’s future? Friday, February 6, 2009

Slide 89

Slide 89 text

MUCH BETTER PERFORMANCE Friday, February 6, 2009

Slide 90

Slide 90 text

NEW VM Friday, February 6, 2009

Slide 91

Slide 91 text

SOURCE OBFUSCATION Friday, February 6, 2009

Slide 92

Slide 92 text

COMPILED CODE Friday, February 6, 2009

Slide 93

Slide 93 text

OPTIMIZATIONS BASED ON THE UNDERLYING OS Friday, February 6, 2009

Slide 94

Slide 94 text

SOLID & SUPPORTED WAY TO WRITE COCOA APPS Friday, February 6, 2009

Slide 95

Slide 95 text

¿MAINSTREAM WAY TO WRITE COCOA APPS? Friday, February 6, 2009

Slide 96

Slide 96 text

¿IPHONE OUTPUT? Friday, February 6, 2009

Slide 97

Slide 97 text

resources: http://www.macruby.org http://tinyurl.com/macruby-getting-started http://macruby.org/trac/wiki/MacRubyTutorial http://github.com/masterkain/macruby http://tinyurl.com/macruby-hillegass Friday, February 6, 2009

Slide 98

Slide 98 text

Props to Rich Kilmer (hotcocoa) & Laurent Sansonetti (MacRuby) Friday, February 6, 2009