nDiki : WWW

WWW - World Wide WebWeb

2000年9月8日 (金)

Linbot の文字化け、とりあえず delegate で対応

2000年8月25日メモした WWW リンクチェッカ Linbot。 便利だが、日本語が化ける。 ということで、とりあえず delegate をかませて fetch されてくるものを日本語 EUC に統一してしまう事に。

 $/usr/sbin/delegated -P8084 FTOCL=-euc SERVER=http PROXY=localhost:8080:*

として delegated を起動。 Linbot の proxy で 8084ポート指定して、WWWOFFLE と Linbot の間に delegated をかます。

これでとりあえず Linbot の出力結果で日本語タイトルが化けなくなった。 delegate 使うの初めてだけど、こんな感じでいいのかな?

ちょっと気になるのは、delegate でひっかかるページ(とても時間がかかるページ)があるということ。 普通の Web ブラウザから、上記起動の delegate 経由でアクセスしてもひっかかる。 WWWOFFLEオフラインにしているからスパッっと返ってくるはずなんだけど。 delegate が何かのタイマウト待ちでもしているんだろうか。

追記

やはり遅かったのは名前解決のタイムアウト待ちで、delegated のオプションに RESOLV="" としておけば、とりあえず名前をひかなくなる。(2000年9月11日追記)

スポンサード リンク
[ 9月8日全て ]

2001年1月1日 (月)

WWW::Search、Namazu2 用実装開始

Perl のモジュールでサーチエンジンへのインタフェース WWW::Search がある。これの Namazu2 用のモジュールを作成開始(というか、以前に作ったものを改良開始)。

これを使って各サーバ上存在する Namazu2 へのメタサーチでも作ろうと思う。

[ 1月1日全て ]

2001年1月3日 (水)

CPAN.pm でごそっと Perl モジュールインストール

1月1日に作り始めた WWW::Search 用 Namazu2 モジュールと、それを使ったメタサーチCGIがある程度できたので、本サイトに設置しようかと考えた。

WWW::Search モジュールをサーバ上にインストールしなければならない。 WWW::Search が別のモジュールに依存していて、さらにそのモジュールが別のモジュールに依存していて……ということでイモヅル式に必要なモジュールが結構ある。 最初は一つづつ make していこうかと思ったのだが、やはり面倒なのとサーバーから CPAN ミラーまでかなり近かったので、CPAN モジュールを使ってインストールする事に(CPAN モジュールはネットワークが細いとちょいと厳しい気がする)。

 >setenv PERL5LIB $HOME/local/lib/site_perl
 >perl -MCPAN -e shell
 Parameters for the 'perl Makefile.PL' command? のところで
 PREFIX=$HOME/local INSTALLSITELIB=$HOME/local/lib/site_perl INSTALLMAN3DIR=$HOME/local/man/man3 と入力
 install WWW::Search
 install Jcode

$HOME は実際にはホームディレクトリを指定。Jcode.pm もいれておく。 これでごそっとインストール終了。 途中 Perl 5.6 までいれようとするのでこれは Ctrl-C で飛ばす(他にいい方法があるかな?)。

[ 1月3日全て ]

2001年1月4日 (木)

CGI プログラム、Out of memory! に泣く

昨日Web サーバWWW::Search モジュール、拙作 WWW::Search::Namazu2 をインストールNamazu メタサーチ CGI も準備万端。手元でもきちんと動作している。

Web サーバ上に CGI プログラムをセットアップ。 入力ページもきちんと出た。 が、検索させると結果がでない。 Apacheエラーログを見ると……Out of memory!

無限ループかなにかに落ちるところはないんだけどなぁ……。 いろいろコネクリまわしたが、Out of memory! は解消できず。 WWW::Search モジュールを手でいじって、使わないモジュールのロードをおさえたりすると、ちょっと先まで進むようになるがやはり Out of memory!

モジュール間の相性でメモリを食いすぎている……なんて事もないだろうなぁ。

 $ulimit -a
 cpu time               (seconds, -t)  unlimited
 file size           (512-blocks, -f)  unlimited
 data seg size           (kbytes, -d)  524288
 stack size              (kbytes, -s)  65536
 core file size      (512-blocks, -c)  unlimited
 max memory size         (kbytes, -m)  unlimited
 locked memory           (kbytes, -l)  unlimited
 max user processes              (-u)  4115
 open files                      (-n)  8232

の限界を越えたか? サーバのメモリはさすがに使いきってないようだし。 バーチャルサーバだけに1プロセスがメモリ食いすぎると(他人にされると自分も)困るので理解できるが、ちと苦しいなぁ。

