マイクロソフトさんでは、スタートアップ向けに BizSpark というプログラムをやってます。起業はしたものの何かと物入りで、開発環境やらをそろえるのも結構大変だったりするわけですが、その辺をサポートしてくれる、という位置づけになります。あと、うれしいのは Windows Azure の無償利用特典が提供される、というところ。日々出て行くコストはできるだけ抑えたいものです。

弊社もそれほど余裕いっぱいというわけではないので、BizSpark に参加することにしました。ということで、申し込みをしてみると、さっそく登録完了です。翌日、というか、正味 12 時間ほどしかかかってません。こんなにすんなり行くとは思ってなかった ( いろいろ確認やら手続きやらがあるのかと思ってました ) ので、ちょっとびっくり。
さて、これからも今まで以上に頑張っていきたいと思います。
Kindle Fire が発表されてました。さっそくポチっと予約しようと思ったんですが、『US Only』とのこと。残念...。International Shipping になったら買おうかなぁ。
ブラウザのレンダリングを EC2 でやる、というある意味無茶苦茶なテクノロジー ( Amazon Silk ) とか、なかなか興味深いです。
新しい PC が届いたので、この週末は移行作業をやってました。SSD につけかえて Windows 7 をインストールして、バックアップしてあったデータ類を戻してと。
いつもは外付け or 内蔵 HDD からの戻しなのでさほど時間もかからないんですが、今回は諸事情により NAS からの戻し、ということで、えらい時間がかかってしまいました。
ともあれ、なんとか移行が終了しての感想は、『画面がきれい』です。ちょっとピンクとか緑とかが強すぎる気もしますけど、ま、そのうち慣れるでしょう。Windows エクスペリエンスインデックスは Aero が 5.9 と。さくさく動いていい感じです。
海の向こうでは build というイベントをやってるそうで、Windows 8 Developer Preview がダウンロードできるようになってます。ということで、さっそくダウンロードして、いつものように VMware にインストール、と思ったら、悲しい青画面が ( ちょっとかわいい )。
せっかくなので、VirtualPC で画面キャプチャだけ撮ってみました。

困ったもんだということで、さらっとググってみますと、VirtualBox では問題なくインストールできるとのこと。あわせてダウンロードして、さくっとインストールしてみました。画面としてはこんな感じ ( 枠の部分は VirtualBox のものです )。

Internet Explorer 10 ( Metro の方 ) はこんな感じです。アドレスバーな画面下にあったりと、なんか変な感じ。デスクトップの方は、割と今までのバージョンと違わない感じですけどね。

