二段階認証
Providing your 2FA security code
githubさんが二段階認証を始めたらしい。
Google Authenticatorが使えるのだけど、仕組みが気になってぐぐってみた。
Googleの2段階認証で使われているOTPの仕様が気になった
なるほどねー。
Developer CenterはSafariで見た方がいいらしい
Developer CenterにあるProvisioning Profileを更新する画面を使おうとしてると、どうしても画面が進まなくなる事があった。
よく観察してみると、どうやらchrome on macで操作しているとjavascriptのエラーが出ていて動いてくれていなかった。
数時間悩んだ挙げ句、safari on macを使ってみるとすんなり動いた。
rails3 + rspec + helper method
まだ疑問に思っている程度の事。
rails3の複数のhelperに同じ名前のメソッドを作るとrspecできちんとテストできない様子。
以下のコードは実際に試したコードとは異なる名前なので、動作が異なるかもしれない。
ただ、このような状況が発生している事は残しておきたい。
例 ) こんな構成になっているとき。
# app/helper/top_helper.rb module TopHelper def my_helper_method "top helper method" end end # app/helper/second_helper.rb module SecondHelper def my_helper_method "second helper method" end end
rspec
# spec/helpers/top_helper_spec.rb require 'rspec_helper' describe TopHelper do describe :my_helper_method do it { expect(helper.my_helper_method).to eq("top helper method") } end end
これで動かしてみるとrspecがfailedな状態になる。
表示されるスタックトレースを見ると、どうやらSecondHelperの方が呼ばれている様子。
helper毎にmodule名が違うんだから、同じ名前のメソッド名つけてもきちんと使い分けてほしい。
まだ勉強不足でどこが原因なのか調べきれてないので、とりあえず状況をメモしてみた。
git pre-pushで ユーザの入力を受け付ける方法
https://raw.github.com/git/git/master/Documentation/RelNotes/1.8.2.txt
git 1.8.2からpre-push hookが追加されたので、早速使ってみた。
このとき、ユーザからの入力を受け付けるところで少し工夫が必要だったのでメモ。
ユーザからの入力が拾えない?
ユーザに yes/no ? と確認してから動作するようなスクリプトを書いたのだけど、単純に $stdin.gets とすると入力待ちしてくれない様子。
また、pre-pushは $stdinからはpushされる対象の情報が渡ってくるとのこと。
# Information about the commits which are being pushed is supplied as lines to # the standard input in the form: # # <local ref> <local sha1> <remote ref> <remote sha1> # # This sample shows how to prevent push of commits where the log message starts # with "WIP" (work in progress).
解決方法
https://gist.github.com/ebihara/5948590#file-pre-push-py-L10
こちらの10行目が解決方法になってた。
まずスクリプトの先頭で $stdinから拾えるだけ入力を拾ってきておく。
その後は、$stdinを open("/dev/tty") で置き換えて利用。
これで解決できた。
今日の発見
Expecta
AFNetworkingのtestcaseをチラ見してて気がついたもの。
SenTestCaseで使ってるmatcherがさくっと書けてしまう優れもの。
expect(@"foo").to.equal(@"foo"); // `to` is a syntatic sugar and can be safely omitted. expect(foo).notTo.equal(1); expect([bar isBar]).to.equal(YES); expect(baz).to.equal(3.14159);
非同期テストもシンプルに書けるぽい。
expect(対象).will.to.equal(期待するもの);
とか。
実際の例はAFNetworkingのtestcaseから。
# https://github.com/AFNetworking/AFNetworking/blob/master/Tests/AFHTTPClientTests.m - (void)testPostWithParameters { __block id blockResponseObject = nil; [self.client postPath:@"/post" parameters:@{ @"key": @"value" } success:^(AFHTTPRequestOperation *operation, id responseObject) { blockResponseObject = responseObject; } failure:nil]; expect([self.client.operationQueue operationCount]).will.equal(0); expect(blockResponseObject).notTo.beNil(); expect(blockResponseObject).to.beKindOf([NSData class]); NSError *error = nil; NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:blockResponseObject options:0 error:&error]; expect(responseDictionary[@"form"]).to.equal(@{ @"key": @"value" }); }
httpbin
通信ライブラリとかのテストケースで使えそうなもの。
いろいろとテストで使えそうな予感。
ローカルで動いてないと嫌な人はここからインストールするとかで使えそうな雰囲気。
bundle と mecab-ruby
mecab, mecab-ipadicはcheckinstallで入れたんだけど、mecab-rubyがいい感じに動いてくれなかった。
試行錯誤した結果、こんな風にGemfileを書いたらうまいこといった。
source "https://rubygems.org" # gem "rails" gem 'mecab-ruby', :github => 'hotchpotch/mecab-ruby-gem'
あとデフォルトでinstallするとMeCab.soがロードできなかったので、環境変数を設定
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
これで動くようにはできた。
rubyのJSON.parseでhashキーをsymbolにしてもらう方法
Ruby JSON parse changes Hash keys
- ruby 1.9.3p393
- json (1.8.0)
$ pry [1] pry(main)> require 'json' => true # hashをjsonへ変換 [2] pry(main)> json = {:key_a => "value2", :key_b => "value3"}.to_json => "{\"key_a\":\"value2\",\"key_b\":\"value3\"}" # 普通にparseしてもらうと keyはString [3] pry(main)> p JSON.parse(json) {"key_a"=>"value2", "key_b"=>"value3"} => {"key_a"=>"value2", "key_b"=>"value3"} # optionを指定すると、keyをSymbolにしてくれる [4] pry(main)> p JSON.parse(json, {:symbolize_names => true}) {:key_a=>"value2", :key_b=>"value3"} => {:key_a=>"value2", :key_b=>"value3"}