Xcode4をvimのキーバインドで!
XcodeをVimのキーバインドで操作できないかな・・・とか,思っていたら神出現!
Vimのキーバインドにしてくれるプラグインがありました.
Nothing But Programming - Software
インストール
XVim_lite.zipをダウンロードします.
『$(HOME)/Library/Application Support/Developer/Shared/Xcode/Plug-ins』の下にzipファイルを移動させて,解凍します.
(Plug-insディレクトリがない場合は作ってください)
Xcodeが起動している場合は,再起動してください.
これで,Vimのキーバインドで操作できるようになりました!
まだ,使える機能は少ないですが・・・無意識にh,j,k,lで移動しようとか,:wで保存しようとして「プギャー!」となってしまったり・・・「なんでVimのキーバインドじゃないんだ!」と不満を持っている人にはとてもお勧めできます.
Pryのインストール
irbと同様にREPL環境を提供してくれるものにPryがあります.
なにやら,Ruby界では人気が出ているようで・・・早速インストールです.
pryのインストール
pryはgemからインストールできます.
pry-docというドキュメントともついでにインストールしてしまいましょう.
$ gem install pry pry-doc
使い方
$ pry [1] pry(main)>
irbと同じように使えます.
結果が色付きだったり,irbではできないこともできるみたいです.
詳しくは,Rubyistよ、irbを捨ててPryを使おう - TIM Labsを参考にしてみてください.
rbenvのインストール
なにやら,rvmよりも扱いやすいrubyのバージョン管理ツール『rbenv』なるものがあるようです.
ちょっとインストールしてみました.
環境
- Mac OS X 10.7.2 Lion
- Homebrew 0.8.1
rvmのアンインストール
rvmと競合するおそれがあるみたいなので,サクっとアンインストールします.
$ rvm implode
アンインストールが終わったら,.bashrcや.zshrcに書かれている設定を消してください.
私は,.rvmrcも残っていたので,それも削除しました.
rbenv のインストール
rbenvのインストールです.
Homebrewからインストールできるようです.
ruby-buildも必要みたいなので一緒にインストールして下さい.
$ brew install rbenv $ brew install ruby-build
パスを通す
このままでは,rbenvというコマンドが使えないのでパスを通します.
使っているシェルの設定ファイル(.bashrcや.zshrcなど)に下記を追加します.
export PATH=$HOME/.rbenv/bin:$PATH eval "$(rbenv init -)"
source では設定が反映されないみたいなので,ターミナルを再起動してください.
- rbenvでRubyをインストール
rbenv install をしようとしたらgccがないと怒られました.
Lionさんからgccを扱わなくなったためですね,
$ rbenv install 1.9.0-p0 ERROR: This package must be compiled with GCC, and we couldn't find a suitable `gcc' binary on your system. Please install GCC and try again. As of version 4.2, Xcode is LLVM-only and no longer includes GCC. You can install GCC with these binary packages on Mac OS X: https://github.com/kennethreitz/osx-gcc-installer/downloads BUILD FAILED
メッセージに書いてあるとおり,
https://github.com/kennethreitz/osx-gcc-installer/downloads からGCCのパッケージをダウンロードして,インストールしてください.
再度,インストールとデフォルト指定します.
$ rbenv install 1.9.3-p0 $ rbenv global 1.9.3-p0 $ rbenv rehash
確認
$ which ruby
/Users/ユーザ名/.rbenv/shims/ruby
となっていれば上手く設定ができてます.
さて,rvmと比べてどうだろうか?
Drag & Drop UpTeX で文字化け
Drag & Drop UpTeX を使って,PDFファイルを作ったら文字化けが!!
はい,オプション忘れていました.(3時間ぐらい悩んだんですよね)
$ platex xxx.tex $ dvips -Phira xxx.dvi $ ps2pdf xxx.ps
dvipsを使うときは -Phira オプションの付け忘れに気をつけましょう.
演算子の優先度と副作用について
C言語はかなり長い間お付き合いをしているが,演算子の優先度と副作用あたらりがどうやら怪しいらしい.
ポインタ並に難しいのではないかと思う,今日この頃です.
とりあえず,簡単に自分的まとめ
演算子の優先度
演算子 | 結合規則 |
---|---|
() [] -> . ++ --(後置) | 左から右 |
! ~ ++ --(前置) + -(符号) * &(アドレス) (type) sizeof | 右から左 |
* / % | 左から右 |
+ - | 左から右 |
<< >> | 左から右 |
< <= > >= | 左から右 |
== != | 左から右 |
& | 左から右 |
^ | 左から右 |
| | 左から右 |
&& | 左から右 |
|| | 左から右 |
? : | 右から左 |
= += -= *= /= %= &= ^= |= <<= >>= | 右から左 |
, | 左から右 |
この表は覚えておいて損はないのですが・・・一つ疑問.
後置演算子が優先度高いってどういうことなんだ?
int i = 0,sum; sum = i++;
とかあった場合,どの段階でiの値が増加するかと言うと,;が来る前までに増加します.
つまり,sumには増加するまえのiの値が入り,その後にiが1増えるという.
・・・なんか表を見てると納得いかない.
ちなみに前置演算子の場合は
int i=0, sum; sum = ++i;
だと,iの値が増加してからsumに代入されます.
これは,納得なんですよね.
だって,前置演算子の方が表を見る限りでは優先度が高いですからね.
これはどうなるのでしょうか?
int i = 0, a[3]; a[i] = i++;
私の環境では,a[0]にiの値が入ってから,iが1増加しました.
ちなみに,コンパイラによって動作は変わります.
つまり,iの値が増加してから,a[1]に値が入る場合があるかもしれないということです.
前置・後置演算子は副作用を発生させやすいのです.(う〜ん,難しくなってきた)
次の場合のsumの値はどうなるのでしょうか?
int sum, i =0; sum = ++i * ++i * ++i;
私の環境では,「12」でした.
おそらく,左と真ん中の「++i」が1づつ増えてから掛け合わされて,右の「++i」が1増えてから左と掛け合わされたものかと・・・.(何言ってるのかさっぱりになってきた)
ちなみに,これもコンパイラによって結果が変わります.
今まで演算子の優先順位と副作用についてかるーく説明しましたが,ここで重要なポイント!
優先順位と結合規則によって式の意味はきまります.
しかし,どういう順番で計算されるかは,わかりません!!
なんじゃそりゃ!!!
優先順位と結合規則はあくまで「目安」であって,計算はその値になるように適当にやられてるっぽいです.
(ある意味すごいのかも?)
・・・C言語恐るべし
rails s で「WARN TCPServer Error: Address already in use - bind(2)」エラー
Rails サーバを起動しようとしたらエラーがでました。
こんな感じです。
$ rails s => Booting WEBrick => Rails 3.1.3 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2012-01-12 13:49:02] INFO WEBrick 1.3.1 [2012-01-12 13:49:02] INFO ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0] [2012-01-12 13:49:02] WARN TCPServer Error: Address already in use - bind(2) Exiting /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/utils.rb:85:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE) from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/utils.rb:85:in `new' from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/utils.rb:85:in `block in create_listeners' from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/utils.rb:82:in `each' from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/utils.rb:82:in `create_listeners' from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:82:in `listen' from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:70:in `initialize' from /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:45:in `initialize' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.5/lib/rack/handler/webrick.rb:10:in `new' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.5/lib/rack/handler/webrick.rb:10:in `run' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.3.5/lib/rack/server.rb:265:in `start' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/commands/server.rb:70:in `start' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/commands.rb:54:in `block in <top (required)>' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/commands.rb:49:in `tap' from /Users/shiori/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.1.3/lib/rails/commands.rb:49:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>'
これの原因なのですが、どこかでWEBrickを使用していたりすることが原因みたいです。
自分の場合は、Rubyサーバが動いていたことが原因でした。
・・・起動した覚えがないんだけどな。
プロセス確認は次のようにしてみましょう。
$ lsof -i:3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 2181 shiori 9u IPv4 0x11ba7338 0t0 TCP *:hbci (LISTEN)
WEBrickだと、Ruby関係が多いので次でも確認ができます。
$ ps -af | grep ruby 501 2181 2111 0 2:02PM ttys001 0:03.27 /Users/shiori/.rvm/rubies/ruby-1.9.3-p0/bin/ruby script/rails s
プロセスをkillしてあげれば問題なく動きます。
kill -9 2181
JavaScriptの基本
http://dotinstall.com/でJavaScriptの基本を学習し終わりました。
MindNodeを使ってまとめてみました。
こんな感じで、巨大になってしまいました。
覚え書きには調度良いね。