2011年9月15日木曜日

Ruby 技術者認定試験 Silver に受かった

86点で合格しました。

ギリギリじゃないので
「ククク ... 奴は白銀聖闘士の中でも最弱 ... 」
ってのは免れましたw

試験の内容は、他の方がレポートしている通りで
公式ガイドと同じか、複合問題?のような感じです。
ガイドより少し難しい問題もあります。

時間は50分くらいで終わりました。
30分でひと通り終わって、そのあとに怪しい問題を回答しましたが
怪しいものが全て間違っている気がしますw
プロメトリックの試験は間違いがわからないので、フィードバックが効かないですよね。

Array , String , Hash に関連する問題が多かったです。
メソッドは、select , detect , collect , map あたり。
アルゴリズムを少しだけ考える問題もありました。

少しだけ引っ掛けというか、
a = [1, 2, 3, 4]
a.slice[1, 2]
p a
とか。
sliceが破壊的メソッドじゃないので変更が無いのですよね。


あとあまり使わない、ファイル open 系から出題がありますが、
モードさえわかっていれば大丈夫です。
いちおう、仕事で Ruby と Rails を利用していますが、意外にも使うメソッドなんかは限られているので、この手のやつは苦手でした。
勉強は、2週間前くらいからダラダラと「たのしいRuby第3版」を読みはじめ、
5日前から「Ruby技術者認定試験 公式ガイド」の問題をやりました。
ガイドの練習問題は、100問あり試験2回分の問題なわけですが、3回ずつやりました。

2回目から答えがわかってしまうのですが、意味はちゃんと調べておくと良いですよね。
基本的に、irb を使ってパラメータを変えたりしてやると良いかと思います。

応用情報技術者試験と簿記試験があるから、終わった12月あたりに gold でも受けてみます。

2011年9月14日水曜日

rails アプリで rake を実行するとエラーになる


某アプリを構築するときに、rake コマンドでDBの構築を行いました。
エラーになって構築できません。

# rake db:create:all
rake aborted!
uninitialized constant Rake::DSL
/usr/local/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing_from_s3_library'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in `'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:6:in `'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:3:in `'
/usr/local/lib/ruby/gems/1.9.1/gems/rdoc-3.9.4/lib/rdoc/task.rb:37:in `'

rake のバージョンが 0.9.2 になって、文法が変わったようで
以下のメッセージが目印になるようです。

uninitialized constant Rake::DSL

バージョンを確認すると、

# ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

# rake --version
rake, version 0.8.7

エラーになった rake は、0.8.7 でした。
強制的に rake のバージョンを 0.9.2 にアップっぷ。

# gem install rake -v=0.9.2

# rake --version
rake, version 0.9.2

そしたら動きました。
逆もまたしかり。0.8.7 用の文法で 0.9.2 で実行すると動かないようです。

2011年9月10日土曜日

Gem install するときに "no such file to load -- zlib" が発生

ubuntu + rvm 環境に限らないとは思うのですが、
以下のように、gem install すると zlib が無いと怒られます。

nakamura@nakamura2:~$ gem install rails -v=3.0.10
ERROR:  Loading command: install (LoadError)
    no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::Commands::InstallCommand

zlib.h が無いからなのかなと勝手に判断して、
nakamura@nakamura2:~$ sudo apt-get install zlib1g-dev

として、もう1度、
nakamura@nakamura2:~$ gem install rails -v=3.0.10
ERROR:  Loading command: install (LoadError)
    no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::Commands::InstallCommand


おー。だめじゃん。
rvm で ruby 1.9.2 をインストールしたきに zlib が無かったから無視されたんかなということで。

nakamura@nakamura2:~$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
nakamura@nakamura2:~$ which ruby
/home/nakamura/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

nakamura@nakamura2:~$ cd ~/.rvm/src/ruby-1.9.2-p290/ext/zlib/
nakamura@nakamura2:~/.rvm/src/ruby-1.9.2-p290/ext/zlib$ ruby extconf.rb 
nakamura@nakamura2:~/.rvm/src/ruby-1.9.2-p290/ext/zlib$ make ; make install


気を取り直して、えいっや。

nakamura@nakamura2:~$ gem install rails -v=3.0.10
Fetching: activesupport-3.0.10.gem (100%)
...

出来た。


2011年9月2日金曜日

bundle install 時に SSL 関係でエラーになってしまう

bundle install をすると以下のように証明書でエラーになってしまう。
CentOS 5.6 を対象とています。


$ bundle install --path vendor/bundler
Fetching https://github.com/mislav/will_paginate.git
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/mislav/will_paginate.git/info/refs

fatal: HTTP request failed
Git error: command `git clone 'https://github.com/mislav/will_paginate.git' "/opt/xxx/vendor/bundler/ruby/1.9.1/cache/bundler/git/will_paginate-bfaeaccc8af94c369b0e2f1626f08b0c9a3a03f1" --bare --no-hardlinks` in directory /opt/xxx has failed.

あんまりよく無い気がするが以下のコマンドで無視するように設定。
$ git config --global http.sslVerify false

2011/9/12 追記
『2011年5月末以降、github.comにはEV SSL証明書(DigiCert HighAssurance EV CA-1)が使われるようになった。』ということらしく証明書の追加をします。

まず、『DigiCert Trusted Root Authority Certificates』から、『DigiCert High Assurance EV Root CA』をダウンロードします。ダウンロードしたファイル名は『DigiCertHighAssuranceEVRootCA.crt』。これをcurl-ca-bundle.crtに追加します。

# wget -P /tmp https://www.digicert.com/testroot/DigiCertHighAssuranceEVRootCA.crt

# cat /tmp/DigiCertHighAssuranceEVRootCA.crt >> /etc/pki/tls/certs/ca-bundle.crt

証明書の場所はOSやディストリビューションによって違うので、こんな感じで探します。
$ locate libcurl.so
...
$ strings /usr/lib/libcurl.so.3 | grep bundle
/etc/pki/tls/certs/ca-bundle.crt