SlideShare a Scribd company logo
1 of 45
Folk Programming
    with Ruby
    ( Web Application )




        mootoh
Folk ?
Fork




×      by tetzl
Fork Ball




×           by capn madd matt
Forksuke




×  http://foxkeh.jp/downloads/materials/
Folk Programming !

•Like Folk Song
• Programming
 Casually

                      by Rich Moffitt
Importance


• Introduced at
• see DK
 •   http://blog.livedoor.jp/dankogai/archives/51052844.html
More
Folks !
Folkish Trends
  BASIC              CGI
                                       Web
                                     Application
10 PRINT “Ruby”   #!/usr/bin/ruby    % rails ruby_web_app
20 END
                  require ‘cgi’
                  cgi = CGI.new
                  cgi.print “Ruby”




                                         Present
But...
Yet Another Fun
       in
none Web App !
Why
 none
Web App ?
Everyone playing in
    Web App




            by cobalt123
Diversity
Explore
     Rich
User Experience
Fun for Me !




           by allfr3d
My
Recommendation
Plug-in


     by Darren Hester
Why Plug-in ?




          by imjustincognito
Easier than
 creating
Great App
Like Remora
Lower
Hurdle
But...
Seems difficult...




          by an untrained eye
No!
Use Ruby !
4 Examples
Safari
       +
Hatena Bookmark

              RubyCocoa++
def addEntry(entry)
    bmk = OSX::NSEntityDescription.objc_send(
      :insertNewObjectForEntityForName, 'Bookmark',
      :inManagedObjectContext, @context_)

    # title
    title = entry.elementsForName('title').first.stringValue
    bmk.setValue_forKey(title, 'title')

    # id
    eid = entry.elementsForName('id').first.stringValue.to_s
    pos = eid.rindex('-')
    eid = eid[pos+1,eid.size]
    bmk.setValue_forKey(eid, 'eid');

    # links
    entry.elementsForName('link').each do |url|
      if
url.attributeForName('rel').stringValue.compare('related')
        siteUrl = url.attributeForName('href').stringValue
        bmk.setValue_forKey(siteUrl, 'siteUrl')
      else
        bookmarkUrl = url.attributeForName('href').stringValue
        bmk.setValue_forKey('bookmarkUrl', 'bookmarkUrl')
      end
    end
QuickSilver
    +
 Twitter

              RubyCocoa+++
class TwitterPluginAction < OSX::QSActionProvider
  # reload itself
  def reload
    Shared.logger.info('reloading ' + __FILE__)
    load(__FILE__)
  end

 # get screenName:password from PreferencePane
 def name_pass
   dict = OSX::NSUserDefaultsController.
     sharedUserDefaultsController.values;
   screen_name = dict.valueForKey("TwitterPreference.screenName")
   password    = dict.valueForKey("TwitterPreference.password")
   screen_name.to_s + ':' + password
 end
Aren’t they Web App ?
Quartz Composer
       +
     Gainer

              RubyCocoa++++
def execute_atTime_withArguments(context, time, args)
  unless @initialized
    4.times do |i|
      @gio.ain(i).on Funnel::PortEvent::CHANGE do |event|
        @ain[i] = event.target.value
      end
      @gio.din(i).on Funnel::PortEvent::CHANGE do |event|
        @din[i] = event.target.value
      end
    end
    @initialized = false
  end

 4.times do |i|
   setValue_forOutputKey(@ain[i], "ain_" + i.to_s)
   setValue_forOutputKey(@din[i], "din_" + i.to_s)
 end
Vim + Refe
function! s:RubyRefe2(args)
  ruby << EOR
  bitclust_path = VIM::evaluate("s:bitclust_path")
  db_path       = bitclust_path + '/../db-1_9_0'
  args          = ['-d', db_path, VIM::evaluate("a:args")]
  $LOAD_PATH << bitclust_path + '/lib'

 require 'stringio'
 old_stdout = $stdout
 $stdout = StringIO.new

 require 'bitclust/searcher'
 require 'kconv'
 refe = BitClust::Searcher.new('refe.rb')
 refe.parse args
 refe.exec nil, args
 str = $stdout.string.toutf8

 buf = VIM::Buffer.current
 while buf.count > 1
   puts buf.count
   buf.delete 1
 end
 buf.delete 1

 str.split(/n/).each do |line|
   buf.append buf.count, line.toutf8
