Ruby en OSX



Thursday, September 22, 11
Para que sirve Ruby


                    • Rails



Thursday, September 22, 11
Fin


                    • Gracias!
                    • Espero que os haya gustado


Thursday, September 22, 11
Ah, pero hay mas?
                    •        Rspec / Cucumber

                    •        Sinatra

                    •        Capistrano

                    •        Capybara ( webtesting )

                    •        EventMachine

                    •        FFI

                    •        nokogiri (HTML Parsing)

                    •        mocha (Mocking)

                    •        guard (FileSystem watching DSL)

                    •        .... y muchos mas!!




Thursday, September 22, 11
¿Qué es Ruby?
                    • Lenguaje interpretado
                    • Creado por Yukihiro Matsumoto - Matz
                    • Dinamico
                    • “Reflexivo”
                    • Orientado a objetos
                    • Inspirado en Perl con un toque de Smalltalk
Thursday, September 22, 11
¿Qué es Ruby?
                    •        El lenguaje no es estandar, se guia por
                             especificaciones y por la implementación “guia”

                             • MRI
                             • JRuby
                             • Rubinius
                             • IronRuby
                             • MacRuby

Thursday, September 22, 11
¿Qué mola de Ruby?
                    • Bloques
             a = [1,2,3,4,5,6,7,8,9,10]

             evens = a.select do |x|
               x % 2 == 0
             end
                  [2,4,6,8,10]
             doubles = a.map { |x| x + x }
                 [2,4,6,8,10,12,14,16,18,20]



Thursday, September 22, 11
¿Qué mola de Ruby?
                    • Todo es un objeto
             4.class
             >> Fixnum
             nil.class
             >> NilClass
             Fixnum.class
             >> Class




Thursday, September 22, 11
¿Qué mola de Ruby?
                    • Reapertura de clases
             class Fixnum
               def is_even?
                 self % 2 == 0
               end
             end

             4.is_even?
             >> true


Thursday, September 22, 11
¿Qué mola de Ruby?
                    • Envio de mensajes, respond_to?
             4.respond_to? :is_even?
             >> true

             4.send :is_even?
             >> true

             dynamic_method = “is_even?”
             4.send dynamic_method
             >> true

Thursday, September 22, 11
¿Qué mola de Ruby?
                    • Method missing
             class WeirdString < String
               def method_missing m, *args, &block
                 self.send m.to_s.reverse
               end
             end

             t = WeirdString.new “PrUebA”
             t.esacnwod
             >> “prueba”

Thursday, September 22, 11
¿Qué mola de Ruby?

                    • procs / lambdas
                    • eval
                    • DSL
                    • mixins
                    • regexps

Thursday, September 22, 11
Ruby en OSX
                    • Preinstalado desde Leopard
                     • Version 1.8
                    • Scripting Bridge
                    • RubyCocoa => MacRuby
                    • Lenguaje soportado en applicaciones
                             del MacAppStore

Thursday, September 22, 11
Ruby en OSX

                    •        MacRuby es la evolucion de RubyCocoa

                    •        Gracias a RubyCocoa / MacRuby

                             •   TOTAL INTEROPERABILIDAD CON OBJC

                             •   Todo lo de la diapositiva 4, es interoperable con
                                 nuestras clases Objective-C

                    •        Sustituto de AppleScript gracias al Scripting Bridge



Thursday, September 22, 11
MacRuby vs RubyCocoa

                    •        MacRuby es el futuro pero,

                             •   RubyCocoa viene instalado en OSX por defecto

                             •   MacRuby tiene que ser embebido en la
                                 aplicación

                    •        RubyCocoa -> 1.8

                    •        MacRuby -> 1.9

                             •   Mejoras velocidad, Threads, GC


