2011-07-28
isset(), empty()と__isset(), ___get()の覚書
PHP 5.3.6
<?php class Hoge { private $v = 1; public function __isset($v) { echo "called __isset()\n"; return isset($this->v); } public function __get($v) { echo "called __get()\n"; return $this->v; } } $hoge = new Hoge; if ($hoge->moge) { echo "returned true\n"; } echo "\n"; if (!$hoge->moge) { echo "returned true\n"; } echo "\n"; if (isset($hoge->moge)) { echo "returned true\n"; } echo "\n"; if (empty($hoge->moge)) { echo "returned true\n"; }
実行結果
# ($hoge->moge) called __get() returned true # (!$hoge->moge) called __get() # (isset($hoge->moge)) called __isset() returned true # (empty($hoge->moge)) called __isset() called __get()
empty()は__isset()が真かつ__get()が空の場合にのみtrueを返す。
前者二つは__isset()を完全にぶっとばして__get()をコールするため、__isset()が未定義の場合は、意図しない動作をする場合があるかもしんないねというメモ。
2011-05-16
gem1.8のGem::Specificationワーニングを抑制する
rvm環境に入れておいたgemをgem update --systemやらrubygems_updateを使って1.8.2にバージョンを上げた。
ところが、ひとたびgemコマンドを使うと以下のようなメッセージが大量に出力されるようになってしまった。大変だ!Rubygemsはクソだ!
$ gem -v NOTE: Gem::Specification#default_executable= is deprecated with no replacement. It will be removed on or after 2011-10-01. Gem::Specification#default_executable= called from /home/gen/.rvm/gems/ruby-1.9.2-p180@global/specifications/rake-0.8.7.gemspec:10. NOTE: Gem::Specification#default_executable= is deprecated with no replacement. It will be removed on or after 2011-10-01. Gem::Specification#default_executable= called from /home/gen/.rvm/gems/ruby-1.9.2-p180/specifications/rake-0.8.7.gemspec:10. NOTE: Gem::Specification#default_executable= is deprecated with no replacement. It will be removed on or after 2011-10-01. Gem::Specification#default_executable= called from /home/gen/.rvm/gems/ruby-1.9.2-p180/specifications/rubygems-update-1.8.2.gemspec:11. 1.8.2
Googleというとても便利なサービスを使ってこの問題を検索した所、これはgem開発者向けのメッセージであると判明した。
つまりわたくしのようなデベロッパのボトムズには特に関係のない話だったのだけれど、エラーともつかないメッセージが出っぱなしという状況はどうにも精神衛生上よろしくないというか、不快で困る。なんてこった!Rubygemsはクソだ!
かといってdeprecate.rbを編集しコードを変更しろという解決策には恐れ多く、また修正を覚えておくのも面倒なので、以下の記事を参考にした。
https://github.com/rspec/rspec-core/issues/345
http://blog.zenspider.com/2011/05/rubygems-18-is-coming.html
これらによると、以下のコマンドで問題は解決する。
$ gem pristine --all --no-extensions
rvm環境下で上記がだめだった時は、いっそgemを再インストールしてみるといいようだ。
$ rvm rubygems current
2011-04-20
sakura vpsにubuntuとrvmをインストールする
aptからrubyをインストール
$ sudo apt-get install ruby rubygems ri
いやー本当にaptっていいもんですねぇ。
rvmをインストール
$ sudo gem install rvm ... (省略) ... Successfully installed rvm-1.6.3 1 gem installed Installing ri documentation for rvm-1.6.3... Installing RDoc documentation for rvm-1.6.3... Could not find main page README.txt Could not find main page README.txt Could not find main page README.txt Could not find main page README.txt
なんぞrdocでエラーが出た。糞か。
$ sudo gem install rubygems-update WARNING: Installing to ~/.gem since /var/lib/gems/1.8 and /var/lib/gems/1.8/bin aren't both writable. WARNING: You don't have /home/gen/.gem/ruby/1.8/bin in your PATH, gem executables will not run. Successfully installed rubygems-update-1.7.2 1 gem installed Installing ri documentation for rubygems-update-1.7.2... Installing RDoc documentation for rubygems-update-1.7.2... $ sudo ~/.gem/ruby/1.8/bin/update_rubygems $ gem -v 1.7.2
まだCould not find main page README.txtのエラーは出る。ファックか。
見た感じRdocで躓いているようなのでrdoc-dataを入れる事とする。
$ sudo apt-get install rdoc-data $ sudo rdoc-data --install
これでapt-get install rvmが正常に通った。大変清清しい。
rvmのセットアップ
インストール画面の指示に従い以下を実行する。
$ sudo apt-get install git curl $ bash < <(curl -s -B https://rvm.beginrescueend.com/install/rvm)
rvmにパスを通すため、.bashrcに以下を追加し、更新する。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
$ source .bashrc
以上でrvmが使用可能になりました。めでたし。
2011-04-01
うそです、のAAがかわいい
∧_∧ _∧
+ (* ´∀`)´∀`)
n/ \n \n
(((ヨ ) ノ\E) ノ\E)))
(_⌒ヽ ⌒ヽ
ヽ ヘ } ヘ }
ε≡Ξ ノノ `Jノ `J
2011-02-25
node.jsやべー
やべー!!!!!
