http://sourceforge.jp/magazine/08/11/21/0128218
これは面白い!
#!/usr/bin/ccod
#pragma CCOD:script no
int main( int argc, char** argv )
{
printf("hi there\n");
return 0;
}
なんてファイルを main.c とかでつくって
$ chmod a+x main.c
$ ./main.c
hi there
おおーどれぐらい動くんだろう?初心者が勉強しやすくなる?
Chalow で箇条書ができる plugin でもないかと調べていたら patch を発見。
http://www5d.biglobe.ne.jp/~y0ka/2004-04-24-1.html
http://www5d.biglobe.ne.jp/~y0ka/2005-08-16-1.html
便利便利 :-)
524万人が利用する食のインフラ「クックパッド」のものづくり(橋本さん)を聞いて来ました。以下メモ。書いてみると、盛り沢山でしたねぇ。もちろん誤っている箇所もあるかと思うので、参考までに。
■規模
- 月間ユーザ 524万人 Railsサイト中世界 8位
- 月間PV 2.8億PV Railsサイト中世界 3位
- レシピ 45件
- 16時から18時にピーク
- 秋からバレンタインにかけてトラフィック増
- 1.6倍/year の成長
■ サーバ構成
- apache x 8台
- app(mongle) x 44台
- DB slave x 13台
- master server x ?台
- log_master server x ?台
- log_slave server x ?台
mongle/mongle_clusterを利用
■ 中身
- capistrano (デプロイ用)
- god(mongle の再起動(メモリを食い潰すので時々再起動)
- nagios(監視)
- munin(サーバリソース監視)
- FiveRunsManager(Rails用モニタリングソフト)
■ パフォーマンス
Railsは重いと言われるが、Railsのパフォーマンスより I/O が重いことが多い
- キャッシュ
- mongle を通すと、それだけで10〜12sec かかるので、ページキャッシュをメインに。
app | 2G |
app | 2G |
slave DB | 8GB |
検索DB | 4GB |
という仮想マシンを
に統合し、10GBのデータがすべてOSのキャッシュに載るようにした(I/O負荷の低減)
アクセス数よりデータ量がパフォーマンスを左右する。
■ 開発基盤
- プログラマは全員Mac
- エディタ
- SCM
- コードレビューシステム
■ DBのレプリケーション
- マスター・レプリケーションの切替え
- act_as_readonly_table を利用
- データ更新後の select は master からするように改造
■ 全文検索
- Tritttonを使用(未来検索ブラジル)
- テーブルをjoin できる
- 2インデックス使える
- スレーブで、インデックスを張ったテーブルをそのまま利用可能
■ 専用URL
一部のユーザは自分用のURLを持つ
cookpad.com/ken
どうする?
=> route.rb で全てのコントローラを検索。一致しなかった場合は、専用コントローラに渡す。
■ 全ページのプレビュー機能
- 新しい広告がきちんと表示されるか
- 時限公開などがうまく動作するか
すべてのページで任意の日付でプレビューできる(Time.now を上書き)
?current_time=2008-11-01
もちろんアクセス制限あり。他所からのアクセスは無効
■ クックパッドのもの作り
- つくるものを決める
- 計画する
- 設計する
- 開発する
- 質を高める
■ つくるものを決める
- Bestなことに集中する。
- 無限のリソースはない
- 逆にいえば、Betterなこと、やった方がいいことはやらない
- ユーザの要求に基づいたゴール設定
■ Bestなことに集中する
3つの輪が重なるところに注力
■ EOGS
EOGS (Emotion Oriented Goal Setting)
- そのサービスに係わるキャストを立てる
- キャスト毎の疑いのない欲求を理解する
※)専用シートで、目標がぶれないようにここで開発のコンセンサンスを取る
キャスト毎に
- 疑いようのない欲求
- 何をすれば手に入るか
- How to do?
- 成功のイメージ
- 指針
を考える
■ 計画する
- スケジュール三分割の法則
- クックパッドものづくり 3原則
■ スケジュール三分割の法則
サービスまでにやること
にそれぞれ同じだけの時間を取る。もし 3週間後にリリースなら、それぞれに 1週間を使う。不要な機能は削り、Bestに集中
■ 無言実行 - ものづくり 3原則 -
公開前にサービスについての説明をしない
- サービスを言葉で説明することはできない
- ユーザに不安を抱かせない
告知のメリットも低い
■ 無言語化- ものづくり 3原則 -
- 機能を言葉で説明しない
- 一瞬で理解できるインタフェースでないと使われない
- 最大2秒
- ヘルプやFAQはユーザへの負担
- 無料だから大丈夫では巻ける
- 無料だというのだけでは使われない
- お金を払ってまで使いたいサービスが無料だと使われる
cookpad もかつては有料だった。
■ 設計する
サイト設計の順序
詳細から設計すると、機能に囚われる。ユーザに届けるべきは、機能ではなく価値
※ アジャイル宣言の一節
包括的なドキュメントよりも動くソフトウェア
ドキュメントが無い方がよいと言っているわけではない。必要最低限のものは必要
■ 最低限必要な設計
- 遷移
- ページ詳細
- 手書きでOK。A4を横に使う。図は縦長。両再度を空白にしておくと書き込めて良い
- DB
- サイトマップ(規模が大きな場合)
■ 開発する
開発の 3原則
- Rail に乗る
- リファクタリングをしつづけられる状態を維持する
- DRYを意識する
■ Rail に乗る
- 明日の自分は他人、コードを読みにくくしない
- 改造してしまうと、Rails のバージョンアップへの対応が困難になる
Rail を外れそうになったら、他の機能でなんとかならないか検討
=> Rails自体をHACKしない!
アジャイルの最も大切な概念
- テスト駆動
現在クックパッドはここが課題。2006年リニューアルは、2年で拡張不可能に......テスト駆動の徹底!
■ DRY
- YANGNI(You Are Not Going Need It) にも注意
■ 質を高める
■ ユーザテスト
- バグの発見よりも大切なことがある
- ユーザに狙った価値を提供できているか?
- ユーザにゴールを伝えて行動してもらう
- ユーザに何を考えているかを話ながら操作してもらう
■ 顔マーケティング
「かうき」の法則
- ウリを伝える「顔」
- ライバルに勝てる「ウリ」
- ウリが実感できる「動き」
■ エンジニア紹介
須藤さん、高田さん、山田さん、森田さんなどなど
■ Q&A
Q. 45万件といいながら、どれぐらいのレシピが見られているのか
A. 45万レシピのほとんどが、1週間以内に閲覧されている
Q. Rails を選んだ動機は?
A. 元はColdFusion. PHP も使ってみた。Rails が出て来た時アジャイル開発ができる!と思った。しかし100万人が捌けるか?と思い、一旦あきらめた。しかしRailsが流行。ぼやぼやしてられない!で Railsへ。
追記: 2008/11/27
肝心ななこと忘れてました。エンジニア絶賛募集中だそうです。
Ruby on Railsセミナーのお知らせ