| @技術/プログラミング

初期データをマイグレーションでRailsアプリケーションにぶっ込んでみた。後からいちいち手入力するのめんどいし、マイグレーションでデータをロードしとけば、本番環境でうごかすときも rake db:migrate で初期データは入るはずだから楽ちんかなと思って。

結果的には無事データをロード出来たんだけど、YAMLの書式が分かってなくて、結局丸一日時間を費やしてしまった。大したデータ量じゃなかったから下手するとちまちま手入力するのと変わらないくらい時間かかったかも。

hoge: #アイテムの名前
  id: 1
  name: "hoge"
  address: "ホゲ県ホゲ村ホゲホゲ"

fuga:
  id: 2
  name: "fuga"
  address: "ホゲ県ホゲ村フガフガ"

とかやんなきゃいけなかったんだけど、YAMLの書き方が分かってなくて、

hoge:
  id: 1
  name: "hoge"
  address: "ホゲ県ホゲ村ホゲホゲ"

  id: 2
  name: "fuga"
  address: "ホゲ県ホゲ村フガフガ"

とか書いてた。どっちも hoge県 に分類されるんでこんなんでいいだろ、みたいなノリ。しかしこれはやっぱり文書の構造がおかしい。これをロードしてみると、 id=2 のものしかロードされなかった。

結局、拾ってきた コードを参考にして

require 'yaml'
require 'pp'

data = YAML.load_file('hoge.yml')
pp data

みたいなやつを書いて、読み込まれる配列の構造を確認しながらYAMLを書いたところうまくいった。

| @映画/ドラマ/テレビ

ブルーノ

評価 : ★☆☆☆☆

あらすじ

ブルーノはオーストリア人ファッションレポーターのゲイで、ヨーロッパのファッションショーを荒らして目立とうとしてた。しかしあらゆる会場でトラブルを引き起こし、ヨーロッパに居場所が無くなってしまった。こうなったらハリウッドに移ってセレブになろうとアメリカに渡のだが…。

感想

ボラット』のサシャ・バロン・コーエンの映画。『ボラット』が痛快だったので期待して見に行ったんだけど残念な出来だった。

そもそも映画のテンポが悪い。ぐだぐだしてる。はっきりとしたストーリーらしいものがあるわけではなく、あちこちをドタバタしながら行ったり来たりする。結構疲れる。

しかしポイントポイントでは笑えるネタが用意されている。占い師のところにいってブルーノ(サシャ・バロン・コーエン)がエアフェラチオをするシーン(過剰にリアル)とか、パレスチナに行ってユダヤ人とパレスチナ人の仲を取り持とうとするところとか(「お互いを殺しあうのはやめて〜殺すならキリスト教徒〜」みたいな歌を歌う)、アフリカの子どもを養子にもらってアメリカに戻り、黒人が沢山住んでる地域のトーク番組に出るんだけど、そこで子どもをiPodと取り替えっこしてきたとか言うシーン、こういうのはいちいち毒が効いていて面白い。平和を呼びかけるのはU2のボノとかまねで、アフリカの子どもを養子にもらうのはアンジェリーナ・ジョリーのまね。セレブのまねをしてたら自分もセレブになれるだろうという魂胆。強烈な風刺ですよね。

エンディングもなかなか秀逸で、セレブのそっくりさんたちが沢山出てくる。スティングとかColdplayのクリス・マーティンとかかなり本人そっくりで最初本物が出てるのかと思った。

ただ、欧米ネタ中心だし、ゲイネタもきついので特殊な完成の持ち主にしか受けないと思う。熊本のDenkikanは一週間、一日の上映一回のスケジュールでしか上映しなかったけど妥当な判断だったと思います。

ちなみにブルーノを演じてるのがサシャ・バロン・コーエン本人だってのはエンドロールまで気がつかなかった。劇中ではドイツ語の台詞もしゃべるし(オーストリア人という設定なので)、アメリカではドイツ語なまり風の英語を話す( with の代わりに mit を使うとかね)。さすがケンブリッジ卒、細かいところまでこだわる。

| @技術/プログラミング

RailsアプリケーションでMarkdownを使いたと思った。(Markdown大好きっ子なので)

調べてみたところ、 BlueCloth というライブラリを使うといいらしい。

これはRailsのプラグインではないのでgemでインストール。

$ sudo gem install bluecloth

その後viewで

<%= markdwon(@item.text) %>

とか書けばいい。

しかしなんも設定しない状態だとRailsアプリケーションはBlueClothを読み込まないので、config/environment.rb

config.gem "bluecloth"

と書いてやる。するとめでたくMarkdownが使えるようになる。

| @技術/プログラミング

XREAでRailsを使おうと思っていろいろ調べてみた。Railsは rake rails:freeze:gems してアップロードすればオッケーらしいんだけど、RubyGemsはインストールしないといけないみたい。ところがネットに乗ってる情報を参考にインストールしてみたけど全然うまくいかなかった。指示通りにやってるんだけどパスが通らないのか、インストールしても 'rubygemsをrequireできねーぞゴラ!' みたいなエラーが出る。

.profile で記述した GEM_HOMERUBY_LIB のパスは間違ってないと思うんだけど、何回やっても $HOME/lib/ 直下にRubyGems系のファイルが展開されてしまう。これがエラーの原因っぽい。しょうがないので力業で guantlet_rubygems.rb, rbconfig/ rubygems/ rubygems.rb, ubygems.rb$HOME/lib/ruby/site_ruby/1.8 に移動させた。その後 source ~/.profile して適当な場所で gem -v してみたところ、ちゃんと 1.3.5 と表示された。

蛇足だけど最初、RubyGems 1.3.7をインストールしようとしたら、利用予定地のサーバーのRubyのバージョンが1.8.5なためにインストールできなかった。そういうわけでRubyGemsは1.3.5を入れた。

あとRubyGemsが入ったからといってシェルで gem install rails とかやってもプロセスを kill されるっぽいのでよい子のみなさんは必要な gem は自分のパソコンでインストールしてからアップロードした方がよさげです。

| @技術/プログラミング

CakePHPで作ってたプロジェクトのDBのフィールド名にスペルミスを発見したので( longitudelongtitude としていた)、それを修正するためにDBの構造をいじった。このとき、Cakeは普通にやってたらSchemaとかの概念に触れる機会がないことに気がついて急に怖くなった(ここんとこRailsばっかり触っていたので)。いや、CakePHPにもSchemaの概念はあるんだけど、普通にサイト作るだけだったら世話になる機会がない。というか俺がCakeの底本にしてた公式ガイドにSchemaの項目がない!

これじゃあgitとかでバージョン管理しててもDBの論理構造が置いてけぼりになって、分散管理とかできないじゃん。SQLite使ってたらバイナリファイルをgitでtrackすればまぁ分散開発でけそうだけど、MySQLとかだったら死ぬよね。

確かにCakePHPでサイト作るのは楽だったし早かった。ほぼ何もできない状態の自分が数ヶ月でCMS作れたのはCakePHPのおかげなんだけど、CakePHPは何でもテケトーな感じがする。対してRailsは厳格だ。楽するためのフレームワークというより、よりStrictにサイトを構築するためのフレームワークという感じがする。だから慣れるまでは時間がかかる面があるのは否めないんだけど、SchemaにしろTestにしろ、Railsやってて勉強になることはたくさんあります。はやく皆と同じようにrailsの手術を受けたい。

| @技術/プログラミング

このブログのCMSをMephistoからjekyllに変えてみた。

Mephistoは公式サイトつながらないし、Mephisto使ってた外国のGeek連中がここ一年くらいでこぞってJekyllに移行してるみたいなのでこのビッグウェーブに乗ってみた。

Jekyll = 静的CMS

しばらくJekyllの使い方が分からなくて格闘してたけど、やっと使い方が分かった。これは静的なCMSであって動的なCMSではない。Movable Typeに似てる。それをGeekなスタイルでやる感じ。

Rubyが入ってるサーバーはいらない

コメント機能とかはないのでサーバーでRubyが動く必要はナッシング。DBも使わないのでMySQLの設定とかSQL分との格闘も必要ナッシング。コメント欄が欲しい場合は DISQUS とかに外注すればOK。

