2009年5月13日水曜日

ニューヨークではiPhoneから「はてな」が使えない

タイトルを「ぼくがはてなを使わない理由」にしようかと思ったがやめた。使わないのではなくて使えないのである。

あまり知られていないことだが、NYでiPhoneのSafariを使うとはてな(www.hatena.ne.jp)につながらない。wwwだけではなくてb.hatena.ne.jpもだめだしd.hatena.ne.jpも、とにかくhatena.ne.jpにはエラーが出てつながらない。

これは以下の条件で起こるようだ。複数台のiPhoneで再現した。

  • アメリカ東海岸
  • AT&T経由で接続(3G・EDGEを問わない)

ニューヨークに限らず、米国東部のボストン、フィラデルフィア、シカゴ、マイアミでも同じだった。逆に中部のミネアポリスではちゃんとつながった。はてなのユーザが多そうな西海岸もきっと大丈夫なのだろう。

Wi-Fiで接続したらこの問題は起こらないため、キャリアのAT&Tがおかしいのではないかと思う。

PingというiPhoneアプリケーションを使ってPingしてみたら、案の定Pingができない。ルーティング関係の問題だろうか。

ニューヨーク周辺からAT&Tの携帯電話ではてなが使えているという方は教えてください。

関係ないけれど

まだ日本に住んでいたころ、技術系の集まりで会った人にはてなIDを聞かれた。「持ってません」と言ったら信じられないという顔をされたが、そういうわけではてなIDはいまだに持っていない。もっと関係ないけれどミクシィのIDも取らないでいたらこちらは携帯電話が必須になってしまった。

2009年4月16日木曜日

Remedieは15分でインストールできるのか

あらかじめ書いておきますがネタです。

[O] これから15分で Remedie を始めるための資料には

インストール自体は15分で終わらない場合が多いでしょう。

とある。

タイトルと中身が矛盾しているが、環境によりけりということのようだ。そこで、果たして本当に15分でインストールできるかどうか、PerlとRemedieを一からインストールしたときの時間を計ってみた。

0. 準備

Xcodeとgitを入れておく。

正確に時間を計測するために~/.cpanを削除。

% rm -rf ~/.cpan
%

1. ActivePerlのダウンロード(30秒)

ブラウザでActivePerlのサイトからダウンロードしてもいいが、時間を計測するためにcurlを使う。

% cd /tmp
% time /usr/bin/curl -sO http://downloads.activestate.com/ActivePerl/MacOSX/5.10/ActivePerl-5.10.0.1004-darwin-9.4.0-287188.tar.gz
/usr/bin/curl -sO 0.32s user 1.59s system 8% cpu 23.030 total
% time tar zxf ActivePerl-5.10.0.1004-darwin-9.4.0-287188.tar.gz
tar zxf ActivePerl-5.10.0.1004-darwin-9.4.0-287188.tar.gz 1.45s user 1.17s system 63% cpu 4.144 total
%

2. ActivePerlのインストール(15秒)

お遊びなので/tmp/activeperlに入れる。

% cd ActivePerl-5.10.0.1004-darwin-9.4.0-287188
% time ./install.sh --prefix /tmp/activeperl --license-accepted --no-install-html --no-manifest-check
....
./install.sh --prefix /tmp/activeperl --license-accepted --no-install-html 3.57s user 2.56s system 58% cpu 10.523 total
%

ついでにパスの設定も行う。

% export PATH=/tmp/activeperl/site/bin:/tmp/activeperl/bin:/usr/bin:/bin
%

3. Remedieのダウンロード(10秒)

% cd /tmp
% time /opt/local/bin/git clone git://github.com/miyagawa/remedie.git
....
/opt/local/bin/git clone git://github.com/miyagawa/remedie.git 0.44s user 0.30s system 9% cpu 7.754 total
%

4. 必要なモジュールのダウンロード(18分)

時間を節約するため、依存関係の処理をいちいち聞かないで勝手に処理してくれるように設定。

% export PERL_AUTOINSTALL="--defaultdeps"
%

いざcpanコマンドを実行。途中で5か所プロンプトが出るがリターンを押せばよい。あらかじめ5回リターンを押してもいいはず。ちなみにyesコマンドはLeopardにはついてこないので使わない。

% cd remedie
% time cpan -i .
....
M/MS/MSCHWERN/ExtUtils-MakeMaker-6.50.tar.gz is just needed temporarily during building or testing. Do you want to install it permanently? (Y/n) [yes] リターン
....
*** Press return to continue (or wait 60 seconds) リターン
....
*** Press return to continue (or wait 60 seconds) リターン
....
Do you want to build the XS Stash module? [y] リターン
Do you want to use the XS Stash by default? [y] リターン
....
cpan -i . 582.42s user 125.23s system 66% cpu 17:48.14 total
%