で、さらっと使ってみた感想ですが、いやー思い切ったもんですね。Windows 3.1 から Windows 95 への変化、なんてものじゃなくて、まったく別のオペレーティングシステムになってます。正直、ここまでやるとは思ってませんでした。
最近のマイクロソフトは『オトナ』になっちゃってて、いまいち、つまらない製品ばっかり、な印象だったんですが、えらい変わりようです。これがそのまま製品になる、とはとても思えませんが、すっごい楽しみ。久しぶりにわくわくする新 OS、って感じです。
不調だったモニタですが、ついにお亡くなりになった模様です。何も映らなくなりました。そういえば、ほとんど使ってなかった ナナオのモニタ があったので、今はそれを使って急場をしのいでます ( 1680 × 1050 と、ちょっと小さいですが、文句も言ってられません )。
そうそうあるトラブルではないでしょうけど、そういえば、解像度の設定をミスって何も映らなくなって、手探りで解像度設定を元に戻した、なんてこともやった記憶が。
とりあえず、新しい PC が来るまではこんな感じ堪え忍びます。
長いこと使ってきた Thinkpad W500 のモニタが不調です。なんか画面がちらちらします。急にスリープしたようにブラックアウトしたり ( でも、HDD とか動いてます ) と。
とりあえず、メインの ATI Mobility FireGL の方を無効にして、オンボードの VGA でごまかしてますが、いつだめになるのやら。ということで、久しぶりにラップトップをポチっとしました。ほんと、Thinkpad はもうそろそろ卒業か、とか思いつつ、やっぱり Thinkpad です。今度は T520 ってのにしてみました。
15 インチなんですが、HD とかってことで、1920 × 1080 の画面サイズしかないんですね。今使ってるやつが 1920 × 1200 なので、縦がちょっと寸詰まりになると。ま、その辺はしょうがないです。新しいのが届くまで、今のやつが無事使えることを祈りつつ...。
ここのところ、SetupDi 系の API とかを使ってデバイス情報を取得したりする、ってのをやってました。で、一応の成果をば。デバイスはツリー構造になっているので、ツリーをたどっていくといろいろ引っ張れます。この例では、CM_Get_Child() とか CM_Get_Sibling() 関数を使って、Computer クラスのデバイス ( ACPI x64-based PC ) から、その子供と子供の兄弟を取得しています。
#include "stdafx.h"
#include <Windows.h>
#include <locale.h>
#include <setupapi.h>
#include <cfgmgr32.h>
#include <devguid.h>
#pragma comment (lib, "setupapi.lib")
#define PRINTSPC \
for (int i = 0; i < level; i++) { _tprintf(_T(" ")); }
DEVINST _getPcDevInst() {
HDEVINFO hDevInfo;
DWORD idx;
SP_DEVINFO_DATA sdd;
BOOL result;
TCHAR buffer[1024];
DWORD size;
hDevInfo =
::SetupDiGetClassDevs(NULL, NULL, NULL,
DIGCF_ALLCLASSES);
idx = 0;
while (true) {
sdd.cbSize = sizeof(SP_DEVINFO_DATA);
result =
::SetupDiEnumDeviceInfo(hDevInfo,
idx, &sdd);
if (!result) {
break;
}
if (sdd.ClassGuid == GUID_DEVCLASS_COMPUTER) {
size = sizeof(buffer) / sizeof(TCHAR);
::SetupDiGetDeviceRegistryProperty(
hDevInfo,
&sdd,
SPDRP_DEVICEDESC,
NULL,
(PBYTE)buffer,
size,
&size);
_tprintf(_T("[%s]\n"), buffer);
return sdd.DevInst;
}
idx++;
}
return NULL;
}
void _getChild(DEVINST current, int level) {
TCHAR bufDesc[1024];
TCHAR bufName[1024];
DWORD size;
DEVINST di;
CONFIGRET result;
result = CM_Get_Child(&di, current, 0);
if (result == CR_SUCCESS) {
bufName[0] = _T('\0');
size = sizeof(bufName) / sizeof(TCHAR);
result =
::CM_Get_DevNode_Registry_Property(
di, CM_DRP_FRIENDLYNAME, NULL,
bufName, &size, 0);
size = sizeof(bufDesc) / sizeof(TCHAR);
result =
::CM_Get_DevNode_Registry_Property(
di, CM_DRP_DEVICEDESC, NULL,
bufDesc, &size, 0);
if (result == CR_SUCCESS) {
PRINTSPC;
_tprintf(_T("+ [%s] %s\n"), bufDesc, bufName);
}
_getChild(di, level + 1);
while (true) {
result = CM_Get_Sibling(&di, di, 0);
if (result != CR_SUCCESS) {
break;
}
bufName[0] = _T('\0');
size = sizeof(bufName) / sizeof(TCHAR);
result =
::CM_Get_DevNode_Registry_Property(
di, CM_DRP_FRIENDLYNAME, NULL,
bufName, &size, 0);
size = sizeof(bufDesc) / sizeof(TCHAR);
result =
::CM_Get_DevNode_Registry_Property(
di, CM_DRP_DEVICEDESC, NULL,
bufDesc, &size, 0);
if (result == CR_SUCCESS) {
PRINTSPC;
_tprintf(_T("+ [%s] %s\n"), bufDesc, bufName);
}
_getChild(di, level + 1);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Japanese");
_getChild(_getPcDevInst(), 1);
return 0;
}
で、結果として得られるのがこんな感じのツリーです。『結構いい感じじゃん』とか思ってたんですが、よくよくデバイスマネージャを確認してみると、[ 表示 ] メニューで [ デバイス ( 接続別 ) ] ってのを選ぶと、これと同じような結果が得られることに気づきました ( もちろん、プログラムを作ってから )。
骨折り損のくたびれもうけとはまさにこのこと。ま、『プログラムから取得できる、ってことに意義がある』ということにしといてください。なお、↓ では、諸事情により一部カットしてあります。USB とかディスクドライブのツリーがおもしろい感じですね。
[ACPI x64-based PC]
+ [Microsoft ACPI-Compliant System]
+ [Intel Processor] Intel(R) Core(TM)2 Duo CPU T9600 @ 2.80GHz
+ [Intel Processor] Intel(R) Core(TM)2 Duo CPU T9600 @ 2.80GHz
+ [PCI バス]
+ [Mobile Intel(R) 4 Series Chipset PCI Express Root Port - 2A41]
+ [ATI Mobility FireGL V5700 ]
+ [ThinkPad Display 1920x1200]
+ [Mobile Intel(R) 4 Series Express Chipset Family]
+ [Intel(R) 82567LM Gigabit Network Connection]
+ [High Definition Audio コントローラー]
+ [Conexant 20561 SmartAudio HD]
+ [ThinkPad Modem Adapter] ThinkPad Modem Adapter
+ [Intel(R) ICH9 Family USB2 Enhanced Host Controller - 293A]
+ [USB Root Hub]
+ [USB 大容量記憶装置]
+ [ディスク ドライブ] LaCie BigDisk USB Device
+ [Apple Mobile Device USB Driver] Apple Mobile Device USB Driver
+ [Apple iPhone] Apple iPhone
+ [Intel(R) ICH9M/M-E Family 4 Port SATA AHCI Controller - 2929]
+ [IDE チャネル] ATA Channel 0
+ [ディスク ドライブ] M4-CT512M4SSD2 ATA Device
+ [IDE チャネル] ATA Channel 1
+ [ディスク ドライブ] Hitachi HTS547575A9E384 ATA Device