2006-10-29

Synergyの裏設定「switchDoubleTap」を知らない人が多すぎる

LANで繋がっているマシンのマウスとキーボードを共有してWindowsとMacをつなげたりといったことが出来るSynergyというツールがあるのですが、Synergyの設定ファイルに
section: options
    switchDoubleTap = 250
end

などとやると、デスクトップの端っこをコンコンと二回タップしたときだけ画面が切り替わるようになります。切り替える際に一手間増えることになりますが、そんなに頻繁に画面を切り替えるわけでもないのでさほど気になりません。WindowsのサーバーだとOptionsの中に項目があります。トラックボールを使うようになってから暇なときはボールを勢いよく転がして遊んでいるのですが、デスクトップが頻繁に切り替わってしまって鬱陶しいことになります。また、最近ではホイールを使うのでスクロールバーを使わないという人も多いかとは思いますが、スクロールバーにカーソルを合わせようとして画面が切り替わったりしてしまう、という状況も防ぐことが出来ます。

というわけで、この設定は非常にオススメです。

see also:
http://synergy2.sourceforge.net/configuration.html

ThinkPadのトラックポイントの替えキャップがAmazonで売ってる

一年前ぐらいから売ってるみたいですね。知らなかった。



2006-10-27

Gmailで未読のみ表示を切り替えるGreasemonkeyスクリプト

検索条件のis:unreadを付けたり外したりするボタンをくっつけるだけです。

http://la.ma.la/misc/userjs/gmail_unread_toggle.user.js

なんか無理やりくっつけた感じになりますが、案外役に立ってます。

2006-10-25

Firefox2.0に任意のRSSリーダーを追加する方法

ここに書いてある。
http://developer.mozilla.org/ja/docs/Adding_feed_readers_to_Firefox

javascript:なリンクで書ける。
livedoor Readerを追加

別にRSSリーダーじゃなくてもいいかなと思ったので、
FEED Validatorを追加
してみた。

2006-10-23

SafariのDate#setMonthがバグってたのでprototype上書きで対処してみる

JavaScriptのDateオブジェクトはdate.setMonth(-1)とやると、前年の12月にしてくれて大変便利なのですが、Safariで上手く動かなかったりするようなのでprototype上書きで対処してみました。

// fix safari's Date#setMonth
(function(){
    var set_month = Date.prototype.setMonth;
    Date.prototype.setMonth = function(num){
        if(num <= -1){
            var n = Math.ceil(-num);
            var back_year = Math.ceil(n/12);
            var month = (n % 12) ? 12 - n % 12 : 0 ;
            this.setFullYear(this.getFullYear() - back_year);
            return set_month.call(this, month);
        } else {
            return set_month.apply(this, arguments);
        }
    }
})();

引数に-1以下の数字が渡ってきた場合は、自前で何年前の何月かを計算します。それ以外の場合はオリジナルのsetMonthメソッドを呼び出します。safariでもsetMonth(12)の方は上手く動いてくれるようで、きちんと来年の1月にしてくれます。

Appleのサイト上にこんな文章があるのですが、
http://www.mac.com/web/ja/Tips/425954F3-DF73-4B9B-94AC-20EE4BDE374C.html
もしアップルが推奨するブラウザを使っていて機能しないサイトを見つけたら、 苦情を申し立てましょう。 そのサイトが、 Web 上でもっとも進化したものに対応できるブラウザでもうまく機能しないのはなぜなのか、 サイトオーナーに説明を求めるとよいでしょう。

言わずもがな、Safariがバグってるからです。

Amazonのギフト券を確実に使い切る方法

「ギフト券」っていう検索フォルダを作って、使い終わったらメールを消す。

2006-10-20

livedoor Readerに何かくっつけるGreasemonkeyの書き方

何かくっつける系のGreasemonkeyが作りやすくなってます。

エントリごとに表示

投稿日時が出てる箇所に追加されます。
window.entry_widgets.add("name", generator , "description");

