RSpecのit “” do 〜 endが多すぎて遅くなったので纏めるための正規表現

正しくないことをしていることは、わかっています。
しかし、データが複雑に絡み合っていて、事前条件のデータを準備するのに時間がかかるので、
なるべくitの数を減らしながらデータを検証したい、と思いました。

つまり、テストにスピードが欲しい。
しかし、なんかあったときのためのコメントは残したい。

そういうことで、以下の正規表現を書いてみました。
なお、検証したのはRubyMine上でです。

検索対象: |it “(.+)” do\n((.|\n)*?)\s+end$|
置換文字列: | # $1\n$2|
(左右の|は含めないでください)

これを使うと

context "ほげ" do
  subject { "hoge" }
  it "hogeであること" do
    subject.should == "hoge"
  end
  it "piyoでないこと" do
    subject.should_not == "piyo"
  end
  it "fugaでないこと" do
    subject.should_not == "fuga"
  end
end

が、

context "ほげ" do
  subject { "hoge" }
    # hogeであること
    subject.should == "hoge"
    # piyoでないこと
    subject.should_not == "piyo"
    # fugaでないこと
    subject.should_not == "fuga"
end

というふうに置換することができるので、あとはit文を足して調整してください。

context "ほげ" do
  subject { "hoge" }
  it "正しくhogeであること" do
    # hogeであること
    subject.should == "hoge"
    # piyoでないこと
    subject.should_not == "piyo"
    # fugaでないこと
    subject.should_not == "fuga"
  end
end

こんなことしなくても、もっといい方法があるのにさー…とかありましたら、
教えてください!!!!(切実)


Kotlin Advent Calendar8日目の練習問題やってみた

@ore_publicに、KotlinでもAndroidできるよという話を聞いて、Kotlinのことを調べている俺です。
Kotlin Advent Calendarがあるから、それを見てみるとよいよという話を、著者の人が呟いていたので、読み進めています。
で、8日目で練習問題があったのでやってみました。

リンクはこちら。
Kotlin Advent Calendar: 8日目

その1: 九九

fun main(args : Array<String>) {
  for(i in 1..9) {
    for(j in 1..9) {
      println("$i x $j = ${i * j}\n")
    }
  }
}

その2: FizzBuzz

fun main(args : Array<String>) {
  for(i in 1..100) {
    when {
      i % 3 == 0 && i % 5 == 0 -> println("$i:FizzBuzz\n")
      i % 3 == 0 -> println("$i:Fizz\n")
      i % 5 == 0 -> println("$i:Buzz\n")
      else -> println("$i\n")
    }
  }
}

その3: 最大公約数

fun main(args : Array<String>) {
  val a = args[0].toInt()
  val b = args[1].toInt()
  val min = if (a > b){ b } else { a }
  var max_value = 0
  for(i in 1..min) {
    if(a % i == 0 && b % i == 0) {
      max_value = i
    }
  }
  println("最大公約数は、$max_value")
}

一応、うまく動いたみたいではあるけれど、
回答例を見てると、もっといい書き方があるんだなーと。
勉強になりました。


Powのタイムアウト時間を調整する。

先日のRuby、Ruby on Rails勉強会で仕入れた情報であるPowとPowderを早速使ってみてるのですが、なかなかよいです。特に、Powderは便利。

便利なんですが、Powは操作せずにある程度時間が経過すると自動的にプロセスが終了して、再度アクセスしたときにRailsアプリを起動しようとしてすごい時間がかかります。長考してからプログラム修正して様子を見るためにアクセスしたら長いこと待たされる…というのが今日だけで何度かあったので、これをなんとかしたいなーと思ってググったところ、本家のサイトに書いてありました。

Pow User’s Manual: 3. Configuring Pow

~/.powconfigに以下のような感じで書いてくれとのことです。

export POW_TIMEOUT=3600 # 1時間
export POW_WORKERS=3

設定後は、powder restartしてください。
極端に短い時間に設定してテストをしたところ、次のアクセス時に起動させようとして遅くなっていたので、これであっているかと思います。


岡山Ruby, Ruby on Rails勉強会で発表してきました。

1/26(土)に岡山大学インキュベーターで開催された、岡山Ruby、Ruby on Rails勉強会に参加してきました。

今回は僕は発表者のほうでした。Ruby関連で発表をするのは2度目で、1度目は岡山Ruby会議だったので、約半年ぶりでした。聞くのもいいのですが、やはり発表者側になると、様々な学びがあるので発表してみることを他の方々にもオススメしたいです。勉強会駆動勉強、大事!

当日の様子はToggeterにまとめられてますのでそちらを参考にしてください。

第13回 岡山Ruby, Ruby on Rails勉強会 まとめ #okaruby

発表順は以下の通りでした。

  1. テンプレートエンジン slimの紹介(@patorash)
  2. はじめてのRuby&Railsプログラミング(@rikayu_y)
  3. RailsでPaperclipを使ってAmazon S3に画像を保存する(@aguuu)
  4. Ruby2.0の新機能についての話(@kazuhisa1976)
  5. 関西方面のRubyコミュニティのご紹介(@higaki)
  6. Railsで自己紹介カードを作ってみた(@sutorada)
  7. コンソールアプリでRuby入門(@ore_public)
  8. Powを使ってみた(@gutch_jp)

今回はRubyの最新情報、RailsのTips、経営者視点での話、作ってみた話、開発環境の話、コミュニティーの紹介という、充実した内容で、参加者からも面白かったという意見を頂戴できましたし、僕自身も参加してたくさん勉強になることがありました。岡山に来てから参加した勉強会で、一番充実していたかもしれません。また、参加者も多く、特に初参加の人が多かったのもよかったです。懇親会までは来られなかった人が多かったですが、ぜひとも懇親会にも来ていただきたいなぁと思います。色々と喋ったほうが楽しいですよ!

今回、私が学んだことをメモ的に載せておきます。

  • @gutch_jpさんの発表のPowで、Powderというgemがあるということ。うちらのチームはPowを試したけれど、ログをいちいち自分でtail -fしないといけないのが面倒という理由で使うのをやめていたのだけれど、Powderを使えば、それも簡単にできるし、複数のプロジェクトを起動して作業ができるので、便利だなーと思いました。あとプロジェクトがドメインで区切られるし。
  • @aguuuさんの、画像をAmazon S3に保存するようになった過程がとても参考になりました。スケールアウトを想定すると、Amazon S3に保存するのが一番都合がいいですね。料金はかかるけれど、大した額でもないし…。それにしてもPaperclipは魔法のようなgemですね。
  • @kazuhisa1976さんのRuby2.0の機能の発表で、Module#prependに驚きました。クラスの前にモジュールを差し込むことができるというのはかなり黒魔術ですねー!あと、refineでクラス拡張を限定的に行えるというのも参考になりました。モンキーパッチは怖いですからね…。どんどん進化していますね、Ruby。

他の方々の発表も、とても面白かったです。特に、すーさん(@sutorada)が頑張っていたなぁと思いました。作ってみた内容を発表していくのは、色んな意見も貰えるし、ためになると思います。MBAが余ってる人がいたら、だれかすーさんにあげて!!

最後に、自分が発表した内容のスライドを載せておきます。
テンプレートエンジン slimの紹介です。erb使っててイライラしている人は、slimを使ってみてはいかがでしょうか?その参考になればと思います。


「一生、散らからない部屋」の法則を読んだ


僕はどちらかというと綺麗好きなので、部屋の片付けをちょくちょくするのですが、これをあんまりしなくてもよければ時間がたくさんできていいのになぁとよく考えていたので、この本を読んでみました。一生、散らからない部屋なんてあるのだろうか?定期的に掃除しないと絶対に無理だと思うんだけれども…と思って懐疑的な気持ちで読んだのですが、学びがたくさんありました。

「物の場所を決めろ」

これってできていそうで案外できてないです。片付けといいながら、移動して片付けた気になっているけれど、移動しただけでまたどこかにいってしまったりして、探すのに時間を取られたりするので。どこに何があるのかを決めておくというのが、やはり重要です。

「余っている空間に、何かを入れようとするな!」

これが大きな衝撃でした。余っている空間って、「なんかデッドスペースになっていて勿体ないなー、どうしかして使えないかなー?」と考えてしまうと思うのです。しかし、そこを常に一杯にしてしまうと、新しく来るものを置くべきスペースがない。スペースがないから、変なところに置いてしまって、あぶれたものが見た目にも悪く写ってしまうということでした。空間を有効活用するのが収納だと思っていただけに、本当にショックでした。余裕を持たせておくのも、有効活用なのですね。

「しまうときのことよりも、出すときのことを考えよ」

綺麗にしまえたらいいという訳ではないんですね。出すときの手間を、ステップ数で計算して、それが多いと面倒になるので、出し入れをしなくなってしまって散らかるというのです。たしかに出すときのことも考えてはいましたが、しまうときのことのほうが優先度高くしていたかもしれません。これは逆で考えるべきですね…。

「整頓は細かく区切ること。」

色んなものを一緒に入れるのではなく、区切るようにして入れると、取り出しやすく、また整頓する気にもなれますということでした。確かにー。シャツのたたみ方なども解説されていましたが、とても参考になりました。これは採用したいところ。

「奥行きのある収納スペースの全てを使おうとしないこと」

これ僕自身、めっちゃやってるんですけど、カラーボックスに漫画を収納していて、奥行きが深いので、奥と手前の二段に入れてしまっています。こういうことをやると、出せないし、ステップ数が多くなるし、どこに何があるかわからないからやめたほうがいいよ!ということでした。同じ種類の漫画ならいいかもしれないけれど、違う漫画とかだったらどこにいったかなー?という感じにもなりますよね…。奥行きの浅い本棚を準備するか、減らすかなどしないといけませんねぇ…。

「安物はよくない」

安物はやっぱりしっかりしていないから、例えばたくさんの洋服をかけるとバーがたわんできたりすると。しっかりした作りのものをかわないと、片付けられないよという話でした。これ、カゴ類のことにも言及してあって、例えば100円ショップとかでよくある下にすぼまったカゴとかはよくないという話でした。なぜかというと、上よりも底のほうが面積が小さく、重ねられるようになっているので、モノを置いたときにデッドスペースができやすくてちゃんとしまえないということでした。たしかにすぼまっているため、区切れない。
あと、強度をだすために、上のほうが厚くなっていたりするのも減点だとか。まぁ輸送コストとかを考えたら、これらは仕方ないことなんでしょうけれども、しっかりしたものを使ったほうがいいよということでした。

「同じ大きさのものを使うこと」

食品の保存容器などはなるべく同じ大きさのものに統一することで、冷蔵庫内や食器棚でのデットスペースを減らすことができるとのことでした。色んなサイズのものを使うと、使ってないものを重ね収納できないと。ご飯専用の、とか、考えていたけれど、これはそういうの考慮したほうがいいですねぇ。ある程度は重ね収納を考えていたけれど、統一とまではいってなかったです。

「よく使うものは出しておく」

ステップ数を減らすことで時間が節約できるからという話。例えば、ホッチキスの芯は小さい箱に入ったままだと、

  1. 収納場所からホッチキスの芯の箱を取る
  2. 箱を開ける
  3. ホッチキスの芯を取り出す
  4. 箱を閉める
  5. 収納場所にホッチキスの芯の箱を戻す

という5ステップが必要ですが、出しておけば、

  1. 収納場所の引き出しを引く
  2. ホッチキスの芯を取る
  3. 引き出しを閉める

の3ステップですむということです。たしかにああいう煩わしい系のは、このほうがいいですね。

あとは、物を捨てる極意とかもありましたが、これはよくある話で、決断するだけのことなので(俺はこの壁はある程度超えてるから結構さくっと捨てる)、できない人は読んでみたらいいかもしれませんね。

掃除をすることを目標にするのではなく、掃除する時間を減らすことを目標にしていきたいと思わされました。