ちょっと話題がずれるけど、DISQUSって便利そうですよね。他人のブログにコメント書いたあとってそのコントロール権みたいのはブログの持ち主に移行するけど、DISQUSみたいなサービスを利用すればコメントを書いた本人が過去の自分のコメントをトラックしやすくなる。ブログ主にしたってスパム対策とかもやりやすくなる。自前で自分のブログにコメント欄を持つって時代は終わったのかもね。いまはTwitterとかもあるし。

Mephistoからの移行について

Jekyllのgithubのwikiに移行方法が載っけてあるけど(Blog Migrations - jekyll - GitHub)、これわかりにくい。というかMephistoをMySQLで運用してないとスクリプトをそのまんまでは利用できない。結果から書くと僕はMephistoはSQLite3で運用してたので移行スクリプトを使えなかった。

一応MephistoのDBをSQLite3からMySQLに変更してコンバートすることも試してみたけど、DreamHost上では gem install mysqlplussudo 権限がないために実行できず(なぜかユーザーディレクトリへのインストールもはねられる)、ローカルのMacBook上ではActiveRecordとかその辺でエラーが出て(MephistoはRails 2.2.2以下じゃないと動かないみたい)、Railsのバージョンを下げるとかも試してみたんだけどエラーが出続けるので諦めてしまった。

そういうわけでして、記事数が16本と少なかったこともあり、ちまちま手書きでMephistoからJekyllに移行しました。

コメント欄の設置(DISQUSを利用)とかフィードの生成とかカテゴリーの表示とかができてないけど、暇を見つけていじっていく予定です。

全般的なJekyllの使用感

DBいらずだしシンプルでいいっすわ。XML-RPCとかAPIを使ってどうのこうのとかいった機能はないけど、テキストファイルをしこしこ書いて、 .markdown か .textile みたいな拡張子で保存して、 jekyll コマンドを実行するだけでhtmlファイルが _site ディレクトリに生成されて、これをアップロードするだけ。この手順を自動化するシェルスクリプト(tasks/deploy at master from henrik's henrik.nyh.se - GitHub)も公開されているので、これを使えばectoとか使うのと変わらん感じでお手軽にブログ記事を投稿できます。

Terminalからコマンドライン打つの好きな人とか、軽くてシンプルなブログを求めてる人にはうってつけだと思いますね。

| @技術/プログラミング

ポータルシットに前も書いたけど、CakePHPの命名規約ではDBにusersというテーブルがあれば、モデルクラスにUser、コントローラークラスにUsersController、viewsディレクトリにusersっていうのが存在するのを前提とする。これに慣れてしまっているので、Railsのやり方にはなんか慣れない。ModelでPeople、コントローラーでUsersControllerとしてても問題ナッシングなわけだ。むしろRailsではこういうのが普通? Rails使っててCakeをちょこっと触った人のブログにこういう感想があった。

コントロールとモデルが密すぎる。

CakePHPは、コントロール名とモデル名が密接すぎる関連を持っています。PostsControllerというコントロールを作ったら、必ずPostというモデルが存在しないと「モデルが見つからないエラー」になる。

Blog-side CakePHP わかりずらい3点

ふむふむ〜、ナルホディウスですぞ〜!!!

確かにCakePHPはモデルとコントローラーがガチガチになってて、あるコントローラーが他のモデルクラスにアクセスするときはいちいち

$use = array("Hoge");

とかしなきゃいけなかった。

最初の頃はモデル、コントローラー、ビューですべてが一対一に対応してるのですんなりMVCの流れを理解できたんだけど、今にしても思えばこういう考え方はすべてのコントローラーに対応するモデル(つまりDBテーブル)がなければならないというしがらみというか束縛を生じさせる。これでは自由な発想で開発できないし、下手をすると一つのコントローラークラスに大量にメソッドを書いてしまったりして、非常にメンテナンス性の良くないコードを量産してしまう公算がある。本当は機能ごとに細かくクラスは分けた方がいいはずだし、メソッドが一つしかないコントローラークラスがあっても良いはずだ。

そういうわけで、はやくこの辺のCake流の思い込みを排除して皆と同じようにrailsの手術を受けたいです。