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
310
食べログで動いている自作ライブラリのお話
Tsukasa OISHI
December 10, 2009
Tweet
Share
More Decks by Tsukasa OISHI
See All by Tsukasa OISHI
怖くないメモリ肥大化
tsukasa_oishi
1
95
SLI/SLO をストリーム アラインドチームに導入した話
tsukasa_oishi
0
190
JITをたどるとそこはYARVの中
tsukasa_oishi
0
570
The Cacher in the Rye
tsukasa_oishi
1
5.9k
ISeqで遊ぼう
tsukasa_oishi
0
5.2k
Rubyを30倍速くした話
tsukasa_oishi
0
1.2k
はてブ砲をくらったときのお話
tsukasa_oishi
0
2.1k
奥さんとプログラミングを両立させる方法
tsukasa_oishi
0
82
MiyazakiResistanceを作ってみたよ
tsukasa_oishi
0
990
Other Decks in Programming
See All in Programming
Researchlyの開発で参考にしたデザイン
adsholoko
0
110
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
360
contribution to astral-sh/uv
shunsock
0
580
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
320
AI Agent 時代的開發者生存指南
eddie
4
2.3k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
670
AIのバカさ加減に怒る前にやっておくこと
blueeventhorizon
0
140
Introducing RemoteCompose: break your UI out of the app sandbox.
camaelon
2
380
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.4k
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
250
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
1.4k
KoogではじめるAIエージェント開発
hiroaki404
1
260
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Site-Speed That Sticks
csswizardry
13
940
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
How STYLIGHT went responsive
nonsquared
100
5.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Practical Orchestrator
shlominoach
190
11k
Producing Creativity
orderedlist
PRO
348
40k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
GraphQLとの向き合い方2022年版
quramy
49
14k
A Tale of Four Properties
chriscoyier
161
23k
Code Review Best Practice
trishagee
72
19k
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!