2008年2月17日日曜日

ミネアポリスについて

前後の脈絡はなにもないが、この週末をすごしたミネアポリスという都市のことを書くことにする。

基礎知識

ミネアポリスはアメリカの北のほうにあるミネソタ州の都市である。日本人にはあまり馴染みがない都市だったが、昨年夏に起きた橋の崩落事故のおかげで 有名になった。ほかには留学関係でも知られているし、ノースウェスト空港のハブ空港(ミネアポリス・セントポール空港)もあるためここで乗り換えたことのある人もいるかもしれない。

気温

私が訪問した時期のせいもあるが、地元の人が口を揃えて言うのは気温のことだ。2月の中ごろまでは最高気温が-10℃以下は普通のこと。幸か不幸か私が訪問した週末は特別で、金曜日までの最高気温が-10℃以下だったのに対し、土曜日と日曜日は0℃まで上がった。

かといって一年中寒いわけではなく、春は10℃、夏は30℃にもなるらしい。

地元の人はみな厚手のコートを着て重装備をしているのかと思っていたらそういうこともなく、慣れているのだろう、軽装の人が多かった。ミニスカートの人もいたのには驚いたが。

街の様子。雪はそれほど積もっていない。

華氏マイナス20度(摂氏マイナス30度のこと)になったら長ズボンをはこう。ビール会社の広告。

交通

市内の公共交通機関はバスが中心(だが観光客が乗りこなすのは無理だと言われた)。ダウンタウンと空港を結ぶ路面電車もあるが、これも観光客にはあまり役立たないし、空港の往復はタクシーが普通らしい。

ダウンタウンはそれほど大きくないので徒歩で移動ができる。ビル間をスカイウェイと呼ばれるガラス張りの陸橋のような通路が網羅しているため、厚着することなく他のビルへと訪問ができる(曲がりくねっているので道路を歩くのに比べて時間は倍くらいかかる)。

アメリカでは大都市にしかいない流しのタクシーもたくさんいた。

スカイウェイの外と内

治安

ホテルのあるダウンタウン地区については、治安はとても良さそうだった。夜10時以降でも人は普通に通りを歩いているし、治安の悪さの指標となる落書きも見なかった。

食べ物

名物料理というもの特にはないらしい。街を歩くとアメリカ料理・イタリア料理・メキシコ料理などなどのレストランがバランスよくあるようだった。中華料理店は見なかった。日本料理屋はやたらとあったが、Ichiban Steak House(一番ステーキ)やTemple Restaurant and Shinto Lounge(寺と神道)などなので、「正しい」日本料理がでてくるかどうかはわからない。これはミネアポリスの問題ではなく、アメリカ全体でこんな感じだけれど。

観光

郊外に行くと滝がある。あと美術館。車で1時間のところにカジノもあるそうだ。

空港の近所にあるMall of Americaというショッピングモールが全米最大だというので行ってみた。たしかに大きい。フロアをゆっくり一周したら1時間かかった。同じようなモールはアメリカのあちこちにあるし、ただ大きいだけで有名になっているという話もあるが、空港に向かう前にちょっとのぞいてみるくらいの価値はあると思う。モールの中に遊園地もある。

銃持ち込み禁止

銀行、ホテルやレストランの前に「銃は持ち込み禁止です」という看板があった。アメリカ中部に来たぞという気持ちになる。

2008年2月10日日曜日

Perlサーベイを読み解く

以前のエントリで書いたが、Perl Survey 2007というアンケートの結果が公開されている。年齢、プログラミング年数、Perlコミュニティへのかかわり、年収など考えられるすべての情報を網羅した貴重な情報だ。

生データを見ているだけでは何もわからないので、各要素の類似度(相関係数)を計算してグラフにしてみた。相関係数は数種類定義があるが、ここではスピアマンの順位相関係数を使った(細かいことは一番下に書いた)。

年齢と相関が高い要素トップ10

年齢の高いPerlプログラマは

  • プログラミング歴が長く(1位)、Perlプログラミング歴もそこそこ長く(6位)
  • Perlの開発に参加していることが多く(2位、3位)
  • 地元以外でのPerlモンガーズやPerlカンファレンスにこの1年間に参加したことがある(5位、8位)
  • という傾向が読み取れる。

地元の集まりに参加したことがあるかどうかはランク外。つまり、PerlモンガーズとPerlカンファレンスに参加したことがあるかどうか、は年齢とあまり関係ないものの、年齢が高い人ほど地元以外の集まりに出かけていることが多い。

