Charla ruby nscodermad

1,693 views
1,626 views

Published on

Ruby en OSX, creada por Roberto Pérez Cubero y presentada el 21 de septiembre de 2011 en el Hub de Madrid

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,693
On SlideShare
0
From Embeds
0
Number of Embeds
790
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Charla ruby nscodermad

  1. 1. Ruby en OSXThursday, September 22, 11
  2. 2. Para que sirve Ruby • RailsThursday, September 22, 11
  3. 3. Fin • Gracias! • Espero que os haya gustadoThursday, September 22, 11
  4. 4. 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
  5. 5. ¿Qué es Ruby? • Lenguaje interpretado • Creado por Yukihiro Matsumoto - Matz • Dinamico • “Reflexivo” • Orientado a objetos • Inspirado en Perl con un toque de SmalltalkThursday, September 22, 11
  6. 6. ¿Qué es Ruby? • El lenguaje no es estandar, se guia por especificaciones y por la implementación “guia” • MRI • JRuby • Rubinius • IronRuby • MacRubyThursday, September 22, 11
  7. 7. ¿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
  8. 8. ¿Qué mola de Ruby? • Todo es un objeto 4.class >> Fixnum nil.class >> NilClass Fixnum.class >> ClassThursday, September 22, 11
  9. 9. ¿Qué mola de Ruby? • Reapertura de clases class Fixnum def is_even? self % 2 == 0 end end 4.is_even? >> trueThursday, September 22, 11
  10. 10. ¿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 >> trueThursday, September 22, 11
  11. 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
  12. 12. ¿Qué mola de Ruby? • procs / lambdas • eval • DSL • mixins • regexpsThursday, September 22, 11
  13. 13. Ruby en OSX • Preinstalado desde Leopard • Version 1.8 • Scripting Bridge • RubyCocoa => MacRuby • Lenguaje soportado en applicaciones del MacAppStoreThursday, September 22, 11
  14. 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 BridgeThursday, September 22, 11
  15. 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, GCThursday, September 22, 11
  16. 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 nativosThursday, September 22, 11
  17. 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: 4Thursday, September 22, 11
  18. 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 => falseThursday, September 22, 11
  19. 19. MacRuby • XCode (& InterfaceBuilder) compatibleThursday, September 22, 11
  20. 20. MacRuby • Aplicaciones subidas al Mac AppStore • http://www.thumperapp.com/ • http://luckymac.com/ - Music Streaming • http://redwoodapp.com/ - Spotlight in the cloudThursday, September 22, 11
  21. 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 PyObjCThursday, September 22, 11
  22. 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. 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 endThursday, September 22, 11
  24. 24. Fin • Gracias ;) • Use RubyThursday, September 22, 11

×