2007年5月21日月曜日

preタグの中身がFirefoxで改行されない

<pre>長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト</pre>
と<pre>の中身に長いテキストを書くと、FirefoxをはじめMozilla系列のブラウザだとデフォルトでは改行してくれないことを今日知った。スタイルシートをこうやって変更した(出典)。
pre {
padding:3px;
border:1px solid #333333;
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}

2007年5月20日日曜日

YAPC::NAを大学生にすすめてみるテスト

知り合い経由で、ニューヨークでのインターンシップに応募しようと計画している学生さんの話を聞いた。観光目的で入国し日本人相手の商売を手伝うという内容なのだ。航空券は自腹、さらにそれなりのお金を手配業者に払う上、もちろん無給だそうな(給料が発生したらビザが必要だから当然か)。こういう企画、それなりに需要はあるみたいだから多くは申し上げないが、アメリカで短期間勉強をしてみたいという学生さんはYAPCなどに出席するほうが実があるのではないか。

YAPCはPerlの国際会議である。日本では去年と今年行われ、米国でもYAPC::NA 2007が6月25日からテキサス州ヒューストン大学にて3日間行われる。これはPerlとアメリカに興味のある学生さんには結構おすすめで、
  • アメリカの大学のキャンパスを味わえる(夏休み中ではあるが……)
  • 希望者は大学の寮に泊まれる(好みで一人部屋でも相部屋でも)
  • Perlの講演をたくさん聴ける(web開発の技術などPerlに直接関係ない話もある)
  • 講演後はパーティーで英会話の練習
  • 夜は大学の寮にあるラウンジでさらに英会話の練習
  • YAPCの終了後は翌日からPerlの研修もある(費用別途)
  • 帰国後「アメリカで国際会議に出席してきました」と言える

ヒューストンに4泊するとして、費用をざっくり概算すると12万円くらい。

  • 航空券:50000円
  • 宿泊費:10000円(4泊を大学の寮で、二人一部屋。相部屋がいやなら15000円くらい)
  • 食費:10000円(学食なら3食$21。学食より安い店もある)
  • YAPC参加費:12000円
  • 現地雑費:25000円(ちょっと多めに。NASA見学を仮定)
  • 日本国内交通費・海外旅行保険:15000円

1週間滞在したら15万円くらいだろうか。もちろん節約は可能で、NASAに行かずにヒューストン大学でじっとしていれば、現地の雑費は空港の往復費用のほかはほとんどかからない。お金に余裕のある方は$100程度からそれなりのホテルに宿泊できる。大学院生の方はヒューストン大学の研究室を訪問してみても悪くない(アポはとってね)。

学生さんはテストやバイト・サークルなんかもあるだろうが、この3日間が人生を変えるかもしれない。

なお私はYAPCの宣伝係でもなんでもなく、参加者の一人です。




関連記事

YAPC::NA 2007まとめ

2007年5月8日火曜日

YAPC::Asiaメモ(その8)自文書抽出日本的住所

  • Geography::AddressExtract::Japanができるまで
  • 自然文章から住所を抽出したい
    • 日本の住所パターンを研究
    • 郵便番号DBも使える
    • Regexp::Assembleを使って文字列のリストすべてをカバーする正規表現を作る
  • テクニック
    • 都道府県がなくても補完
    • 港区(東京都と名古屋市にある)の場合は街の名前で判別(港区六本木なら東京都)
  • その他問題
    • 人間の書いた住所はゆらぎが多い
    • 異体字問題(Encodeで対応できるらしい)
    • 変わった住所(京都とか):抽出可能
  • Regexp::Trie使えそう
この講演の前身は昨年10月に行われたShibuya Perl Mongersテクニカルトーク#7。個人的にこれがすごく気になっていたのでとうとう見られて幸せ。

アメリカの住所でおなじことをしようと思ったら取り掛かりとしてGeo::StreetAddress::USというのがあるのだが、これは住所フォーマットの解析だけしかしてくれない。

たとえばニューヨーク市シブヤ123番地があったとして、
use Geo::StreetAddress::US;
use Data::Dumper;

$hashref = Geo::StreetAddress::US
->parse_location("123 Shibuya, New York, NY, 10001");
print Dumper($hashref);
はこういう結果を返す。
$VAR1 = {
'number' => '123',
'street' => 'Shibuya',
'state' => 'NY',
'zip' => '10001',
'city' => 'New York',
'suffix' => undef,
'type' => '',
'prefix' => undef
};

