Inside MF

3,261 views
3,135 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,261
On SlideShare
0
From Embeds
0
Number of Embeds
50
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Inside MF

  1. 1. Inside ○○ Tokuhiro Matsuno 2007-01-19(Fri) MF × mixi.
  2. 2. ようこそ ○○さん <ul><li>○○というサイトの開発についてモチモチと。 </li></ul><ul><li>マッタリホゲホゲ。 </li></ul><ul><li>フンスカスカスカ。 </li></ul><ul><li>あんなことやこんなこと。 </li></ul>
  3. 3. ○○ とは <ul><li>○○に○○のっけてもらうアレ </li></ul><ul><ul><li>このページは政治的な都合により公開時に削除されます。 </li></ul></ul>
  4. 4. サーバ構成 cron log 13台。 LB App. App. App. App. Web Web Movie Movie Master Slave
  5. 5. 使用ソフトウェア <ul><li>LB(pound) </li></ul><ul><li>apache1.3 + mod_perl(app.) </li></ul><ul><li>apach2.0(web) </li></ul><ul><li>perl 5.8.4 </li></ul><ul><li>pure-ftpd </li></ul><ul><li>MySQL 4.1 </li></ul>
  6. 6. 監視について <ul><li>Watch2 という自社開発のもの。 </li></ul>
  7. 7. Watch2 modules. <ul><li>Officer </li></ul>Agent Agent::HTTP Agent::FTP ... Notify Notify::IRC Notify::Mail
  8. 8. 監視系構成 サーバー サーバー サーバー サーバー サーバー サーバー サーバー サーバー サーバー サーバー IDC 社内 外形監視サーバ SAKURA 外形監視サーバ 内形監視サーバ
  9. 9. なんで Nagios 使わないの? <ul><li>設定おぼえんのめんどい </li></ul><ul><li>今設定されてないから。 </li></ul><ul><li>Watch2 は設定されてるから。 </li></ul><ul><li>うち独自の監視がやたらあるから。 </li></ul><ul><li>監視の check_* はつかいまわしてもよいかも。 </li></ul>
  10. 10. Watch2 捨てたい <ul><li>使ってるモジュールがダサい。 </li></ul><ul><li>設定直書きがダサい。 </li></ul><ul><ul><li>勘弁していただきたい。 </li></ul></ul><ul><li>Testability に乏しい </li></ul><ul><li>設定ファイルがダサい。 </li></ul><ul><ul><li>Perl のコードをモリモリ書いとる </li></ul></ul>
  11. 11. 阿修羅 * <ul><li>Plagger ぽいサーバテスティングフレームワーク </li></ul><ul><li>Nagios の次、にならないかな </li></ul><ul><li>fork してもいいんだけど。 </li></ul>検閲
  12. 12. 監視の明日はどっちだ <ul><li>Nagios 使う </li></ul><ul><li>阿修羅 * 使う </li></ul><ul><li>Watch2 を改良する </li></ul><ul><li>まだわからない。わからない。 </li></ul>
  13. 13. 使ってるライブラリのはなし <ul><li>どんな perl のライブラリ使ってんのよ、みたいな。 </li></ul>
  14. 14. 使用ライブラリ <ul><li>YAML </li></ul><ul><li>Path::Class </li></ul><ul><li>Test::Base </li></ul><ul><li>List::Util </li></ul><ul><li>List::MoreUtils </li></ul><ul><li>URI </li></ul><ul><li>Jcode </li></ul><ul><li>Encode </li></ul><ul><li>XMLRPC::Lite </li></ul><ul><li>URI::Fetch </li></ul><ul><li>UNIVERSAL::require </li></ul><ul><li>Template-Toolkit </li></ul><ul><li>RPC::XML </li></ul><ul><li>Params::Validate </li></ul><ul><li>Net::Google </li></ul><ul><li>JSON::Syck </li></ul><ul><li>GD::Image </li></ul>
  15. 15. 使用ライブラリ (2) <ul><li>HTTP::MobileAgent </li></ul><ul><li>GD::SecurityImage </li></ul><ul><li>GD::Graph </li></ul><ul><li>FindBin </li></ul><ul><li>Cache::Memcached </li></ul><ul><li>DateTime </li></ul><ul><li>Data::Vlistor::Callback </li></ul><ul><li>HTML::TokeParser </li></ul>
  16. 16. DBIC <ul><li>使ってます。 </li></ul><ul><li>CDBI 使ってたサイト -> DBIC に。 </li></ul>
  17. 17. DBIC になってよかったこと <ul><li>JOIN を適切に扱える </li></ul><ul><li>割と複雑な SQL でも扱える </li></ul><ul><ul><li>SQL を書くこともできるけど、 DBIC で書いた方が便利こちゃん </li></ul></ul><ul><li>接続先を変えたりできるようになった </li></ul><ul><ul><li>CDBI がおかしいねん </li></ul></ul><ul><li>必ず呼ぶ子テーブルは prefetch で JOIN できる </li></ul><ul><li>もう CDBI なんて使えない </li></ul>
  18. 18. CDBI to DBIC の移行方法 <ul><li>インスタンスメソッドを移植 </li></ul><ul><ul><li>ほほコピペでいけるw </li></ul></ul><ul><li>トリガーを移植 </li></ul><ul><ul><li>ちょっとがんばる </li></ul></ul><ul><li>クラスメソッドは徐々に移植させていけばおk </li></ul>
  19. 19. CDBI を捨てる <ul><li>CDBI を使用したプログラミングはバッドノウハウの塊。 </li></ul><ul><ul><li>コネクションがクラス変数にはいってる </li></ul></ul><ul><ul><ul><li>わけわからん </li></ul></ul></ul><ul><ul><ul><li>unko </li></ul></ul></ul><ul><ul><ul><li>死ねばいいのに </li></ul></ul></ul><ul><ul><li>イテレータがうんこ </li></ul></ul><ul><ul><ul><li>メモリ喰いまくる </li></ul></ul></ul><ul><ul><ul><li>unko </li></ul></ul></ul><ul><ul><ul><li>死ねばいいのに </li></ul></ul></ul>
  20. 20. 社内の IRC のはなしとか <ul><li>モチモチと。 </li></ul>
  21. 21. IRC と Issue Tracking System の連携 <ul><li>社内 IRC #○○ で会話 </li></ul><ul><ul><li>直接話しかけられたらダマレコノヤロウと言う </li></ul></ul><ul><li>EggPlan という独自の Issue Tracking System </li></ul><ul><ul><li>割と使いやすくなってきてる </li></ul></ul><ul><ul><li>公開したい </li></ul></ul><ul><ul><li>やるぞ!システム </li></ul></ul>
  22. 22. IRC と Issue Tracking System の連携 (2) <ul><li>15:30 <takumi> 松野さんマイページのバナーとってくださいー </li></ul><ul><li>15:31 <tokuhirom> ふむー </li></ul><ul><li>15:31 <tokuhirom> ふむー </li></ul><ul><li>15:31 <tokuhirom> ふむー </li></ul><ul><li>15:31 <tokuhirom> まぁ、とってやらんこともない。 </li></ul><ul><li>15:31 <tokuhirom> やるぞ !! </li></ul><ul><li>15:31 <EggPlan-Bot> </li></ul><ul><ul><li>http://egg-plan.iiiiiiinnnnt/5253 </li></ul></ul>
  23. 23. IRC と Issue Tracking System の連携 (2) <ul><li>過去10行の IRC ログを ITS に簡単登録。 </li></ul><ul><li>IRC で会話することにより、ログが完全にのこる </li></ul><ul><li>言った言わない問題の回避 </li></ul>
  24. 24. OS のこと <ul><li>Debian 3.0 Sarge(stable) つかってる。 </li></ul><ul><li>安定しまくってる。 </li></ul><ul><li>aptitude で管理楽ちん </li></ul><ul><li>どうしても新しいの使いたければ自分でコンパイルしてる </li></ul><ul><li>管理が楽。 </li></ul><ul><li>ちょっとソフトのバージョン古いときがあるけど。 </li></ul><ul><ul><li>新し物好きのは○なには向いてない </li></ul></ul>
  25. 25. モジュール選定基準 – 誰が作ったか × ○ 検閲
  26. 26. モジュール選定基準 コードの質 <ul><li>Perl4 っぽいのは駄目。 </li></ul><ul><li>IRC で「このモジュールどうよ?と話ふってみる」 </li></ul><ul><li>使ってみて動くやつ </li></ul><ul><li>インストールできたやつ </li></ul><ul><li>テストあるやつ </li></ul>
  27. 27. フレームワークについて <ul><li>Sledge + MoFedge </li></ul><ul><li>Sledge </li></ul><ul><ul><li>by livedoor </li></ul></ul><ul><ul><li>miyagawa and sledge authors </li></ul></ul><ul><ul><li>ごく安定。 </li></ul></ul><ul><li>MoFedge </li></ul><ul><ul><li>by mobile factory </li></ul></ul><ul><ul><li>extend Object class. </li></ul></ul>
  28. 28. Sledge <ul><li>MVC Framework. </li></ul><ul><li>M はなにもしてくれないけど。 </li></ul><ul><ul><li>DBIC/CDBI使えや </li></ul></ul><ul><li>古い </li></ul><ul><li>安定 </li></ul><ul><li>かれてる </li></ul>
  29. 29. Sledge のプラグインたち <ul><li>AutoEscapeTT </li></ul><ul><li>ShowImage </li></ul><ul><li>URIWith </li></ul><ul><li>Stash </li></ul><ul><li>Inflate </li></ul><ul><li>DownloadCsvSelected </li></ul><ul><li>JSON </li></ul><ul><li>Captcha </li></ul><ul><li>DebugScreen </li></ul><ul><li>DebugMessage </li></ul>
  30. 30. S::P::DebugScreen <ul><li>開発環境での Error 時 </li></ul><ul><li>スタックトレース表示 </li></ul>
  31. 31. S::P::DebugMessage <ul><li>Session </li></ul><ul><li>stash </li></ul><ul><li>DI </li></ul><ul><li>の情報がわかる。 </li></ul>
  32. 32. S::P:: DownloadCsvSelected <ul><li>HTML => CSV </li></ul><ul><li>convert by XPath + Text::CSV_XS </li></ul>
  33. 33. MoFedge <ul><li>CLI でも Web と同じ感覚でプログラミングしたい </li></ul><ul><ul><li>Command Line Interface </li></ul></ul><ul><li>似てる。 </li></ul><ul><ul><li>CLI のコントローラ </li></ul></ul><ul><ul><li>Web App. のコントローラ </li></ul></ul>
  34. 34. CLI と MoFedge <ul><li>プラグイン共通化の余地 </li></ul><ul><ul><li>$c->log </li></ul></ul><ul><ul><li>$c->model </li></ul></ul><ul><ul><li>$c->config </li></ul></ul><ul><li>おなじでいい。 </li></ul>
  35. 35. MoFedge <ul><li>共通化の余地のあるものを共通化しておく。 </li></ul><ul><li>MoFedge.pm </li></ul><ul><ul><li>$self->config </li></ul></ul><ul><ul><li>$self->base_name </li></ul></ul><ul><li>MoFedge::DateTime </li></ul><ul><ul><li>wrapper for DateTime </li></ul></ul><ul><li>MoFedge::Mail </li></ul><ul><ul><li>wrapper for MIME::Lite </li></ul></ul><ul><li>MoFedge::Plugin::DBIC </li></ul><ul><ul><li>$self->model </li></ul></ul><ul><ul><li>DBIC </li></ul></ul>
  36. 36. テストについて <ul><li>自動化テストはぼちぼち。。。 </li></ul><ul><ul><li>モデルのインスタンスメソッド </li></ul></ul><ul><ul><li>モデルのトリガー </li></ul></ul><ul><ul><li>複雑なロジック </li></ul></ul><ul><li>はテストしてる。 </li></ul><ul><li>あとは手動がメイン。 </li></ul><ul><li>ケータイは実機チェックがやっぱ必要よねー。 </li></ul>
  37. 37. おしまい。 検閲

×