Rails勉強会@東京第78回、出席

Rails' Wiki - Rails勉強会@東京第78回、この項翌日(/16)に書いています。
自分Twitterからの追録です(順序調整あり得ます)。

Rails勉強会@東京第78回 #railstokyo
posted at 13:09:03

#railstokyo 自己紹介タイム
posted at 13:12:16

#railstokyo @東京第78回 deco_modelについて、cellluloid、EdgeRails
posted at 13:33:30

#railstokyo @東京第78回 13:45-14:45 deco_modelについて、15:00-16:00 cellluloid、16:15-17:15 EdgeRails
posted at 13:34:17

#railstokyo @東京第78回 cellluloid http://t.co/daAvNDGP
posted at 13:43:38

メールで Twitter、「Sorry, that page does not exist」対策 (API の URL)

なんとか使っているメールで Twitterメールで Twitter、OAuth (続き) - Rubyとか Illustratorとか SFとか折紙とかメールで Twitter、OAuth - Rubyとか Illustratorとか SFとか折紙とかメールで Twitter、「Timestamp out of bounds」対策 - Rubyとか Illustratorとか SFとか折紙とか だが、ある日ふと「{"errors":[{"message":"Sorry, that page does not exist","code":34}]}」といって Net::HTTPNotFound となるようになった。https://dev.twitter.com/docs/error-codes-responses によると HTTP 404 not found 相当だとか(まさに同例もある)。

https 接続にはしてるし、OAuth 対応もしたし、データ形式ももともと json取るようにしてるしなあ、どうなってるんだろう。

といって APIマニュアル https://dev.twitter.com/docs/api/1/get/statuses/user_timeline https://dev.twitter.com/docs/api/1/post/statuses/update 見てて漸く気が付いた、API の URL が変わっている。
というわけで

      consumer = OAuth::Consumer.new <コンシューマキー>, <コンシューマシークレット>, :site => 'https://api.twitter.com'

('https://api.twitter.com' <- 'https://twitter.com')サブドメイン api がついて

    Path = '/1/statuses/'

('/1/statuses/' <- '/statuses/') APIバージョン 1 も。

ElastiCache でのアイテムサイズ

Amazon ElastiCache (インメモリキャッシュ管理・操作サービス) | AWSAWSの提供する memcached 。マネジメントコンソールからポチポチしてるだけで適当に動き出す、設定条件とかあんまり意識しなくても良い。使う EC2側のセキュリティグループの設定とかあるけど。
で、細かい設定を調整しようとしたときに、どうしたら良いか探してマネジメントコンソールをさまよう事になる。(これは僕がある程度マネジメントコンソールが非力じゃなくなってからの AWSユーザだからで、それ以前からやってるような強者はコマンドライン見に行ったり API叩きに行くのかもしれない)。

max_item_size のデフォルトは 1048576 bytes (概ね 1M)。これを増やしたかった。それには Cache Parameter Groups を経由して調整することになる、デフォルトで適用されるグループ「default.memcached1.4」では値をいじれないの注意。新しく作って値を調整、その後そのパラメータグループでキャッシュクラスターを作る。或いはキャッシュクラスターの一覧から Modify のリンクを辿るとパラメータグループの割付も変更できる。max_item_size の場合、その後 Reboot が必要になるんでその辺も。(勿論キャッシュはクリアされる)

キーとか値とか

そんな ElastiCache で、実際に格納されているキーと値を見たかったり。まあなんかクライアント使うか、telnet で見に行けば良いんだけど。

#!/usr/local/bin/ruby
# coding: utf-8
require 'net/telnet'

sess_save = `php -r "echo ini_get('session.save_path');"`
OptsECache = {
  'Host'       => sess_save,
  'Port'       => 11211,
  'Telnetmode' => false,
  'Prompt'     => /^END\n/,
}
ecache = Net::Telnet.new OptsECache
begin # ensure
  if ARGV.size <= 0 then
    ecache.cmd('stats items') \
    .each_line.select{|l| /number/ =~ l} \
    .map{|l| /items:(\d+):number (\d+)/.match(l).values_at(1, 2)} \
    .map do |slab_no, limit|
      ecache.cmd("stats cachedump #{slab_no} #{limit}") \
      .each_line.reject{|l| /END/ =~ l}
    end.flatten.join.display
  else # if ARGV.size <= 0
    ARGV.map{ |key| ecache.cmd "get #{key}" }.join.display
  end # if ARGV.size <= 0
ensure
  ecache.close
end # ensure

そもそも PHP のセッション情報を memcachedストアにしたかったので ElastiCache を使おうとしてるので、PHP自身に ElastiCacheサービスの場所(ノードのエンドポイントの URL)を訊きに行く。引数無しだとキー情報の一覧、引数にキーを渡すと値を返す。

Timeクラスのインスタンスのタイムゾーン

Timeクラスのインスタンスは内部的にタイムゾーン関係の情報を持っていると言うことなんだが(class Time (Ruby 1.9.3))、そしてそれは .zoneメソッドとか .strftime での '%Z' %z%' ('%:z' '%::z') なんかで参照できるんだが、設定するにはどうしたら良いんだろう。取敢えず .zone= メソッドはないようだ。
事前に「ENV['TZ'] = 'Asia/Tokyo'」したら JST になったけどなんだかな。それでいいのかな。

.utcメソッド(.gmtimeメソッド)と .localtime メソッドで、UTC時間とローカル時間を行き来し値を得たりできるんだけど、UTC時間 -> ローカル時間の変換の時に、ENV['TZ'] のタイムゾーンが効くみたい。

文字コード推定(1.9.)

文字コード判定 - Rubyとか Illustratorとか SFとか折紙とか 前に書いたけど、1.9系だともう少し簡略に書ける。

#!/usr/local/bin/ruby
# coding: utf-8
require 'nkf'
"#{NKF.guess ARGF.read}\n".display

ちなみに「ARGF.read || $stdin」というのはあんまり意味がなかった、ARGF は ARGV がなかったら自動的に標準入力を見る。
あと、.guess が返すのは Encodingクラスのオブジェクトなんだけど、文字列のなかで #{} 参照されたときに .to_s が走る。

テスト周り

#railstokyo テスト周り 、話題出し

posted at 15:04:15

#railstokyo テスト: RSpec or TestUnit、Cucumber使ってる?、RSpec Cucu. gard とは、Jenkinsのメリット、FacroryGirl、テストフレームワークのお勧め、どこまでテストするの?、Cucu.or RequestSpec

posted at 15:09:36

#railstokyo テスト周り http://t.co/gZiLnzQI ここではRubyで記述されたコードに対するテスト方法の概要について説明します。

posted at 15:12:15

#railstokyo テスト周り XUnit系は Ruby のコードでテストを書く、RSpec のテストはRubyコードではあるが DSL になってて専用の言葉で書いてく感じ

posted at 15:23:49

#railstokyo テスト周り みんな RSpec系、XUnit系やってるひといない

posted at 15:26:24

#railstokyo テスト周り RequestSpec or cucumber

posted at 15:29:42

RequestSpec は直接テストのコードでシナリオを書く。Cucumber は一度間にステップ定義を挟んで自然言語でシナリオを書く。
Cucumber育てるのは大変、育ってくると素直にシナリオ書けるようになる。

少数のプログラマがシナリオ見るだけなら RequestSpec がいいかも。
顧客さんなどプログラマーじゃない人や大きなチームで話をするなら自然言語でシナリオ読める Cucumber がいいかも。

#railstokyo テスト周り FactoryGirl

posted at 16:02:00

#railstokyo テスト周り Jenkins のメリット、CI(継続的インテグレーション)を実現するためのアプリケーション、メイブン+クロンみたいな

posted at 15:43:18

#railstokyo テスト周り ジェンキンス、初めて設定するときでも一日くらいで出来た、それでも遅いと言われて

posted at 15:50:23

自動テストをするとして、サーバでやる Jenkins と、ローカルでやる Guard は直接対抗するものではないが、片方やってればもう片方はやらないよね。

そもそも自動テストが趣味じゃないというひとも

#railstokyo テスト周り どこまでテストする? ここでいうテストって何? 単体テスト結合テスト受入れテスト

posted at 16:00:31

プライベートメソッドのテストを書くか?

  • プライベートメソッドのテストを書きたくなった時点で設計見直しすべきでは
  • プライベートだろうがなんだろうがコード手を入れるときはテスト欲しいじゃん

#railstokyo テスト周り 。了

posted at 16:03:53