2013/11/19

Rails TextHelperリンク集

ぼちぼち書いていきます。
ビューについて @ railsdoc
もう元祖と言っていいぐらいリファレンスが便利
Rails TextHelperまとめ @ Qiita
excerptなんてのがあるのかw
http://fujishinko.nengu.jp/python/rails_text.html
いろいろ書いてくれてます。
link_to_ifで条件がfalseの時、表示を消す方法 @ IwazerReport
一歩進んだlink_to_if

2013/11/14

Test::Unitに関するリンク集

Railsのテストと言えばRSpecが多いようですが、Rails4標準のMinitestに関するリンク集をまとめて行きます。テストって資産だと思うから、できるだけ標準に沿った形にしたいんですよね。
見る人いるかわかりませんが、初心者(僕)はきちんとfixturesが読まれたかphpMyAdmin等で確認するのが重要だと思いました。
test @ railsdoc
本家
Rails の Test::Unit で setup を定義する 3 つの方法 @ passingloop
setupで共通部分をどうやって書いていけばいいかの指針になりました。
Rake タスクで任意のファイルを複数指定する for Rails Test @ しのぶら!!!
開発中ってテスト項目を選びたいんですよね。
Testの注意点 @ k10i - Rails note
1つのメソッドを選んでテストをしたいときのやり方。開発中ってマジさくっとテスト終わって欲しい...
Rails テストに関する便利だけど見過ごされがちな 2 つの rake タスク @ passingloopの日記
こんなことできんのか。すげー。
Test::Unit::Assertions @ rubydoc
assertいろいろ
テストfixtureの中にerbを書いて動的に生成する @ 日々此妄想
Ruby業界ってこういう黒魔術的なのほんと多いですよねぇ....といいつつ、このDRYは便利いい。使わせて頂こう。
test_helper.rb の setup() とかteardown()とか @ 同じにやっても動かない
共通部分はここに書きましょうって話
RailsでDBからFixtureを作成する @ TechRacho
今はテストデータをfixturesに書いて結果をphpMyAdminで見るという手法を取っていますが、逆もありなんかなぁ。FactoryGirlも気になります。

RSpecに移ることにしました!!情報量が違いすぎる!!

2013/11/06

Unicornに関するリンク集

ようやくRailsでサービスを1個作った。運用するにあたってUnicornの使い方について書いてくださってるところをメモメモ。
次世代Ruby on RailsサーバーUnicorn(汎用のRackアプリケーションサーバ)を使ってみた @ TechRacho
まずはこれから読めばよかった。どうしてUnicornが速いか、必要とされるかがよくわかりました。
Unicorn::Configurator
本家。設定ファイルを書くとき何度も見ます。
[Ruby] Unicorn 概要
シグナルハンドラの解説や切断なしにアプリをアップグレードする方法等、日本語で読みたかったことを書いてくれてます。

2013/09/30

Bacon - ドアホなまでに直感的なテストフレームワーク

久しぶりに愛すべきバカのラベルをつけられますww

Whirl-wind tourを見て吹いたww

でもよく考えたら、RoRも似たようなもんかw

2013/09/29

rails console

RubyやRoRを使って開発をやろうと思った理由はいろいろとあるのですが、小さい理由の一つにrails consoleがあります。Web用に作ったモデルを使ってシームレスにDB接続できるコンソールがあるとか「どんだけ!?」と思っていましたが、rails console -sを知って更に感動。

2013/09/09

Cの高階関数の限界

Cの高階関数の限界 @ itpro

外が見えないことのメリットもある気はするんですが、デメリットのほうが大きいのかな。とりあえず「違いは?」って聞かれたらさくっと口からこれが出るようにしたいw

2013/09/08

Rubyのエンコーディング

Rubyのエンコーディング
綺麗にまとめてくれてます。日本語でとらぶったら見よう。
rubyで㈱などの機種依存文字をUTF-8に変換する
長い間はまっていた問題にようやく気づかさせてくれました。いくつかのライブラリって自動判定でShift_JISって判定してるからうまくいかないんですね。
文字コード表(Unicode UTF-8 UTF-16) @ Pentan
原因究明するときこういうの助かります。

