トップ(最新) | <前

nDiki : DiKicker

DiKicker

WikiEngineWiKicker」をベースにした日記システムPerl で記述されている。

WiKickerWiki文法で記事を記述。

自動リンク機能により、キーワードで記事を串刺し表示可能。 各キーワードにも記事をつけられるのでパーソナルナレッジベースとしても活用できる。

nDikiDiKicker を使用している。

関連情報

スポンサード リンク

Related term

2007年3月14日 (水)

[ DiKicker ] ロック獲得リトライをさらに減らす このエントリーを含むはてなブックマーク

相変わらずここ最近 www.naney.org の負荷が上がり気味。 今日は Referer spam の爆撃もきていた様子。

DiKicker の挙動やログを見ていて気がついたのだが、さばききれなくなるのはどうも記事更新チェックの時間が長いからのようだ。 排他ロック獲得ループの回数が今の設定でも長い。

どのみち負荷が高い場合は共有ロックの方が勝ち気味で、排他ロックできなくて終わることが多いはずなので、思いきってもっとリトライの回数を減らしておいた。

それとロック獲得ループの中で「結局ロックできなかった時」に余計に1回 sleep() していたのでこれを削除。

スポンサード リンク


[ 3月14日全て ]

2007年4月3日 (火)

WiKickerJSON でのページ出力機能を追加 このエントリーを含むはてなブックマーク

最近は DiKicker ばかりに手を入れていたが、久しぶりに WiKicker の改良も行っている。 しばらく前から実装を始めていた JSON 形式での出力機能が今日完成。

今までは WikiPage について

  • HTML 形式による出力
  • Wiki 文法で書かれている生テキスト形式による出力

という2つの出力形式を持っていたので、JSON が加わることで3つめとなる。

@ サーバ側で WikiPage の構文解析まではやる

クライアントサイドの JavaScript でページの内容に合わせて様々な処理をできるように、サーバ側で構文解析まではしてあげるというのが主な目的。

JavaScript でまたパーサを書いてメンテしていくのも大変なので、その部分はサーバでやってしまおうかと。 構文解析した結果の解析木を JSON 形式で返して、JavaScript 側であとはお好きにという形。

@ CPAN にある JSON モジュールを使用

サーバ側の Perl プログラムには、構文解析をして解析木を作れるようになっている。 この解析木から Visitor パターンで JSON 形式を生成していく。

依存モジュールを増やすことを避けるべく、最初は自前で JSON 形式に変換していこうと思ったのだがやっぱり面倒だった。 ということで CPAN にあるモジュールをチョイス。

JSON 関連では JSONJSON::Syck、JSON::PC などがあるが今回はインストールのしやすさを考えて pure Perl モジュールとして実装されている JSON を採用することにした。

Visitor クラスで解析木を無名ハッシュ/無名配列のツリーに変換して、JSON モジュールに流しこめば OK。

 use JSON;
 my $json = JSON->new(pretty => 1);
 my $js = $json->objToJson($tree);

WiKickerフレームワークにはフォーマット別に出力を切り換える機構があるので、これに JSON を追加して application/json で送るようにして完成。

ちなみに残念ながら JSON 1.07 は Perl 5.005_03 では make test が fail するので、NaneyOrgWiki では使えない。


[ 4月3日全て ]

2007年4月5日 (木)

サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を待つようにした このエントリーを含むはてなブックマーク

www.naney.org を収容しているサーバの負荷が高い状態。

  1. Referer spam 弾きを強化。
  2. 1日半前ぐらいに1度リブートしたようで、Memcached が起動していなかったので起動。

という対処をしたけれどそれでもなかなか負荷が落ちつかない。

傾向としては SpeedyCGI のバックエンド側(speedy_backend)が MaxBackends まで起動して処理が追いつかないと、起動しているフロントエンド側 (speedy) がどんどん増えてしまうという状況のようだ。

DiKicker の高速化も順次着手しているのだけれど追いつきそうにもないので、loave average が高い時は頑張らずに無条件に 503 を返すように修正して対応(以前 hns の時にも同じことをした)。