Why Ruby ?
Nice Glue.


    Between
Different Worlds.




                        by St. Murse
Debuggability

• Dynamic !
 • reload from plugin itself   def reload
                                 load ‘./itself.rb’


 • no need to restart app
                               end
Conclusion
Create Something
Useful for You !
and Us !
out of Browser !
with Ruby !
Thank you.
                                                           mootoh@gmail.com
                                                           http://deadbeaf.org/
Any pictures in these slides have their license.
Follow their links to see the original ones.
                                                           @mootoh

More Related Content

What's hot

[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史Shengyou Fan
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js ExpressEyal Vardi
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and othersYusuke Wada
 
My Adventures In Objective-C (A Rubyists Perspective)
My Adventures In Objective-C (A Rubyists Perspective)My Adventures In Objective-C (A Rubyists Perspective)
My Adventures In Objective-C (A Rubyists Perspective)abdels
 
jQuery Plugin Creation
jQuery Plugin CreationjQuery Plugin Creation
jQuery Plugin Creationbenalman
 
Word Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TraceryWord Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TracerySarah Sexton
 
Getting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkGetting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkSarah Sexton
 
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)Brian Sam-Bodden
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)True-Vision
 
Webinar: Getting Started with Ruby and MongoDB
Webinar: Getting Started with Ruby and MongoDBWebinar: Getting Started with Ruby and MongoDB
Webinar: Getting Started with Ruby and MongoDBMongoDB
 
Building Web Apps with Express
Building Web Apps with ExpressBuilding Web Apps with Express
Building Web Apps with ExpressAaron Stannard
 

What's hot (20)

[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
[PHP 也有 Day] 垃圾留言守城記 - 用 Laravel 阻擋 SPAM 留言的奮鬥史
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
Mojolicious and REST
Mojolicious and RESTMojolicious and REST
Mojolicious and REST
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
 
My Adventures In Objective-C (A Rubyists Perspective)
My Adventures In Objective-C (A Rubyists Perspective)My Adventures In Objective-C (A Rubyists Perspective)
My Adventures In Objective-C (A Rubyists Perspective)
 
RESTful web services
RESTful web servicesRESTful web services
RESTful web services
 
Sprockets
SprocketsSprockets
Sprockets
 
About Data::ObjectDriver
About Data::ObjectDriverAbout Data::ObjectDriver
About Data::ObjectDriver
 
Mojolicious lite
Mojolicious liteMojolicious lite
Mojolicious lite
 
jQuery Plugin Creation
jQuery Plugin CreationjQuery Plugin Creation
jQuery Plugin Creation
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Word Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TraceryWord Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with Tracery
 
Getting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkGetting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot Framework
 
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)
 
Your JavaScript Library
Your JavaScript LibraryYour JavaScript Library
Your JavaScript Library
 
Webinar: Getting Started with Ruby and MongoDB
Webinar: Getting Started with Ruby and MongoDBWebinar: Getting Started with Ruby and MongoDB
Webinar: Getting Started with Ruby and MongoDB
 
Building Web Apps with Express
Building Web Apps with ExpressBuilding Web Apps with Express
Building Web Apps with Express
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Voyage by example
Voyage by exampleVoyage by example
Voyage by example
 

Similar to Ruby Kaigi 2008 LT

Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015AboutYouGmbH
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Alberto Perdomo
 
The goodies of zope, pyramid, and plone (2)
The goodies of zope, pyramid, and plone (2)The goodies of zope, pyramid, and plone (2)
The goodies of zope, pyramid, and plone (2)Dylan Jay
 
Ruby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingRuby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingBozhidar Batsov
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyFabio Akita
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
2018 RubyHACK:  put git to work -  increase the quality of your rails project...2018 RubyHACK:  put git to work -  increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...Rodrigo Urubatan
 
2018 the conf put git to work - increase the quality of your rails project...
2018 the conf   put git to work -  increase the quality of your rails project...2018 the conf   put git to work -  increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...Rodrigo Urubatan
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manormartinbtt
 
JavaScript performance patterns
JavaScript performance patternsJavaScript performance patterns
JavaScript performance patternsStoyan Stefanov
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends旻琦 潘
 
Practical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsPractical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsasync_io
 