Perl をやめる」という案は「Perl モジュール開発」と相反するから却下。

追記

2001年5月6日に、Apache の設定で limit がかけられているらしい事が判明。 (2001年5月6日追記)

[ 1月4日全て ]

2002年1月4日 (金)

23:30 本サイトの画像を他サーバに飛ばす [www.naney.org]

本サイトは容量100MBなのだが、(プログラムインストールしたり、ログがあったりで)結構容量も埋まってきた。 ということで、コンテンツで比較的容量を食っている Photo Gallery画像データを順次、プロバイダの「ユーザホームページサービス」に移すことに。

WWWブラウザで「HTML画像が同じサーバ上にないとブロック」する設定にされちゃうと見れなくなるがいたしかたないか。

以前から、「そのうち移さねば」とは思っていたのだが自作メンテツールの改造も必要だったのでなかなか手つかずになっていた作業。 ちょちょっとツール修正。汚なくハードコーディングとかしてごまかす。

しかし、ホスティングサーバ 100MB に対してプロバイダのユーザホームページサービスが追加料金なしで 50MB。 ホスティングサーバ、もっとサービスしてくれないかな。

[ 1月4日全て ]

2003年12月9日 (火)

[ お仕事 ] サーバ構築開始

来月OCNエコノミー回線を利用していたWWW/DNS/SMTPサーバをADSL回線側へ持っていくため、同時にサーバも新しく設定しなおすことに先日決まったのでそろそろ準備を。

最低限RAID1ぐらいを組んでおこうといろいろ検討したのだが、Debian GNU/Linux を使って安価にATAハードウェアRAID組めるカードが見つからず(FastTrak TX2000は管理ツールがWindows用しなないようだし、RockatRAID 133 は Debian GNU/Linux で使っているという情報がほどんどないし)。

で結局ソフトウェアRAIDにすることにした。

Deskstar 7K250

http://www.naney.org/personal/diary/img/2003/X/X2003-12-09-0004.jpg

(7200rpm, UltraATA/100, FDB) 80GB を2台。 購入。

GATEWAY のPCへ

Promise Ultra ATA 66 GATEWAY

以前私が開発Windows BOX として使っていたPCをサーバにあてることになっている。 フタを開けて2台はいっているHDD(13GB と 60GB)を抜いて買ってきた Deskstar と交換。 内蔵ベイのディスク交換のためベイごと抜かなければならないので面倒。

Debian GNU/Linux

GATEWAY

インストールCDでブート。HDD発見できず。 実はHDDはもともと ATA66カードで接続していたので(CD-ROMはオンボート)、このままでは認識しないと。 メニューから一旦 shell に入って、

 cat /proc/pci

で、

 Bus  0, device  13, function  0:
   Unknown mass storage controller: Promise Technology Unknown device (rev 1).
     Vendor id=105a. Device id=4d38.
     Medium devsel.  IRQ 10.  Master Capable. Latency=64.
     I/O at 0x1440 [0x1441]
     I/O at 0x1434 [0x1435]
     I/O at 0x1438 [0x1439]
     I/O at 0x1430 [0x1431]
     I/O at 0x10c0 [0x10c1]
     Non-prefetchable 32 bit memory at 0xe8000000 [0xe8000000].

と出たので、

 boot: linux ide0=0x1440,0x1436 ide1=0x1438,0x1432

でブート。これでめでたく認識。 ここで今日はそろそろタイムアウト。 続きはまた明日。

[ 12月9日全て ]

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日全て ]

2008年8月13日 (水)

Twitter の following を整理

Twitter の following をがっつり整理した。

「フォロー通知を受けた人」や「follow している人の @ 相手」や「Blog などで Twitter していると知った人」などについて add することはよくあるのだけれども、remove する機会は多くない。 たまに follows リストの上から順に見ていって「もう飽きちゃって放置状態の人」なんを remove したりするぐらい。 しかし「もう飽きちゃって」の人はもう発言していないから、自分のタイムラインには影響がなかったりする。

フォロー通知を受けてひとまず add してみた人から、逆にその後 remove されて片想い状態なんかも結構多そうだ。 それとフォロー通知を受けた時にひとまず様子見にしてしまった人ももう追加することはまずなかった。

最近話題になっている follow 数上限にひっかかるまではまあいかないのだけれど、たまには見直しておくか。

を使ってみた。WWW::Scraper は Debian パッケージがないようなので、dh-make-perl してインストール