generatorはfunction(feed,item){ ... }のように無名関数で記述できます。feedはフィードに関する情報、itemはその記事のリンクや記事本文が取れます。データ構造はまるごとPerlに書いてあります。

descriptionは省略可能ですが、将来的に何か気の利いたUIでも作ろうかと考えていたりするので入れておくと良いかも知れません。今のところtitle属性に使うようになってます。Greasemonkeyだと日本語が通らないのでエスケープする必要があります。

エントリにくっつけるサンプル

エントリごとにlivedoorクリップの件数表示
http://la.ma.la/misc/userjs/ldr_with_livedoor_clip_count_images.user.js

エントリごとにはてなブックマークの件数表示
http://la.ma.la/misc/userjs/ldr_with_hatena_bookmark_count_images.user.js
元ネタ:http://d.hatena.ne.jp/tnx/20060716/1152998347

フィードごとに表示

新着数、購読者数の隣の部分に表示されます。
window.channel_widgets.add("name", generator, "description");

generatorはfunction(feed,items){ ... }のように無名関数で記述できます。feedはフィードに関する情報、itemsはitemの配列です。データ構造はまるごとPerlに書いてあります。

フィードにくっつけるサンプル

はてなブックマークの合計数のカウンタ表示をくっつけるやつ
http://la.ma.la/misc/userjs/ldr_with_hbcounter.user.js
元ネタ:http://yoshiori.org/blog/2006/10/ldrfeedgreasemonkey.php

feedburnerのやっているfeedflareみたいな感じで、いくつかサービス側でプリセットを持っておいて選べるようにしようかな、とか、まあそんなことを考えてます。

保証はしませんが、なるべく後方互換性を保つようにするつもりです。

変更点

それと、結構色々変えたので、いくつか動かなくなってると思います。
フック関数は直接さわれないようになりました。こんな感じで書き換えるようにしてください。
after_init.add(function(){ ... })
↓
register_hook("after_init", function(){ ... })


PlaggerLDRで使う奴はここにおいてあります。
http://ma.la/tmp/hackldrapi.user.js

ご意見ご要望などあれば、IRCの#livedoor@freenodeとか常駐してるので、お気軽にどうぞ。あとJavaScriptプログラマーも募集しているのでお気軽にどうぞ。

----
追記:2006-10-20

widgetsの中でエラーが起きるとフィードが全部表示できなくなってしまうので例外処理を入れるようにしました。開発しやすくなったはず。
あと、デフォルトで付いてるやつも同じ仕組みを使って表示していて、外すこともできるようになってます。

entry_widgets.remove('created_on'); // 投稿日時を消す

2006-10-13

FirefoxでJSONPのロードされるタイミングを調べてみた

Firefoxでのスクリプト読み込みの同時実行について
http://d.hatena.ne.jp/shinichitomita/20061013/1160707042

を読んで。
Opera以外は読み込み順に実行されるよね、と思ってたんだけど、どうも違うみたいなので、わかりやすいようにサンプルを作ってみた。
http://la.ma.la/misc/sleep/

ウェイト入れてレスポンスを返すCGIを書いてロード。0,1,2,3って順番で表示されるはずだ、と思って実験してみたらSafariでしかうまくいかなかった。

色々試してみたけど、

- Safari: 並列リクエストされてロードされた順に実行。
- Firefox: 並列リクエストされるけど実行順は固定。
- IE: 並列リクエストされて実行順はほぼ固定?応答が遅いと後回しにされてるような気がする。
- Opera: 並列リクエストされない。

こんな具合になってる様子。

2006-10-10

Googleに入力補完機能

http://www.google.com/webhp?hl=en&complete=1

時期Googleに備わるであろう単語補完&件数表示機能。
まるで魔法のようだが、バックグラウンドでXMLHTTP通信をしている。
XMLHTTPはJavaScriptから特定のアドレスに任意のデータをPOSTしたり、同じドメイン内のXMLデータを取得したり出来る。フォームを送る警告とか通信中の表示がまったくでないわけで、XMLHTTPを使ったキーロガーなんてのを作ったことがあったが、さすがGoogle、これぞまっとうな使い道だ。

XMLHTTPはOperaで使えないのが問題だったんだが、最新版のOperaはXMLHTTPが使える模様。まあ、Googleがこんな機能つけたらOperaの方も対応せざるを得ないだろう。

似たようなのものに。
http://asp03.infosign.co.jp/~saida/mt/index.php?p=104
Blogのインクリメンタル検索、動的ロードしている。
http://blog.bitflux.ch/

文字が追加入力された場合にリクエストしているようだ。

----
Googleについてもう少し詳しく調べてみた。入力に変化があるたびに問い合わせている模様。一度補完された検索ワードについてはメモリ内の変数を使って、存在しなければ問い合わせ、負荷対策もちゃんと考えてある。補完候補と検索件数だけでいいので通信量はさほどでもない。

GoogleAPIを使って検索する前に検索件数がわかるような検索フォームを作ったら面白いんじゃないかと考えていたが、こういった補完候補並べるようなのはGoogle自らじゃないとできないな。太刀打ちできない。

----
日本語対応の可能性は?

現時点では完全未対応。IME変換前のデータなんかを逐一送られても困るだろうな。

まあ類似キーワード自動判別して動的ロードしてキーボード操作で選択、ぐらいなら結構楽に作れそうだ。作ってみようかな。

2006-10-04

Sledge::Plugin::DebugTemplateで開発効率が135倍になるデモ

フォームポストでテンプレートを送りつけると、それを使ってページを表示してくれるSledge::Plugin::DebugTemplateというのを作った。これによりJavaScriptやCSSのみならず、HTMLテンプレートすらローカルファイルと差し替えて開発ができるようになった。

ソース(nopasteが24時間で消えるの知らんかった)
http://rafb.net/paste/results/Ohpek040.html
http://la.ma.la/misc/src/DebugTemplate.pm

Winkで作ったデモ
http://la.ma.la/misc/demo/debug_template.htm

ブラウザを制御してページの内容をダミーのフォームに置き換えて現在のバッファの内容をペーストしてフォームポストしています。どちらかというとこっちの方が肝で、このデモは萌ディタとSleipnirで作っていますが、AutoHotkeyやらMozRepl使ったりすれば他のエディタとブラウザの組み合わせでもできる。

開発サーバー上で直接編集したり、あるいはSambaでマウントして編集したり、といったことも可能なわけですが、この方法だと編集するのは全くダミーのファイルでよいし、デバッグ中に他の人の作業に全く影響を与えないのがうれしい。開発サーバーが共用でも、個人で好き勝手に試すことができる。

当然のことながら本番環境で使えるようになっていると丸ごとセキュリティホールになるので注意が必要です。(イントラの場合でもURLがバレていると危険なので、何らかの認証処理を入れたいと思っている)

----
ついでに萌ディタ用のTemplateToolkitクラス。
http://la.ma.la/misc/src/tt.javascript.txt

- htmlの設定を継承して、ファイル保存時のフックのみを変更
- Sleipnir制御用のクラスを別ファイルに作ってあるんだけど、これ用に切り出し。

2006-10-03

非検索会議に行ってきました

詳細は以下の通り

----

飲み会でBBWatchのカイさんとバソキヤ2006の話で盛り上がった。

「売ってたら全部買うのに」
「俺が全部買うから仕入れてくれればいいのに」
「今度勇気を出してコンビニの店員に仕入れてくれるように頼んでみる」
「箱で買いたい」

とのことです。

万が一このブログを六本木ヒルズ森ビル4階のam/pm関係者の方がご覧になっていましたら
仕入れていただけると大変うれしく思います。

----
追記:2006-10-03

バソキヤ2006はすでに在庫が無いそうです。
結局12個ぐらいしか食えなかった。バソキヤ2007に期待。