MS、有料セキュリティサービス「Windows Live OneCare」と「Equipt」の中止へ
OneCare って登場当初に買ったけど、全然使わずに解約したなぁ。
ちなみに OneCare って名前がつくものには、
なんてのがあるけど、全部移行するのかな?
舌の根も乾かぬうちに激変したGoogle Mobile App - builder by ZDNet Japan
携帯電話での音声入力のサポートは、それほど目新しい話ではない(日本の携帯キャリアも数年前から実施している)ものの、やはりGoogle謹製であることがポイントなのだと思う。
Googleに期待を寄せる理由は、ここ日本でもストリートビューを実現したように、力業で膨大な量のデータを集めてしまう同社の「凝り性」な性質にある。
最近の流れで行くと、その集めたデータを全部ぶちまけてしまう性質もありそうだけど…
MS、スタートアップのベンチャー企業を支援する「Microsoft BizSpark」--開発環境などを無償提供:ニュース - CNET Japan
ウチの会社にも導入を提案してみようかなぁ。
こちら
興味はあるものの使ったことは一度もありません。
そろそろいじってみようかなぁ。
最近、Exchange Server のホスティング サービスもいくつか始まっていますが、メールボックスのサイズがどこも100MB程度しかない。
増量サービスも100MBあたり1000円/月とか。
Hotmail とか Gmail は数GB をタダで貸してくれるところをみると、それらの Web メールと Exchange ってのは使い方が決定的に違うんじゃないか? と思わざるを得ないんだけど。
アクティビティ下がりまくり。なんとかせねばいかん。
というわけで最近の出来事。
1:ノートパソコン買いました。
VAIO type-Z。諸々込みで23万円くらい。
画面の高さがちょっと不満。でもしょーがない。
今後はメインマシンになる予定。
これ用にマウスを買おうかどうか迷う。
マウスが使えない環境もあることを考えるとタッチパッドに慣れておくべきかなぁと思ったり、どうせならBlueTrackのもうちょっといいやつが出るまで待とうかなぁと思ったり。
2:Home Server はじめました。
今まで使っていたデスクトップ機が VAIO にお株を奪われたこともあって、サーバ機に転向。というかもともとサーバマシンだったのをデスクトップ用に使っていたのですが。
先日、OST で開かれた Windows Home Server のセミナーを聞きに行って、好感触を持ったのと、MVP プログラム経由で Home Server をもらったので。
3:Advanced Windows 第5版
Amazon からのメールで発売されてたことに気づいて、脊髄反射で購入。
上巻 下巻
4:OS のアップグレード
VAIO の OS、買った後で気づいたけど Vista Home Premium だった。
最初は問題なかろうと思っていたが、いろいろいじっているうちに問題発覚。
だめだこれは。使い物にならん。
というわけで Ultimate へのアップグレードパッケージを購入。
結論:金がない。
「テストが完了した後でコードに変更を加えた場合、それがどんな些細な、プログラムの動作に影響を及ぼさないとわかりきっている変更でも、再テストしなければならない」
まぁ、これはいい。厳しめだが、理がないではない。自動化されていればさほど苦でもあるまい。
だが、もう一つの、こっちが本当に変なルールがある。前のルールがあればこそ引き立つのだが。
「テストが完了した後で、コードを書き換えさえしなければ、リビルドしても再テストは要らない」
これは「コンパイルオプションを変更してリビルドしても、ソースコードさえ書き変わっていなければいい」ということを意味する。
条件付きコンパイルでも使っていれば、実際に実行されるコードはガラっと変わり得るだろうに、だ。
これは実際に、今の仕事で通達されたルールである。
自動化されていないから前者の方もかなり厳しいのだが。
「通達」であるところがミソな気がする。現場を知らない人が決めたルールというのは往々にしてこういうものなのだろう。
Google をやめて、Live Search を IE7 のデフォルトサーチエンジンにしてみる。
…なんだ、意外と使えるじゃないか。
有名な法則があります。
まず、「時は金なり」より、「時間=金」であります。
次に、「知識は力なり」より、「知識=力」が成り立ちます。
最後に、物理学の基礎ですが、「仕事=力×時間」であります。
この三つの式は、その簡素さながら、驚くほどに豊かな示唆を含んでいます。
最後の式を変形すると「時間=仕事÷力」となり、この「時間」と「力」に、前述の式の「金」と「知識」を代入すると、「金=仕事÷知識」となります。
ここから、「同じ仕事をするのなら、知識が少ない方が、得られる金は多くなる」ことが導かれます。
また、この法則は、別の事実も示します。
第三の式を「知識=仕事÷時間」という形に直してみましょう。
この式は、「仕事を短時間で片付けるほど、得られる知識は多くなる」ことを表します。
すなわち、「社員教育と称して、給料をもらいながら勉強させてもらえるのならこれに勝ることはないけれど、そんなことをしてくれる会社は極めて希有なので、とっとと仕事を終わらせて余った時間で勉強した方が、より多くの知識を得られる」ということになります。
加えて、「時間=仕事÷知識」ですから、「知識が増えるほどに、仕事にかかる時間は減り、それによってより多くの知識を得られる」という好循環が待っています。
しかし、忘れてはなりません。
時間と金はイコールであり、従って、時間が半分になれば金もまた半分になるのです。
ここからは、「仕事を短時間で片付けるなんてもってのほか、時間をかければかけるだけ金は儲かる」という事実も浮かび上がってきます。
要するに、余暇を捨てて時間を残業につぎ込むことが、金を稼ぐ道だということです。
「仕事=知識×金」なのですから、仕事の総量が同じなら、知識と金はトレードオフの関係にあるのです。
繰り返しになりますが、「金=仕事÷知識」から、前述の好循環には、「知識が増えるほどに、得られる金は減る」という裏側があることがわかります。
知識をとれば貧乏になり、金をとれば馬鹿になります。
世の中、知識では食っていけないということです。知的労働って何でしょうね?
まぁ少なくとも、会社からこんなエントリを書いている俺は、明らかに拝金主義の「痴的労働者」だということは明らかなようですが。
ちょっと間が空いてしまいましたが、連載第2回です。
今回は、前回作ったメッセージ リソースを使うコードを紹介します。
前回までで、以下のようなプロジェクトができているはずです。
これに、ソース ファイルを追加しましょう。
ファイル名は MsgRes.cpp とでもしておきます。
で、いきなりですが中身を公開します。
#include <windows.h>
#include <stdio.h>
#include <locale.h>
#include <tchar.h>
#include "MsgRes.h"
int _tmain()
{
setlocale( LC_CTYPE, "japanese" );
LPTSTR msg = NULL;
DWORD result = FormatMessage(
FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, MSGID_SAMPLE_0001, MAKELANGID( LANG_JAPANESE, SUBLANG_DEFAULT ),
reinterpret_cast< LPTSTR >( &msg ), 0, NULL );
if( result != 0 )
{
_putts( msg );
LocalFree( msg );
}
setlocale( LC_CTYPE, "english" );
result = FormatMessage(
FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, MSGID_SAMPLE_0001, MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ),
reinterpret_cast< LPTSTR >( &msg ), 0, NULL );
if( result != 0 )
{
_putts( msg );
LocalFree( msg );
}
return 0;
}
はい。みんな大好き FormatMessage です。
GetLastError が返すエラーコードを文字列化するのにしか使ったことがない方も少なくないと思います。
今回は、第一引数に FORMAT_MESSAGE_FROM_HMODULE を指定し、第二引数に NULL を指定しています。
この場合、呼び出し側プロセスの EXE モジュールのハンドルを指定したのと同じことになります。
MSGID_SAMPLE_0001 は、前回 MsgRes.mc で定義し、メッセージ コンパイラによって MsgRes.h に書かれているメッセージ識別子です。
続いて言語識別子を指定しています。これは MsgRes.mc の LanguageNames で指定した値です。
言語識別子を変えることで、同じメッセージ識別子でも違うメッセージが取得できているのが分かると思います。
本題は以上です。以下、ちょっとしたオマケ。
メッセージ コンパイラが生成した MsgRes.rc を開いてみると、以下のような、なんともそっけないコードになっています。
LANGUAGE 0x11,0x1
1 11 "MSG_JA.bin"
LANGUAGE 0x9,0x1
1 11 "MSG_EN.bin"
これでは何だかわからん! という方のために、もう少し読みやすく書き換えてみます。
ただし、このファイルはもう一度メッセージ コンパイラを実行すれば上書きされてしまうので、別のリソース ファイルを作りましょう。
MsgRes.rc を一旦プロジェクトから除外し、新しいリソース スクリプトを MsgRes2.rc とでも名づけて作成しましょう。
そうしたら、リソース ビューで MsgRes2.rc を右クリックして「リソース ファイルのインクルード」を選択します。
出てきたダイアログに、以下のように入力しましょう。
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
1 MESSAGETABLE "MSG_JA.bin"
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
1 MESSAGETABLE "MSG_EN.bin"
これで、言語も、メッセージ リソースだということもわかりやすくなりますね。
ただし、リソース コンパイラは MESSAGETABLE というキーワードを理解しますが、Visual C++ のリソースエディタは理解しません。
というかそれ以前に、このダイアログで入力した内容は、リソース ビューに表示されません。
このダイアログを使わずに、MsgRes2.rc を直接書き換えても、リソースの種類は "11" と表示されるだけです。ちょっとさみしいですね。
次回は、挿入シーケンスの使い方と、エラー コードに対するメッセージを定義する方法を解説します。