東京オリンピックが決まりましたね。
このブログの更新も YAPC のタイミングに年一回というオリンピック的な記念行事になりつつあります。
こんばんは。

2013-09-21 14.10.33


今年で8回目となる YAPC::Asia に今年も参加してきました。上期末ということもあり、一日目は懇親会の挨拶だけの参加となってしまいましたが、二日目は久々に登壇させてもらうなどフル参加をさせてもらいました。

今回はうちの会社が懇親会のスポンサーをさせていただいた関係上、懇親会で挨拶をしてくれと人事の方から言われていました。が、懇親会の挨拶だけの参加というのもな〜...ということで、トークの申し込みをさせてもらいました。申込時は「2ヶ月前だし、今からコツコツ作れば余裕で間に合うだろう...」なんて思っていたのですが、結局前日徹夜もどきをせざるを得ないという、小学生以来全く何も成長していないことを証明する羽目になりました。「YAPC とは酒と睡魔との戦い」とはよく言ったものです。

で、トークの方ですが、「Perl で作るメディアストリーミングサーバー」と題して、モダンなストリーミング技術の紹介と、Perl での実装方法を紹介させていただきました。ぶっちゃけ、最近のストリーミング技術はクライアント、特に HTML5 ブラウザーががんばってくれる傾向にあるのとオープンな仕様を使うことに向かっているので、サーバー側で頑張ることは大分減っています。ので、実装らしき実装は特にないのですが、今回このトークで参加したのは、YAPC でもっとホビープログラミングの話が LT だけではなく本編であってもいいな〜...と思ってたからでした。もちろん大規模なトラフィックを支える〜みたいな仕事に直結した話や、環境整備についてみたいな話や、言語実装についての話は、皆興味がある話だし、絶対にあるべき話だと思うのですが、もうちょっと「趣味の道具」として Perl を使う話があってもいいかなーと思っての登壇でした。まぁ、仕事でコードを書くことはほとんどないので、それしか話すことがない!というのもありますが...ありがたいことに裏が @miyagawa さんや、@goccy54 さんのトークにも関わらず、狭い会場ながら立ち見が出たのは単純に嬉しかったです。ありがとうございました。


他のトークでは、@naoya_ito さんをモデレーターとしたトークセッションでは、奇しくも自分の去年の YAPC の記事で触れたとおりの結論となったのが興味深かったです。やはり言語はツールであり、エンジニア・企業としてはそれに固執してしまうのは非常に危険であり、一方で言語の方は使う側のトレンドをきちんと取り入れていくことが重要だと改めて思いました。

また、今年の基調講演は LINE の @ikebe さんがエンジニアマネージメントの話をしていました。僕も彼とは推しが違うものの、会社ではかなり似たようなポジションにあるのと、一昨年の YAPC で同じような話をさせていただいたので大変興味深かく最前列で光る棒を持って拝聴しました。@daiba さんが来ていなかったので、テキーラを飲めなかったのは残念でした。

2013-09-21 17.39.52


サプライズと言えば、今回の YAPC::Asia をもって、運営を引っぱってくれていた @lestrrat さんと @941 さんの卒業というアナウンスがありました。今回1000人を超えた、これほどの大きなカンファレンスを運営するのはすごく大変なのに、仕事や家庭を抱えながら続けてくれたお二人には感謝しても感謝しきれません。本当にご苦労様&ありがとうございました!

そして、そのお二人の元で今年も運営に奔走してくださったボランティアの皆様、ありがとうございました!

そして、そして、 Perl Monger の皆様、今年もこんな楽しいお祭りをありがとうございました!

2013-09-21 18.29.51


来年ももちろん開催されると信じているので See you in YAPC::Asia 2014!

YAPC に参加したのに blog を書かないと怪僧に激詰めされると聞いて、久々に blog 見たら前回のエントリーがまさかの YAPC::Asia 2011 のエントリーで特保コーラを噴射しました。
こんばんは。

2012-09-29 18.38.12

今回は前回と違ってスピーカー登録をしていなかったのと、iPhone 5 の入荷仕事の関係上1日目の大半を抜けざるを得なかったので、参加したとは言い難いのですが、とりあえず行ってきました。

各トークの感想は他の blog に譲るとして、ちょっと気になったのが charsbar さんの CPAN Author の動向調査で全体的にアクティビティが下がってるのでは?という発表でした。これは最近思うことが色々あって、前日に自分から charsbar さんにお願いして出してもらったのですが、結果としてはだいたい予想通りでした。

