引っ越し

id:eclipse-a から id:krogue に引っ越しました。

なので、ここはもう更新しません。削除はしないけど、もう更新しません。ダイアリーだけでなく、ブックマークも更新しません。その他はてなのサービスはすべて引っ越しです。

新しいはてなIDid:krogue です。

新しいダイアリーは http://d.hatena.ne.jp/krogue/ です。

新しいブックマークは http://b.hatena.ne.jp/krogue/ です。

id:eclipse-aにさよならして、id:krogueでがんばっていきます。新しい場所でも、よろしくお願いします。

ついでに twitter では @krogue でやってます。こっちもよろしくね!

Googleで検索するとき一緒に自分のはてなブックマークからも検索するGreasemonkeyスクリプト

http://khkh.o0o0.jp/greasemonkey/googlewithhatenabookmark.user.js

Googleで検索するとき一緒に自分のはてなブックマークからも検索するGreasemonkeyスクリプトを書いた。はてな検索を一緒にするようなのはあるんだけど、自分のはてなブックマークから検索するのが見当たらなかったので書いた。

理想を言えば、現在のはてなブックマークみたくインクリメンタルサーチができれば良いんだけど、能力と意欲という二つの問題があって無理だった。以前Vimperator拡張を書いたときも書いたはずだけど、JavaScriptについて知らないまま感覚で書いているので、妙な動作があっても許してほしい。

使うときはuser_idを自分のものに書き換えること。use_faviconをfalseにすればfaviconを表示しなくなる。show_limitは表示する数を変更できる。データは基本的にキャッシュを使うので「なんか古いな」と思ったらReload押すといい。あとはきっと分かると思う。コメントやタグは表示してない、別に要らないかなと思った。途中で面倒になった。

ちなみに元になったスクリプトがあってHatenaBookmarkWithGoogleという名前で配布されている。ソース自体はまったくの別物なので、たぶん問題ない。

s/GreaseMonkey/Greasemonkey/というお告げが聞こえたので修正した。

『ジャガイモのきた道』山本 紀夫

ジャガイモのきた道―文明・飢饉・戦争 (岩波新書)

ジャガイモのきた道―文明・飢饉・戦争 (岩波新書)

イモも良イモんだ。

sticky shift という言葉について

はじめて sticky shift という言葉を見たのは http://homepage1.nifty.com/blankspace/emacs/sticky.html だ。この言葉がどこで生まれたのか私は知らない。そしてよく知らないまま skk.vim 用にパッチを書いたりした

最近は訳あってシフトキーについて調べている。その過程でこの言葉の使い方に疑問を感じていたのだけど、 http://d.hatena.ne.jp/rubikitch/20081104/1225745862 を見て「さすがにこれは違うな」と思ったので sticky shift という言葉について書きたいと思う。

sticky shift とは順次打鍵方式のことだと私は思う。この方式は「シフトキーを押して離すと次のキーをシフトする」という方式だ。押下するのはあくまでシフトキーであることに注意されたい。

http://homepage1.nifty.com/blankspace/emacs/sticky.html では sticky shift は順次打鍵方式と同じ意味で使われている。どうしてシフトキーを使わないのか。それも書いてある。「シフトキーの押し・離しは文字端末では検出できないために、汎用性がありません。」とそういうことだ。

私が言いたいのは「 sticky shift 自体にシフトキーを押さないという意味はない」ということだ。しかし http://d.hatena.ne.jp/rubikitch/20081104/1225745862 ではシフトキーを使わないために sticky shift を使うかのような書き方がされている。

繰り返しになるが sticky shift とは順次打鍵方式を指すのだと私は思う。その実現の過程でシフトキー以外のキー ( ; ) を使うべきだという結論に達したに過ぎない。 sticky shift が変更するのは方式であって位置ではない。だから Windows に標準搭載されている「固定キー機能」は立派な sticky shift だと言える。

じゃあどう表現すればいいのか。 ; であってもシフトさせるためのキーだからシフトキーだと言ってもいいんだけど、それだと混乱する。この文章さえも意味が通らなくなる。なので sticky key という言葉を借りる。「シフトキーを sticky key にするのではなく、 ; を sticky key にした sticky shift 」これでどうだろう。長いがこれで間違いがなくなる。

「固定キー機能」で SKK を使用してもさほど便利ではない。一方で ; を sticky key とした sticky shift で SKK を使用するとすごく便利だ。パッチを書きたくなるくらいだ。ぜひ ; を sticky key とした sticky shift で SKK を使ってみてほしい。

さすがに長いや。

余談。にわかに SKK ユーザが増えているようなのでSKKグループを作ってみたSKK ユーザは増えているようなのに SKK グループには人が居ないので誰か来てください。お願いします。

参考リンク

ゲーム感覚の操作がなぜいけないのか

十四歳の子どもが自動車を運転して人をひいた事件があった。

