Hatena::ブログ(Diary)

mizchi log

@mizchiの雑記帳

2012-04-19

今日のハマリ


昨日は風邪を引いたのでなし。三日坊主の三日目(2記事目)

JS 一意なデータバインド


こんなコードを

class HogeView
  constructor: ->
    @from = $('input#from')

  set_from : -> @from = $('input#from')

こんな風に

class HogeView
  from : -> $('input#from')

リファクタリングされた。確かに一意なデータバインドならこっちのほうがかっこいい。

Haskell

最近のMacだとLLVMでないGCCは入ってない。次のページから落としてくる
kennethreitz/osx-gcc-installer · GitHub https://github.com/kennethreitz/osx-gcc-installer

macのcabal がデフォルトで参照するgcc先は /Developers/usr/local/bin/gcc
パスの変更するのが面倒くさそうだったので、ln -s /Developers/usr/local/bin/gcc /usr/bin/gcc-4.2 した

cabal update
cabal install yesod

日本語


脳みそから直接吐いてる言葉が何も伝わらないと言われた。

Amazon.co.jp: 論文の書き方 (1959年) (岩波新書): 清水 幾太郎: 本 http://www.amazon.co.jp/%E8%AB%96%E6%96%87%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-1959%E5%B9%B4-%E5%B2%A9%E6%B3%A2%E6%96%B0%E6%9B%B8-%E6%B8%85%E6%B0%B4-%E5%B9%BE%E5%A4%AA%E9%83%8E/dp/B000JAT3L8/ref=sr_1_1?ie=UTF8&qid=1334834520&sr=8-1

2012-04-17

今日のハマリ 2012-04-17


三日坊主なのですぐ飽きると思うが、毎日何かしらはまってるのでログに残しておこうと思う
更新がないと飽きたか、はまらなかったか。だいたい前者だと思う。

Git


リモートのブランチを指定してpushしたいとき

git push remote-repo local-branch:remote-branch

stashに名前をつけて保存したい > そんな機能はない
コメントつきで保存する機能がある

git stash save "comment"

適当にcommitしてあとで使えとの声もアリ


GithubのMerge ConfirmボタンとCloseボタンややこしい。二回も押し間違えた。

js


ネームスペースつけるべき?? > 規模次第
Railsのassets pipelineのrequireは行頭で宣言しないといけない
ぐぐるとalphabet順で読み込まれるとあったが、実際はそんなことはなく、init.js.coffeeを作成して管理するようにした

Ruby


:$ == $LOADPATH
def self.func ~ はクラスメソッド
::Hogeはトップレベルから優先的にHogeを探す。
rspecを書くときはカバレッジに注意して可能な限り変数を触る。

ruby/rvm


gemsetを使う

rvm gemset create hoge
rvm use 1.9.3@hoge

ruby/Capistarno

rvmから使いたい場合、rvm-capistranoインストールしておかないとコケた
gem install capistrano_colors しておくとログが見やすかった

ruby/Whenerver

crontabに日本語含む文字列を含んでいるとwheneverがcrontabに書き込みに行く時、文字コードを読めなくて落ちる
悲しいがIssueで報告する程でもない


今日は件数が多いがここ数日のものも含んでいるので、明日からはもっと少なくなると思う。というか、続かないと思う。

2012-04-13

rspecでなんでも通すモックを定義してみた


rspecを初めて使ったので、モックを使うメモ
gemのmailを使ってGmailを送るメソッドがある。

require "mail"
# ...
      def send_alert_to_gmail(content)
        mail = Mail.new
        mail.from = CONFIG['email']
        mail.to = CONFIG['to']
        mail.charset = "UTF8"
        mail.body = content
        mail.delivery_method :smtp, {
          :address => 'smtp.gmail.com',
          :port => 587,
          :domain => 'smtp.gmail.com',
          :user_name => CONFIG['email'],
          :password => CONFIG['password'],
          :authentication => :plain,
          :enable_starttls_auto => true
        }
        mail.deliver # ここを発行したくない
      end

# ...

これのテストコード(一部)

# ...
describe '#send_to_gmail' do
  it 'can send' do
    mail = mock(:mail).as_null_object # とりあえずなんでも通しちゃうメソッドを定義
    mail.should_receive(:deliver).once # 一回だけ呼ばれるメソッド
    Mail.stub(:new) { mail }

    Logger.send_alert_to_gmail "yeah!" # mail.deliver を含むメソッド
  end
end

このように外部に作用する(mailを送る)アクションを外に逃すようなアクションを stub out という、らしい。

これはたぶん良い例とは言えない。本当はメールを送るまでのアクションもチェックしたかったのだが、null_objectを定義すると全部逃がしてしまう。関数内部でMailへのアクションがほとんどを占める関数なので、このテストには不適な気がする。

ちなみにmail自体がモックの仕組みを持っている(MailTester)のだが、壊れていた。Exampleのテストが失敗する。
今回は動くコードができたので多少は仕方ないとしても、Issueが100件以上無視されてるモジュールを使うのはやめようとおもった。

でもmailはRails内部でも使われてるらしい。怖い。