SlideShare a Scribd company logo
Submit Search
Upload
GaucheでCGIプログラミング
Report
Share
Kazuhiro Hishinuma
Undergraduate student
Follow
•
8 likes
•
8,065 views
1
of
28
GaucheでCGIプログラミング
•
8 likes
•
8,065 views
Report
Share
Download Now
Download to read offline
Technology
Lisp Meet Up presented by Shibuya.lisp #5 での発表資料 cf. http://atnd.org/events/39675
Read more
Kazuhiro Hishinuma
Undergraduate student
Follow
Recommended
Implementation of Counters in ScopedBASIC by
Implementation of Counters in ScopedBASIC
Kazuhiro Hishinuma
531 views
•
66 slides
C++による数値解析の並列化手法 by
C++による数値解析の並列化手法
dc1394
3.7K views
•
50 slides
#upcamp '12 Hack-a-thon Result by
#upcamp '12 Hack-a-thon Result
Kazuhiro Hishinuma
1.1K views
•
38 slides
Math works gdlc2019 by
Math works gdlc2019
Hirokuni Uchida
406 views
•
26 slides
C# 7 Current Status by
C# 7 Current Status
Takaaki Suzuki
4.8K views
•
36 slides
4 Colors Othello’s Algorithm by
4 Colors Othello’s Algorithm
Takaaki Suzuki
922 views
•
24 slides
More Related Content
Similar to GaucheでCGIプログラミング
Cactiでのcliツールについて by
Cactiでのcliツールについて
Akio Shimizu
4.2K views
•
16 slides
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10) by
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
109 views
•
33 slides
NextGen Server/Client Architecture - gRPC + Unity + C# by
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai
78.8K views
•
38 slides
明治大の活動2 by
明治大の活動2
Kazuhiro Hishinuma
1K views
•
36 slides
Cython ことはじめ by
Cython ことはじめ
gion_XY
3.4K views
•
37 slides
C base design methodology with s dx and xilinx ml by
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
245 views
•
43 slides
Similar to GaucheでCGIプログラミング
(20)
Cactiでのcliツールについて by Akio Shimizu
Cactiでのcliツールについて
Akio Shimizu
•
4.2K views
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10) by Ryuuta Tsunashima
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
•
109 views
NextGen Server/Client Architecture - gRPC + Unity + C# by Yoshifumi Kawai
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai
•
78.8K views
明治大の活動2 by Kazuhiro Hishinuma
明治大の活動2
Kazuhiro Hishinuma
•
1K views
Cython ことはじめ by gion_XY
Cython ことはじめ
gion_XY
•
3.4K views
C base design methodology with s dx and xilinx ml by ssuser3a4b8c
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
•
245 views
drecomにおけるwinning the metrics battle by Mitsuki Kenichi
drecomにおけるwinning the metrics battle
Mitsuki Kenichi
•
7.2K views
T69 c++cli ネイティブライブラリラッピング入門 by 伸男 伊藤
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
•
5.2K views
Java 9で進化する診断ツール by Yasumasa Suenaga
Java 9で進化する診断ツール
Yasumasa Suenaga
•
4.8K views
Python physicalcomputing by Noboru Irieda
Python physicalcomputing
Noboru Irieda
•
1.5K views
SECDマシン 実装と動きとその他もろもろについて by t-sin
SECDマシン 実装と動きとその他もろもろについて
t-sin
•
813 views
第12回 配信講義 計算科学技術特論B(2022) by RCCSRENKEI
第12回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
•
257 views
Core Graphicsでつくる自作UIコンポーネント入門 by cocopon
Core Graphicsでつくる自作UIコンポーネント入門
cocopon
•
9.6K views
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング by Computational Materials Science Initiative
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
•
4.3K views
PCL by Masafumi Noda
PCL
Masafumi Noda
•
42.5K views
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部 by Kiyoshi Ogawa
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
Kiyoshi Ogawa
•
5.4K views
組み込みでこそC++を使う10の理由 by kikairoya
組み込みでこそC++を使う10の理由
kikairoya
•
27K views
20190625 OpenACC 講習会 第1部 by NVIDIA Japan
20190625 OpenACC 講習会 第1部
NVIDIA Japan
•
1.6K views
qmake入門 by hermit4 Ishida
qmake入門
hermit4 Ishida
•
12.4K views
20130315 abc firefox_os by Tomoaki Konno
20130315 abc firefox_os
Tomoaki Konno
•
2.2K views
More from Kazuhiro Hishinuma
Properties of a Convex Set in Linear Space by
Properties of a Convex Set in Linear Space
Kazuhiro Hishinuma
954 views
•
6 slides
大学生活概論 by
大学生活概論
Kazuhiro Hishinuma
934 views
•
38 slides
床下からCommon Lisp by
床下からCommon Lisp
Kazuhiro Hishinuma
1.8K views
•
19 slides
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~ by
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
Kazuhiro Hishinuma
3.8K views
•
35 slides
What Does R7RS Change Programming in Scheme? by
What Does R7RS Change Programming in Scheme?
Kazuhiro Hishinuma
10.3K views
•
33 slides
不動点×不動点×不動点コンビネータ by
不動点×不動点×不動点コンビネータ
Kazuhiro Hishinuma
1.2K views
•
27 slides
More from Kazuhiro Hishinuma
(14)
Properties of a Convex Set in Linear Space by Kazuhiro Hishinuma
Properties of a Convex Set in Linear Space
Kazuhiro Hishinuma
•
954 views
大学生活概論 by Kazuhiro Hishinuma
大学生活概論
Kazuhiro Hishinuma
•
934 views
床下からCommon Lisp by Kazuhiro Hishinuma
床下からCommon Lisp
Kazuhiro Hishinuma
•
1.8K views
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~ by Kazuhiro Hishinuma
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
Kazuhiro Hishinuma
•
3.8K views
What Does R7RS Change Programming in Scheme? by Kazuhiro Hishinuma
What Does R7RS Change Programming in Scheme?
Kazuhiro Hishinuma
•
10.3K views
不動点×不動点×不動点コンビネータ by Kazuhiro Hishinuma
不動点×不動点×不動点コンビネータ
Kazuhiro Hishinuma
•
1.2K views
最急降下法で制約つき最適化問題を解いてみた by Kazuhiro Hishinuma
最急降下法で制約つき最適化問題を解いてみた
Kazuhiro Hishinuma
•
3.3K views
再帰でつくる、計算の世界 by Kazuhiro Hishinuma
再帰でつくる、計算の世界
Kazuhiro Hishinuma
•
1.8K views
Lisper は競プロを楽しめるか? by Kazuhiro Hishinuma
Lisper は競プロを楽しめるか?
Kazuhiro Hishinuma
•
1.8K views
How to Implement a CPU Emulator in Scheme by Kazuhiro Hishinuma
How to Implement a CPU Emulator in Scheme
Kazuhiro Hishinuma
•
1.2K views
明治大の活動予告 by Kazuhiro Hishinuma
明治大の活動予告
Kazuhiro Hishinuma
•
541 views
The Programming Language Scheme by Kazuhiro Hishinuma
The Programming Language Scheme
Kazuhiro Hishinuma
•
661 views
情報と職業プレゼン予告 by Kazuhiro Hishinuma
情報と職業プレゼン予告
Kazuhiro Hishinuma
•
640 views
Scoped BASIC Presentation1 by Kazuhiro Hishinuma
Scoped BASIC Presentation1
Kazuhiro Hishinuma
•
807 views
Recently uploaded
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
18 views
•
38 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdf
icebreaker4
335 views
•
13 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development site
Atomu Hidaka
88 views
•
41 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
111 views
•
64 slides
さくらのひやおろし2023 by
さくらのひやおろし2023
法林浩之
96 views
•
58 slides
JJUG CCC.pptx by
JJUG CCC.pptx
Kanta Sasaki
6 views
•
14 slides
Recently uploaded
(11)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
18 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdf
icebreaker4
•
335 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 site
Atomu Hidaka
•
88 views
定例会スライド_キャチs 公開用.pdf by Keio Robotics Association
定例会スライド_キャチs 公開用.pdf
Keio Robotics Association
•
111 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023
法林浩之
•
96 views
JJUG CCC.pptx by Kanta Sasaki
JJUG CCC.pptx
Kanta Sasaki
•
6 views
IPsec VPNとSSL-VPNの違い by 富士通クラウドテクノロジーズ株式会社
IPsec VPNとSSL-VPNの違い
富士通クラウドテクノロジーズ株式会社
•
430 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
•
120 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.
•
58 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門
mkoda
•
355 views
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by Hitachi, Ltd. OSS Solution Center.
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Hitachi, Ltd. OSS Solution Center.
•
60 views
GaucheでCGIプログラミング
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.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
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