nDiki : WWW
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 のアイコンを Perl スクリプトで更新する (改) (2009-03-20)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- CGI プログラム、Out of memory! に泣く (2001-01-04)
- ホームページ・ビルダーのサイト転送を secure に (2002-04-16)
- はいぱー日記システムで日記を開始 (2001-05-11)
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/16BASE | 128x192 |
| 1/4BASE | 256x384 |
| BASE | 512x768 |
| 4BASE | 1024x1536 |
| 16BASE | 2048x3072 |
そういえば、随分昔に買った Kodak のデジタルスチルカメラ DC50 は BASE サイズのピクセルサイズだった。
| サイズ | ピクセル数 | 用途 |
| 64x96 | サムネイル | |
| 1/16BASE | 128x192 | 文章中のちょっとした挿入 |
| 1/4BASE | 256x384 | フォトギャラリ用(解像度 800x600 用) |
| BASE | 512x768 | フォトギャラリ用(高解像度または、選択時のみ) |
あたりが妥当だと思う。
規格としては FlashPix というものもあるが、これの基本の大きさはまだよく知らない。これも倍々系列のはずだけど。BASE サイズ可変なのかな?
- モンベルクラブ渋谷店 (2004-08-07)
- 秋葉原駅から東京駅まで写真散歩 (2005-02-12)
- Flickr の写真を自動的に Twitter アイコンにする (2008-03-13)
- フォト イメージング エキスポ 2005 (2005-03-18)
- ST.JAMES'S CLUB 迎賓館 (2003-02-09)
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日追記)
- Linux で使えるデスクトップ検索ツール Beagle でローカルファイ... (2006-08-08)
- Java Web Start と Basic 認証 (2004-06-21)
- Apache Proxy で アンテナの ?%MM%%DD%%HH%%TT... (2001-10-02)
- Evernote 使用開始 (2009-03-03)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
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日追記)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- [ 日記 ] SpeedyCGI による、同時処理数制御 (2004-01-20)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
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
(7200rpm, UltraATA/100, FDB) 80GB を2台。 購入。
@ GATEWAY のPCへ
以前私が開発用 Windows BOX として使っていたPCをサーバにあてることになっている。 フタを開けて2台はいっているHDD(13GB と 60GB)を抜いて買ってきた Deskstar と交換。 内蔵ベイのディスク交換のためベイごと抜かなければならないので面倒。
@ Debian GNU/Linux
インストール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
でブート。これでめでたく認識。 ここで今日はそろそろタイムアウト。 続きはまた明日。
- QEMU を使って Debian GNU/Linux 上で Windows... (2005-04-08)
- [ Debian ] GRUB でソフトウェアRAID1 ブート設定 (2004-01-05)
- DynaBook SS 3440を再セットアップして里子に (2004-03-06)
- ThinkPad X200 と御対面 (2009-11-19)
- クラッシュは突然に - DAR の使用を再検討 (2009-01-06)
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 ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。
まずは
- PAR
- PAR::Repository
- PAR::Repository::Client
- PAR::Repository::Query
- PAR::Dist
- PAR::Packer
あたりをインストールし準備 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
@ 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 リポジトリで集中管理するというのもちょっと魅力的である。
- [ Perl ] PDL::PP で C extension を書く (2004-02-19)
- 自前 PPM リポジトリの管理 (2006-07-03)
- ActivePerl をやめて Strawberry Perl へ (2009-08-25)
- ActivePerl 5.8.9 build 825 + MinGW 5.... (2009-02-22)
- ActivePerl で Ming (2005-02-23)
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 のフィード登録も整理できるといいんだけれど、さすがにそれは無理か。
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- 今日のさえずり - くるぴかポッチャマ廻しにくい (2009-12-27)
- 今日のさえずり - Twitter 日本語表示みた (2008-04-23)
- 今日のさえずり - 「コメ兵」を「ベイヘイ」っていうな (2009-03-19)
- 今日のさえずり - アダルト版 mixi ってしってますか? (2007-12-17)
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 ]
- Flickr の写真を自動的に Twitter アイコンにする (2008-03-13)
- Twitter のアイコンを Perl スクリプトで更新する (2008-03-13)
- 今日のさえずり - 「コメ兵」を「ベイヘイ」っていうな (2009-03-19)
- mirror-2.9, put の chmod 不具合 (1999-01-19)
- ヨドバシカメラのデジカメプリントの品質に満足 (2008-03-28)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラ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)




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