2013/11/03 追記:
見事にとらぶったので追加メモw
UTF-8な文字列の中にSJISな文字列が入っていて、?でreplaceさせようとしたら総崩れしてしまった。いろいろ調べてたけど、ここのやり方でうまくいきました。感謝。

2013/06/28

Rubyプログラムの実行箇所をブラウザで見れるようにしてみた



視覚化ってほんと重要ですね。

とあるプロジェクトで

A「夜中に妖精さんが問題解決してくれて、明日が来たら動いてるってことないっすかねぇ」

B「このプロジェクトには妖精はおらん」

という話があったとかなかったとか。

2013/06/13

2013/04/17

ヘルパーモジュールの読み込み方の違い

ヘルパーモジュールの読み込み方に関しては少し複雑な歴史があります。Rails 1.x の時代には application_helper.rb とコントローラに対応したヘルパーモジュールが読み込まれました。全部読み込みたい場合は application_controller.rb に helper :all と記述する
必要がありました。しかし、Rails 2.x 時代になると、application_controller.rb に初めから helper :all が記載されるようになったため、全部読み込みたくない場合だけプログラマー自身が helper :all を削除することになりました。さらに Rails 3.0 で「全部読み込む」がデフォルトになり、そうしたくない場合に clear_helpers を呼ぶという仕様になったのです。実は、次のバージョン 3.1 でまた仕様が変わる予定です。config/application.rb の中で config.action_controller.include_all_helpers = false のように記述すると「全部読み込まない」という振る舞いになります。
(はじめる!Rails3(2)より)

Railsのモデルのcountとsizeの違い

<% tasks = Task.where(:done => false) %>
<% tasks.each do |t| %>

<%= t.name %>

<% end %>

合計: <%= tasks.size %>

2-4 行でタスクの名称を列挙しているので、該当するレコードデータはすべてアプリケーションに読み込まれています(この状態を「オブジェクトがロードされた」と表現します)。
このとき、tasks.size はデータベースに問い合わせる代わりに、オブジェクトの個数を数えて返します。しかし、ここで tasks.count と書いてしまうと、Rails は再度データベースに問い合わせます。微妙な話ですが、少しだけ無駄なのです(はじめる!Rails3(2)より)。

2013/04/14

パフォーマンス監視サービスのNew Relicが超便利な件

パフォーマンス監視サービスのNew Relicが超便利な件
2013/11/23 追記:

試してみました。笑いが止まらない、あんど、「裏で何やってんだ?」って怖さで凄いです。プルプル震えるレベルww
これ、ActiveRecordを使っているデーモンの生存確認やボトルネックも調査できますね。Railに沿って作ると加速するのを凄く実感。

2013/04/12

ヘルパーメソッドrender

def done
  @tasks = Task.where(:done => true)
  render :index
end
Rails 2.x では、render :action => ’index’ のように記述する必要がありました。Rails 3 でもこの書き方は有効ですが、より簡潔な記述法が導入されたのです(はじめる!Rails3より)。

form_forの前の等号

<%= form_for @task do |form| %>
Railsで2.3までは等号を書くとエラーになりましたが、Rails3.0ではここに等号を書かないとログに警告が出力されます。Rails3.1で等号なしの書き方は廃止される予定です。(はじめる!Rails3より)
はじめる! Rails3(1)

2013/04/11

Aptana Studioを使い倒すためのまとめ

JavaがRubyより開発効率がいいとは言えないと思う。逆も然り。でも、eclipseは間違いなくいいエディタで、Rubyにもそういうものがあったほうがいいに決まってる。なので、Aptana Studio 3を使うことにしました。
そのまとめ集をちょっとずつ書いていこう。

まずステップ実行環境。
gem install ruby-debug-base ruby-debug-ide
を実行した後、ここに習ってtestフォルダにある該当のテストコードを右クリック、Debug AsDebug Configurationsを選択。Interpreter Argumentsに-Itestを入力、Working Directoryをプロジェクトのルートに変更すれば良い。
プロジェクト全体を実行するときは、ルートフォルダを右クリックしてDebug Serverを選択。

後で見るリンク:
http://www.geocities.co.jp/SiliconValley-SanJose/2485/Aptana_guide.html

