Windows標準キーボードドライバでアプリ起動ボタンの設定を変える方法

Windows標準キーボードドライバでアプリ起動ボタンの設定を変える方法を調べたのでメモ。見つけるのにずいぶん苦労しました。
例えば、メールボタンの設定を変更して、エディタ起動ボタンに改造することができます。

ここに書いてありました。
http://msdn.microsoft.com/en-us/windows/hardware/gg463446

を変更して再起動すればOKです。

なお、レジストリの操作を誤るとWindowsが起動しなくなることがありますので、詳しくない人はいじらないでください。HKLMやHKCUが何かわからない人もいじらないでください。これ以上の詳しいことは書きません、これでわからない人は詳しい人にいじってもらってください。

蛇足ですが、USBの規格にはテキストエディタキーとかデータベースキーとかスクリーンセーバーキーなんてのもあるそうです。へんなの。そんなことよりCaps Lockキーをなくして欲しい。

iPhoneのバックアップは今すぐ暗号化するべき

iOS4が位置情報の全履歴を保存してた問題が広く公開されて数日経ちますが、公開当日こそ各ニュースサイトで大きく取り上げられたものの、その後はほとんど議論もされずに急速に風化してますね。なんだか不思議です。ちょっと怖いことでも書いてみますよ。

位置情報の問題は2つあって、一つはAppleが位置情報の全履歴を記録していること。もう一つはその情報がバックアップしてるパソコンに平文で置いてあるということ。

パソコンにフリーソフトをインストールした数日後に、あなたが仕事に行ってる間に自宅に空き巣が入ったら、それは偶然じゃないかもしれないよ、ということです。パソコンに平文で時刻情報付きの位置情報履歴があって簡単に読み出せるということは、そういうことです。ちょっとおおげさかもしれませんけど。

バックアップは今すぐ暗号化することをオススメします。


[追記]
iOS4.3.3で位置情報はPCにバックアップされなくなりました。
なので4.3.3以降であれば暗号化しなくても位置情報がもれることはありません。
参考 http://japanese.engadget.com/2011/05/04/ios-4-3-3/

iPhone Tracker for Windows をつくりました

http://sites.google.com/site/siokoshou/
Windows 7 x64 でのみ動作確認済みです。.NET3.5 入り XP でも動きます。

↓のMac版とだいたい同じモノのつもりです。でも、Mac持ってないし本家のモノを動かしたわけではないので本当に同じかわかりません。
http://petewarden.github.com/iPhoneTracker/

本家同様、日時は週単位に丸め、緯度経度もある程度丸めています。

そもそもの iPhone Tracker についてはこちらをどうぞ。
http://japanese.engadget.com/2011/04/20/ios-4-pc/

追記

  • Ver1.2 - 4/24 19:00ころ Ver1.2に更新しました。
    • いくつかのバグ修正。
  • Ver1.1 - 4/24 16:00ころ Ver1.1に更新しました。
    • Wifiロケーションも表示するようにしました。
    • 重複した位置情報のまとめ方を修正しました。
    • これによってデータ量が減り、だいぶ速くなりました。
  • Ver1.0 - 4/23 公開しました。

ToolTip の Binding で StringFormat を使う方法

ToolTip の Binding で StringFormat は無効なようです。使おうとして↓のように書いても at の文字は表示されません。StringFormat は無視され、Hoge の数だけが表示されます。

<TextBlock Text="{Binding Value, StringFormat={}{0:N0}}"
  ToolTip="{Binding Hoge, StringFormat={}at {0:N0}}" />

StringFormat の代わりに ContentStringFormat を使って↓のように書くと期待通りに表示されます。

<TextBlock Text="{Binding Value, StringFormat={}{0:N0}}">
  <TextBlock.ToolTip>
    <ToolTip Content="{Binding Hoge}"
      ContentStringFormat="{}at {0:N0}" />
  </TextBlock.ToolTip>
</TextBlock>

# いちいち面倒ですよねぇ。DSL は変なこだわりを捨てて便利さを追求するべき!

関連:

除算と剰余の整数オーバーフロー

プログラムでは整数の四則演算はよくよく注意しないと足をすくわれることがあります。
整数と呼んでるものが普通と違って範囲があって循環しているためです。最大値と最小値の絶対値が 1 ズレているのもいや〜な問題の元になります。

この 1 ズレのため除算で整数オーバーフローが発生します。除算でですよ。
int の最小値を -1 で割ったときに結果が表現できないためです。除算と剰余ではただこの 1 ケースのみオーバーフローが起きます。

このケースは仕様書にちゃんと書いてあります。仕様書によると checked では例外スロー。unchecked では「unchecked コンテキストでは、System.ArithmeticException (またはコンテキストでのサブクラス) がスローされるか、または左のオペランドを結果値としてオーバーフローを報告しないかは、実装で定義されます。」実装依存だそうです。では Visual Studio 2008 SP1 で試してみます。

「int x = int.MinValue / -1;」と書くとコンパイルエラーになります。下のように書くとコンパイルは通ります。おバカさんめ。

static void Test1()
{
    int m = int.MinValue;
    int n = m / -1; // OverflowException 発生
    Console.WriteLine( n );
}

実行すると unchecked なのに OverflowException が飛んできました。x86/x64 Debug/Release ぜーんぶ全部です。checked も当然同じです。
0 で割り算しようとしてしまうのは当然気を付けますが、-1 も実は注意が必要ということですね。


続いて剰余。こっちはクレイジーです。
「int x = int.MinValue % -1;」と書くと x は正常に 0 になります
ところが

static void Test2()
{
    int m = int.MinValue;
    int n = m % -1; // OverflowException 発生!!
    Console.WriteLine( n );
}

これを実行すると除算同様 OverflowException が飛んできます。ひどい。コンパイル時と実行時で違うんですね。
checked も x86/x64 Debug/Release 全部 OverflowException です。

仕様書によると「左オペランドが int または long の最小値で右オペランドが -1 の場合は System.OverflowException がスローされます。x / y が例外をスローしない場合に x % y が例外をスローすることはありません。」だそうです。x / y が例外をスローするなら x % y が例外をスローする、とは書いてませんが MS のコンパイラはそういう動きをしました。これを書いてないのは高速化のために実装の幅を残すためでしょうね。

そもそも 0 でいいのに。CPU では除算と剰余が一体なので、除算でオーバーフローが起きたら剰余もその結果に従うということのようです。x86 では CPU が例外を投げるようですが、x64 では 32bit 演算なのに結果は 64bit 幅なので、しょうがなく(?) JIT 後の機械語に int.MinValue % -1 かどうかチェックするコードが生成されていました。明らかにそうじゃない場合はチェックコードは生成されません。わざわざチェックコードを生成するなら x86 にチェックコードを加えて 0 を返せばよかったのに。

まあ、マイナス割るマイナスって一体何だかわかりませんが、こんなことがあるので注意が必要ですよというお話でした。

PDC09

仕事はえー!

Silverlight4 beta が出たようです。こっちもはえーw 3出たばっかりのような気がしてた…
ついに右クリック解禁らしい。

さよなら CAS

http://www.infoq.com/jp/news/2009/11/CAS-Replaced
CAS がなくなる件、InfoQ の記事になりましたね。
これってひょっとして unsafe の事実上の解禁になるのかな?よくわかってないですけど。
型安全はつまらないバグをかなり減らしてくれるんで、安易に unsafe に頼りたくないですが、これが解禁を意味するならうずうずしてしまう場面はありそうです(^^;
解禁じゃなかったらごめんなさい。
記事の後半はよくわかりません…。