nDiki : URL
URL - Uniform Resource Locator
URI escape (Perl)
によると
$str =~ s/(\W)/'%' . unpack('H2', $1)/eg;
と
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
がはやいそうです。
application/x-www-form-urlencoded でのエンコード (Perl)
同じく
によれば、
$str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg;
$str =~ tr/ /+/;
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
がはやいそうです。
スポンサード リンク
Related term
2006年6月1日 (木)
■ Hyper Estraier で社内 Web コンテンツ検索

昨日の自分のノート PC で Hyper Estraier の試用を踏まえて、社内のサーバに Hyper Estraier を設置する。
@ インストール
いまだ Red Hat Linux 8.0 であるサーバに、昨日と同様に Hyper Estraier 1.2.7 を /usr/local/hyperestraier-1.2.7 以下にインストール。
この環境では ./configure 時に iconv が見つからないため、最初に libiconv 1.9.2 を /usr/local/hyperestraier-1.2.7 に入れ、続けて QDBM、Hyper Estraier の順にインストール。
estwaver + estmaster でクローリング + 文書登録も問題なく完了。
@ search_ui がうまく動かない。
で検索をしようと http://ホスト:1978/node/ノード名/search_ui にアクセスするも、検索フォームを含め何も表示されない。あれ? 他の管理ページは問題なく表示されるのに search_ui だけ駄目。
GNU Wget だときちんと HTML を GET できるのだけれど、Firefox や Internet Explorer からだと駄目である。
いろいろビルドしなおしてみたけれどやっぱり駄目なので、今回は結局 estmaster をやめて CGI プログラム版の UI を使うことにした。 こちらだとクローリング中は検索ができなくなってしまうけれど、夜中に cron で回すから別にかまわないか。
@ インデックスの方針
以下のような感じでクロールし、登録することにした。
- 社内メイン Wiki、自分の社内 Blog、公開 Web サイトのトップページをクロールの種文書とする。
- それと社内メイン Wiki の更新情報ページも種文書とする。
- 社内のサーバ、および公開 Web サイトのみクロールするように allowrx、denyrx を設定。
- Wiki の編集ページ等をクロールしないように denyrx を設定。
- 1日1回深夜に cron でインデックスを更新。
- revisit は3日に設定。
- いくつかの種文書は -revcont 付きで estwaver を実行しても毎回巡回して欲しいのだけれど、それはいまのところできないようだ。
特定の Wiki や Blog 内のみを検索したい時は、検索インタフェースの方で URL を指定絞り込めば良いので、それほど規模も大きくないし全部ひとまとめにインデックス化することにした。
後は使いながら微調整していくこととしよう。
- Debian GNU/Linux に Hyper Estraier 1.2... (2006-05-31)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- Linux で使えるデスクトップ検索ツール Beagle でローカルファイ... (2006-08-08)
- はいぱー日記システムで日記を開始 (2001-05-11)
- Debian に RSS リーダ「フレッシュリーダー」をインストール (2006-03-06)
2006年6月3日 (土)
■ FoxyProxy と autossh で社内 Web ページを閲覧

メンテナンス等のため社内 Web サイトを社外から閲覧する必要がある場合 SSSH の port forwarding を使ってアクセスしていたのだが、その都度 Firefox の proxy を変更したりするのが面倒だった。
そんな折 FoxyProxy という Firefox 拡張機能があることを知った。 これは登録された URL パターン毎に、自動的に proxy を切り替えてくれるという優れもの。 これは便利。
autossh で port forwarding (SOCKS サーバ)を開いておくようにして、社内のホスト名/IP アドレスのURLの時はそこを経由するようにしておくと、いつでも Firefox から閲覧できるようになる。
autossh -N -f -D8090 <中継するホスト名>
- connect.c を使って SOCKS サーバ経由で社内サーバへ SSH 接続 (2007-01-06)
- Hyper Estraier で社内 Web コンテンツ検索 (2006-06-01)
- Tor で hidden service (2005-02-13)
- Apache Proxy で アンテナの ?%MM%%DD%%HH%%TT... (2001-10-02)
- Web広告に興味を持つ (2000-10-01)
2006年6月10日 (土)
■ WiKicker における PageName 最長文字数

