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

RailsでOAuthを使ってTwitterとかで認証させたい。oauth-pluginを使おうとしてるけど全然うまくいかない。イメージとしてはこんな感じ。

OAuthの利用イメージ

疑問点がいくつかある。

  • Userモデルで validate_presence_of をパスワードフィールドにかけてるけど、OAuth経由でユーザーが追加されたときはどうすればいいんだろう。OAuth経由ではパスワードは預からないので、 validate_presence_of でエラーが出るはず。

  • Userモデルで has_many :oauth_tokens とかリレーションの設定をしてしまったとして、OAuth経由ではなく普通にサインアップしたユーザーの扱いはどうなるんだろう? 「 oauth_tokens にそんな user_id の人いないし」みたいなエラーが出るような気がする。

他にもいろいろ気になる点があったような気がするけど分からなくなってしまった。

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

CakePHPで動かしているサイトをCakePHP 1.2ベースからCakePHP 1.3ベースに変更作業中。その課程で気がついたことをメモしておきます。

  1. $html->link() などHTMLヘルパーでエスケープを false にしたいときは $options['escape'] を使う。
  2. $cakeDebug は廃止されたのでエラーが出る。
  3. $sessions->flash()echo $sessions->flash() とする必要がある。また AppController でヘルパーとして呼び出さなければならない。
  4. debug_kit は github から最新版を git clone する。

参照:

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

FreeBSDでVimを起動しファイルを編集したあと、 :q でVimを終了させてるのに元のコンソールに戻らなくてなんか嫌だなーと思っていた。MacもUbuntuもDreamHostのDebianもVimを閉じると元に戻るのに、職場の本番環境のFreeBSDだけこれなの。ファイル編集前のコンソールの履歴とかを見たいこともあるので、Vimが終了したら元の画面に戻るようにしたいと随分長いこと思っていたんだけど、たったいまようやく出来たのでメモっときます。

ちなみにVimには restorescreen とかいうオプションがあるらしく、必死で.vimrcにこの設定を書いてたけど、これはなんかWindowsのVim専用のオプションらしいのでマカーやUNIXユーザーの方はこれを設定しても無駄です。

情報元は フルスクリーンアプリを終了したときに元のコンソールの状態に復元する - 技術メモ帳 というページ。

FreeBSDの場合、 /etc/termcap ってのの中にフルスクリーンアプリを終了したときにコンソールに戻るかどうかを設定する場所があって、こいつを変更すればよいらしい。

しかし自分はこのサーバーでroot権限を持ってない。なので cp /etc/termcap ~/.termcap したあと chmod 644 ~/.termcap して vim ~/.termcap し、自分の使ってるターミナルの環境に合わせて設定を変更してやるとOK。

僕の場合はMacの純正ターミナルを、シェルはzshで使っている。 echo $TERM してみると xterm-color と表示されるのでxterm-colorの設定が書いてあるところをいじった。

くわしくは上のリンク先を見てもらうといいんだけど、とにかく te ってのと ti ってのがあって、これをMacの場合は te=E7E[?47hti=E[2JE[?47lE としてあげればいい。そんでシェルの設定ファイルに export $TERMPATH=$HOME/.termcap と書いてやり、一端ログアウトして再ログインするとめでたくVimを終了したときにコンソールが復元されるようになります。

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

『RailsによるアジャイルWebアプリケーション開発 第三版』をまだちまちま読んでる。いまActiveRecordのリレーションシップのところ。全然分からなくて全然進まない。もうRails 3.0が出そうだというのに。またろくすっぽ技術書を読まないうちに化石になっちゃいそうだよ。バカはつらいよ。

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

初期データをマイグレーションで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を書いたところうまくいった。

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

「PHPは汚い、Rubyはきれい」とかそういう言説の意味が昔は分からなかったんだけど、昨日今日、久々にCakePHPで作ったサイトのメンテナンスをしてて「PHP、確かにきちゃないわ」と思った。

オブジェクト指向っぽい何がしかのコードをPHPで書いてみる。

<?php
class Hoge {
  var $a; 
  function hoge() {
    return $this->a = "hogehoge";
  }
}

$fuga = new Hoge();
echo $fuga->hoge();
?>

つぎにRubyで同じコードを書いてみる。

class Hoge
  @a  
  def hoge
    @a = "hogehoge"
  end
end

fuga = Hoge.new
puts fuga.hoge

まずPHPは中括弧たくさん書かないといけない。これが面倒くさい。中括弧はキーボードでは shift + [ とか shift + ] とかだから、 shift の分だけキーボードをたたく回数が増える。実にめんどい。最初はRubyのインデントでブロックを表現するところに慣れなかったけど、慣れたらちまちま中括弧をかかないとダメなPHPにいらいらするようになった。中括弧の閉じ忘れでエラーが出ることとかも多いし。

さらにメソッドとか変数へのアクセスもめんどい。Rubyだと . でアクセスできるのに、PHPだと -> だ。入力するときはキーボードに -shift + . と打たなきゃいけない。アホか。Rubyだとキーを一個打つので済むのが、PHPだと三個だ。

他にも予約語が長いとか、変数のスコープがおかしいんじゃねとか、Rubyを触る前は分からなかったPHPの変態的なところが目につくようになってきた。

PHPちゃん、僕もう疲れたよ(特にCakePHPの配列地獄)。

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

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

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

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

$ sudo gem install bluecloth

その後viewで

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

とか書けばいい。

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

config.gem "bluecloth"

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