우리가 모르는 노드로 할 수 있는 몇가지
우리가 모르는 노드로 할 수 있는 몇가지우리가 모르는 노드로 할 수 있는 몇가지
우리가 모르는 노드로 할 수 있는 몇가지Rhio Kim
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love RubyBen Scheirman
 
plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6Nobuo Danjou
 
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...Etiene Dalcol
 

Similar to Ruby Kaigi 2008 LT (20)

Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
 
The goodies of zope, pyramid, and plone (2)
The goodies of zope, pyramid, and plone (2)The goodies of zope, pyramid, and plone (2)
The goodies of zope, pyramid, and plone (2)
 
Ruby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingRuby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programing
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
2018 RubyHACK:  put git to work -  increase the quality of your rails project...2018 RubyHACK:  put git to work -  increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...
 
2018 the conf put git to work - increase the quality of your rails project...
2018 the conf   put git to work -  increase the quality of your rails project...2018 the conf   put git to work -  increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...
 
PSGI/Plack OSDC.TW
PSGI/Plack OSDC.TWPSGI/Plack OSDC.TW
PSGI/Plack OSDC.TW
 
Monkeybars in the Manor
Monkeybars in the ManorMonkeybars in the Manor
Monkeybars in the Manor
 
JavaScript performance patterns
JavaScript performance patternsJavaScript performance patterns
JavaScript performance patterns
 
Intro to Rails
Intro to RailsIntro to Rails
Intro to Rails
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
Practical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.jsPractical Use of MongoDB for Node.js
Practical Use of MongoDB for Node.js
 
우리가 모르는 노드로 할 수 있는 몇가지
우리가 모르는 노드로 할 수 있는 몇가지우리가 모르는 노드로 할 수 있는 몇가지
우리가 모르는 노드로 할 수 있는 몇가지
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love Ruby
 
plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6plackdo, plack-like web interface on perl6
plackdo, plack-like web interface on perl6
 
Node azure
Node azureNode azure
Node azure
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
Web development with Lua: Introducing Sailor an MVC web framework @ CodingSer...
 
About Clack
About ClackAbout Clack
About Clack
 

More from Motohiro Takayama

More from Motohiro Takayama (7)

ngCore
ngCorengCore
ngCore
 
近未来的並列 LL
近未来的並列 LL近未来的並列 LL
近未来的並列 LL
 
並カン (CM カット版)
並カン (CM カット版)並カン (CM カット版)
並カン (CM カット版)
 
Rurimaphone
RurimaphoneRurimaphone
Rurimaphone
 
Vim M #1
Vim M #1Vim M #1
Vim M #1
 
Rubigraph
RubigraphRubigraph
Rubigraph
 
Why You Should be a RubiKaigi Staff
Why You Should be a RubiKaigi StaffWhy You Should be a RubiKaigi Staff
Why You Should be a RubiKaigi Staff
 

Recently uploaded

Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 

Recently uploaded (20)

Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 

