Operaでのconsole.log

FirebugsやSafariでログを出力するのにconsole.logを使っていましたが、
どうやらOperaだとエラーになってJSがhungしてしまうようです。
OperaだけJSが動かない!とか思ってたらこれが原因でした。
Operaでログをconsoleに出力するにはどうやったらいいんだろ?
どうせなら同じ関数を使えるようにしてほしいな。

symfonyのアクションでUser_Agentを取得する方法

アクション内で環境変数を取得するには、
sfRequestオブジェクトを使って、

$this->getRequest()->getReferer();

とか(上記はリファラー)でできます。
なのでUser_AgentはgetUserAgentでいけるのかなぁって思ったら
思いっきしエラーorz
まあ正しくは以下のような感じで取得できます。

$this->getRequest()->getHttpHeader('USER_AGENT');

symfony1.2でのカスタムタスク

標準ではtask上でsfContextを使えないので、
executeメソッド内で

sfContext::createInstance($this->configuration);

とかやっていたのですがこのままでは使えない状況が…。

CLIからtaskを実行する分にはこれでいけるのですが、
actionなどからtaskをrunする場合はこれだと

Catchable fatal error: Argument 1 passed to sfContext::createInstance() must be an instance of sfApplicationConfiguration, instance of ProjectConfiguration given

っていうエラーが表示されてしまいます。
ようはエントリポイントのPHPでもう既にcreateInstanceしているからダメということですね。
sfContextのメソッドを調べてみるとhasInstanceというメソッドを発見。
なので上記の一行を

if(!sfContext::hasInstance()) sfContext::createInstance($this->configuration);

に変えてあげると無事エラーは表示されなくなりました!!

こういう情報ってあんまりWeb上にないのでソース読むしかないんですよね。
こういう細かいところで躓くことが多いsymfony1.2なのですが、
情報がやっぱ少ないなぁ…。
sfForm周りとかも。。。
まあ、自分で調べて分かったことはここにボチボチ書いていこうかと思っています。

TextMate command with JSLint

TextMate上でいま開いている.jsファイルをJSLintを使ってsyntax checkしようという話し。
spicermonkeyでJSLintを動かそうとしたけどうまくいかなかったので、
Rhinoのjs.jarを使って動かすようにしました。

まずはRhinoを適当に*1ダウンロードします。

$ wget ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R2.zip |unzip
$ cp rhino1_7R2/js.jar ~/Dropbox/lib

次に以下のサイトを参考にJSLintをダウンロードします。
JSLint and Rhino http://jslint.com/rhino/index.html

$ curl http://jslint.com/rhino/jslint.js > ~/Dropbox/lib

すると以下のようなコマンドで任意の.jsファイルをsyntax checkできるようになります。

$ java -jar ~/Dropbox/lib/js.jar ~/Dropbox/lib/jslint.js myprogram.js

あとはこれをTMCommandにするだけです。
TextMateを開いてBundles->Bundle Editor->Edit Commandsを開きます。
Javascript Bundleの中で+ボタンを押してCommandを追加します。
名前はJSLintとか適当に打ち込んでCommand欄に以下のコマンドを入れます。

java -jar ~/Dropbox/lib/js.jar ~/Dropbox/lib/jslint.js "$TM_FILEPATH"

KeyActivationに適当なショートカットキーを入力(Ctr+Cmd+Lなど)し、
Source Selectorをsource.jsとすると.jsファイルを開いたときだけ、
このコマンドを有効にすることができます。

jQueryなどのライブラリを使っていると、
変なところでエラーになってしまう場合もありますが、
基本的な構文を忘れてしまった場合などは結構使えます。

*1:Dropboxで同期したいのでDropboxディレクトリにコピー