GaucheでCGIプログラミング

Kazuhiro Hishinuma
Kazuhiro HishinumaUndergraduate student
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.scm
0.176u 0.045s 0:00.22 95.4%
22+8792k 0+0io 0pf+0w
% cat test.rb
require "cgi"
% time ruby test.rb
0.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
1 of 28

Recommended

Implementation of Counters in ScopedBASIC by
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICKazuhiro Hishinuma
531 views66 slides
C++による数値解析の並列化手法 by
C++による数値解析の並列化手法C++による数値解析の並列化手法
C++による数値解析の並列化手法dc1394
3.7K views50 slides
#upcamp '12 Hack-a-thon Result by
#upcamp '12 Hack-a-thon Result#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon ResultKazuhiro Hishinuma
1.1K views38 slides
Math works gdlc2019 by
Math works gdlc2019Math works gdlc2019
Math works gdlc2019Hirokuni Uchida
406 views26 slides
C# 7 Current Status by
C# 7 Current StatusC# 7 Current Status
C# 7 Current StatusTakaaki Suzuki
4.8K views36 slides
4 Colors Othello’s Algorithm by
4 Colors Othello’s Algorithm4 Colors Othello’s Algorithm
4 Colors Othello’s AlgorithmTakaaki Suzuki
922 views24 slides

More Related Content

Similar to GaucheでCGIプログラミング

Cactiでのcliツールについて by
CactiでのcliツールについてCactiでのcliツールについて
CactiでのcliツールについてAkio Shimizu
4.2K views16 slides
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10) by
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)Ryuuta Tsunashima
109 views33 slides
NextGen Server/Client Architecture - gRPC + Unity + C# by
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
78.8K views38 slides
明治大の活動2 by
明治大の活動2明治大の活動2
明治大の活動2Kazuhiro Hishinuma
1K views36 slides
Cython ことはじめ by
Cython ことはじめCython ことはじめ
Cython ことはじめgion_XY
3.4K views37 slides
C base design methodology with s dx and xilinx ml by
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml ssuser3a4b8c
245 views43 slides

Similar to GaucheでCGIプログラミング(20)

Cactiでのcliツールについて by Akio Shimizu
CactiでのcliツールについてCactiでのcliツールについて
Cactiでのcliツールについて
Akio Shimizu4.2K views
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10) by Ryuuta Tsunashima
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima109 views
NextGen Server/Client Architecture - gRPC + Unity + C# by Yoshifumi Kawai
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai78.8K views
Cython ことはじめ by gion_XY
Cython ことはじめCython ことはじめ
Cython ことはじめ
gion_XY3.4K views
C base design methodology with s dx and xilinx ml by ssuser3a4b8c
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
ssuser3a4b8c245 views
drecomにおけるwinning the metrics battle by Mitsuki Kenichi
drecomにおけるwinning the metrics battledrecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battle
Mitsuki Kenichi7.2K views
T69 c++cli ネイティブライブラリラッピング入門 by 伸男 伊藤
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤5.2K views
Java 9で進化する診断ツール by Yasumasa Suenaga
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
Yasumasa Suenaga4.8K views
Python physicalcomputing by Noboru Irieda
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
Noboru Irieda1.5K views
SECDマシン 実装と動きとその他もろもろについて by t-sin
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin813 views
第12回 配信講義 計算科学技術特論B(2022) by RCCSRENKEI
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI257 views
Core Graphicsでつくる自作UIコンポーネント入門 by cocopon
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
cocopon 9.6K views
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部 by Kiyoshi Ogawa
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
Kiyoshi Ogawa5.4K views
組み込みでこそC++を使う10の理由 by kikairoya
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya27K views
20190625 OpenACC 講習会 第1部 by NVIDIA Japan
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
NVIDIA Japan1.6K views
20130315 abc firefox_os by Tomoaki Konno
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
Tomoaki Konno2.2K views

More from Kazuhiro Hishinuma

Properties of a Convex Set in Linear Space by
Properties of a Convex Set in Linear SpaceProperties of a Convex Set in Linear Space
Properties of a Convex Set in Linear SpaceKazuhiro Hishinuma
954 views6 slides
大学生活概論 by
大学生活概論大学生活概論
大学生活概論Kazuhiro Hishinuma
934 views38 slides
床下からCommon Lisp by
床下からCommon Lisp床下からCommon Lisp
床下からCommon LispKazuhiro Hishinuma
1.8K views19 slides
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~ by
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~Kazuhiro Hishinuma
3.8K views35 slides
What Does R7RS Change Programming in Scheme? by
What Does R7RS Change Programming in Scheme?What Does R7RS Change Programming in Scheme?
What Does R7RS Change Programming in Scheme?Kazuhiro Hishinuma
10.3K views33 slides
不動点×不動点×不動点コンビネータ by
不動点×不動点×不動点コンビネータ不動点×不動点×不動点コンビネータ
不動点×不動点×不動点コンビネータKazuhiro Hishinuma
1.2K views27 slides

More from Kazuhiro Hishinuma(14)

すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~ by Kazuhiro Hishinuma
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
Kazuhiro Hishinuma3.8K views
What Does R7RS Change Programming in Scheme? by Kazuhiro Hishinuma
What Does R7RS Change Programming in Scheme?What Does R7RS Change Programming in Scheme?
What Does R7RS Change Programming in Scheme?
Kazuhiro Hishinuma10.3K views
不動点×不動点×不動点コンビネータ by Kazuhiro Hishinuma
不動点×不動点×不動点コンビネータ不動点×不動点×不動点コンビネータ
不動点×不動点×不動点コンビネータ
Kazuhiro Hishinuma1.2K views
最急降下法で制約つき最適化問題を解いてみた by Kazuhiro Hishinuma
最急降下法で制約つき最適化問題を解いてみた最急降下法で制約つき最適化問題を解いてみた
最急降下法で制約つき最適化問題を解いてみた
Kazuhiro Hishinuma3.3K views
How to Implement a CPU Emulator in Scheme by Kazuhiro Hishinuma
How to Implement a CPU Emulator in SchemeHow to Implement a CPU Emulator in Scheme
How to Implement a CPU Emulator in Scheme
Kazuhiro Hishinuma1.2K views

Recently uploaded

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
18 views38 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
335 views13 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
88 views41 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
111 views64 slides
さくらのひやおろし2023 by
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
96 views58 slides
JJUG CCC.pptx by
JJUG CCC.pptxJJUG CCC.pptx
JJUG CCC.pptxKanta Sasaki
6 views14 slides

Recently uploaded(11)

速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4335 views
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之96 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.58 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda355 views

GaucheでCGIプログラミング