読者です 読者をやめる 読者になる 読者になる

Google OAuth2 トークンを取得する with Go

Go OAuth2

GAE/Go をちょいちょい触っている。
その中の Pull queue を試そうとしたとき、OAuth2 のトークンが必要になったので取得したメモ。

手順

[utahta@mbp google-oauth2]% go run oauth2_token.go
Input ClientID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
Input Secret: XXXX-XXXXXXXXXXXXXXXXXXXXXX
Input Scopes: https://www.googleapis.com/auth/taskqueue,https://www.googleapis.com/auth/taskqueue.consumer
Start Execute API
ブラウザで以下のURLにアクセスし、認証して下さい。
https://accounts.google.com/o/oauth2/authxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Input auth code: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
token is saved to token.json
[utahta@mbp google-oauth2]% cat token.json
{"access_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","token_type":"Bearer","refresh_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","expiry":"2016-08-16T21:46:52.012038137+09:00"}

ソースコード

トークンめも

リフレッシュトークンは 1 クライアント 25 個まで。それ以上は古いものから消えていく。

Using OAuth 2.0 to Access Google APIs  |  Google Identity Platform  |  Google Developers

参考

GolangでGoogle Driveにアクセスするためのトークンを取得 - Qiita
OAuth2.0によるGoogle+ APIのアクセス方法
Google APIのAccess Tokenをお手軽に取得する - Qiita

Bilibili Macro Link 2016

ももクロ 海外

7月23日に上海で開催された Bilibili Macro Link 2016(BML2016) というニコニコ超会議の中国版みたいな行事に参加してきました。

目的は、ももクロさんも参加するライブ。

参加するにあたって

チケット

ももクロ公式サイトやイープラスなど日本のチケット販売サイトから購入できないため、中国のチケット販売サイトで買う必要があった。
そこは、日本のクレジットカードが使えなかったり、配送先が中国国内じゃないといけなかったり、公民身分番号(?)が必要だったりで、購入難易度が尋常じゃない。

以前中国に住んでいた方に代行を頼んでみたものの結果はダメで、最終的にこの壁を乗り越えた面識ある強者方に譲ってもらった。

渡航

デルタ航空 16時10分 成田発。

成田空港がまぁ遠い。
本当は JAL or ANA で行きたかったけど、航空便を探すのが遅く値段が高まっていたため、諦めたのだった。

けど良いことはあって、この便にたまたま知り合いのモノノフ(ももクロのファン)方がいて、心強さがあった。
ちなみにデルタ航空に搭乗した際は、「When The Curtain Rises」という映画が面白くてオススメ。

1日目

予定より20分くらい早く上海に到着。

到着早々に問題が起きて、レンタル Wi-Fi になぜか接続できない。
Wi-Fi に接続できないと VPN に接続できない。
となると知り合いの方と連絡を取る唯一手段の Twitter にアクセスできない。

同便に乗っていた初対面ノフの方に Wi-Fi をお借りした(多謝!)ところ、問題なくアクセスできたので、俺の借りた Wi-Fi がクソという結論に。
ケチって一番安いプランにしたのが良くなかったか… Wi-Fi もクソだったけど、その判断をした俺もクソだった。

海外の初めて行く場所でのネット環境は、それこそ命綱なので、そこをケチるということは、命をケチることと同意(錯乱)

いったん落ち着いて、借りた Wi-Fi を使って、日本で登録した VPN サービスに接続しようとすると、これまた繋がらない。
後手後手すぎて、もうダメだ。

とりあえずリニアモーターカーに乗る。

リニアモーターカー

時速 300km まで確認した!
昼間だと 400km とか出るらしい…?

この乗り物がたった 50 元(約800円)。お安い。

座席は涼しいんだけど、日本の新幹線でいうトイレとかあるような車両間がクッソ暑くてつらかった。
なぜなら座れなくて、そこに立っていたから。

乗ってたのは10分くらいだけど、汗だらだらになった。

地下鉄

思いのほか、ぜんぜん治安わるくないなという印象。
途中まで一緒にいたモノノフ方たちと別れて、ひとりでホテルに向かった道中も不安感なくて良かった。
(道が合ってるのか?っていう不安はあったけど)

改札付近には、空港の保安検査場にあるような検査機がどの駅にも(?)置いてあって、カバンを入れろと指図されるのだけど、検査官が喋ってたり見てなかったりで、これは一体…という気持ちになれる。

この頃は、Wi-Fi は不安定ながら繋がるようになっていて、VPN は全然ダメという状態。

ホテル

上海世和酒店(1泊約8000円の4つ星ホテル)

日本でスクショしておいた地図を頼りに到着。駅から近くて助かった。

f:id:utahta:20160722200742j:plain (ホテル近くの様子)

チェックインは比較的スムーズに行くだろうと思いきや、受付の綺麗なお姉さんの英語が上手すぎて全然聞きとれず、苦笑いされる。つらい。
たぶん deposit って言ってた。

部屋に入って Wi-Fi と格闘し、セカイVPN と契約し、なんとか Twitter にアクセスできるようになった。

けれど、相変わらず不安定な Wi-Fi 氏。

2日目

朝食

無料券を使うべくビュッフェ形式の朝食へ。
昨晩、機内食以降は、ただ水を飲んで過ごすという修行をしていたので、非常に体に染み渡った。

f:id:utahta:20160723084723j:plain (レストラン(?)の様子)

肝心の料理の写真は、撮らなかったらしい。
麺類に炒飯に卵料理に点心と思いのほかどれも美味しく、たいへん満足だった。

会場

上海メルセデス・ベンツ・アリーナ

第一印象は、デカイ!

f:id:utahta:20160806202205j:plain

ライブの開演は17時で、会場に着いたのは9時半頃。
この日は、とにかく暑くて去年のエコパ桃神祭のようだった。(一部の人にだけ伝わる表現)

何もすることがなく、いったんミニステージのあるパーク的なところに足を運ぶ。

f:id:utahta:20160723100247j:plain (空が広い)

このパークは、チケットがないと入れないようになっていて、入り口では荷物検査をしていて飲み物が没収される。(ただしチェックはザルで、自主的に捨てないかぎり持ち込める)

真面目に捨てた人は、とにかく暑いので、飲み物を手に入れないといけないのだけど、販売所が2つしかなくてしかも売ってるのが、なんだかよく分からないジュースっぽいもの or コーラ。
得たいの知れないものは、触れてはならない気がしたので、大人しく買ったコーラがこちら。

中国は、飲み物を冷やさない文化(?)で、常温が基本らしい。
(氷が安全じゃないという話は、なんとなく理解できる)

暑さで温まったホットコーラは、控えめにいってマズい。

ただそれしか飲むものがなかったので、我慢するしかない。

特に何事もなく、ただただ暑さをしのいだところで、パークを出て涼しいところに避難。

f:id:utahta:20160723125825j:plain (ベンツなのかな)

そして LA に引き続きファミマ!

f:id:utahta:20160723134906j:plain (最高)

ここでようやく冷たいお茶を(微糖という罠を避けつつ)入手する。

さらにメルセデスベンツアリーナの地下に潜ったら、スケートリンクがあって涼しくて快適だった。

f:id:utahta:20160723141337j:plain (なんでスケートリンクあるん)

他所と比べて圧倒的に涼しいためか、ちらほらとモノノフ方もたむろっていた。

昼食

メルセデスベンツアリーナの6Fは、レストラン街になっていて、良さそうなお店が並んでいる。

お腹が空いたので、点心中心っぽいお店に入ったところ、接客してくれた店員さんが、言葉はまったく通じないことに対して困惑しつつも、優しく接してくれてありがたかった。

f:id:utahta:20160723145050j:plain f:id:utahta:20160723145647j:plain f:id:utahta:20160723150123j:plain

店で出す飲み物も常温かい!と思ったりはしない(した)。
味は、極めて美味しかった。

ライブ

いよいよ!!!

メルセデスベンツアリーナの会場は、天井が高くてどことなくカッコいい。

f:id:utahta:20160806210917j:plain f:id:utahta:20160806211015j:plain

開演前は撮影オッケー(?)だったけど、開演後は注意されたらしい。
(中国の方はそんなのおかまいなく撮っていた)

17時の開演を迎え、日本でいうニコ生主なひとたちが色々やっている中、待つノフ。

で、いよいよももクロが!オーバーチュアが!!
うおおおお!!!ってなって立ち上がったら、座れと怒られる。

中国のライブは着席が基本らしく、立ったらダメだったらしい。

仕方ないので、着席しながら全力で応援した。
偶然連番になった赤推しノフ氏と一緒にドームツアーのアレをやったら、夏菜子ちゃんさんが反応してくれ(?)て「!!!!?」と盛り上がるなどした。

この会場にきてる人々は、日本のアニメも好きな人が多いみたいで、例えば「君嘘」の曲がバーンと流れたときの盛り上がりは最高に凄かった。
この日をきっかけに、ももクロに少しでも興味をもってくれたら良いな。

夕食

f:id:utahta:20160806214502j:plain

冷えたビールがでてきただけで感動した常温のセカイ。

f:id:utahta:20160806215201j:plain f:id:utahta:20160806215207j:plain f:id:utahta:20160806215228j:plain

ここの料理もたいへん美味しくて良かった。

ただし↓、テメーはダメだ

f:id:utahta:20160806215212j:plain (たいそう辛い)

たいそうどころではなく、むちゃくちゃ辛い!
翌日以降、3日間くらいお腹がやんわり痛かったのは、たぶんこいつのせい。

でも、美味しかった。

帰路

デルタ航空 10時10分 上海浦東国際空港発

ホテルから地下鉄で空港に向かったんだけど、思っていたより45分くらい着くのが遅れて焦った。
といっても2時間前に着く予定が、1時間前になったくらいだけど、海外だしもし乗り遅れたら対応が困難だし、もっと余裕をみた方が良かった反省。

f:id:utahta:20160724091432j:plain (謎の突起物)

何事もなく保安検査も通り抜けて、お土産を物色しつつ、搭乗へ。

f:id:utahta:20160724184930j:plain (そういえば会場で貰ったお土産たち。Tシャツついてて太っ腹)

定刻よりすこし早いくらいで日本に到着。
行きと同じく「When The Curtain Rises」を観てしまったんだけど、うん、面白かったなぁ。

MRI 検査をしてきた話

日記

6月の上旬頃から謎の首の痛みに悩まされ、いったん治まってきたと思いきや再びぶり返して、歩くだけで痛いという状態異常になってしまったので、仕方なく病院に行った。

整形外科での診断は、ストレートネックと強い肩こりという話だったのだけど、数日たっても良くならなかったので再度行ったら MRI 検査をしますかと言われた。

こちらとしては、痛いのを直して欲しいのもそうだけど、原因が何なのか知りたかったのでぜひにとお願いした。

MRI 検査は予約制らしく、検査可能な時間が提示されたので、翌日の10時頃をチョイスした。
看護師さんは、iPad(だった気がする)でポチポチ予約登録をしていた。

この時点で値段のことは一切教えてくれなくて(聞くのも忘れていた)、帰ってからそういえばMRIって高そうだなと思い調べたところ、大体一部位につき8,000円くらいが相場のようだった。
何箇所やるのかも分かっていなかったので、2~3万くらいを覚悟したけど、結果的に7,800円くらいで済んだので安くて良かった(アンカリング効果)

翌日、病院で受付をすませると、とにかくパンツだけになってコレを羽織ってくれと指示され、ありがちな病院服に着替えさせられた。

予約制なだけあって、すぐに名前を呼ばれ MRI 検査室に連れていかれた。

説明によると、3分~5分間撮影してちょっとインターバルを挟むといったことを何回か繰り返し、検査完了まで30分程度かかるそうだった。
もっと早く終わると思っていたので、すこし面食らった。

特に僕の場合は、首の検査だったので、ツバを飲み込まないでくださいと言われたのがキツかった。
3分~5分のあいだ必死に我慢して、わずかなインターバル中に飲み込むしかなかった。

そういえば MRI 検査の前に、検査中は音が猛烈にうるさいのでヘッドフォンの着用をどうぞと言われた。
Jポップ、洋楽、ラジオから好きなのを選んでくださいと言われたので、「じゃあももクロで」と言いかけたけど止めた。
好きにしてくださいと言ったところ、洋楽が流れだした。

検査機械の中は想像通りせまかった。
分かってることだし平気だろうと思ってたけど、入った瞬間はなかなか怖かった。
狭いところが得意ではないのか、一般的にそう思うのかは分からない。
目をつぶっている方が恐怖を感じたので、あえて開けていた。

しばらくすると落ち着いてきたので良かった。

その後はとにかく退屈な検査が終わるまでの時間を耐えた。
音ゲーをよくする影響で検査中のドコドコドコという音が8分の連打に感じたりした。

検査が終わると結果を郵送するか、手渡しで整形外科まで持っていくか選択できた。
郵送にすると1週間くらいかかると言われたので、手渡しで持っていくことにした。
それでも結果を教えてくれたのは、3日後ぐらいだった。(画像データの確認とかしてるのか?よく分からない)

検査の結果は、軽度のヘルニアだった。
おとなしくしていれば痛みも治まるでしょうという話をされて終わった。

下手に首ポキポキ系の整体に行かなくてよかったかもなと思った。

ヘルニアは対策があんまりなさそうだけど、数日間おとなしくしていたら痛みは引いた。

いまは変な寝相をしないように気を使ったりしている。
とくに本を読みながら寝落ちしたりすると非常に危険ということが分かった。

今後は些細なことに気を使い、もうすこし丁寧に生きていこうと思う。
(なんだか歳を感じる結びになった)

database_cleaner と use_transactional_fixtures = true の競合について

rails Ruby

競合するとはどういうことなのかいまいち分からなかったので試した。

どうやら capybara で selenium driver など(rack_test driver以外)を使うと別スレッドでサーバが立ち上がり DB コネクションが共有されなくなるため、トランザクションを張ってテストデータを作ると、その別スレッドからテストデータにアクセスできなくなる問題のことを言っているらしい。

下記リンク先の記事(主に図)が参考になった。

The One True Guide to database transactions with Capybara - Ian's Tech Notes

例えば、roles テーブルを参照する users テーブルがあり、下記のように roles にテストデータをつくるとき use_transactional_fixtures = true としていると、テストデータが commit されないので別スレッドで立ち上がってるサーバ側から roles のレコードにアクセスできず users のレコードの作成に失敗する。

...
  # use_transactional_fixtures = true

  before do
    FactoryGirl.create(:role) # uncommited transaction
  end

  it "新規作成できること", js: true do
    visit new_user_path
    fill_in "name", with: "Taro"
    click_button "Create User" # 必要な role が見当たらずエラー
    
    expect(page).to have_content 'Taro'
  end
...

解決として use_transactional_fixtures = false にすると良いということだった。

ただし、すると今度は spec/fixtures/*.yml が毎度作りなおされるようになる(delete & insert)。

これが気に食わないと思って避けるためにパッと思いついた案が use_transactional_fixtures = true として、DatabaseCleaner.start, clean しないことだったけど、それでどうにかなるのは DatabaseCleaner.strategy = :transaction で selenium driver 等を使わない場合に限られてきそう。

そうすると clean_with(:truncation) のために database_cleaner を入れたみたいになるので、素直に use_transactional_fixtures = false とした方がよかった。

おわり

database_cleaner を使うときは、fixtures の作りなおしを受け入れて、 use_transactional_fixtures = false としたい。(結果、ドキュメント通り)

あと aamine/activerecord4-redshift-adapter の場合、:truncation, :deletion 共に動かないので、database_cleaner を使うメリットがなさそうだった。

jpstock & jsm の公開をやめました

株価取得云々の目的でつくっていた jpstock と jsm の公開をやめました。

jsm を公開したのが2011年の9月。
もともと怒られたり、やめてと言われたらやめようという気持ちで公開してましたが、本日下記のヘルプ画面を知るにいたり、公開をやめる運びとなりました。

Yahoo!ファイナンスヘルプ - Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止しています

当時はなかった記載と思いつつ、ざっくり調べると2013年中頃に追加された…?気づくの遅すぎですね。

定額制API | JPXデータクラウド

こういったAPI(中身は知らないけど…)が、制限付きでいいので、もっとお安く提供されるといいのだけど。