ところがYappoさんのモジュールと違って住所の部分を文章から切り出してくれるわけではなく、たとえば住所ではない文字列が混じった
$hashref = Geo::StreetAddress::US
->parse_location("My address is 123 Shibuya, New York, NY, 10001");
print Dumper($hashref);
にすると
$VAR1 = '';
というさびしい結果に。

さて、どうしよう(続く、かも)。

2007年5月7日月曜日

YAPC::NA 2007のスケジュールが発表された

もう先週のことだが、YAPC::NA 2007のスケジュールが発表され、頭を痛めている。

月曜日から水曜日まで3日間のうち、なにも考えずに一つの部屋にいればいいのは月曜日の午前中と水曜日の午後のみ。それ以外はどこの部屋に行くかを考えなくてはいけない。

ひどいのは月曜日の夕方で、セッションが5部屋で同時進行ときたものだ。15:50からの数独トークは外せないし、そうなると終了の16:45を待たずして16:35のHome Automation with Perl and X10に行かなければならない。ちなみにこのHome Automationはネットで天気をチェックして庭の水まきを制御したりするアメリカならではの内容で、これも外したくない。

火曜日から水曜日の午前中にかけてもほぼずっと3部屋同時進行で、おまけに各セッションの開始・終了時刻がまちまちで最適経路の探索問題を解いているみたいだ。

とはいえ、旅行の計画と一緒でそういう制約条件をあれやこれや考えている時間が一番楽しかったりするのだが。

だいたい、YAPCの入場券は買ったものの飛行機もホテルもまだ予約していない。ガイドブックも買わなくては。

(6月10日追記)
5部屋の同時進行にはさすがに文句が出たらしく、その後最大4部屋に改善された。


関連記事

YAPC::NA 2007まとめ

2007年5月6日日曜日

YAPC::Asiaメモ(その7)Virtualization and Package Deployment with EC2 or パッケージ配布と仮想化(Emerson Mills)・Inside Net::Amazon::EC2

今日はAmazon EC2とS3関係の2題のまとめ。

気になる利用料金が出てこなかったため、勝手に調べた。Amazon EC2のページによるとEC2のお値段はこういうことだそうだ。時間単位の課金は1分でも使えば1時間ぶんの課金が発生する。



2007年5月まで6月から
時間課金$0.10/時間/インスタンス
転送料課金
(アップロード)
$0.20/GB$0.10/GB
転送料課金
(ダウンロード)
$0.20/GB$0.18/GB(毎月最初の10TB)
$0.16/GB(次の40TB)
$0.13/GB(それ以上)


S3のお値段はこんなかんじ。





2007年5月まで6月から
容量課金$0.15/GB/月
転送料課金
(アップロード)
$0.20/GB$0.10/GB
転送料課金
(ダウンロード)
$0.20/GB$0.18/GB(毎月最初の10TB)
$0.16/GB(次の40TB)
$0.13/GB(それ以上)
リクエスト単位の課金(アップロード)なし$0.01/1000 PUT/LISTリクエスト
$0.01/10000 GETリクエストなど
DELETEリクエストは無料


安いかどうかは感じ方次第だが、個人的には基本料がかからないのがうれしいところ。個人で会社を始めたくなったときにはお世話になろうかな。

Virtualization and Package Deployment with EC2 or パッケージ配布と仮想化(Emerson Mills)

  • 自己紹介
    • AWS日本担当。実験・講演・サポート。好きなだけPerlを書いていいと言われたので入社
  • 問題
    • モジュールのインストールがなかなか成功しない(これには会場のほとんどが賛成)
    • 開発者の環境を再現するのは難しい
    • モジュールそのものより依存関係のインストールに時間がかかる(初心者はさらに大変)
  • 仮想化
    • ハードウェアの論理化、リソースの最適化
    • パッケージだけではなく環境そのものを配布する
    • ソースも暗黙の知識も同時に納品
  • EC2とは
    • アマゾンの仮想サーバにアクセスするwebサービスAPI
    • いまのところベータ。インスタンス(物理的なサーバに対応)20台まで起動できる。ベータが終われば好きなだけの台数
    • 仮想サーバのスペックは普通のレンタルサーバかそれ以上
    • 起動して、いろいろインストールして、それをイメージ化
    • イメージをサービスに登録。必要なら実行権限を設定できる(Ingyのみ実行できる、など)
    • EmersonはCatalystの環境をいろいろ作ってみている
  • Q&Aより
    • EC2はシステムの拡張が容易なのでwebのトラフィックが急に増えたときにも対応できてよい
    • 環境が似たようなイメージがたくさんできてしまわないか→それ自体は問題ではない。必要だったらインスタンスのリストから隠すことができる
    • EC2はwebアプリケーションだけではなくUDPを使ったネットワークゲームなども問題なく動く
    • ベータ版でなくなる時期についての正式な情報はまだない
