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

Like this? Share it with your network

Share

GaucheでCGIプログラミング

on

  • 6,104 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
6,104
Views on SlideShare
2,664
Embed Views
3,440

Actions

Likes
5
Downloads
2
Comments
3

6 Embeds 3,440

http://shibuya.lisp-users.org 3352
http://127.0.0.1 54
http://localhost 18
https://twitter.com 13
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
  • 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プログラミング Presentation Transcript

  • 1. GaucheでCGIプログラミング Kazuhiro  Hishinuma  (@kazh98) MCPC:  a  Compe==ve  Programming  Circle. 1
  • 2. 自己紹介 •  Kazuhiro  Hishinuma  (かにたん♪)  – TwiDer:  @kazh98  – Web:  hDp://www.arnip.org/  – 「MCPC:  a  Compe==ve  Programming  Circle」代表  MCPC:  a  Compe==ve  Programming  Circle. 2
  • 3. 自己紹介 MCPC:  a  Compe==ve  Programming  Circle. 3
  • 4. (CDR  …) MCPC:  a  Compe==ve  Programming  Circle. 4
  • 5. よく聞かれること・・・ Schemeで  なにを  書いているんですか? MCPC:  a  Compe==ve  Programming  Circle. 5
  • 6. 答え CGIです。 MCPC:  a  Compe==ve  Programming  Circle. 6
  • 7. GaucheでCGIを書くメリット Schemeを実用できる  ・・・以上。 MCPC:  a  Compe==ve  Programming  Circle. 7
  • 8. 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
  • 9. いままでにつくったもの •  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
  • 10. (compare-­‐aoj-­‐solved) MCPC:  a  Compe==ve  Programming  Circle. 10
  • 11. (CDR  …) MCPC:  a  Compe==ve  Programming  Circle. 11
  • 12. GaucheでCGIを書くには・・・? • text.html-­‐lite  ライブラリ  • www.cgi  ライブラリ  • gauche.parameter  ライブラリ  ・・・を使おう!!  MCPC:  a  Compe==ve  Programming  Circle. 12
  • 13. CGIが作り出すものは・・・? HTML MCPC:  a  Compe==ve  Programming  Circle. 13 XHTML
  • 14. 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
  • 15. 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
  • 16. これは・・・ S式だ MCPC:  a  Compe==ve  Programming  Circle. 16
  • 17. 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
  • 18. CGI  の動作手順 1.  パラメータを受け取る  2.  XHTMLを生成する  3.  結果を返す MCPC:  a  Compe==ve  Programming  Circle. 18
  • 19. www.cgi  ライブラリ 1.  パラメータを受け取る  2.  XHTMLを生成する  3.  結果を返す MCPC:  a  Compe==ve  Programming  Circle. 19 赤字の部分を受け持ってくれる
  • 20. 関数cgi-­‐main (define  (main  args)      (cgi-­‐main  (lambda  (p)          (list  (cgi-­‐header)  ;  XHTML  の生成処理          ))))  MCPC:  a  Compe==ve  Programming  Circle. 20
  • 21. 関数cgi-­‐get-­‐parameter •  (cgi-­‐get-­‐parameter  “名前”  p)  で、パラメータの値がとれる。  •  存在しなかったら#f  •  cgi-­‐main  の中で、パラメータによる場合分けをすると読みやすい!! MCPC:  a  Compe==ve  Programming  Circle. 21
  • 22. 関数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
  • 23. gauche.parameter  ライブラリ •  大域変数/動的スコープ的なもの  – Common  Lisp  だとスペシャル変数とか言うらしい  •  (parameterize  ((x  ‘hoge))  …)  …  で呼び出された云々は、変数x  を参照可  > あんま使わない < MCPC:  a  Compe==ve  Programming  Circle. 23
  • 24. その他 •  認証関係はDokuWiki  Authoriza=on  Library  が便利だよ!!(ステマ  – hDps://github.com/kazh98/Gauche-­‐www-­‐dokuauth  – ユーザ管理をDokuWiki  ACL  に丸投げライブラリ  •  (気が向いたら)3ヶ月後にお話します。 MCPC:  a  Compe==ve  Programming  Circle. 24
  • 25. (CDR  …) MCPC:  a  Compe==ve  Programming  Circle. 25
  • 26. まとめ •  みんな大好きS式表現でXHTML  組めるよ!  •  Schemeを実用するのには良いネタだよ!  •  Ruby  の10倍遅重・・・  CGI  を書くことが目的じゃない、Schemeを書くことが目的だ!!! MCPC:  a  Compe==ve  Programming  Circle. 26
  • 27. THANKS  FOR  YOUR  LISTENING!! MCPC:  a  Compe==ve  Programming  Circle. 27
  • 28. Q.Gauche  のライブラリ  読み込みが遅いだけでは? •  恐らくその通りです。www.cgi  ライブラリは依存ライブラリの数が多いので、ディスクアクセスが多くなり、特にそれが遅いサーバ上だと速度低下が起きるようです。  •  私が実用するときは、www.cgi  ライブラリ中の必要関数だけ抜き出して、cgi  スクリプト本体に埋め込むことが多いです。  •  ↑自動化できたらいいですね。 MCPC:  a  Compe==ve  Programming  Circle. 28