Ruby on Rails 3 アプリケーションプログラミングを購入

はじめるRails3の写経も一段落したので、何かいいRails本ないかと思って調べてたら、これが評判よかったので買ってみた。
会社で買った人も多いみたい。Amazonの評価がやたら良かった。

↓の本と迷ったけど、難しそうだったので今回は見送り。↑の本を無事クリアできたら、次は挑戦しよう。
RailsによるアジャイルWebアプリケーション開発 第4版 | オーム社eStore(β)

はじめるRails3の写経、2週目が大体完了

(プログラムの方の)写経の話。

はじめるRails3(1)(2)の写経、二週目が大体終わった。
一周目では( ゚д゚)ってなってたところが少しだけ分かったりして大変楽しい。

二週目は演習問題で用意されてた「書籍管理アプリケーション」を作った。
はじめるRailsの本編で作るのは「タスク管理アプリケーション」で、その仕組をちょっと変えて「書籍管理アプリケーション」を作る、というのが演習問題で用意されている。

演習問題は答えが用意されてないので、管理するものを「タスク」から「書籍」に置き換えながら作る必要があって、ただ写経するだけの一周目よりも格段に意味がわかった。

とくにエラーが発生した場合に、答えのソースコードがないのでエラーメッセージから原因を調べたり、少し前のバージョンに戻してみて正常に動いてた時との違いを調べたりと、試行錯誤したのがよかったかもしれない。

これが写経ではなくてコピペでやってたら、エラーが出た時点ですぐに挫折してたと思うんだよなー。
エラー画面に負けない気持ちが生まれたのもちょっとは成長した証か。

さて、三週目に突入するか、他の本に手を伸ばすか。

リファクタリングできたと思ってコミットしたら、動かなくなってた。
と思って、git revert を試してみたらエラー出る。
うーむ、git reset で元に戻してみるもうまく動かない。

ということは、以前から動いてなかった?

思い切って随分前の状態に戻してみるか。
しっくりしない感じで一日が終わりそう。

ううむ。

—-

■追記

動いた。
やっぱり書きなおしたコードがおかしかった。
@がついてなくて期待したデータが取れてなかったというオチ・・・。
はーー、原因がわかってすっきりしたけど、HP削られた。

minibufexpl.vim をインストールした

今日参加した技術者ランチで教えてもらった「minibufexpl.vim」をインストールしたのでメモ。
vimのバッファをタブ風に切り替えるプラグインだそうです。

minibufexplをインストール

http://www.vimpusher.com/plugins/290

.vimrcに以下を追記して:BundleInstall

Bundle 'thinca/vim-quickrun'

さらに、.vimrcにキーバインドの設定

"minibufexpl
let g:miniBufExplMapWindowNavVim=1   "hjklで移動
let g:miniBufExplSplitBelow=0        " Put new window above
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1
let g:miniBufExplSplitToEdge=1
nnoremap <C-d>    : bd<CR>      " バッファを閉じる
nmap <Space>      : MBEbn<CR>   " 次のバッファ
nmap <C-n>        : MBEbn<CR>   " 次のバッファ
nmap <C-p>        : MBEbp<CR>   " 前のバッファ

インストール後

画面の上の方に開いてるバッファ一覧が表示されるようになって、スペースキーで簡単に切り替えができる。
いやー、便利便利。

@lamanotramaありがとうございます!

vimプラグインのQuick-runが便利

プログラムの実行結果をvimの画面内で確認できるQuick-runっていうプラグインをインストールした。
プログラムの編集画面と実行画面を行き来する必要がなくなってとても便利。

インストール方法

http://www.vimpusher.com/plugins/45

.vimrcに以下を追記して:BundleInstall

Bundle 'thinca/vim-quickrun'

Quick-runをインストールすると

  1. ターミナルの画面でプログラムを書く
  2. :QuickRun(もしくは\r)で実行
  3. 画面が分割されて実行結果が表示される
  4. 結果を確認したら、q で分割した画面を閉じる

てな感じで、

  • 画面を切り替えずに結果が確認できる
  • :wで保存しなくても結果が確認できる

書いては試し、書いては試し、というときに大変便利。

<leader>rって何?

:QuickRunもしくは、<leader>rで起動」と説明に書いてあったんだけど、<leader>rって何だろう。

と思って、調べてみたらバックスラッシュ()のことだった。
JIS配列のキーボードだと¥なのかな。

いやー、便利便利。

プログラムの力でブログの更新を楽にする

