2011年7月29日金曜日

gem dependenciesのバージョンの見方

~> というちょっと変わった記号を見かけることがありますが、
これは何なの?ということで下記のサイトを教えてもらい、以下に抜粋しました。
http://stackoverflow.com/questions/3492772/gem-dependencies-versions-meaning
Specification From ・・・ To (exclusive)
">= 3.0"     3.0    ・・・ ∞
"~> 3.0"     3.0    ・・・ 4.0
"~> 3.0.0"   3.0.0  ・・・ 3.1
"~> 3.5"     3.5    ・・・ 4.0
"~> 3.5.0"   3.5.0 ・・・ 3.6


~>を検索で引っ掛けるのも難しいですよね…
ちなみにこの記号の読み方は下記のRubyGemsのマニュアルより、
「approximately greater than」だそうです。
http://docs.rubygems.org/read/chapter/16
"tilda greater than" でなんとかこちらのサイトがひっかかりました。

2011年7月26日火曜日

proxy経由のwget

proxy経由でwgetする場合、Ubuntuでは下記の設定を行います。

% sudo vi /etc/wgetrc

そのファイルにて、下記を追加します。

# httpのサイトから取得
http_proxy = http://10.20.30.40:8000/

# httpsのサイトから取得
https_proxy = http://10.20.30.40:8000/

2011年7月20日水曜日

svn switch コマンド

SVNのコマンド "svn switch" と "svn switch --relocate" の扱いで
ちょっとハマったのでメモ。

◆svn swtich
作業コピーが同じリポジトリ内の違うディレクトリに変更する場合に利用します。
例えば、trunkからbranchへ参照を変更する場合です。

※ 引数は変更先を指定

例) https://10.10.10.10/trunk/aaa/bbb から https://10.10.10.10/branch/aaa/bbb にしたい場合
正しい利用
% svn switch https://10.10.10.10/branch/aaa/bbb 

間違った利用①
% svn switch --relocate https://10.10.10.10/trunk/aaa/bbb https://10.10.10.10/branch/aaa/bbb
svn: Relocate can only change the repository part of an URL

間違った利用②
% svn switch https://10.10.10.10/trunk/aaa/bbb https://10.10.10.10/branch/aaa/bbb
svn: 'https://10.10.10.10/branch/aaa/bbb' is not a working copy

◆svn swith --relocate
作業コピーが異なるリポジトリに変更する場合に利用します。
例えば、リポジトリサーバーのIPが変わった時に利用します。

※ 引数は現状と変更先の2つを指定します。
例) https://10.10.10.10/trunk/aaa/bbb から https://1.2.3.4./trunk/aaa/bbb にしたい場合
% svn switch --relocate https://10.10.10.10/trunk/aaa/bbb https://10.10.10.10/branch/aaa/bbb
svn: Relocate can only change the repository part of an URL

2011年7月19日火曜日

第9回 AWS User Group - Japan 東京勉強会

女子枠で参加してきました♪
AWSはまだ使い始めたばかりなので、あまり濃い話は書けないし、
他の皆さんが書いているので、自分向けのメモとして、
気になったトピックについて一言二言。

◆fluxflex
RedmineやWordpressをあっというまにAWS上に構築してくれるらしい

◆zmanda
クラウドバックアップをする企業だそうです。
US本社はSunnyvaleにあります。
今度行ってみたいな~

◆教育機関でのAWS利用
チューニンガソンでAWSを用いたとのこと。
→たしかに一時的なイベントではAWSは便利!
AWSは、ITスクールでも用いることができる

◆飛行石
話題の飛行石が見れた!
ドライアイスを使うと、緑色のレーザーが見えてすごい!
Google SketchUpというアプリで設計してるらしい?

