Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
食べログで動いている自作ライブラリのお話
Search
Tsukasa OISHI
December 10, 2009
Programming
0
300
食べログで動いている自作ライブラリのお話
Tsukasa OISHI
December 10, 2009
Tweet
Share
More Decks by Tsukasa OISHI
See All by Tsukasa OISHI
怖くないメモリ肥大化
tsukasa_oishi
1
89
SLI/SLO をストリーム アラインドチームに導入した話
tsukasa_oishi
0
180
JITをたどるとそこはYARVの中
tsukasa_oishi
0
570
The Cacher in the Rye
tsukasa_oishi
1
5.9k
ISeqで遊ぼう
tsukasa_oishi
0
5.1k
Rubyを30倍速くした話
tsukasa_oishi
0
1.2k
はてブ砲をくらったときのお話
tsukasa_oishi
0
2.1k
奥さんとプログラミングを両立させる方法
tsukasa_oishi
0
77
MiyazakiResistanceを作ってみたよ
tsukasa_oishi
0
970
Other Decks in Programming
See All in Programming
The state patternの実践 個人開発で培ったpractice集
miyanokomiya
0
150
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
660
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
15
8.3k
TDD 実践ミニトーク
contour_gara
0
150
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
2.2k
Introduction to Git & GitHub
latte72
0
120
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
9
2.6k
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
600
AWS Serverless Application Model入門_20250708
smatsuzaki
0
140
【第4回】関東Kaggler会「Kaggleは執筆に役立つ」
mipypf
0
870
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
280
物語を動かす行動"量" #エンジニアニメ
konifar
14
5.5k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Thoughts on Productivity
jonyablonski
69
4.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
780
Facilitating Awesome Meetings
lara
55
6.5k
It's Worth the Effort
3n
187
28k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Transcript
食べログで動 食べログで動 いている自作 いている自作 ライブラリの ライブラリの お話 お話
おおいしつかさ tsukasa_oishi@twitter http://www.kaeruspoon.net/ 食べログ iPhone
自作ライブラリ
既存のものではダメなのか ・必要な機能を持つライブラリがない ・食べログのニーズに微妙に合わない ・開発が止まっている
自作 ・必要な機能を持つライブラリがない →ないなら作ればいい ・食べログのニーズに微妙に合わない →欲している仕様にぴったり ・開発が止まっている →開発者が自分、または同僚
食べログで動いている 自作ライブラリ ActsAsReadonlyable改 ActsAsS tateMachine改 TabelogThread MiyazakiResistance TabelogA sync DrySumpException Disgu iseToBusinessCode WordScoop TcHash EnhancedColumnType ExceptionLogger
食べログで動いている 自作ライブラリ ActsAsReadonlyable改 ActsAsS tateMachine改 TabelogThread MiyazakiResistance TabelogA sync DrySumpException Disgu iseToBusinessCode WordScoop TcHash EnhancedColumnType ExceptionLogger
ActsAsReadonlyable改
ActsAsReadonlyableとは master slave2 slave1 CUD R R AP
障害が起こると master slave2 slave1 CUD R AP
Webサーバーが死んでも大丈夫 APサーバが死んでも大丈夫 DBサーバが死ぬとサービスに影響あり
Webサーバーが死んでも大丈夫 APサーバが死んでも大丈夫 DBサーバが死んでも大丈夫 当然こうしたい
障害が起こると master slave2 slave1 CUD R AP
自動切り離し MySQL::ConnectionError発生 コネクションプール群から該当 サーバのプールを除外 リトライ
運用も楽に メンテナンス等でも 気軽にDBを落とせる ようになった
TabelogAsync
TabelogAsyncとは ▪非同期処理ライブラリ ・backgroundrbが暴走する ・Mongrelを通したくない ・堅牢性はそれほど必要ない ▪仮名のまま ・公開するときはカッコいい名前に
Rails側 TabelogAsync::Thrower.send( :class => :async_log, :args => “good” ) lib/worker
class AsyncLog < TabelogAsync::WorkerBase def do_work(args) logger.info args end end
当初の設計思想 軽くてすぐに終わって同期する必要のない 大量の処理をさばく 重い処理は従来通りbackgroundrbで
いつの間にか 気軽に使えるので重い処理も回すように なった シングルスレッドなので遅延が数時間レベ ルにまで拡大 いくら非同期でも遅れすぎ
Rails Rinda TabelogAsync normal heavy Rinda
WordScoop
WordScoopとは ▪キーワード検索ライブラリ ・はてなダイアリーキーワード ・高速 ・軽量 ・HTML対応 ▪命名 ・奥さん
登録 5 μs 検索 3 ms
高速 ▪キーワード登録 1.399998 s (1語 : 0.000005 s) ▪キーワード検索(1000回) 3.519995
s (1回 : 0.003520 s) 軽量 インデックス構築後 56Mバイト キーワード数 262380語 検索対象文字数 8789字
使い方
キーワード登録 Index = WordScoop.new(['クリスマス', '鍋']) キーワード追加 Index << 'はくさい' キーワード検索
index.search(“クリスマスは鍋にしようか。鍋には はくさいだよね”)
キーワード登録 Index = WordScoop.new(['クリスマス', '鍋']) キーワード追加 Index << 'はくさい' キーワード検索
index.search(“クリスマスは鍋にしようか。鍋には はくさいだよね”) #=> ['クリスマス', '鍋', '鍋', 'はくさい']
HTML変換URLの登録 index.link_url = %Q|<a href="http://cookpad.com/レシピ/%s">%s</a>| HTML文章への自動リンク付与 index.filter_html(“クリスマスは鍋にしようか”)
HTML変換URLの登録 index.link_url = %Q|<a href="http://cookpad.com/レシピ/%s">%s</a>| HTML文章への自動リンク付与 index.filter_html(“クリスマスは鍋にしようか”) #=> %Q|<a href=”http://cookpad.com/レシピ/クリスマス”>
クリスマス</a>は<a href=”http://cookpad.com/レシピ/鍋“> 鍋</a>にしようか|
gem install word_scoop
今後の機能追加予定 ▪検索をさらに高速に ・HTMLの自動リンクアルゴリズム の改良 ・AhoCorasick(エイホ-コラシック)法 の採用 ▪さらに軽量に
・DoubleArrayの採用
まとめ
自作 ・必要な機能を持つライブラリがない →ないなら作ればいい ・食べログのニーズに微妙に合わない →欲している仕様にぴったり ・開発が止まっている →開発者が自分、または同僚
ライブラリが充実すると、開発・運用 ともに楽になる 作る課程も楽しい この世界に貢献ができる ライブラリを作ると みんなが幸せになる
コミットログは英語で
おしまい thanks!