2010/09/06

Closure Linter で日本語読点を認識させる

プログラムを書く際に lint は非常に役立つツールです。

今まで JavaScript を書く際には JSLintを使っていましたが、開発の都合でClosure Linterへ乗り換えてみました。

Closure Linterは機能豊富なツールで、例えば JSDoc の行末が読点で終わっていない場合などに警告を出してくれます。ただ、残念ながら日本語の読点(「。」)を読点として認識してくれません。

他の方の対応を探してみましたが、うまく見つけられなかった為、既に多くの方々が作られているであろうことを承知で、インチキ1行パッチを置いておきます。Python Script の文字コードと、JSファイルの文字コードが UTF-8 であることを仮定しています。public domainです。

本当はスクリプトファイルの言語情報を認識するなどすれば素敵なのでしょうが、私はPythonが苦手なので当面これで凌ごうと思います。

--- closure_linter-2.2.4-ORIG/closure_linter/ecmalintrules.py
+++ closure_linter-2.2.4-ja/closure_linter/ecmalintrules.py
@@ -535,7 +535,7 @@
               end_string = htmlutil.StripTags(end_token.string).rstrip()
 
           if not (end_string.endswith('.') or end_string.endswith('?') or
-              end_string.endswith('!')):
+              end_string.endswith('!') or end_string.endswith('。')):
             # Find the position for the missing punctuation, inside of any html
             # tags.
             end_position = None

HTTP 経由の git push で lock エラーへ対処する

プロジェクトでHTTP 経由の gitを使っています。

生憎サーバのディスクが壊れてしまったので、OSのアップデートを
含め入れ替えを行ったのですが、それ以後、git push で lock エ
ラーが発生するようになってしまいました。
% git push
error: cannot lock existing info/refs
fatal: git-http-push failed
パーミション問題かな、と該当 repos にある info/refs のパーミションを確認しましたが、問題ないようです。
# ls -la
total 64
drwxr-xr-x  2 www  admin  16384 Jul 15 16:52 ./
drwxr-xr-x  7 www  admin  16384 Jul 15 16:42 ../
-rw-r--r--  1 www  admin    240 Jul 15 16:42 exclude
-rw-r--r--  1 www  admin    175 Sep  3 07:43 refs
ヒントは httpd-error.log    にありました。エラー発生時のログを見てみると以下のメッセージが書かれていました。
[Fri Sep 03 07:39:53 2010] [error] [client 137.153.67.138] Could not LOCK /scm/git/p/foo.git/info/refs due to a failed precondition (e.g. other locks).  [500, #0]
[Fri Sep 03 07:39:53 2010] [error] [client 137.153.67.138] The locks could not be queried for verification against a possible "If:" header. [500, #0]
[Fri Sep 03 07:39:53 2010] [error] [client 137.153.67.138] Could not open the lock database.  [500, #400]
[Fri Sep 03 07:39:53 2010] [error] [client 137.153.67.138] (13)Permission denied: Could not open property database.  [500, #1]
「info/refs を lock したかったが、他の lock など、その前提条件で失敗した」と読めます。なるほど、WebDav 自体の lock が怪しそうです。私は WebServer に Apache を使っていますので、該当する設定ファイルを確認してみました。
# cd /usr/local/etc/apache22/extra
# grep -i lock httpd-dav.conf
# on the directory where the DavLockDB is placed and on any directory where
DavLockDB "/usr/local/var/DavLock"
# ls -ld /usr/local/var/
drwxr-xr-x  3 root  admin  512 Sep  3 07:43 /usr/local/var/
実際 httpd が書き込めないパーミションになっていることがわかりました。OS再インストール時に確認を怠ったようです。このパーミションを正しくする、または、DavLockDB ディレクティブのパスを適切に変更すれば問題解決です。

なお DavLockDB へ指定するのはロックデータベースへのフルパスであり、ディレクトリではありません。書き込み権限などを確認する場合には、ロックファイルの書き込まれるディレクトリへ注目しましょう。

私はディレクティブへディレクトリを指定するものだと勘違いし、自分で掘ったディレクトリのパーミションへばかり気を取られ、しばらくはまってしまいました。なお、設定後には、Apacheの再起動が必要になります。

HTTP 経由の git push で lock エラーになってしまった場合には、repos のパーミションだけではなく、WebDAV の設定も確認してみると良いと思います。

2010/08/13

Google Chrome 拡張「Search Date Changer」をバージョンアップしました

今年の3月頃に公開しました「Search Date Changer」(またはSDC)を更新し、バージョン1.5.0として公開しました。


SDCはGoogleの検索結果の対象範囲日付をクリック一つで変更できるGoogle Chrome拡張です。例えば、特定の話題に対して全体の状況を俯瞰した上で、今度は最新の話題だけを知りたい、などといった場合に、気軽に活用出来ます。

例えばGoogleで「iPhone」を検索すると、普通では「期間指定なし」の検索結果として、過去全てのiPhoneに関する話題を一瞥することが出来ます。ここで、OmniBox(またはURLバー)へ表示されたSDCのアイコンをクリックすることにより、「最新」や「1週間以内」といったコンテンツの更新日時を限定した検索結果へ順番に切り替えることができます。例えば、この記事を書いている時点では、iOS のPDF脆弱性が対策された新ファームの話題が数多く表示され、この話題がiPhoneに関する旬な話題であることが分かりました。

この「検索結果期間指定機能」は、Google の検索結果ページから選択できるのですが、残念ながら「その他のツール」内へ隠れてしまっていることが多く、また辿りつくまでに複数回クリックする必要があるため、是非このSDCを通じて便利さを知ってもらえれば、と思っています。

今回のバージョンアップでは、Web検索結果に加えて、Googleニュースや動画、書籍の検索でも正しく機能するようになりました。また、「最新」や「1週間以内」といった検索結果範囲も選択可能なりました。「実は、1年以内の検索は必要ないんだよね」などの要求にも対応できます。

加えて、検索結果範囲を「強制」できるようにもなりました。例えば検索結果範囲を「24時間以内」「1年以内」に設定し、強制オプションを有効にした場合、Chromeで表示される全べのGoogleの検索結果が「24時間以内」または「1年以内」へ限定されることになります。期間限定での調べ物を繰り返し行うような場合には便利でしょう。

個人的に一番大きな変更は、アイコンを以前よりも(もう少し)まともな図柄としたことです。以前のデザインよりも気に入ってもらえると良いのですが...。なお、同時にアイコンの意味も「次の検索内容」から「現在の検索結果」へと変更しました。

インストールや詳しいリリースノートなどは、Google Chrome 拡張のSearch Date Changerのページを御覧ください。

また、先のバージョン同様、このバージョンも github で、全ソースコードを公開しています。ライセンスも同様 2-clause BSDなので、必要に応じてご自由にお使いください。