シェルスクリプトからrubyをキックしてるようなプログラムのデバッグの仕方がわからないなぁ。

追記:
上記はruby1.8.xの場合。1.9以降の場合はいろいろ試行錯誤が必要そう。

2013/04/08

Mongoidを勉強するにあたってのリンク集

mongoid2 を mongoid3 にあげてみた @ sonotsのblog
そうそう。バージョンがあがったときってぐぐってもバッドノウハウしかヒットしなかったりするんですよね。こういうのまとめてくれてると大変ありがたいです。

mongoid 3.0でreferences_manyなどが廃止 @ deadbeef
references_manyって廃止されてるんだ。ひゃー。

2013/03/23

【ニコニコ動画】Ruby C10K challenge: High Performance Networking (1/2) - Ilya Grigorik


今さらながら見てるけど、Non-blocking関連の情報ってなんでこんなに少ないんだ。
WEB/APサーバーをどう実装するか悩むなぁ。

見てて見つけた副産物em-proxy
これテストにいいな!

2013/02/25

論理和・論理積演算子

初めてのRubyより

論理積や論理和はtrue やfalse ではなく、オペランドのいずれかを返します。これはC 言語族の多くとは異なる特徴です。  例えばnil || 50 という式を評価したとしましょう。50 は真でnil は偽ですから、式全体の値は50 となり ます。

初めてのRuby 6.2.3 論理和・論理積演算子 111ページ
まじで!
でもよく考えたら確かにこっちの仕様のほうが応用ききそうですね。それで偽がnilとfalseだけなんですね。


補足:
しっかし、何が偽であるかはlispと同じなのに、論理演算子の戻し値はlispと違うんですね...。
いろんな言語に手を出すと本気でこんがらがって来るなぁ。
Rubyの面白いところ Part 1 「何がfalseと評価されるか」

2013/02/24

Validatable

コンストラクタの中での例外の話し。
この議論の中でValidatableについてリンクが貼られていた。この辺見てて思ったんだけど、型チェックある言語使ったほうがいいんじゃないだろうか...。

2012/03/25 追記:
よくよく考えるとこれいいな。コンストラクタでどうしても例外が発生する可能性がある場合は、例外を握りつぶした後エラーチェックすべきか。でも、エラーチェックを忘れそう...。ムムムム。

2013/02/22

型と自動変換

初めてのRubyより

Rubyは強く型付けされた言語なので、データ型が自動変換されることはほとんどありません。データはいつでも特定のクラスに属しており、演算の最中にいつの間にか他のクラスに属しているということはありません。例えばPerl などとは異なり、1 + "2" という演算は3 を返さずに例外を発生します

初めてのRuby 3.2.5 型と自動変換 67ページ
そういえば静的言語って型がないことでLLに対してかなりダメだしをしますが、promoteのサポートが多いですよね。

2013/02/09

除算

初めてのRubyより

整除の結果は、剰余の符号が除数と同じになるように調整されます。このため、両辺の符号が異なる場合には、除数と商の積は被除数よりも絶対値が大きくなります。

初めてのRuby 3.2.1 除算 49ページ
こういうのって思い出そうとしても思い出せないんっすよねorz

2013/02/08

添字代入の裏側

初めてのRubyより

添字参照式が返す値は、配列が保持している「オブジェクトへの参照」です。「オブジェクトへの参照」に式を 代入するというのは意味が分かりません。

あるいは、長さ付き参照や範囲参照の式ならば「配列の一部の要素を元に新たに作成された配列」を返します。けれども、新規に作成された配列に代入したところで、元の配列が更新されるのは話がおかしいでしょう。

実は、添字代入式は添字参照式とはまったくの別物です。後者はArray#[]メソッドの呼び出しでしたが、前者はArray#[]=メソッドの呼び出しです。両者はできるだけ一貫性を保つように実装されています。けれども、本質的には異なるメソッドなので細かな挙動には違いがあります。例えば、以下のようになります。

初めてのRuby 2.1 添字代入の裏側 33ページ
a = ["a", "b"]
a[-3] #=> nil 範囲外のアクセスに対してはnil を返す
a[-3] = 1 #=> IndexError 例外を発生
こういう挙動の不一致をすぐにあげられるようになりたいなぁ。メモメモ。