Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
cryks
4,294 views
第8回KPF発表資料
業務でScheme使ったよ!使えるよ!というステマスライドです。
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 26
2
/ 26
3
/ 26
4
/ 26
5
/ 26
6
/ 26
7
/ 26
8
/ 26
9
/ 26
10
/ 26
11
/ 26
12
/ 26
13
/ 26
14
/ 26
15
/ 26
16
/ 26
17
/ 26
18
/ 26
19
/ 26
20
/ 26
21
/ 26
22
/ 26
23
/ 26
24
/ 26
25
/ 26
26
/ 26
More Related Content
PDF
Openresty
by
ogawatti
PDF
静的サイトどこにする?
by
ogawatti
PDF
Nuxt.js + microCMS + netlify
by
ogawatti
PDF
Migr8.rb チュートリアル
by
kwatch
PDF
20190518 27th-chugoku db-lt-pg12
by
Toshi Harada
PDF
丸の内MongoDB勉強会#20LT 2.8のストレージエンジン動かしてみました
by
Ryuji Tamagawa
PDF
Slub alloc and free
by
Masami Ichikawa
PDF
Bgworkerで簡易クラスタ管理
by
Masahiko Sawada
Openresty
by
ogawatti
静的サイトどこにする?
by
ogawatti
Nuxt.js + microCMS + netlify
by
ogawatti
Migr8.rb チュートリアル
by
kwatch
20190518 27th-chugoku db-lt-pg12
by
Toshi Harada
丸の内MongoDB勉強会#20LT 2.8のストレージエンジン動かしてみました
by
Ryuji Tamagawa
Slub alloc and free
by
Masami Ichikawa
Bgworkerで簡易クラスタ管理
by
Masahiko Sawada
What's hot
PPTX
CategoLJについて
by
Toshiaki Maki
PDF
JVM! JVM! JVM!
by
Masaaki HIROSE
PDF
Yapcasia2012 ltthon
by
turugina
PDF
Nginx
by
Soichi Takamura
PDF
Slub data structure
by
Masami Ichikawa
PDF
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
by
次朗 永島
KEY
Mysql casial01
by
matsuo kenji
PDF
Pg14_sql_standard_function_body
by
kasaharatt
PDF
エコなWebサーバー
by
emasaka
PDF
Node予備校 vol.1 名古屋
by
Mori Shingo
PDF
CoreData 非同期データ処理
by
次朗 永島
PPT
Shibuya Pm Tt08 Advanced Mogilefs
by
guest172cfb
PDF
OSSから学ぶSwift実践テクニック
by
庸介 高橋
PDF
Tide - SmalltalkでSPA
by
Masashi Umezawa
PDF
明日から使える Java SE 7
by
Yuichi Sakuraba
PDF
PostgreSQLの関数属性を知ろう
by
kasaharatt
PDF
Ruby Postgres 2009
by
Akio Ishida
PDF
当社のawsへの取組
by
Mercari Inc.
PDF
Kernel fcache-bug
by
MITSUNARI Shigeo
PDF
Bp study39 nodejs
by
Yohei Sasaki
CategoLJについて
by
Toshiaki Maki
JVM! JVM! JVM!
by
Masaaki HIROSE
Yapcasia2012 ltthon
by
turugina
Nginx
by
Soichi Takamura
Slub data structure
by
Masami Ichikawa
RestKitの紹介 - Webサービスのクライアント実装補助フレームワーク -
by
次朗 永島
Mysql casial01
by
matsuo kenji
Pg14_sql_standard_function_body
by
kasaharatt
エコなWebサーバー
by
emasaka
Node予備校 vol.1 名古屋
by
Mori Shingo
CoreData 非同期データ処理
by
次朗 永島
Shibuya Pm Tt08 Advanced Mogilefs
by
guest172cfb
OSSから学ぶSwift実践テクニック
by
庸介 高橋
Tide - SmalltalkでSPA
by
Masashi Umezawa
明日から使える Java SE 7
by
Yuichi Sakuraba
PostgreSQLの関数属性を知ろう
by
kasaharatt
Ruby Postgres 2009
by
Akio Ishida
当社のawsへの取組
by
Mercari Inc.
Kernel fcache-bug
by
MITSUNARI Shigeo
Bp study39 nodejs
by
Yohei Sasaki
Similar to 第8回KPF発表資料
PDF
Lisp Tutorial for Pythonista : Day 3
by
Ransui Iso
PDF
Using Ext Direct with SenchaTouch2
by
久司 中村
PDF
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
by
azuma satoshi
PDF
RとWeb API
by
Yohei Sato
PDF
OpenStack + Common Lisp
by
irix_jp
PDF
Lisp Tutorial for Pythonista : Day 4
by
Ransui Iso
PDF
Postgresql advent calender 2014 using jsonb by ecpg
by
Toshi Harada
KEY
Cmsインサイド 120801 公開版
by
株式会社RYUS
PDF
Lisp Tutorial for Pythonista Day 6
by
Ransui Iso
PDF
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
by
karupanerura
PDF
Groovyで楽にSQLを実行してみよう
by
Akira Shimosako
PDF
Shibuya.lisp #28: 仮題: R について
by
tnoda
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
by
emasaka
PDF
Offline Hoogleで何処でもはすはす
by
Kiwamu Okabe
PDF
Kyotopm発表資料20130330
by
Kiyo Tsunezumi
PDF
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
by
博文 斉藤
PDF
PerlとSQLのいろいろ
by
Takuya Tsuchida
PDF
PHP & Queue
by
sasezaki
PDF
Riak Source Code Reading #2: Erlang Client
by
nobu_k
PDF
OSC2012 Tokyo Spring, USP lab. presentation
by
Ryuichi Ueda
Lisp Tutorial for Pythonista : Day 3
by
Ransui Iso
Using Ext Direct with SenchaTouch2
by
久司 中村
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
by
azuma satoshi
RとWeb API
by
Yohei Sato
OpenStack + Common Lisp
by
irix_jp
Lisp Tutorial for Pythonista : Day 4
by
Ransui Iso
Postgresql advent calender 2014 using jsonb by ecpg
by
Toshi Harada
Cmsインサイド 120801 公開版
by
株式会社RYUS
Lisp Tutorial for Pythonista Day 6
by
Ransui Iso
Perl RDBMS Programming(DBI/DBIx::Sunnyのはなし)
by
karupanerura
Groovyで楽にSQLを実行してみよう
by
Akira Shimosako
Shibuya.lisp #28: 仮題: R について
by
tnoda
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
by
emasaka
Offline Hoogleで何処でもはすはす
by
Kiwamu Okabe
Kyotopm発表資料20130330
by
Kiyo Tsunezumi
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
by
博文 斉藤
PerlとSQLのいろいろ
by
Takuya Tsuchida
PHP & Queue
by
sasezaki
Riak Source Code Reading #2: Erlang Client
by
nobu_k
OSC2012 Tokyo Spring, USP lab. presentation
by
Ryuichi Ueda
第8回KPF発表資料
1.
GaucheでS式でリモートでク エリでevalでAjaxで KPF #x08 @cryks
2.
注釈 (2013/08) ● これは2013年2月に行われた第8回KPF (Kumamoto
Programming Freaks)の発表資料 です ● 何故今更アップロードしたのか? → すっかり忘れていました ● デスマ真っ最中に急遽仕上げた資料なので、結 構いい加減です ● この資料に登場したライブラリをリファインして Github等で公開すると当時発言した気がします が、手を付けていません
3.
Internet Local Network ターゲット RS-232C Global HTTP Server Private
Configuration HTTP Server Database IP over RS232 Local PC Browser
4.
作りました (まだ作ってます) ● dbexecutor ●
ajax-router ● reploxy
5.
dbexecutor ● dbiのラッパー ● dbiって汎用化されてるけど使いづらい (and-let*
([query (dbi-prepare conn "SELECT * FROM users")] [result (dbi-execute query)] [accessor (relation-accessor result)]) (begin0 (map (^[row] `([id . ,(x->integer (accessor row "id"))] [name . ,(accessor row "name")])) result) (dbi-close result))) => (((id . 1) (name . "Alice")) ((id . 2) (name . "Bob")) ...)
6.
こんなふうに書けます (dbe-select ([id ::
int] [name]) "users") => (((id . 1) (name . "Alice")) ((id . 2) (name . "Bob")) ...) ジェネレータ版(遅延評価)な dbe-gselect もあります
7.
JSON化も簡単 (construct-json (list->vector (dbe-select ...))) => [{"id":1,"name":"Alice"},...] ●
ちなみに Gauche 0.9.3 以降ならこう書ける ($ construct-json $ list->vector $ dbe-select ...)
8.
(dbe-select ([hoge.id as
id :: int] [fuga.fuga_id as fid :: int] [fuga.key as key]) "hoge" :joins `([LEFT "fuga" USING "fuga_id"]) :where `(= fuga.key ,key)) WHEREとかJOINは? S式クエリ
9.
こんなクエリが発行できます `(and (= id
10) (= name "hoge")) => ("id" = 10) AND ("name" = 'hoge') `(= name "fu'ga") => "name" = 'fu''ga' `(= user_key user_name "foo") => "user_key" = "user_name" AND "user_name" = 'foo' `(not (= id 15)) => "id" <> 15 (let1 name "a'b'c" (construct-where `(= name ,name))) => "name" = 'a''b''c'
10.
いらんかったんや! プレースホルダなんて ※ 同じSQLをパラメータのみ変更して何度も実行する場合を除く
11.
ajax-router ● CGI呼び出しを自動化 ● HTTPサーバとして起動 nginxやApacheからリバースプロキシ経由で使う ●
指定したディレクトリにファイルを置けば、それがURLにな る hoge.scm => http://localhost:8808/hoge ● 読んだソースはキャッシュされるが、ソースを更新すると自 動的に読み込み直す ● 1ソースにつき1つの無名環境 ● shiro さんの makiki の上に構築 ● コア部分は router モジュールとして分離 ● makiki + router ≒ ajax-router
12.
CGI 呼び出し (define (cgimain) #("JSONable"
(("key" . "value")))) => ["JSONable",{"key":"value"}] http://.../hoge?a=1&b=2 (define (cgimain :key a b) `#(,a ,b)) => ["1", "2"]
13.
クロージャ (define (cgimain :key
name) `#(,(register-cont (lambda (:key name2) `#(,name ,name2))))) http://.../hoge?name=hogehoge => ["...hash..."] http://.../cont/...hash...?name2=fugafuga => ["hogehoge","fugafuga"]
14.
もういちど dbexecutor ● dbexecutor
には with-database というDB接続 マクロがある (with-database <dsn> (dbe-select ...)) ● dbexecutor のサンプルに connection が一切 なかったのはそのため ● with-database は、本当にDB接続が必要に なったときに初めてDBに接続しにいく ● with-database ブロック内で dbe-* 系が呼ばれ なければDB接続は発生しない ● ブロックを抜ければDBは切断
15.
ajax-router + dbexecutor ●
ajax-router は with-database ブロック内で cgimain を呼んでいる ● cgimain 内で with-database する必要はない ● cgimain でデータベースを使用しなかった場合 に、不要なDBコネクションが発生することもない (use dbexecutor) (define (cgimain) (list->vector (dbe-select ([id :: int] [name]) "users"))) => [{"id":1,"name":"Alice"},{"id":2,"name":"Bob"},...]
16.
reploxy ● REPL +
Proxy = reploxy ● server と client のセットモジュール
17.
reploxy server ● REPL
サーバ ● read して eval して print (write) してるだけ ● 文字通りのREPL ● eval中に例外が上がった場合も、clientにその 例外を伝えられる ● 多値もばっちり返すことが出来る ● write したときに #<...> になるようなオブジェクト はさすがに返せない
18.
reploxy client ● remote-eval
手続き (remote-eval "localhost" 12345 `(begin ...)) OR (with-remote-host "localhost" 12345 (remote-eval `(begin ...))) ● 引数のS式をリモートで評価して結果を得る ● リモートで例外が上がった場合、ローカル側に 同じ例外が上がる (remote-eval `(error "message")) => ERROR: message ● 多値も受け取れる ($ values->list $ remote-eval `(values 1 2 3)) => (1 2 3) ● remote-eval のたびにコネクション発生
19.
import-remote-variables ● reploxy server
が動作している環境の、エクス ポートされている束縛をローカルに持ってくる乱 暴な手続き(いまのところ手続きだけ) ;; server (export get-hello-world my+) (define (get-hello-world) "Hello reploxy world!") (define (my+ a b) (+ a b 1)) (reploxy-run-server ...) ;; client (import-remote-variables) => get-hello-world, my+ が生えてくる! (print (get-hello-world)) (my+ 1 2) => 4
20.
reploxy + dbexecutor ●
reploxy server はコネクションが張られるときに callback を指定できる ● ということは (reploxy-run-server 12345 (^[] (with-database *dbi-connect-settings* (reploxy-repl (current-module))))) (remote-eval `(dbe-select ([id :: int] [name]) "users")) => (((id . 1) (name . "Alice")) ((id . 2) (name . "Bob")) ...)
21.
ajax-router + reploxy
+ dbexecutor ● ajax-router は cgimain を呼び出すときに with-remote-host も行っている (use reploxy) (define (cgimain :key id) (list->vector (remote-eval `(dbe-select ([id :: int] [name]) "users" :where `(= id ,,id))))) http://.../hoge?id=2 => [{"id":2,"name":"Bob"}]
22.
import-remote-variables (2) ;; server (define
(update-db) ...) (export update-db) ;; client (use reploxy) (import-remote-variables) (define (cgimain) (update-db))
23.
組み合わせることで ● ajax-router で
JavaScript から ajax リクエスト を受け付け ● reploxy でシリアルの向こうにあるマシンに問い 合わせ ● dbexecutor でフレキシブルなDBアクセス ● 共通化した部分は import-remote-variables で呼び出し
24.
Internet Local Network ターゲット RS-232C Global HTTP Server Private
Configuration HTTP Server Database IP over RS232 Local PC Browser
25.
Internet Local Network ターゲット RS-232C Global HTTP Server Private
Configuration HTTP Server Database IP over RS232 Local PC Browser ajax-router ajax-router reploxy-server reploxy over RS232 reploxy(local) dbexecutor
26.
おわり
Download