Inside Net::Amazon::EC2(Jeff Kim)

  • EC2:Elastic Computing Cloud
    • バーチャルなLinuxレンタルサーバ
    • 従量課金
    • いまのところベータ。サインアップしてから使えるようになるまでやや時間がかかる
    • 複数のマシンイメージを呼び出しひとつで立ち上げ
    • パーミッションやファイアウォールの管理がグループ化したホストに対してできる
  • S3:Simple Storage Service
    • 従量課金(容量と転送料)
    • すぐにサインアップして使える(だからいますぐ使おう)
    • コンテンツは「バケツ」のなかに入れる
    • FUSE経由でマウントできる
    • 実質上、容量無制限のディスク
    • EC2はS3を使ってデータを保存
    • EC2とS3の間は転送料無料
  • Net::Amazon::EC2
    • 「クエリ」ベースのAPIを使っている
      • SOAPベースのAPIはPerlのSOAPライブラリが力不足のため使わなかった
    • 他の言語にはAPIがあったがPerlにはなかったので作った
    • メソッド:いまのところEC2のAPIにあるものはすべて実装
      • *_image(s)
        • register_image:S3上のAMIをEC2に登録
        • describe_images:インスタンス化できるAMIのリストを返す
        • deregister_image:registerの反対
      • *_instances
        • run_instances:一番重要。指定したAMIインスタンスの開始。引数はインスタンスの最小数・最大数、セキュリティグループ、ユーザデータなど
        • describe_instances:便利。走っている(と最近まで走っていた)インスタンスのリストを返す
        • terminate_instances:インスタンスの終了(変更が破棄されるため注意)
      • *_key_pair(s)
        • create_key_pair:初回のみ使う
        • describe_key_pairs:あまり使わないだろう。EC2アカウントに対しての鍵情報のクエリ
        • delete_key_pair:鍵の消去。インスタンスが走っているとアクセスできなくなるので注意
      • *_image_attribute
        • describe_image_attribute:イメージの属性を返す
        • modify_image_attribute:イメージの属性を変更(いまのところlaunch permissionのみ)
        • reset_image_attribute:イメージの属性をリセット
      • *_security_group
        • create_security_group:セキュリティグループをEC2アカウントに追加
        • describe_security_group:EC2アカウントに設定されているセキュリティグループを表示
        • delete_security_group:アカウントからセキュリティグループを削除。インスタンスが走っているときに実行したらどうなるかは不明だがやめたほうがいいだろう
      • その他
        • authorize_security_group_ingress:ネットワークパーミッション(IPアドレス、ポート)をセキュリティグループに追加
        • revoke_security_group_ingress:authorizeの反対
        • get_console_output:とても便利。仮想マシン(インスタンス)のコンソールにアクセス
        • reboot_instances:インスタンスの再起動
  • 開発予定
    • テストを改善したい。テストの自動化は難しいしテストをするたびに課金される
    • もっとOO。モジュールはOOだが返ってくるデータはOOではない
    • もっとメソッドを追加
    • EC2 APIがアップデートされるたびにこちらも変更

2007年5月5日土曜日

YAPC::Asiaメモ(その6)WebAPIで遊び倒す

WebAPIとマッシュアップ
  • WebAPIといえばマッシュアップが中心
  • マッシュアップの流行りは地図系、特にGoogle Maps(次いでFlickrとAmazon)
OpenIDを使ったIP電話のデモ
  • OpenIDはシングルサインオンの認証システム
  • Click to Callを作っている(ユーザがwebで自分の電話番号を入力すると電話がかかってくる)
  • Asterisk(フリーのPBXのソフトウェア)を利用
  • コマンドラインのSIPクライアントも使う(SIP=Session Initiation Protocol)
  • OpenIDで認証
  • デモが動かず。どこかでタイムアウト?
EC2のデモをスクリーンキャストで
  • EC2:バーチャルなサーバをインターネット上で利用できる(詳しくは他の人のプレゼンテーションで)
  • FireFoxのadd-on(Amazon EC2 UI)で同時にアクセス、モニタしてみよう
  • まず秘密鍵をつくる
  • サーバを起動。IPアドレスは動的に振られる。DDNSを使って運用するのが現実的
  • 起動するたびに課金(忘れているとずっと課金)