ブログを毎日更新しはじめて78日。
ブログを日々書いててめんどくさいのが、各サービスや知り合いのtwitterにリンクを貼ること。

  • リンクはる作業は大変だるい
  • リンク貼り間違えたら目も当てられない

ということでrubyでプログラム書いてみることにした、という話です。

プログラムの概要

blog.txtの中身を読み込んで、指定したキーワードがあれば、リンクを張った文字列に置換して出力する。

プログラムの名前はautolink.rb。

プログラムの中身(抜粋)

# -*- encoding: UTF-8 -*-

#ブログの下書きを読み込む
f = open('blog.txt')
str = f.read

#リンク貼りたいキーワードと変換後の文字列をここに書いていく
str = str.gsub('ペパボ','<a href="http://paperboy.co.jp">ペパボ</a>')
str = str.gsub('JUGEM','<a href="http://jugem.jp">JUGEM</a>')
str = str.gsub('30days Album','<a href="http://30d.jp">30days Album</a>')
str = str.gsub('ザ・インタビューズ','<a href="http://theinterviews.jp">ザ・インタビューズ</a>')
str = str.gsub('ケンタロさん','<a href="https://twitter.com/#!/kentarow">ケンタロさん</a>')

#出力
print str

オリジナルはGitHubで公開してますので、失笑してください(しないでください)。
autolink.rb at cc98ee9092d004b1668836ea749562097124f5c1 from pplog/misc – GitHub

とまあ、プログラムといったものの、gsubで文字列を置換していってるだけだし、プログラムっぽいループとかしてないし、書き方があまりにもイケてないことは自分が見てもわかるけど、他の書き方よくわからないし・・・。

別の書き方を模索する

うごけば正義!と思ってやってきたけど、もっと綺麗に書きたい・・・。

ということで別の書き方を模索します。
キーワードと置き換え後の文字列を配列にして、それをループしてごにょごにょすればいけるはず。

Vimpusherのコラボレータになりました

@banyanが作ってるVimpusherのコラボレータにしてもらいました。
デザインとかお手伝いする予定です。
以下、開発環境のセットアップメモ。

とりあえず git clone

$ git clone git@github.com:banyan/Vimpusher.git vimpusher

とりあえず bundle install

mysqlが何とかかんとかで怒られた

Gem files will remain installed in /Users/pplog/Vimpusher/vendor/bundler/ruby/1.9.1/gems/mysql2-0.3.11 for inspection.
Results logged to /Users/pplog/Vimpusher/vendor/bundler/ruby/1.9.1/gems/mysql2-0.3.11/ext/mysql2/gem_make.out
An error occured while installing mysql2 (0.3.11), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.11'` succeeds before bundling.

そういえばずっとsqliteでやってきたので、MySQLインストールしてなかった。

MySQL インストール

$ brew install mysql
$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
$ sudo vi /etc/my.cnf

新規で作成した my.cnf に以下を書く

[mysqld]
socket  = /tmp/mysql.sock
character-set-server = utf8
innodb_file_per_table
max_allowed_packet=64M

[mysql]
auto-rehash
default-character-set = utf8

[client]
port   = 3306
socket = /tmp/mysql.sock
default-character-set = utf8

Mac 起動時に MySQL が起ち上がるようにする

$ mkdir -p ~/Library/LaunchAgents
$ cp /usr/local/Cellar/mysql/5.5.19/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

バージョン(5.5.19)はインストールした時期でかわるだろうから要確認で。

mkdir -p の -p って、

引き数に指定した各々の directory で、存在しない親ディレクトリも含めて作成する。

ということらしい。勉強になった。

起動しているかどうかは以下で確認

$ ps aux | grep mysql

あらためてbundle install

$ bundle install --path vendor/bundler

powもインストール

$ brew install pow

powder インストール(1)

$ gem install powder

で、そのあと

$ rbenv rehash
$ powder link
Pow is not installed.

怒られる。

powderインストール(2)

$ powder install

こっちをやったら、うまくいった。

$ rbenv rehash
$ powder link
Your application is now available at http://vimpusher.dev/

resque のインストール

$ gem install resque

redisのインストール

$ brew install redis

インストール完了後に表示される手順に沿って、redisが起動しておくようにする

$ mkdir -p ~/Library/LaunchAgents
$ cp /usr/local/Cellar/redis/2.4.6/homebrew.mxcl.redis.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

起動してるかどうかの確認

$ ps aux | grep redis

今日やったのはここまで。また明日。

画像をアップロードできるアプリケーションに挑戦したけどできませんでした。

Railsで画像をアップロードできる簡単なアプリケーションを作りたいと思い、適当にググってみたけど挫折したという話です。
大抵うまくいかないときの方が学ぶこと多いからね。記録しとこ。