起動。

% bin/remedie-server.pl 
HTTP::Engine::Interface::ServerSimple : You can connect to your server at http://localhost:10010/

まとめ

全部で19分。この記事を書くためにActivePerlとRemedieを10回以上インストールしたが、15分を切ることはできなかった。回線の太さよりもmakeのスピードに依存しそうなので、速いコンピュータなら15分でできるかもと思う。

2009年4月15日水曜日

Remedieをインストール

家の前の川に飛行機が飛んできたのは1月のことだ。家にいながらこれにまったく気づかなかったその夜、消防車や救急車の音で窓の外が騒がしいので見てみたら、川の中に飛行機があって驚いた。とりあえず写真を撮ってブログのネタにした。

飛行機が川に不時着したのはすごいできごとだが、何よりも驚いたのは日本の人たちが事故のことを何時間も前から知っていてTwitterで話題にしていたことだった。

前にも書いたが私はテレビをほとんど見ない。ニュースは新聞が主な情報源で、インターネットでニュースにアクセスするとしても動画はほとんど見ないテキスト派だ。

そういう原始人のような生活から脱却するために、奮起してRemedieを入れてみた。

1. gitをインストール

MacPortsを使っているので簡単インストール。

# port selfupdate
# port install git-core

2. Remedieのダウンロード

[O] これから15分で Remedie を始めるための資料を見ながらやった。

% cd tmp
% git clone git://github.com/miyagawa/remedie.git

3. 必要なPerlモジュールのダウンロード

まずはRemedieのパッケージにREADME.mkdnというファイルがあるのでそれを読む。「cpan -i .」というコマンドを実行するべしとあるのでそのとおりにするとPerlのモジュールが大量にインストールされる。

% cd remedie
% cpan -i .

インストール済みのモジュールがそれなりに多いせいでトラブルもなく5分くらいで終了。

README.mkdnというファイル名は初めて見たが、mkdnはMarkdownの略だそうだ。Markdownはお手軽マークアップ言語。

4. テストがFAILするので微調整

cpan -i .の最後のほうでRemedie自身のテストが行われる。私の環境だとテストが3個Failした。

Test Summary Report
-------------------
t/99_fail.t (Wstat: 256 Tests: 1 Failed: 1)
Failed test: 1
Non-zero exit status: 1
t/plagger/plugins/CustomFeed-Script/base.t (Wstat: 1024 Tests: 4 Failed: 4)
Failed tests: 1-4
Non-zero exit status: 4
t/plagger/plugins/Discovery-Sites/base.t (Wstat: 256 Tests: 4 Failed: 1)
Failed test: 2
Non-zero exit status: 1
Files=41, Tests=236, 57 wallclock secs ( 0.16 usr 0.16 sys + 31.11 cusr 3.77 csys = 35.20 CPU)
Result: FAIL
Failed 3/41 test programs. 6/236 subtests failed.
t/99_fail.t

一番最初のt/99_fail.tはFailになるように設計されているので無視する。

t/plagger/plugins/CustomFeed-Script/base.t

これはやや複雑で、私のperlが標準のパス(/usr/bin/perl)にないから起こる。t/samplesディレクトリにあるスクリプトを書き替える。

