2009年6月27日土曜日

簡体字から繁体字の変換をGreasemonkeyで

簡体字の文章を日本の漢字に変換するツールが公開されている。

同じ要領で簡体字から繁体字に変換する方法はないかと探していたら、案の定Greasemonkeyを公開している人がいた。

ただ、これをそのまま実行すると日本語のページさえ繁体字に変換されてしまう。恋愛が戀愛になってしまうとあまりラブリーな感じがしない。

完全な解決方法ではないが、スクリプトを1行だけ変えてひらがなが入っているノードは繁体字に変換しないようにした。

function traditionalize(cc) {
if (cc.match(/[ぁ-ん]/)) return cc; // ここ
var str="";

繁体字から簡体字への変換

その逆に、簡体字への変換を行うGreasemonkeyもある。

2009年5月31日日曜日

海外で働くということ

他の国で働こうと他の県に就職しようとそれは大した違いではない。

その昔、私たちの親の世代が海外で仕事を見つけるのはとても大変なことだった。外国の新聞を買ってきて求人広告を切り抜き、履歴書を封筒に入れてエアメール。国際電話で面接ということになっても電話代が高かった。航空券はもっと高かった。

今はどうか。世界の求人情報がネットでいくらでも手に入るし、履歴書を送るのも一瞬だ。スカイプもある。十数万円と少しの時間でニューヨークに行ける。

言葉を別にすれば東京の人が沖縄の仕事を探すのもニューヨークの仕事を探すのも同じことだ。

これだけ世界が小さくなった今、海外で働くということを特別扱いすることはまったくない。大切なのは自分がどういう人生をどのような環境で送りたいかであって、それは日本か海外かというような単純な二択ではない。世界には二百の国があり無数の都市がある。そして住む場所と働く場所は都市の数だけ選択肢がある。

ブロードウェイで働きたければニューヨークに住めばよいし、IT業界の先端で仕事をしたければシリコンバレーに引っ越せばいい。大都会に住みたければ東京が世界一だ。ビーチが好きだという理由で沖縄に住むのも良いだろう。もちろん生まれ育った土地が一番良いという人はそれがいい。

だから、渡辺さんのブログのように、日本がダメだから海外で働こうという二択の消去法的な考えには抵抗がある。住むべき場所はやりたいことによって違うし、幸せも人それぞれだ。

ところで私は日本の将来を悲観していない。そもそも私は日本が好きだし、朝はご飯と味噌汁に限るし、日本は最高の国だと思っている。税金で教育を受けさせてもらった義理もある。どこに住もうとも国を思う気持ちは忘れないし、どうすれば国の役に立てるかを常に考えていたい。

2009年5月24日日曜日

一流ブランドのサービスとは

ニューヨークのティファニーといえば映画の舞台にもなった五番街の店舗だ。

かれこれ10年近く前、ティファニーニューヨークの刻印入りキーホルダーをもらったことがある。なかなか使いやすく、それからずっと使っている。鍵をまとめて棒に差し、ネジをしめるシンプルな構造のものだ。

たとえティファニーとはいえ、長い間使っているとガタがくる。特にネジの部分がゆるくなり、勝手に鍵が外れたりするようになってきた。実害はあまりないので買い替えもせずに使い続けていた。

さて先日、用事でティファニーに行ってきたときのこと。ふと思い出してキーホルダーを出してみた。

「これ10年前の品なんですけど似たようなのありますか? ネジが外れるので新しいのを買おうかと思って」

それを聞いた店員、

「無料で修理させていただきます」

そういう返事は予期していず驚いた。

「悪いですよ、古いもので傷もついてますし」

店員は言った。

「ちゃんと磨いて傷も見えなくしますので」

また驚いた。アメリカでこれだけちゃんとしたサービスを受けるのははじめてだ。

ブランド好きな人は「一年しか持たないカバンを買うのなら、十倍の値段でエルメスを買って十年使え」という。これは真理かもしれないと思った。

2009年5月18日月曜日

ニューヨークの大統領機低空飛行の件

4月下旬の時事通信の記事より。日本でもニュースになったから覚えている方がいるかもしれない。

大統領機低空旋回で避難騒ぎ=自由の女神背景に撮影-NY

 【ニューヨーク27日時事】オバマ米大統領の専用機が27日、戦闘機を伴ってニューヨーク市上空を低空旋回し、旅客機が高層ビルに突っ込んだ2001年の同時テロを想起した数百人が避難する騒ぎになった。実は軍による写真撮影の一環で、ホワイトハウスは謝罪を表明。

ちなみにウォールストリートジャーナルの記事では数千人が避難したことになっている。こちらが正しい数字だと思う。

それはともかく。これはひどかった。2001年の同時多発テロのときにニューヨークにいなかった私も鳥肌が立ち体が震えた。

◇ ◇ ◇ 

月曜日の朝10時。最高気温が30度を超えるという予報のあった快晴の日だ。飛行機の飛ぶ音が随分大きく聞こえるので空を見た。旅客機サイズのボーイング747型機が低空飛行をしていた。

ニューヨークでは常に飛行機が上空を飛んでいるが、これほど機体が大きく見えるのは普通ではない。さらに飛行機は同じところを小さい半径で旋回している。あたかも突撃するビルに狙いを定めているかのように。

飛行機の轟音は大きくなり、道を歩いていた人も立ち止まり飛行機を見上げた。その場にいる全員があの日、9月11日のことを思った。

「戦闘機もいる」

だれかが叫んだ。ボーイングより機体が小さいので目立たなかったが、F-16戦闘機がボーイングのあとにぴったり着いて一緒に飛んでいる。

「ボーイングを撃ち落とすんじゃないか?」
「嘘だろ」

のような会話が聞かれる。

「逃げろ」

誰かが言った。

◇ ◇ ◇

飛行機が落ちてくるかもしれない状況でどこに避難するかは難しい問題だ。とりあえず大きなビルの近くは避けたほうがよさそうだ。もっとも建物の中からは人が外に退避してきているので近寄れない。しかし、とりあえず建物が少ない場所に移って善後策を考えている間に「この飛行は実は撮影のためのものでした。安全です」という発表がなされた。

ほんの30分程度のことだったが、避難したほかの人たちと同様、私も死ぬ可能性を少し考えた。人生まだやり残したことがたくさんあるのに、とも思った。

私は9月11日のテロをテレビでしか見たことがない。それでも恐怖と緊張は言葉で表せないほどだった。テロを知るニューヨーカーがこの撮影に対し怒りを表明していた気持ちはよくわかる。

◇ ◇ ◇

スラッシュドット・ジャパンに当を得た書き込みがあった。

「○○省が事前の徹底通知をおろそかにしたまま、東京メトロの大きな駅にて、科学防護服を着けた集団を使って写真撮影をおこなう」に等しいことなのかもしれない。(laggnuggさん)

すばらしい比喩だと思う。

◇ ◇ ◇

事件の直後に詳細な体験を書けばよかったのだろうが、とてもその瞬間を振り返る気持ちにならなかった。というわけで3週間たった今、これを書いてみる。

動画リンク

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のニュースをキャッチすることです。