SlideShare a Scribd company logo
1 of 43
Download to read offline
20世紀Ruby
20世紀Ruby
  世紀
 ごとけん Gotoken
後藤謙太郎 / 株式会社シングラム
 Kentaro Goto / Syngram Co. Ltd.

               1
こんにちは

 あこがれの toruby に
 ついに参加
 しかも講演者
 大変光栄です
 よろしくおねがいします


          2
わたしとtoruby
わたしと

  実はたいへんに昔から関係
    から
  BTから
    BT: before toruby
    っていつ
    っていつ?
        いつ
    紀元:
    紀元 toRuby1st = 2007-03-28
    それは 2007-02-07 の出来事

               3
わたしとtoruby
わたしと

  とあるSNSにメッセージがきた
        にメッセージがきた
  とある




             4
わたしと toruby

  メッセージの概要
   咳さんが
   地元のかたから相談をうけた
   アドバイスして欲しいとのこと
   どうしよう
   そこで親身になって答えた
  →そこで親身になって答えた

              5
わたしと toruby

  全力で親身の回答




              6
わたしと toruby

  池澤さん、ごめんなさい
      結果オーライってことで…
      結果オーライってことで
      月、torubyスタート
  翌3月、月、      スタート
  toruby@qwik.jp には4月に参加
                 には 月に参加
  参加したいとずっと思ってました!
  参加したいとずっと思ってました
  そしていま…
  そしていま

              7
とちぎRuby
とちぎRuby
会議01
会議01
   8
わたしと池澤さん

     年にストーカー扱い
 2007年にストーカー扱い
       ↓
       月にRuby会議で初対面
     年 月に    会議で初対面
 2008年6月に
       ↓
 しかしもっと前に会っていたらしい
   それは20世紀最後の年の出来事
   それは 世紀最後の年の出来事

           9
Perl/Ruby
 Conference
     10
Perl/Ruby Conference

  2000-11-29 ~ 2000-12-01
  Linux Conference 2000 と同時開催
  全体では100を超えるセッション
  全体では         を超えるセッション
  lwall も来た(宴会で隣に座れた :-)
        も来た 宴会で隣に座れた
  とにかく、すごいお祭り
     プログラムが7ページもある
     プログラムが ページもある
     ここに貼れない
                 11