% perl -pi.bak -e 's{/usr/bin/perl}{/usr/bin/env perl}' t/samples/*.pl

つまり、/usr/bin/perlではなくて自分が使っているほうのPerlを呼び出すようにする。

t/plagger/plugins/Discovery-Sites/base.t

このテストは実行するたびにFailしたりしなかったりする曲者である上にVeohなんて初めて使ったから自信がないのだが、t/plagger/plugins/Discovery-Sites/base.tをこのように書き替えたらエラーが出なくなった。

変更前

like $context->update->feeds->[0]->entries->[0]->thumbnail->{url}, qr/ll-images/;

変更後

like $context->update->feeds->[0]->entries->[3]->thumbnail->{url}, qr/(ll-images|img\.youtube|thumbnails\.cbsig|www\.mtv\.com)/;

5. 再テスト

同じコマンドを再度実行し、t/99_fail.t以外は大丈夫なことを確認する。

% cpan -i .
(略)
Test Summary Report
-------------------
t/99_fail.t (Wstat: 256 Tests: 1 Failed: 1)
Failed test: 1
Non-zero exit status: 1
Files=41, Tests=250, 60 wallclock secs ( 0.16 usr 0.16 sys + 31.77 cusr 3.91 csys = 36.00 CPU)
Result: FAIL
Failed 1/41 test programs. 1/250 subtests failed.

6. Remedieを起動

% ./bin/remedie-server.pl
Mouse::Meta::Class::__ANON__::SERIAL::1: You can connect to your server at http://localhost:10010/

7. フィードを追加

Remedieのページ(http://localhost:10010/)にアクセスすると真っ黒の画面が出るので、「New」を押してフィードを登録する。

まずは地元のテレビ局ny1.comを登録してみる。NY1のサイトに行ってRSSのURLを見つければいいのだけれど、もしかしてと思い直接「ny1.com」を入れてみる。

ちゃんとRSSのURLを見つけてくれた。これには感動。

というわけで今年度の目標は、日本在住の人よりも早くNYのニュースをキャッチすることです。

2009年4月14日火曜日

リチャード・ストールマンの講演に行ってきた

Richard Stallmanといえばフリーソフトウェアの神様のような存在だ。今回その神様がニューヨークで講演をするとのことで、先日、本人を見に行ってきた。批判の多い人でもあるしそれほど興味の対象でもなかったのだが一度くらいは顔を見ておこうと思ったのだ。話を聞いてみるとやはり氏は偉大な思想家だった。

会場はニューヨークにあるYeshiva Universityの講堂で、参加者は200人くらい。募金などもない完全無料のイベントで、講演後はパーティーまであった。スポンサーがいるのだろうか、ありがたいことである。

講演の内容はソフトウェアの自由と著作権の歴史について。

  • フリーソフトウェアの「フリー」は自由という意味。
    • 無料という意味ではない(有償のフリーソフトウェアはありうる)
  • フリーソフトウェアのユーザには以下の自由があるべきだ
    • プログラムを実行する
    • プログラムの内部を解析する(=ソースコードを読む)
    • プログラムを手を加えずに再配布する
    • プログラムを改変して再配布する
  • フリーでないソフトウェア(proprietary software)はユーザの自由を制限し、ユーザ同士を分断する

著作権の話はアメリカ特有の話が多かったが、要点を拾いだすとこうなる。

  • 古代には著作権の概念はなかった
  • 現代では著作権の保護期間は延長される一方
    • 一部企業の政治活動も関係している(ディズニーなど)
  • 著作権は本来著作者に独占的に使用する権利を保証して技術の進歩を促進するためのもの
    • アメリカ合衆国憲法第1条
  • ところが現代では著作権を保護しすぎて視聴者の権利が阻害されている
    • DRM(デジタル著作権管理)、DVDの暗号化

質疑応答から

質問「最近はどの言語でプログラムを書いていますか」
Richard「時間がなくて実はコードはほとんど書いてないのです」

質問「これだけフリーなOSがある中、どうしてみんなMS Windowsを使っているのでしょう」
Richard「多くの職場で求められるスキルはWindowsですから学校でもWindowsしか教えません。Windowsの教育を受けた人が社会に出て職場にWindowsを導入するというサイクルができています」

その他

GNUの発音はグニューかグヌーかヌーかというような話が昔からあるがRichard本人はグニューと発音していた。本来ヌーとGなしで発音するはずのgnuのぬいぐるみもグニューと呼んでいた。

学者タイプの人によくあるように、言葉の使い方に厳しい。質問者「オープンソースソフトウェアが……」Richard「フリーソフトウェアと言ってください」なおcreatorという言葉もお好きではないそうで、authorかartistと呼ぶべきとのことだった。

2009年3月29日日曜日

世界各地のYAPCはおいくら?

春が来た。コンピュータ関係のカンファレンスは春から秋にかけて行われるため、今年はどこに行こうかと考える時期でもある。ふと思い立って北米・ヨーロッパ・アジア(日本)のPerlカンファレンス、YAPCについて参加費を計算してみたくなった。

生データ

まずは通貨換算をする前の生データから。


YAPC::NAYAPC::EUYAPC::Asia
1999USD 60

2000USD 75GBP 40
2001USD 85EUR 99
2002USD 85EUR 89
2003USD 85EUR 99
2004USD 85GBP 65
2005USD 85EUR 89
2006USD 100GBP 75JPY 4000
2007USD 100EUR 100JPY 4000
2008USD 100DKK 900JPY 3500
2009USD 150EUR 100

USD=米ドル、JPY=円、EUR=ユーロ、GBP=英ポンド、DKK=デンマーククローネ。

ヨーロッパのYAPC::EUは大体100ユーロ前後、北米YAPC::NAは100ドル前後でどちらもゆるやかに増加している。

円に換算してみる

開催初日の為替レートをもとに計算してみた。


YAPC::NAYAPC::EUYAPC::Asia
19997286円

20007911円6087円
200110377円10862円
200210206円10585円
20039999円13366円
20049351円12804円
20059297円12109円
200611607円16630円4000円
200712355円15886円4000円
200810821円19779円3500円
200914681円13011円

グラフはこちら

まず目を引くのがヨーロッパの値上がりである。これはヨーロッパ通貨の値上がりによるところが大きい。デンマークで開催された2008年などは参加費が20000円近くに達している。

それにしてもYAPC::Asiaの安いこと。開催日数やノベルティの違いなど各国のYAPCを単純比較はできないが、それにしても低価格だ。会計報告を読むとスポンサー収入の違いかと思う。

マクドナルドで比較

円換算だと各国の物価・購買力が統計に現れないので、2008年のYAPC参加費をビッグマックの個数で比較してみよう。たとえば、YAPC::NA 2008の参加費用はアメリカのビッグマック(USD 3.57)28個分にあたる。

参加費(現地通貨)参加費(円)ビッグマック
YAPC::NAUSD 1001082128個分
YAPC::EUDKK 9001977932個分
YAPC::AsiaJPY 3500350012.5個分

円換算だとYAPC::EUはYAPC::NAの倍近い価格だが、ビッグマック換算だと大差がないことがわかる。Asiaと他のYAPCは差が縮まったが、それでもNAとEUの半額以下である。

YAPC::EUについて

上の数字を見るとYAPC::EUは高価格に見えてしまうのはやむをえないが、若手参加者に対する配慮が一番大きいことを特筆しておきたい。

  • 学割制度が充実している。2009年のYAPC::EUは学割40ユーロ。一般価格に比べ半額以下である。
  • YAPC::EUの参加者有志がSend-a-Newbieというサイトを始めた。航空券・宿泊費などの補助が必要な25歳未満のYAPC::EU参加者にお金を出し合って応援しようという趣旨である。

参考URL

2009年3月25日水曜日

アメリカ人「日本人なのにアニメを見ないのは人生の無駄づかいだな」

日本人だからアニメを見るだろうと言われても困るのである。

海外のアニメファンにとって日本といえばまずアニメという連想が働くらしく、日本人の私は親しげに話しかけられる。日本人は全員アニメが好きだと思っているアメリカ人さえいるが、アニメが好きかどうか以前に私は映像作品自体をほとんど見ない。DVDを買ったことはないし最後に映画を見たのは10年前のことだ。

 ◇ ◇ ◇

友人にP君という人がいる。ユダヤ系のアメリカ人で超真面目な男であるが、日本のアニメが大好きである。このP君、私が唯一の日本人の友達なのでいつも構ってほしがる。

P君「ナルトのDVDは全部持ってるし英訳の単行本もあるんだけど日本語の単行本がほしい。どこで買えるのかな」

日本語の単行本のほうが話が先に進んでいるから日本語で読みたいらしい。ニューヨークにある紀伊國屋書店で聞いてみればいいのでは。

P君「デスノートのあの部分には矛盾があると思うんだが、なぜかというと、……」

ごめん、デスノートという言葉自体初めて知った。

P君「ユーギオーの続編は出ないのかな」

続編もなにも、私は本編を知らない(註:米国では一年だけテレビ放映されたそうです)。

 ◇ ◇ ◇

あまりに話が噛み合ないので申し訳ないと思い、提案をしてみた。

私「最近のアニメは知らないけど、20年以上前のアニメならわかると思うよ」

目を光らせるP君。

P君「じゃあ君、ジャイガンターは知っているね」

私「そんなの知らないよ」

P君「日本語だとタイトルが違うのかな。ちょっとiPhone貸してみて。YouTubeで検索してみよう」

鉄人28号! これなら知ってる。異国アメリカでジャイガンターという名前になっていたとは。

P君「ジャイガンターは僕たちが生まれる前からアメリカのテレビで放映してたよ。主人公の少年はジミーだ」

ショータローじゃないのか。本当に詳しいなこの人。

 ◇ ◇ ◇

P君「それにしても、日本人のくせにアニメ見ないって本当に信じられない。人生の無駄遣いしてるよ」

そこまで言うか。

ちなみにP君の夢は日本を訪れて秋葉原と三鷹の森ジブリ美術館に行くことである。

2009年3月3日火曜日

MacPortsのselfupdateを忘れた→はまる

MacPortsは各portのバージョンや依存関係といった情報をローカルなファイルに保存している。そのportがインストールされていなくても、である。これがちょっとした問題になることがある。

結論を先に書くと、selfupdateは定期的に実行しなければいけない。

例1:ローカルの情報が古いと旧バージョンのportがインストールされる

caml-sqlite3というportを例に説明してみる。現時点でcaml-sqlite3の最新版は1.3.0だ。

ところが、私の環境でcaml-sqlite3を入れようとすると1.2.0を取りに行く。

# port -v fetch caml-sqlite3
---> Fetching caml-sqlite3
---> ocaml-sqlite3-1.2.0.tar.gz doesn't seem to exist in /opt/local/var/macports/distfiles/caml-sqlite3
---> Attempting to fetch ocaml-sqlite3-1.2.0.tar.gz from http://www.ocaml.info/ocaml_sources/

こうなるのは、私のLeopard上にあるPortfileが古いからだ。このファイルはMacPortsをインストールしたときに作成されている。

# grep version /opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/caml-sqlite3/Portfile 
version 1.2.0
distname ocaml-sqlite3-${version}
#

例2:portがインストールできないこともある

上の場合は旧バージョンの1.2.0がまだ1.3.0同様ダウンロードできるのでまだ良いが、portによっては旧バージョンがダウンロードできない場合もある。p5-errorがその例だ。

# port install p5-error
---> Fetching p5-error
---> Attempting to fetch Error-0.17012.tar.gz from http://ftp.ucr.ac.cr/Unix/CPAN/modules/by-module/Error
(略)
Error: Target org.macports.fetch returned: fetch failed
Error: Status 1 encountered during processing.
#

port installの裏側ではError-0.17012.tar.gzを取りに行っているのにサーバ側には最新版(0.17015)しかないためにダウンロードが失敗している。

解決方法

上の問題を解決するにはselfupdateというコマンドを実行する。

# port selfupdate

出力はこれのどちらかになるようだが

  • selfupdate done!
  • The MacPorts installation is not outdated so it was not updated

どちらにしても/opt/local/var/macports/sources/rsync.macports.org/release/ports/以下のファイルが更新される。

selfupdateを行った後に先のcaml-sqliteでもう一度試してみると無事1.3.0をダウンロードしてくれる。

# port -v fetch caml-sqlite3
---> Fetching caml-sqlite3
---> ocaml-sqlite3-1.3.0.tar.gz doesn't seem to exist in /opt/local/var/macports/distfiles/caml-sqlite3
---> Attempting to fetch ocaml-sqlite3-1.3.0.tar.gz from http://www.ocaml.info/ocaml_sources/

selfupdateは定期的に実行する

今までselfupdateはその名前からして/opt/local/bin/portのバイナリを更新するだけのものだと思っていたが、実はそうではなかった。MacPortsのWikiにこうある。

Selfupdate is the command used to automatically download new Portfiles so that your local copy of MacPorts is aware of new MacPorts software or upgrades to existing software that have been committed to the MacPorts infrastructure. Additionally, this command is used to update the MacPorts software itself - think of it is a Software Update, like its name suggests.

(抄訳)selfupdateコマンドを使うと更新のあったPortfile群をダウンロードできる。さらに、selfupdateの名前のとおり、インストールされているMacPortsのバイナリ自身を更新する。

Selfupdate is a command that can safely be scheduled to automatically run, as it doesn't actually update your installed software, it just "teaches" MacPorts about new updates. Take a look at using crontabs to run your selfupdate.

(抄訳)selfupdateコマンドは更新情報をダウンロードするだけのものなので実際にソフトウェアの更新を行うわけではない。そのため自動的に実行しても安全だ。

実行しても安全というか、実行しないと更新情報が同期できないのだ。

私のcronの設定

rootのcrontabをこのように設定した。

# 毎日午前1:23にselfupdateを実行
23 1 * * * /opt/local/bin/port selfupdate

どこか気持ち悪い

上記をまとめると、

  • MacPortsを安心して使うにはport selfupdateの実行が不可欠
  • selfupdateはcronで定期的に走らせるのが一番

となるのだがどうにも気持ち悪い。

ウェブの世界に例えると、ローカルに保存されたPortfileはHTTPのキャッシュに近いが、自分でキャッシュの更新(selfupdate)をしない限りブラウザが永遠に古いキャッシュを参照しているという状態になっている。Yahooで昨日の検索結果が表示されるのは構わないが、昨日の天気予報が出てくるのはいやだ。

サーバの更新情報をローカルに保存する仕組みの是非はともかく、ユーザが何もしないとその情報が更新されないのが腑に落ちない。MacPortsは他のところがうまくできているので、不思議でならない。サーバ側で走らせるデーモンをrsyncだけにしたかったのだろうか。