マイクロソフトさんでは、スタートアップ向けに 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