Windows Vista以降のドライバのアンインストール

Windows Vista以降のOSではDriverStore(C:\Windows\System32\DriverStore)という特殊なフォルダにインストールしたドライバのコピーが保管されており、ハードウェアが接続したときにこのフォルダからドライバが検索されインストールされます。そのためdrivers(C:\Windows\System32\drivers)からファイルを削除したり、デバイスマネージャからドライバをアンインストールしただけでは、再起動時にドライバが再インストールされてしまいます。コンピューターに一度インストールしたドライバを完全に削除するには、pnputilコマンドを使ってDriverStoreからドライバを削除する必要があります。
まず最初に管理者権限でコマンドプロンプトを開き、以下のコマンドを実行します。

pnputil -e

そうすると以下のように現在DriveStoreに登録されているドライバの一覧が表示されます。
画面に表示される一覧からアンインストールするドライバを特定したら、以下のようにコマンドを入力してドライバファイルを削除します。

pnputil -d oem3.inf

デバイスマネージャ上で使用されているドライバは削除できないので、事前にデバイスマネージャもしくはdevcon.exeを使用してドライバをアンインストールするのを忘れないでください。

AmazonS3を使ったバックアップの薦め1

案外、おざなりにされがちなのがデータのバックアップ。Amazon S3を使ったバックアップを紹介します。
なぜインターネットにサーバを借りてまでバックアップを行う必要があるのでしょう?
DVDにデータを保存してあるから、外付けのHDDを購入してデータをコピーしているから、データのバックアップは取っていますと言う人が大多数です。ですがバックアップが同じ場所に置いてあったのでは、災害や盗難のときに同時に失われてしまいます。写真など二度と手に入らない人生の大切な思い出を保存するにはあまりにも脆弱だと思いませんか?
災害からデータを守るには遠く離れた別の場所に保管する必要があるのです。
それと同時にバックアップデータが壊れていない事を補償しなくてはなりません。HDDの寿命は数年、DVDでも10年程度しか持ちません。定期的にバックアップのデータが壊れていない事を確認し、もし壊れていればバックアップを取り直す必要があります。ここまできっちりしたバックアップ環境を個人レベルで手に入れられる数少ない方法がインターネット上のサーバにデータを保管しておく事なんです。
インターネット上でデータファイルを預かってくれるストレージサービスはDropBox、SkyDrive、Google Document,Picasaなど有償無償で様々なサービスが提供されています。ではなぜその中からAmazonS3なんでしょう?
1.容量がほぼ無制限
DropBoxなど無償~使用できるサービスでは、使用可能な容量の上限は5GB程度に制限されています。写真など1枚で数MBになりますから、数百枚の写真をバックアップしようとすると、すぐに無償サービスでは対応できなくなります。追加料金を支払えばディスク容量を拡張する事が出来ますが、それでも容量の上限は数重GB~100GB程度に制限されている事が多いのです。
その点でAmazonS3なら最大で5TBまで・・・ほぼ制限なく利用する事ができます。
2.意外に安い
AmazonS3の容量単価は1GBあたり10¢/Mと他のサービスに比較して割安です。
例えばDropBoxの場合は50GBの契約で、容量単価は20¢/Mです。しかも、DropBoxなど他社のサービスの場合は実際にその容量のファイルを預けているか否かにかかわらず数十GB単位で容量を購入する事になりますが、AmazonS3の場合には実際に使用している容量分しか料金がかかりません。
3.拡張性も高い
AmazonS3を操作するアプリケーションを作れるようにAPIが提供されています。そのおかげでサードベンダーからバックアップ用ソフトが有償無償で提供されています。これらのアプリケーションを活用することで、自分好みの使い勝手を得ることができます。

コマンドラインからドライバをインストールする

コマンドラインからデバイスドライバのインストール/アンインストールを行うには二つの方法があります。ひとつはrundll32を呼び出してINFファイルのDefaultInstallセクションを実行する方法。もうひとつはマイクロソフトが無償で配布しているコマンドラインからデバイスマネージャ相当の事を行うツール(devcon)を使用する方法です。

