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

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年12月12日 (火)

PAR::Repositoryビルド済み Perl モジュールをネットワーク配信 このエントリーを含むはてなブックマーク

@ 実行可能ファイル作成としての PAR

PAR といえば Perl スクリプトを実行可能ファイル(Windows なら EXE 形式ファイル)に変換するモジュールとして有名である。

ちなみに実行可能ファイルを作成する部分はは PAR 0.97 より PAR-Packer パッケージに分けられ、PAR 自体はインストールしやすい pure Perl なパッケージになっている。

@ PAR モジュールアーカイブからのローダとしての PAR

PAR が提供するもう一つの(こちらが本来はメイン?)機能は、プログラムの実行時に必要な Perl モジュールPAR ファイルと呼ばれる Perl モジュールアーカイブファイルからロードする機能である。 XS モジュールなどもコンパイルすることができるどこかの環境で1度ビルドして PAR ファイルにしておけば、同じアーキテクチャのホスト上でそのまま利用することができる。

@ PAR リポジトリ

ロードしたい PAR ファイルはファイルパスだけではなく URL でも指定することができ、必要な時にオンデマンドでフェッチさせることができる。 これを使えば Perl プログラムの集中管理可能だ。

PAR 0.951 からは PAR リポジトリというコンセプトが追加され、パッケージ毎に作った PAR ファイルをサーバ上(あるいはローカル)のリポジトリに蓄積してオンデマンドでロードできるようになった。

個別に PAR ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。

まずは

あたりをインストールし準備 OK。

@ 1. PAR リポジトリを作成する

最初に PAR-Repository に含まれている parrepo で。

 parrepo create -r /tmp/PAR

PAR リポジトリファイルの中にはデータベースファイルが作成されるが、これは DBM::Deep というアーキテクチャ非依存のものを使っているので、Linux でも Windows でもどちらからでもアクセス可能である (つまり Linux 上でリポジトリをメンテできるということだ)。

@ 2. Perl パッケージを PAR ファイル化する

次に必要な PAR ファイルを作成する。 作成したいパッケージを展開してビルドし、blib ができている状態で PAR::Dist を使ってパッケージ化する。

 perl Makefile.PL
 make
 make test
 perl -MPAR::Dist -e blib_to_par

例えば ActivePerl*1 上で WWW-Mechanize-1.20 を PAR ファイル化すると

 WWW-Mechanize-1.20-MSWin32-x86-multi-thread-5.8.8.par

というファイルが作成される。

普段から ActivePerl で必要なライブラリは基本的に自前で PPM パッケージ化して、動作確認した上で PPM リポジトリに蓄積するようにしているので、合わせて次の手順でパッケージを作ることになる。

 perl Makefile.PL
 nmake
 nmake test
 perl -MPAR::Dist -e blib_to_par
 make_ppm

*1ここでは Windows 上の

@ 3. PAR リポジトリPAR ファイルを登録する

PAR ファイルができたら parrepo でリポジトリに登録する。

 parrepo inject -r /tmp/PAR -f xxx.par

@ 4. PAR リポジトリ上のライブラリを使用してみる

例えば先ほどの WWW::Mechanize がリポジトリに登録されている状態で

 #!/usr/bin/perl
 use PAR { repository => 'file:///tmp/PAR/' };
 use WWW::Mechanize;
 my $mech = WWW::Mechanize->new;
 $mech->get('http://www.example.com');
 print $mech->content;

というスクリプトを書いて実行すると、PAR リポジトリから WWW::Mechanize がロードされて正しく実行される。

ここでリポジトリを Web サーバアップロードして、repository のところに URL を指定するようにすることもできる。 例えばリポジトリを http://www.example.com/PAR/ に配置したとすると

 #!/usr/bin/perl
 use PAR { repository => 'http://www.example.com/PAR/' };
 use WWW::Mechanize;
 my $mech = WWW::Mechanize->new;
 $mech->get('http://www.example.com');
 print $mech->content;

と書き換えることで、インストールしていない WWW::Mechanize を使用できるようになる。

@ Perl プログラムを実行形式化する

先ほどの Perl スクリプトを get_top_page.pl という名前で保存して pp で実行可能ファイル化する。

 pp -o get_top_page.exe -M PAR::Repository::Client get_top_page.pl