ただ、これに対しては charsbar さんも壇上で言っていたとおり、色んなとらえ方があると思うのですが、個人的には直近ではこれ自体には特に大きな危惧は抱いていません。例えば自分の会社、特に自分の部署ではもちろん Perl をメインの言語として使っているし、恐らく Web アプリケションのサーバーサイドで Perl で裁いているトラフィックとしては日本、ひょっとしたら世界一だと思っています。なので Perl 自体には雇用はまだまだあると思ってるし、これからもしばらくはあると思っています。

が、別のセッションで kazuho さんが指摘していたとおり、ビジネス要件や技術進化が進む中では、適材適所に技術を使っていけばいいと思うのはごく自然なことで、例えば、サーバーサイドで非同期なものは node.js でやった方が楽だと思うし、大規模な開発でヒューマンリソースをスケールアウトさせなきゃいけない場面では Java や RoR みたいな解法もあると思うし、まさに適材適所で選択していけばいいと思うし、自分たちのように大規模に Perl を使っている会社においても、それはやっていかなきゃ生き残れないと思ってます。

ただ、Perl には、"There's more than one way to do it." という考え方の通り、それさえも Perl でやってしまおうという、いい意味で狂った人たちがいて、そんな人たちが作る物だからこれまた面白いし、実際現場で使える物も生まれたりするわけです。そんな人たちの話が直接聞けるのが YAPC であり、そんな人たちと直接話ができるのが YAPC だと思います。だから楽しい。そんなコミュニティやエンジニアがたくさんいるから Perl をやめれない。

自分が Perl コミュニティに対してやっていきゃなきゃいけない一つのこととしては、そういうエンジニアが働ける箱を用意することと、若いエンジニアには Perl 以外の選択肢も与えながら、Perl コミュニティにコミットさせていくことなのかなーとか思っています。

最後にlestrrat さん、941 さんを始めとするスタッフの皆様お疲れ様でした!
毎回何もお手伝いせずに飲んだくれて申し訳ありません。
来年も飲んだくれてます。

というわけで、次回の更新は YAPC::Asia 2013 で!
次回は飛び入りLTだけじゃなくて何か話せるといいですなぁ。

久々に blog 書こうとしたら、パスワード忘れて、きーーーっとなってたら ID 間違えてました。
こんばんは。

そろそろ一週間になりますが、YAPC::Asia 2011 で基調講演らしきことをしてきたので、そのお話を。


2日目_0200


今回、この話を受けた経緯としては irc で自重できない人たちの完全な悪のりに乗せられた感じですが、当日は握手会がなかったので引き受けました。

当日は、これまた自重できない人たちが何かピカピカ光る棒状の物を振ってたり、飲食禁止のはずの講堂の壇上にテキーラが一瓶置いてあったりと、とても格調高い雰囲気の前で話させていただきました。

まじめな話、今回のテーマがEvolutionということで、自分みたいなマネージャーの立場から Perl monger といかに仕事をしているかというのを紹介させてもらって、マネージャーに興味を持って裾野が広がって、Perlの仕事が増えて、みんな幸せになるんだったら、恩返しにもなるんでいいかなーと思って僭越ながら受けさせてもらった次第です。

で、何を伝えたかったかというと、牧さんが技評のインタビューでエンジニアが戦闘モードで進化するとmiyagawaさん、マネージャーモードで進化すると僕という例えをしてくれました。自分はそこまですごいマネージャーとは思ってないですが、重要なのは企業のエンジニアリングの現場には間違いなく、その両者が必要なのです。だからキャリアパスとしてマネージャーを目指すというのはありだと思うし、評価されるべきものだと思っています。

ただ、学生の人や若い人に言いたいのは若いうちは色んな経験をしてほしくて、さらにキャリアの延長線上にマネージャーというのを考えているのなら、若いうちにたくさん色々なコードを書いたり、たくさん色々なシステムを運用すべきだと思っています。それは経験となってマネージャーをやるときに必ず生きてくるわけで、逆にそういう経験をなしにマネージャーにはなれないと思います。

