Perlの最近のブログ記事

最近久しぶりにperlのプログラムを見たり書いたり勉強しています。
というか覚えなおしています。

関係ないけどとあるプログラムを見ていると、子供のクラスが親にinitの内容を投げ、親がさらに親にその内容を投げ。ちぎっては投げ。ちぎっては投げ。
こうたらい回しにされているパラメータ達を見ていると、ムーディー勝山の「右から来たものを左へ受け流すの歌」を思い出します。笑


開発中ではなく、リリースされたものを見ていると本当にあっちこっちへたらい回しにされてプログラムの可読性、メンテナンス性を考えると、オブジェクト指向ってのはホントにウェブでのシステム開発に必要なんだろうか?って思う。

っていうと色んな所から反論が来そうですが、メンテナンスの際のシステム全体の信頼性はグッと上がりリスクは抑えられるメリットはあるとおもうんですけども、なんだろう前提にするポイントが多分違う。


設計書などの資料・ドキュメント類が無い事が多いから


つかこんなものを作る時間があったらその間に出来上がってしまう。
それはもちろん規模によりますが、コスト的な問題と言うより、時間的制約があって、そんな所に時間を割いている場合ではないっていう理由の方が勝ってると思います。
それとは別にソースの再利用だとか何だか崇高な構築過程第一で、実際は工数削減どころか、改修などの現場においてその複雑な構造と技術者のスキル不足によって大変なことになるOOPでの開発。
あっちのファイル読みに行って、今度はこっちの親のクラス見に行って、とやっているのは、GOTO文を見ているのと大差ないような気がしてなりません。

このように内容が複雑ならなおさら設計書等の資料は必要になってくるわけです。
どういう命名規則でメソッドが書かれてるのか意味不明な時困ります。全部暗記しろってのか。
常にソース追っかけていられるわけでもないというか1分1秒でも惜しい時が多いので、
ガチガチのオブジェクト指向ウェブプログラミングってホントうんこ。

本当にOOPでの開発がベストな選択でそれを適用しているんでしょうか?
これができる人員を確保するだけでも大変。

ちょっと話し飛びますが、スケジューリングって意味でも資料作成って言うのは実はとても重要で通常、何らかのITに限らず業務をこなす上でとても重要になってきます。

1日先の事
3日先の事
1週間先の事
1ヶ月先の事

これを見通す精度を高めていく事はどんな業務においても非常に重要ですが、
こういったトレーニングを積む機会と時間を得ることが出来ず随分な損失をしていると思います。
こういった能力が未成熟では扱える仕事に限界があるし、このような事が原因で痛い目にあっている人たちは多いんじゃないですか?


一方、アジャイルなんてのがあり、これはこれでいいような気もするし、実際は開発過程で仕様に大きな穴発覚!なんてのは、もはやマネジャークラスやコンサルの実力不足っていうより人間の限界な気がします。

誤ってApache::MP3をバージョンアップさせてしまった。。。
ちょっとしたサービスとして使用しているものが止まっちゃいました。涙
ログを見るとApache2::RequestRecが無い的エラー。
Apache2モジュールの事も知らなければ、使用しているApacheのバージョンも1.3あたりだし、なんかゴールは遠いような気がします。

原因を探している時間も気力もモチベーションも無いので、
今回はCPANから不本意にアップデートしてしまったモジュールをもとに戻します。
そのサンプルにでもなればと思います。
Apache::MP3のバージョンを確認したら4.00でした。
これを3.05に戻します。

消すべきものを探す

perl -MConfig -MExtUtils::Install -e \
'($FULLEXT=shift)=~s{-}{/}g; \
uninstall "$Config{sitearchexp}/auto/$FULLEXT/.packlist", \
 1, 1' Apache::MP3

改行入れまくってるのはウェブページとしての見た目だけの問題です。
上記のコマンドは消すべきものをピックアップしてくれます。

http://d.hatena.ne.jp/holidays-l/20070601/p1
上記リンクを参考にしました。

すべて削除したらバージョンを指定してCPANモジュールをインストールする

CPANサーチからIDを探す
http://search.cpan.org/

http://vlog.blog32.fc2.com/blog-entry-111.html
上記リンクを参考にすると、IDになるのはは"ID/"より後の部分になるので、
L/LD/LDS/Apache-MP3-3.05.tar.gzをインストール

cpan> install L/LD/LDS/Apache-MP3-3.05.tar.gz
これで3.05のインストールが完了
いやぁまいったまいった。汗

Apache::MP3

user-pic
0

wikiからの移植です。

依存関係

Apache::MP3をCPANから入れる際にはinstallを聞かれる。 Audio::WAV
Ogg::Vorbis
MP3::Info

confファイル

AllowDownloadはOption http://search.cpan.org/~lds/Apache-MP3-3.05/MP3.pm


   SetHandler perl-script
   PerlHandler Apache::MP3
   PerlSetVar AllowDownload no

CPANのセットアップ

user-pic
0

wikiからの移植です。

世の中にあふれているであろう設定についてですが、自分的メモな方向性です。
参考にするなら、CPAN初級を僕自身が参考にしたのでそちらを見てもらう方が良いです。

必要なプログラムの確認

whichで各プログラムがあるかどうかを確認。

# which gzip tar make lynx unzip wget ftp

あればパスが出力される。なければ別途インストール

/bin/gzip
/bin/tar
/usr/bin/make
/usr/bin/lynx
/usr/bin/unzip
/usr/bin/wget
/usr/bin/ftp

proxyサーバの設定。使用していなければ、スルーする。使用する場合は、環境変数に以下コマンドで設定する。(urlはdefault)

# export ftp_proxy=http://proxy.you.com:8000/
# export http_proxy=http://proxy.you.com:8000/

CPANのセットアップ

コマンドを入力

# perl -MCPAN -e shell

以下対話形式でセットアップしていくが、何も入力せずリターンしたときは[]内が設定として保存される。以下のところはデフォルトでOKだが、
Parameters for the 'make install' command?で設定が必要になるので注意

Are you ready for manual configuration? [yes] 
CPAN build and cache directory? [/root/.cpan] 
Cache size for build directory (in MB)? [10] 
Perform cache scanning (atstart or never)? [atstart] 
Policy on building prerequisites (follow, ask or ignore)? 
[follow] 
Where is your gzip program? [/usr/bin/gzip] 
Where is your tar program? [/usr/bin/tar] 
Warning: unzip not found in PATH
Where is your unzip program? [] /usr/bin/unzip
Where is your make program? [/usr/bin/make] 
Where is your lynx program? [/usr/bin/lynx] 
Warning: ncftpget not found in PATH
Where is your ncftpget program? [] 
Warning: ncftp not found in PATH
Where is your ncftp program? [] 
Where is your ftp program? [/usr/bin/ftp] 
What is your favorite pager program? [less] 
What is your favorite shell? [/bin/bash]
Parameters for the 'perl Makefile.PL' command? [] 
Parameters for the 'make' command? [] 
Parameters for the 'make install' command?

ここでUNINST=1と設定しリターン

このUNINST=1は既存のmoduleなどを再度インストールしようとして競合が起こった時に古いものを消す設定である


Parameters for the 'make install' command? [] UNINST=1

proxyの設定。環境変数で設定している場合、デフォルトの[]に入る。最初にproxyの設定を別途行っている。もしくは必要ないので、リターンでOK

Your ftp_proxy? [http://proxy.you.com:8000/] 
Your http_proxy? [http://proxy.you.com:8000/] 
Your no_proxy? 

downloadするCPANサーバの設定
一番近いところにする。日本からはAsiaを選択

(1) Africa
(2) Asia
(3) Central America
(4) Europe
(5) North America
(6) Oceania
(7) South America
Select your continent (or several nearby continents) [] 2

これまた一番近いところ。日本からはJapan

(1) China
(2) Hong Kong
(3) Indonesia
(4) Israel
(5) Japan
(6) Saudi Arabia
(7) Singapore
(8) South Korea
(9) Taiwan
(10) Thailand
Select your country (or several nearby countries) [] 5

japan内の一覧が出てくるので、これも近そうなサーバを選択

(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/
(2) ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
(3) ftp://ftp.kddlabs.co.jp/CPAN/
(4) ftp://ftp.meisei-u.ac.jp/pub/CPAN/
(5) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
(6) ftp://ftp.u-aizu.ac.jp/pub/lang/perl/CPAN/
(7) ftp://mirror.nucba.ac.jp/mirror/Perl/
Select as many URLs as you like [] 1

URLを直接入力することも可能なので、1~7以外を設定する場合は、URLを入力する
URLを直接入力する場合スペルミスやちゃんと稼動しているサーバかどうかチェックしてから入れる。

Enter another URL or RETURN to quit: [] 

これらの設定は使用しているperlのCPAN/Config.pmに保存される。


お好みで


CPANを使用できるようになったので、まずBundle::LWPをインストールする。

これによりCPANを再起動後はdownloadにlynxではなくLWPを使用するようになる。

>cpan install Bundle::LWP
>cpan install Bundle::CPAN
>cpan install Crypt::SSLeay

installされているモジュールのバージョンを確認する時、 Jcode.pmを例とすると

perl -MJcode -e 'print $Jcode::VERSION'

IO::File

user-pic
0
CPANモジュールのIO::Fileについて
とりあえず、読み込んで改行消してみる
my $fh = IO::File->new($filename);
@line = <$fh>;
@data = map { chomp $_; } @line;
$fh->close;
上書きとかしてみる
my $fh = IO::File->new("> $filename");
print $fh $self->{data};
$fh->close;

半角カタカナの判定

user-pic
0

# $str に半角カタカナが含まれているか判定する

if ($str =~ /\x8E/) {
print "含まれている\n";
}

半角カタカナが含まれているかどうかを判定するには,EUC-JP では /\x8E/ を調べるだけでできます。

perlメモからの引用です

Config::General

user-pic
0

perlでなんか作る時に最近Config::Simpleをつかってたんだけども、

なんかConfig::Generalが良さそうだ。

へなちょこperlプログラマなので、なんとなくざっとドキュメントを見ただけで、
多くをつかめるわけじゃないんだけども、
とりあえず、Config::Simpleでは要素を"."でしかsplitできないが、
これだと、-SplitPolicyオプションでドット以外も指定できる模様。

書式はConfig::SimpleがWin32システムライクで、Config::GeneralがApacheのConfigライク
どうも日本語のドキュメントがないと敬遠しがちなんだけども、ちょっとこれからは日本語のドキュメントがないやつも頑張って使ってみようかなぁ。

cpanのurllist

user-pic
0

参照先
今日、perlのモジュールを足そうとしていたら、
どうもurllistに設定している所につながらなかったので、接続先を一時的に変更。
urllistに追加するだけだと現状の1番手でひっかかるので削除してから追加

cpan> o conf urllist shift ftp://ftp.xxx/
cpan> o conf urlist push ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
cpan> o conf commit

listの先頭に追加するだけで良かった気もする?
それと、現在のサイトリスト
http://www.cpan.org/SITES.html

ざくっりと走り書き

読み込みモードでオープン

open (FH, "file") もしくは open (FH, "< file")

上書きモードでオープン

open (FH, "> file")

追加書き込みモードでオープン

open (FH, ">> file")

読み書き両用モードでオープン

open (FH, "+> file") もしくは open (FH, "+< file")

パイプ出力用でオープン

open (FH, "| コマンド")

パイプ入力用でオープン

open (FH, "コマンド |")

読み込み用にファイルを開く

open FH, "< file.txt";

書き込み用にファイルを開く

open FH, "> file.txt";

一行ずつ読み込み出力する

open(FH, "file.txt"); while(){ print $_, "\n"; }

このアーカイブについて

このページには、過去に書かれたブログ記事のうちPerlカテゴリに属しているものが含まれています。

前のカテゴリはPCです。

次のカテゴリはWebです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。