◆常連枠2つ
・Amazonが提供しているサービスの名称から通信プロトコルが分かるそうです。
→サービスを全部知らない私には…(^^;
・大石さんの「アフター7パスポート!」には笑った

2011年7月14日木曜日

Redmineプラグインの設定・管理画面ラベル名の日本語化

Redmineでは、日本語なら、{プラグイン}/config/locales/ja.yml以下に
ラベル名等を記載していますが、設定画面のモジュールタブの所や、
権限の所はどうやって日本語にすれば良いのでしょうか?
と、いろいろ調べていたら、下記のように書けばできました。

・設定画面のモジュール部
project_module_xxx のように "project_module_"をprefixにつける。

・権限部
permission_view_yyy のように、"permission_"をprefixにつける。

init.rbにある下記部分からの命名のようです。
project_module :xxx do
    permission :view_yyy, {:zzz => [:update]}
  end

2011年7月13日水曜日

空チェック(empty? と blank?)について

変数等の中身をチェックする際に、
Rubyでは、プログラムの処理によっては、empty? と nil? の両方をチェックすることがあります。
例えば、nil?の可能性があるものに対して、empty?チェックだけを行うと下記のエラーが出ますよね。

> a = nil
> a.empty?
NoMethodError: undefined method `empty?' for nil:NilClass


Railsでは、両方をまとめてチェックしてくれる便利な blank? があります。
ただし、Rails以外で利用するには、モジュールを require する必要があります。

irbで実行するとこんな感じです。

> require 'rubygems'
> require 'active_support'
>
> a = nil
> b = ""
> c = []
>
> a.blank?
=> true
> b.blank?
=> true
> c.blank?
=> true

ちなみにrequireしなかった場合はこんなエラーになります。
> a.blank?
NoMethodError: undefined method `blank?' for nil:NilClass
> b.blank?
NoMethodError: undefined method `blank?' for "":String

なお、Rails2とRails3ではRequireするモジュールが異なるようなので、ご注意ください。
上記はRails2の例です。
Rails3はまだ入れていないので確認できていません…。

2011年7月12日火曜日

Railsのバリデーションチェック

モデルに書くバリデーションチェックのifオプションの記述方法では、
下記のような2通りの書き方ができます。
どちらも同じ動作をします。

①Procオブジェクトを利用
 
validates_numericality_of :value, :only_integer => true, :if => Proc.new { |p| p.name == "xxx"}
 

②メソッド切り出し
この時のメソッド名には「?」マークをつけるのは決まりのようです。
 
validates_numericality_of :value, :only_integer => true, :if => :is_num?

def is_num?
"xxx" == name
end
 

2011年7月7日木曜日

Railsのチェックボックスタグ

railsのチェックボックスタグ

railsのタグでよく迷うのが、
check_box と check_box_tag というような タグ名に"_tag" ありかどうか。

今回ハマったことは、
check_box_tag タグを用いた際に、チェックボックスにチェックが入ってないと
パラメータとして送信されないので、paramsの中に含まれなず、
コントローラ側の受け取りでparamsにあるかどうかチェックしたりしなくてはならないこと。

でも、check_box タグを使うとラクにできます。
こんなふうにかくと、単一の送信チェックボックスを作った場合。

<%= check_box("post","send",{:checked=>@xxx == "1"})%>

こんなふうに解釈されるのです。
チェックなし
<input id="post_send" name="post[send]" type="checkbox" value="1" />
<input name="post[send]" type="hidden" value="0" />
   
チェックあり
<input id="post_send" name="post[send]" type="checkbox" value="1" checked="checked" />
<input name="post[send]" type="hidden" value="0" />

もし、check_box_tag タグを使う場合は、hidden_field_tag タグと併用すると良いそうです。
参考: http://d.hatena.ne.jp/bottleneck/20070927/1190872024

2011年7月6日水曜日

Rubyのクォーテーションの扱い

サンプルコードでシングルクォーテーションとダブルクォーテーションが
混ざってる場合に、どう使い分ければ良いのだろう?と思った時、
下記を考えると、ダブルクォーテーションのほうが扱いやすいな、と思いました。

ダブルクォーテーションは#{}の式展開や特殊文字(\n、\t等)を
解釈してくれますが、シングルクォーテーションは、文字列として扱われます。

以下、サンプルです。
◆シングルクォーテーションの場合
> foo = "abc123"
> puts 'foo'
foo
> puts '#{foo}'
#{foo}

> puts 'a\n\tb'
a\n\tb

◆ダブルクォーテーションの場合
> foo = "abc123"
> puts "foo"
foo
> puts "#{foo}"
abc123

> puts "a\n\tb"
a
        b