トップ(最新) | <前 | 次>

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;

がはやいそうです。

RFC

  • RFC1738 - Uniform Resource Locators (URL).
  • RFC1808 - Relative Uniform Resource Locators.
  • RFC2368 - The mailto URL scheme.
  • RFC2396 - Uniform Resource Identifiers (URI): Generic Syntax.

関連情報

スポンサード リンク

Related term

2006年6月1日 (木)

Hyper Estraier で社内 Web コンテンツ検索 このエントリーを含むはてなブックマーク

昨日の自分のノート PCHyper 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 できるのだけれど、FirefoxInternet Explorer からだと駄目である。

いろいろビルドしなおしてみたけれどやっぱり駄目なので、今回は結局 estmaster をやめて CGI プログラム版の UI を使うことにした。 こちらだとクローリング中は検索ができなくなってしまうけれど、夜中に cron で回すから別にかまわないか。

@ インデックスの方針

以下のような感じでクロールし、登録することにした。

  • 社内メイン Wiki、自分の社内 Blog、公開 Web サイトのトップページをクロールの種文書とする。
  • それと社内メイン Wiki の更新情報ページも種文書とする。
  • 社内のサーバ、および公開 Web サイトのみクロールするように allowrx、denyrx を設定。
  • Wiki の編集ページ等をクロールしないように denyrx を設定。
  • 1日1回深夜に cron でインデックスを更新。
  • revisit は3日に設定。
    • いくつかの種文書は -revcont 付きで estwaver を実行しても毎回巡回して欲しいのだけれど、それはいまのところできないようだ。

特定の WikiBlog 内のみを検索したい時は、検索インタフェースの方で URL を指定絞り込めば良いので、それほど規模も大きくないし全部ひとまとめにインデックス化することにした。

後は使いながら微調整していくこととしよう。

スポンサード リンク


[ 6月1日全て ]

2006年6月3日 (土)

FoxyProxyautossh で社内 Web ページを閲覧 このエントリーを含むはてなブックマーク

メンテナンス等のため社内 Web サイトを社外から閲覧する必要がある場合 SSSH の port forwarding を使ってアクセスしていたのだが、その都度 Firefoxproxy を変更したりするのが面倒だった。

そんな折 FoxyProxy という Firefox 拡張機能があることを知った。 これは登録された URL パターン毎に、自動的に proxy を切り替えてくれるという優れもの。 これは便利。

autosshport forwarding (SOCKS サーバ)を開いておくようにして、社内のホスト名/IP アドレスURLの時はそこを経由するようにしておくと、いつでも Firefox から閲覧できるようになる。

 autossh -N -f -D8090 <中継するホスト名>

[ 6月3日全て ]

2006年6月10日 (土)

WiKicker における PageName 最長文字数 このエントリーを含むはてなブックマーク

WiKicker では PageName を エンコードした文字列を URI に埋め込んだり、サーバで保存する際のファイル名にしたりしている。 このため、PageName の最長文字数はそれらの最長文字数に依存しているはずである。

今まで確認を後回しにしていたのだが、新しい機能の追加の際に確認しておく必要があるので調査してみた。

@ WiKicker の実装

WiKicker の実装がらみとして最長を決める要素としては

がある。

@ 各仕様等による制約

  • 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 に制約チェックを入れることにしよう。 そのうち。


[ 6月10日全て ]

2006年7月22日 (土)

Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 このエントリーを含むはてなブックマーク

入社してから社内情報共有の一環として

といろいろ手をつけてきた。 次に狙っているのは SBS である。

Wiki社内 Blog に書くほどではないけれどメモ程度にブックマークしておきたい URL を、気軽に晒せるようにするのが目的。

はてなブックマークのような公開サービスは

  • タグ・コメント・傾向などが外に出るのはよろしくない
  • あるいは、それを気にして活用されない
  • そもそも社内リソースについてはブックマークできない

という点から、今回は利用できない。

ということで社内に SBS を設置したい考えている。

最初は Scuttle にしてみようと思ったのだが、PHP ベースであるのと MySQL を使うというところで気遅れしている。 いや SQLite でもいけそうらしいということで、実は Debian でちょっと試そうとしたのだが、テーブル作成の SQLMySQL 用で、これを修正するのが面倒なので断念。

次に Perl + SQLite で動く Rubric を試してみることにした。

@ Rubric 0.140

Rubric は CPAN にあがっているので CPAN.pm から install Rubric でインストールできる。 モジュールをインストールしたら、セットアップ。

  1. CGI プログラムを動かすディレクトリを決める (以下 $RUBRIC)
  2. Rubric tarball の bin/rubric.cgi を $RUBRIC/ にコピーし、必要なら #! を修正する。
  3. Rubric tarball の templates ディレクトリを $RUBRIC/ にコピーする。
  4. Rubric tarball の style/rubric.css を $RUBRIC/ にコピーする。
  5. Rubric tarball の etc/rubric.yml を $RUBRIC/ にコピーして環境に合わせて編集する。
  6. データベースを初期化する。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 してみたが、これはうまく動かなかった。
  7. 必要に応じて .htaccess を作成・編集し rubric.cgi を CGI プログラムとして実行できるようにする。またその他アクセスされたくないファイルを deny するようにしておく。