rundll32を使用する

インストール:
rundll32.exe  syssetup,SetupInfObjectInstallAction DefaultInstall 128 sample.inf
アンインストール:
rundll32.exe  syssetup,SetupInfObjectInstallAction DefaultUninstall 128 sample.inf

rundll32.exeのコマンドラインパラメータに上記のように指定します。128という数字はインストール動作を指定するオプションです。インストール後に再起動したい場合には129などと指定します。

モード 意味
0 システムが用意した .inf ファイル。
128 .inf ファイルがあるディレクトリを指定。
+0 コンピュータを再起動しない。
+1 コンピュータを再起動する。
+2 ユーザに確認をとってから再起動する。
+3 必要があればユーザの同意を得ずに再起動する。
+4 必要があればユーザに確認をとってから再起動する。

残念ながら、この方法はすべてのドライバに使えるわけではありません。DefaultInstallセクションが記述されているINFファイルだけに使えます。DefaultInstallが記述されてない場合にはエラーになります。
アンインストールを行いたい場合には、同じようにDefaultUninstallセクションを呼び出します。

devconを使用したインストール

devconはMicrosoftが配布するコマンドラインツールです。こちらのURLからダウンロードできます。

インストール:
devcon.exe  install sample.inf
devcon.exe  update sample.inf
アンインストール:
devcon.exe  remove sample.inf 

デバイス名に”&”などが含まれる場合には、デバイス名をダブルクォーテーションで囲む必要があります。
レガシーデバイスの場合にはinstallコマンドで、PnPデバイスの場合にはデバイスを装着した状態でupdateコマンドを使用します。

Excelで計算がされない

Excelで複雑な計算式を多数入力していると、自動計算やF9による再計算で、一部の数式が再計算されずに正しい値を表示しない事があります。
CTRL+ALT+SHIFT+F9で再計算する
Excelは値が変更されたセルや、再計算が必要なセルを記憶しており、必要最低限の計算量で再計算をおこなうようになっています。稀にこれが正しく動作せずに再計算が行われなくなる場合があります。この場合はCTRL+ALT+SHIFT+F9を押すことで、変更されているか否かにかかわらず、すべての式を計算します。これによって次回から変更されたセルに関する情報がリセットされ、正しい計算結果を返すようになります。
数式のどこかにエラーがある
数式のどこかで循環参照などのエラーがあると、そこで計算をやめてしまい、その他の式が計算されなくなる場合があります。この場合は循環参照を起こしている数式を正しく修正することで、正しい値を返すようになります。

平成23年度春期情報処理技術者試験

延期が発表されていた平成23年度春期情報処理技術者試験ですが、ようやく詳細がきまったようで。
平成23年度特別情報処理技術者試験(仮称)の実施について
・6月~7月に実施される特別試験を受験する。
・次回(受験区分によって10月または4月)の試験を受験する。
・受験を取りやめ返金を受ける。
の中から三択となるそうです。
特別に手続きをせずに放置すると、6月実施の試験を受ける者として処理するとのこと。
被災者については、期限を過ぎても柔軟に返金に対応するそうです。
・・・とりあえず、6月に受験しますかね。

Windows Vista以降でサービスから画面を表示する

Windows VISTA以降のWindowsではセッション0分離の機能により、サービスから直接UIを表示することができなくなりました。Microsoftの互換性情報では代替手段として「ユーザーログイン時に常駐プロセスを起動しサービスと通信を行う。」「WTSSendMessage関数を使用してメッセージボックス相当の表示を行う。」「CreateProcessAsUserを使用してログインユーザー権限でアプリケーションを起動する。」の三つの方法が提示されています。ここでは最後の「CreateProcessAsUserを使用してログインユーザー権限でアプリケーションを起動する。」サンプルを提示します。
サービスから画面を表示するにはRemote Desktop Services APIを使用します。
WTSGetActiveConsoleSessionId関数で物理コンソールのセッションIDを取得します。
WTSQueryUserToken関数で取得したセッションIDのユーザートークンを取得します。
DuplicateTokenEx関数で取得したユーザートークンを複製し、プライマリトークンを作成します。
CreateEnvironmentBlockを使用してユーザーの環境変数を取得します。
CreateProcessAsUser関数を使用して画面を表示するプロセスを起動します。