Ruby Kaigi 2008 LT

  • 1. Folk Programming with Ruby ( Web Application ) mootoh
  • 3. Fork × by tetzl
  • 4. Fork Ball × by capn madd matt
  • 6. Folk Programming ! •Like Folk Song • Programming Casually by Rich Moffitt
  • 7. Importance • Introduced at • see DK • http://blog.livedoor.jp/dankogai/archives/51052844.html
  • 9. Folkish Trends BASIC CGI Web Application 10 PRINT “Ruby” #!/usr/bin/ruby % rails ruby_web_app 20 END require ‘cgi’ cgi = CGI.new cgi.print “Ruby” Present
  • 11. Yet Another Fun in none Web App !
  • 13. Everyone playing in Web App by cobalt123
  • 15. Explore Rich User Experience
  • 16. Fun for Me ! by allfr3d
  • 18. Plug-in by Darren Hester
  • 19. Why Plug-in ? by imjustincognito
  • 24. Seems difficult... by an untrained eye
  • 25. No!
  • 28. Safari + Hatena Bookmark RubyCocoa++
  • 29. def addEntry(entry) bmk = OSX::NSEntityDescription.objc_send( :insertNewObjectForEntityForName, 'Bookmark', :inManagedObjectContext, @context_) # title title = entry.elementsForName('title').first.stringValue bmk.setValue_forKey(title, 'title') # id eid = entry.elementsForName('id').first.stringValue.to_s pos = eid.rindex('-') eid = eid[pos+1,eid.size] bmk.setValue_forKey(eid, 'eid'); # links entry.elementsForName('link').each do |url| if url.attributeForName('rel').stringValue.compare('related') siteUrl = url.attributeForName('href').stringValue bmk.setValue_forKey(siteUrl, 'siteUrl') else bookmarkUrl = url.attributeForName('href').stringValue bmk.setValue_forKey('bookmarkUrl', 'bookmarkUrl') end end
  • 30. QuickSilver + Twitter RubyCocoa+++
  • 31. class TwitterPluginAction < OSX::QSActionProvider # reload itself def reload Shared.logger.info('reloading ' + __FILE__) load(__FILE__) end # get screenName:password from PreferencePane def name_pass dict = OSX::NSUserDefaultsController. sharedUserDefaultsController.values; screen_name = dict.valueForKey("TwitterPreference.screenName") password = dict.valueForKey("TwitterPreference.password") screen_name.to_s + ':' + password end
  • 33. Quartz Composer + Gainer RubyCocoa++++
  • 34. def execute_atTime_withArguments(context, time, args) unless @initialized 4.times do |i| @gio.ain(i).on Funnel::PortEvent::CHANGE do |event| @ain[i] = event.target.value end @gio.din(i).on Funnel::PortEvent::CHANGE do |event| @din[i] = event.target.value end end @initialized = false end 4.times do |i| setValue_forOutputKey(@ain[i], "ain_" + i.to_s) setValue_forOutputKey(@din[i], "din_" + i.to_s) end
  • 36. function! s:RubyRefe2(args) ruby << EOR bitclust_path = VIM::evaluate("s:bitclust_path") db_path = bitclust_path + '/../db-1_9_0' args = ['-d', db_path, VIM::evaluate("a:args")] $LOAD_PATH << bitclust_path + '/lib' require 'stringio' old_stdout = $stdout $stdout = StringIO.new require 'bitclust/searcher' require 'kconv' refe = BitClust::Searcher.new('refe.rb') refe.parse args refe.exec nil, args str = $stdout.string.toutf8 buf = VIM::Buffer.current while buf.count > 1 puts buf.count buf.delete 1 end buf.delete 1 str.split(/n/).each do |line| buf.append buf.count, line.toutf8
  • 38. Nice Glue. Between Different Worlds. by St. Murse
  • 39. Debuggability • Dynamic ! • reload from plugin itself def reload load ‘./itself.rb’ • no need to restart app end
  • 45. Thank you. mootoh@gmail.com http://deadbeaf.org/ Any pictures in these slides have their license. Follow their links to see the original ones. @mootoh

