kiyoka.2008_01_19 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2008_01
55555555555555555555555555555555555555555555555555555555555
5

[OldType]YouTube貼りつけを実現

5

RubyKaigi2007のYouTube動画を見ながらブログ記事を書いている間に、動画を貼りつけてみたくなった。

5
 ##(youtube videoid)
5

というコマンドをサポートした。(videoidはYouTubeのURLに入っているv=xxxxxのクエリ引数部分)

5

実際にYouTubeの動画貼るとこんな感じ。

5

 iPhoneのようなマルチタッチインターフェースの研究者ジェフ・ハン氏のデモ動画。

5

 

5

サポートするのはすごく簡単。

5

util.kahuaに(youtube)のブロックを追加するだけ。

5

Kahuaの凄い所は、それだけではなくて、本番環境にkahua-shellから接続してこの関数をevalできること。

5

他のフレームワークでこんな芸当は難しいでしょう。

5

こんな環境に慣れてしまったら他の環境には戻れない。

5
(define (oldtype:format-macro expr)
5
  (let ((command (car expr))
5
        (arg     (if (null? (cdr expr))
5
                     '()
5
                     (caadr expr))))
5
    (case command
5
      ((img)
5
       (img/ (@/ (src
5
                  (let1 str (symbol->string arg)
5
                        (if (#/^[.][.]/ str)
5
                            (string-append (oldtype:static-base-path) "img/" str)
5
                            str)))
5
                 (alt (oldtype:otpath->basename (symbol->string arg))))))
5
      ((todo)
5
       (img/ (@/ (src (string-append (oldtype:static-base-path) "icon:todo.png"))
5
                 (alt "TODO"))))
5
      ((done)
5
       (img/ (@/ (src (string-append (oldtype:static-base-path) "icon:done.png"))
5
                 (alt "DONE"))))
5
      ((info)
5
       (img/ (@/ (src (string-append (oldtype:static-base-path) "icon:info.png"))
5
                 (alt "INFO"))))
5
      ((edit)
5
       (img/ (@/ (src (string-append (oldtype:static-base-path) "icon:pencil.png"))
5
                 (alt "EDIT"))))
5
      ((youtube)
5
       (object/
5
        (@/ (width  "425")
5
            (height "355"))
5
        (param/
5
         (@/ (name  "movie")
5
             (value (format "~a" (symbol->string arg)))))
5
        (param/
5
         (@/ (name  "wmode")
5
             (value "transparent")))
5
        (embed/
5
         (@/ (src   (format "http://www.youtube.com/v/~a" (symbol->string arg)))
5
             (type  "application/x-shockwave-flash")
5
             (wmode "transparent")
5
             (width "425")
5
             (height"355")))))
5
      (else
5
       `(p/ ,(format "!!Error : no such macro \"~a\"!!" command))))))
5

本当は、シェルスクリプトでもこのようなプラグインを追加できるようにしたい。

5

今回は標準機能ということにしてWebアプリ側に機能追加した。

5

シェルスクリプトでプラグインをサポートした時に有利なのはPlagger等のバッチ処理や統計処理ができるという事。

5

プラグインにも数種類あるという形ににすればいいか。