Perlプログラミング歴と相関の高い要素トップ10

年齢のグラフより全体的に相関係数が高めである。Perlプログラミング歴の長い人は

  • Perl以外も含めたプログラミング歴が長く(1位)
  • Perlの開発に参加し(2位、3位)
  • Perlモンガーズやカンファレンスに参加し(5位、6位、7位)
  • CPANのモジュールを開発し(10位)
  • 男である可能性が高い(4位)

プログラミングに占めるPerlの量と相関の高い要素トップ10

一見Perlプログラミング歴と似た結果だが、Perlプログラミング歴で1位だった「Perl以外も含めたプログラミング歴」はランク外に落ちた(相関係数0.1以下)。つまり、プログラミング歴とPerlの使用率は何の関係もない。

年収と相関の高い要素トップ10

年収の高い人は、

  • Perlの開発に参加しており(1位、2位)
  • 地元以外のPerlモンガーズに参加していて(4位、5位)
  • カンファレンスで発表し(6位)
  • 男性であることが多い(3位)

年齢の相関係数0.35はそれほど高くない。すなわち年収と年齢はそれほど強い相関関係にないことに注目したい。言い換えるとPerlプログラマの年収は年功序列とはいえない。

注釈

  • 普通の相関係数(ピアソンの積率相関係数)ではなく、スピアマンの順位相関係数を使ったのはバラバラな指標(Perlの開発に参加しているか:yesとnoの2値、プログラミング歴:正規分布からほど遠い整数、CPANモジュール数:大多数が0)をまとめて扱いたかったからであるが、もっといい方法があるかもしれない。
  • コンピュータネットワークの発達していない地域で傾向が違うのは避けられないため、一人当たりのGDPが上位25か国(Wikipedia参照)の在住者のみを対象にした。ルクセンブルク(lu)、アイルランド(ie)、ノルウェー(no)、米国(us)、アイスランド(is)、スイス(ch)、オランダ(nl)、デンマーク(dk)、カタール(qa)、オーストリア(at)、フィンランド(fi)、カナダ(ca)、英国(uk)、ベルギー(be)、スウェーデン(se)、UAE(ae)、シンガポール(sg)、オーストラリア(au)、ギリシア(gr)、日本(jp)、フランス(fr)、イスラエル(il)、ドイツ(de)、イタリア(it)、中国(cn)。
  • 1985年以降に生まれた人は統計から除外した。
  • 年収(任意回答)を答えなかった人は統計から除外した。
  • 以上の結果、統計の対象になったデータは2368個。

リンク

Greg氏のHacking with Greg: Charlie Brown Plays With Stats。私がこの企画を温めていたら、先に似たことをされてしまった。yesとnoで答える項目だけの集計だが、これはこれで面白い。

So with the improvements in my mind I managed to adjust it in just a few minutes. And the results where astonishing!....-ly boring. Here's the top 5...

If 'Posted to Perl Mongers list ' Then 'Subscribed to Perl Mongers list ' (With 0.995 probability)
If 'Posted to other list ' Then 'Subscribed to other list ' (With 0.990 probability)
If 'Attended conference (non-local) ' Then 'Attended conference ' (With 0.970 probability)
If 'Attended Perl Mongers (non-local)' Then 'Attended Perl Mongers ' (With 0.965 probability)
If 'Contributed to Perl 5 ' Then 'Subscribed to other list ' (With 0.882 probability)

(拙訳)

これはすごい……つまらない。項目ごとの類似度を出して、そのベスト5を出したものは
「Perlモンガーズのメーリングリストに投稿したことのある人」は99.5%の確率で「Perlモンガーズのメーリングリストに入っている」
「その他の(Perlモンガーズ以外の)メーリングリストに投稿したことのある人」は99.0%の確率で「その他のメーリングリストに入っている」
「地元以外のPerlカンファレンスに参加したことのある人」は97.0%の確率で「Perlカンファレンスに参加したことがある」
「地元以外のPerlカンファレンスに参加したことのある人」は96.5%の確率で「Perlモンガーズの会合に参加したことがある」
「Perl5の開発に参加したことがある人」は88.2%の確率で「Perlモンガーズ以外のメーリングリストに入っている」

謝辞

スピアマンの順位相関係数を求めるスクリプトはSpearman's rho test download pageからいただいた。

その他

  • 統計は素人のため、ご提案、間違いのご指摘など歓迎します。
  • グラフが英語なのはGoogle Chart APIで漢字が使えないという制限のためです。
  • 相関がどれだけ有意かというのはまた別の問題です。参考程度にご覧ください。