これで OK。

rubric.cgi にアクセスしページが表示されればひとまず成功。 メニューの「register」から、ユーザ登録する。 確認用のメールが届くはずだが、面倒くさいのでこれを待たずに

 rubric user -a ユーザ名

でアクティベートする。

Rubric の HTML フォームからのブックマーキングは成功し、うまく動いているようである。 ただし、日本語の処理はどうもよくない。 title や description が化ける。 惜しい。

基本的には UTF-8 ベースでうまくいきそうなのだが、どこかで化けるようだ。 ちょっと手を入れれば直るかなと思ったが、化けるところと化けないところとがあるので逆に直す場所が多そうなので今日はやめておくことにした。

とりあえず Rubric はおいておいて、他のものも試してみることにするか。


[ 7月22日全て ]

2006年7月23日 (日)

JavaScript でのプログラミングやっぱり面倒くさい このエントリーを含むはてなブックマーク

JavaScript の勉強がてら「お互いに URL でリンクしている XML ファイルセットの簡易ブラウザ」を書き始める。

この間使い始めた Prototype を使って多少楽ではあるものの、それでもやっぱり面倒くさい。 コードを修正するたびに Web ブラウザで動作確認をするという流れが問題だな。

単体テストコードを書いて SpiderMonkey でテストできるかなと思ったが、document オブジェクトとかないし。

やはり JsUnit でテストを書くのが一番かな。

それと JavaScript (Web ブラウザ)の DOM API の情報がまとまっているものないかな。 PerlXML::DOM の気分で書くといろいろ名前が違っていてうまく動かず、切ない。


[ 7月23日全て ]

2006年10月5日 (木)

DiKicker の出力する HTML コードを小さく このエントリーを含むはてなブックマーク

容量超過につき www.naney.org の容量削減中。

中でも結構な容量を食っているのが、nDiki (DiKicker) の HTML 変換済み記事データベースである。 毎回レンダリングし直すと遅いので、1度 HTML フラグメントに変換したら Bereley DB ファイルに保存しているのだが、これがどうしても大きくなってしまうのである。

NaneyOrgWiki (WiKicker) もそうなのだが、 UTF-8 を使用しているため日本語中心のテキストが思った以上にデカくなるのも痛い。

ということで生成する HTML フラグメントをちまちま小さくするようにすることにした。 チェックしてみると自動リンクURL が絶対 URL になっているではないか。 まずはこれを短い URL を吐くように書き直し。

焼け石に水な感もあるが、ちょっとずつでも短くしていきたい。


[ 10月5日全て ]

2006年11月3日 (金)

DiKicker に n 年日記機能を追加 このエントリーを含むはてなブックマーク

久しぶりに DiKicker に機能追加。

@ n 年日記機能

hns で書いていた旧 Web 日記である Naney's Diary の記事を nDiki に移すにあたり、n 年日記にあたる表示がなくて困るので実装した。

最近はぱったり「過去の今ごろ」を書かなくなったけれど、たまには n 年日記を見て振り返るのも悪くない。

n 年日記へのリンクをどこに置くか迷ったが、とりあえず1日の一番最後に置いてみた。 tDiary テーマとの兼ね合いもあって思案中。

@ diary-article:

記事書き用には

 [[diary-article:記事ID]]

という記法を追加。 今までは他の記事へのリンクは URL で指定するしかなかったのだけれど、これだと可搬性がないしスマートでなかったので、あわせて実装してみた。

過去記事も全部この書き方に直したいけれど、それなりに数があるので面倒くさい。 もちろん今のままでも問題はないんだけれど。

過去の(膨大|それなり)のデータをいつまでも利用できるようにシステムを維持することの重要性(と手間)を再確認。


[ 11月3日全て ]

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 属性で使う値として返すようになっていたから(って書いたのは昔の自分)。

次回のリリースで修正。


[ 11月10日全て ]

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 は削除したディレクトリの URLURL2 はその親ディレクトリの 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

[ 11月28日全て ]

2006年12月5日 (火)

マウスオーバーでリンク先をアドレスバーに表示する Firefox 拡張機能 このエントリーを含むはてなブックマーク

Firefox に拡張機能を入れているうちに、下部のステータスバーはアイコンやら情報表示やらで8割方埋まってしまっている。 ノート PC だと画面も狭いので、ステータスバーにほとんど残りスペースがない。

このためページ中のリンクにマウスを乗せた時にステータスバーに表示されるリンク先 URL が、先頭のちょろっとだけになってしまっており、どこにリンクされているか確認できなくなってしまってちょっと不便である。

そこで Fission 0.8.6 という拡張機能を入れみた。

Safari 風にアドレスバーにプログレスバーを表示するのがメインの機能であるが、オプションでアクティブリンク・マウスオーバーリンクをアドレスバーに表示するように設定することができる。

これを有効にすると、リンクにマウスを乗せた際にアドレスバーでリンク先を確認することができる。

ちょっとした機能だけれど、かなり便利。

(プログレスバー自体はタブ自身に表示されるように既にしてあるためそれほど有り難みがない)


[ 12月5日全て ]

スポンサード リンク

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

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)

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

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)