WiKicker では PageName を エンコードした文字列を URI に埋め込んだり、サーバで保存する際のファイル名にしたりしている。 このため、PageName の最長文字数はそれらの最長文字数に依存しているはずである。
今まで確認を後回しにしていたのだが、新しい機能の追加の際に確認しておく必要があるので調査してみた。
@ WiKicker の実装
WiKicker の実装がらみとして最長を決める要素としては
- PageName の UTF-8 表現を URI エスケープしてページ URI に含めている。→ URI、HTTP、HTML、Web サーバ、Web ブラウザの実装による最長の制約
- PageName を base64 にエンコードしてファイル名にしている。→ ファイルシステムのファイル名、パス名の最長の制約
がある。
@ 各仕様等による制約
- HTTP では URI の長さには制限なし (RFC2616 3.2.1)
- Web サーバは Request-URI が長いと 414 Request-URI Too Long を返す (RFC2616 10.4.15)。Apache は LimitRequestLine ディレクティブにより、URI を含むリクエスト行のサイズを制限することができる(配布時には 8190)。
- Internet Explorer が扱える URL の長さは 2083文字。
- ext2 はファイル名は 255文字まで(増やすこともできる)。
- 手元の Linux 2.6.15 で試したところ、パス名は 4095文字まで。
@ WiKicker で問題が出ない PageName 最長文字数
上記の中ではファイル名による制約が一番大きい。
WiKicker 内部でファイル名として base64 (の亜種) でエンコードしたものを使っているので、元の文字列はは最長 189バイトまでなければならない。base64 だと3バイトで4文字になるため、189バイトで 252文字となる。
WiKicker ではここでさらにファイル名に ',v'、'-lock' をつける事があるので、実際には元の文字列は最長 186 バイトまでとなる。
PageName が 186 バイトまでだとすると、URL エスケープしたとして558バイト。 WikiEngine のスクリプトの URL や他のパラメータとあわせても、これぐらいなら大丈夫のはずである。
ということで WiKicker では Linux 上だと通常 PageName は 186 バイトが最長と言ってよさそうだ。 日本語の文字はだいたい UTF-8 で3バイトになるので、62 文字までということになる。
そのうち、WiKicker に制約チェックを入れることにしよう。 そのうち。
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- 最後がピリオド(.)で終わるファイル名をつけられない (2005-04-19)
- WiKicker 実装 (2002-10-20)
- WiKicker 0.35 リリース - 添付機能の修正など (2006-06-20)
- [ WiKicker ] If-Modified-Since: 関連作業ほぼ済 (2003-09-19)
2006年7月22日 (土)
■ Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合