統計の対象にした全項目

値項目名解説
整数Year of birth生まれた年。ここでは年齢と同じこと
3値Sex性別。ここでは「男」が1、「女」が0、「その他」を0.5として計算した
範囲Income年収
整数Years programming PerlPerlプログラミング歴(年数)
整数Years programming (total)Perl以外も含めたプログラミング歴(年数)
%Proportion of Perlこの1年に書いたプログラム、Perlは何%?
2値Subscribed to Perl Mongers listPerlモンガーズのメーリングリストに入っている
2値Posted to Perl Mongers listこの1年にPerlモンガーズのメーリングリストに投稿した
2値Subscribed to other listその他Perl関連のメーリングリストに入っている
2値Posted to other listこの1年にその他Perl関連のメーリングリストに投稿した
2値Perlmonksこの1年にPerlmonksに投稿した
2値Contributed to websitesこの1年にその他Perlのサイトに投稿した(フォーラム、Wiki、ブログ)
2値Attended Perl Mongersこの1年にPerl Mongersのミーティングに出席した
2値Attended Perl Mongers (non-local)この1年に地元以外でPerl Mongersのミーティングに出席した(地元以外:1000km以上)
2値Attended conferenceこの1年にPerlのカンファレンスに出席した
2値Attended conference (non-local)この1年に地元以外でPerlのカンファレンスに出席した
2値Presented at conferenceこの1年にPerlのカンファレンスやミーティングで発表した
2値Contributed to CPANモジュールを発表するなどCPANに貢献したことがある
2値Contributed to Perl 5Perl5に貢献したことがある
2値Contributed to Perl 6Perl6に貢献したことがある
2値Contributed to other projectsオープンソースソフトウェア(OSS)などにPerlで貢献したことがある
2値Led other projectsOSSなどのプロジェクトを開始した、もしくはリーダーをしたことがある
2値Provided feedbackPerl関係のバグレポートなどフィードバックを送ったことがある
整数CPAN modules maintainedCPANでメンテナンスを担当しているモジュール数

2008年2月2日土曜日

ユーロスターでパリからロンドンへ

今回は技術的な話を抜きにして旅行の話である。パリとロンドンの間にはユーロスターという国際列車があり、1時間から2時間の間隔で運行している。所要時間は2時間半以下。新幹線でいうと東京から名古屋よりも短い時間だ。

切符のとりかた

ユーロスターのオフィシャルサイトで予約ができる。自分の乗りたい日付と時刻を選び、座席の等級を選び(3種類ある)、クレジットカードの情報を入力しておしまい。値段は等級とその列車の混雑具合によって変動するが、片道1万円から2万円の間から。

もちろん当日に駅で買うこともできるが、窓口はいつも混雑しているし、高いチケットしか残っていない場合もあるのできれば事前に購入しておきたい。

発券のしかた

ネットで予約したら出発前に切符を発券してもらわなければならない。私はパリ発、ロンドンの往復だったため、ユーロスターのパリ駅で往復の切符を発券した。窓口に並ぶ必要はなく、自動券売機で行う(購入に使ったクレジットカードが必要)。

出国・入国関係

出発地で出国と入国の手続きを行う。たとえば、フランスからイギリスに向かうときは、改札口の中にフランスの出国窓口、さらにイギリスの入国窓口がある。隣り合った窓口なのにもかかわらず、フランスの係員はフランスなまりの英語を話すし(travelがトアベユになる)、イギリスの係員はきれいなイギリス英語を話す。

食事関係

フランス発の朝食はフレンチトーストだった。フレンチトーストにロールパンがついてきたのはなんか変だけれど。

味は……別に普通でした。

2008年1月22日火曜日

Macportsのcoreutilsコマンド群はなんでも「g」から始まる

CoreutilsはcatやlsといったUNIX上の基本的なコマンドを集めたGNUのパッケージである。これをMacPortsからインストールしたからGNUのコマンド群が使えるようになるぞ、と思っているとハマることになる。Coreutilsを普通にインストールしても、「ls」はインストールされないのである。

% port file coreutils
/opt/local/var/macports/sources/rsync.macports.org/release/ports/sysutils/coreutils/Portfile <- coreutilsはインストールされている
% ls --help
ls: illegal option -- - <- GNUのlsではない
usage: ls [-ABCFGHLPRSTWabcdefghiklmnopqrstuwx1] [file ...]
% which ls
/bin/ls <- OS標準のlsが使われている
%
実はlsはglsという名前でインストールされている。cp、mv、df、cat、odもそれぞれgcp、gmv、gdf、gcat、godという名前で入る(godって……)。おわかりのとおり、コマンド全部が「g」から始まるようになっている。