本当は SpeedyCGI フロントエンドの数に応じて負荷の軽い処理に切り換える等工夫したいんだけれど、フロントエンドの数を取得する方法は簡単にはなさそうなんだよなあ。


[ 4月5日全て ]

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 形式データ出力

2007年4月に実装

@ (DiKicker) はてなブックマーク数表示機能を追加

2007年1月に実装

@ (DiKicker) はてなブックマークエントリーページへのボタン表示機能を追加

2007年1月に実装

@ (DiKicker) grep 検索機能を追加

2007年2月に実装。自分としては重宝している。

@ (DiKicker) キーワード記事の下部への文字列挿入機能

Google AdSense 挿入用。

@ (DiKicker) サーバの負荷が高くなったら 503 を返して沈静化を待つようにした

2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。

@ 内部コードの結構な書き換え

ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。


[ 5月30日全て ]

2007年7月11日 (水)

nDiki に「はてなスター」をつけてみた このエントリーを含むはてなブックマーク

本日よりはじまった「はてなスター」をつけてみた。 nDiki (by DiKicker) はほぼ tDiary 互換の HTML 構造なので、はてなスターの JavaScript プログラムを読み込むようにするだけで、各記事の見出しに Add ボタンが表示されるようになった。素晴しい。

ページの HEAD 要素の中で JavaScript プログラムを読むように指定されているのだが、今の DiKicker ではちょっと手を入れる必要があるので、とりあえずフッタ部分に挿入。


[ 7月11日全て ]

2007年8月23日 (木)

無制限 HTML タグ付けブロックを使って nDikiGoogle Maps を貼る このエントリーを含むはてなブックマーク

Google Maps が ID を取得しないでも簡単に自分のサイトに貼れるようになった。 Google Maps で表示される HTML コードをページに埋め込めば、好きな場所の地図を貼ることができる。 これは嬉しい。

早速 nDiki でも貼りたい。

しかし WiKicker という WikiEngine をベースとした DiKicker を使っている nDiki では、現在のところ直接 HTML コードを使えるようにしていないのである。

HTML タグ付けを許すのは嫌」というスタンスできたのだが、他のサービスを貼るという魅力にはやはり勝てないな。 HTML 直書きを許すのは大局的にはデータ活用性などで好ましくない部分もあるが、各種サービスを活用できないで利用価値が下がるのは本末転倒なので、わかった上で使うということで。

ということで nDikiHTML タグ付けブロック機能を有効に設定。

ちなみに現行では HTML::Scrubber ベースで、使えるタグ・属性に制限をつけるフィルタしか用意してなかった。これだと Google Maps のコードがそのまま貼れない。 ということで「DiKicker」および「書く人が限定されているような Wiki」での利用を想定した無制限にスルーするフィルタモジュールを新規追加。

これで Google Maps を貼れるようにした。

では早速。


拡大地図を表示

[ 8月23日全て ]

2007年11月5日 (月)

[ DiKicker ] 関連語から、着目キーワード記事内の語を除外 このエントリーを含むはてなブックマーク

DiKicker が持っているキーワード毎の関連語表示機能(2005年6月4日)は、関連する語を発見したりたどったりするのに思ったより便利で、よく自分でも使っている。 特にキーワード記事に明示的に関連語リストをつける時に参考にしている。

ただ現在の実装だと(当然)キーワード記事に書いた関連語リストによって関連度がさらに上がるので、新しい語が発見できなくなってしまう。

ということでキーワード記事に出現する語は、関連語リストに含まれないようにした。 合わせて関連語表示数も 20 から 30 に調整しておいた。

これで

  1. あるキーワードの関連語を見る。
  2. 関連語表示を見て関連語を探し、重要ならキーワード記事で言及する。あるいは関連情報としてリンクする。
  3. 関連語表示には、その語が取り除かれて次点の語が表示されるようになる。

という流れで情報発見できるようになった。 ページ間のリンクも強化されるので SEO 的もちょっといいのかな。


[ 11月5日全て ]

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。

  1. cron で定期的に Twitter から RSS フィードをとってきて、Perl スクリプトで HTML フラグメントに変換。
  2. DiKicker が読み込む(サイドバーを含む)フッタファイルに挿入。

と簡単に実装してみた。機能的には概ね満足。

今後は L:~ や URL自動リンク化、キーワードの自動リンク化を適宜したい。


[ 11月9日全て ]

2007年11月23日 (金)

最近の Twitter ステータスを nDiki最近のさえずり」ページに自動表示 このエントリーを含むはてなブックマーク

11月9日から「Twitter ステータスを nDiki サイドバーに表示」しているのだが、それで使っているスクリプトにちょっと手を加えて「最近のさえずり」という nDiki ページを自動生成/更新するようにした。

サイドバーRSS フィードと同じく最近の20件を表示するのに対し、最近のさえずりページには数日分表示するようにした。

ここ最近は Twitter のステータスをとりまとめて、ライフログ的に nDiki に上げているのだが、今までは Twitter Web ページやサイドバーの部分から手作業でコピーして日時やリンクを整形していたので面倒であった。

今回の(30分毎に)自動更新するページは最初から WiKicker / DiKicker 用の Wiki 文法で出力している。 なので、これからはこの自動生成ページから必要なものだけを抜き出して貼り付ければよい。 これで楽ちんになるはず。

ほぼ自分用。自己満足。


[ 11月23日全て ]

2008年8月23日 (土)

フィード向け AdSense を追加してみた このエントリーを含むはてなブックマーク

Google AdSenseで「フィード向け AdSense」が利用可能になったので、nDiki に追加してみた。

Google AdSenseにログインして nDikiURL を指定してフィードを登録すると、FeedBurner 上にフィードが作成される。

www.naney.org 側では nDiki のフィードへのアクセスがきたら、FeedBurner 上のフィードへリダイレクトするように設定する。 ただし FeedBurner から巡回がきた際にはリダイレクトせずに、nDiki のオリジナルフィードにアクセスさせる。

www.naney.org のトップディレクトリの .htaccess に以下を追加。

 RewriteEngine on
 RewriteCond %{HTTP_USER_AGENT} !FeedBurner
 RewriteRule ^diki/d/rss\.rdf$ http://feedproxy.google.com/nDiki [L,R]

思ったよりあっけなく設定終了。

今のフィード URL が既にフィードリーダーに登録してもらっていることを考えて nDiki (DiKicker) に「FeedBurner 向けに別 URL でのフィード出力機能」と「現在のフィード URL からのリダイレクト機能」を追加する必要があるなと思っていたのが、mod_rewrite が使えれば手間無しだった。

nDiki のフィードと同様の内容に広告が挿入されたバージョンのフィードが http://feedproxy.google.com/nDiki で表示されることを確認。

せっかくなので FeedBurner のレポート機能もチェックしてみることにしよう。


[ 8月23日全て ]

■よく検索されるキーワード

perl(52) 使い方(36) 提案書(35) windows(35) ドラマ(33) 書き方(30) cvs(28) サンプル(22) linux(21) torrent(20) debian(19) x31(19) 壁紙(19) 作り方(19) アジェンダ(18) 画像(17) 手帳(17) thinkpad(17) tc-1(17) 動画(15) rcs(15) アジェンダとは(15) ナースのお仕事(15) java(15) 桑田佳祐(14) ganttproject(14) 修理(14) gtd(13) 冷蔵庫(13) ほぼ日手帳(13) 桜井華子(12) wiki(12) google(12) 設定(12) tortoisesvn(12) ダイソー(11) ssh(11) apache(11) usb(11) 影舞(11) ウォーターボーイズ2(11) ノート(10) インストール(10) svn(10) ボールペン(9) so905ics(9) cgi(9) 無印(9) 方眼(9) xp(9) バッグインバッグ(9) subversion(9) 市原隼人(9) ヨドバシ(9) centos(9) djunit(8) c#(8) activeperl(8) ミムラ(8) 東京総合車両センター(8) 無印良品(8) make(8) ubuntu(8) 深浦加奈子(8) 写真(8) junit(7) 本名(7) (7) thinkingrock(7) ケース(7) 生年月日(7) 口コミ(7) 山川レイカ(7) チェックリスト(7) 例文(7) つけ麺(6) eclipse(6) web(6) 秋葉原(6) httpd.conf(6)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.753828s / load averages: 0.63, 0.44, 0.41
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)