そして、色んな人と出会うためにも Perl、に限らなくて良いと思いますが、コミュニティにどんどん参加して欲しいと思います。YAPC の開催期間3日間で経験したと思いますが、Perl のコミュニティには仕事を超えた素晴らしい出会いがあります。そこで得られた技術や情熱、人脈はマネージャーになったときに必ず役に立ちます。自分が今回のような機会を与えられたのも Perl コミュニティでの繋がりや出会いがあったからだと思っています。若い人にはそんな機会に積極的に触れて欲しいと思います。

最後に今回も素晴らしいお祭りを準備してくれたJPAやボランティアの方々に感謝したいと思います。ありがとうございました。

I♡Perl


2日目_0226


あ、プレゼン中に紹介したのはこの本です。

Being Geek ―ギークであり続けるためのキャリア戦略
Michael Lopp
オライリージャパン
売り上げランキング: 13893

読み物としても良い本なので是非。

会社の役員が珍しくスーツを着ていたので「コスプレですね」とからかったら「握手してあげるからCDたくさん買ってね」と切り替えされました。
ぎゃふん。
こんばんは。

docomoがSIMカードの提供を始めて、SIMロックフリーの3G端末でdocomo回線が使えるようになりました。
この辺を見越して iPad 2はAT&Tのモデルを買ったわけで、早速試したのでそのお話を。

量販店とかでは買えなくて、docomoショップに行って来ました。
このとき必要なのは身分証明書くらいだけど、技適マークの表示を求められるので本体も持って行く必要があります。
技適マークの出し方は[設定]-[一般]-[情報]-[認証]から。

2011年4月30日まで「定額データプランスタンダードバリュー」に「定額データスタンダード割」で二年契約すれば一年間は上限4410円というキャンペーン中だったので、それに入りました。二年目は上限5985円だそうです。これにISPとしてmopera Uを契約したので、プラス月々525円かかる感じ。

「定額データプラン」新規お申込み料金割引キャンペーン | サービス・機能 | NTTドコモ

で、買ってきたのがこんな感じ。

IMG_0904.JPG

で、いざ設定なり。

IMG_0905.JPG

まずはAT&TのSIMカードを引っこぬいてdocomoのSIMカードを入れます。

IMG_0907.JPG

さっそくdocomoと認識されたよう。

IMG_0908.JPG

このままでは使えないのでmopera Uの設定をします。
[設定]-[モバイルデータ通信]-[APN設定]でAPNにmopera.flat.foma.ne.jpと入力します。

IMG_0909.JPG

で、Safariを開いてstart.mopera.netへアクセスするとmoperaの登録サイトに飛ばされるのでdocomoで設定したネットワーク暗証番号を入力。
登録が終わると基本IDやパスワードが表示されるのでメモ。

で、再び[設定]-[モバイルデータ通信]-[APN設定]でユーザー名、パスワードを入力して設定完了。

IMG_0911.JPG

これでdocomo網でiPadが使えます。

基本的に仕事中の動画プレイヤーとしてしか使っていないので特に恩恵は受けていないです。

ちなみにPersonal Hotspot(テザリング機能)は iPad2では使えませんでした。
iPhoneよりバッテリーが長持ちするのでちょい残念。

また事情書を書く羽目になりました。
総務の視線が痛い今日この頃です。
こんばんは。

先日、サンフランシスコに行った時にたまには自分にお土産買おうかなーと思い、ふと思いついたのが日本ではまだ発売されていないiPad2。
しかもAT&Tの3G版ならdocomoのSIMカードを挿して使えて面白そうなので購入を決意しました。

が、いろいろネットで調べてみると、海外でも品薄で入手が困難な記事やblogがチラホラ。
毎朝Apple Storeには行列ができてるとのこと。
なので、まずは偵察とApple Storeに朝8時前に行ってみるとすでに10人ほどの行列。


x2_55584e4


会議があったので、この日は諦めて出社。
そのことを同僚に話すと、やはりサンフランシスコでもなかなか買えないとのこと。
が、サンフランシスコのオフィスでは全員Macを使っていて大量に購入しているため、ある程度融通が利くから聞いてやるとのありがたいお言葉。
もちろんお願いして翌日聞いてみると、帰国までに何とかなるかもとのことなので速攻で発注をお願いしました。
結果、帰国には間に合わず、今日になって日本に帰国し来た部長様がピックアップしてくれて無事入手した次第です。

で、帰宅して開封式。


IMG_0888.JPG


相変わらず素っ気ないパッケージ。


