新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2011-09-03

[Perl]dotcloudにPSGIアプリを上げてみた

しばらく放置気味だったブログも久々に更新。

さて、夏バテ気味の僕もついにあのdotcloudに入門してみました。

作業するための環境を用意する

今回は作業環境にさくらVPS(CentOS5.5)を使うことにしました。理由は聞かないで。

python2.6とeazy_install, pipを入れる必要があるらしい

こちらの記事を参考に、素直にrootでpython2.6などをビルド&インストールしました。

補足としては、先のブログの「インストール」のところにあるコードスニペットの7行目
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
ここは、「こういう行が Modules/Setup の中でコメントアウトされているから、それをコメントインしなさいね」の意であるようです。

ちなみにこのステップをpythonbrewを使って楽することも出来るってすごい人から教えてもらいました。すげー!

dotcloud コマンドラインツールをインストール

どう見ても
# easy_install-2.6 dotcloud
これだけでした。本当にありがとうございました。

一般ユーザ権限でpython2.6を使えるように設定

先のブログにも書いてますけど、$HOME/.bashrcに以下を追記すればOKです。
PATH=$PATH:/usr/local/python/bin
alias python='python2.6'

アプリケーションをdotcloudに登録する

デプロイの準備としてアプリケーション名をdotcloudに教える必要があるので、アプリケーション登録をします。
$ dotcloud create [App-Name]
[App-Name]には半角英字4文字以上でアプリケーション名を入れてあげましょう。
初回起動時に限り、dotcloudのapi-keyを聞かれますので、このあたりでコピーし、ターミナルに貼り付けてやればいいです。

PSGIアプリをこさえてUPする

このあたりにグッドでナイスなドキュメントがありますが、重要なのはdotcloud.ymlという設定ファイルと、アプリのファイル構造です。
とはいえ、本当にスッカスカの状態のアプリを作って上げないことには基本がわかりにくい気もするので、スッカスカアプリ(ハローワールド)を仕立てていきます。

アプリのディレクトリを作る

そのまんまです。好きな名前のディレクトリ名でいいでしょう。
$ mkdir myhello

アプリのルートディレクトリを作る

approotと呼ばれるディレクトリを用意する必要があります。さっき作ったディレクトリの直下に置くということさえ守れば、ディレクトリ名はなんでもOKです。
$ mkdir myhello/oreapp

dotcloud.ymlを書く

dotcloudにアプリを上げて適正に動作させるためには、dotcloud.ymlが不可欠です。とはいえ、非常にシンプルなので臆せずに。viなどのエディタで、先に作成したアプリのディレクトリ直下(approotと同列)にdotcloud.ymlを作りましょう。
www:
    type: perl
    approot: oreapp

app.psgiを書く

取り急ぎ以下のようなアプリを書いて、oreapp/app.psgi として保存します。
sub {
    [ 200, [ 'Contents-type' => 'text/html' ], [ 'All your vase are belong to ass' ] ]
}

デプロイする

dotcloudにアプリをデプロイします。
$ dotcloud push myhello ./myhello/

すると、rsyncで同期しているような表示がでてきて、ちょっとまっていると
2011-09-02 15:31:08 [api] All the services are ready. Beginning the build.
2011-09-02 15:31:08 [www.0] The build started
2011-09-02 15:31:09 [www.0] Fetched code revision rsync-1314977467.1
2011-09-02 15:31:11 [www.0] Reloading nginx configuration: nginx.
2011-09-02 15:31:13 [www.0] uwsgi: started
2011-09-02 15:31:14 [www.0] The build finished successfully
2011-09-02 15:31:14 [api] Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://ytnobody-myhello.dotcloud.com/
みたいな感じの表示が出てきます。これでデプロイ終了です。
最後に表示されたURLにアクセスして、
All your vase are belong to ass
と表示されていれば無事にアプリが稼動しています。

perl on dotcloud に関するもっと良い情報

hachioji.pm常連のすごい人がまとめてるPerl on DotCloud まとめがいい感じです。

さいごに

途中から書くのだるくなっちゃって、テキトーな感じになりましたが、意外とdotcloudは難しくないぞ、ということを言いたかったのであります。

ついでに

