The last decade of RWiki and lazy me.

90
RWikiと 怠惰な私の十年間 The last decade of RWiki and lazy me. [email protected]

description

 

Transcript of The last decade of RWiki and lazy me.

Page 1: The last decade of RWiki and lazy me.

RWikiと怠惰な私の十年間The last decade of RWiki and lazy [email protected]

Page 2: The last decade of RWiki and lazy me.

Castoro

おもしろかった!

Page 3: The last decade of RWiki and lazy me.

今日の話

私について

RWikiのこと

某サイトのRWikiのこと

Page 4: The last decade of RWiki and lazy me.

私について

toRuby 

サラリーマンと自称アーティスト

Page 5: The last decade of RWiki and lazy me.

toRuby

toRuby = とちぎRuby ≠ 鳥取Ruby

西那須野公民館を中心に活動

とちぎRubyの勉強会

とちぎRuby会議01,02

とちぎテストの会議(連番なし)

Page 6: The last decade of RWiki and lazy me.

メモのご用意を

とちぎRubyの勉強会

毎月第一水曜日 18:30から

つまり次回は9/1です

Page 7: The last decade of RWiki and lazy me.

Google間違ってるので注意

©2010 Google - 地図データ ©2010 ZENRIN -

栃木県那須塩原市 付近の 西那須野公民館

A. 那須塩原市役所 西那須野公民館栃木県那須塩原市太夫塚1丁目194!1 "

0287-36-1143 "

©2010 Google - 地図データ ©2010 ZENRIN -

◀正解はココ

Page 8: The last decade of RWiki and lazy me.

サラリーマン

ちゃんとした会社員

製品のためのプログラミング

eXtreme Programmingだったもの

プロセス・品質系イベントで講演

Page 9: The last decade of RWiki and lazy me.

会社員系イベントJaSST'04 - 忍者式テスト

XP祭り04 - XPと計画ゲーム

デブサミ05 - 複数バージョンを同時に扱う

JaSST'06 - テストレート

ソフトウェア品質シンポジウム06 - 自分たちのもの宣言

JaSST'07 - 規模

デブサミ'08 - TPSとのパネル

オブジェクト倶楽部夏イベント2010 - ロールプレイング ◀先月話した

Page 10: The last decade of RWiki and lazy me.

会社員系の講演

いつもいいことばっかり言ってる

「理想の開発者」とかインチキくさい

Page 11: The last decade of RWiki and lazy me.

重要

そういう話を日本語版に寄稿しました

CC-byなのでいつか公開するけど、まずは買って読んでね

宣伝しなくても売れそう

Page 12: The last decade of RWiki and lazy me.

自称アーティスト

わかって欲しい人にウケるため、自分のためのプログラミング

オープンソースへの愛や正義には興味がない

Page 13: The last decade of RWiki and lazy me.

Rubyと私

20世紀の終わり頃から

書籍、雑誌

講演

ERB, dRuby, Rinda, RWiki, Tofu

Page 14: The last decade of RWiki and lazy me.

重要

2005年夏

まだ初刷買えます!

初刷5周年!!

dRubyによる

関 将俊 著

分散・Webプログラミング

Page 15: The last decade of RWiki and lazy me.

RubyKaigi x 5

2006 dRuby, Again. 

2007 Answering dRuby and Rinda 

2008 erbを偲んで

2009 偉大なBigTableとぼくのおもちゃ

2010 RWikiと怠惰な私の10年間 ◀いまここ

遺産で登壇するのはそろそろ限界か。

Page 16: The last decade of RWiki and lazy me.

9年ぶりのRWiki

2000 Perl/RubyConference

2001 YARPC 19101 ◀ RWiki

Page 17: The last decade of RWiki and lazy me.

しばらくお待ちください

✓ 97プログラマ本✓ 初刷5周年✓ そろそろ遺産が尽きる✓ +03分✓ 次はRWikiのこと

Page 18: The last decade of RWiki and lazy me.

RWikiのことちゃんとした記録がないのでほどほどの正確さで説明します

Page 19: The last decade of RWiki and lazy me.

RWikiのこと

RWikiの現状と今日のテーマ

RWikiの起源と特徴

privateなRWikiとそこでおきた問題と対応について

Page 20: The last decade of RWiki and lazy me.

RWikiの現状

OSSのプロジェクト 

publicなRWiki

privateのRWiki

Page 21: The last decade of RWiki and lazy me.

OSSのプロジェクト 

cozmixngのsvn借りてる。感謝

最近はほとんど変更がない

1.9対応を途中までやったけど飽きた。どちらかと言えば1.9がRWikiに対応して欲しい

Page 22: The last decade of RWiki and lazy me.

publicなRWiki

The RWiki toRubyの業務連絡とkouさんの読書メモは活発

Rubyのドキュメント関連はRWikiから卒業してしまったぽい

Page 23: The last decade of RWiki and lazy me.

privateなRWiki

某組織の非公開なRWikiサイト

35000ページと25000ページの二つ

わりと活発に更新されてる

Page 24: The last decade of RWiki and lazy me.

RWikiの現状

死んだプロジェクトに見えてもしょうがない。

某サイトでは10年近く活発に更新されてる

RWiki使って!!というテーマではない。実装の自慢と運用の苦労の話

Page 25: The last decade of RWiki and lazy me.

しばらくお待ちください

✓ 今日のテーマは某サイトの運用の話だと念をおす

✓ +06分✓ 次はRWikiの起源と特徴

Page 26: The last decade of RWiki and lazy me.

RWikiのはじまり

[ruby-list:24661]

Page 27: The last decade of RWiki and lazy me.

RWikiのはじまり[ruby-list:24661]

◀dRuby, ERbメソッド化, RDToolのサンプル◀dRubyでサーバとCGIに分離

◀10周年

Page 28: The last decade of RWiki and lazy me.

RWikiのはじまり[ruby-list:24661]

◀軽い嘘もある

Page 29: The last decade of RWiki and lazy me.

OSSっぽい

はじめにNaHiさんが手伝ってくれて一部がNaHiさん色にそまり、その後kouさんがkouさん風に直してくれた

基本的に私の好みを尊重してくれてるので協力してくださる方は不満だったんじゃないだろうか

Page 30: The last decade of RWiki and lazy me.

しばらくお待ちください

✓ まもなくRWiki10周年✓ dRubyなどのサンプル✓ NaHiさんkouさんに感謝する✓ +08分✓ 次はRWikiの特徴

Page 31: The last decade of RWiki and lazy me.

RWikiの特徴機能と実装の特徴

Page 32: The last decade of RWiki and lazy me.

機能

コンテンツの記述にRDを使うWiki

RDoc以前に流行った書式

リンクはRD方式。WikiNameは使えない(ということはWikiじゃないのか?)

機能の数は追っていない

Page 33: The last decade of RWiki and lazy me.

実装

dRubyの長生きなサーバとCGIで構成

CGIは単なるhttpのインターフェイス

全てのコンテンツを一つのプロセスの中にオブジェクトとして配置

Page 34: The last decade of RWiki and lazy me.

RWiki

CGI

CGI

HTTP dRuby

長生きRWikiと短命CGI

Page 35: The last decade of RWiki and lazy me.

実装

dRubyのアプリケーションの典型的なプロセス構成

ふつうのデスクトップのアプリケーションにWebのUIを載せてる感じ

Page 36: The last decade of RWiki and lazy me.

起動時

RWiki

log

読み込み

Page 37: The last decade of RWiki and lazy me.

RWikiCGI

log

view

Page 38: The last decade of RWiki and lazy me.

RWikiCGI

log

書き込み

edit

Page 39: The last decade of RWiki and lazy me.

拡張

プラグインの機構は用意されないがdRubyで外部から操作し放題

Page 40: The last decade of RWiki and lazy me.

実装 view

htmlを生成するオブジェクトの話

