2011年 07月 08日

神社にはよく行くけれど、自身としてはあまり信仰心がない(仏教よりはあるかも)ので、御参りして形式的に2拝2拍1拝はするものの、2拍のあとに何も思わないことが多かった。願いがないというわけではなくて、いない神様にそれを祈るぐらいなら、口に出して人に言ったりして、直接行動したほうが願いは叶いやすいと思っているからで、つまりどちらかというと積極的に祈らないということです。翻って考えてみると、祈らない代わりにお参りする度に自分の中で行動を起こす誓いを立ている感じに近い。

しかしちょっと考えかたを変えて、全く自分の行動の影響が及ばないことについて、例えば単純に運でしかないものについては祈ることにした。それ自体に全く意味がなくても、ある種の、運のみに依存している理不尽さに対抗するために効果があると考えた。これは暗い小説を読むのと似ていて、暗い小説なんて読んでも何の意味もないどころか辛い気持ちになりがちだけど、場合によっては溜飲を下げたり、現実において自分のネガティブな行動を抑えたりする効果があるなと思うわけです。

神社によく行くのは、前にも書いたかもしれないけど、雰囲気が良いから(大抵街中でも鎮守の森があるし)というのと、建築が面白いからというのと、だいたいどこの駅で降りても歩けばあるし、散歩とか外出の目標地点にするにはちょうどいいからという理由です。目標地点がないと外に出ないので……

自分の考えかたの起源みたいなのに強い関心があって、つまりいろいろ自分の中に価値観ってものがあるけれど、それがどこ由来なのか、遺伝的によるものなのか、環境(教育、文化)によるものなのか、よく無駄に考えてしまう。

特に遺伝なのか環境なのかっていうのは、子供のころからよく考えることがあるけど、結局殆どよくわからない。

  • 掃除機の紙パックがない
  • 髪を切る必要がある

gerry++

JSを編集してエディタで保存するとき、JSHint でコーディングバリデーションをかける

errormaker.vim を使って JS 保存時に末尾カンマチェックとかをやっていたのだけれど、今までチェックに使っていた Spidermonkey の最近のバージョンだと、strict モードにしても末尾カンマを warn しなくなって意味がなくなっていたので、JSHint でやるようにした。

setlocal makeprg=$HOME/.vim/vimparse.js\ %\ $*
setlocal errorformat=%f:%l:%m

は今までのままにして、vimparse.js を以下のようにした。JSHintJSLint よりはマイルドというか偏執さがないのだけど、まだ癖が強くて「実害のある」という警告と「単に好み」という警告がごっちゃになっていてうざいので、できるだけ自分でカスタマイズできるようにした。

node.js を実行環境にしているのは、node.js のインストールが特に依存もなく簡単だから (clone して make するだけでいいから) です。

#!/usr/bin/env node


var JSHINT = require("./jshint.js").JSHINT;
var fs = require("fs");

var argv = process.argv;
argv.shift();
argv.shift();

argv.forEach(function (filename) {
	var source = fs.readFileSync(filename, 'utf-8');
	var result = JSHINT(source, {
		browser : true,
		jquery  : true,
		evil    : true,
		passfail : false
	});
	if (!result) {
		JSHINT.errors.forEach(function (error) {
			if (!error) return;

			if (error.reason.indexOf('Stopping, unable to continue.') != -1) return;

			// 何これ?
			if (error.reason.indexOf("Confusing use of '!'.") != -1) return;

			// for (var i...) は何度も書きたい
			if (error.reason.indexOf("'i' is already defined.") != -1) return;
			if (error.reason.indexOf("'it' is already defined.") != -1) return;

			// 可読性のために意図的にそうしているのでうざいし、そういう最適化は実行エンジンがすべきこと
			if (error.reason.indexOf('is better written in dot notation') != -1) return;

			// 根拠がわからないので保留
			if (error.reason.indexOf("Don't make functions within a loop") != -1) return;

			if (error.evidence) {
				error.evidence = error.evidence.replace(/\t/g, '    ');

				// 明示的に抑止されてるなら無視
				if (error.evidence.indexOf('no warnings') != -1) return;

				// やたら長い行は圧縮されたJSコードとみなす
				if (error.evidence.length > 1000) return;

				// 閉じブレース前のセミコロンは省略可能に
				if (error.reason.indexOf('Missing semicolon') != -1 && error.evidence.substring(error.character).match(/^\s*\}/)) return;
			}

			console.log([filename, error.line, error.character].join(':') + "\t" + error.reason);
		});
	}
});