こうなったらどうすればいいのでしょうか。どなたか教えてください><
Deployment for "ytnobody" triggered. Will be available in a few seconds.
2011-09-02 16:31:15 [api] Deploy ytnobody scheduled for revision=latest
2011-09-02 16:31:15 [api] Waiting for the build. (It may take a few minutes)
2011-09-02 16:31:15 [api] All the services are ready. Beginning the build.
2011-09-02 16:31:15 [www.0] The build started
2011-09-02 16:31:16 [www.0] Fetched code revision rsync-1314981073.92
2011-09-02 16:31:17 [www.0] --> Working on .
2011-09-02 16:31:17 [www.0] Configuring Ytnobody-Hello-0.01 ... OK
2011-09-02 16:31:17 [www.0] ==> Found dependencies: Pickles
2011-09-02 16:31:18 [www.0] --> Working on Pickles
2011-09-02 16:31:18 [www.0] Fetching http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/Pickles-0.08.tar.gz ... OK
2011-09-02 16:31:18 [www.0] Configuring Pickles-0.08 ... N/A
2011-09-02 16:31:18 [www.0] ! Configure failed for Pickles-0.08. See /home/dotcloud/.cpanm/build.log for details.
2011-09-02 16:31:18 [www.0] ! Bailing out the installation for Ytnobody-Hello-0.01. Retry with --prompt or --force.
2011-09-02 16:31:20 [www.0] Reloading nginx configuration: nginx.
2011-09-02 16:31:24 [www.0] uwsgi: stopped
2011-09-02 16:31:24 [www.0] uwsgi: ERROR (abnormal termination)
2011-09-02 16:31:24 [www.0] The build finished successfully
2011-09-02 16:31:24 [api] Deploy finished

調査の仕方というかsshログインの仕方がわかったのでメモ。
$ dotcloud ssh [appname].[servicename]

で、$HOME/.cpanm/build.logを漁ってみたところ、疑問は氷解。

    * Module::Install::AuthorTests;
    * Module::Install::TestTarget;

こいつらが足りなかったので、

$ cpanm Module::Install::AuthorTests Module::Install::TestTarget

としてから再度PicklesベースのアプリをデプロイしてやればOKでした。

2011-07-23

[Perl?]takao.mtにいってきた

正直へとへとなので

まともに記事を書く気力がありません!
そのかわり、こちらでアルバムを公開しておきました。
今回に関しては、レポートにならないですね><

感想だけ

山ビールうめえ!
まかまかさんへ
酔ーツごちそうさまでした!!!!

ちなみにこちらがhachioji.pmの記事。

2011-07-10

[Perl]Shibuya Perl Mongersテクニカルトーク#16 に行ってきた

7月6日(水)にmixiさんで開催されたShibuya Perl Mongersテクニカルトーク#16に参加してきました。

テーマは正規↑表現↓・・・///

__gfx__サンの発表で、正規表現が正規↑表現↓と発音されていたのを機に、休憩時間のあいだに「正規表現の正しい発音とは何か?」のような議論がアツく繰り広げられていました(おもに弾さんとか)。一歩間違えばgenital expressionsとも捉えられかねないです><!

さて、一応ではありますが、各発表ごとに概要と感想が入り混じったようなものをまとめてみました。
  • Dan the (Irr|R)egular Expressionist [by @dankogai]
    • 「まどか☆マギカ」ネタが随所に散りばめてあった
      • 原作見てないからほんのりとしかわからなかった;;アニメとかあまり見ないので。。。
      • 「すべての魔女を消し去りたい」?なら「s/魔女//g;」!命かけずにコードかけ!
        • これが言いたかっただけじゃないかと・・・w
    • 正規表現の使いすぎに注意
      • /(foo|bar)/は無駄。
        • /(a|b|c|d)/にかかるコストは/[abcd]/の4倍以上
          • ここで言うコストはCPUコストのことでOK?
      • 素手で変態的な正規表現書くくらいなら・・・
        • Regexp::Common使いましょう。
    • Regexp::Assembleをつかうと、複数パターンのRegexのうちどれにマッチしたか検出可能。
      • なんか色々多機能っぽいモジュールなので、PODを熟読すべし
    • 正規表現についてはPerlがルール。
      • つまりperlを通して身につけた正規表現の技は他言語でもだいたい通用する!

  • スペシャルゲスト「正規表現メモ」 [by 木村浩一さん]
    • 「正規表現メモ」は黒歴史。
      • 出版社から過去数度お声がかかったらしいが、結構ボツになった原稿も多数あったのだそう。
        • 当該サイトは初見だったけど、非常によくまとめられており、regexを深く掘り下げるに十分な教科書となり得ると思います。
    • [=e=]って何にマッチするか知ってますか?
      • "e"のほか、ёなどにもマッチ。
        • tclの正規表現です!
          • マイナーすぎてわからんとです!><
    • JPerl5.6
      • 幻?!
        • Perl5.6で追加された戻り読みによって、JPerl5.6は幻の存在となった。
    • 3種類の正規表現

  • Hello, re::engine! [by __gfx__]
    • この人のイントネーション「正規↑表現↓」が後々いろんなところに影響をもたらす。
    • Perlの正規↑表現↓エンジンはpluggable
    • 素数判定の正規↑表現↓
    • そしてトーク中にcommit
      • git commit -m "Update"
      • ちょ、お行儀www
      • 一同爆笑w
    • re::engine::OnigurumaはバックトラックしてもSEGVが発生しない
    • re::engine::boostは遅すぎて使いもんにならない
      • 正規表現のデバッグになら使えそうという声も。

  • 正規表現の限界 [by sinya8282]
    • 正規表現愛
    • いろいろなものを正規表現であらわしたい癖がある
    • 魔女ネタに憧れ・・・
    • とある否定の正規表現
      • 正規表現の否定は難しい
        • というか変態的
      • DFAにしてしまえば否定も簡単ですよ!
        • DFAの状態遷移図をスライドに載せまくり
          • DFA祭りではないですねw
          • 「皆さんは正規表現がみたいんですよね?」
        • regex->NFA->DFA->否定のDFA->GNFA->否定の正規表現
          • not /abc/ = /((a?|ab)|((([^a]|a[^b])|ab[^c])|abc.).*)/
            • ここでdankogaiによるキャプチャ使用についてのツッコミ。
    • とある再帰の正規表現
      • \Rをつかった再帰処理
        • 140文字以内の四則演算
          • 69回が再帰上限。
          • 約40ゼタ文字に相当。。。
            • あたまいたいです><
    そしてLT。
    • 僕の考えた最強の正規表現エンジン [by sinya8282]
      • とにかく速度重視!
      • 正規表現ジェネレータRegen
        • Xbyakで動的に最適化されたコードを生成

    • Plaggerで覚えたPerlの正規表現 [by yusukebe]
      • ヘアースタイル(モヒカン)は某有名人のオマージュ
      • エロサイト収集用YAMLの数々に正規表現
        • そういえばいまどきYAMLは無しだよなあと思いながら聞いていた。
          • Plaggerって5年くらい前のプロダクトだし仕方ない

    • Regexp::Assembleで正規表現を作るとか [by yappo]
      • 正規↑表現↓のイントネーションに苦戦した結果、本題に入る前に銅鑼。
        • ホントはGroongaの話をするつもりだったらしい。。。
        • 正規↑表現↓の被害を露骨に食らった例

    • 再帰的正規表現 [by takesako]
      • 再帰的正規表現を駆使してJSON Validatorを実装。
        • (?R)や?(DEFINE)がでてきた
        • 今回のLTでもっとも正統派???

    • 僕と契約して、自己言及コードになってよ! [by sugyan]
      • quine(自分のソースそのものを出力するだけのプログラム)がQBを出力し、それをさらにPerlにくわせてやるとQBがいろいろ喋り捲るというもの
        • 厳密に言うと出力->入力ごとに異なる結果が出力されるので、quineとはいえない。
      • もともとRubyで実装されたものをPerlに移植。

    • いろいろなものを正規に表現してみよう [by nipotan]
      • RegEx
        • 正規表現共有サイト
          • 非常にすばらしいコンセプト。
          • しかし、残念な正規表現が多い
      • 郵便番号、電話番号に*正しく*マッチングする正規表現
        • 電話番号についてはNumber::Phone::JPで
          • 正規表現そのものではえらく長大なものになる
          • 素手で書くのは狂気の沙汰なので、モジュール化
        • 郵便番号向けにNumber::ZipCode::JPをshipped
          • この辺のソースを見ればわかると思いますが、まさに正規↑表現↓の狂気に取り憑かれたようなコード。
          • MySQLに郵便番号マスタを持たせるより多少早いですよ!!

    ちなみに、直ぐ隣の大きい部屋でmixiさんのご好意で開かれた懇親会では、jcode.pl開発者の歌代和正氏による乾杯のご発声がありました。(かなり豪華な食事が出ました!mixi++)
    そして、なぜか同じテーブルに集うHachioji.pmの面々。ここまでくればある種、異様な集団ですねw


    歌代氏。あのjcode.pl開発者がついにEncode.pmを使って一言。
    「いいですねぇ、あれ。使いやすいです!」

    閉会後、会場に入れなかったmakamakaさんがビルの前で途方にくれていた(正しくはAcme大全2011を販売していた)ので、Hachioji.pmのメンバーが拍手で労ったのでした。
    最後にはmakamakaさんの胃袋を満たすべく、ミニHachioji.pmを急遽開催(といっても、ただ飲み食いしに行っただけですけど)。1日に2つのpmに参加するという無茶苦茶をやってのけたのでした。たのしかったー!!

    mixiうちわについて

    すでにshinpei_cmykさんが当日のうちに解説記事をかいてくれています。
    こういう書き方もできるのがperlの面白いところだと僕は思います。

    2011-06-26

    [Perl]Hachioji.pm #6

    先日開催のHachioji.pm #6に参加してきました。
    思い出したかのようにトイデジで写真を撮っておいたのですが、よくわからない状態のものばかりとなってしまいました。すみませんすみません><

    カレー食べながらネタトーク


    さて、今回のお店はカレー&ダイニング Very wellさん。
    夏バテ克服にカレーはもってこいのチョイスですね!

    今回はキャンセル5名ということもあって貸切下限の15名に届かず、急遽貸切をキャンセルせざるを得ない状況となってしまいました。それにも関わらず大いに盛り上がったのは、開始時刻前から到着したメンバーから順に早々と出来上がっていたところが大きいと思います。このいい感じのアバウトさ加減こそHachioji.pmメソッドですよ!


    定員を割りましたが、非常に盛り上がりました!

    各自、各々の近況やネタトーク(主にGANC教祖によるGANCネタ)で盛り上がっているところ、おもむろに(というより遅れて)makamakaさんの登場。
    皆で拍手で迎えるという当会合の恒例行事もきっちりと執り行われました。
    ちなみに彼はATNDで


    1. makamaka_at_donzokomakamaka_at_donzoko : 遅刻しない自信があります!
    などと宣言しているのですが、これは折るべくして作られたフラグなのでしょう。


    これがGANC神だ!!!!!! (by @shinpei_cmykさん)

    ちなみにネタトークで盛り上がっていて、すっかりカレーの写真を撮り忘れてしまいました><


    そしてこちらがGANC教祖の方


    二次会場へ移動

    すっかり酒の入りきった十数名の男たちが、これまたすっかり「聖地」となりつつある名店「タイラーンナー」の前で数分ほど待つことに。この日はお店がいつも以上の混雑振りだったようで、席が開くまで時間がかかったのです。


    ピンぼけちゃったけど、「聖地」巡礼を待つ男たちw

    タイ料理屋でLT



    おなじみの光景。みんなMac持ってますね

    今回のテーマは「省エネ・エコ」。非常に難しいテーマでした。
    LTのざくっとした内容を覚えている限り列挙します。

    umeyukiさん:東電の「おとくなナイト」について
    夜行性のあなたに。趣味のコーディング等は大抵夜間なので効果的か。

    mgikenさん:はじめてのGANCアプリ
    GANCでブログアプリを作ったというお話。
    投稿画面は未着手のため、記事作成はCouchDBの管理画面から行うという破天荒っぷり。

    ytnobody:バッドノウハウはエコの母
    2011年のエコなperl=正規表現!?タイトルと内容がかみ合っていない!
    (資料はこちら。※PDF注意)

    nekoyaさん:URI::Escape::XSでエコライフ
    おなじみURI::Escape。しかし意外と重い。そこでURI::Escape::XS!
    Mouseは比較的エコ。しかしMoose、テメーはだめだ

    okamuuuさん:knockout.js
    JavascriptのMVVMフレームワーク
    コード品質の画一化のためにもフレームワークは有用

    shinpei_cmykさん:運用に省コストを強いられる例
    ホスティングで困ること:ローカルネットワークに後からサーバ増設できない
    DBサーバのお引越しはどうしてるの?
    >リモートでレプリケーションをしましたよ!(by nekoyaさん)

    hide_o_55さん:PerlでGroongaをごにょごにょ
    GroongaのHTML-APIはローカルI/Fをバインドしているので、Perlでproxyっぽいことをするモジュール作った

    norry_gogoさん:バージョン管理・テスト自動化などでエコを目指す
    プログラマはすべからくエコである

    uzullaさん:UPSと車のバッテリで停電対策/cloud9でファミレスコーディング
    家にUPSが4つもある!
    ブラウザさえあればエディタ・gitレポジトリ操作が可能。デプロイもできるようになる予定。

    makamakaさん:ハイブリッド・エコLT
    物理的エコ→紙のLT資料を薄く・軽く・小さくする
    謎の紙片「さっきまでA4だった」LT資料???配布。
    LT資料じゃなくて「くじ」!
    「あたり」を引いた人にそれぞれ「エコ」「高尾山の天狗」についてLTしてもらうという無茶振りメソッドだった!

    次回は"Takao.mt"!

    次回のHachioji.pmは高尾山登山イベント"Takao.mt"です!ハッカソンやりたい人は各自企画してくださいとのことですので、そのつもりで!
    現地はWiMAXおよびEMobileが絶望的に使えないようです。もしかすると僕がcpanレポジトリのミラーを用意するかもしれません。気が向けば、ですが!
    7/23(土) 11:0014:00 京王線高尾山口駅前に集合です。