とすれば get_top_page.exe という実行可能ファイルが作成される。 WWW::Mechanize はオンデマンドで http://www.example.com/PAR/ からフェッチされるので、アップデートが必要な場合は新しい PAR ファイルを作成してリポジトリを更新するだけでよい。 EXE ファイルを作成しなおして利用者に配付しなすといった作業も不要だ。

@ スクリプトもリポジトリにおく

さらには実行するスクリプトをも PAR リポジトリに置いておくことが可能だ。

例えば WWW-Mechanize に含まれている mech-dump をオンデマンドにフェッチして実行する実行形式ファイルは以下のコマンドで作成できる。

 pp -o mech-dump.exe -M PAR::Repository::Client \
   -e "use PAR { repository => 'http://www.example.com/PAR/', \
                 run => 'mech-dump' }"

@ まとめ

ActivePerl では PPM があるとはいえ、普通のユーザにちょっとしたプログラムを使ってもらうのに「ActivePerlインストールして、PPM パッケージインストールして、……」というのは手間すぎる。

pp で プログラムに必要なものを全てバンドルした実行形式化ファイルにするという方法ももちろんあるのだが、頻繁にアップデートするようなスクリプトの場合には、起動のための部分だけ pp で作成しておいてあとは PAR リポジトリで集中管理するというのもちょっと魅力的である。

スポンサード リンク


[ 12月12日全て ]

2007年1月12日 (金)

KDE BasKetランチャとしての使い勝手は? このエントリーを含むはてなブックマーク

Windows で使い始めた PStart というランチャーソフト、これが結構使いやすい。 当初はポータブルアプリケーション用として考えていたのだが、最近は普通に起動しっぱなしにしている。 アプリケーションの起動を登録しておいたり、フォルダや URL を放り込んだりしておけば、簡単にそれらにアクセスできる。

(ポータブルではなくて良いので)Linux ノート PC 上でも同様なランチャが無いかなと探していたところ KDE 系の BasKet というツールを発見。

PStart 同様 アプリケーション(ランチャ)、ディレクトリ、URL の登録が可能。 さらに画像やテキストなども放り込んでおくことができる。 また各項目にチェックボックスを表示させて、チェックリストとしても使うことができる。 これらはバスケットと呼ばれるまとまりごとに管理でき、タブで切り替えることができる。

うまく使えば手離せないデスクトップツールになりそうだ。


[ 1月12日全て ]

2007年1月13日 (土)

[ WiKicker ] spam検索エンジン対応に noindex、nofollow を追加 このエントリーを含むはてなブックマーク

@ <a rel="nofollow">

相変わらず www.naney.org 上の WikiForum (NaneyOrgWiki) にも毎日のようにリンク spam 書き込みがある。

気がつき次第削除と、その URL や関連キーワードの書き込み禁止文字列ブラックリストへの登録を行っているが、手間でしょうがない。

これらのリンク先に貢献するのは腹立たしいのでリンク (A 要素)へ

 rel="follow"

属性をデフォルトで設定するように WiKicker を書き換えた。 ようやく。

@ <meta name="robots" content="noindex,nofollow">

あわせて、検索エンジン対応もしていおくことにした。

編集ページや履歴ページは検索エンジンに登録してもしょうがないので、インデックスから除外されるように HTML の HEAD に

 <meta name="robots" content="noindex,nofollow">

を追加するように修正。

クエリ付きの URL のページで noindex した場合、クエリ無しや他のクエリを持つ URL のページまで一緒にインデックスから外されてしまわないかちょっと心配で、今まで保留にしていたのだけれど、Wikipedia などを見ても大丈夫のようだ。


[ SEO ]


[ 1月13日全て ]

2007年2月5日 (月)

ActivePerl 5.8.8.820PPM では ppd/tar.gz を置いただけの PPM リポジトリを使えなくなった このエントリーを含むはてなブックマーク

ActivePerl 5.8.8.819 までは .ppd と .tar.gz ファイルを置いたディレクトリを Web サーバで公開しておけば、そのディレクトリの URLPPM リポジトリとして指定して使うことができた。

これが build 820 付属の PPM だとスキャンしてくれなくなった。 リポジトリの URL を指定する際、package.xml を指定しないと駄目らしい。

@ PPM リポジトリとして必要なファイル群を生成する

PPM リポジトリとして必要なファイル群は PPM-Make に含まれている rep_summary コマンドで生成することができる。

 rep_summary --rep /path/to/ppm/repository

今後はこれで package.xml その他のファイルを生成しておくことにする。

