歓迎会
久々のような、そうでもないような、今日はとりあえず技術部だけの歓迎会だが、
その他の部門にも大量に人が入ってきて、もう覚える気も起きないくらい。
名簿っぽいものがあるので見てみたら、自分は3分の1くらいの位置だった。
半分くらいが自分より後の入社かなって思ってたけど、もっともっといた。
人数も自分のイメージしていた数よりも10人以上多かった。
最近はプロセスが整備されたり、暗黙のルールが明文化されたり、
ようやく大人数に耐えられる体制になりつつある気がする。
ちょっと前にチームが倍増したので、今は育ててる感がおもしろかったりする。
RPGでレベル上げしてる気分。
仕事自体は相変わらず変化がなくて飽きてるので、良い気分転換だ。
謎
前々から疑問ではあるけど、テレビを見てて疑問に思ったこと。
なんで女性のすっぴんというのは、眉毛が半分しかないの?
あれって抜いてるの?
自然に抜けていくのであれば、男性は抜けてないしなーって。
抜いてるのであれば、眉毛がないからすっぴんはイヤっていう台詞が自作自演この上ない。
長いのを切るというのはわかるんだけど、やっぱ抜くのはわからない。
どうせ同じ場所に描くのなら、ゼロにしないで短くすればいいんじゃないのかなーとか思うけど。
私自身多いから、抜けるイメージがないだけかもしれないが。
ホントどーでもいいわな。
興味がないから知らないだけって話だしね。
正解が抜くだとしても、おそらく私は抜かない。
これだけ髪も量が多いのに眉毛がなかったらキモすぎる。
Catalyst で OpenID を使ってみる
参考にしたサイト
1. Consumerの実装を知り、OpenIDを使ってみよう
2. PerlでYahoo!とmixiのOpenIDを使ってみよう!
1. のサイトの通りにやったら、Error : signature_mismatch: Prior association invalidated ID provider response. というエラーが出たので、2. のサイトを参考にして、new のときのキャッシュ、debug パラメータを消した。
使用するOpenIDのCPANライブラリは、Net::OpenID::Consumer。
cpan> install Net::OpenID::Consumer
で問題なく入る。
OpenID の処理へ飛ばすための場所と、結果が返ってくる場所の2つが必要。
前者が http://localhost:3000/openid, 後者が http://localhost:3000/openid/helper としてある。
http://localhost:3000/openid?openid_url=https://mixi.jp というURLをたたくと、OpenID の認証が始まる。
OpenID の処理へ飛ばすための場所(http://localhost:3000/openid)
use LWP::UserAgent; use Net::OpenID::Consumer; sub index : Private { my ( $self, $c ) = @_; my $csr = Net::OpenID::Consumer->new( ua => LWP::UserAgent->new, consumer_secret => 'hogehoge', args => $c->req->params, ); if (my $cident = $csr->claimed_identity($c->req->params->{openid_url})) { $cident->set_extension_args('http://openid.net/srv/ax/1.0', { mode => 'fetch_request', 'type.nickname' => 'http://axschema.org/namePerson/friendly', required => 'nickname', }); my $check_url = $cident->check_url( return_to => "http://localhost:3000/openid/helper", trust_root => "http://localhost:3000/", ); $c->res->redirect($check_url); } else { $c->res->body("Can't create claimed identifier object."); } $c->stash->{template} = "openid.t"; $c->forward('Hello::View::TT'); }
結果が返ってくる場所(http://localhost:3000/openid/helper)
use LWP::UserAgent; use Net::OpenID::Consumer; sub index : Private { my ( $self, $c ) = @_; my $csr = Net::OpenID::Consumer->new( ua => LWP::UserAgent->new, consumer_secret => 'hogehoge', args => $c->req->params, ); if (my $setup_url = $csr->user_setup_url) { $c->res->redirect($setup_url); } elsif (my $vident = $csr->verified_identity) { # ここで処理する my $ax = $vident->signed_extension_fields('http://openid.net/srv/ax/1.0'); # ニックネームを取得する my $nickname = $c->req->params->{'openid.ax.value.nickname'}; if(!($nickname)){$nickname = "匿名";} # ProfileのURLを取得する my $profile = $c->req->params->{'openid.identity'}; $c->res->body("" . $nickname . "さんがログインしました。
"); } elsif ($csr->user_cancel) { $c->res->body('Cancel'); } else { Catalyst::Exception->throw('Error : ' . $csr->err); } }
Ubuntu 12.04 の右クリック
PC は Acer Aspire S3-951-F74U。
タッチパネルの右下をクリックしても効かなかったので、
できないものかと思っていたが、できた!!
タッチパネルを2点タッチしたらいいらしい。
クリックではなくて、素早いタッチ。
あとできてないのは、コントロールキーを押しながらクリック。
これができないと、マルチ選択プルダウンとか、複数ファイルの選択とかできなくて不便。
これもやり方があるのかなぁ。。
昼下がり、ローマの恋
イタリアの恋愛ストーリー、青年の恋、中年の恋、熟年の恋の3つ。
3つの話は特に絡み合ってはいない。
2つ目と3つ目が同じアパートに住んでる人ってことくらいなのかな。
青年の恋は不倫と浮気とマリッジブルーで、中年の恋は不倫とストーカー。
熟年の恋がマトモ(?)で、歳の差恋愛。
1つ目と2つ目は、あーあ。っていう残念な話にしか見えない。
裏切りが発端となって本人が痛い思いをしたとしても、自業自得としか思えず。
感情をすぐに表に出すような人々ばかりだから、見ていて疲れる。
いや、きっと、友だちがこんなんだったら、傍目で見てる分には楽しいだろうな。
巻き込まれたくはないけど・・・
ボルダリング
久々に、渋谷のPEKIPEKIに行ってみた。
今月は土日祝日でも、13時までに入れば2200円らしい。
普段は2500円なのでちょっと敬遠していたが、
交通費まで考えると(定期券があるので)、ここがいちばん安くなる。
相変わらず2階で登ってる人は誰もいない。
中級コースの部屋を独り占めして、6級~4級を中心にやってた。
途中で持ち替え(?)があるか、届かないのがあるかで、なかなかクリアまで辿り着かず。
天井が低いせいか、横移動が多いのかな。
相変わらず、このジムは変なルートが多くて、やりにくい。
キレイなのと、空いてるのはいいんだけど、肝心のルートが気に入らない。
今度は久々に横浜のほうに行こう。
Catalyst で Google の OAuth を使う
ホントはSAMLをやりたかったんだけど、Google::SAML::Response の使い方はわからないし、
ライブラリを使わないでやるのはますますわからないので、いったん置いとく。
OAuthは前に Facebook のをやったときと、ほとんど同じ。
本家サイトを見てできた。
API Console からAPI を使用するためのキーを取得する。
Product name を適当に登録し、Client ID, Client secret, Redirect URIs を使うのでメモする。
sub index : Path :Args(0) { my ( $self, $c ) = @_; my $app_id = '(API Console の Client ID)'; my $app_secret = '(API Console の Client secret)'; my $authz_endpoint = 'https://accounts.google.com/o/oauth2/auth'; my $token_endpoint = 'https://accounts.google.com/o/oauth2/token'; my $redirect_uri = 'http://localhost:3000/google'; # Redirect URIs # 2) get authorization code if ( my $code = $c->req->param('code') ) { # 3) get access token my $post_params = { client_id => $app_id, client_secret => $app_secret, redirect_uri => $redirect_uri, grant_type => "authorization_code", code => $code }; my $request = POST($token_endpoint, $post_params); my $ua = LWP::UserAgent->new; my $r = $ua->request($request); my $data = decode_json($r->content()); my $token = $data->{access_token}; # 4) get protected resources if ($token) { my $url = 'https://www.googleapis.com/oauth2/v1/userinfo'; (略) $c->response->body($html); } else { $c->response->body('fail to get token'); } } else { # 1) redirect to authorization endpoint my $uri = URI->new($authz_endpoint); $uri->query_form( response_type => 'code', client_id => $app_id, redirect_uri => $redirect_uri, scope => 'https://www.googleapis.com/auth/userinfo.profile' ); $c->res->redirect($uri); } }
マンデラの名もなき看守
アパルトヘイト政策真っ只中の南アフリカ。
グレゴリーは黒人の言葉を話せたので、ロベン島刑務所で情報監視役に就いた。
そこにはテロリストの首謀者とされたネルソン・マンデラも収監されていた。
しかし、彼の真の思想を知るにつれて、黒人に惹かれて心を開いていく。
アパルトヘイトってまだ数十年前の話なんだ・・・ってことを改めて知った。
歴史年表の中で見ても、それがつい最近のことだという実感は沸いていなかった。
今の南アフリカの成長は、アパルトヘイトがなくなったからなんだろうな。
真実を知ることって大事。
そして、知った上で行動に移せることはもっと大事だなって思う。
グレゴリーの妻が、黒人はテロリストだと決め付けているのは、教育のせいだろう。
教育という名の洗脳をされたせいだろう。
誰かにとって都合のいい、嘘で固められた政策を押し通すためには必要なんだろうけど。
最近の竹島とか尖閣とかの問題も、その国の教育が大きく関係してると思うと難しい問題。
真実を確かめようと行動し、真実を知った後に行動を変えたグレゴリーは強い。
軍隊とか、命令は絶対!みたいな空気の中での行動は、なかなかできるもんじゃない。
だけど、機密事項をぺらぺらと家族に話しちゃうのはどうかと思う・・・・
時代が時代だから、ということになるのかもしれないけど、
あれって普通は家族にも話しちゃいけないレベルの内容だよね・・・。
そういう昔っぽい面もありつつ、でもこれは現代の話。