You are on page 1of 42

MAC

RUBY Brendan G. Lim


@brendanlim
brendan@intridea.com

Wednesday, December 1, 2010


WHO HERE HAS A
MAC?

Wednesday, December 1, 2010


WHO HERE HAS
WORKED WITH
OBJECTIVE-C?

Wednesday, December 1, 2010


DEVELOPED
OSX OR IPHONE APPS?

Wednesday, December 1, 2010


OBJECTIVE-C
• Object-oriented extensions to C

• Strongly typed

• Like Ruby, influenced by Smalltalk

• Primary language for Cocoa

• Garbage collection (2.0)

• 32 and 64-bit support

Wednesday, December 1, 2010


COCOA

• Set of object-oriented frameworks

• Used for writing Max OSX and iPhone OS apps

• Includes FoundationKit, and AppKit

• Typically built using tools like XCode and Interface Builder

Wednesday, December 1, 2010


CORE FOUNDATION
• Low level libraries that ship with Mac OSX

• Used for passing primitive types to OSX C routines

• Most routines follow ‘CF’ naming convention

• Open-Sourced by Apple as CF-Lite

Wednesday, December 1, 2010


WHY RUBY INSTEAD
OF OBJECTIVE-C?

Wednesday, December 1, 2010


RUBY VS OBJECTIVE-C

object.method(param)
=

[object method:param];

Wednesday, December 1, 2010


RUBY VS OBJECTIVE-C

person.set_name(“john”, “doe”)

[person setNameWithFirst:@”john”
withLast:@”doe”];

Wednesday, December 1, 2010


RUBY VS OBJECTIVE-C

array = []
=
NSMutableArray *array =
[[NSMutableArray alloc] init];

Wednesday, December 1, 2010


RUBY VS OBJECTIVE-C

“ string”.strip
=
[@“ string” stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]]

Wednesday, December 1, 2010


RUBY VS OBJECTIVE-C

dictionary = {“key1” => “value1”, “key2” => “value2”}

=
NSArray *keys = [NSArray arrayWithObjects:@”key1”,@”key2”];
NSArray *data = [NSArray arrayWithObjects:@”value1”,@”value2”];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

Wednesday, December 1, 2010


RUBYCOCOA
• Mac OSX framework

• Bridge between Objective-C and Ruby

• Can manipulate Objective-C objects using Ruby

• Write Cocoa apps in Ruby

• Runs on Ruby 1.8

• Ships with OSX Leopard

Wednesday, December 1, 2010


RUBYCOCOA VS OBJECTIVE-C

setObject_forKey_(iphone, phone)

[setObject:iphone forKey:phone];

Wednesday, December 1, 2010


SO WHY NOT
RUBYCOCOA?

Wednesday, December 1, 2010


WHY NOT RUBYCOCOA

• Performance

• Two runtimes

• Two garbage collectors

• Object conversions

• Syntax doesn’t feel like Ruby

Wednesday, December 1, 2010


MAC
RUBY

Wednesday, December 1, 2010


MAC
RUBY
• Impl. of Ruby 1.9 that runs on the Objective-C runtime

• Open sourced by Apple

• Originally created by Laurent Sansonetti

• Replacing RubyCocoa

• Objects are peers with no translation layer

• Multi-core (Grand Central Dispatch)

• HotCocoa Support
Wednesday, December 1, 2010
MAC
RUBY
Object NSObject
String NSMutableString
Number NSNumber
Array NSMutableArray
Hash NSMutableDictionary

Wednesday, December 1, 2010


MAC
RUBY

Objects Objective-C
Classes Objective-C
Methods Objective-C

Wednesday, December 1, 2010


MAC
RUBY
>> s = “rubyconf”
=> “rubyconf”

>> s.class
=> NSMutableString

>> s.class.ancestors
=> [NSMutableString,NSString,Comparable,NSObject,Kernel]

>> s.upcase
=> “RUBYCONF”

>> s.uppercaseString
=> “RUBYCONF”

Wednesday, December 1, 2010


MAC
RUBY
>> NSString.new(“rubyconf”)
=> “rubyconf”

