• Like
  • Save
GaucheでCGIプログラミング
Upcoming SlideShare
Loading in...5
×
 

GaucheでCGIプログラミング

on

  • 5,806 views

Lisp Meet Up presented by Shibuya.lisp #5 での発表資料

Lisp Meet Up presented by Shibuya.lisp #5 での発表資料
cf. http://atnd.org/events/39675

Statistics

Views

Total Views
5,806
Views on SlideShare
2,368
Embed Views
3,438

Actions

Likes
5
Downloads
2
Comments
3

6 Embeds 3,438

http://shibuya.lisp-users.org 3352
http://127.0.0.1 54
http://localhost 18
https://twitter.com 11
http://www.redditmedia.com 2
https://www.google.co.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

13 of 3 Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • うわーなるほど、共用サーバだと厳しいですね…
    Are you sure you want to
    Your message goes here
    Processing…
  • speedygosh の作者さんからコメントいただけるとは光栄です><
    確かにspeedygosh を始めとする常駐(キャッシュ)系高速化ツールの使用も考えてはいたのですが(この発表時にも触れさせて頂きました)、使用しているさくらのレンタルサーバが常駐を禁止しているため、実運用までは至りませんでした。。。
    今後VPSなどの常駐可サーバを手に入れた際には、真っ先に採用しようと思っています><
    Are you sure you want to
    Your message goes here
    Processing…
  • 速度が遅いと思うなら、speedygosh試してみませんか(ステマ
    http://legacy.e.tir.jp/wiliki?speedygosh
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    GaucheでCGIプログラミング GaucheでCGIプログラミング Presentation Transcript

    • GaucheでCGIプログラミング Kazuhiro  Hishinuma  (@kazh98) MCPC:  a  Compe==ve  Programming  Circle. 1
    • 自己紹介 •  Kazuhiro  Hishinuma  (かにたん♪)  – TwiDer:  @kazh98  – Web:  hDp://www.arnip.org/  – 「MCPC:  a  Compe==ve  Programming  Circle」代表  MCPC:  a  Compe==ve  Programming  Circle. 2
    • 自己紹介 MCPC:  a  Compe==ve  Programming  Circle. 3
    • (CDR  …) MCPC:  a  Compe==ve  Programming  Circle. 4
    • よく聞かれること・・・ Schemeで  なにを  書いているんですか? MCPC:  a  Compe==ve  Programming  Circle. 5
    • 答え CGIです。 MCPC:  a  Compe==ve  Programming  Circle. 6
    • GaucheでCGIを書くメリット Schemeを実用できる  ・・・以上。 MCPC:  a  Compe==ve  Programming  Circle. 7
    • GaucheでCGIを書くデメリット % cat test.scm(use www.cgi)% time gosh test.scm0.176u 0.045s 0:00.22 95.4%22+8792k 0+0io 0pf+0w% cat test.rbrequire "cgi"% time ruby test.rb0.011u 0.022s 0:00.22 13.6%8+1957k 25+0io 8pf+0w※さくらのレンタルサーバ MCPC:  a  Compe==ve  Programming  Circle. 8
    • いままでにつくったもの •  AJP:  a  Judge  System  for  Programming  Contest  •  An  Assembler  for  Meiji-­‐MPU  •  (compare-­‐aoj-­‐solved)  – hDp://www.arnip.org/compareaoj.cgi  – Aizu  Online  Judge  のSolved  比較  – Lisper  のため(?)  のUI  MCPC:  a  Compe==ve  Programming  Circle. 9
    • (compare-­‐aoj-­‐solved) MCPC:  a  Compe==ve  Programming  Circle. 10
    • (CDR  …) MCPC:  a  Compe==ve  Programming  Circle. 11
    • GaucheでCGIを書くには・・・? • text.html-­‐lite  ライブラリ  • www.cgi  ライブラリ  • gauche.parameter  ライブラリ  ・・・を使おう!!  MCPC:  a  Compe==ve  Programming  Circle. 12
    • CGIが作り出すものは・・・? HTML MCPC:  a  Compe==ve  Programming  Circle. 13 XHTML
    • XHTML <html  xmlns=“hDp://www.w3.org/1999/xhtml”>      <head>          <=tle>Content</=tle></head>      <body>          <h1>Hello,  World!</h1></body></html> MCPC:  a  Compe==ve  Programming  Circle. 14
    • XHTML  →  Symbolic  Expression (html  :xmlns  “hDp://www.w3.org/1999/xhtml”      (head          (=tle  “Content”))      (body          (h1  “Hello,  World!”))) MCPC:  a  Compe==ve  Programming  Circle. 15
    • これは・・・ S式だ MCPC:  a  Compe==ve  Programming  Circle. 16
    • text.html-­‐lite  ライブラリ •  (html:[タグ名]  引数…)  でXHTMLを生成できる  •  属性はキーワード引数で表現  – 属性名=“値”  →  :属性名  “値”  •  子要素やテキストノードは式の入れ子で表現  – <b><u><i>Hello</i></u></b>    →  (html:b  (html:u  (html:i  “Hello”)))  MCPC:  a  Compe==ve  Programming  Circle. 17
    • CGI  の動作手順 1.  パラメータを受け取る  2.  XHTMLを生成する  3.  結果を返す MCPC:  a  Compe==ve  Programming  Circle. 18
    • www.cgi  ライブラリ 1.  パラメータを受け取る  2.  XHTMLを生成する  3.  結果を返す MCPC:  a  Compe==ve  Programming  Circle. 19 赤字の部分を受け持ってくれる
    • 関数cgi-­‐main (define  (main  args)      (cgi-­‐main  (lambda  (p)          (list  (cgi-­‐header)  ;  XHTML  の生成処理          ))))  MCPC:  a  Compe==ve  Programming  Circle. 20
    • 関数cgi-­‐get-­‐parameter •  (cgi-­‐get-­‐parameter  “名前”  p)  で、パラメータの値がとれる。  •  存在しなかったら#f  •  cgi-­‐main  の中で、パラメータによる場合分けをすると読みやすい!! MCPC:  a  Compe==ve  Programming  Circle. 21
    • 関数cgi-­‐get-­‐parameter (let  ((mode  (cgi-­‐get-­‐parameter  "mode"  p))                  (uid  (cgi-­‐get-­‐parameter  "uid"  p))                  (cid  (cgi-­‐get-­‐parameter  "cid"  p)))      (list  (cgi-­‐header)          (cond              ((and  mode  (string=?  mode  "src"))  (gp-­‐source))              ((and  uid  (not  (string-­‐null?  uid))                                    cid  (not  (string-­‐null?  cid)))                (gp-­‐compare  uid  cid))              (else  (gp-­‐default)))))  MCPC:  a  Compe==ve  Programming  Circle. 22
    • gauche.parameter  ライブラリ •  大域変数/動的スコープ的なもの  – Common  Lisp  だとスペシャル変数とか言うらしい  •  (parameterize  ((x  ‘hoge))  …)  …  で呼び出された云々は、変数x  を参照可  > あんま使わない < MCPC:  a  Compe==ve  Programming  Circle. 23
    • その他 •  認証関係はDokuWiki  Authoriza=on  Library  が便利だよ!!(ステマ  – hDps://github.com/kazh98/Gauche-­‐www-­‐dokuauth  – ユーザ管理をDokuWiki  ACL  に丸投げライブラリ  •  (気が向いたら)3ヶ月後にお話します。 MCPC:  a  Compe==ve  Programming  Circle. 24
    • (CDR  …) MCPC:  a  Compe==ve  Programming  Circle. 25
    • まとめ •  みんな大好きS式表現でXHTML  組めるよ!  •  Schemeを実用するのには良いネタだよ!  •  Ruby  の10倍遅重・・・  CGI  を書くことが目的じゃない、Schemeを書くことが目的だ!!! MCPC:  a  Compe==ve  Programming  Circle. 26
    • THANKS  FOR  YOUR  LISTENING!! MCPC:  a  Compe==ve  Programming  Circle. 27
    • Q.Gauche  のライブラリ  読み込みが遅いだけでは? •  恐らくその通りです。www.cgi  ライブラリは依存ライブラリの数が多いので、ディスクアクセスが多くなり、特にそれが遅いサーバ上だと速度低下が起きるようです。  •  私が実用するときは、www.cgi  ライブラリ中の必要関数だけ抜き出して、cgi  スクリプト本体に埋め込むことが多いです。  •  ↑自動化できたらいいですね。 MCPC:  a  Compe==ve  Programming  Circle. 28