Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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	  ...
自己紹介	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 te...
いままでにつくったもの	•  AJP:	  a	  Judge	  System	  for	  Programming	  Contest	  •  An	  Assembler	  for	  Meiji-­‐MPU	  •  (compa...
(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	  ...
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>...
XHTML	  →	  Symbolic	  Expression	(html	  :xmlns	  “hDp://www.w3.org/1999/xhtml”	  	  	  (head	  	  	  	  	  (=tle	  “Cont...
これは・・・	S式だ	MCPC:	  a	  Compe==ve	  Programming	  Circle.	 16
text.html-­‐lite	  ライブラリ	•  (html:[タグ名]	  引数…)	  でXHTMLを生成できる	  •  属性はキーワード引数で表現	  – 属性名=“値”	  →	  :属性名	  “値”	  •  子要素やテキス...
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	 ...
関数cgi-­‐get-­‐parameter	•  (cgi-­‐get-­‐parameter	  “名前”	  p)	  で、パラメータの値がとれる。	  •  存在しなかったら#f	  •  cgi-­‐main	  の中で、パラメータ...
関数cgi-­‐get-­‐parameter	(let	  ((mode	  (cgi-­‐get-­‐parameter	  "mode"	  p))	  	  	  	  	  	  	  	  	  (uid	  (cgi-­‐get-...
gauche.parameter	  ライブラリ	•  大域変数/動的スコープ的なもの	  – Common	  Lisp	  だとスペシャル変数とか言うらしい	  •  (parameterize	  ((x	  ‘hoge))	  …)	 ...
その他	•  認証関係はDokuWiki	  Authoriza=on	  Library	  が便利だよ!!(ステマ	  – hDps://github.com/kazh98/Gauche-­‐www-­‐dokuauth	  – ユーザ管理...
(CDR	  …)	MCPC:	  a	  Compe==ve	  Programming	  Circle.	 25
まとめ	•  みんな大好きS式表現でXHTML	  組めるよ!	  •  Schemeを実用するのには良いネタだよ!	  •  Ruby	  の10倍遅重・・・	  CGI	  を書くことが目的じゃない、Schemeを書くことが目的だ!!!	M...
THANKS	  FOR	  YOUR	  LISTENING!!	MCPC:	  a	  Compe==ve	  Programming	  Circle.	 27
Q.Gauche	  のライブラリ	  読み込みが遅いだけでは?	•  恐らくその通りです。www.cgi	  ライブラリは依存ライブラリの数が多いので、ディスクアクセスが多くなり、特にそれが遅いサーバ上だと速度低下が起きるようです。	  • ...
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
Mongo dbのgridfsについて
Next
Download to read offline and view in fullscreen.

7

Share

Download to read offline

GaucheでCGIプログラミング

Download to read offline

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

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

GaucheでCGIプログラミング

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

    Jul. 22, 2020
  • huzioka

    Jun. 17, 2016
  • masahitojp

    Jun. 4, 2013
  • TakeshiWatanabe2

    May. 26, 2013
  • stibear

    May. 26, 2013
  • AtsuoYamada

    May. 25, 2013
  • funchs

    May. 25, 2013

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

Views

Total views

7,965

On Slideshare

0

From embeds

0

Number of embeds

3,612

Actions

Downloads

6

Shares

0

Comments

0

Likes

7

×