IMG_0889.JPG


iPadとしか書いてありません。
もしかして1を買ってしまったのでしょうか。


IMG_0890.JPG


型番から推測するにどうやら2のようです。


IMG_0891.JPG


中身はこんだけ。
相変わらずマニュアルなんてものはありません。
ジョブズのドヤ顔を思い浮かべました。


IMG_0892.JPG


大きさはこんな感じ。
ピザハットのおまけのSKE48のトランプと比べるとこんな感じ。


IMG_0894.JPG


先代に比べて薄くなったそうですが、持ってないのでわかりません。
扇子と比べると確かに薄く見えます。

さっそくiTunesで同期。
64GBということでオレのAKBフォルダが火を噴きました。

そういえばスマートカバーも発注したのですが、どうやら忘れられてたようなので、ヨドバシで買ってきました。


IMG_0900.JPG


レザーのちょっとごついやつですが、仕事中にビデオを見るのがメインの用途なので、iPad2用でスタンドになるやつがこれしかなかったので買いました。3480円くらい。


IMG_0903.JPG


まだでっかいiPhoneくらいのイメージがないけど、いろいろ試してみようかなと思います。

携帯の緊急地震速報の音が怖いので、「会いたかった」に変えるHackを募集しています。
こんばんは。

OAuth 2.0は仕組も特徴も理解していたのですが、実際に実装の必要が出てきたので今更ながら初めて使ってみました。

仕様は現在draft15というステータスで公開されています。(The OAuth 2.0 Authorization Protocol) OAuth 2.0の特徴としてはHTTPSを使って通信経路を暗号化することによりトークンを直接やりとりすることが可能となっています。そのため署名が必要なくなり、あの悪夢のような署名検証をしなくて済むようになったのが大きなメリットです。

とはいえ、読んでもよくわかんないのでコードにしてみます。Authorization ServerとResource Serverとして使ってみるのはFacebook。クライアントサイドフローとサーバーサイドフローの二つをサポートしているので、今回はサーバーサイドフローでテスト。ドキュメントはCore Concepts - Authenticationを見ました。

まずはFacebook Developersアプリの登録が必要。もちろんFacebookのアカウントも必要。

このときに忘れちゃダメなのがWeb Siteの設定でSite URLとSite Domainの指定をする必要があること。Authorization Serverからのリダイレクト先はSite Domain下のURLしか許可されないのでここが抜けてると動きません。

設定に必要なApplication IDとApplication Secretも控えておきます。

CPANにはNet::OAuth2OAuth::Lite2やそもそもFacebookであればNet::Facebook::OAuth2などがありますが、愚直に実装しないと理解できない子なので、使わないで書いてみます。こういう捨てWeb ApplicationのコードはPlackを使うととっても簡単。
内容はFacebookで認証してFacebookの友達情報を取得して表示するだけの簡単なお仕事。

短い。

フロー順に説明すると

1)
まず、何にもパラメータがない場合は、Facebook のAuthorization endpoint にユーザーをリダイレクトしてFacebookの認証を受けさせに行きます。

2)
認証が通ると、redirect_uriに指定したURLにユーザーがリダイレクトされてきます。この際にAuthorization Codeがcodeパラメータとして渡されます。

3)
このCodeを友達情報などのProtected Resourceアクセスのために使うAccess Tokenとサーバーサイドで交換します。

この際にパラメータに要求元を証明するための秘密鍵であるConsumer Secretなど本来ネットワークに流すべきではないものをつけてリクエストするのですが、このリクエストがHTTPS必須になっているので途中で改ざんされたりしないので安全であるというのがミソです。

このリクエストが成功するとAccess Tokenがレスポンスとして直接返るのですが、これもHTTPSなので安全ですよと。

4)
あとはこのAccess Tokenを利用して友達情報などを取得してユーザーに表示します。

かなりシンプルなのでライブラリが必要ないくらいです。

この次はAuthorization Server と Resources Server 側の実装検証をしてみたいなあと思います。

朝鮮半島で大変なことになっているときに幕張メッセにいました。
何をしてたかは聞かないでそっとしておいてください。
こんばんは。

というわけで、Apple TVを注文したのが届きました。
8800円なり。

IMG_0662.JPG

相変わらずシャレオツなパッケージ。

IMG_0663.JPG

相変わらず付属品がシンプル。

IMG_0664.JPG

