Your SlideShare is downloading. ×
Writing Apps with HotCocoa and MacRuby
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Writing Apps with HotCocoa and MacRuby


Published on

Pomodori is a tool for the Pomodoro Technique written using HotCocoa under MacRuby, the Ruby implementation for Mac OS. In this talk you'll see how easy you can write native Cocoa applications like …

Pomodori is a tool for the Pomodoro Technique written using HotCocoa under MacRuby, the Ruby implementation for Mac OS. In this talk you'll see how easy you can write native Cocoa applications like Pomodori thanks to HotCocoa, a thin Ruby DSL around the Cocoa framework. In this presentation you can also find how to test first the UI and which architecture fits TDD the best.

Published in: Technology, Education
  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Writing Apps with HotCocoa and MacRuby - ChiRb - April 6th 2009
  • 2. MacRuby Ruby 1.9 on Objective-C runtime
  • 3. MacRuby Primitive Ruby classes <=> Core Foundations & Cocoa equivalents
  • 4. MacRuby convenience, efficiency, flexibility, performance over RubyCocoa
  • 5. MacRuby reborg:scripts reborg$ macirb irb(main):001:0> hello = quot;helloquot; => quot;helloquot; irb(main):002:0> hello.class => NSMutableString static VALUE str_alloc(VALUE klass) { VALUE str; str = (VALUE)CFStringCreateMutable(NULL, 0); if (klass != 0 && klass != rb_cNSString && klass != rb_cNSMutableString && klass != rb_cSymbol) *(Class *)str = (Class)klass; CFMakeCollectable((CFTypeRef)str); return (VALUE)str; }
  • 6. MacRuby MacRuby recently got a new VM! ruby/MacRuby/branches/experimental
  • 7. HotCocoa Compact Ruby-based DSL for UI development by Rich Kilmer
  • 8. HotCocoa require 'hotcocoa' include HotCocoa application :name => quot;Hello ChiRbquot; do |app| app.delegate = self window ( :frame => [500, 300, 200, 100], :title => quot;Hello ChiRbquot;) do |win| win << button( :title => quot;Click Mequot;, :on_action => lambda do |sender| alert(:message => quot;Hello ChiRb!quot;) end) win.will_close { exit } end end
  • 9. HotCocoa command-line: creates rake-enabled skeleton project
  • 10. HotCocoa Mappings: helpers for most used Cocoa classes. Add your own. Right now, sources are your docs.
  • 11. HotCocoa Can be used from XCode but especially useful for programatic UI Only way I know right now for testing- first UI under MacRuby
  • 12. Pomodoro Technique “The aim of the Pomodoro Technique is to use time as a valuable ally in accomplishing what we want to do in the way we want to do it, and to enable us to continually improve the way we work or study” Francesco Cirillo
  • 13. Pomodoro Technique 25 + 5 and 4 + 1 The Pomodoro Is Indivisible If a Pomodoro Begins, It Has to Ring If More Than 5-7 Pomodoros, Break It Down If Less Than One Pomodoro, Add It Up The Next Pomodoro Will Go Better
  • 14. Pomodoro Technique Francesco Cirillo “The Pomodoro Technique” Paper
  • 15. Ring.......... 5 minutes break, deep breath, relax
  • 16. Pomodori HotCocoa based tool for the Pomodoro Technique ( PT )
  • 17. Pomodori Very simple Automatic timers History Charts
  • 18. Architecture Strict separation view logic workflow logic business logic No architecture up-front TDD => evolved to actual design
  • 19. Architecture One view, one-many controllers pomodori_controller main_view models timer_controller modal_button_controller
  • 20. Architecture View Switch: ask related controller chart_controller pom_by_count_model
  • 21. TDD HotCocoa Option #1: pure Ruby with everything (RSpec, Stubba, etc.) Option #2: MacRuby with limitations (Test::Unit, Mocha and few more) No options if the target class requires ‘hotcocoa’
  • 22. View TDD def test_should_go_running_mode_on_init @main_view.expects(:running_mode) @main_view.send(:initialize) end def test_switch_on_input_box @main_view.send(:enable_input_box) assert_equal(true, @main_view.summary_label.editable?) assert_equal(quot;Pomodoro description herequot;, @main_view.summary_label.to_s) end def test_switch_to_submit_mode @main_view.expects(:enable_input_box) @main_view.submit_mode assert_equal(quot;Submitquot;, @main_view.modal_button.title) end
  • 23. Controller TDD def setup @main_view = stub_everything @modal_button_controller = :main_view => @main_view) end def test_should_switch_to_break_on_submit when_goes_into_break_mode(:on_click_submit) end def when_goes_into_break_mode(action) @main_view.expects(:break_mode) @main_view.expects(:update_modal_button_action).with do |a_block| assert_match(/on_click_restart/, end @main_view.expects(:update_modal_button_label).with(quot;Restartquot;) @modal_button_controller.send(action, quot;senderquot;) end
  • 24. Conclusions MacRuby: young, 80% stable, promising HotCocoa: cool (needs documentation) Pomodori: the coolest app for the PT :) PT: see you at Agile2009 Questions?
  • 25. Resources - macruby main site Pomodoro Technique main site - my blog often talking about the PT - Pomodori application main site experimental - Laurent Sansonetti’s work on the new MacRuby VM Slides and examples: