nDiki : 自動リンク
スポンサード リンク
Related term
2004年2月5日 (木)
■ はてなダイアリーキーワード自動リンクAPI

はてなダイアリー外のアプリケーションにおいて、はてなダイアリー内と同じく、キーワードの自動リンクを可能とするためのAPIを試験公開しました。
APIというか、 キーワードリスト (正確にはキーワードのどれかにマッチするPerl正規表現)を取得できるようになっただけとも言える。 '|' で結ばれた巨大な正規表現なので、ある意味富豪的。 普通に使うと最左最長でのキーワード抽出に使える。 ちなみにWiKickerは非最左最長でのキーワード抽出。
しかしそれでもキーワードリストを取得できるっていうのは、ふとっぱらとも言える。 貴重なデータですよ。
- [ WiKicker ] 自動InterWiki (2004-02-09)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- [ Perl ] Memcached を使ってみる (2004-01-12)
2004年2月9日 (月)
■ [ WiKicker ] 自動InterWiki

一昨日実装した、 複数のキーワード集合による、AutomaticLinkモジュールを WiKicker CGI プログラムから使えるようにしてみた。
ローカルにおいておいたキーワードリストファイルを読み込み AutomaticLink 処理(WikiForum 内で AutomaticLink でマッチしていない部分文字列に対して)。 マッチした場合は InterWiki を使ってURIに変換しリンク化する。
あわせてIndexPage.txtでWiKicker WikiForum 内の PageName を取得できるようにした。
これで例えば、2つの WiKicker WikiForum が cron で互いの IndexPage.txt を定期的に取得し、AutomaticLink するようにすれば、相補的に連携する事ができるようになる(ただし AutomaticLink のみ。WikiName や BracketName は依然としてその WikiForum 内のみ)。
AutomaticLink でのリンク先は(指定した)任意の InterWiki で定義できるので、あるキーワード集合について Google の検索結果ページや「はてなダイアリーキーワード」への自動リンクも実現可能(はてなダイアリーキーワード自動リンクAPIはキーワードリストではなく正規表現を返してくるので、元に戻す必要有り。またあれだけ巨大なキーワードリストだと毎回 AutomaticLink のために、trie 再生成するのも辛いのでもう一工夫必要)。
- [ WiKicker ] 複数のキーワード集合による、AutomaticLink (2004-02-07)
- [ WiKicker ] 憧れのサイドバー (2004-01-23)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- はてなダイアリーキーワード自動リンクAPI (2004-02-05)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
2006年3月4日 (土)
■ さらにサーバ負荷状態悪化。対応に追われる。

CPU パワーを消費し続けているプロセスが昨日の 5 個から、今日は 21個に増えている……。
対応するも、焼け石に水か。
@ データベースロックタイムアウト時間を短く
120秒から60秒に。
@ 生成した RSS をキャッシュするようにする
生成した RSS を Cache::FileCache で有効期間30分でキャッシュするように変更。 あわせて Google Desktop からのアクセス拒否を解除。
@ 旬カレンダーナビゲーションをキャッシュするようにする
ページ下部にある各月上中下旬へのリンクは、どこに記事が追加されたかディレクトリをスキャンするしか知りようがないので毎回そのようにしていたのだが、これが結構重くなってきたので、これも有効期間1時間でキャッシュするように変更。
@ 高負荷時のページ更新停止機能を改善
DiKicker では新しいキーワードが追加されると、過去の記事についてもアクセスがあり次第、自動リンクし直していくようになっている。
高負荷時にはこの機能が止まるようにしてあったのだが、「キーワード記事」については止まるようになっていなかった。 また「1記事のみのページ」へのアクセスの場合も(1記事ぐらいの更新ならいいだろうということで)止まるようにしていない。
このためこれらへのアクセスあると、(必要であれば)アップデート処理が発生。 データベースの排他ロックも必要となるため、全体のレスポンス低下につながっていた。
これらも、高負荷時には止まるように修正。
- サーバ高負荷状態につき DiKicker 機能修正とサーバ設定変更 (2006-03-03)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- [ DiKicker ] 語リストを Term DB に保持 (2006-11-21)
- DiKicker に grep 検索機能を追加 (2007-02-02)
2006年10月5日 (木)
■ DiKicker の出力する HTML コードを小さく

容量超過につき www.naney.org の容量削減中。
中でも結構な容量を食っているのが、nDiki (DiKicker) の HTML 変換済み記事データベースである。 毎回レンダリングし直すと遅いので、1度 HTML フラグメントに変換したら Bereley DB ファイルに保存しているのだが、これがどうしても大きくなってしまうのである。
NaneyOrgWiki (WiKicker) もそうなのだが、 UTF-8 を使用しているため日本語中心のテキストが思った以上にデカくなるのも痛い。
ということで生成する HTML フラグメントをちまちま小さくするようにすることにした。 チェックしてみると自動リンクの URL が絶対 URL になっているではないか。 まずはこれを短い URL を吐くように書き直し。
焼け石に水な感もあるが、ちょっとずつでも短くしていきたい。
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- [ WiKicker ] spam と検索エンジン対応に noindex、... (2007-01-13)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
2006年11月21日 (火)
■ [ DiKicker ] 語リストを Term DB に保持

自動リンクなどで語リストが必要な時に、今までは Term DB (Berkeley DB で実装)をスキャンしてリストアップしていた。 これだと語数が増えていくにつれ線形に遅くなるので、一度リストアップしたら Term DB の別レコードに Storable で freeze してキャッシュするようにしてみた。 ちょっと速くなることを期待。
あわせてロックまわりも改善。 DiKicker では Article DB と Term DB をセットでオープンすることとし、Article DB の方で排他制御をしている。 ただし、Term DB の方には排他ロックでオープンされているか、共有ロックでオープンされているのかの情報を伝えていなかったため、実は共有ロックの時にも書き込みをしてしまう部分が残っていた。
Term DB オープン時にどちらで開いているかを通知するようにし、キャッシュ情報などの書き込み時にはこれらを参照して間違えた書き込みをしないようにした。
- さらにサーバ負荷状態悪化。対応に追われる。 (2006-03-04)
- [ Perl ] Search::InvertedIndex (2004-02-09)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- DiKicker の DB に余分な情報まで保存していた (2006-11-07)
2007年2月2日 (金)
■ DiKicker に grep 検索機能を追加

DiKicker には自動リンクベースの記事串刺し表示機能があって、同じキーワードを含む記事をまとめて読むことができる。 結構便利なのだが、この機能ではキーワードの設定は Blog の書き手に委ねられている。
社内で DiKicker を一部使ってもらっているのだけれども、それら他人の Blog を読んでいると「あのキーワードで串刺し表示したいな」と思うことがしばしばあることに気がついた。 やはり任意の文字列で串刺し表示する機能が欲しい。
書き手にとっても「自動リンクキーワードにするような文字列ではないけれども、串刺しで読みたい/探したい/見せたい」と思うことが少なからずある。
ということで、検索ベースの串刺し表示機能を実装してみた。
@ grep ベース
実現には全文検索を行う必要があるが「設置・運用の手間」「ディスク容量」という点から、事前にインデックスを生成するような方法は今回は避けようと思う (www.naney.org 上で自分が使う上での制約からくる理由が一番大きかったりする)。
ということで今回は grep 型で実装することにした。 もともと WiKicker の方の検索機能も現在のところ grep 型である。 WiKicker では自前で WikiPage をスキャンしているが、DiKicker では grep コマンドに任せることにした。 こういうのは専用の grep を使った方が速いはず。呼び出しは
grep -Flre $escaped_string dir...
というオプション指定。Web ページとしてのページングなどは、自動リンクによる串刺し表示機能のものを流用。
で試したところ www.naney.org サーバでは、load averages が 1 以下の時でだいたい50秒前後。対象ファイル数は 2800弱。予想より時間がかかる。
ただし1回実行した後、ファイルがファイルシステム/OSのメモリ上にのっている状態では 0.1秒程度で完了する。
検索結果ページの permalink が検索エンジンにそれなりに捕捉されて、定期的にアクセスがあるようになれば、ファイルがメモリにのっている割合が増えるであろうから平均して実用に耐えられる速度が出るかもしれない。
今後は様子をみながら検索結果のキャッシュ等を処理を整備していく予定。
- WiKicker 0.420 リリース - 変更いろいろ (2007-05-30)
- Debian GNU/Linux に Hyper Estraier 1.2... (2006-05-31)
- [ WiKicker ] 憧れのサイドバー (2004-01-23)
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
2007年3月1日 (木)
■ WiKicker / DiKicker の AutomaticLink 長を可変にした

「が」や「は」など頻出する文字の WikiPage を作ってしまった場合、それらに対して自動リンクが働いてしまうと大変なことになるので、WiKicker では2文字以上のみ対象とするようにしていた。
しかし nDiki を書いていて、1文字のキーワードも自動リンクしたいという風に思えてきていた。 誰でも書ける Wiki の場合には危険で制約が必要だけれど、全てのキーワードが著者のコントロール化にある DiKicker では1文字のキーワードに対して自動リンクが働いても問題ないだろう。
ということで自動リンクが働く最低文字列長をプロパティで設定できるようにした。 2004年ぐらいからほとんど手をつけていなかった、AutomaticLink 処理モジュールを久しぶりにメンテナンス。 もともと2文字以上を前提でコーディングしてあったので、trie 部分などが1文字できちんと動くか確認した上で、文字列長チェックを可変に修正。 WiKicker、DiKicker 両方で設定で変えられるようにした。
またあわせて、英単語の部分文字列に対して自動リンクしないようにする処理も改善。 今までは `downloaded' に対して `loaded' はマッチしないようにしていたものの、'download' はマッチしてしまっていた。 このあたりを改善。
- [ WiKicker ] 複数のキーワード集合による、AutomaticLink (2004-02-07)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- WiKicker に Flickr 関連機能追加 (2005-02-11)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- [ WiKicker ] 自動InterWiki (2004-02-09)
2007年3月7日 (水)
■ 自動リンク機能改善による悪影響

www.naney.org がどうもまた最近重い。
load average が 30 前後まで上がっている。 しばらくするとだんだん落ちついてくるのだが、3 以下になったところでまた 30 前後までまた一気に上がるというのを繰り返している。 load average で振る舞いを変えるのは WiKicker / DiKicker の特徴なので、これはうちが原因かも。
調べてみると SpeedyCGI のフロントエンドのプロセスが順番待ちで大量に起動している。
どうやら先日追加した自動リンクの機能改善にかかわるコード修正による、若干の処理速度の低下がまずいようだ。
速度が上がるようにちょっと修正してみたけれどまだ駄目なようなので、しかたなく単語の連接チェック部分を一時コメントアウトして対応。
今後、自動リンクまわりの更なる高速化がする必要がありそう。
- DiKicker に grep 検索機能を追加 (2007-02-02)
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
- DiKicker の出力する HTML コードを小さく (2006-10-05)
- サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を... (2007-04-05)
- サーバ高負荷状態につき DiKicker 機能修正とサーバ設定変更 (2006-03-03)
2007年5月30日 (水)
■ WiKicker 0.420 リリース - 変更いろいろ

去年の12月3日以来、約半年ぶりのリリース。 リリースしそびれて、随分変更を累積してしまった。 以下主な変更点。
@ バージョン番号形式を変更
前回の 0.41 に対して、今回は 0.420 とした。 浮動小数点数的には、増分 0.01 で今まで通り。
今後 version.pm が普及した時のことと、developer release を出す時のことを考えて小数点以下3桁ずつのスタイルに移行することにした (関連記事)。
@ <meta name="robots" content="noindex,nofollow">
2007年1月に実装。 編集ページや履歴ページが検索エンジンに登録されないようにするための機能。
@ <a rel="nofollow">
2007年1月に実装。 リンク spam 対応。
@ AutomaticLink 長を可変にした
2007年3月に実装。 特に DiKicker で1文字キーワードによる自動リンクを有効にするために追加した。
@ '/' の前を省略した自動リンクを有効にするか無効にするかを設定できるように
前述の機能で1文字での自動リンクを有効にしたら、不便な面が出た。
WiKicker / DiKicker では '/' を階層の区切り文字としても扱うことができるようになっていて、サフィックス部分だけでも自動リンクするようになっている。 自動リンクを1文字にしたら「OS/2」というキーワードに対して '2' でも自動リンクが働き、望まないリンクが張られるようになってしまった。 DiKicker では階層的キーワードは無くてもあまり困らないので、'/' の前を省略した自動リンクを無効にできるようにした。
@ JSON 形式データ出力
@ (DiKicker) はてなブックマーク数表示機能を追加
@ (DiKicker) はてなブックマークエントリーページへのボタン表示機能を追加
@ (DiKicker) grep 検索機能を追加
2007年2月に実装。自分としては重宝している。
@ (DiKicker) キーワード記事の下部への文字列挿入機能
Google AdSense 挿入用。
@ (DiKicker) サーバの負荷が高くなったら 503 を返して沈静化を待つようにした
2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。
@ 内部コードの結構な書き換え
ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。
- DiKicker に grep 検索機能を追加 (2007-02-02)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- 社内 Blog 開設 (2006-05-16)
- Debian GNU/Linux に Hyper Estraier 1.2... (2006-05-31)
- WiKicker 0.29 リリース - ビルドまわりの改良など (2006-02-13)
2007年11月9日 (金)
■ Twitter ステータスを nDiki サイドバーに表示

公式の Flash 版 Twitter badge をこのページのサイドバーに表示していたが、以下の点でちょっと不満だった。
- 「Flash, Just Me」: 自分のみのステータスを表示できるが、1度に1つのみ。キャッシュの関係で古い情報が表示されがち。
- 「Flash, With Friends」: 自分のみのステータスを表示できない。
- 「HTML/JavaScript」: JavaScript ファイル読み込みなので、Twitter 側が重いとページのその先のレンダリングが止まってしまう。
「自分の過去のステータスを一覧的にサイドバーに表示する」のがしたいことなのだが、ちょっとマッチしない。 ということで Twitter から RSS フィードを取ってきて、サイドバーに表示することにした。
使ったモジュールは URI::Fetch + XML::RSS + Date::Parse。 それとユーティリティとして WiKicker::HTML と WiKicker::URI。
- cron で定期的に Twitter から RSS フィードをとってきて、Perl スクリプトで HTML フラグメントに変換。
- DiKicker が読み込む(サイドバーを含む)フッタファイルに挿入。
と簡単に実装してみた。機能的には概ね満足。
今後は L:~ や URL の自動リンク化、キーワードの自動リンク化を適宜したい。
- はてなブックマーク上の最新ブックマークを nDiki に (2005-05-16)
- クリッピングに便利な CMS 「Tumblr」を使ってみる (2007-04-13)
- Plagger のインストールが大変なので XML::RSS で RSS ... (2006-06-10)
- Flickr の写真を自動的に Twitter アイコンにする (2008-03-13)
- はてなブックマーク上の検索結果を nDiki に (2005-10-30)
スポンサード リンク
■よく検索されるキーワード
perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 15.101616s / load averages: 0.12, 0.24, 0.31
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク