2016年2月29日 (月)

[Rails] Rails というか ActiveRecord というか Arel で SQL の case

いろいろ調べてみたが、Rails 5 beta3 でもまだ駄目だった。

<https://github.com/rails/arel/pull/400>

が arel にマージされているので近い将来には、arel を使えば、SQL の case に相当するものを arel を使って書けると思われる。

Rails 5 beta3 でインストールされるのは、arel-7.0.0 だったが、これには 残念ながら、含まれていなかった。

なので、普通に case を文字列で渡してやるしかない。

scope :sel_case_col1, -> { select( "case when col1 = 'AAA' then 'aaa' else col1 end as col1" ) }

| | コメント (0) | トラックバック (0)

2016年1月 9日 (土)

iPod nano が充電できなくなった

充電式の掃除機が駄目になったのに続いて、iPod nano も充電ができなくなってしまった。 買い替えるかなあ。

| | コメント (0) | トラックバック (0)

ssh の known_hosts

このknown_hostsの話が何か唐突で、何のことだろうかと思っていたのだが、そういうことだったのかとようやくわかった。 正月明けから風邪で体調が悪くて、ci.ruby-lang.org は、ずっとアクセスしていなかった(他のRuby関連の情報もちゃんと見てなかった)ので気づかなかった。 私は、素直に、-R オプションを使った。

| | コメント (0) | トラックバック (0)

2015年12月29日 (火)

掃除機を買った

今までコードレスの充電式の掃除機を使っていたのだが、寿命がきたのか、充電できなくなってしまった。 だましだまし使っていたのだが、さすがに限界がきたみたい。 この際だから、新しいのに買い替えることにした。 今までの使い方から考えると持ち運びが楽であれば、充電式でなくてもいいと考えて、充電式じゃない掃除機で一番軽いのを家電量販店で選択。

| | コメント (0) | トラックバック (0)

2015年12月26日 (土)

[Ruby] Ruby 2.3.0

Ruby 2.3.0 がリリース。[ruby-list:50266]

毎回、感心するのだが、このリリースにすぐに追随してくれるrbenv(ruby-build)がすごい。

$ rbenv install -l | grep \ 2.[234]
2.2.0-dev
2.2.0-preview1
2.2.0-preview2
2.2.0-rc1
2.2.0
2.2.1
2.2.2
2.2.3
2.2.4
2.3.0-dev
2.3.0-preview1
2.3.0-preview2
2.3.0
2.4.0-dev

ということで、

$ rbenv install 2.3.0; rbenv install 2.3.0-dev; rbenv install 2.4.0-dev

| | コメント (0) | トラックバック (0)

2015年12月12日 (土)

[Ruby] RubyKaigi 2015(2日目)

今日も参加するかどうか迷ったのだけど、少しは体力が回復していたのと、 Sutouさんの話 が聞きたかったのと 全く参加しないのも寂しいので、ちょっとだけでも参加しようと思って会場に向かった。

完全に1コマ目には遅刻したのだが、Sutouさんの話を聞くことができた。やっぱり面白い。後で、Sutouさんを掴まえてRSpecについてどう思っているか質問してみたかったのだが、結局掴まえることができなかった。

続けてTurbo Rails with Rustの話を聞いたのだけど、驚くほどに完璧に英語が頭に入ってこないのが衝撃だった。やっぱり疲れていたらしい。

午後をそのまま聞き続ける自信がなかったので、お昼のタイミングで退散した。

自宅に戻って休んだあと、Youtubeで Pragmatic Testing of Ruby Coreを視聴。ということでテストで始まりテストに終わった1日だった。

以下、ちょっと個人的に懐しく、いろいろ思い出したので記憶を頼りに書いてみる(残念ながら当時のメールも記録も残っていないので記憶違いがあるかも知れない)。思い出すきっかけをくださったSutouさんに感謝。

RubyUnitが初登場したのは、多分 [ruby-list:17335]。

で、この投稿にあるURLはどちらも既に存在しない。現存するのは、RubyUnitのページ 、 私の友人が書いたTesting Frameworkの解説というのは、石井君が書いたKent Beck Testing Framework 入門 のことである。

当時、RubyUnit は、このTesting Frameworkの解説にあるJUnitのソースコードを参考にしながら実装した。 ただし、そっくりそのまま移植した訳ではなく、Rubyのメタプログラミングの機能も使って、より簡潔にテストを書けるようにした。 そのRubyUnitのコードを石井君に見せたときにRubyってこんなこと(メタプログラミング)ができるのかと驚かれたのを覚えている(もっとも、当時のJavaにもReflection の機能があったはずで、同じようなことはJavaでも実装しようとすればできたはず)。

また、メソッド名などもJUnitそのままではなくRubyっぽく修正した。 Unit Testing Framework のコンセプトの1つにプログラミング言語を使ってテストコードも書けるというのがあった。なので、Sutouさんの話に、RubyUnitを使ったテストのコードがRubyっぽいのも当たり前といえば当たり前である。

石井君とは、その後、京都のPerl/Ruby Conferenceで一緒に講演することになった。 今では到底考えられないことであるが、まつもとさんのRuby Keynoteの真裏のコマになっていた。 観客が数人だったら喋るのをやめて、まつもとさんのキーノートを聞きに行きましょうと観客に交渉しようかと冗談半分で石井君と話したりした。

幸いなことに講演には、それなりに人数が集まってくれ、その中の一人、ごとけんさんにRuby自身のテストをRubyUnitで書くというのはどうでしょう?と聞かれた。 既にDave Thomas と Andy Hunt がRubyの本(後に「ピッケル本」と呼ばれるようになる本)を執筆中で、Rubyの挙動が執筆中に変わっていないか確認するためにRubyUnitを使ってRubyをテストしていると返事をした。 RubyUnit には、実行した assertion の数と成功したassertionの数を表示するという機能があった。これは、元々のJUnitにはなかった機能で、Rubyの本を執筆中のDaveとAndyからのリクエストによって実装した機能だった。

RubyUnitを作ったのは私だけど、最初のきっかけをくれたのは石井君だし、RubyUnitならではの機能が実装されたのは、Andy や Dave のおかげである。RubyUnitをネタにして本を書くこともできたし、その後、それをネタにして日本初のLigtning Talksに登壇する機会も与えてもらった。

Sutouさんの話に Lapidary は、Rubyっぽくないという話があったが、あれは、Lapidary が SUnit(元祖xUnit であるSmallTalkのTesting Framework)をベースに実装されていたからである。 内部の実装もAPIもSUnitを意識したものになっていたと思う。 実は、Lapidary の作者には、RubyUnit が Testing Framework っぽくないと喧嘩を売られ指摘されたことがある。JUnitをベースにしているので、SUnitとは違っていたのは当然なのだけど。あと、Shibataさんの話にもあったけどRubyUnit自身のテストがないことも指摘された。

Lapidary の作者がRuby標準のTesting Framework を実装するという話になったときに、やりたい人にやってもらうのが一番なので、Lapidaryの作者にすべてお任せすることにした。 ただし、1つだけ私が主張したのは、RubyUnitで書かれたテストが既にあるから、必ず既存のテストも動作するように互換性は保ってくれということだった。 私の拙い英語が本当に伝わったのかどうか良くわからないが、互換性は保たれていたようだった。

なんか取りとめのない話になってしまった。まあ、RubyUnitそのものは使われなくなったけれど、私にとっては、いろいろ思い出深いライブラリなのだった。

| | コメント (0) | トラックバック (0)

[Ruby] Rubykaigi 2015(1日目)

一旦会社に出てから参加できれば参加するつもりだったんだけど、体調がすぐれず、疲れていたため欠席。 仕事は、朝すぐに片づいたのだけど、結局、会場に行かずに家に帰って寝た。 起きたのは夕方。Youtubeでライブ配信しているのを知り、アクセスしたら、最後の1コマのカップとボールの手品のスクリプトが紹介されているところだった。

| | コメント (0) | トラックバック (0)

2015年11月23日 (月)

[Ruby][Rails] ActiveAdmin と select_tag と select

ActiveAdminのAction Item でドロップダウンリストを作ろうとして select_tag を使ってみたが、どうやってもドロップダウンリストが表示できない。 試行錯誤して、結局 select_tag を使うのをやめて、select を使ってみたらやっと表示できた。 select は良くて、select_tag が駄目な理由が良くわからない。

なんか、Rubyでコード書いていると適当に直感で書いてもちゃんと動いてくれて、そこが気持ちいいのだけど、 Railsといろんなgemを組み合わせてコードを書いているとその気持ち良さが感じられないなあ。

コード1行あたりの生産性は高いんだけど、そのコード1行に辿り着くまでに時間がかかっている感じだ。

| | コメント (0) | トラックバック (0)

2015年10月31日 (土)

[Book] Practical Vim Second Edition

Second Editionが出ました。

first edition を読んだときに、基本的な vim 以外の plugin は使わない方針で解説するというスタイルが良いと思ったが 今回も同じかな。

first edition の電子書籍をPragmatic Bookshelfで買っていたので 無料で購入できた。なんて太っ腹。

second edition は、7.4 対応。でももうすぐ7.5が出るんじゃないかと思ったりして。

| | コメント (0) | トラックバック (0)

2015年10月24日 (土)

[Soft] docker

docker というものがどういうものか良くわからなかったので、ちょっと試してみた。

Vagrant のUbuntuを用意して、dockerをインストールした。

docker のインストールには、cookbook を利用した。

とりあえず docker をインストールだけすることにしたので、recipe はこんな感じ。

docker_service 'default' do
  version '1.8.3'
  action [:create]
end

試しに書いた Dockerfile は、こんなの。

FROM ubuntu:latest
RUN apt-get update -y && apt-get install -y ruby-build git
RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.rbenv_bashrc
RUN echo 'eval "$(rbenv init -)"' >> ~/.rbenv_bashrc
RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
RUN . ~/.rbenv_bashrc && rbenv install 2.2.3 && rbenv rehash && rbenv global 2.2.3
CMD . ~/.rbenv_bashrc && irb

本当は、ruby のbuildに必要なパッケージを1つ1つ指定した方がいいのかも知れないが 今回は手抜きで、一旦、ruby-build パッケージを apt でインストールして buildに必要なパッケージがまるっとインストールされるようにした。 で、最新版の rbenv と ruby_build を取ってきて、Ruby 2.2.3 をインストールする。 実行するのは、irb コマンド。

$ sudo docker build -t my_ruby:2.2.3 .
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
my_ruby             2.2.3               d9bdbc8040f7        25 minutes ago      502.3 MB
$ sudo docker run -it d9bdbc8040f7
irb(main):001:0> RUBY_VERSION
=> "2.2.3"

動いた。

ruby の Dockerイメージはきっとあるだろうけど、docker が何者か知るために自分でDockerイメージを作ってみた。

| | コメント (0) | トラックバック (0)

«[Soft] tmux 2.1