Google Chromeに乗り換えた

Firefox 3.6を常用していたけれども、CSS Transitionsとかを見るのにいちいちGoogle Chromeを起動するのが面倒になってきたので乗り換えた。それと、Firefoxは開発にも使っていたので余計なクッキーとかを入れないようにしていたけれども、Firefoxは開発、Chromeは開発以外で使う、といった具合に、用途でブラウザを分けるようにしてみた。

以下導入した拡張機能

マウスジェスチャ
Smooth Gesturesを導入。右クリックをジェスチャに割り当てると、コンテキストメニュー表示がうまくいかない、と思ったら右ダブルクリックでいいっぽい。なお、Chrome GesturesMacで動かない。
ページの自動追加
AutoPatchWorkを導入。
fastladderでリンクをバックグラウンドで開く
Chrome標準の挙動だとoとかvで開くときにとても困るのでLDR open in backgroundを導入。Livedoor Reader用だけどfastladder.comでも問題なく動作。
はてなブックマーク
はてなブックマーク GoogleChrome 拡張を導入。
ページごととかにCSS適用
Chrome Stylistを導入したけど、FirefoxStylishの設定を移行するのは手付かず。困ったときにやればいいや。
Flashの読み込みブロック
MacではFlashが重かったりすることがあるので、任意で読み込めるようにFlash Blockを導入。
img要素のalt属性をポップアップ
Popup Image Alt Attributeを導入。
キャッシュとかアーカイブを探す
Web Cacheを導入。

Cmd+Wでウインドウが閉じないようにしたい。Macだとアプリケーションが終了しないのでDockのアイコンをクリックすればいいけれども、ウインドウが残ってないといろいろ面倒(Cmd+Tabで切り替えたときに何も表示されなくて気付かないとか)。
NeverCloseはabout:blankが二枚表示されてしまうので(正常な動作かもしれないけど)ちょっと違和感がある。Last Tab Standingはうまく動いてるのかどうかよくわからなかった。たまにうまくいくんだけど。しばらくは我慢する。

Firefoxではツリー型タブ、情報化タブを使っていたけれども、それに代わるようなものはなさそう。--enable-vertical-tabsでタブ縦置きはできるけれども、Macだと表示が微妙になったし、階層構造になるわけでもないし、開発に使わなきゃそんなにタブを開くこともないし。サムネールも別にいいや。

用途別にブラウザを分けると、サボることが検索ついでに余計な物を調べて脱線することが少なくなって効率が上がったようなそうでもないような。あとはクッキーを気にしなくてもよくなったのでログイン状態を保存しておけて楽になった点くらい。

php-modeのインデント設定

Eclipseをやめてemacsphpのコードを書くようにしたけれども、php-modeの標準(php-mode-force-pear tの時)のインデントがちょっと気に食わない。こういった時にささっとカスタマイズできるのがemacsの利点なんだけど、どこを直せばいいのかよくわからない、というもがemacsの欠点、そして最悪elipsを読めばなんとかなるのが利点で、elispがとっつきにくいのが欠点。

      • -

どういうインデントになって欲しいのか

まず、標準のインデントはこんな感じになる。

<?php

function longLongFunctionName($arg1, $arg2,
                              $arg3, $arg4)
{
}

$tmp = array('key1' => 'val1',
             'key2' => 'val2');

$tmp = array(
             'key1' => 'val1',
             'key2' => 'val2');

switch ($a) {
case 1:
    break;
case 2:
    break;
}

まず、引数リストとか配列定義中に改行があると、括弧の位置に合わせてくれる。これは見た目綺麗だけれども、関数名とかが長くなる傾向が高いコードを書かされている書いているので、結構な確率で一行80文字制限を超えてしまう。

それと、switch-caseは他の言語ではこれでいいんだけど、phpのときはcaseもインデントしてほしい。規約的に。

ということで、望むインデントはこう。

<?php

function longLongFunctionName($arg1, $arg2,
    $arg3, $arg4)
{
}

$tmp = array('key1' => 'val1',
    'key2' => 'val2');

$tmp = array(
    'key1' => 'val1',
    'key2' => 'val2');

switch ($a) {
    case 1:
        break;
    case 2:
        break;
}

どうやってカスタマイズするか

php-modeのソースを見ると、php-mode-pear-hookでc-set-offsetを使ってなんかやっていそうな感じ。c-set-offsetはc-offsets-alistの値を設定する関数らしい。この辺りはF1 fとかF1 vとかで調べられた。

引数リストとかの改行はいろいろ設定を変えて試したところ、arglist-introとarglist-cont-nonemptyとarglist-closeで対応できそう。caseについては、case-labelに4を設定すればOK。4じゃなくてc-basic-offsetを指定したほうがいいのかもしれないけれども、面倒なので4。他の所も4。

結局こんな感じのelisp.emacs.elとかそれに相当する部分に書いてカスタマイズ完了。すっきり。

(add-hook 'php-mode-hook
          (lambda ()
            (c-set-offset 'case-label' 4)
            (c-set-offset 'arglist-intro' 4)
            (c-set-offset 'arglist-cont-nonempty' 4)
            (c-set-offset 'arglist-close' 0)))

テレビの砂嵐

画像を使用せずに、canvasでテレビの砂嵐を描くチュートリアルhttp://jsdo.it/hakobera/nZe4を見て自分で書くならどうするか考えてみた。

  • fillRectじゃなくてImageDataを使ったほうが早いかも
  • 砂嵐といったら白黒というイメージ
  • アニメーションもさせたい
  • backgroundにtoDatURLで渡す方法はなるほどと思った
    • 自分で繰り返ししなくていいのは楽
    • でもアニメーションさせるとちらつく
    • 影の薄いcreatePatternを使えばfillRectでいいのでは

ということでjsdo.itのをforkしてできたのがこれ。

forked from: テレビの砂嵐

二倍表示にして負荷を減らして、白黒と色つきの切り替えと、走査線っぽいものも加えてみた(こういう余計な物を加えるのが悪い癖)。

ところで、パターンの大きさが小さいと、どうしても繰り返しが気になる。現実世界の壁紙とか模様ガラスでも気になる。あきらかに模様っぽいものなら気にならないけど、一見ランダムそうだけど実は規則性があるものとかに弱いらしい。