新聞には、「ゲームセンターではレバーをガチャガチャすれば動くので、本当の車も動くと思った」という発言と、無灯火・足の位置・蛇行運転をしていたという事実とが掲載されていた。「ゲーム感覚レバー操作」という見出しから「ゲームでできたからといって現実でもできると思うな!」というのが新聞の意見なのだと私は思った。

「ゲーム感覚の操作がなぜいけないのか」私にはそれが分からない。

もし自動車が 100 を超えるボタンを持っていたら*1、もしそれらを正確に操作するよう私に要求するなら、私はそれに乗らない。シート・ミラー・ライト・ブレーキ・シフトレバー・アクセル・ハンドル……。最低限の部品で直感的に操作できるように自動車はできている。はっきり言って操作だけならゲームと変わらない。どちらも慣れれば大差ない。むしろ自動車の運転の方がゲームより簡単なくらいだ*2

理想を言えば自動車の運転はゲームよりずっと簡単であるべきだ。ゲームでの失敗はせいぜい時間の損失に過ぎないが、自動車の運転での失敗は生命の危険につながる。より簡単で当然だ。ゲーム感覚で操作できない自動車はおかしいと考えるべきだ。

では自動車を運転していた子どもは悪くないか。そんなことはない。最低である。ゲーム感覚で操作できるように作られていなかった自動車に彼・彼女の問題をすべて押し付けるつもりはない。彼・彼女の問題は「自動車の運転には責任が伴うのを理解していないこと」だ。

自動車に乗れば歩くより速い。遠くに短時間でいける。運転それ自体を気持ちいいと感じるかもしれない。しかし代償もある。その一つが事故だ。人や物にぶつければ自動車はもちろん相手も傷つく。場合によっては相手が死ぬこともある。相手が死ねばその人生を何らかの形で背負うことになる。自動車の運転には操作だけでなく「責任」を問われるのだ。その自覚がない人間には自動車の運転をさせるべきでない。

子どもには責任というものが理解できない。いや責任を理解できないからこそ子どもなのだ*3。子どもには自動車の運転をさせるべきではないと私は思う。

新聞で否定すべきは、ゲーム感覚の操作ではなく、ゲーム感覚の責任感だ。

変に操作が難しいような書き方をすれば、操作さえできればいいと錯覚しかねない。操作よりも責任が問われることこそを書くべきだ。操作ができるからといって自動車の運転などすべきではない。責任の自覚とそれを取る能力との両方を備えているかが大切なのではないか。

私には「ゲーム感覚の操作がなぜいけないのか」が分からない。

*1:本題とはおよそ関係ないが、日本で広く普及しているキーボードには109 以上のキーがある

*2:ここでは慣れるのにかかる時間程度に考えてほしい。レースドライバーなどの職業を馬鹿にするつもりはない。運転の奥は深いと思う。しかしゲームもスコアアタックなどの領域に踏み込めばそれと同じくらいに奥は深いと思う。どちらも私が一朝一夕で語れるものではないのは確かだ。

*3:年齢は問題ではない

vimperatorのstatuslineが嘘みたいに使いやすくなる夢を見た

// 使用は自己責任。
// 参考: http://d.hatena.ne.jp/teramako/20071205/p1
// 勉強したい。偉い人、添削、頼む。
// 追記(2008-10-28T07:12:06+09:00): version は 1.2 

// statusline に favicon を表示
(function() {
  var p = document.createElement('statusbarpanel');
  var b = document.getElementById('page-proxy-favicon');
  p.setAttribute('id','page-proxy-favicon-clone');
  p.appendChild(b.cloneNode(true));
  b.parentNode.removeChild(b);
  document.getElementById('status-bar').insertBefore(p,document.getElementById('liberator-statusline'));
})();

// statusline の [+-] をわかりやすい位置にわかりやすく表示
(function() {
var p = document.createElement('statusbarpanel');
var l = document.getElementById('liberator-statusline-field-tabcount').cloneNode(false);
l.setAttribute('id', 'liberator-statusline-field-history');
l.setAttribute('value', '  ');
p.appendChild(l);
document.getElementById('status-bar').insertBefore(p,
  document.getElementById('liberator-statusline'));
getBrowser().addEventListener("load", function() {
  var e = document.getElementById('liberator-statusline-field-history');
  var h = getWebNavigation().sessionHistory;
  h = (h.index > 0 ? "<" : " ") + (h.index < h.count - 1 ? ">" : " ");
  e.setAttribute('value', h);
}, true);
getBrowser().addEventListener("TabSelect", function() {
  var e = document.getElementById('liberator-statusline-field-history');
  var h = getWebNavigation().sessionHistory;
  h = (h.index > 0 ? "<" : " ") + (h.index < h.count - 1 ? ">" : " ");
  e.setAttribute('value', h);
}, true);
})();