スピーカー
Perl/Ruby Conferenceスピーカー

  まつもとゆきひろ、原信一郎、前田
  修吾、後藤謙太郎、木山真人、わ
  たなべひろふみ、吉田正人、関将
  俊、助田雅紀、石井勝、やまだあき
  らさん
   敬称略、順不同)
   敬称略、順不同
  (敬称略、順不同


              12
の話題
Perl/Ruby Conferenceの話題

      との比較、対決
  Perlとの比較、対決
  入門
  サーバサイドプログラミング
  GC
  移植
  Unit Testing, Pair Programming
  ワンライナー対決
                13
今日の話題

 torubyのみなさんの参考になりたい
       のみなさんの参考になりたい
       のみなさんの
       の集まりなので
   Rubyの集まりなので
     話題はRuby
     話題は
   勉強会なので
     勉強するときの指針
   縁のある20世紀末 あたり)をネタに
          世紀末(あたり
   縁のある 世紀末 あたり をネタに

         14
今日の材料



Rubyのいろ
    のいろ
いろな楽しみ
        15
今日話したいこと



やってよかっ
たなとおもう
こと         16
の話題(再掲
                    の話題 再掲)
Perl/Ruby Conferenceの話題 再掲

      との比較、対決
  Perlとの比較、対決
  入門
  サーバサイドプログラミング
  GC
  移植
  Unit Testing, Pair Programming
  ワンライナー対決
                17
のいろいろな楽しみ
Rubyのいろいろな楽しみ

 日用品として楽しい
 ネットワーキングが楽しい
 Mix-in が楽しい
 数学が楽しい
 みんなに使われて楽しい


         18
お題1
お題




日用品
      19
日用品として楽しい

 文字列操作
  正規表現からスクレイピングまで
 ファイル操作
  検索、変換、集約
 プログラムジェネレータ
  Gnuplot とか HTML とか
 ワンライナー
         20
日用品として楽しい例

          年頃)
          年頃
 gpv (1998年頃
   Gnuplot の plot3d を vi 風のキー
   でくるくる回す
     Gnuplot はグラフ作成インタプ
     リタ
   TTY を raw モードにしてキー入力
   を gnuplot にコマンドを送る
             21
gpv に至る道

 もともとすごく面倒でいやだった
 Ruby のサンプル観ていたらキー
 ボードを読む方法がわかった
 Gnuplot に渡すにはパイプを使う
       のようなものを書いた
 Open3 のようなものを書いた
 要素技術さえ知れば可能
 グルー的な利用法
           22
お題2
お題




ネットワー
キング
      23
ネットワーキングが楽しい

           が簡単
 TCPServer が簡単
      だと1ページくらいの内容が
          ページくらいの内容が1行
    C だと ページくらいの内容が 行
       が簡単
 dRuby が簡単
   プロトコルを設計しなくていい
         も簡単
 WEBrick も簡単
   デバッグにも便利

         24
ネットワーキングが楽しい例

                     原形2002年)
                     原形    年
 WEBrick::HTTPProxy (原形
  もとは yomuxy のために作成
    Kakasi の学年別オプションパッ
       馬場肇さん)をつかった読み
    チ(馬場肇さん)をつかった読み
      (馬場肇さん
    下し proxy
    このパッチは現在入手不能
           が          対応など
  gotoyuzoがCONNECT対応など
             25
WEBrick::HTTPProxy

  原形は straw.rb という名前
    細いパイプみたいなもののつもり
  最初のが動くまで3時間くらい
  最初のが動くまで 時間くらい
  yomuxy は確か1日くらい
         は確か 日くらい
  ブラウズ履歴を共有するproxyなど  など
  ブラウズ履歴を共有する
  作って経験値を高めた
  いまでも短い(288行8391バイト
                   バイト)
  いまでも短い        行  バイト
                26
最近はいろんなことがさらに簡単

 gem 偉大
          ポストの時刻を見たい
   Twitterポストの時刻を見たい
                       っていついつ?
    about 3 hours ago っていつ
    しらべたらなんか簡単らしい
    sudo gem install twitter からサ
    ンプルいじって30分くらい
    ンプルいじって 分くらい
    いまでもつかってる
              27
お題3
お題




      28
Mix-in が楽しい

  Mix-in って
     多重継承の代わり
     メソッドや定数を付け加える方法
  class Foo
     include M
  end

              29
Mix-in が楽しい例

                     年頃)
                     年頃
  product.rb (2002年頃
     product は直積のこと
     多重ループでは頻出
     {1,2} × {3,4} =
         {(1,3), (1,4), (2,3), (2,4)}
     [1,2].each{|i|
         [3,4].each{|j|
                   30
product.rb

   配列だけでなく、Enumerable ならな
   配列だけでなく、
   んでもいいはず
   直積があるとできること
    多重ループがきれいに
    enum*enum == enum**2
    (enum**3).each{|i,j,k|

             31
の実装
product.rbの実装

  直積の要素を直接持っちゃうと大き
  すぎる
  そこで外部イテレータ
     継続を
     継続を使った実装
     遅い orz
     いまなら Enumerator で
  1.9 では Array の組み込みメソッド
                32
お題4
お題




      33
数学が楽しい

 いまひとつ発達してない
 そもそもRubyと相性いいのか謎
 そもそも    と相性いいのか謎
 だからこそやることはやまほどある
 問題の宝庫
 最後のフロンティア
 数値計算はかなり発達してる
  電脳Ruby、BioRuby など
  電脳    、
         34
数学が楽しい例

                      年頃)
                      年頃
 combinatoria.rb (2003年頃
   順列、組み合わせなど初等的
           数やPartition数なども
           数や         数なども
   Stirling数や
   外部イテレータ
   パズルを解くのに便利
   Combinatics という名前は使われ
   ていた(原さんに原さんに)
   ていた 原さんに
           35
お題5
お題




みんなに
使われて
      36
みんなに使われて楽しい

 書いて満足することももちろんある
 でも使われるとまたちがった楽しさ
  まちがいの指摘
  友達ができたり




        37
みんなに使われて楽しい例

                   年
 benchmark.rb (1999年)
   実行時間を測定する関数
  たぶん後藤の書いたもので実行
  回数最多
        がリクエストごと呼ぶので
   Railsがリクエストごと呼ぶので
 お祭りでもつかった
   ベンチマーク祭り
  →ベンチマーク祭り
           38
ベンチマーク祭り

 アナグラム探し (2000年)    年
                  ~
  [ruby-talk:8142]~
  文字の入れ替えでできる別の単
  語を探す速い方法は?
  語を探す速い方法は?
  ものすごい盛り上がった
   まとめ→極めよ
       極めよRuby道 第8回
   まとめ 極めよ    道   回
    『C MAGAZINE』2001年3月号
               』    年 月号
    http://www.notwork.org/~gotoken/mag/cmagazine/gokudo/8th/

                         39
そろそろ




       40
やってよかったなとおもうこと

 とにかくうごくものをつくる
  カッコよさはあとで追及
 ふだんから基礎的な修行をする
  Stevens を読む
 ひとにみてもらう
  サンプルを書く

         41
よくなかったなと思うこと

 メンテナンスしてない
  いま動かないものも結構ある
 つかいもしない機能
  無駄な時間、メンテコスト増える
 バックアップ取ってなかった事件
  yomuxy はもう動かせない><

         42
まとめ

 いろんな楽しみ方がある
 小さなものを書いて人にみせる
       すばらしい
 torubyすばらしい
 ありがとうございました




       43

More Related Content

What's hot

もっと仕事で使うRuby
もっと仕事で使うRubyもっと仕事で使うRuby
もっと仕事で使うRubyKentaro Goto
 
Web技術勉強会11回目
Web技術勉強会11回目Web技術勉強会11回目
Web技術勉強会11回目龍一 田中
 
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴opengroove
 
インフラエンジニアになろう!
インフラエンジニアになろう!インフラエンジニアになろう!
インフラエンジニアになろう!Toshiaki Baba
 
eComing Club簡介200802
eComing Club簡介200802eComing Club簡介200802
eComing Club簡介200802Robin Chen
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanoharaHiroshi Ono
 
Internet Ued Process
Internet Ued ProcessInternet Ued Process
Internet Ued Processrex song
 
Ruby による Agile 開発
Ruby による Agile 開発Ruby による Agile 開発
Ruby による Agile 開発Kenji Hiranabe
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hiroshi Ono
 
1242982622API2 upload
1242982622API2 upload1242982622API2 upload
1242982622API2 upload51 lecture
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDtripodworks
 
enNetforum Toyama Presentation
enNetforum Toyama PresentationenNetforum Toyama Presentation
enNetforum Toyama PresentationForum
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術devsumi2009
 
認識網路傳播
認識網路傳播認識網路傳播
認識網路傳播基欽 劉
 

What's hot (20)

もっと仕事で使うRuby
もっと仕事で使うRubyもっと仕事で使うRuby
もっと仕事で使うRuby
 
XS Japan 2008 App Data Japanese
XS Japan 2008 App Data JapaneseXS Japan 2008 App Data Japanese
XS Japan 2008 App Data Japanese
 
S2
S2S2
S2
 
Web技術勉強会11回目
Web技術勉強会11回目Web技術勉強会11回目
Web技術勉強会11回目
 
S8
S8S8
S8
 
Lp3
Lp3Lp3
Lp3
 
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
イントラネット検索・「ジーラ・ドキュメント・サーチ」の機能と特徴
 
インフラエンジニアになろう!
インフラエンジニアになろう!インフラエンジニアになろう!
インフラエンジニアになろう!
 
eComing Club簡介200802
eComing Club簡介200802eComing Club簡介200802
eComing Club簡介200802
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanohara
 
Internet Ued Process
Internet Ued ProcessInternet Ued Process
Internet Ued Process
 
Ruby による Agile 開発
Ruby による Agile 開発Ruby による Agile 開発
Ruby による Agile 開発
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
 
PFI会社案内
PFI会社案内PFI会社案内
PFI会社案内
 
1242982622API2 upload
1242982622API2 upload1242982622API2 upload
1242982622API2 upload
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARD
 
enNetforum Toyama Presentation
enNetforum Toyama PresentationenNetforum Toyama Presentation
enNetforum Toyama Presentation
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術
 
Let's get into coLinux!
Let's get into coLinux!Let's get into coLinux!
Let's get into coLinux!
 
認識網路傳播
認識網路傳播認識網路傳播
認識網路傳播
 

Viewers also liked

あなたも出来る!webエンジニアがSwiftでリリースするためにやったこと
あなたも出来る!webエンジニアがSwiftでリリースするためにやったことあなたも出来る!webエンジニアがSwiftでリリースするためにやったこと
あなたも出来る!webエンジニアがSwiftでリリースするためにやったことMasaru Gushiken
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5今城 善矩
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由Yohei Azekatsu
 
Swiftとメソッドのアレコレ
SwiftとメソッドのアレコレSwiftとメソッドのアレコレ
SwiftとメソッドのアレコレNobuo Saito
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)Kanako Kobayashi
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift PlaygroundsへKinkumaDesign
 
Swiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲームSwiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲーム聡 中川
 
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
Swift (with SceneKit) で簡単な3Dゲームを作ってみたSwift (with SceneKit) で簡単な3Dゲームを作ってみた
Swift (with SceneKit) で簡単な3Dゲームを作ってみたKazuya Hiruma
 
Swift Code in Swift - 2日間でゲームを作ってみた
Swift Code in Swift - 2日間でゲームを作ってみたSwift Code in Swift - 2日間でゲームを作ってみた
Swift Code in Swift - 2日間でゲームを作ってみたaxsh co., LTD.
 
ほんわかSwift勉強資料
ほんわかSwift勉強資料ほんわかSwift勉強資料
ほんわかSwift勉強資料kouhei kawamata
 

Viewers also liked (13)

あなたも出来る!webエンジニアがSwiftでリリースするためにやったこと
あなたも出来る!webエンジニアがSwiftでリリースするためにやったことあなたも出来る!webエンジニアがSwiftでリリースするためにやったこと
あなたも出来る!webエンジニアがSwiftでリリースするためにやったこと
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
 
Swiftとメソッドのアレコレ
SwiftとメソッドのアレコレSwiftとメソッドのアレコレ
Swiftとメソッドのアレコレ
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
Swift入門おさらい
Swift入門おさらいSwift入門おさらい
Swift入門おさらい
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへ
 
Swiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲームSwiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲーム
 
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
Swift (with SceneKit) で簡単な3Dゲームを作ってみたSwift (with SceneKit) で簡単な3Dゲームを作ってみた
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
 
Swift Code in Swift - 2日間でゲームを作ってみた
Swift Code in Swift - 2日間でゲームを作ってみたSwift Code in Swift - 2日間でゲームを作ってみた
Swift Code in Swift - 2日間でゲームを作ってみた
 
ほんわかSwift勉強資料
ほんわかSwift勉強資料ほんわかSwift勉強資料
ほんわかSwift勉強資料
 

20世紀Ruby