Net::OpenID::Consumer
  • PODわからない。リンク先はNot Found
  • OpenID guestbookソースコードが見えた(mnメモ:ソースコードは流出ではないらしい
  • なにかをマッシュアップしてみよう→相手がだれだかわからないのに使うものといえば電話
  • 最近の問題:IP電話のSPAM(SPIT=Spam over Internet Telephony)
  • SIPとOpenIDを組み合わせればよい
  • OSPを使えというひともいる(でもOSPは大変)
ほかに使えるもの
実装例
  • muckOS(Amazon EC2、S3、SQSを利用)
  • RightScale(これもEC2、S3、SQSの組み合わせを。無料で何時間か使える。解説記事
台場さんのプレゼンテーションはうまい。内容をしぼってゆっくり話すとここまでわかりやすくなる、といういい例だ。見習わねば。

2007年5月3日木曜日

YAPC::Asiaメモ(その5)Lightning Talksを5題

今日はLightning Talksを5題視聴した。

Perlbal Selector Plugin
  • Perlbalはソフトウェアロードバランサ
  • BigIPもいいけどPerlbalは無料だしPerlだし
  • Pluginで拡張ができる
  • URLによってバックエンドを切り替えたい→Perlbal::Plugin::Vhostsを拡張
  • PerlbalのテストはPerlbal::Testで
  • PerlbalもMogileFSもかなりいい
  • Perlbalはたまに死にます
Perlbalは使ったことがないが、自分で拡張できるインターフェイスがあるのはすごく好み。PerlbalもMogileFSもSix Apart社の外で一般的に使われているんだなあというのが正直な感想。

BabelBee - Collaborative Translation Tool
  • Jifty使ってる
  • Hiveminderのために作った
  • poファイルの翻訳が便利になる
  • すでに翻訳したものに似ていればそこから翻訳を採用
  • AJAXいっぱい
ビデオの画面が小さくて、AJAXでなにをやっているのかが見えなかった。一般公開されたときに要チェックかな。

(ミニ)カンファレンス中継のあれこれ
  • i-revoの紹介:KONAMIとIIJの合弁。ポータルサイトの運営
  • 最近Shibuya.pmのイベントなどでミニカンファレンス中継をやってます
  • お手軽なストリーミング中継は低解像度でのWindows Media。
  • 問題
    • 低解像度だとプレゼンテーションの資料が読みにくい
    • バッファリングが起こるのは気になる
  • 解決策:ストリーミングと静止画(プレゼン画面)の組み合わせ
  • ニコニコ動画みたいにできないかな、と発想
    • ブラウザ画面を3分割。動画、静止画、IRCでのつっこみを同時に見せる
  • Perl使ってます。DBはSQLite
  • ストリーミング中継のトラフィックは100人で40Mbps
(・∀・)イイ!
今回のYAPC::Asiaは遠方ということで会場に行けなかったのだが、中継があればよかったのに。
静止画とIRCの連携だけで構わないので、来年なんとかなりませんですか(おねだり)。
場合によっては静止画だけ中継してもらえればあとは会場に電話をかけて音声をひろって……。

そこまでするなら飛行機に乗って行けって話ではあるのだが。

Device::USB::MissileLanuchers
  • USBランチャというおもちゃがある
  • Device::USB::MissileLanucherはセクシー
  • ただし1台しか使えないので
  • 複数操作するためにDevice::USB::MissileLaunchersというものを作った
  • Web APIで操作できる
    • GET http://.../0/up
    • GET http://.../0/down
    • GET http://.../0/left
  • GET http://.../0/fire
あちこちのwebで取り上げられているので今さらですが、感服です。ほかのUSB toysに応用できないかと思ってみても、ミサイル以上に破壊力のあるものはなさそう。女の子受けを狙ったDevice::USB::ChristmasTreeとかか?

Bytecode for Wikis

バイトコードとはバーチャルマシン業界でよく使う言葉で、平たくいうと中間コードのこと。
  • 「このトークでは真面目なことしか言いません」(会場から笑い声)
  • Document::Formatterというモジュールを作っている
  • 今夜CPANに登場予定(実際はDocument::Toolsになったらしい)
  • Document::Parser(パーサ)、Document::AST(抽象構文木)、Document::Emitter(エミッタ)がベースクラス。サブクラスを自分で書く
  • いろいろな文書フォーマットのパーサが簡単に書ける。例:Wiki、HTML、POD、MS Word、Spork
自分で必要なものができて、それを書き捨てるのではなくてモジュール化してさらに公開をちゃんとする、っていうのはエラい。その上に楽しい人で、私はIngyのファンです。