>> NSString.stringWithString(“rubyconf”)
=> “rubyconf”

>> NSString.alloc.initWithString(“rubyconf”)
=> “rubyconf”

Wednesday, December 1, 2010


MAC
RUBY
>> a = []
=> []

>> a.class
=> NSMutableArray

>> a.class.ancestors
=> [NSMutableArray,NSArray,Enumerable,NSObject,Kernel]

>> a << “RubyConf”


=> [“RubyConf”]

Wednesday, December 1, 2010


MACRUBY VS OBJECTIVE-C

-(void) locationManager:(CLLocationManager *)manager


didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
}

Wednesday, December 1, 2010


MACRUBY VS OBJECTIVE-C
def locationManager(manager
didUpdateToLocation:newLocation
fromLocation:oldLocation)
end

-(void) locationManager:(CLLocationManager *)manager


didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
}

Wednesday, December 1, 2010


MACRUBY VS OBJECTIVE-C
def locationManager(manager
didUpdateToLocation:newLocation
fromLocation:oldLocation)
end

>> locationManager(manager
didUpdateToLocation:newLocation,
fromLocation:oldLocation)

Wednesday, December 1, 2010


MACRUBY VS OBJECTIVE-C
def locationManager(manager
didUpdateToLocation:newLocation
fromLocation:oldLocation)
end

>> locationManager(manager
:didUpdateToLocation => newLocation,
:fromLocation => oldLocation)

Wednesday, December 1, 2010


MACRUBY VS OBJECTIVE-C
Interface Builder Outlets

attr_accessor :my_string

=
# Interface (header file)
NSString *myString;
@property(nonatomic,retain) IBOutlet NSString *myString;

Wednesday, December 1, 2010


MACRUBY VS OBJECTIVE-C
Interface Builder Actions

def my_action(sender)
...
end
=
# Interface
-(IBAction) myAction:(id)sender;

# Implementation
-(IBAction) myAction:(id)sender { ... }

Wednesday, December 1, 2010


WAIT, WHAT ABOUT
MACRUBY FOR IPHONE/IPAD?

Wednesday, December 1, 2010


MAC
RUBY

Xcode

Wednesday, December 1, 2010


MAC
RUBY

Interface Builder

Wednesday, December 1, 2010


MAC
RUBY

Instruments

Wednesday, December 1, 2010


MAC
RUBY

Let’s build something ...

Wednesday, December 1, 2010


TDD IN MACRUBY
• Good supports for tests

• Any Ruby testing framework instantly becomes an


Objective-C testing framework

• Test::Unit

• RSpec

• Cucumber

• etc...

Wednesday, December 1, 2010


HOTCOCOA

• Use Ruby to build a UI without Interface Builder

• Developed by Rich Kilmer

• MacRuby 0.5 now supports HotCocoa

• Packaged as a gem in MacRuby 0.5

Wednesday, December 1, 2010


MACRUBY VS HOTCOCOA
win = NSWindow.alloc.initWithContentRect([10,20,300,300],
:styleMask => (NSTitleWindowMask |
NSCloseableWindowMask |
NSMiniatureizableWindowMask |
NSResizeableWindowMask)

win = window :frame => [10,20,300,300]

Wednesday, December 1, 2010


HELLO WORLD IN
HOTCOCOA
require ‘rubygems’
require ‘hotcocoa’
include HotCocoa
application do |app|
win = window :size => [100,50]
b = button :title => ‘Hello’
b.on_action { puts ‘World!’ }
win << b
end

Wednesday, December 1, 2010


MAC
RUBY

Very exciting future

Wednesday, December 1, 2010


MAC
RUBY

It’s Ruby for Cocoa Apps!

Wednesday, December 1, 2010


MAC
RUBY
Questions?
http://macruby.org
http://macruby.org/hotcocoa.html
http://bit.ly/macruby-getting-started
http://bit.ly/macruby-examples
http://bit.ly/tdd-macruby
http://github.com/masterkain/macruby

Wednesday, December 1, 2010

You might also like