BOOL    bRet(FALSE);
HANDLE  hUserToken(INVALID_HANDLE_VALUE);
if (::WTSQueryUserToken(WTSGetActiveConsoleSessionId(), &hUserToken))
{
    SECURITY_ATTRIBUTES sa;
    memset(&sa, 0x00, sizeof(sa));
    sa.nLength	= sizeof(SECURITY_ATTRIBUTES);
    HANDLE	hDupedToken(INVALID_HANDLE_VALUE);
    if (::DuplicateTokenEx(hUserToken, 0, &sa, SecurityIdentification, TokenPrimary, &hDupedToken))
    {
        PVOID	lpEnvironment(NULL);
        if (::CreateEnvironmentBlock(&lpEnvironment, hUserToken, FALSE))
        {
            STARTUPINFO stStartUpInfo;
            memset(&stStartUpInfo, 0, sizeof(STARTUPINFO));
            stStartUpInfo.cb        = sizeof(STARTUPINFO);
            stStartUpInfo.lpDesktop = _T("winsta0¥¥default");
            PROCESS_INFORMATION ProcessInfo;
            memset(&ProcessInfo, 0, sizeof(PROCESS_INFORMATION));
            ::CreateProcessAsUser(hDupedToken, _T(""), (char*)(const char*)strCmd, NULL, NULL
                    , FALSE, CREATE_UNICODE_ENVIRONMENT, lpEnvironment, NULL, &stStartUpInfo, &ProcessInfo);
        }
    }
}

スマートフォン お財布ケータイ まだぁ?

IS03を購入して一月以上が経過しようとしているけど、各サービス会社のお寒い対応状況はどうにかならないんでしょうか?
Edyは2011年1月対応予定だけど、28日現在アナウンスなし。常識的に考えて休日にサービスインはないと思うから、31日にサービスインなんだろうか?
マクドナルドは2010年12月対応予定だったけど、さりげなく2月以降に対応予定と変更。一応は代替手段ということなのだろうか、12月から見せるタイプのケータイクーポンアプリを提供してはいる。でも、ガラパゴス お財布ケータイ向けに提供していたポイントサービスはまだスタートできていない。
QUICPayは2011年3月以降対応予定。だがEdyやマクドナルドの状況を見ていると、本当に対応できるのか不安になる。
SUICAに至っては、2011年上半期対応予定。なかなかの思いっきりのよさだと思う。SUICAはオンライン予約機能なんかもあって非常に多機能なので、時間がかかるのは致し方ないか。
nanacoは2011年中対応予定だ。ここまでくると、もはや清清しい。セブンイレブンもクレジットカードや各種電子マネーに対応したし、nanaco的にはもうどうでもいいのかもしれない。
・・・で、Edyやマクドナルドの状況を見ていると不安になってくるのだが、もしかしてスマートフォン お財布ケータイのAPIって、もしかしてかなり出来が悪いの?お財布ケータイ機能を売りにするなら、そろってサービスインが当然だと思うのだけど、なんかズルズル後ろに伸びそうだし、何か根本的な問題でもあるのかなぁと。

Wikipedia 開設10周年

Wikipedia開設から10周年らしい。実のところ、私もこっそり記事を追加したことがある。当時書いた記事の面影は今でも残っている。
今回はじめて知ったのだが、Wikipediaを開設したジミーウェールズ、彼はWikipedia以前にもオンラインの百科事典を作ろうとしたことがあったのだそうだ。そのオンライン百科事典はNupediaという名称で、記事の信頼性を確保するため執筆者は最低限博士号保持者で、同じく博士号を持つ査読者がチェックし、七段階のチェックを経て公開するというもの。開設三年後に閉鎖することとなったのだが、あまりにも敷居が高すぎたためか、その時点での記事の数はわずか24本だったそうな。
Wikipediaはそんな彼が再び作った、もうひとつのオンライン百科事典だったわけです。Wikipediaの記事は信頼性が無いとか、特定分野に偏りすぎているとか批判されていますが、そうならないためのチェック体制を備えたNupediaはプロジェクトとして頓挫したあたり、なかなかに皮肉な話だと思います。
Nupediaの意思はNupedia社員でWikipediaの共同設立者だったラリーサンガーの手によって、Citizendiumに引き継がれています。こちらは執筆者および編集者は実名公開が原則になっており、履歴書などを提出して十分な知識があることを証明しなくてはならないそうです。こちらは1万ほどの記事が公開されているそうです。もっとも出典:Wikipediaな記事も少なくないようですが。

