2015-05-01(金) [長年日記]
■ 江ノ島へ
昨日の沼津で生しらすを食べそこね(昼ごろ行っても売り切れである)、かみさんが「江ノ島に朝から生しらす丼やってる店がある」と調べたので、今日は朝8時に家を出て江ノ島へ。そうそう、今年は正月に寝込んでいたので、恒例の江ノ島初詣には行きそびれていたから、今年初だ。
で、くだんの江ノ島小屋に着いたら入り口に「生しらす売り切れ」の張り紙。朝9時に来ても間に合わないとかマジですか。生しらすへの道は厳しい。でもまぁ、せっかく来たからここで朝食にしようということで、店内に入ってから聞いてみたら「まだしらす漁から戻って来てないのであと1時間くらいしたら出せる」とのこと。まさか早すぎたとは……。
でも腹減ってたから待たずに食べたんだけど。まかない丼と釜揚げしらす丼を半分こして食べた。うまかった。まぁ、釜揚げしらすの方が熱が通って旨味が増しているから、生しらすより美味いんだけどさ、実際のところ。味噌汁じゃなくて吸い物がついてくるんだけど、途中でご飯にかけてお茶漬け風にして食べることを推奨されていて、一膳で二度美味しい。
そのあとは、朝9時からやってる新江ノ島水族館こと「えのすい」へ。平日なので空いてると思ったら、遠足の小中学生が団体で来ていたりして、けっこう賑やかだった。
ちょうど時間になったのでイルカショーもみた。イルカやゴンドウクジラたちの演技もさることながら、人間たちがだいぶ妙な扮装をしていて、ダンスやら歌やらシンクロナイズドスイミングやらをするので驚いたんだけど、あの人たち、飼育員なんだよね? それとも専門(?)のエンターテイナーなんだろうか。なお、このショーは合間あいまに餌をやらないのがウリらしい*1。
あとはしんかい2000をみてニマニマしたり。
その後はいつもの弁天丸に乗って江ノ島の裏手に周り、山を登る。
ロンカフェでフレンチトーストを食べよう……と思ったらすごい行列だったけど、ちょうど入るころには腹が減るだろうということで1Hほど木陰で読書しつつ待ち。限定品のクリームブリュレ載せを食べる。量は少ないがカロリーはたっぷり。まぁ、運動したし、いいんでないの。
その後はガーデンをみてまわってから各所の神社にお参りしつつ、そのまま岐路へ。そういえば暑かったからかメインストリート沿いでは猫を見なかったな。
*1 イルカたちは演技の切れ目にプールの裏手へ引っ込んでいるのでそこでもらっているのかも知れない。まぁそれでもたいしたものです。
2015-05-02(土) [長年日記]
■ 臼田へ
この連休、近年まれにみるアクティブさで、毎日違うところに行っている。沼津、江ノ島に続いて、今日はバイクでソロツーリング*1。事前にR299が全線開通しているという情報を得ていたので、行きは下道で。
いつものように……というかこのルートも圏央道のおかげでずいぶん楽になって、相模原愛川ICで乗ったらR299の始点までずーっと高速で行ける。でもさすがに連休初日とあって、中央道との合流はかなり詰まっていたけど。あと例のトンネルもほぼ飽和状態でいつ渋滞が始まっても不思議じゃない感じ。
秩父のあたりも芝桜の見頃らしくて交通量も多く、考えてみたら車載動画撮ってるわけでもないのに律儀にR299を全線走る必要なんてないわけで、もっと美味しいところまでショートカットしてもいいんじゃね? まぁ帰ったら次善のルートを検討しよう。
それでも山に入れば走っているのはバイクばかりというおなじみの風景、いつもの難所もちゃんと開通していて、新緑を堪能しながら快調に飛ばす。この季節、まだ色の薄い若葉のおかげで山全体が明るくて、紅葉の秋と同じくらい好きだなぁ。夏の間は(針葉樹のくせに)やたらと濃い影を落としてくるカラマツすら明るい葉をつけてるもんねぇ。
とはいえ、やはり落石も多いので、あんまりよそ見をしていると足を取られてコケそうになる危険な山道なのだが。下手するとガードレールの隙間から谷底に真っ逆さまだからなー、怖いこわい。
のんびり走っていたら佐久に着くころには昼近くになってしまったので、脱線して臼田へ。そうそう、最近始まったアンテナカードをようやく入手。これで1/4コンプだぜ。勝浦はいけるだろうから2/4は堅い。でも残りはちょっと無理だよなぁ……種子島と沖縄……。「2種類あるけどどっちにする?」と聞かれて焦ったが、パッとみてカッコイイ方を選んだ。また来てもう一種も入手しよう。あと、見学者バッジ(という名のステッカー)もバージョンアップしてたね。
今日は休日だし、アンテナが真上を向いたお休みモードなのは織り込み済みで、それでもアンテナをおかずにのんびりメシを食っていたら、頭上からモーターの起動音がして、なにごとかと思ったらアンテナが動き始めた!! えっ、マジか。カメラ、カメラ!!
あー、焦った。通信開始の準備だな、これ。そういえばはやぶさ2の可視時間とかぜんぜん調べてこなかったけど、それかしらん? 臼田には何度も通っているけど*2、追尾中以外で動いてるとこみるの初めてだよ。
その後、180度回頭して地平線の方を向いたので、このあと探査機の出を待って通信開始でしょう。とはいえそれまで待ってたら日が暮れてしまうので、後ろ髪を引かれつつ退散。いやー、ええもん見せてもらった。おれが来たときに、白ワンピにパンプスというこの地にはだいぶ不似合いな女性がバシャバシャと写真を撮っていたのだけど、先に帰ってしまったのでこれは見られなかったよな、気の毒に。
今日はこのあと、野辺山に寄るか、大河原峠アタックをするか気分次第で決めようと考えていたけど、動く臼田64mが見られて満足したので、野辺山はまたこんどにして、蓼科スカイラインへ。……で、例によって大河原峠は残雪によって阻まれるのであった。11月になっても通れるけど初夏の陽気の5月でもまだ通れない大河原峠。
というわけで、おとなしく麦草峠を経由して中央道で帰路につく。けっきょくR299を全線走ってしまったよ。
2015-05-03(日) [長年日記]
■ 麻溝公園へ
ほんとこの連休はアクティブだなぁ。今日はとくに何もない予定だったけど、麻溝公園の「公園フェア」(なんだそれ)でクレマチスを売ってるというから行きたいというかみさんのリクエストで午後から車を出した。まぁ、ついた時には終わっていたのだけど(笑)。
昼食がまだだったので周辺を検索したら太郎茶屋鎌倉という店があるとのことなので行ってみた。ちょっとコジャレたファミレスっぽい作りだけど、かみさんが頼んだロコモコは味がくどくてダメだったそうだ。パンケーキは可もなく不可もなくだったけど、まぁ別に進んで食べに来るような感じではなかった(ので、こんなに辺鄙なところにあって大丈夫なのかと心配になる)。
2015-05-04(月) [長年日記]
■ メール通知の代わりにPushbulletを使う
使っているサーバのちょっしたステータスが変わったのを知りたかったり、毎朝念のため数値を監視してるサービスなんかがあって、cronでメールを飛ばすようにしていたのだけど、見てすぐ捨てるものばかりなのでPushbulletで代替してしまうことにした。どうせ確認するのはスマホだし。
PushbulletのAPIはシンプルだけど、もっと楽するためにgemを探すといくつか見つかるが、pushbullet gemは作りがいまいち。個人的にはruby-pushbullet gemがいい感じだったのでこれを使うことに。といってもこんな程度(pushmeコマンド):
require 'pushbullet' Pushbullet.api_token = 'MY_API_TOKEN' Pushbullet::Contact.me.push_note(ARGV.shift, ARGF.read)
で、こんな感じのを:
command of making status | mail -s TITLE hoge@example.com
こう置き換えた:
command of making status | pushme TITLE
(と簡単に書いているが、さくらのサーバでOpenSSLが証明書を見つけられないという問題がおきて、SSL_CERT_FILE環境変数に既存のものを指定するなどしたけどそこは略。あとさくらでruby 2.2がビルドできないのもあとまわし)
そういえばこういうの、以前(iPhoneユーザだったころ)はim.kayac.comを使ってたんだよなぁ。まだ動いてるんだろうか、あのサービス。
2015-05-05(火) [長年日記]
■ グスタフ、まだタオルを捨てないで欲しい
今日は家の掃除をメインにしていたんだけど、かみさんがグスタフが大事にしている(なぜかFC東京の)タオルマフラーを手にして「もうボロボロだから捨てちゃおうか」と提案。おれは「まだときどき噛み噛みしてるよ」と言ったものの、本当にボロボロなのでそろそろお役御免の時期だよなぁとは思っていた。
そしたら、しばらくして見てみると、ベッドの上に件のタオルを敷いてその上で寝てるじゃないの。まるで取られまいとしているかのように。さっきの話を聞いていたのか。というか理解してたんかい(笑)。おそろしい猫だ。
でもまぁ、こんな満足そうな顔をされたら、捨てるわけにはいかないよなぁ。
おまけ。シャープな顔をすることもある:
2015-05-10(日) [長年日記]
■ 切り株の処分(の準備)をした
こないだ切った木、もちろんこれで済むわけがなく、切り株を掘り出さなくてはならない。とはいえちゃんと根の張った切り株をそう簡単に引き抜けるわけもなく、調べてみるとまずは枯らしてからというのが手順らしい。
枯らすというと除草剤みたいなものを思い浮かべるが、そうでなくて農薬を使えという。なるほど、撒いたらあるていど影響力を残すために残留する除草剤よりも、パキっと効いてすぐに分解する農薬の方が安全で効果があるということか。理にかなってる。
ということで、農薬の「マラソン」、農薬を投与する穴をあけるためのドリルビットを買ってきた。
ビットはウッドフェンスを作ったときに買ったインパクトレンチにつけて、あとは電気のちからでバリバリと穴をあける。文明の利器すばらしい……。で、その穴に農薬を原液のまま注入。あ、この匂い、農家をやってる田舎の叔父がタンクいっぱいに作ってたヤツと同じ匂いだ(笑)。懐かしいなぁ。
で、そのままにしておくと蒸発したり、散歩の犬(猫も)がなめたりして危ないので、ガムテープでぴったり封をする。あとは農薬を足したりしつつ様子をみて、枯れるのを待てばよい(らしい)。しばらくかかるみたいだけど。
2015-05-13(水) [長年日記]
■ THE IDOLM@STER CINDERELLA GIRLS ANIMATION PROJECT 08 GOIN’!!!【初回限定盤CD+Blu-ray】(CINDERELLA PROJECT)
ここしばらく毎週のようにリリースされていたアニメ・シンデレラガールズのCDもこれでいったん終了。たぶん2期にもいろいろあると思うけど。
「Star!!」に始まってこの「GOIN'!!!」にいたるすべての新曲がどれも素晴らしいんだから、アニデレにかける製作陣の本気度はすごいなぁ。じつに幸せな数ヶ月間だったよ、追いかけるの大変だったけど。
今回のCDの収録順が「GOIN'!!!」→「夕映えプレゼント」で、アニメの13話とまったく同じなものだから、物語との結びつきが強すぎてしばらくは素で聴けない感じ。他のCDも各ユニットの持ち歌と夕映えという流れなんだから、別にこのCDだけ計算づくというわけじゃないはずなんだけど、それでもやっぱり狙ってやってるように思えてしまう。こういうさじ加減にもやっぱり舌を巻いてしまうな。
いま地上波ではアニマスの再放送をやってるので同じタイミングで見返してるけど、おれがシナリオ重視派だからというのを除いても、比べてみるとやっぱりアニデレの方に軍配をあげたくなる。(ゼノグラシアを除けば)初のアニメ化ということでリスクを取れなかったアニマスに比べて、いろいろ冒険を可能にする余地があったということかも知れないけど、冒険した上で成功するんだから、やっぱりすごい。2期も楽しみすぎて楽しみすぎて、もうたまらん。
THE IDOLM@STER CINDERELLA GIRLS ANIMATION PROJECT 08 GOIN’!!!【初回限定盤CD+Blu-ray】
日本コロムビア
¥1,200
■ THE IDOLM@STER 9th ANNIVERSARY WE ARE M@STERPIECE!! Blu-ray "PERFECT BOX!" (完全生産限定)(オムニバス)
「GOIN'!!!」と発売日を同じくして昨年10月にあった9thライブのBlu-rayがようやく発売。映像メディアはTVの前に座ってないといけないのでたぶんしばらく時間をとれないんだけど(10thまでには観たいなぁ)、まー貴重なシーンが多いので楽しみだね。
とはいうものの、入手したPたちからは次々と不満の声があがっていて、残念商品の烙印がはやばやと押されそうな感じ。音質が悪いとか、テロップがひどい、誤植があるという指摘はまだ観てないのでなんとも言えないが、観てなくてもわかる最悪のポイントが「樹里きちのゲンキトリッパーが収録されてない」だろう。これは本当にがっかりだ。
宣伝用のPVに「(特典ディスクには)大阪・名古屋公演のみで披露された、全30曲のライブ映像」を収録すると書いてあって、セトリを数えてみると対象になるのはちょうど30曲だから「あ、ぜんぶ収録されるんだ」って思うわけじゃん?*1 ところが実際は(メンバの違う)「自分REST@RT」を2曲分収録して「ゲンキトリッパー」を落としてあったという。
なるほど、たしかにどの曲をチョイスするかはいっさい書いてないから、これでも間違ってはいない。でも、どう解釈されるか明らかにもかかわらず事前に説明をしないのは「不作為による詐欺」だと思うけど。それ以前に、過去にもこれからも何度も歌われるであろう「自分REST@RT」と違って、樹里きちの「ゲンキトリッパー」なんておそらく金輪際披露されることはないはずで、希少性を鑑みればどっちを収録すべきかなんてそもそも議論の余地がない。これはもう、完全に購入者に喧嘩売ってるよなぁ。「コロムビアならこんなことしない」なんて言う気はないが、ランティスが何考えてんのかさっぱりわからんよ。
と、ネットの隅っこでぐだぐだ言っててもしょうがないので、ちゃんとランティスに問い合わせた。窓口はこちら。すでに回答をもらっている人も見かけるけど、不満があるなら個別にちゃんと言って、不満を持つ人が大勢いることを示さないといけません。
*1 「宣伝用のPVでゲンキトリッパーが流れていた」という情報が出回っているけど、そういう動画の存在は確認できなかった。ガセじゃないかと思う。
2015-05-14(木) [長年日記]
■ アイマス10thライブのチケットが大量に当選するわさます
今日は7月の10thライブの先行抽選の発表日。LTH09/10、MA3 01/02/03、AP07それぞれにシリアルがついてるので、だいたいみんな4~6口くらい応募している(といっても住所で名寄せされるので何口応募しても当たるのは最大1口分)。1口で2日通し券を4枚申し込めるから(手数料込みで8万円くらいになる……ひぃぃ)、必要数の4倍くらいの座席数を申し込んだことになるのだが。
蓋をあけてみるとほとんどの人が当選してしまい、16枚必要なところに42枚もある始末。余りすぎだ……。Twitterをみているとぜんぜん当たらなかった人もいるようなので、不要分は知人を通してわけあったり、キャンセルすることで再流通させられるものの、そもそもドームを満席にできるのか不安になってきたなぁ。とくに1日目は出演者が少ないのでつらそう……。
2015-05-15(金) [長年日記]
■ tDiary.NetをHerokuからどこに移すか問題 (jailing編)
ほんの4ヶ月前にこの日記をHerokuへ移設したが、そのHerokuの料金体系が変わってしまい、freeプランだと1日6時間相当の休止が挟まるようになってしまった。Herokuがちゃんと継続して収益を得られるメニューを用意するのはいいことだし、プルリク単位でdynoを作っては壊すような開発では引き続き無償で使えるのは助かるが、日記やブログのようにクローラーが頻繁に訪問してくるようなサイトは有償のhobbyプランにしないと毎日6時間の「お休み期間」が確実に出てしまう*1。自分の日記だけなら$7/moくらいなんともないけど、tDiary.Netは複数の日記を動かしてるから懐具合的に無理だなぁ*2。
というわけで、また引っ越さなくてはいけない。
CGIベースに戻すのはさすがにないけど、rubyの$SAFEを使ったサンドボックスが使えなくなっている現状では、なんらかのプロセス分離をしなきゃいけなくて、今ならDockerを始めとするコンテナで分けるのが筋だよな……と考えていたタイミングで、@kazuhoがjailingというLinux上で簡単にjailを作れるユーティリティを公開。ちょっと面白そうなので使ってみた。うん、今回の用途だと、Dockerはちょっと仰々しいと感じてたんだよね。まさか2015年にもなってjail使うとは思わなかったけど、いま欲しいのはたしかにコレかもしんない。
マニュアルのとおりにやれば本当に簡単にjailが作れるので*3、あとはそのディレクトリにrbenvでruby 2.2.2を入れ、tDiary.Netのリポジトリをcloneして、bundle後にサーバを動かせばHerokuとほぼ同じ環境をさくっと動かせた。うん、けっこう楽。
これをユーザの数だけ別々のポートで動かして、フロントにリバースプロキシでも立てて振り分ければOKだろう。とはいえ、ストレージは太平洋の向こう側にあるMongoDBだから遅くてたまらんし、基本的にHerokuに頼らないスタイルに集約しないとダメだなー、これは。時間がないからとっとと決めなきゃいけないけど、全部自分で運用するのめんどくさい……。
(なお「jailing編」の次は「Docker編」の予定だったけどもうこれでいいんじゃないかという気分ではある。まぁDockerの方が構成が柔軟にできるけど……)
2015-05-17(日) [長年日記]
■ 緑のカーテン2015 (1)
昨年はやりそこねた緑のカーテン、今年はガーデニングを始めたかみさんがやる気になっているので、かみさん主導で。
これまで夕顔やゴーヤなどにトライしてきたが、2Fの窓にはなかなか届かなかったこともあり、今年はわさわさ茂ると評判の西洋朝顔をメインに地植えで。とりあえず今日は苗を窓の下に植え替えるところまで。
◆ K [西洋朝顔は巨大な芋虫がつきますよー。調査済みかもしれませんがご注意まで。]
2015-05-19(火) [長年日記]
■ VENOM対策のとばっちりでサービスを落としてしまった
tDiary.orgはCloudCore VPSの開発者支援制度を利用してサーバを一個運用してるんだけど(感謝感謝)、先日みつかった脆弱性「VENOM」の対策をしたのでVMをリブートしてね、という案内が来ていた。
「はいはい」と www.tdiary.org にログインして shutdown をかけたはいいが、CloudCoreのコントロールパネルがいつまで待っても停止状態にならない(ので起動ができない)。って、違う!! CloudCoreで運用してるのは theme.tdiary.org だった、www.tdiary.org はたしかServersManで、しかもコントロールパネルへのアクセス権をおれは持ってないんだった。うひー。
で、慌ててサービス停止中のアナウンスをしてから、関係方面に連絡をとってServersMan@VPSのコントロールパネル経由で起動してもらった。いやー、まいったまいった。やっぱり依存するコンポーネントを増やしすぎると耐障害性が落ちるよな。もう少し集約しなくては(たぶんCloudCoreに)。
2015-05-20(水) [長年日記]
■ 【ナビスコ】川崎 1-1 山形@等々力陸上競技場
ひさびさの現地観戦。
最近、対戦相手が風間サッカー対策をちゃんとしてくるようになって、ぜんぜん勝てなくなってきたのでモチベーションだだ下がりなんだよね……。全員が正確なパスを出せるスキルがあるわけじゃないから密集隊形だと簡単にボールを奪えることがわかったら、そりゃ引いて守るよ。結果的に面白くないカウンターサッカーになっても二シーズン制なら勝ち星を優先するのは当然だ。もちろん、そういう相手に合わせて戦術を変えないのが風間スタイルで「正確なパスを出せるようになるまで練習する」が答えなんだろうけど、こっちが上手くなるまで相手が待っててくれるほどサッカーは甘くないしなぁ……。
とはいえさすがに山形相手には負けないだろうと思って来てみたら、ケンゴ・ヨシト・レナトがベンチスタートという飛車角金落ちみたいなスタメンで、そりゃいくらなんでもなめすぎだろうと思ったらやっぱり先制された。その後この3人を順番に投入して1点返したもののこの結果。うーん、やっぱまずいんじゃないかねぇ、この体制。
ところでメインスタンド前にLED看板を出して、バックスタンドの観客向けに(メイン側にある)新ショップ・フードのCMを流していたけど、ハーフタイム以外はメイン・バック間の移動を禁止しておきてそれはないだろーと思った*1。ハーフタイム中にメイン側まで移動して飲み食いしてたら、後半開始までに戻れないっつーの。
*1 ついでに「売切必須」の誤字に「うぷっ」となった。
2015-05-23(土) [長年日記]
■ Debian 8 JessieにするついでにVirtualBoxとVagrantを最新化
Debian Jessieが出たのはもうひと月も前なんだけど(気づいたのは連休明けてからという。しかもwheezyのときも同じこと言ってる)、今回もアップデートしてもいいけど、せっかくPuppetで同じ環境を簡単に作れるようにしてあるんだから、新規VMを作ってしまおう。式年遷宮ってヤツ?
で、職場の開発環境はVMware上にあるので、新しいイメージを作ってPuppet走らせたらすぐ移行できた……というのはちょっと嘘で、たぶんPuppetの非互換でいくつか走らないmanifestsがあったのだけど、そこは騙しだまし通らせた。ここまでは良し。
次は自宅、VirtualBox + Vagrantなんだけど、これがホストとのファイル共有でつまずいてなかなか進まず、こんな時期になってしまった。けっきょく、Debianがsystemdに移行した + VirtualBoxの(古い)Guest Additionsがsystemdに対応してないというコンボがいけないらしい。むー、VirtualBoxのアップデートしないとかー、やだなー(←ほんとバージョンアップが嫌い)。
というわけで、4.2系から4.3系にアップデートし、そしたらこれまで使ってたVagrantも4.3系に非対応だったので最新版(1.7.2)にしたらようやくファイル共有ができるようになった。なお、Vagrant Box作成にあたって今回参考にさせてもらったのはDebian8のVagrantのboxを作りたい。セットアップ用のスクリプトまであって大変助かった。
で、ぶじ自宅もJessieになったかというと、実はPuppetのmanifestsをメンテするのがイヤになったので、Ansibleに乗り換え中なのであった。しかも書きかけのPlaybookをpushし忘れたので自宅ではなにもできないという(笑)。ま、Puppetよりはだいぶわかりやすいのですぐに移行できると思う。
2015-05-28(木) [長年日記]
■ PuppetからAnsibleへ
(といっても「乗り換えノウハウ」みたいな有用な情報はない)
開発環境をさくっと作るために用意していたPuppet manifestsが、Debian Jessieのインストール時に動かなくて、読み返しても何やってるのか理解できない(笑)。やっぱりPuppetのDSLはメンテナンス性低いなぁと思い、かねてからAnsibleへの乗り換えを画策していたので実行することにした。AnsibleならWindows対応もあるので仕事でも有用だろう。
最初に(タイトルに惹かれて)「Ansibleを使い出す前に押さえておきたかったディレクトリ構成のベストプラクティス - 双六工場日誌」を読んだのは間違いで、ディレクトリ構成を考えるのはチュートリアルくらい済ましてからね。というか、これを読むとAnsibleにも暗部というか歪みがけっこうあって、Ansibleならきれいに書けてメンテナンス性が高いなんて思い込みは早くも崩れる。あと「Ansible チュートリアル | Ansible Tutorial in Japanese」はメンテされてないのでざっと参考にするくらい。
けっきょく公式ドキュメントがちゃんとしていて良いという各所にあるアドバイスのとおりだった。英語だけど。ドキュメントがしっかりしているのはPythonカルチャーかな。だいたい書き方がわかったら「All Modules — Ansible Documentation」をリファレンスしながら自分のPlaybooksを書けばよい。基本的にshellモジュールでざっくり手順を書いてから、冪等性を確保するように手を入れるというのがスムーズで良さそう。
こんへんで「role」はいわゆるホストの役割というよりはパッケージ単位に分割すべきだわかってきて、冒頭にあったような標準的なディレクトリ構成を作りはじめるんだけど、ベストプラクティスとされる構造はかなり大規模で複数人でメンテするような場合が対象なので、個人で使うにはオーバースペックだ。変数だってhostsファイルかトップレベルのPlaybookに書いちゃえばいい。というわけで、各ロールの下にはtasksとhandles、filesがある程度に。
あと、変数が定義されてることを前提に書かれているtaskが、変数定義がない場合に失敗するようにしたいなぁと思ってやり方を探すも、なんだかスマートな手法が見つからず悩んでいたら、error_on_undefined_varsという変数をTrueにしておくと勝手にチェックしてくれると教えてもらう。試してみたらちゃんと失敗してくれるのでこれでいいやと安心していたら、そもそもerror_on_undefined_varsはデフォルトでTrueだとわかってずっこけた。つまり最初に失敗するテストを書けってことですよ、とほほ。
2015-05-29(金) [長年日記]
■ Picasa APIの認証をパスワードからOAuthに変更した
massrの写真投稿機能では主にPicasaプラグインを使っているのだけど、昨日あたりから急にうまく動かなくなり、エラーメッセージをみてみると「パスワード認証使えなくなったぜ」みたいなページに飛ばされた。なるほど、もうずいぶん前からOAuthに移行しろって言ってたもんね、見てみぬふりしてたけど、ついにそのときが来たか。
奇しくも開催中のGoogle I/OではGoogle+から写真ライブラリ機能を分離したGoogle Photosが容量無制限を謳って華々しくデビュー。Picasaも吸収されちゃうんだろうと思うけど、Google PhotosはまだAPIを公開していないっぽいので、PicasaのAPIはまだしばらく現役だろう。
というわけで、Googleが提供するOAuth2.0への移行を始めたのだが、これがなかなか、うまくいかない。ちなみにこれまでパスワード認証で使っていたpicasa gemがOAuthに対応していることはドキュメントで確認済み。問題はこれに指定するアクセストークンの取得方法だ。Using OAuth 2.0 to Access Google APIsを読むと、今回のようにユーザとのインタラクションなしにAPIを使いたい場合はservice accountを使うようなのだけど、これで生成したアクセストークンを使ってもパーミッションがないと言われるのである。同じことをしている記事も見つからないしなー。
うんうん悩んでいたところ救世主が降臨。ようするにservice accountを使うのが間違いで、普通にWeb server applicationsのアカウントを作って、いったんブラウザで対話式に認証を済ましてから、そこで得られたrefresh tokenを使ってアクセストークンを得る、という流れ。ちょっと複雑になったが、ようするにOAuth1.0と同じようなステップを踏むのが正解ということか。やれやれ。
refresh token取得の流れはgoogleapi - Google API OAuth2.0のアクセストークン&リフレッシュトークン取得手順メモ - Qiitaが参考になる。Picasaの場合はこんな感じ:
- 以下にブラウザからアクセス:(redirect urlは実在しなくても良い)
https://accounts.google.com/o/oauth2/auth?client_id=【client id】&redirect_uri=【redirect url】&scope=https://picasaweb.google.com/data/&response_type=code&approval_prompt=force&access_type=offline
- ブラウザに表示された最終的なURLのうち、「code=」以下の部分をコピペしておく
- 以下のURLに対して:
https://accounts.google.com/o/oauth2/token
下記のデータをPOSTする。先のリンク先ではcurlを使う例がある:client_id=【client id】&client_secret=【client secret】&redirect_uri=【redirect url】&grant_type=authorization_code&code=【上で取得したcode】
- 返ってきたjsonに「refresh_token」がある
という感じで、なんとかPicasaへのアクセスを取り戻した。問題は、これがPhotosへのつなぎとして短命に終わるのか、終わるとすればいつか、来るべきPhotosのAPIで同等のことができるかだよなぁ。なにせいまですらGoogleのAPI一覧に名前がないんだから……。
2015-05-31(日) [長年日記]
■ 猫が床の上にじかに寝るようになると夏到来
なんでも観測史上もっとも暑い5月だったそうで、じっさい今日は暑かった。この週末は粗大ごみを出したり掃除したりとけっこうアクティブだったんだけど、これ以上暑くなるのは勘弁してくれって感じ。
で、とうぜん猫たちも夏モードになるわけで、ドーラはベランダのてすりでだらーんとしてるし、グスタフも柔らかいクッションの上とかでなく床の上にじかに寝る。というか、歩いているとあちこちに猫が寝そべっているので足元に注意しなくてはいけない季節。
とはいえ朝晩はまだ涼しいので、グスタフはまだ夜になると布団に入ってきて寄り添って寝たがるのだが。猫の快適気温は人間より高めだそうなので、向こうは暑くないけどこっちは暑いという。うへぇ*1。
*1 言うまでもなくノロケですから。
◆ いが [im.kayac.com、いま使ってますよ。毎朝私のiphoneに天気予報を通知してくれてます。:) pushbu..]
◆ ただただし [im.kayac、いまどきiPhoneとXMPPだけなんですねぇ……]