これを回避する方法は一応ある。こうやってcoreutilsをインストールすれば余計なgがつかない。

% sudo port install coreutils +with_default_names
ただこれはあまり推奨されていないようで、おすすめはaliasを設定することだそうだ(下の方にalias一覧をつけました)。


以下は蛇足。

これはMacports側の設定で「すべてにgをつけるべし」という設定が意図的にされているからである。

configure.args  --program-prefix=g \
--disable-nls
つい先日MacPortsのメーリングリストでも「lsはlsとして、gをつけない普通の名前で/opt/local/binに入れるようにしませんか」という提案がなされたのだが(ソース)、「既存のシェルスクリプトはOS標準の(BSD系の)lsを想定して書かれているから動かなくなったら困る」という理由で却下されている。

明確なソースが示されていないので実際どのくらいの影響が出るのかは知らないが、記憶をたどるとこの議論、ずっと前から存在する。FreeBSDのportsでも長い間lsはglsとしてインストールされてきた。古いものはあまり確認できないが、少なくとも2000年時点のfileutilsはそうである(ソース)。

個人的にはlsをls以外の名前で呼ぶことはしたくないし、glsなんていちいち打つ人がいるとも思えない。aliasを設定すれば良いというのはもっともらしく聞こえるが、不出来なシェルスクリプトのつけをユーザに回しているだけという気もする。

どちらのlsでも動くシェルスクリプトを作る方法はあとで考えることにして、とりあえずaliasを設定した。

alias base64=gbase64
alias basename=gbasename
alias cat=gcat
alias chgrp=gchgrp
alias chmod=gchmod
alias chown=gchown
alias chroot=gchroot
alias cksum=gcksum
alias comm=gcomm
alias cp=gcp
alias csplit=gcsplit
alias cut=gcut
alias date=gdate
alias dd=gdd
alias df=gdf
alias dir=gdir
alias dircolors=gdircolors
alias dirname=gdirname
alias du=gdu
alias echo=gecho
alias env=genv
alias expand=gexpand
alias expr=gexpr
alias factor=gfactor
alias false=gfalse
alias fmt=gfmt
alias fold=gfold
alias groups=ggroups
alias head=ghead
alias hostid=ghostid
alias hostname=ghostname
alias id=gid
alias install=ginstall
alias join=gjoin
alias kill=gkill
alias link=glink
alias ln=gln
alias logname=glogname
alias ls='gls -F'
alias md5sum=gmd5sum
alias mkdir=gmkdir
alias mkfifo=gmkfifo
alias mknod=gmknod
alias mv=gmv
alias nice=gnice
alias nl=gnl
alias nohup=gnohup
alias od=god
alias paste=gpaste
alias pathchk=gpathchk
alias pinky=gpinky
alias pr=gpr
alias printenv=gprintenv
alias printf=gprintf
alias ptx=gptx
alias pwd=gpwd
alias readlink=greadlink
alias rm=grm
alias rmdir=grmdir
alias seq=gseq
alias sha1sum=gsha1sum
alias sha224sum=gsha224sum
alias sha256sum=gsha256sum
alias sha384sum=gsha384sum
alias sha512sum=gsha512sum
alias shred=gshred
alias shuf=gshuf
alias sleep=gsleep
alias sort=gsort
alias split=gsplit
alias stat=gstat
alias stty=gstty
alias su=gsu
alias sum=gsum
alias sync=gsync
alias tac=gtac
alias tail=gtail
alias tee=gtee
alias test=gtest
alias touch=gtouch
alias tr=gtr
alias true=gtrue
alias tsort=gtsort
alias tty=gtty
alias uname=guname
alias unexpand=gunexpand
alias uniq=guniq
alias unlink=gunlink
alias uptime=guptime
alias users=gusers
alias vdir=gvdir
alias wc=gwc
alias who=gwho
alias whoami=gwhoami
alias yes=gyes
ちなみに以上はワンライナーで作った。
% port contents coreutils | perl -nle 'print "alias $1=g$1" if m{/opt/local/bin/g(\w+)}'
alias base64=gbase64
alias basename=gbasename
alias cat=gcat
alias chgrp=gchgrp
(略)
%
例外はlsで、「gls -F」にaliasした。

2008年1月11日金曜日

Leopardを再インストールした