入社してから社内情報共有の一環として
といろいろ手をつけてきた。 次に狙っているのは SBS である。
Wiki や社内 Blog に書くほどではないけれどメモ程度にブックマークしておきたい URL を、気軽に晒せるようにするのが目的。
はてなブックマークのような公開サービスは
- タグ・コメント・傾向などが外に出るのはよろしくない
- あるいは、それを気にして活用されない
- そもそも社内リソースについてはブックマークできない
という点から、今回は利用できない。
ということで社内に SBS を設置したい考えている。
最初は Scuttle にしてみようと思ったのだが、PHP ベースであるのと MySQL を使うというところで気遅れしている。 いや SQLite でもいけそうらしいということで、実は Debian でちょっと試そうとしたのだが、テーブル作成の SQL が MySQL 用で、これを修正するのが面倒なので断念。
次に Perl + SQLite で動く Rubric を試してみることにした。
@ Rubric 0.140
Rubric は CPAN にあがっているので CPAN.pm から install Rubric でインストールできる。 モジュールをインストールしたら、セットアップ。
- CGI プログラムを動かすディレクトリを決める (以下 $RUBRIC)
- Rubric tarball の bin/rubric.cgi を $RUBRIC/ にコピーし、必要なら #! を修正する。
- Rubric tarball の templates ディレクトリを $RUBRIC/ にコピーする。
- Rubric tarball の style/rubric.css を $RUBRIC/ にコピーする。
- Rubric tarball の etc/rubric.yml を $RUBRIC/ にコピーして環境に合わせて編集する。
- データベースを初期化する。0.140 には makedb.pl が同梱されていないので、0.13_01 の bin/makedb.pl を参考に perl -MRubric::DBI::Setup -e 'Rubric::DBI::Setup->setup_tables' で初期化する。ちなみに 0.140 付属の rubric コマンドで rubric db -s してみたが、これはうまく動かなかった。
- 必要に応じて .htaccess を作成・編集し rubric.cgi を CGI プログラムとして実行できるようにする。またその他アクセスされたくないファイルを deny するようにしておく。
これで OK。
rubric.cgi にアクセスしページが表示されればひとまず成功。 メニューの「register」から、ユーザ登録する。 確認用のメールが届くはずだが、面倒くさいのでこれを待たずに
rubric user -a ユーザ名
でアクティベートする。
Rubric の HTML フォームからのブックマーキングは成功し、うまく動いているようである。 ただし、日本語の処理はどうもよくない。 title や description が化ける。 惜しい。
基本的には UTF-8 ベースでうまくいきそうなのだが、どこかで化けるようだ。 ちょっと手を入れれば直るかなと思ったが、化けるところと化けないところとがあるので逆に直す場所が多そうなので今日はやめておくことにした。
とりあえず Rubric はおいておいて、他のものも試してみることにするか。
- Debian GNU/Linux に Hyper Estraier 1.2... (2006-05-31)
- Hyper Estraier で社内 Web コンテンツ検索 (2006-06-01)
- DiKicker の出力する HTML コードを小さく (2006-10-05)
- Linux で使えるデスクトップ検索ツール Beagle でローカルファイ... (2006-08-08)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
2006年7月23日 (日)
■ JavaScript でのプログラミングやっぱり面倒くさい

JavaScript の勉強がてら「お互いに URL でリンクしている XML ファイルセットの簡易ブラウザ」を書き始める。
この間使い始めた Prototype を使って多少楽ではあるものの、それでもやっぱり面倒くさい。 コードを修正するたびに Web ブラウザで動作確認をするという流れが問題だな。
単体テストコードを書いて SpiderMonkey でテストできるかなと思ったが、document オブジェクトとかないし。
やはり JsUnit でテストを書くのが一番かな。
それと JavaScript (Web ブラウザ)の DOM API の情報がまとまっているものないかな。 Perl の XML::DOM の気分で書くといろいろ名前が違っていてうまく動かず、切ない。
- 早速 reStructuredText から LaTeX へのコンバータを書く (2005-11-24)
- Google Analytics から TSV エクスポートしてキーワード... (2007-11-18)
- MAILPIA による Twitter リプライチェック (2008-11-18)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- SpiderMonkey の素のインタプリタでは CGI プログラムには役立たず (2006-12-11)
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月3日 (金)
■ DiKicker に n 年日記機能を追加

久しぶりに DiKicker に機能追加。
@ n 年日記機能
hns で書いていた旧 Web 日記である Naney's Diary の記事を nDiki に移すにあたり、n 年日記にあたる表示がなくて困るので実装した。
最近はぱったり「過去の今ごろ」を書かなくなったけれど、たまには n 年日記を見て振り返るのも悪くない。
n 年日記へのリンクをどこに置くか迷ったが、とりあえず1日の一番最後に置いてみた。 tDiary テーマとの兼ね合いもあって思案中。
@ diary-article:
記事書き用には
[[diary-article:記事ID]]
という記法を追加。 今までは他の記事へのリンクは URL で指定するしかなかったのだけれど、これだと可搬性がないしスマートでなかったので、あわせて実装してみた。
過去記事も全部この書き方に直したいけれど、それなりに数があるので面倒くさい。 もちろん今のままでも問題はないんだけれど。
過去の(膨大|それなり)のデータをいつまでも利用できるようにシステムを維持することの重要性(と手間)を再確認。
- 21:00 [ nDiki ] hnsからDiKickerへ (2004-02-22)
- はいぱー日記システムで日記を開始 (2001-05-11)
- hnsのキャッシュを有効に (2004-03-03)
- 私的10大ニュース2004 [ web ] (2004-12-31)
- nDiki に「はてなスター」をつけてみた (2007-07-11)
2006年11月10日 (金)
■ WiKicker でドメイン名なしの URL でセッションがはれなかった理由

