MacRuby
Upcoming SlideShare
Loading in...5
×
 

MacRuby

on

  • 3,090 views

My MacRuby talk to the raleigh.rb user group on April 21, 2009.

My MacRuby talk to the raleigh.rb user group on April 21, 2009.

Statistics

Views

Total Views
3,090
Views on SlideShare
3,079
Embed Views
11

Actions

Likes
3
Downloads
37
Comments
0

4 Embeds 11

http://www.slideshare.net 5
http://www.linkedin.com 3
https://www.linkedin.com 2
http://www.lmodules.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

MacRuby MacRuby Presentation Transcript

  • MacRuby raleigh.rb April 21, 2009 Sean Johnson Snooty Monkey, LLC
  • 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
  • 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
  • O Ruby, Ruby, wherefore art thou Ruby?
  • YARV Rubinius MRI JRuby IronRuby MacRuby
  • Cocoa is better than Java. It’s 60% chocolatier.
  • 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
  • 1985
  • 1985 NeXTSTEP OPENSTEP
  • 1985 NeXTSTEP OPENSTEP 1996
  • 1985 NeXTSTEP OPENSTEP 1996 BSD Mach Kernal + OPENSTEP Cocoa = Mac OS X
  • 1985 NeXTSTEP OPENSTEP 1996 Cocoa BSD Mach Kernal + OPENSTEP Cocoa Foundation AppKit = Mac OS X
  • Cocoa in 60 seconds
  • Typed Cocoa in 60 seconds
  • Typed Late bound Cocoa in 60 seconds
  • Typed true == YES Late bound Cocoa in 60 seconds
  • Typed true == YES Late bound false == NO Cocoa in 60 seconds
  • Typed true == YES Late bound false == NO garbage == collected Cocoa in 60 seconds
  • Typed true == YES Late bound false == NO garbage == collected it’s complicated Cocoa in 60 seconds
  • Typed true == YES Late bound Object == NSObject false == NO garbage == collected it’s complicated Cocoa in 60 seconds
  • String == NSString Typed true == YES Late bound Object == NSObject false == NO garbage == collected it’s complicated Cocoa in 60 seconds
  • String == NSString Typed Hash == NSMutableDictionary true == YES Late bound Object == NSObject false == NO garbage == collected it’s complicated Cocoa in 60 seconds
  • String == NSString Typed wordy Hash == NSMutableDictionary true == YES Late bound Object == NSObject false == NO garbage == collected it’s complicated Cocoa in 60 seconds
  • String == NSString Typed wordy Hash == NSMutableDictionary true == YES camelCased Late bound Object == NSObject false == NO garbage == collected it’s complicated Cocoa in 60 seconds
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • native numbers, strings, arrays, hashes MacRuby in 60 seconds
  • Everything is an NSObject native numbers, strings, arrays, hashes MacRuby in 60 seconds
  • Everything is an NSObject garbage == collected native numbers, strings, arrays, hashes MacRuby in 60 seconds
  • Everything is an NSObject [obj setLame: YES] == obj.lame(false) garbage == collected native numbers, strings, arrays, hashes MacRuby in 60 seconds
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • In the beginning...
  • macruby.org
  • Install
  • Hello, I’m a Mac
  • But...Cocoa is lame!
  • Cocoa vs. Ruby wordy expressive initWithContentRect:style game.bets.last.valid? Mask:backing:defer:scree n:
  • Cocoa vs. Ruby wordy expressive initWithContentRect:style game.bets.last.valid? Mask:backing:defer:scree n:
  • 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
  • HotCocoa::Mapping.map(:button => :NSButton) do defaults :bezel => :rounded, :frame => DefaultEmptyRect, :layout => {} end require 'hotcocoa' include HotCocoa b = button HotCocoa Defaults
  • HotCocoa::Mapping.map(:button => :NSButton) do constant :state, { :on => NSOnState, :o => NSOState, :mixed => NSMixedState } end require 'hotcocoa' include HotCocoa button :state => :on HotCocoa Constants
  • 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
  • HotCocoa /Developer/Examples/Ruby/MacRuby/HotCocoa /Library/Frameworks/MacRuby.framework/Versions/ 0.4/usr/lib/ruby/1.9.1/hotcocoa/mappings
  • You got Chocolate in my Peanut Butter!
  • MacRuby 0.4 (March) Xcode Templates Embed MacRuby HotCocoa coverage / HotCocoa::Graphics Threaded GC Control Ruby Runtime from Obj-C API
  • MacRuby 0.5 YARV LLVM Faster I/O on CFStream Pass RubySpec
  • @macruby #ruby-osx macruby-devel@macosforge.org http://macruby.org/trac/report
  • Mac iPhone Ruby on Rails Product Design/Mgmt. snootymonkey.com sean@snootymonkey.com