Hello Android 2:Hello Worldを作ってみる

・・・と言っても、HelloWorldは日本語のページが用意されています。なので、公式のHelloWorldでは書かれていない事を中心に書いていこうと思います。
AVD(仮想Android)の作成
まずはAVD(Android Virtual Device)なるAndroidの仮想OSを設定します。通常はこの仮想OS上でデバッグをおこないます。コマンドプロンプトを起動して、Android SDKのをインストールしたフォルダ配下のToolsに移動します。ここで”android create avd –target 2 –name my_avd”と入力するとAVDが作られます。パラメータ無しでandroidと指定するとGUIが起動するので、私としてはGUIを使うのがお勧めです。
GUIを起動してVirtual Devicesを選択して、Newボタンをクリックします。表示されたダイアログから、AVDの名称、Androidのバージョン、使用メモリ、画面サイズなどを指定してCreate AVDボタンをクリックします。これでAVDが作成されます。作成したAVDを選択してStartボタンをクリックすると、AVDが起動します。
作成したAVDを初めて起動する時には、相当に時間がかかります。何分と言うレベルではなく、何十分も待つ事になるので気長に待ってください。

Hello Android 1:SDKのインストール

いままでスマートフォンを避けて来たのだけれど、IS03の発売を記念してAndoroid Programmingを始めてみようと思う。
Androidの開発者向けの情報はAndroid Developersにあります。幸いな事に一部の情報は日本語で提供されているので、あまり躓かずにスタートできると思います。
まずは開発環境の構築です。
Android用のアプリケーションは原則としてJavaで開発します。そのためにJDKの5.0または6.0が必要です。OracleのJavaホームページからJDKをダウンロードします。ここではJava SE JDK 6 Update 22を使う事にします。インストーラをダウンロードしたら、jdk-6u22-windows-i586.exeを実行しWizardに従ってインストールしていきます。
Android用の等号開発環境には原則としてEclipseを使います。ダウンロードサイトには様々な開発言語に合わせたパッケージが用意されていますが、あまりオオーバースペックなパッケージをダウンロードすると重たさに苦鳴をあげることになります。ここは無難にEclipse IDE for Java Developersあたりにしておきます。EclipseのインストールはダウンロードしたZIPファイルをインストール先のフォルダに解答するだけです。解凍後にEclipse.exeを起動すると開発環境が立ち上がります。
続いてAndroid SDKをインストールします。Android SDK ダウンロードページからWindows用のZIPファイルをダウンロードします。ダウンロードしたZIPファイルをSDKのインストール先フォルダに解凍し、SDK Manager.exeを実行します。あとはWizardにしたがってインストールするだけです。
android_sdk_install
最後にEclipseにAndroid用のプラグインをインストールします。Eclipseを起動してメニューの”Help->Install New Software”を選択して、表示されたダイアログの”Work With”にプラグインのダウンロード元URLとして”https://dl-ssl.google.com/android/eclipse/”を入力すると、名前にインストールするプラグインが表示されます。表示されたプラグインにチェックを付けたら、ウィザードに従って次に進めていってください。
eclipse_plugin
Pluginのインストールが終わったら、Eclipseを再起動してください。Eclipseのメニューの”Window->Setting”を選び設定画面を開きます。Androidという項目が増えているので、Android SDKのインストール先フォルダを指定して適用します。
eclipse_setting
以上で開発環境の準備は完了です。