@ 複数の PPM リポジトリ

一方複数の PPM リポジトリの扱いは良くなった。build 819 付属の PPM では、複数のリポジトリにまたがってパッケージの依存解決ができなくなっていて不便だったのだが、build 820 のものでは、以前のバージョンのもののようにまたがれるようになった。

基本的な PPM パッケージ群用と、プロジェクト毎の PPM パッケージ群用の PPM リポジトリを組み合わせて使うときに、依存解決できないと厄介だったのでこれは○。

@ PATH

build 819 のインストーラでは site\bin に PATH を通してくれないので、site にインストールしたパッケージ付属のコマンドが呼び出せず不便であった(もちろん自分で PATH を通せばよいのだが)。

build 820 のインストーラでは site\bin も PATH にいれてくれるようになった。○。


[ ActivePerl ]


[ 2月5日全て ]

2007年4月5日 (木)

Referer spam は # がお好き? このエントリーを含むはてなブックマーク

Referer spam が相変わらずきている。 今まで個別に .htaccess で拒否している。

ところでログを見ていてしばらく前から気になっていたのだが、なぜだか知らないがうちにくる Referer spam

 http://www.example.com/#

のような最後に # がついた(通常は送られてこない) Referer URL を送ってきている。

サヨウナラ。

 SetEnvIf Referer "http://[^/]+/#" denyreferer
 deny from env=denyreferer

[ 4月5日全て ]

2007年4月13日 (金)

クリッピングに便利な CMSTumblr」を使ってみる このエントリーを含むはてなブックマーク

Twitter と一緒に取り上げられることの多い Tumblr の方も試しに使ってみることにした。 一緒に取り上げられているといっても、両者は結構違うサービス。 Tumblr はどちらかというと Web コンテンツをクリッピングしていくのに便利なネットサービスだ。 Tumblr ではメディアミックスな短かめの投稿によって構成される tumblelog と呼ばれる Blog の一種を作ることができる。

Tumblr はページのテンプレート(HTML)を好きなようにいじれるのが魅力的だ。 Google AdSenseJavaScript コードなども挿入することができるので、結構好きなようにページにパーツを埋め込むことができる。

早速アカウントを作成して、tumblelog なるものを作ってみた。

まずは設定の方から。「Change settings」から設定ページに移動する。

  1. Title: tumblelog のタイトルを書く。
  2. Description (任意): tumblelog の説明を書く。
  3. URL: tumblr.com のサブドメインの URL をもらえるので、名前を入力する。ドメイン名を持っていればそれを割り当てることもできる。
  4. Theme: あらかじめ定義されているものを選べる。Custom を選択して、HTML テンプレートをいじることもできる。定義済みのものをカスタマイズしたいなら一旦そのテーマを選んで保存してから、Custom に変更する。
  5. Import Feeds: RSS フィードや ATOM フィードから自動的に記事をインポートしたい場合、Feed を登録する。例えばFlickrTwitterはてなブックマークなどへ投稿したものを自動的に Tumblr の方でインポートさせることができる。

テンプレートをいじって Twitter のバッジを貼ってみたり、テスト投稿をしてみたりしてまずは様子見。

nDiki に書くほどではないけれども、はてなブックマーク以上の言及をちょっとしたい時などのクリッピングに使ってみようかと思う。

ただ検索機能・タグ機能などは今のところ無さそうなので、書きっぱなしになってしまわないかという懸念あり。


[ 4月13日全て ]

2007年5月19日 (土)

質問する/答えるに特化したプロフィールサービス「アバウトミーβ」 このエントリーを含むはてなブックマーク

@nifty で開始された新しいプロフィールサービス「アバウトミーβ」が、Twitter で話題になっていたので、昨日の夜登録してみた。

プロフィール関連としては

  • (必須)ニックネーム
  • (必須)アイコン画像
  • 性別・生年月日・血液型・地域
  • ステータス
  • 自己紹介 (テキストと、興味(タグ))。
  • RSS フィード

など一般的なものが設定できる。 ブログパーツもあり自身の Blog に貼ることができる。 RSS フィードの表示・自己紹介での URL のリンク化・ユーザ毎にホスト名の割り当てなど、一通りくすぐられる要素が盛り込まれている。

アバウトミーの特徴は、質問する/答えるを柱とした自己表現にある。 他のユーザの質問に答えていく(自由文回答・選択肢による回答)ことで、「オレってこんな人」というのをアピールすることができる。