http://example/wiki
のように、ホスト部がドメイン名を含まないホスト名のみの URL でアクセスした場合、WiKicker では cookie ベースのセッション管理がうまく動かなかった。
cookie の仕様では、cookie の domain 属性で指定できる文字列はピリオドをいくつか含まなければならないことになっている。
しかし、ホスト名だけでアクセスしたサーバへは Web ブラウザは cookie を送らないというのは誤解。 domain 属性が省略されている cookie の場合は (アクセスするサーバの名前に含まれているピリオドの数が条件を満たしていなくても)ちゃんと cookie を発行したサーバへリクエストと一緒に送ってくれる。
WiKicker で何で駄目か確認したら、configuration オブジェクトの「cookie の domain 属性を決めるメソッド」で、「cookie.domain というプロパティ設定があればそれを」、「無ければ HTTP_HOST 環境変数の値を」 domain 属性で使う値として返すようになっていたから(って書いたのは昔の自分)。
次回のリリースで修正。
- WiKicker における PageName 最長文字数 (2006-06-10)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
- WiKicker 0.31 リリース - s キー問題を修正 (2006-05-28)
- FoxyProxy と autossh で社内 Web ページを閲覧 (2006-06-03)
2006年11月28日 (火)
■ Subversion で間違えてディレクトリをごっそり消してコミットしてしまった時

今日のプロジェクト成果物とりまとめを前に昨日、メンバの1人が trunk 直下の2年半分のファイルが入っているプロジェクトディレクトリをなぜか削除してコミット。
朝きたら過去のリビジョンをエクスポートして再度追加して戻したとかで、全部履歴が切れてしまっていた。作業ディレクトリも全部入れ替わり。
こういう時は過去のリビジョンからの copy をすべし。
- 履歴が維持される
- 属性などもコピーされる
- 他のチェックアウト済み作業ディレクトリへの影響もなし
といった点で優れている。
@ 作業ディレクトリを使って消したディレクトリを戻す
svn copy --revision R URL . svn commit -m "Resurrected dir1 from revision R"
ここで R は間違えて消してコミットしたリビジョンの1つ前のリビジョン。 URL は削除したディレクトリの URL。
実行例:
# テスト用ディレクトリを作る mkdir /tmp/svntest mkdir /tmp/svntest/work # テスト用リポジトリを作る svnadmin create /tmp/svntest/repos --fs-type fsfs # テスト用作業ディレクトリでファイルを作成 cd /tmp/svntest/work mkdir trunk branches tags svn import . file:///tmp/svntest/repos --message 'Initial repository layout' rm -r branches tags trunk svn checkout file:///tmp/svntest/repos/trunk cd trunk svn mkdir dir1 echo test1 > dir1/test1.txt echo test2 > dir1/test2.txt svn add dir1/test1.txt dir1/test2.txt svn commit -m "Add dir1" echo test3 > dir1/test2.txt svn commit -m "Update dir1/test2.txt" # 消してコミットしてしまう!!! svn remove dir1 svn update svn commit -m "remove dir1" # 元に戻す svn copy --revision 3 file:///tmp/svntest/repos/trunk/dir1 . svn commit -m "Resurrected dir1 from revision 3"
@ リポジトリ上で直接戻す
svn copy --revision R URL1 URL2
ここで R は間違えて消してコミットしたリビジョンの1つ前のリビジョン。 URL1 は削除したディレクトリの URL。URL2 はその親ディレクトリの URL。
実行例:
# テスト用ディレクトリを作る mkdir /tmp/svntest mkdir /tmp/svntest/work # テスト用リポジトリを作る svnadmin create /tmp/svntest/repos --fs-type fsfs # テスト用作業ディレクトリでファイルを作成 cd /tmp/svntest/work mkdir trunk branches tags svn import . file:///tmp/svntest/repos --message 'Initial repository layout' rm -r branches tags trunk svn checkout file:///tmp/svntest/repos/trunk cd trunk svn mkdir dir1 echo test1 > dir1/test1.txt echo test2 > dir1/test2.txt svn add dir1/test1.txt dir1/test2.txt svn commit -m "Add dir1" echo test3 > dir1/test2.txt svn commit -m "Update dir1/test2.txt" # 消してコミットしてしまう!!! svn remove dir1 svn update svn commit -m "remove dir1" # 元に戻す svn copy --revision 3 file:///tmp/svntest/repos/trunk/dir1 \ file:///tmp/svntest/repos/trunk -m "Resurrected dir1 from revision 3" svn update
- 外部定義か作業ディレクトリを分けるか、trunk にブランチか (2005-01-31)
- Debian GNU/Linux で Dropbox (2008-09-16)
- Apache でミラー proxy (2002-04-17)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- 飲めば飲むほど強くなる Spurl (2005-02-06)
2006年12月5日 (火)
■ マウスオーバーでリンク先をアドレスバーに表示する Firefox 拡張機能

