SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante a GaucheでCGIプログラミング

Cactiでのcliツールについて
CactiでのcliツールについてCactiでのcliツールについて
Cactiでのcliツールについて
Akio Shimizu
 
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
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
 
drecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battledrecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battle
Mitsuki Kenichi
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
cocopon
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 

Semelhante a GaucheでCGIプログラミング (20)

Cactiでのcliツールについて
CactiでのcliツールについてCactiでのcliツールについて
Cactiでのcliツールについて
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
明治大の活動2
明治大の活動2明治大の活動2
明治大の活動2
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
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
C base design methodology with s dx and xilinx ml
 
drecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battledrecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battle
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
 
PCL
PCLPCL
PCL
 
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
 
qmake入門
qmake入門qmake入門
qmake入門
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 

Mais de Kazuhiro Hishinuma

Lisper は競プロを楽しめるか?
Lisper は競プロを楽しめるか?Lisper は競プロを楽しめるか?
Lisper は競プロを楽しめるか?
Kazuhiro Hishinuma
 

Mais de Kazuhiro Hishinuma (14)

Properties of a Convex Set in Linear Space
Properties of a Convex Set in Linear SpaceProperties of a Convex Set in Linear Space
Properties of a Convex Set in Linear Space
 
大学生活概論
大学生活概論大学生活概論
大学生活概論
 
床下からCommon Lisp
床下からCommon Lisp床下からCommon Lisp
床下からCommon Lisp
 
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
すべてをRacketに取り込もう! ~Racket FFI と Package システムの使い方~
 
What Does R7RS Change Programming in Scheme?
What Does R7RS Change Programming in Scheme?What Does R7RS Change Programming in Scheme?
What Does R7RS Change Programming in Scheme?
 
不動点×不動点×不動点コンビネータ
不動点×不動点×不動点コンビネータ不動点×不動点×不動点コンビネータ
不動点×不動点×不動点コンビネータ
 
最急降下法で制約つき最適化問題を解いてみた
最急降下法で制約つき最適化問題を解いてみた最急降下法で制約つき最適化問題を解いてみた
最急降下法で制約つき最適化問題を解いてみた
 
再帰でつくる、計算の世界
再帰でつくる、計算の世界再帰でつくる、計算の世界
再帰でつくる、計算の世界
 
Lisper は競プロを楽しめるか?
Lisper は競プロを楽しめるか?Lisper は競プロを楽しめるか?
Lisper は競プロを楽しめるか?
 
How to Implement a CPU Emulator in Scheme
How to Implement a CPU Emulator in SchemeHow to Implement a CPU Emulator in Scheme
How to Implement a CPU Emulator in Scheme
 
明治大の活動予告
明治大の活動予告明治大の活動予告
明治大の活動予告
 
The Programming Language Scheme
The Programming Language SchemeThe Programming Language Scheme
The Programming Language Scheme
 
情報と職業プレゼン予告
情報と職業プレゼン予告情報と職業プレゼン予告
情報と職業プレゼン予告
 
Scoped BASIC Presentation1
Scoped BASIC Presentation1Scoped BASIC Presentation1
Scoped BASIC Presentation1
 

Último

Último (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

GaucheでCGIプログラミング