Thursday, September 22, 11
MacRuby vs RubyCocoa
                    •        Sintaxis
                      objc
                      [[NSWindow alloc] initWithContentRect:styleMask:backing:defer:]
                      RubyCocoa
                      NSWindow.alloc.initWithContentRect_styleMask_backing_defer (...)
                      MacRuby
                      NSWindow.alloc.initWithContentRect( ..., styleMask:..., backing:...,
                      defer...

                    •        Integración de clases en MacRuby

                             •   String, Number,... de Ruby -> NSString, NSNumber, ...

                             •   Elimina la necesidad de proxies

                    •        MacRuby compila contra LLVM -> Posibilidad de generar binarios nativos



Thursday, September 22, 11
MacRuby
                                               Objective-C
                     @interface Book

                     @property (retain, nonatomic) NSString *title

                     - (void) addBookToLibrary:(NSString*) theLibrary
                     - (void) insertPage: (Page*) thePage atPosition: (NSUInteger)
                     position

                     @end


                                                  Ruby
                     b = Book.new
                     b.title = “My new book”
                     b.addBookToLibrary “The Great Library”
                     b.insertPage myPage, :atPosition => 4
                     - OR -
                     b.insertPage myPage, atPosition: 4




Thursday, September 22, 11
MacRuby
       framework 'Cocoa'
                                                          win.title = "Hello NSCoder"
       class AppDelegate                                  win.delegate = delegate
         def windowWillClose n
           exit                                           button = NSButton.alloc.initWithFrame
         end                                              [10,10,80,50]
                                                          button.title = "Hello!"
         def hello sender                                 button.target = delegate
           puts "Hello World!"                            button.action = :hello
         end
       end                                                win.contentView.addSubview button

       delegate = AppDelegate.new                         win.display
       app = NSApplication.sharedApplication              win.orderFrontRegardless
       app.delegate = delegate                            app.run

       win = NSWindow.
                 alloc.
                 initWithContentRect [200,300,100,100],
                 :styleMask => NSTitledWindowMask
                 :backing => NSBackingStoreBuffered,
                 :defer => false




Thursday, September 22, 11
MacRuby
                    • XCode (& InterfaceBuilder) compatible




Thursday, September 22, 11
MacRuby
                    •        Aplicaciones subidas al Mac AppStore

                             •   http://www.thumperapp.com/

                             •   http://luckymac.com/ - Music Streaming

                             •   http://redwoodapp.com/ - Spotlight in the cloud




Thursday, September 22, 11
Scripting Bridge

                    •        Interfaz que puede dar un programa para facilitar la comunicación con él

                    •        Basado en Apple Events

                             •   Antes de SB, esos Apple Events se enviaban, o bien con Apple Script o
                                 con un código en Objective-C no muy sencillo

                             •   Con SB, los Apple Events se pueden enviar como un mensaje mas de
                                 Objective-C (Aparte de seguir usando AppleScript)

                                 •   Y por ello, accesible desde Ruby (RubyCocoa) o PyObjC




Thursday, September 22, 11
SB y Ruby
                    • Copiar la ruta del fichero seleccionado en
                             el Finder al clipboard

                require 'osx/cocoa'
                include OSX
                OSX.require_framework 'ScriptingBridge'

                finder = SBApplication.applicationWithBundleIdentifier_ “com.apple.finder”
                fileURL = NSURL.URLWithString_ finder.selection.get[0].URL
                system "echo #{fileURL.path} | pbcopy”




Thursday, September 22, 11
SB y Ruby
                    • Obtener las canciones de tu iTunes
                require 'osx/cocoa'
                include OSX
                OSX.require_framework 'ScriptingBridge'

                iTunes = SBApplication.applicationWithBundleIdentifier_ "com.apple.iTunes"

                iTunes.sources.each do |source|
                  puts source.name
                  source.playlists.each do |playlist|
                    puts "-- #{playlist.name}"
                    playlist.tracks.each do |track|
                      puts "t-- #{track.name}"
                    end
                  end
                end




Thursday, September 22, 11
Fin

                    • Gracias ;)



                    • Use Ruby

Thursday, September 22, 11

