2010年2月28日日曜日

Razor Orochi を Mac 用の無線ゲーミングマウスとして使ってみる



自宅のマウスを無線化したくなったので、Macでも左利きでも使える無線マウスを探してみたところ、 Razor Orochi という製品が見つかったので試してみることにしました。


■諸君 私はマウスが好きだ
「そもそもMacで無線マウスならMagic Mouseを使っておけばいいだろう」と皆様お考えであろうと思うのですが、残念ながら以下のような理由により私はMagic Mouseに満足できません。
  • Boot CampしたWindowsでの動作がイマイチ。基本的にMac専用。
  • ボタンがないためゲーミングで使用できない。右クリックすら怪しい。
  • 薄すぎ小さすぎて手に収まらない。
仕方がないのでその他の無線マウス製品を探してみたのですが、なんと以下の条件にマッチするマウスが世界中探しても一つもないのです!
  • 左利きなので、左右対称デザインであること
  • ゲーミングに使用するため、最低でも5ボタン付いていること
  • ゲーミングに使用するため、ホイールはクリック感があること(武器切り替えの時にクリック感のないホイールはまるで使えません)
  • 可能な限り大きく手のひらに収まるサイズであること、モバイルサイズはダメ
特に条件が厳しいのが「左右対称デザインであること」で、まぁ何処の会社も無線マウスは右手で持つものだと言わんばかりに大きく左にひねくれさせ放題ひねくれさせてくれやがりまして、まるで選択肢がないのです。あきらめかけていたときにようやく海外のサイトでこのRazor Orochiを見つけました。


■Razor Orochiって?
ゲーミング用製品で有名なRazor社の製作した世界初のBluetoothモバイルゲーミングマウスです。詳細はこちらのページをご覧になってください。

どうも日本国内では正式に流通していないようで、そもそも日本語版のRazor社の公式ページには名前すらありません。Razor社の通販ページから直接通販して買うしかありませんでした。送料込みで100ドルぐらいです。

おそらく日本国内でこんなへんぴなマウスをわざわざMacで使っているのは私ぐらいなものでしょう><


■設定してみる
最初に重要なことですが、Macだけで使用したいと思っていても、Razor Orochiの設定にはWindowsが絶対必須です。Mac版のドライバも用意されていますが、残念ながらMac版のドライバはOrochi本体のメモリに設定を書き込むことができず、またボタン配置を変更したりもできないため、全く役に立ちません。極めつけに有線モードでなければ設定できず、有線から無線に切り替えると設定がすべてリセットされるため、タダのお荷物です。USB Overdriveを代わりに使うことを強くお勧めいたします。

また、Razor Orochi ファームウェアの更新にもWindowsが必須です。ファームウェアの更新ですが、これが大変重要で、ファームウェアを更新しないとこのマウスはまるで役に立ちません。論より証拠、以下の図を見てください。



これはRazor Orochi farmware version 1.02の状態でお絵かきソフトで線を引いてみた図なのですが、見ての通り赤い線の部分がポインタ飛びを起こしています。高速で引いた線、水平垂直な線は比較的綺麗ですが、斜めにゆっくり動かすとすさまじい勢いでポインタが飛んで使い物になりません。farmware version 1.06にすると多少改善しますので、まず何はなくともファームウェアを更新する必要があります。

ということで、まずはWindowsを起動してファームウェアを更新し、それから設定を行います。私は左利きなので、サイドボタンの設定を変更する必要があります。初期設定では4,5が戻る/進むになっていますが、これを6,7と入れ替えてやります。こうすることで、左手の親指でマウスボタン4,5が押せるようになります。右利きの方はそのままの設定で十分使えると思います。


■使ってみる
良い点はきちんと5ボタン使える左右対称デザインで、しかもモバイルサイズながら十分な大きさがあり、手にフィットするところです。小指がマウスに乗っからないので若干小さいですが、この程度なら十分使えます。重さは結構ありますがすぐ慣れました。精度も、大きくマウスを振り回し続けている間は非常に良いです。Microsoft IntelliMouse Opticalとほとんど変わりません。

悪い点はなんと言ってもポインタが飛びます。このRazor 3G レーザーセンサー、低速時の挙動が最悪です。steelseries 4HDをマウスパッドにしているからわざと相性悪くしているのかと思って別のマウスパッドを使ってみたり直接机で動かしたりしてみましたが、やっぱりダメです。ファームウェア1.06で多少良くなりますが、スナイパーの方や細かい線を書くお仕事の方には絶対にお勧めしません。このセンサーの問題は有線モードにしても解決しません。

