macruby - when objective-c and ruby meet
DESCRIPTION
MACRUBY: WHAT'S THE BIG DEAL?Last year, Apple released MacRuby, an open source Ruby implementationwritten on top of the Objective-C runtime. Writing native MacOSXapplications in Ruby without having to pay the cost of using a bridgeis now a reality. This is an important milestone for Ruby, Apple andthe Ruby community.Matt Aimonetti explains the implementation, show how to builddesktop applications with MacRuby & HotCocoa, and discuss why Rubydevelopers should add this new tool to their utility belt. Matt also talks about the future of MacRuby.TRANSCRIPT
MacRubyRuby + ObjC
Friday, February 6, 2009
COCOAApple's Objective-C based programming environment for
Mac OS X
Friday, February 6, 2009
COCOA
• frameworks
• APIs
• accompanying runtimes
Goal: native Mac applications
Friday, February 6, 2009
OBJECTIVE-C 2.0
• reflective
• object-oriented
• garbage collection
• 32 and 64-bit support
Friday, February 6, 2009
obj.method parameter
RUBY
Friday, February 6, 2009
[obj method:parameter];
OBJECTIVE-C 2.0
Friday, February 6, 2009
friends = []
RUBY
Friday, February 6, 2009
NSMutableArray *friends = [[NSMutableArray alloc] init];
OBJECTIVE-C 2.0
Friday, February 6, 2009
COCOA
Goal => native Mac applications => ObjC
Friday, February 6, 2009
:emo:Friday, February 6, 2009
bridge between the Objective-C runtime and MRI
RUBYCOCOA
Friday, February 6, 2009
No more ObjC code to write :)
RUBYCOCOA
Friday, February 6, 2009
Write cocoa apps in RUBY :)
RUBYCOCOA
Friday, February 6, 2009
potentially prohibitive cost :(
RUBYCOCOA
Friday, February 6, 2009
conversion cost :(
RUBYCOCOA
Friday, February 6, 2009
message forwarding cost :(
RUBYCOCOA
Friday, February 6, 2009
MacRuby
Friday, February 6, 2009
APPLE'S OPEN SOURCE PROJECT
MacRuby
Friday, February 6, 2009
NOT A BRIDGE
MacRuby
Friday, February 6, 2009
BUILT ON TOP OF THEOBJECTIVE-C RUNTIME
MacRuby
Friday, February 6, 2009
all classes => Objective-C all methods => Objective-C all objects => Objective-C
MacRuby
Friday, February 6, 2009
CoreFoundation
MacRuby
Friday, February 6, 2009
native CoreFoundation data types
MacRuby
Friday, February 6, 2009
native threads
MacRuby
Friday, February 6, 2009
Objective-C Garbage Collector
MacRuby
Friday, February 6, 2009
CODE EXAMPLE
Friday, February 6, 2009
$ macirb>> friends = []=> []>> friends.class=> NSMutableArray>> friends << "Juan"=> ["Juan"]>> friends << "Denis"=> ["Juan", "Denis"]
Friday, February 6, 2009
>> friends << {first_name: "Laurent", last_name: "Sansonetti"}=> ["Juan", "Denis", {:first_name=>"Laurent", :last_name=>"Sansonetti"}]>> friends.length=> 3
Friday, February 6, 2009
>> name = "Matt Aimonetti"=> "Matt Aimonetti">> name.uppercaseString=> "MATT AIMONETTI">> name.upcase=> "MATT AIMONETTI"
Friday, February 6, 2009
X-CODE ENVIRONMENT
Friday, February 6, 2009
FREE
http://developer.apple.com/TOOLS/xcode/
Friday, February 6, 2009
WELL DOCUMENTED
http://developer.apple.com/index.html
Friday, February 6, 2009
WELL DONEFriday, February 6, 2009
GREAT TOOLSFriday, February 6, 2009
NEW PROJECTFriday, February 6, 2009
MacRuby.frameworkFriday, February 6, 2009
rb_main.rbFriday, February 6, 2009
# 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.fileSystemRepresentationDir.entries(dir_path).each do |path| if path != File.basename(__FILE__) and path[-3..-1] == '.rb' require(path) endend
# Starting the Cocoa main loop.NSApplicationMain(0, nil)
Friday, February 6, 2009
MainMenu.nibFriday, February 6, 2009
Friday, February 6, 2009
V of MVCFriday, February 6, 2009
PREPARE BINDINGSFriday, February 6, 2009
C of MVCFriday, February 6, 2009
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
class Controller attr_writer :friendsTableViewend
ivar = outletFriday, February 6, 2009
class Controller
def awakeFromNib end
end
called when instantiated by nibFriday, February 6, 2009
class Controller
def awakeFromNib @friends = [] @friendsTableView.dataSource = self end
end
set the NSTableView data sourceFriday, February 6, 2009
class Controller
def addFriend(sender) end
end
button actionFriday, February 6, 2009
bind the UI with the ControllerFriday, February 6, 2009
NSTableDataSource informal protocol
Friday, February 6, 2009
def numberOfRowsInTableView(view) end
NSTableDataSource protocolFriday, February 6, 2009
def tableView( view, objectValueForTableColumn:column, row:index ) end
NSTableView selectorFriday, February 6, 2009
def tableView(view, setObjectValue:object, forTableColumn:column, row:index) end
NSTableView selectorFriday, February 6, 2009
CompileFriday, February 6, 2009
HOTCOCOAFriday, February 6, 2009
PURE RUBY SEXINESS
Friday, February 6, 2009
NO X-CODE
Friday, February 6, 2009
RUBY DSL FOR COCOA
Friday, February 6, 2009
$ hotcocoa sdruby
Friday, February 6, 2009
$ hotcocoa sdruby
PROJECT SETTINGS
Friday, February 6, 2009
$ hotcocoa sdruby
CORE OF THE APP CODE
Friday, February 6, 2009
$ hotcocoa sdruby
MENU BAR
Friday, February 6, 2009
$ hotcocoa sdruby
RAKE TASKS
Friday, February 6, 2009
$ hotcocoa sdruby
APP RESOURCES
Friday, February 6, 2009
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
NSApplication
application :name => "Sdruby" do |app| end
Friday, February 6, 2009
set the delegation
application :name => "Sdruby" do |app| app.delegate = self end
Friday, February 6, 2009
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
NSWindow helper
window(:frame => [100, 100, 500, 500], :title => "SDRuby") do |win|end
Friday, February 6, 2009
NSTextField helper
label(:text => "Hello from HotCocoa", :layout => {:start => false})
Friday, February 6, 2009
contentView.addSubview helper
win << label(:text => "Hello from HotCocoa")
Friday, February 6, 2009
window callback
win.will_close { exit }
Friday, February 6, 2009
$ macrake
Friday, February 6, 2009
USE ANY COCOA FRAMEWORK
Friday, February 6, 2009
WEBKIT
Friday, February 6, 2009
framework 'webkit'
Friday, February 6, 2009
win << web_view( :layout => {:expand => [:width, :height]}, :url => "http://sdruby.com")
Friday, February 6, 2009
Friday, February 6, 2009
$ macrake deploy
Raffle.app
Friday, February 6, 2009
AND MUCH MORE
Friday, February 6, 2009
DEMO APPS
Friday, February 6, 2009
SD RUBY RAFFLE APPFriday, February 6, 2009
¿What to do with MacRuby?
Friday, February 6, 2009
WEB APPCLIENT
Friday, February 6, 2009
REUSE RUBY CODE
Friday, February 6, 2009
RETHINK DESKTOP APPS
Friday, February 6, 2009
WEBKIT INTEGRATION
Friday, February 6, 2009
¿MacRuby’s future?
Friday, February 6, 2009
MUCH BETTER PERFORMANCE
Friday, February 6, 2009
NEW VM
Friday, February 6, 2009
SOURCE OBFUSCATION
Friday, February 6, 2009
COMPILED CODE
Friday, February 6, 2009
OPTIMIZATIONS BASED ON THE UNDERLYING OS
Friday, February 6, 2009
SOLID & SUPPORTED WAY TO WRITE COCOA APPS
Friday, February 6, 2009
¿MAINSTREAM WAY TO WRITE COCOA APPS?
Friday, February 6, 2009
¿IPHONE OUTPUT?
Friday, February 6, 2009
resources:http://www.macruby.org
http://tinyurl.com/macruby-getting-startedhttp://macruby.org/trac/wiki/MacRubyTutorial
http://github.com/masterkain/macrubyhttp://tinyurl.com/macruby-hillegass
Friday, February 6, 2009
Props to Rich Kilmer (hotcocoa)
& Laurent Sansonetti
(MacRuby)
Friday, February 6, 2009