際際滷

際際滷Share a Scribd company logo
海いの
  @emasaka
徭失B初
¢   @emasaka
¢   云兆左鰌才
¢   40旗 フリ`タ`
¢   ブログ
    仝云をiむ々http://emasaka.blog65.fc2.com/
¢   ja.wikipedia.orgで仝Locator/Identifier Separation
    Protocol々のペ`ジを羨てた繁
¢   旗燕恬Bash on Rails
岳敬庄岳岳艶姻でオヤジギャグを送す繁




           ☆それはシュレ`ディンガ`です
Twitter
海いの
togetterとか
¢   t.coだらけになっちゃう
¢   t.coを婢_するとbit.lyだったり
喘婢_のWeb API
Untiny
¢   謹粁婢蝕してくれるけど雨檎晦は1つのみ
Long URL Please.com
¢   }方のURLを1リクエストで婢_してくれるけ
    ど1粁のみ
なければ恬る
nagaino

¢   }方URLを謹粁婢_するWeb APIサ`ビス
聞い圭

%?curl?'http://nagaino.herokuapp.com/
api/v0/expand?format=json_simple&q=http
%3A%2F%2Ft.co%2F2XTGcnPZ&q=http%3A%2F
%2Ft.co%2FS5NCrzZD'
{"status_code":200,"data":{"expand":
{"http://t.co/S5NCrzZD":"http://shibu
ya.lisp?users.org/2011/10/18/sltt7?
lter/","http://t.co/2XTGcnPZ":"http:/
/atnd.org/events/20328"}}}
蒙來?勣周
¢   歌孚邑^來
    ¢   揖じ秘薦からは械に揖じ竃薦
¢   K佩來
    ¢   }方のURLを揖rに婢_
¢   PaaSで嘛
    ¢   マルチコア┐燭屬鵤のサ`バ`をo創で、徭蛍で
        砿尖せずに
Clojure
Heroku宴旋
¢   遺鉛看逮顎姻艶鬉靴討覬焚慌抗
Herokuを聞うのに喘吭するもの
¢   Leiningen
    ¢   Leiningenは、Rails 3でいうと、railsコマンドと
        bundlerとrakeとrvmを怎したようなもの
¢   git
¢   Herokuのアカウントとツ`ル
あとは
¢   ringアプリを恬る
    ¢   ringは、RackとかWSGIとかPlackとかClackとか
        みたいな
    ¢   ringじゃなくてもいいかもしれないけど隆{
    ¢   ちなみに、ringの恬宀のMark McGranaghan
        mmcgranaはHerokuの繁
堰艶姻看一顎の聞い圭
プロジェクトを恬る

%?lein?new?nagaino
%?cd?nagaino
gitのロ`カルリポジトリを恬る

%?git?init
%?git?add?.
%?git?commit??m?'initial?commit'
アプリをく

(defroutes?main?routes
??(GET?"/"?[]?"<h1>Hello?World?Wide?
Web!</h1>")
??(route/resources?"/")
??(route/not?found?"Page?not?found"))
Procfileを1佩く

%?>?Procfile?<<<'web:?lein?run'
%?git?add?Procfile
%?git?commit??m?'Procfile'
Heroku貧にアプリを仟ラ撹する

%?heroku?create???stack?cedar?nagaino
git pushでデプロイ

%?git?push?heroku?master
これだけで
Webアプリが
   強く
ちなみに、^lein ̄が^ライン ̄で^lain ̄が^レイン ̄
なのは、なんとなく{誼いかない櫃するけど
┘踪`マ忖議に、まあどうでもいいですね
g廾
やることのイメ`ジ

("http://t.co/AAA"
?"http://t.co/BBB"
?"http://t.co/CCC"?)
       ◎
("http://bit.ly/XXX"
?"http://tinyurl.com/YYY"
?"http://goo.gl/ZZZ"?)
       ◎
("http://example.com/000"
?"http://example.jp/111"
?"http://example.org/222"?)
                      ☆URLはイメ`ジです。gHの婢_Y惚
                      には鬉靴泙擦
畠悶の送れ




        ☆figures by blockdiag
(defn?api?expand?[params]
??(?>>?params
???????query?>longurl
???????(transform?result?(params?"format"))
???????(res?(:format?params))?))

(defroutes?route
??(GET?"/api/v0/expand"?[:as?params]
???????(api?expand?(:query?params?params))?)
??(POST?"/api/v0/expandText"?{params?:params}
????????(api?expand?text?params)?)
??(route/files?"/"?{:root?"./resources/public"})?)
I尖云悶
(defn?expand?urls?[sq]
??(?>>?sq
???????distinct
???????(map?#(?>?%
?????????????????string?>nagaino?url
?????????????????update?done?))
???????(expand?nagaino?urls?{})
???????update?cache
???????(map?nagaino?url?>map)?))
婢蝕云悶
婢蝕云悶
(defn?expand?nagaino?urls?1?[table?n?urls]
??(let?[n?urls?2?(expand?from?cache?n?urls)
   table2?(update?table?table?n?urls?2)?]
????[table2
?????(map?#(?>>?%
????????????????(expand?from?table?table2)
????????????????update?status?)
??????????n?urls?2?)]?))

(defn?expand?nagaino?urls?[table?n?urls]
??(let?[[table2?r]?(expand?nagaino?urls?1?table?n?urls)]
????(if?(every??:done??r)?r?(recur?table2?r))?))
HTTPリクエストして
Qテ`ブルを恬る
(defn?update?table?[table?sq]
??(?>>?sq
???????(filter?#(?>?%?:done??not))
???????(map?#(?>?%?:long_url_path?first))
???????distinct
???????(group?by?#(if?(re?find?bitlyurl?regex?%)
??????????????????????:bitlyurls?:urls?))
???????(#(map?deref
??????????????(concat
???????????????(urls?>expm?seq?(:urls?%))
???????????????(bitly?urls?>expm?seq?(:bitlyurls?%))?)))
???????flatten
???????(reduce?(fn?[r?v]?(conj?r?{(:short_url?v)?v}))
???????????????table?)))
キャッシュ
¢   い栽わせは、fetchの:$inで、1フェ`ズ1クエリで
    ¢   SQLのSELECTのIN犁
¢   隠贋は、mass-insert!で、1リクエスト1クエリで
    ¢   SQLのbulk insert犁
¢   謹粁URL婢_のサブセットも隠贋
    ¢   A★B★Cなら、A★B★CとB★Cを隠贋
TODO
¢   APIのドキュメントをく
¢   コ`ドをGitHubに貧げる
    ¢   ブログ並のコ`ドスニペットをコピペして個夛しているw侭があるので、そのQ
        いをどうするか´

¢   Clojure 1.3晒
    ¢   clojure.contribが1.3に鬉靴討覆い里如

¢   HTTPクライアントライブラリを筝
    ¢   恬宀がもうやめるとかなんとかReadmeに´
    ¢   掲揖豚リクエストとか聞ったほうがいいのかな´

¢   械狼に仇龍に
    ¢   URLが100とか栖たときどうしようか´

More Related Content

海いの