Firefox に拡張機能を入れているうちに、下部のステータスバーはアイコンやら情報表示やらで8割方埋まってしまっている。 ノート PC だと画面も狭いので、ステータスバーにほとんど残りスペースがない。
このためページ中のリンクにマウスを乗せた時にステータスバーに表示されるリンク先 URL が、先頭のちょろっとだけになってしまっており、どこにリンクされているか確認できなくなってしまってちょっと不便である。
そこで Fission 0.8.6 という拡張機能を入れみた。
Safari 風にアドレスバーにプログレスバーを表示するのがメインの機能であるが、オプションでアクティブリンク・マウスオーバーリンクをアドレスバーに表示するように設定することができる。
これを有効にすると、リンクにマウスを乗せた際にアドレスバーでリンク先を確認することができる。
ちょっとした機能だけれど、かなり便利。
(プログレスバー自体はタブ自身に表示されるように既にしてあるためそれほど有り難みがない)
- マウスを使うようになったので Firefox で マウスジェスチャを使う (2006-02-26)
- Linux 母艦ノート PC を使わずに仕事ができるかチャレンジ (2007-08-20)
- Iceweasel 2.0 (Firefox 2.0) にほぼ無事移行終了 (2006-11-27)
- Hyper Estraier で社内 Web コンテンツ検索 (2006-06-01)
- FoxyProxy と autossh で社内 Web ページを閲覧 (2006-06-03)
スポンサード リンク
■よく検索されるキーワード
torrent(109) x31(45) thinkpad(31) 動画(29) 提案書(26) mp980(24) 手帳(24) windows(23) linux(23) 画像(21) 使い方(21) リフィル(21) debian(20) usb(20) tc-1(19) perl(19) 筆まめ(18) 壁紙(17) ほぼ日手帳(16) 冷蔵庫(14) ドラマ(13) wiki(13) 書き方(12) ダイソー(12) システム手帳(12) 宮根誠司(12) ノート(11) so905ics(11) 無印(11) バッグインバッグ(11) 映画(11) 設定(10) 修理(10) 宮根(9) ssh(9) a6(9) ほぼ日(9) 黒田征太郎(9) バッグ(9) gmail(8) 感想(8) 娘(8) f-01a(8) メモリ(8) gtd(8) ブログ(8) nikon(8) allinanchor:*.torrent(8) ボールペン(7) 方眼(7) ポイント(7) 4c(7) ヨドバシカメラ(7) ケース(7) twitter(7) apache(7) ht-01a(7) ヨドバシ(7) ubuntu(7) truecrypt(7) n-02a(7) 作り方(7) minolta(7) af(6) インストール(6) ガントチャート(6) mp3(6) zippo(6) hdd(6) emacs(6) レビュー(6) カバー(6) vq1005(6) 日本語(6) ハクキンカイロ(6) 無印良品(6) グレゴリー(6) 交換(6) nikkor(6) pixus(6)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.350702s / load averages: 0.23, 0.38, 0.32
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク