@kyanny's blog

My thoughts, my life. Views/opinions are my own.

最近読んだもの

Processing large CSV files with Ruby

IO オブジェクトから読むのが一番効率が良い。 CSV.foreach を使うのが良い。次書くときはそうしてみよう。

「Microsoftが変わった」って言われてるけど本当なの?よくわかんないから直接聞いてきた|CodeIQ MAGAZINE

世界中どのオフィスでも社員証一つで働ける合理性と、社員証を紛失したら一切言い訳は聞かない厳格さが、両方備わってるのがよかった。 Microsoft いいなぁ。

Continuous Deployment at Instagram | Engineering Blog | Instagram Engineering | Facebook

Canary は良いアイデアなので試してみたい。しかし bad commit もデプロイされてしまうことを許容するのはちょっとな、と思う(Canary どまりになるのかどうか、まで読み込めてない)

ローン・サバイバー

最近とても疲れやすい。身体が弱っていると心も弱ってくるようで、戦争映画でもみて英気を養おうと Hulu を眺めてみたらみつけたのでみてみた。ブラックホーク・ダウンも配信されてたので最初そっちをみはじめたのだが、せっかくなら違うものをみてみようと思い。

期待どおりの戦争映画(特殊部隊のゲリラ戦もの)でよかった。ヘリはどの状態をどの角度からみてもかっこいい。チヌークの撃墜のされ方があまりにもあんまりな感じで「うわー」と思った。字幕も配信されてることに気づかなくてうっかり吹き替えでみてしまったので字幕でもみてみたい。

ローン・サバイバー Blu-ray

ローン・サバイバー Blu-ray

ペアプログラミング―エンジニアとしての指南書

最近入社した同僚から「(Quipper では)ペアプログラミングはやっていないの?」と聞かれ、正式な形では実施していないが必要に応じて相手の席に行って議論しながらコーディングしたりすることはふつうにやっているよ、いい機会だから連休明けにでもトライしてみよう、と答えてみたものの、正式なペアプログラミングってどういうものだろう?と疑問に思ったので、そういうものがあれば学んでおこうと思い、 Amazon で「ペアプログラミング」で検索して一番それっぽい本を買った。ペアプログラミングというプラクティスはだいぶ多く言及されているものの、専門に扱っている書籍が(和書では)ほとんどなくて驚いた。

おおまかに分類すると、

  • ペアプログラミングの良い点を挙げる
  • ペアプログラミングを導入するにあたり障害になり得るもの(一人で仕事をしたいプログラマによる抵抗、マネージャの理解を得られない、など)への対処法
  • ペアプログラミングを実践する上で役立つテクニックの紹介
  • 典型的なペアのパターンごとに、理想的な結果、考えられる問題、問題を克服するヒント、の紹介
  • XP (Extreme Programming) / CSP (Collaborative Software Process) の文脈におけるペアプログラミングの紹介
  • ペアプログラミングの発展形の紹介

のようなトピックを扱っている。このうち、一番知りたかったのはテクニックの部分だったのだが、正直ちょっと物足りなかった。厳密に定義されたプラクティスがたくさんあるものかと思っていたが、あんまりそういうこともなく、「コミュニケーションをとれ、休憩をとれ、あとは忍耐が大事だ」ということが繰り返されている感じだった。どれも「そりゃそうだろ」という感じで、心構えをしておく以上の実践的な準備ができそうな指南には感じられなかった。

ペアプログラミング自体についてはそんなわけでちょっと物足りない内容だったが、 XP への言及のところは良かった。そもそも XP の本を読んでちゃんと体系だって学習したことはなく、なんとなくこういうものでしょ?というぼんやりとした理解にとどまっていたが、やはりその理解に輪郭を与えるために原典を読むべきだなとの思いが強くなった。そして、ペアプログラミング自体が XP の文脈から発展してきた部分も少なくないだろうから、きっとそっちの文献で多く言及されていて、改めて専門書として書き下すほどのトピックになり得なかったのかもしれない(だからペアプログラミングを書名に冠する和書が少ない)、と思った。

13年も前に訳された本だが、内容に古さはさほど感じられなかった。訳の質は非常に悪い。日本語として「てにをは」がおかしい箇所が数十箇所はある。そのせいもあって文章がかたく、読みづらいが、内容はまったく難解ではないのが救いだった。出版元がピアソンでもう新書では手に入らず、中古を探すしかないが、そこまでして読むほどの本ではないなと思った。

ペアプログラミング―エンジニアとしての指南書

ペアプログラミング―エンジニアとしての指南書

  • 作者: ローリーウィリアムズ,ロバートケスラー,Laurie Williams,Robert Kessler,長瀬嘉秀,今野睦,テクノロジックアート
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2003/03
  • メディア: 単行本
  • 購入: 6人 クリック: 36回
  • この商品を含むブログ (29件) を見る

omniauth-fitbit-oauth2 で OAuth 2 認証して Fitbit API を叩く

https://github.com/kyanny/playground/tree/gh-pages/fitbit_my_first_app

ハマったところ、注意点

  • https://dev.fitbit.com/apps からアプリケーションを登録するときアプリ名に fitbit という単語を含めることはできない
  • 心拍数を API から取得するためには OAuth 2.0 Application Type を Personal にすること
  • OAuth 2 認証の方法は Authorization Code Grant Flow を選ぶこと(response_typecode にする必要がある)
  • Implicit Grant Flow は OAuth 2.0 Application Type が Client でないとダメ。 Personal を選んだアプリだと認証に失敗する
    • ↓みたいなエラーが出る。 Implicit Grant Flow を使おうとして response_typetoken を指定しているが、 OAuth 2.0 Application Type が Personal なので Implicit Grant Flow は利用できず、 Authorization Code Grant Flow とみなして処理するため必須パラメータが無い、というエラー
OAuth2::Error (:
{"errors":[{"errorType":"invalid_request","message":"Missing parameters: code Visit https://dev.fitbit.com/docs/oauth2 for more information
on the Fitbit Web API authorization process."}],"success":false}):

変更したのは実質この 3 ファイルくらい。

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :fitbit_oauth2, ENV['FITBIT_CONSUMER_KEY'], ENV['FITBIT_CONSUMER_SECRET'], response_type: 'code', scope: 'activity heartrate location nutrition profile settings sleep social weight'
end

config/routes.rb

Rails.application.routes.draw do
  get   '/login', :to => 'sessions#new', :as => :login
  get '/auth/:provider/callback', :to => 'sessions#create'
  get '/auth/failure', :to => 'sessions#failure'
end

app/controllers/sessions_controller.rb

class SessionsController < ApplicationController
  def new
  end

  def create
    auth_hash = request.env['omniauth.auth']
    access_token = auth_hash.credentials.token
    res = RestClient.get 'https://api.fitbit.com/1/user/-/activities/heart/date/2016-05-04/1d/1sec.json', {'Authorization' => "Bearer #{access_token}"}
    require 'pp'
    pp JSON.parse(res)
    render :text => auth_hash.inspect
  end

  def failure
  end
end

俺物語!!

ちなみに↑は捏造ツイートです(俺はこんな投稿はしていない)

俺物語!!(通常版) [Blu-ray]

俺物語!!(通常版) [Blu-ray]

俺物語!!

俺物語!!

  • 河合勇人
  • 日本映画
  • ¥2000