さらに自分でも簡単に質問を作成することができる。 基本的にアバウトミーでは「質問を作成するか」「答えるか」しかすることがない。 ランダムに出てくる質問に次から次に答えるようになっているので、自分が作った質問にもぼちぼちと回答が返ってくる。 なかなか楽しい。

気がつくとだらだらと遊び続けてしまう。

サービスとしては今後、質問の質(重複質問・マイナー質問が増えそう)と量のバランスがいい具合のところで維持できるかどうかにかかってきそうだ。


[ 5月19日全て ]

2007年6月14日 (木)

nDiki とあわせて読みたい このエントリーを含むはてなブックマーク

サイドフィード株式会社がまた新しいサービスを始めた。 今回のサービスは、自分の Blog と一緒に読まれている Blog を表示するサービス。

サービスが提供している画像Blog に貼ると、その画像に関連する Blog のタイトルが表示され、そのリンク先のページに一覧が表示される。

早速昨日貼りつけてみたところ、今日あたりから反映されるようになった。

今日の最初の頃の画像はコレ。

image:/nDiki/2007/06/awasete-2007-06-14.gif

当然非対称なので、「自分の Blog と一緒に読まれている Blog のあわせて読みたい Blog」に自分の Blog が含まれているとは限らない。でも、そうだとちょっと淋しい。

ちなみに「nDiki とあわせて読みたい」最新のリストは以下。

新しい Blog の発見につながるのはいいな。面白そうな Blog を早速巡回対象に追加してみた。

URL の最後に `/' が勝手に追加されてしまうようになっているのはちょっとマズいんじゃないかな(自分ところはあっても無くても同じ振る舞いをするからまだいいんだけれど)。


[ 6月14日全て ]

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月12日 (月)

今日のさえずり - Twitter ステータス中のキーワードを自動リンク このエントリーを含むはてなブックマーク

  • 09:52 週末会社のメールサーバを止めてあったので、今日は朝の inbox 処理が楽。 *Tw*
  • 10:46 久しぶりに message/partial なメールがきたので Mew の info をひいた。* して J。 *Tw*
  • 16:01 user_timeline RSS フィードは、認証されている/いないで中身が違うのか。認証なしだとちょっと古いのしかとれない。
  • 16:10 @yaa 情報ありがとうございます! ?dummy=dummy つけたら認証なしでも最新ステータスが取れました。
  • 17:30 ようやく、つくばのロフトほぼ日手帳2008を買った。オレンジのナイロンカバー。L:つくば[mb]
  • 18:07 今日の笑点始まりまで、MovaTwitter で逆から読み。お題を推測しながら。[mb]
  • 18:55 @yaa ふむふむ。値変えてトライしてみます。[mb]
  • 23:47 サイドバーに表示している Twitter ステータス中のキーワードを自動リンク化した。
  • 23:49 URL のリンク化を忘れてた。

[ 11月12日全て ]

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

torrent(68) perl(60) windows(51) cvs(42) linux(41) 書き方(39) ganttproject(33) アジェンダ(26) debian(25) 使い方(24) 提案書(20) サンプル(19) java(19) ドラマ(17) tc-1(17) x31(16) 壁紙(16) google(16) ほぼ日手帳(16) subversion(15) バッグインバッグ(14) ヨドバシカメラ(14) 2009(14) 設定(14) firefox(13) 秋葉原(13) ssh(13) 修理(13) バッグ(13) インストール(12) 動画(12) svn(12) usb(12) 影舞(12) ファイル(11) rcs(11) ほぼ日(11) アジェンダとは(11) wiki(11) c#(10) ダイソー(10) thinkpad(10) centos(10) 無印(9) 価格(9) 画像(9) 手帳(9) activeperl(9) apache(9) 市原隼人(9) リフィル(9) ミノルタ(9) 冷蔵庫(9) 作り方(9) tortoisesvn(9) 大井町(9) ほぼ日手帳2009(8) gmail(8) 生年月日(8) truecrypt(8) mailpia(8) so905ics(7) cgi(7) スーベレーン(7) mew(7) spidermonkey(7) emacs(7) ご査収(7) ダウンロード(7) パスワード(7) テンプレート(7) cygwin(7) chrome(7) make(7) suunto(7) gimp(7) 評判(7) gtd(7) 写真(7) 方法(7)

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

Process Time: 0.374477s / load averages: 0.37, 0.44, 0.45
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)