で実行してみたところ、片想いが百数十人、片想われは spam もいて二百数十人。 follwing、followers が 六百人台だったで相思相愛は半分ぐらいって感じか。

片想いはある程度思い切って減らした。 現在の数は以下。

  • Following 460
  • Followers 662

これでタイムラインの雰囲気はどう変わるかな?

連動して Google リーダーへの Blog のフィード登録も整理できるといいんだけれど、さすがにそれは無理か。

[ 8月13日全て ]

2009年3月20日 (金)

TwitterアイコンPerl スクリプトで更新する (改)

Twitterアイコンを更新する Perl スクリプト (記事) が最近失敗することが多くなった。 どうやら同じファイル名画像アップロードするとうまく更新されないようなので、日時にもとづいたファイル名にしてからアップロードするようにしてみた。

最初に作った時から若干 Twitter のページ構造が変わってスクリプトも修正していたので、それと合わせると下記になる。

今のところ順調にアイコンチェンジできている感じだ。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use WWW::Mechanize;
 use File::Temp qw(tempdir);
 use File::Spec;
 use File::Copy;

 die "no file name" if @ARGV == 0;
 my $file_name = $ARGV[0];

 my $name     = 'ユーザ名';
 my $password = 'パスワード';

 my $mechanize = WWW::Mechanize->new();
 $mechanize->get('http://twitter.com/');
 die unless $mechanize->success;
 $mechanize->submit_form(form_number => 2,
                         fields      => {
                                    'session[username_or_email]' => $name,
                                    'session[password]'          => $password}
 );
 die unless $mechanize->success;
 $mechanize->follow_link(url => '/account/settings');
 die unless $mechanize->success;
 $mechanize->follow_link(url => '/account/picture');
 die unless $mechanize->success;

 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = localtime(time);
 my $tmpdir = tempdir(CLEANUP => 1);
 $file_name =~ /.*(\..*)$/;
 my $suffix = $1;
 my $tmp_file_name = File::Spec->catfile(
                                     $tmpdir,
                                     sprintf("%04d%02d%02d%02d%02d%02d$suffix",
                                             $year + 1900,
                                             $mon + 1, $mday, $hour, $min, $sec
                                     ));
 copy($file_name, $tmp_file_name) or die $!;
 $mechanize->submit_form(
                   form_number => 1,
                   fields => {'profile_image[uploaded_data]' => $tmp_file_name}
 );
 die unless $mechanize->success;

[ WWW::Mechanaize ]

[ 3月20日全て ]

2014年2月19日 (水)

今日のさえずり: 風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか

2014年02月19日

  • 08:41 “ベル研究所が開発するOS「Plan 9」が新たにGPLv2で公開される | SourceForge.JP Magazine” http://bit.ly/1jPdzy3
  • 09:24 iddy 終了。リンクとか外さないと。 / “【重要なお知らせ】iddyサービス終了のお知らせ | iddy 開発者ブログ” http://bit.ly/1feX5Mf
  • 09:24 7,000円台ぐらいまでで出たら即買ってもいいな。iPad 2 での FaceTime のかわりになる。もし国内で出る事があればもっと高くなるんだろうなぁ。 / “数千円で買えて携帯会社と契約不要の「Skypeスマートフォン...” http://bit.ly/1feX7Uk
  • 09:24 「運営者が飽きた」 / “iddy 終了について補足 | WWW WATCH” http://bit.ly/1m7oLnX
  • 10:35 歌うキーボード ポケット・ミク (大人の科学マガジン特別編集)とな。 http://amzn.to/1bjmkNH
  • 21:25 今作っている機能、テーブル1つで済ませるつもりだったけれど、ゴチャゴチャしてきたのでやっぱり明日分ける。
  • 22:53 “大雨・大用に日本野鳥の会バードウォッチング長靴” http://bit.ly/1cpOp4s
  • 24:29 さてこの Subversion で管理しているコードを Git 管理にするかなととりあえず svn log したら「作業コピーではありません」と出て、あれっと思ってみたら CVS/ というディレクトリが。
  • 24:33 そしてなんでこれ /var/www 以下できちんと動いているのに手動で動かすとモジュール見つからないのって思って風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか。
  • 25:03 “文字列検索コマンド「grep 2.17」リリース | SourceForge.JP Magazine” http://bit.ly/1gVu5sN
  • 25:03 “CSRF対策用トークンの値にセッションIDそのものを使ってもいい時代なんて、そもそも無かった” http://bit.ly/1kXbPTN
[ 2月19日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・PO をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.049214s / load averages: 0.40, 0.47, 0.48
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker