トップ «前の日(09-20) 最新 次の日(09-22)» 追記

2004-09-21

_ 初歩的すぎて今さら Web 上で見つけられない platform 判別に使える方法

最近 Perl は CGI の初歩の話ばかりで Perl そのものの話を見つけるのが難しい。現在スクリプトを実行している環境を判別したくなったのでちょっと調べてみた。するとこんなスクリプトで分かりそうだった。

#! /usr/bin/env perl
use Config;

print $Config{'osname'} . "\n";
print $Config{'osvers'} . "\n";

以下 uname -spr と perl -v とスクリプトの実行結果を順に。

Debian 3.0r2

Linux 2.4.18-1-686 unknown
This is perl, v5.6.1 built for i386-linux
linux
2.6.3-deb2-skas3

cygwin 1.5.9

CYGWIN_NT-5.0 1.5.9(0.112/4/2) unknown
This is perl, v5.8.2 built for cygwin-thread-multi-64int
cygwin
1.5.5(0.9432)

FreeBSD 4.10R

FreeBSD 4.10-RELEASE i386
This is perl, version 5.005_03 built for i386-freebsd
freebsd
4.0-current

FreeBSD 4.10R の返事はずいぶんいい加減な数字のような気もするが、これは build 環境なんだよな。

Windows 2000 SP4

This is perl, v5.6.1 built for MSWin32-x86-multi-thread
(snip)
Binary build 635 provided by ActiveState Corp.
MSWin32
4.0

NT 4 で build してる? 古い Perl for Win32 とか JPerl for Win32 はどうだか分かりません。

MacOS

MacJPerl5 を動かしてみた。

osname='MacOS
osvers='7.5

げ。なんか余計な文字列ついてきてるんですけど。

しかし、Perl 4 以前はどうしてたんだろうか。。。

Tags: Perl

2007-09-21

_ 「当たりの付け方」と「何を為さざるべきか」

あー。

自分もまだ何がどれとははっきり言えないんだけど、

知識からでも学べることと経験からしか学べないことの違い

じゃないですかね。なんとなくもやもやは分かる気がしますが、何もかも本で解決できるわけはないし、闇雲にただ経験を積ませりゃいいってもんでもないと思います。(そんなことは分かりきっていると言われるかもしれませんが。)

なんでこんな話をしているかというと、自分でもせめて C を知っといてほしいなぁと思うことはあるからです。*1ただ、ほしいなぁとも思うが具体的にどう役に立つか、あるいはどう役立てたらいいかは自分の中で明確になってはいません。自分が C を学んだときにはそれ自体が目的で、その知識を援用するという使い方は考えていなかったからです。*2

はて。

この状態で C を学ばせて果たして役に立つと思ってもらえるだろうか? いや、役に立つのだろうか?

今まさにここで行き詰まっています。もう一つはどこまでやらせれば十分という線引きが自分の中にできていない、という問題でもあります。そりゃなんだってできてくれるに越したことはないんだけど、

常に「今それやってもらうわけにいかない」

っつーのがまぁ現実なわけです。さてどうしたもんかと思いつつもリポジトリの話とかステージングの話とか「上の」ことばっかやってますよね、実際。だってそっちも別に「十分」じゃないし、そっちを強化することの方が戦力計算としては重要ですし、もしかすると下のレイヤーのスキルを上のレイヤーで応用できるかどうかも、実はその人次第かも知れないとも思います。なんとなくですが。本当に役に立つと言えるのだろうか?という疑問も実は自分の中にあります。

こういう話って別にプログラミングには限定されない話で、例えばクライアント PC のトラブルを解決する際の当たりの付け方なんてところにも、いろいろなレイヤーの知識とともに経験が総動員されるわけじゃないですか。でもこれってできない人はやっぱできないわけですよ。例えば「実際に今まさに使っている生の PC を相手にするとき」なんかに差が出ます。この場合、どれだけ深いレベルまで下りられるか、根源的な解決を試みることができるかということはたいした問題ではなくて、当座のワークアラウンドを即座に決断、実行して、時間の取れるタイミングを確認し、そこまでをどう繋ぐかを決定する*3ことがまず最初に求められる行動*4なのですが、これができるようになるにはそれなりに経験が必要です。何せヘルプが飛んでくるときというのはたいていトラブルの状況と同時に、そのうえで遂行中のタスクも切羽詰まっているからです。こういう状況には知識だけではなかなか太刀打ちできません。もちろん知識がなくていいという言い訳にはならないのですけど。

ここまで書いて、「問題」に対処するのに必要な力ってのは、下のレイヤーを知っているかどうかよりも、どんな武器を持っているかってことのような気がしてきました。ソフト、言語においてはバイナリアンとしての力は足腰として重要だと思いますが、我々は普段足腰で仕事してるわけではない。ただしんどい状況になってくると足腰を含めた全身の体力を求められることもある。

できれば全系統の能力をフルに発揮できる「クラピカの無敵モード」みたいな力がほしいです。でもそんなのは無理。そこで我々はこれがあればオレはやっていける、と確信できる必殺技を求めているのではないでしょうか。それがマシン語の人もいれば Perl や Lisp の人もいる。むしろ日本語という人もいる*5でしょうし、それは各自が各自の現場でもって確信するのでいんじゃねーの?と思うわけです。で、

自分が必殺技を持つことと他人にそれを習得させることはベツモノ

ってやっぱ思うわけです。だからかな、○○を学ぶべきとあまり言いたくないのは。

というか突き詰めていけばですよ。

○○をやらせるべきか否かを考えている人間ではなく、○○をやりたいぜ、やってやるぜと考えている人間の方にイニシアチブはあるんですよ。「やらせる」とか言ってる人はどうあがいたって他人の頑張りの「結果」しか受け取ることができないんだから、「やらせる」なんて言ってる連中が最も心を砕かなきゃいけないことは

楽しんでもらう、のめり込んでもらうために我々は何をしないべきか?

じゃないのか、と思うわけです。*6老害って言われるのはお互いに不幸だもの。

cf.

*1 だから C もマシン語もやっといて損はないよ、というのが自分の立場。

*2 そして最近の議論を読んで、知っていてほしいのは単なるモデルに過ぎなかったのかもしれないとも思いました。であれば何か適切な教科書はあるような気がします。(探せばどっかにあるでしょう。)

*3 かつトラブルに見舞われているユーザーに嘘でもいいから安心感を与える

*4 「外の」サポセンは違うでしょうね。あくまで「中の」ヘルプデスクとしては、です。

*5 自分はそれに近い気がする

*6 これってあれだな。経営者がプログラマの邪魔をしないとか、そういう話にもいくよね。いま自分が語ったのは教育の文脈の話だけど。


2010-09-21

_ rsync -C で除外されるバージョン管理関連のファイル

rsync の -C オプションは CVS と似たアルゴリズムで同期対象からファイルを除外してくれる。

  • $HOME/.cvsignore
  • CVSIGNORE 環境変数
  • 各 SRC ディレクトリの .cvsignore

を参照してくれるが、それ以外にもデフォルトで除外してくれるパターンもある。

少なくとも rsync 3.0.7 では

      -C, --cvs-exclude
             This is a useful shorthand for excluding a broad range of  files
             that you often don't want to transfer between systems. It uses a
             similar algorithm to CVS  to  determine  if  a  file  should  be
             ignored.

             The  exclude  list is initialized to exclude the following items
             (these initial items are marked as perishable -- see the  FILTER
             RULES section):

                    RCS   SCCS   CVS   CVS.adm   RCSLOG  cvslog.*  tags  TAGS
                    .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old  *.bak
                    *.BAK  *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe
                    *.Z *.elc *.ln core .svn/ .git/ .bzr/

が対象になっている。ということで

  • RCS
  • SCCS
  • CVS
  • Subversion
  • Git
  • Bazzar

これらはデフォルトで対応しているが Mercurial は対応していない。ことが分かった。ちぃ、……覚えられない。

Tags: Rsync