それからもう一つ悪い点として、スリープ状態からの起き上がりが非常に遅いです。5秒休めておいてから急にマウスを動かすと最初の1ストロークが完全に無視されます。最悪です。Magic Mouseは起き上がりが非常に早いのでそんなものなのかと思って買ってみましたが、なるほどアレはAppleのMac専用チートだったわけですねorz


■まとめ
まだ無線マウスは使い物にならないというのが正直な感想です。以前、ゲーミングデバイスを開発してらっしゃるSteelSeries社の方に無線マウスは作らないのかと質問してみたのですが、そのときに得た答えが「まだ現在の技術では無線マウスは使い物にならない」というものでした。なるほど納得です。

しかしながら全く使えないのかというとそうでもなくて、線が無くなったおかげで確かに机が広く使えて助かってます。私が最近プレイしているHeroes of NewerthのようなRTSゲームや、DiabloみたいなRPGスタイルのゲームであれば、常にマウスを大きく動かすためほとんど問題のない操作感になります。

逆にスナイパースタイルのFPSをプレイするのには全く向きません。日常使いにもちょっと不満があります。たいていキーボードを触っているので、ちょっとマウスをさわりに行くと遅くてイラッ。

2010年2月20日土曜日

hg clone で巨大なリポジトリを取得するときは --debug オプションが便利

参考にしたページはこちら。
http://mercurial.selenic.com/wiki/Clone

mercurial hgを使っていると、特にバイナリでサイズの大きいファイルを頻繁に変更するようなリポジトリ(たとえばFlashとかflaとかflaとか)はすぐにサイズが肥大化して、cloneに時間がかかるようになってしまいます。このような巨大リポジトリのcloneの進捗状況を表示できないかと思い調べてみました。

結論から言いますと、今のところそのようなコマンドは用意されていないようです。そこで代わりに--debugオプションをつけて実行するとよいと公式ページに説明がありました。
> hg clone --debug http://www.selenic.com/repo/hello my-hello
using http://www.selenic.com/repo/hello
sending between command
sending heads command
requesting all changes
sending capabilities command
capabilities: unbundle=HG10GZ,HG10BZ,HG10UN branchmap lookup changegroupsubset
sending changegroupsubset command
adding changesets
add changeset 0a04b987be5a
add changeset 82e55d328c8c
adding manifests
adding file changes
adding Makefile revisions
adding hello.c revisions
added 2 changesets with 2 changes to 2 files
updating the branch cache
updating to branch default
resolving manifests
overwrite False partial False
ancestor 000000000000 local 000000000000+ remote 82e55d328c8c
Makefile: remote created -> g
hello.c: remote created -> g
getting Makefile
getting hello.c
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
全体の進捗がわからないのでいまいちですが、何も表示されないよりは格段に良くなりました!

2010年2月15日月曜日

Flash の SWC は使ってはいけない

タイトルからしてなかなかひどいですが、調査結果もなかなかひどいです。

■結論:fl.controls(最初からFlashに付属しているコンポーネント)を含むSWCを作ると正しく読み込まれない
まずはこちらに検証用のプロジェクトを用意しましたので、ご覧になってみてください。
package {
import flash.display.MovieClip;

public dynamic class Abesi extends MovieClip
{
public function Abesi() {
trace("abesi");
trace(this.button, this.textArea);
}
}
}
package {
import flash.display.MovieClip;

public dynamic class Hidebu extends MovieClip
{
public function Hidebu() {
trace("hidebu");
trace(this.button, this.textArea);
}
}
}
とまぁ、なんの変哲もないタダのFlashコードをswcとして出力し、TestMainの中でnewして出力しているだけなのですが、なんとswcに書き出すタイミングに応じて確実にエラーになって落ちるというひどい問題があるようなのです。


■検証結果
以下のスプレッドシートにまとめてみました。
http://spreadsheets.google.com/ccc?key=0AoXhhCSOuqOtdE5rNy1wc2N2Z2JuV1NPUFBjdlRNeHc



たぶん私の書き出し方に何か問題があるのだろうとは思っているのですが、何処を見てもそれに関する情報が見あたらなかったので解決できず、結局swcの使用はあきらめることにしました><