本文の部分はコンパイルされたERBオブジェクト

共通の部分はERBメソッド化

リンク先の更新時刻等わざわざ動的に

Page 41: The last decade of RWiki and lazy me.

実装 view

RD→ERBソース→コンパイル済ERB へ変換。最終的なERBオブジェクトを保持する。

RDtoolによるRDの解釈、ERBのコンパイルなど時間のかかる処理は事前に

html生成時はERB#resultだけ

Page 42: The last decade of RWiki and lazy me.

In-Memory

全てのデータをRubyオブジェクトで表現してプロセス内に配置するだけ

要素が数万ならArrayやHashで充分

ものすごくふつう

Page 43: The last decade of RWiki and lazy me.

In-Memory

ファイルを読むのは起動時だけ

再起動の際に必要な最低限の情報をログする。編集結果はplainな文字列

いわゆるデータベースをもたない。当然SQLとか関係ないし、O/Rマッピングとか要らない

Page 44: The last decade of RWiki and lazy me.

NoSQL?

むしろRWiki自体がデータベースのように見える

ドキュメント指向データベース?

dRuby経由でページのCRUD

ページに対する演算

Page 45: The last decade of RWiki and lazy me.

しばらくお待ちください✓ RWikiはふつうのdRubyプログ

ラミングの構成✓ なんでもプロセスの中に✓ 流行のbuzzwordを押さえてる✓ +14分✓ 次は本題の某サイト

Page 46: The last decade of RWiki and lazy me.

某サイト

某サイトの紹介が今日のテーマ

ほぼ10年近い運用の中でおきた問題と対応について

Page 47: The last decade of RWiki and lazy me.

某サイト

2001年頃から使っているある大きなチーム向けのRWiki

開発メモ、日記、BTS、チケットシステム、テスト計画、履歴の管理

ソースの変更履歴のブラウズ

Page 48: The last decade of RWiki and lazy me.

利用者

開発者とスタッフ、マネージャなど、100人よりちょっと少ないくらい

Page 49: The last decade of RWiki and lazy me.

規模

35000ページと25000ページの二つのRWikiが一台のマシンで稼働

全ての情報をプロセスにためてしまうので一つのプロセスは1.2Gくらい

意外と大丈夫。Ruby強い!!

Page 50: The last decade of RWiki and lazy me.

メモリと速度

マシンに余裕があるのかメモリを喰らっても他のサービスに影響なかった

Xeon 4core x2、 32GB RAM

実行中のレスポンスも問題ない

問題になるのは再起動にかかる時間

Page 51: The last decade of RWiki and lazy me.

カスタマイズ

小技

Pageオブジェクト

StoryCard拡張

TestSuite生成システム

Page 52: The last decade of RWiki and lazy me.

小技

CIにあわせたスタイルシートの使用(gotokenさん作)

簡単なことだけど仕事してる感を増幅する魔法

Page 53: The last decade of RWiki and lazy me.

Pageオブジェクト

RDのソース、htmlを生成するerbオブジェクト、正・逆リンクなど基本情報

RDの木構造を処理することで求まる属性を集めた任意のオブジェクト。Propertyと呼んだ機構

どの情報もdRubyから触れる!

Page 54: The last decade of RWiki and lazy me.

StoryCard拡張

チケットシステム、計画ゲームを支援する拡張

チケット情報をPropertyを使って取得

dRubyを用いたチケット情報を処理するツールがたくさんある

Page 55: The last decade of RWiki and lazy me.

StoryCard拡張

運用中にチケットの属性、書式もワークフローもどんどん変更できる(た)

紙やExcelに近い無法っぷりが長期間の運用には必須である

チケットシステムのインストールとチケット駆動には関係がない

Page 56: The last decade of RWiki and lazy me.

TestSuite生成システム

StoryCardに記述されたテストケースを抽出し一覧する機能が基本

全て見せると多すぎてやる気なくす

テスト計画、成績、鮮度、脆さなどの属性を元に今日のおすすめプレイリストを生成するシステム

Page 57: The last decade of RWiki and lazy me.

TestSuite生成システム

iTunesスマートプレイリストのパクリ

会社員系講演で何度も話したネタ

Pageオブジェクトのリンク情報とStoryCard拡張のPropertyを利用

Page 58: The last decade of RWiki and lazy me.

その他のツール

CVSに対するsvn風の変更履歴のブラウズ、開発メモとの融合

チケットの遷移の統計情報

試験成績履歴の地図

Page 59: The last decade of RWiki and lazy me.

しばらくお待ちください

✓ 某サイトのRWikiの概要✓ PageとProperty, StoryCard拡張✓ ツールの多くは外部に✓ +20分✓ 次は問題だよ

Page 60: The last decade of RWiki and lazy me.

たくさんの問題

基本的に「遅いんですけど問題」

起動遅いんですけど問題

irbで操作すると遅いんですけど問題

全文検索遅いんですけど問題

Page 61: The last decade of RWiki and lazy me.

たびたび起こる問題

起動が遅いんですけど問題

原因はさまざま

再起動は数ヶ月に一度なのでがまんできなくもない

Page 62: The last decade of RWiki and lazy me.

起動シーケンス

起点となるページを読みながらリンクされているページを再帰的に読む

RDの木は再帰的に生成されRDの森になりオブジェクト数が膨大に。GCの処理で非常に遅くなる。(気がする)

Page 63: The last decade of RWiki and lazy me.

起動シーケンス

再帰的に辿りつつ、リンク先をキューに積むことで、木を同時に一つだけ生成することに

以前から気になってたんだけど無視してたらznzさんに指摘された。しょうがないから直した。起動がすごく速くなった。と思う。あやふや。

Page 64: The last decade of RWiki and lazy me.

起動シーケンス

自分で気づいていても、指摘されるまで行動しない。

ちゃんと検証しないで直してみたけどうまくいった。

Page 65: The last decade of RWiki and lazy me.

キャッシュの導入

再起動のたびにRDを木構造に変換してるのでもったいない

RDから変換されたhtml片、メタデータをMarshal.dumpしておいて、再起動時にMarshal.loadだけで済まそう

Page 66: The last decade of RWiki and lazy me.

キャッシュの導入

確かに速くなった!

初期の設計思想からちょっとずれてるような気がする。敗北感?

最低限のログにこだわらないことにした。たとえリッチでも、ログはログだ

自分に言い聞かせることで解決

Page 67: The last decade of RWiki and lazy me.

レスポンスの悪化

ページ数の増加にともないプロセスが太る

あるときからレスポンスが悪くなる←これってGCじゃね?

Page 68: The last decade of RWiki and lazy me.

レスポンスの悪化

GCで遅いと言えばオブジェクト数だろ

とするとRDの木構造?

案の定インスタンス変数がRDの木を参照してる部分があった

覚えないように変更

Page 69: The last decade of RWiki and lazy me.

レスポンスの悪化

メモリ半減、快適。起動も速い

めずらしく自主的に直した

たまにやると気分がいい

Page 70: The last decade of RWiki and lazy me.

irb遅いんですけど

irbから使うとよくメソッド名をtypoしてしまう→間違えると反応が非常に遅くなる問題

NoMethodErrorの際にinspectが呼ばれ最終的にRWikiの根となるオブジェクトのinspectが実行される。これが長い

Page 71: The last decade of RWiki and lazy me.

irb遅いんですけど

[ruby-dev:41329] NoMethodErrorなどのmessage

ruby-devで相談するも「咳さん」のアクセントの話題になってしまい議論終了。なにかの魔法をかけられたよう。

Page 72: The last decade of RWiki and lazy me.

irb遅いんですけど

全然関係ないんですが、私の住んでる地方では

 関さん  ̃___

 咳さん  _̃__

 積算    __̃_

で、ぜんぶアクセントが違うので、文字で書くとかなり違和感があるのですが(心の中で「咳さん」を「関さん」のアクセントで読んでる)、好奇心にかられるのは、これは他の皆さんもそういう風に感じているものなんでしょうか。

Page 73: The last decade of RWiki and lazy me.

irb遅いんですけど

http://www.hcn.zaq.ne.jp/myattun/tochi/hatsuon.html発音の特徴 次に、栃木弁の発音について下にちょっと詳しく説明しておきましょう。

(1) アクセントによる単語の区別がありません。(中略)栃木の場合、アクセントによる単語の区別がなく、なおかつ固定した位置にアクセントが置かれるわけでもないので、無アクセントの方言と呼ばれます。

ということで、栃木県民としては無問題です。

Page 74: The last decade of RWiki and lazy me.

irb遅いんですけど

栃木県民的にアクセントは解決したが肝心のNoMethodErrorが解決せず

今回はRWikiサーバでのObject#inspectを再定義して回避したので追求しない

matzの魔法に注意

Page 75: The last decade of RWiki and lazy me.

全文検索

なんの工夫もなく35000のStringをscanしていた

最近なんとなく遅い

ユーザにはバレてないが直して遊びたい

Page 76: The last decade of RWiki and lazy me.

全文検索

この話はパス

たまにポジティブに修正する

Page 77: The last decade of RWiki and lazy me.

問題の傾向

全てのオブジェクトを一つのプロセスに配置するのはとても自然

予想通りメモリの問題、それによる速度の問題に出会う

メモリというよりオブジェクト数?

この規模まで育てば、の話

Page 78: The last decade of RWiki and lazy me.

問題の傾向

それ以外のトラブルはなさげ

設計があまりにふつうだから?

Page 79: The last decade of RWiki and lazy me.

解決の傾向

不要なオブジェクトを保持しない生成しない

問題がおきてから考える

Page 80: The last decade of RWiki and lazy me.

態度の傾向

基本的にがまんする

外部から指摘があってから動く

たまに自発的に直すが、実はみんなは困ってなかったりする

Page 81: The last decade of RWiki and lazy me.

態度の傾向

規模が大きくなるのに備えて最初から準備をするのはムダ

どんな風に大きくなるか、どこが大きくなるか予想がつかない。大きくならないかもしれない

一つの作戦で全ての大きさに対応できるとは考えない

Page 82: The last decade of RWiki and lazy me.

態度の傾向

問題に出会ったときに状況に応じた適切な解を考えるべき、かな

Page 83: The last decade of RWiki and lazy me.

さらなる不安

オブジェクト数の限界は?

サーバが64bit OSに変わったので気にしないことにした

最終的にはページ名ごとにRWikiサーバを分割するかもしれない

Page 84: The last decade of RWiki and lazy me.

肯定的なまとめ

大きなRubyのプロセスは、意外に丈夫でまだまだいけそう

dRubyの典型的なアプリケーションの配置はこのくらいのちょっとしたツールに適してる

DBMSを中心に考える必要なんてあるのかなあ

Page 85: The last decade of RWiki and lazy me.

肯定的なまとめ

数GBのGCはそこに

GC開発者はRWikiに挑戦するべき

Page 86: The last decade of RWiki and lazy me.

まとめ

今日はRWiki10周年イベントでした

某サイトのRWikiとそこでの問題を紹介

RWikiの構成でもまだまだいけそう。いつか限界がきてしまうと思うけど、それはそのとき考える

Page 87: The last decade of RWiki and lazy me.

重要

2005年夏

まだ初刷買えます!

初刷5周年!!

dRubyによる

関 将俊 著

分散・Webプログラミング

Page 88: The last decade of RWiki and lazy me.

重要

日本語版に寄稿しました

宣伝しなくても売れそう

Page 89: The last decade of RWiki and lazy me.

しばらくお待ちください✓ RWiki10周年✓ 初刷5周年✓ 97プログラマ本✓ RWikiまだいけそう✓ あまりだらしない人だと思われ

ないように

Page 90: The last decade of RWiki and lazy me.

なにかご質問は