Editor's Notes

  1. Ruby&amp;#x3067;&amp;#x697D;&amp;#x3057;&amp;#x3080;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30AF;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0; Web&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x3058;&amp;#x3083;&amp;#x306A;&amp;#x3044;&amp;#x3088;&amp;#x7DE8;
  2. &amp;#x305D;&amp;#x3082;&amp;#x305D;&amp;#x3082;Folk&amp;#x3063;&amp;#x3066;&amp;#x306A;&amp;#x3093;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;
  3. &amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30AF;&amp;#x3058;&amp;#x3083;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x306D;&amp;#x3002;
  4. &amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30AF;&amp;#x30DC;&amp;#x30FC;&amp;#x30EB;&amp;#x3067;&amp;#x3082;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  5. &amp;#x3082;&amp;#x3061;&amp;#x308D;&amp;#x3093;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30AF;&amp;#x30B9;&amp;#x30B1;&amp;#x3067;&amp;#x3082;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;
  6. &amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30AF;&amp;#x30BD;&amp;#x30F3;&amp;#x30B0;&amp;#x307F;&amp;#x305F;&amp;#x3044;&amp;#x306B;&amp;#x3001;&amp;#x8DA3;&amp;#x5473;&amp;#x3067;&amp;#x6C17;&amp;#x8EFD;&amp;#x306B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x3092;&amp;#x697D;&amp;#x3057;&amp;#x3080;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  7. &amp;#x3053;&amp;#x306E;&amp;#x524D;&amp;#x306E;YAPC::ASIA&amp;#x306E;&amp;#x3068;&amp;#x304D;&amp;#x306B;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x305F;&amp;#x3044;&amp;#x305B;&amp;#x3064;&amp;#x3055;&amp;#x304C;&amp;#x8A71;&amp;#x984C;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002; &amp;#x8A73;&amp;#x3057;&amp;#x304F;&amp;#x306F;&amp;#x3001;see &amp;#x30C0;&amp;#x30F3;&amp;#x30B3;&amp;#x30AC;&amp;#x30A4; &amp;#x3067;&amp;#x3002;
  8. &amp;#x6C17;&amp;#x8EFD;&amp;#x306B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x3092;&amp;#x306F;&amp;#x3058;&amp;#x3081;&amp;#x3066;&amp;#x307F;&amp;#x3088;&amp;#x3046;&amp;#x3088;!
  9. &amp;#x6B74;&amp;#x53F2;&amp;#x3092;&amp;#x632F;&amp;#x308A;&amp;#x304B;&amp;#x3048;&amp;#x3063;&amp;#x3066;&amp;#x307F;&amp;#x308B;&amp;#x3068;&amp;#x3001;BASIC&amp;#x2192;CGI&amp;#x2192;&amp;#x3001;&amp;#x3044;&amp;#x307E;&amp;#x306F;Web&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x304C;&amp;#x5168;&amp;#x76DB;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;
  10. &amp;#x4ECA;&amp;#x65E5;&amp;#x3044;&amp;#x3061;&amp;#x3070;&amp;#x3093;&amp;#x8A00;&amp;#x3044;&amp;#x305F;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x306F;&amp;#x3001;&amp;#x300C;Web&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x3058;&amp;#x3083;&amp;#x306A;&amp;#x3044;&amp;#x3068;&amp;#x3053;&amp;#x306B;&amp;#x3082;&amp;#x697D;&amp;#x3057;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x306F;&amp;#x305F;&amp;#x304F;&amp;#x3055;&amp;#x3093;&amp;#x3042;&amp;#x308B;&amp;#x3088;&amp;#x300D;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  11. &amp;#x307F;&amp;#x3093;&amp;#x306A;Web&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x308B;&amp;#x3057;&amp;#x3001;&amp;#x3044;&amp;#x3063;&amp;#x3057;&amp;#x3087;&amp;#x306E;&amp;#x3053;&amp;#x3068;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x9762;&amp;#x767D;&amp;#x304F;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3088;&amp;#x306D;&amp;#x3002;
  12. &amp;#x591A;&amp;#x69D8;&amp;#x6027;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;
  13. &amp;#x30E6;&amp;#x30FC;&amp;#x30B6;&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A7;&amp;#x30A4;&amp;#x30B9;&amp;#x306E;&amp;#x5B9F;&amp;#x9A13;&amp;#x3068;&amp;#x304B;&amp;#x3002;
  14. &amp;#x305D;&amp;#x3046;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x3063;&amp;#x3066;&amp;#x697D;&amp;#x3057;&amp;#x304F;&amp;#x306A;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x304B;?
  15. &amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x307C;&amp;#x304F;&amp;#x306E;&amp;#x304A;&amp;#x3059;&amp;#x3059;&amp;#x3081;&amp;#x306F;
  16. &amp;#x30D7;&amp;#x30E9;&amp;#x30B0;&amp;#x30A4;&amp;#x30F3;&amp;#x3065;&amp;#x304F;&amp;#x308A;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  17. &amp;#x306A;&amp;#x3093;&amp;#x3067;&amp;#x30D7;&amp;#x30E9;&amp;#x30B0;&amp;#x30A4;&amp;#x30F3;&amp;#x306A;&amp;#x3093;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;
  18. &amp;#x30A4;&amp;#x30C1;&amp;#x304B;&amp;#x3089;&amp;#x3059;&amp;#x3054;&amp;#x3044;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x3092;&amp;#x3064;&amp;#x304F;&amp;#x308B;&amp;#x3088;&amp;#x308A;&amp;#x3082;&amp;#x624B;&amp;#x8EFD;&amp;#x3060;&amp;#x304B;&amp;#x3089;&amp;#x3002;
  19. &amp;#x5C0F;&amp;#x5224;&amp;#x30B6;&amp;#x30E1;&amp;#x307F;&amp;#x305F;&amp;#x3044;&amp;#x306B;&amp;#x3001;&amp;#x89AA;&amp;#x30A2;&amp;#x30D7;&amp;#x30EA;&amp;#x306B;&amp;#x5BC4;&amp;#x751F;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x3089;&amp;#x3048;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  20. &amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x3001;&amp;#x6577;&amp;#x5C45;&amp;#x304C;&amp;#x4F4E;&amp;#x3044;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002; &amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x3092;&amp;#x59CB;&amp;#x3081;&amp;#x308B;&amp;#x306B;&amp;#x306F;&amp;#x3060;&amp;#x3044;&amp;#x3058;&amp;#x306A;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;
  21. &amp;#x305D;&amp;#x3046;&amp;#x306F;&amp;#x3044;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x96E3;&amp;#x3057;&amp;#x3044;&amp;#x3093;&amp;#x3058;&amp;#x3083;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3001;&amp;#x3068;&amp;#x601D;&amp;#x308F;&amp;#x308C;&amp;#x308B;&amp;#x304B;&amp;#x3082;&amp;#x3057;&amp;#x308C;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;
  22. &amp;#x3044;&amp;#x3048;&amp;#x3044;&amp;#x3048;&amp;#x3002;&amp;#x3061;&amp;#x304C;&amp;#x3046;&amp;#x3088;&amp;#x5168;&amp;#x7136;&amp;#x3061;&amp;#x304C;&amp;#x3046;&amp;#x3088;&amp;#x3002;
  23. &amp;#x305D;&amp;#x3053;&amp;#x3067;Ruby&amp;#x3067;&amp;#x3059;&amp;#x3088;&amp;#x3002;
  24. &amp;#x3044;&amp;#x304F;&amp;#x3064;&amp;#x304B;&amp;#x4F8B;&amp;#x3092;&amp;#x3002;
  25. HTTP&amp;#x3084;&amp;#x30C6;&amp;#x30AD;&amp;#x30B9;&amp;#x30C8;&amp;#x51E6;&amp;#x7406;&amp;#x306F;Ruby&amp;#x3067;&amp;#x6163;&amp;#x308C;&amp;#x3063;&amp;#x3053;&amp;#x3067;&amp;#x3059;&amp;#x3088;&amp;#x306D;&amp;#x3002;
  26. QSTwitter
  27. &amp;#x30D5;&amp;#x30A9;&amp;#x30ED;&amp;#x30EF;&amp;#x30FC;&amp;#x306E;&amp;#x30EA;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x4FDD;&amp;#x5B58;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x306B;&amp;#x3001;Marshal.dump&amp;#x3092;&amp;#x3064;&amp;#x304B;&amp;#x3063;&amp;#x3066;&amp;#x307E;&amp;#x3059;&amp;#x3002; &amp;#x3068;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x304A;&amp;#x624B;&amp;#x8EFD;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;
  28. &amp;#x30D3;&amp;#x30B8;&amp;#x30E5;&amp;#x30A2;&amp;#x30EB;&amp;#x3067;&amp;#x30D5;&amp;#x30A3;&amp;#x30B8;&amp;#x30AB;&amp;#x30EB;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;
  29. Ruby&amp;#x304C;Gainer&amp;#x306E;&amp;#x5236;&amp;#x5FA1;&amp;#x3068;QuartzComposer&amp;#x3068;&amp;#x3092;&amp;#x3064;&amp;#x306A;&amp;#x3052;&amp;#x3066;&amp;#x304F;&amp;#x308C;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;
  30. Refe2.vim
  31. Vim&amp;#x304B;&amp;#x3089;Ruby&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30D7;&amp;#x30C8;&amp;#x3067;BitCluset&amp;#x3092;&amp;#x76F4;&amp;#x63A5;&amp;#x547C;&amp;#x3093;&amp;#x3067;&amp;#x307E;&amp;#x3059;&amp;#x3002; VimScript&amp;#x3092;&amp;#x3042;&amp;#x307E;&amp;#x308A;&amp;#x899A;&amp;#x3048;&amp;#x306A;&amp;#x304F;&amp;#x3066;&amp;#x3082;&amp;#x6E08;&amp;#x307F;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;
  32. &amp;#x3042;&amp;#x306A;&amp;#x305F;&amp;#x304C;&amp;#x697D;&amp;#x3057;&amp;#x3044;&amp;#x3001;&amp;#x306A;&amp;#x306B;&amp;#x304B;&amp;#x3092;&amp;#x3064;&amp;#x304F;&amp;#x308A;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;