Leopardインストール日記ということでLeopardにソフトウェアをインストールしたメモをつらつらと書いてきたのだが、Leopardをインストールすることになるとは思いもしなかった。まだMac miniを買って2週間足らずなのに。

顛末

きっかけは消せないファイルができてしまったことだ。Linuxからrsyncで機械的にコピーしたファイルが、ファイル名に妙な文字を含んでいるらしくターミナルからもFinderからもどうやっても消せなくなってしまったのだ(Finderはファイルの存在すら認識せず、0 itemsと表示する)。

lsはできる。
 % ls
☁
%
ls -lをするとサイズは0である。

ところがrmをすると
 % rm *
rm: ☁: No such file or directory
%
*をファイル名一覧に展開するところはできるのに、rmが認識できていない。

ディレクトリごと動かすことはできる。
 % ls a/
☁
% mv a b
% ls b/
☁
%
ごみ箱に移したらごみ箱を空にすることができない。mvができてrmができないからか、と妙に納得してしまう。

原因

原因はわかっている。rsyncでLinuxからファイルを大量にコピーしたからだ。Linuxで作ったファイルではなく、その前のOSからrsyncしたファイルだと思う。Windowsかもしれない。

rsyncがどんな処理をしてこういう妙なファイルを作ってしまったのかはわからないが、Linuxからrsync --deleteで空のディレクトリをコピーしてもこのファイルは消えてくれなかった。

対処

こういうファイルを放置したらどういう結果になるかは知らないものの、気持ち悪いことには違いない。バックアップをとるたびにエラーメッセージを見るのも愉快ではない。とはいえ、OSの再インストールしか直す方法がないらしい。となると、購入したてのいまがチャンスだ。

LeopardはDVDから立ち上げてデータを失わずに再インストールできる。UNIXでは当たり前のことだけれど、すべてがGUIで完結するのはすごいと思う。

結果

問題のファイルを/tmpに置いてから再インストールしたら、このファイルは無事なくなった。というよりも/tmpにあったファイルはすべてなくなった。

再インストール自体はDVDを2枚使う待ち時間ばかり長い作業だったが、ユーザディレクトリもインストールしたアプリケーションも失うことなく、OSの領域だけきちんと復元できた。

失われたもの

前記のとおり、/tmpにあったファイルは全部なくなった。さらに、/var、/etcにあったと思われる設定・データもなくなった。具体的には
  • /etc/sudoers
  • /etc/ntp.conf(時刻の設定)
  • /var/run/utmpx(ログイン履歴)
  • ホスト名(どのファイルかは不明)
しかし逆に考えれば、OSを再インストールしたあとに再設定がほとんど必要なかったのはすごいと思う。

2007年12月15日土曜日

勘違いをする人たち

近所のとあるご婦人は金髪のアメリカ人、お金持ちだ。悪い人ではないのだが、少し俗物の気がある人である。特に「国際的な私」を演出したいらしく、私という日本人に対しては日本の文化の理解者であるように振舞う。「先週ジャパニーズレストランのノブに行ったんですのよ、オホホ」みたいな感じ。

最近その人が犬を飼い始めた。このあたりのお金持ちはステイタスのために大型犬を飼うことが多いのだが、ご婦人に会ったときに抱いていたのは小さめのサイズだ。犬種は忘れたが中国産の種類らしい。

「この子、中国が起源ですのよ、オホホ」

ご婦人が言う。「中国」を強調するあたり、なにか嫌な予感がした。

「お名前、なんていうんですか?」

私は別に犬の名前がポチだろうとタマだろうと構わないのだが、それは会話のキャッチボールというものだ。

ご婦人は言った。

「中国から来たでしょ。だから『ミソ』っていうんですのよ」


私も大人、噴き出すのはギリギリのところでこらえたが、これには驚いた。中国の歴史を背負う由緒正しく(たぶん)プライドが高く(たぶん)血統書つきのお犬様、お金持ちの奥様に飼われて幸せなはずが、味噌……。アメリカには中華料理とミソスープを両方メニューに載せているデタラメなレストランは星の数ほどあるため、ご婦人の勘違いを責めるのは酷というものだが、このお犬様の将来や、いかに。

2007年12月12日水曜日

Pittsburgh Perl Workshopメモ1日目:Security through detection, prevention, and introspection with Perl

syslogdなどの出力を一箇所に集めて加工し、セキュリティの問題を発見しましょうという話。単純な話ではあるのだが話がうまい人で引き込まれた。資料が公開されている。