トップ(最新)

nDiki : WWW

WWW - World Wide WebWeb

スポンサード リンク

Related term

1999年1月19日 (火)

mirror-2.9, put の chmod 不具合 このエントリーを含むはてなブックマーク

スポンサード リンク

WWW ページ管理の仕事で mirror 2.9 を利用しているのだが、いままでアップロード(put)時にサーバ側で chmod がうまくできないでいた。 相手 FTP サーバは FTP server (Version wu-2.4(7) Tue Jun 9 21:37:03 JST 1998)。 ftp で chmod すると

 501 CHMOD: Mode value must be between 0 and 0777

というエラーになってしまう。 どうやら Perl の関数でローカルのファイルの mode を取得した時のものをそのまま送ってしまっているのが問題のようだ。

mirror の 3419行目

 # Convert from octal
 # Suggested patch to limit bits being set
 # $mode = $mode & 0777; ここ!

のコメントマークを外して有効にすると chmod 成功するようになった。

◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。


[ 1月19日全て ]

1999年9月9日 (木)

WWW で公開する写真の適当なサイズ このエントリーを含むはてなブックマーク

ここ最近写真を撮っている。 最近旅行にも行ったし、そろそろ(あまりないのだが)気に入った写真等を WWW で公開しようと思うのだが……。

さて、この時画像の大きさ(画素数)をいくつにするべきか。 もちろん、ばらばらでもいいのだが、整理したり一覧を作成する時には同じ大きさに統一している方が扱いやすい。 また WWW で公開する場合は、ファイルサイズにも影響してくる。 見ている人のディスプレイの解像度設定も関係するが、こちらはまちまちなので、いくつか用意するか独断と偏見で選ぶしかないのかもしれない。

35mm フィルムは 36mm x 24mm で 3:2。 一方、PC で使用されているのは 640x480、800x600、1024x768 等、 4:3 が多い。 これがまたある意味悩みの種でもある。 4:3 の方が壁紙等にする場合は相性がいい。

まぁここでは 35mm ということで 3:2 を選択。 あとはうまく倍々系列を選べばよい。 ちょうどフォトCDの規格がうまくできているので、このサイズを利用するのがいいかもしれない。

サイズピクセル数
1/16BASE128x192
1/4BASE256x384
BASE512x768
4BASE1024x1536
16BASE2048x3072

そういえば、随分昔に買った Kodak のデジタルスチルカメラ DC50 は BASE サイズのピクセルサイズだった。

サイズピクセル数用途
64x96サムネイル
1/16BASE128x192文章中のちょっとした挿入
1/4BASE256x384フォトギャラリ用(解像度 800x600 用)
BASE512x768フォトギャラリ用(高解像度または、選択時のみ)

あたりが妥当だと思う。

規格としては FlashPix というものもあるが、これの基本の大きさはまだよく知らない。これも倍々系列のはずだけど。BASE サイズ可変なのかな?


[ 9月9日全て ]

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

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

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

Process Time: 0.025151s / load averages: 0.20, 0.20, 0.15
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)