小さい。

IMG_0665.JPG

獣化第2形態の2号機よりと比べても小さい。

IMG_0667.JPG

電源入れてWiFiの設定したらアップデートのお知らせが来てたので早速アップデート。
ちなみに接続はHDMIのみなので10年くらいぶりにテレビ買い換えました。
その話はまた今度。

IMG_0673.JPG

設定で日本語にした。

IMG_0669.JPG

ホームシェアリングの設定をすると起動しているiTunesのライブラリを再生できる。
これがやりたかった。

IMG_0668.JPG

保存してあるビデオも見れる。

IMG_0674.JPG

YouTubeも見れる。

IMG_0671.JPG

映画をレンタルできる。

IMG_0672.JPG

なんか見ようかと思ったけど夜遅いので寝る。

最近、社内で初対面の人に自己紹介すると「あ!twitterでfollowしてます。AKB好きな方ですよね?」と辱めを受けてることが多くて色々反省しています。
こんばんは。

先日、会社で新しいMac Book Airを支給されて開発環境を再構築して、せっかくの機会だったので自分の環境をメモりました。

YAPC::Asia 2010でtokuhirom氏の「モダンな Perl5 開発環境について」で大きく取り扱われたり、あちらこちらで散々エントリされていますが毎回ぐぐるのも面倒なのではっときます。

0. 下準備
gccや各種ライブラリが必要なので何はなくともXcodeをインストールします。僕はiOS SDK付きをダウンロードしてインストールしました。

ついでにhomebrewもインストールしておきます。
sudo dscl /Local/Default -append /Groups/staff GroupMembership $USER
ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"
wgetとかgitとかインストールしておくといいのでしておきます。
sudo brew install wget
sudo brew install git
また、bashを使ってて.bashrc派なのですが、そのままだと.bashrcが効かないのでこんな.bash_profileを作っておきます。
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

1. perlbrew

システムにインストールしてあるPerlは使いたくないのでperlbrewで自分用Perlをインストールします。

ダウンロードしてインストール。
curl -L http://xrl.us/perlbrew | perl - install
初期化。
~/perl5/perlbrew/bin/perlbrew init
~/.bashrcに追加。
source /Users/kimura.hideo/perl5/perlbrew/etc/bashrc
5.12.2をインストールして使用。
source .bashrc
perlbrew install perl-5.12.2
perlbrew switch perl-5.12.2

2. cpanminus

cpanは使いたくないのでcpanminusをインストールします。
curl -L http://cpanmin.us/ | perl - App::cpanminus

2. CPAN::Mini

飛行機は嫌いなのであまり乗らないけど、ローカルにCPANのミラーがあると便利なことがあるのでCPAN::Miniをインストール
cpanm CPAN::Mini
.minicpanrcに設定を書いておきます。
local:  ~/mirrors/minicpan/
remote: http://ftp.funet.fi/pub/languages/perl/CPAN/
exact_mirror: 1
ローカルミラーディレクトリを作ってミラー開始。
mkdir mirrors/cpan
minicpan
cpanmでいちいちミラー先を指定するのはめんどうなので.bashrcにエイリアスを書いておきます。
alias minicpanm='cpanm --mirror ~/mirrors/cpan --mirror-only'

4. local::lib

アプリケーションのextlibを作るときに便利なのでlocal::libをインストールしておきます。
cpanm local::lib

5. cpan-outdated

インストールされたCPANモジュールを最新に保ちたいのでcpan-outdatedをインストールします。
cpanm App::cpanoutdated
おもむろに実行。
cpan-outdated | cpanm
一応ローカルミラー用のエイリアスを,basrcに作っておきます。
alias minicpan-outdated='cpan-outdated --mirror file:///Users/hidek/mirrors/cpan | minicpanm'

6. pm-uninstall

モジュールをアンインストールしたいことがあるのでpm-uninstallをインストールしておきます。
minicpanm App::pmuninstall

あとは恒例のCPAN大会ですがTask::BeLike::Hidekとか作ってないのでCPANソムリエで有名なtokuhirom氏のTask::BeLike::Tokuhiromとか入れておくといいかも。
cpanm http://github.com/tokuhirom/task-belike-tokuhirom/tarball/master

# 2010/11/19: cpan-outdated は xargs いらないよというgfx先生の突っ込みが入ったので修正

この前、とある事情で会社で反省文を書きました。
高校生以来だったのでノスタルジックな気分に浸って反省できませんでした。
こんばんは。

というわけで、今年もYAPC::Asia に行ってきました。
今年は仕事が猛烈に忙しくてTalkはできない、LTすらもできない、前夜際は欠席、平日の1日目は懇親会から、という散々な出席状況でした。今年から土曜日も開催されてて、最初は何で休日にやるの!とか思ってたけど、まさか自分がその恩恵を受けることになるとは思いませんでした。

と、セッションはあまり出れませんでしたが、最後のキーノートで宮川さんも言ってたけど、Perlコミュニティが最高にいいところは人と人のつながりが本当に素晴らしいことで、それを思う存分味わえる場を二年目病にもかかわらず今年も開催してくれたJPAには本当に感謝したいと思います。

また、今年はHackathonをうちで開催したのですが、鍋会場を近くのちゃんこ鍋屋に外だししたこともあって、結構楽に主催できました。ただ、20人となるとちょっと手狭なので来年は庭会場をもっと整備してもっと人数を収容できるようにしたいと思います。肝心のHackathonの成果は今日、明日にも公開できたらと思います。

とにもかくにも、主催のJPAのみなさん、ボランティアのみなさん、スピーカーのみなさん、そしてすべてのPerl Hackersに感謝したいと思います。ありがとうございました!

IMG_0578.JPG

エアRTは家庭崩壊を招きかねないので絶対にしちゃだめです。
こんばんは。

そろそろモバゲーも mixi さんに続いて Yahoo! と協力して PC版 OpenSocial アプリケーションプラットフォームをリリースするそうです。というかします。

で、OpenSocial JS API では、外部のサーバーと安全に通信するための仕組みとして、Gadget Server を Proxy してリクエストする gadgets.io.makeRequest() という、メソッドが用意されています。このメソッドはオプションでリクエストに署名をつけることができて、受け手でその署名を検証することによってリクエストの妥当性を保証することができます。

これを Perl で実装する場合、詳しくは mala さんの mixiアプリのOAuth署名の検証 の記事が詳しいのですが、もうちょっと突っ込んで説明して PSGI/Plack で実装してみます。

例えばアプリケーションでGadget XMLで

function init() {
  var params = {};
  params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
  params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
  params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues({id:123456789});
  params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 0;
  gadgets.io.makeRequest("http://example.com/", function(obj) {
     console.dir(obj);
     var user = obj.data;
     alert(user.name + " loves AKB48.");
  }, params);
}

ようなことをします。

肝は

  params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;

で、これにより Gadget Server からのリクエストに OAuth の署名がつくので、それを検証することによってリクエストの妥当性が保証できます。

受ける方のアプリケーションを PSGI/Plack で実装します。

use OAuth::Lite::ServerUtil;
use Crypt::OpenSSL::CA;
use JSON;

my $cert = <<__PUBLIC_KEY__;
-----BEGIN CERTIFICATE-----
MIICdzCCAeCgAwIBAgIJANCWpLIspxwbMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV
BAYTAkpQMREwDwYDVQQKEwhtaXhpIEluYzEQMA4GA1UEAxMHbWl4aS5qcDAeFw0x
MDAzMjMwODE1NTlaFw0xMjAzMjIwODE1NTlaMDIxCzAJBgNVBAYTAkpQMREwDwYD
VQQKEwhtaXhpIEluYzEQMA4GA1UEAxMHbWl4aS5qcDCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEAtbq5Rns5IEktXldZ+37Fjlavnuc4JuwrD4F+4NQwVwVtR5yw
Vg10EanXWSGIAbUFx6hlppYOb0x/3PBMG80643LmXSJmvv4ViRUBl2Ys9Ie2L/D9
KVQXDWgJjxBGqo5MO6rA/Ip78kbiNbIQJUIJtbuJZWL3LMVe6mpIO2SUi1UCAwEA
AaOBlDCBkTAdBgNVHQ4EFgQU8bp8/6lmt5L8em6dZyoGciUUmuUwYgYDVR0jBFsw
WYAU8bp8/6lmt5L8em6dZyoGciUUmuWhNqQ0MDIxCzAJBgNVBAYTAkpQMREwDwYD
VQQKEwhtaXhpIEluYzEQMA4GA1UEAxMHbWl4aS5qcIIJANCWpLIspxwbMAwGA1Ud
EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEApalbBgXxnLJW8fM6W7E7GAE4QZbE
lvYqvtQSxwacGYoqF2FW1zrBkmTB12LTddFU01pqDaeels3Ru5TNOnTIJemFWW0D
viKtu9GqsrOye6AZR+XA5Iy/vq3EV1TCGuDNmhJaHAiLeYuLbEqmvH7/l9xNsafH
IpqnsHwF1pm0bTY=
-----END CERTIFICATE-----
__PUBLIC_KEY__

my $ca         = Crypt::OpenSSL::CA::X509->parse($cert);
my $public_key = $ca->get_public_key->to_PEM;

my $app = sub {
    my $req = Plack::Request->new(shift);

    my $util = OAuth::Lite::ServerUtil->new;
    $util->support_signature_method('RSA-SHA1');

    my $res = $util->verify_signature(
        method          => $req->method,
        url             => $req->uri,
        params          => $req->parameters,
        consumer_secret => $public_key,
    );

    my $body = encode_json({id => 12345, name => 'hidek'});
    return $res
        ? [200, ['Content-Type' => 'application/json'], [$body]]
        : [403, ['Cbntent-Type' => 'text/plain'], ['Forbidden']];
};

gadgets.io.makeRequest() のリクエストの OAuth 署名形式はその使い勝手から mixi さんもモバゲーも RSA-SHA1 で行っているので妥当性の検証は公開鍵を使って行います。検証は例によって lyokato さんの OAuth::Lite に頼るわけですが、 mala さんが指摘している通り、mixi で公開されている公開鍵はX509なのでそのまま使えないため、変換する必要があります。

後はリクエストを OAuth::Lite::ServerUtil に食わせて署名のチェックを行って、それによりレスポンスを変えます。

例では mixi さんの公開鍵を使わせてもらいましたが、もちろん公開鍵を今後公開されるモバゲーのものにかえたらそのまま動きます。

まあ、本来この辺は Middleware に含めるほうが使いかってがいいですね。

赤外線通信って本当に危険ですね。
こんばんは。

2010年9月2日をもってわたくし、とうとう40歳を迎えました。

昨日はmyfinderさん幹事のもと、ダブル成人式と題して30人を超える人に祝って頂きました。たくさんのプレゼントと暖かいお祝いの言葉を頂いて本当に感激でした。


hidek Ficia Photo


中でもgfxさん、hirose31さん、moriyoshiさんという豪華すぎる面々によるLT大会までしていただいて感謝感謝です。というかあれは一おっさんの誕生日だけでやるにはもったいないクオリティだと思います。本当にありがとうございました。


hidek Ficia Photo


あんな大勢の方々に笑顔で祝って頂ける自分は本当に幸せだと思います。
本当にありがとうございます。
40歳と言えば不惑ということでこれからも惑わずに楽しく過ごせたらと思います。
今後ともよろしくお願い申し上げます!


 Ficia Photo


そういえば、出社したらガリガリ君40本とコーラ40本いう粋なプレゼントも待っていました。


P1000476.jpg


では、頂いた篠田麻里子の写真集を読みながら40代最初の睡眠に就こうと思います。
おやすみなさい。


hidek Ficia Photo

メガネをまた無くしました。
しかもしらふで。
今年で早くも3つ目です。
メガネを消耗品感覚で購入していることに何のためらいも感じなくなりました。
こんばんは。

すでに発売されていますが DB Magazine 8月号の第1特集「「モバゲータウン」構築/運用のすべて」というタイトルで会社の人たちと寄稿させていただきました。
自分のパートは Part 2の「誰でも公開できるモバゲーアプリの作り方」と言うタイトルで、ZIGOROuさんと共著で書かせてもらいました。みんな大好き PSGI/Plack による携帯向けソーシャルアプリ構築方法とか書いてます。

他にもモバゲー全体構成の話やインフラ部隊の監視の話とか書いてあって面白いと思うのでよかったら読んでくださいまし。

酔っ払って急にタイガーマスクの終わりの歌が聴きたくなって「テレビまんが懐かしのB面コレクション」というCDをAmazonで見つけたのでぽちったら「続・テレビまんが懐かしのB面コレクション」をおすすめされたのでぽちって...というのを繰り返してたら今日「続々々々々・テレビまんが懐かしのB面コレクション」までの6枚が届いて泣きたくなりました。
こんばんは。

というわけで先週の土曜日に聖地巡礼してまいりました。
去年は仕事が忙しくて一回も足を運べなかったので二年ぶりです。
阪神の試合を見るために働いているのにこれでは本末転倒ですね。
今年はもうちょっと行けたらいいなと思います。

で、交流戦に入ってからいきなり日ハムに連敗して、土曜日は岩隈というのがわかっていたので暗澹たる気分の中の甲子園。

甲子園

甲子園


二年前は改装工事中でしたが、すっかり綺麗になってました。
まさにボールパーク。


甲子園


席は憧れのライトスタンド。
しかも最上段。
さすがのブラゼルもここまでは飛ばせませんでした。
浜風が猛烈に寒かったです。


甲子園


試合の方は先発フォッサムがまさかの好投で投手戦の中、3 - 2 の大勝利。
球児の今期初自責点は残念だったけどリンドバーグも聞けたしブラッズのホームランも代打金本も見れたので満足でした。


梅田 鉄人の店


帰りは一緒に行ったみんなで鉄人の店でお好み焼をつっつきながらの祝勝会で最高でした。


甲子園


それにしても甲子園は最高でした。
会社がリモート勤務を認めてくれたら甲子園そばに引っ越そうと密かに誓った夏の夜です。

最近、咳のしすぎであばらにヒビが入りました。
大多数の人は心配をしてくださってありがたいのですが、ごく一部の極道達がおもしろ画像を連投して笑わせてくるおかげで全治が大分先になりそうです。
こんばんは。

先日、「モバイルなプラットフォームでの OAuth Signature の検証」ってエントリーを書いた際にPlack::Middlewareとかでやるべきとか書いておいて放置していたのですが、某極道が「とっとと書かないと笑わせてあばらへし折るぞ!ごるぁ!」と脅してきたのでサクッと書きました。

GitHubに置いてあります。

Plack-Middleware-Auth-OAuth

使い方は簡単。


use Plack::Builder;

 my $app = sub {
    return [200, ['Content-Type' => 'text/plain'], ['Hello World']];
 };

 $app = builder {
     enable 'Plack::Middleware::Auth::OAuth',
         'consumer_key'    => 'YOUR CONSUMER KEY',
         'consumer_secret' => 'YOUR CONSUMER SECRET';
         $app;
};

これでOAuth Signature のチェックをして失敗したら401 エラーを返すようになります。

mixi ではこのまま動きますし、モバゲー用にしたければ

 $app = builder {
     enable 'Plack::Middleware::Auth::OAuth',
         'consumer_key'    => 'YOUR CONSUMER KEY',
         'consumer_secret' => 'YOUR CONSUMER SECRET',
         'validate_post' => 1;
         $app;
};

とすれば body parameter も検証対象になるので動きます。

色々意見聞いて、もうちょっとテストとか書いたらCPANに上げます。
これで、OpenSocial のアプリが増えたら幸いです。

正月から禁大盛り・禁替え玉のマニフェストを掲げています。
たまに「今日頼んだのは特盛りであって大盛りではない!」とか政治家みたいなことを言ってます。
こんばんは。

IMG_0064.JPG


というわけで、昨日の興奮覚めあらぬまま東京ドームに今年二戦目の観戦に行ってきました。

IMG_0067.JPG


今日は会議があったので6回からの観戦。
行きの情報では初回関本の今シーズン第一号で先制してリードしてたはずが、着いたら追いつかれてました><

ちなみに阪神先発は久保、讀賣は予想では内海でしたが中四日でゴンザレスでした。

IMG_0071.JPG


試合が動いたのは8回。
まずは阪神がこの回から代わった山口からヒットとデッドボールで1アウト満塁のチャンスでブラッズが鮮やかに2点タイムリーを打って再度リードします。
が、その裏、今度は久保から代わった久保田が李に一発を浴びて1点差になるも後続を抑えました。

IMG_0076.JPG


で、9回は昨日、回またぎをしてちょっと心配だった球児ですが、ぴしゃりと抑えて4連勝!
しかも讀賣に連勝してこのカード勝ち越し決定!
これで讀賣、中日とは0.5ゲーム差なので明日勝って中日負けたらまさかの首位!


IMG_0075.JPG

もちろん明日も応援行ってまいります!

プロフィール

アーカイブ