ということで、この記事を最後まで読んでも何もできません。

MacでImageMagickとRMagickをインストールする – アインシュタインの電話番号☎
という記事を見て、画像を扱ったアプリケーションを作ってみたいなー、と思い立った。

思い立ったが吉日という言葉がありますように、後先考えずやってみる。

ImageMagick のインストール

$ brew install imagemagick

しばらく待ったら完了。便利な世の中になりましたね。

RMagick のインストール

$ gem install rmagick --no-rdoc --no-ri

完了。いやー便利n(ry

さあ、つくるぞー

Rails3での画像アップロードの実装(ImageMagick + Rmagick + file_column) – hogehoge foobar Blog Style5

こちらを参考に作ってみる。

画像を扱う、file_column というプラグインがあるらしくそれをインストール。

$ rails plugin install git://github.com/tekin/file_column.git

ひと通り写経した後、サーバーを立ち上げてファイルをアップロードしてみるも、サーバーが停止してしまう。
エラーメッセージをググってみると、プラグインのファイルを少し修正するといい、みたいな記事がひっかかったのでやってみるもダメ。

file_column はもう古いの?

いくつかのサイトを回っていたら、file_columnよりもよさげなプラグインがあるみたい。

ということで、今の自分の手に負えないエラーで停止してしまうfile_columnを追いかけるのは諦めて、CarrierWaveを試してみることにします(これから)。

今日はプログラムの勉強と読書で一日が終わった。

RVMからrbenv+ruby-buildに乗り換えた

昨日からGitHubでドットファイルを管理するようになって、MBPはrbenv、MBAはRVMというめんどくさいことになってしまってたのでrbenv+ruby-buildで統一することにした。

最初にRVMをアンインストール

$ rvm implode

さようならRVM・・・

brewでrbenvとruby-buildをインストール

さ、次いくよー。気持ち切り替えていこー。

$ brew update
$ brew install rbenv
$ brew install ruby-build

.bash_profileにrbenvの設定を追記して、RVMの設定はコメントアウト(消してもいいか)

eval "$(rbenv init -)"
# if [[ -s $HOME/.rvm/scripts/rvm ]] ; then source $HOME/.rvm/scripts/rvm ; fi$

.bash_profileの変更内容

よくわからないけどこれも実行。

$ eval "$(rbenv init -)"

rubyのインストール

$ rbenv install

ってやるとインストールできるrubyのバージョン一覧がでてくるので、1.9.2-p290をインストールしようとすると

$ rbenv install 1.9.2-p290

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:

rubyがインストールできない

問題発生。

Xcode4.2にするとRubyがインストール出来ない、っていうやつにはまってみた – KUROIGAMEN(黒い画面)

↑これが原因だったので、ここからGCCをダウンロードしてインストールした。

こんな画面が出て、GCCのインストール完了。

$ rbenv install 1.9.2-p290

今度は無事インストールできた。
完了したら、インストールしたrubyを使うように設定する。

$ rbenv global 1.9.2-p290
$ ruby -v 
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0]

rails ないよって怒られる

参考書見ながら作ってる pooklog/ でいつも通り rails sとかrails c とかしてもrails ないよと言われる。
RVM削除したから、なくなったってことかな。

$ gem install bundler
$ rbenv rehash
$ bundle install --path vendor/bundler #pathを指定しておくと他のやつと衝突しないのでおすすめだと教えてもらった。

.gitignoreに /vendor/bundler/ を追加しておく。

.gitignoreの変更内容

railsのインストール(バージョン指定)

今見てる参考書が 3.0系なので3.0.10をインストール。

$ gem install rails -v 3.0.10

これでおっけーかな。いつもどおりの手順でサーバー立ち上がった。

終わり!

dotfilesをGitHubで管理するようにした

  • 「これやったら世界変わるから」って@banyanに勧められたので、ドットファイル系をGitHubにpushした!
  • 会社のMBPと私物のMBAでドットファイルを共有できるようになった!
  • vundleもgitの?submoduleの?・・・なんかいい感じに管理できるようになった!
  • これをやったらカラフルになった!
  • iTerm2をインストールした
  • brew intall wgetした!
    • githubのコードをrawで表示して、そのURLをwgetするとらくちんだった!
  • cd ~ ってやんなくても cd でホームディレクトリに戻れることも知った。
  • source .vimrc ってやったらエラー出るんだけど、あんまり気にしない。新しいタブを開けばOK。

ターミナル力がかなりアップした気がする!
頭から湯気出そうなので、今日はもう帰る!