Charla ruby nscodermad

  • 1.
    Ruby en OSX Thursday,September 22, 11
  • 2.
    Para que sirveRuby • Rails Thursday, September 22, 11
  • 3.
    Fin • Gracias! • Espero que os haya gustado Thursday, September 22, 11
  • 4.
    Ah, pero haymas? • Rspec / Cucumber • Sinatra • Capistrano • Capybara ( webtesting ) • EventMachine • FFI • nokogiri (HTML Parsing) • mocha (Mocking) • guard (FileSystem watching DSL) • .... y muchos mas!! Thursday, September 22, 11
  • 5.
    ¿Qué es Ruby? • Lenguaje interpretado • Creado por Yukihiro Matsumoto - Matz • Dinamico • “Reflexivo” • Orientado a objetos • Inspirado en Perl con un toque de Smalltalk Thursday, September 22, 11
  • 6.
    ¿Qué es Ruby? • El lenguaje no es estandar, se guia por especificaciones y por la implementación “guia” • MRI • JRuby • Rubinius • IronRuby • MacRuby Thursday, September 22, 11
  • 7.
    ¿Qué mola deRuby? • Bloques a = [1,2,3,4,5,6,7,8,9,10] evens = a.select do |x| x % 2 == 0 end [2,4,6,8,10] doubles = a.map { |x| x + x } [2,4,6,8,10,12,14,16,18,20] Thursday, September 22, 11
  • 8.
    ¿Qué mola deRuby? • Todo es un objeto 4.class >> Fixnum nil.class >> NilClass Fixnum.class >> Class Thursday, September 22, 11
  • 9.
    ¿Qué mola deRuby? • Reapertura de clases class Fixnum def is_even? self % 2 == 0 end end 4.is_even? >> true Thursday, September 22, 11
  • 10.
    ¿Qué mola deRuby? • Envio de mensajes, respond_to? 4.respond_to? :is_even? >> true 4.send :is_even? >> true dynamic_method = “is_even?” 4.send dynamic_method >> true Thursday, September 22, 11
  • 11.
    ¿Qué mola deRuby? • Method missing class WeirdString < String def method_missing m, *args, &block self.send m.to_s.reverse end end t = WeirdString.new “PrUebA” t.esacnwod >> “prueba” Thursday, September 22, 11
  • 12.
    ¿Qué mola deRuby? • procs / lambdas • eval • DSL • mixins • regexps Thursday, September 22, 11
  • 13.
    Ruby en OSX • Preinstalado desde Leopard • Version 1.8 • Scripting Bridge • RubyCocoa => MacRuby • Lenguaje soportado en applicaciones del MacAppStore Thursday, September 22, 11
  • 14.
    Ruby en OSX • MacRuby es la evolucion de RubyCocoa • Gracias a RubyCocoa / MacRuby • TOTAL INTEROPERABILIDAD CON OBJC • Todo lo de la diapositiva 4, es interoperable con nuestras clases Objective-C • Sustituto de AppleScript gracias al Scripting Bridge Thursday, September 22, 11
  • 15.
    MacRuby vs RubyCocoa • MacRuby es el futuro pero, • RubyCocoa viene instalado en OSX por defecto • MacRuby tiene que ser embebido en la aplicación • RubyCocoa -> 1.8 • MacRuby -> 1.9 • Mejoras velocidad, Threads, GC Thursday, September 22, 11
  • 16.
    MacRuby vs RubyCocoa • Sintaxis objc [[NSWindow alloc] initWithContentRect:styleMask:backing:defer:] RubyCocoa NSWindow.alloc.initWithContentRect_styleMask_backing_defer (...) MacRuby NSWindow.alloc.initWithContentRect( ..., styleMask:..., backing:..., defer... • Integración de clases en MacRuby • String, Number,... de Ruby -> NSString, NSNumber, ... • Elimina la necesidad de proxies • MacRuby compila contra LLVM -> Posibilidad de generar binarios nativos Thursday, September 22, 11
  • 17.
    MacRuby Objective-C @interface Book @property (retain, nonatomic) NSString *title - (void) addBookToLibrary:(NSString*) theLibrary - (void) insertPage: (Page*) thePage atPosition: (NSUInteger) position @end Ruby b = Book.new b.title = “My new book” b.addBookToLibrary “The Great Library” b.insertPage myPage, :atPosition => 4 - OR - b.insertPage myPage, atPosition: 4 Thursday, September 22, 11
  • 18.
    MacRuby framework 'Cocoa' win.title = "Hello NSCoder" class AppDelegate win.delegate = delegate def windowWillClose n exit button = NSButton.alloc.initWithFrame end [10,10,80,50] button.title = "Hello!" def hello sender button.target = delegate puts "Hello World!" button.action = :hello end end win.contentView.addSubview button delegate = AppDelegate.new win.display app = NSApplication.sharedApplication win.orderFrontRegardless app.delegate = delegate app.run win = NSWindow. alloc. initWithContentRect [200,300,100,100], :styleMask => NSTitledWindowMask :backing => NSBackingStoreBuffered, :defer => false Thursday, September 22, 11
  • 19.
    MacRuby • XCode (& InterfaceBuilder) compatible Thursday, September 22, 11
  • 20.
    MacRuby • Aplicaciones subidas al Mac AppStore • http://www.thumperapp.com/ • http://luckymac.com/ - Music Streaming • http://redwoodapp.com/ - Spotlight in the cloud Thursday, September 22, 11
  • 21.
    Scripting Bridge • Interfaz que puede dar un programa para facilitar la comunicación con él • Basado en Apple Events • Antes de SB, esos Apple Events se enviaban, o bien con Apple Script o con un código en Objective-C no muy sencillo • Con SB, los Apple Events se pueden enviar como un mensaje mas de Objective-C (Aparte de seguir usando AppleScript) • Y por ello, accesible desde Ruby (RubyCocoa) o PyObjC Thursday, September 22, 11
  • 22.
    SB y Ruby • Copiar la ruta del fichero seleccionado en el Finder al clipboard require 'osx/cocoa' include OSX OSX.require_framework 'ScriptingBridge' finder = SBApplication.applicationWithBundleIdentifier_ “com.apple.finder” fileURL = NSURL.URLWithString_ finder.selection.get[0].URL system "echo #{fileURL.path} | pbcopy” Thursday, September 22, 11
  • 23.
    SB y Ruby • Obtener las canciones de tu iTunes require 'osx/cocoa' include OSX OSX.require_framework 'ScriptingBridge' iTunes = SBApplication.applicationWithBundleIdentifier_ "com.apple.iTunes" iTunes.sources.each do |source| puts source.name source.playlists.each do |playlist| puts "-- #{playlist.name}" playlist.tracks.each do |track| puts "t-- #{track.name}" end end end Thursday, September 22, 11
  • 24.
    Fin • Gracias ;) • Use Ruby Thursday, September 22, 11