charla ruby nscodermad
DESCRIPTION
Ruby en OSX, creada por Roberto Pérez Cubero y presentada el 21 de septiembre de 2011 en el Hub de MadridTRANSCRIPT
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 == 0end [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>> Fixnumnil.class>> NilClassFixnum.class>> Class
Thursday, September 22, 11
¿Qué mola de Ruby?
• Reapertura de clases
class Fixnum def is_even? self % 2 == 0 endend
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 endend
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
• 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
objc
[[NSWindow alloc] initWithContentRect:styleMask:backing:defer:]
RubyCocoa
NSWindow.alloc.initWithContentRect_styleMask_backing_defer (...)
MacRuby
NSWindow.alloc.initWithContentRect( ..., styleMask:..., backing:..., defer...
Thursday, September 22, 11
MacRubyObjective-C
@interface Book
@property (retain, nonatomic) NSString *title
- (void) addBookToLibrary:(NSString*) theLibrary- (void) insertPage: (Page*) thePage atPosition: (NSUInteger) position
@end
Rubyb = Book.newb.title = “My new book”b.addBookToLibrary “The Great Library”b.insertPage myPage, :atPosition => 4- OR -b.insertPage myPage, atPosition: 4
Thursday, September 22, 11
MacRubyframework 'Cocoa'
class AppDelegate def windowWillClose n exit end
def hello sender puts "Hello World!" endend
delegate = AppDelegate.newapp = NSApplication.sharedApplicationapp.delegate = delegate
win = NSWindow. alloc. initWithContentRect [200,300,100,100], :styleMask => NSTitledWindowMask :backing => NSBackingStoreBuffered, :defer => false
win.title = "Hello NSCoder"win.delegate = delegate
button = NSButton.alloc.initWithFrame [10,10,80,50]button.title = "Hello!"button.target = delegatebutton.action = :hello
win.contentView.addSubview button
win.displaywin.orderFrontRegardlessapp.run
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 OSXOSX.require_framework 'ScriptingBridge'
finder = SBApplication.applicationWithBundleIdentifier_ “com.apple.finder”fileURL = NSURL.URLWithString_ finder.selection.get[0].URLsystem "echo #{fileURL.path} | pbcopy”
Thursday, September 22, 11
SB y Ruby
• Obtener las canciones de tu iTunes
require 'osx/cocoa'include OSXOSX.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 endend
Thursday, September 22, 11
Fin
• Gracias ;)
• Use Ruby
Thursday, September 22, 11