[Memo] Linux on Hyper-V

メモ書き程度に。

Hyper-V のゲスト OS として、Linux を動かすことができます。マイクロソフト社による一次情報としては、以下のページにサポート OS の一覧があります。

http://www.microsoft.com/windowsserver2008/en/us/hyperv-supported-guest-os.aspx

2011 年 1 月現在、サポートされている環境としては、SUSE と Redhat のエンタープライズ版のみ。個人では入手不可能ですね。試しに、前回の記事で使った Ubuntu をインストールしてみたところ、動作しました。

前回の記事

Windows Server の SNMP エージェント機能と net-snmp の連携 Part1
Windows Server の SNMP エージェント機能と net-snmp の連携 Part2

環境は以下の通りです。

  • ゲスト OS : Ubuntu 10.10 Desktop Edition 英語版
  • ホスト OS : Windows Server 2008 R2 (x64) 英語版 SPなし
  • ホスト CPU : Core 2 Duo

注意点としては以下の通りです。

  • NIC は Legacy Network Adapter を使う
  • RAM サイズ、HDD サイズを小さめにすると起動しないことがある(原因不明)
  • 再起動の処理をすると、ブートできなくなることが多い(原因不明)
    シャットダウンしてから起動すれば問題なし
  • 統合機能は使えない

不穏な動作が多いです。

Legacy Network Adapter についてですが、デフォルトで設定されている Network Adapter を削除した上で、Add Hardware から Legacy Network Adapter を追加します。確か Windows XP あたりの古い OS も同様にデフォルトだと NIC が認識されなかったような気がします。

image

あとは、前回の記事と同じ手順で、インストール、ネットワーク設定、アップデートなどを行なうことができました。

image

広告

[DIY] サムソナイトのキャスター修理

たまには PC と関係ない話題も。Windows やら SAP やら、ネタは溜まっているのだけど、ブログ記事に書き起こすのは背景調査など、けっこう時間をかけたいので。

使って 7~8 年ほど愛用しているサムソナイトのキャリーバッグのキャスターのゴム部分が摩耗して、外れてしまいました。夏と冬の帰省、スノーヴァ溝ノ口に行くとき、仕事での出張など、かなり酷使し続けましたが、年末年始に帰省した際、片側が壊れ、今度は帰りにもう片方が壊れました。まさか左右同時に逝くとは。

CIMG1243 CIMG1242

左は完全にゴム部分が取れて、右はかろうじて一部残っています。本体に影響はなく、また、キャスターそのものは無事なので、そのまま使えないこともないですが、そうするとキャスターそのものが壊れそうです。

正規ルートで修理に出す場合の値段等を調べるため、インターネット検索すると、同じような破損に遭遇している人が多い。やっぱりまずはゴム部分が摩耗するのね。気になるお値段は、キャスター一個につき約 4,000 円で、送料が加わるらしい。いくら愛着のあるキャリーバッグとはいえ、10,000 円はきついなー。これは TSA ロックがついていないので、基本的には国内旅行用で、ブランドに拘らなければ安く一個買えるし。

同様の考えに至って、自分で修理している人がけっこういることも分かった。

http://memo.blogzine.jp/memo/2010/06/post_4e23.html
http://www.j-love.info/ino/archives/20091129_repair_wheels_of_suitcase.html
http://ameblo.jp/kimi-web/entry-10299301571.html
http://okseveryday.blog65.fc2.com/blog-entry-141.html

そんなわけで DIY することに。

写真からも分かるように、このキャリーバッグはキャスタが本体に埋め込まれていて、キャスターを取り外すのは不可能。本体からはみ出しているタイプであれば、車輪だけ買ってきて付け替えられるのだけど、これは無理。

ゴム状の素材を買ってきて接着剤で張り付けるか、シューグーなどの樹脂を縫ってゴム代わりにするか。そこでふと思いついたのが、これ。

CIMG1247 じゃーん

室内洗濯機置場がない部屋に住んでいた時に使っていた単なるゴムホース。今は使っていない。

これを切って、ホイールに張り付ければよくね?

我ながら素晴らしい発想だと勝手に思い込み、近所のホームセンターで接着剤を買いに行くことに。売り場で、接着剤の種類が多すぎて困る。で、これを買った。

アロンアルファ 耐衝撃 EXTRA。400 円ぐらい。
http://www.aronalpha.com/consumer_products/product_search/category/ex_shock.html

まず、ホースを適当な長さ、幅に切ります。意外と柔らかいため、カッターやはさみで簡単に切れます。

CIMG1248 びろーん

接着剤をホースにつけます。付け過ぎると逆に接着しにくくなるので注意。

CIMG1253

張り付けます。とりあえずスズランテープで固定。

CIMG1255 CIMG1258

数分で大体乾きますが、しばらく放置。
数時間ほどして、端っこのほうにもう一度接着剤をつけて固定。

ゴムが伸びる可能性を考慮し、若干短めにしてあります。右側は、もとのゴム部分は残しておきました。

CIMG1259 CIMG1261

あれ、いい感じじゃね?微妙に右側のゴムが歪んでるけど。

CIMG1262

明日試しに使ってみる。そして来週末はスキー合宿で使う。さて大丈夫だろうか。

—- added on 2011/1/31

使用後。

CIMG1298

大雪の中、15分ぐらい引きずったけど、耐久性、耐水性ともに問題なし。アロンアルファすごい。ホースも耐久性あるみたいだし。

[Win32] [C++] id3lib を使ってみる

2011年、明けましておめでとうございます。今年初記事は、しばらく続いていた SAP ではなく、Visual Studio ネタで。

多くの人が MP3 形式の音楽ファイルを利用していることでしょう。このファイル形式には、曲名やアーティスト情報、いつの間にやら画像も含めることができるようになっています。携帯音楽プレーヤーなどで再生すると、曲情報やらCD のジャケット写真やらが表示されていい感じです。iTunes, Winamp などのプレーヤーはもちろん、Windows などの OS でも標準で曲情報の編集機能がついて、便利になりました。

MP3 以外の音楽ファイルについては調べていませんが、このようなメタ情報をファイルに付加する形式には幾つかあり、MP3 の場合は ID3 という形式が有名だったりします。

http://ja.wikipedia.org/wiki/ID3%E3%82%BF%E3%82%B0

この情報をプログラムから使いたい場合、フォーマットを調べてがりがり編集するのも手ですが (ID3 は、思ったより複雑なフォーマットではないらしいが・・・)、世の中にはきっと便利なライブラリがあるに違いなく、そういうのを利用するのが手っ取り早いです。

ID3.org のサイトを真面目に読むと、以下のページで幾つかのライブラリが紹介されています。検索すると、他にも多数のライブラリが存在していそうですが、まあ本家の情報が一番信頼できると思いますので・・・

http://www.id3.org/Implementations

最終的には、Win32 コンソールのアプリケーションを作るのが目的なので、C++ のライブラリである ID3Lib を使います。それにしても Win32 から ID3 ライブラリを使うための情報が少ないこと少ないこと!

http://id3lib.sourceforge.net/

とりあえず、2011 年 1 月 2 日の最新バージョンは 3.8.3 らしい。というか 2003 年で更新がストップしている・・・。とりあえず id3lib-3.8.3.zip をダウンロード。ファイルを解凍すると、昔懐かしい dsw, dsp といった拡張子のファイルがある。Visual Studio 6.0 か!動くだろうか。

win32.readme.first.txt を参考にシナリオ B を試すが、スタティック リンクだと Unicode でプロジェクトをビルドするときに、シンボルが被ったり足りなくなったりでうまくいかないため、ダイナミック リンクに変更。シナリオ C は以下。

C)***Your project wants to link id3lib dynamic: (instructions below for vc)
1) Rename config.h.win32 to config.h
2) include prj/id3lib.dsp and zlib/prj/zlib.dsp to your workspace (*note this is a different id3lib than above)
3) make your project dependend on id3lib, and make id3lib dependend on zlib
4) Add /D ID3LIB_LINKOPTION=3 to your project options (settings, C/C++ tab) (*note this is a different option than above)
5) Add the following include dirs to your program:
   /I <path_to_id3lib>\\include /I <path_to_id3lib>\\include\\id3 
6) (add your code which uses id3lib)
7) Compile.
8 ) dump id3lib.dll in your programs project dir.
9) distribute your program including id3lib.dll
(MS recommend you distribute it in your programs dir and not in system(32) to avoid version conficts)

(win32.readme.first.txt より抜粋)

作業はこんな感じ↓

  1. id3lib-3.8.3\config.h.win32 を config.h にリネーム
  2. id3lib-3.8.3\prj\id3lib.dsw を手元にある Visual Studio 2010 で開いてプロジェクトを変換
    (id3lib, zlib という 2 つのプロジェクトが含まれている)
  3. 作ろうとしているソリューション mosea に、変換したプロジェクト prj\id3lib.vcxproj と zlib\prj\zlib.vcxproj を追加
    image
  4. ソリューション設定からプロジェクトの依存関係を設定 (mosea ← id3lib ← zlib)
    image image
  5. mosea プロジェクトの、コンパイラ設定で定数を定義 (/D ID3LIB_LINKOPTION=3)
    image image
  6. include の検索ディレクトリに id3lib の所定のディレクトリを追加
    image image
  7. インポートライブラリをリンク
    image image
  8. ソリューションをビルド!
    Debug も Release もエラーなし。
    image image
  9. 最後に、ビルド後のイベントとして DLL ファイルを mosea プロジェクト側にコピーするコマンドを追加しておきます。
    image image
    こうしておくと、DLL を所定の位置にコピーし忘れることがありません。
    image

これでライブラリを使える環境が整いました。"Hello, ID3Lib" 的なプログラムとして、アーティスト情報を表示するコードを書いてみました。作りかけ感たっぷりですが、これでも 1 時間ぐらいかかったような。

//
// main.cpp
//

#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <id3.h>

using namespace std;

bool ParseParameters(int argc, wchar_t *argv[]);
bool ID3_Get(LPCSTR);
bool ID3_Set(LPCSTR);

/*

Usage:
mosea.exe [options] [set|get]

Options:
-f <file>

Example:
mosea.exe -f c:\hogehoge.mp3 get

*/

bool ParseParameters(int argc, wchar_t *argv[]) {
    if ( argc<=1 || argc%2!=0 ) {
        goto help;
    }
   
    int argCmd= 0;
    if ( wcscmp(argv[argc-1], L"get")==0 ) {
        argCmd= 0;
    }
    else if ( wcscmp(argv[argc-1], L"set")==0 ) {
        argCmd= 1;
    }
    else {
        goto help;
    }
   
    char argPath[MAX_PATH];

    for ( int i=1 ; i<argc-1 ; i+=2 ) {
        if ( wcscmp(argv[i], L"-f")==0 ) {
            WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS,
                argv[i+1], -1, argPath, MAX_PATH, NULL, NULL);
        }
    }
   
    if ( argCmd==0 ) {
        ID3_Get(argPath);
    }
    else {
        ID3_Set(argPath);
    }

    return true;

help:
    wcout << endl << L"Usage:" << endl;
    wcout << L"mosea.exe [options] [set|get]" << endl << endl;

    wcout << L"Options:" << endl;
    wcout << L"-f <file>" << endl << endl;

    wcout << L"Example:" << endl;
    wcout << L"mosea.exe -f c:\\hogehoge.mp3 get" << endl << endl;
   
    return false;
}

bool ID3_Get(LPCSTR file) {
    ID3Tag *pITag= ID3Tag_New();
    if ( pITag==NULL )
        return false;

    ID3Tag_Link(pITag, file);

    ID3Frame *pIFrame= ID3Tag_FindFrameWithID(pITag, ID3FID_LEADARTIST);
    if ( pIFrame==NULL )
        return false;

    ID3Field *pIField= ID3Frame_GetField(pIFrame, ID3FN_TEXT);
    if ( pIField==NULL )
        return false;

    char title[1024];
    ID3Field_GetASCII(pIField, title, 1024);

    printf_s("Artist(ASC): %s\r\n", title);   
   
    return true;
}

bool ID3_Set(LPCSTR file) {
    return true;
}

int wmain(int argc, wchar_t *argv[]) {
    if ( !ParseParameters(argc, argv) )
        return 0;

    return 0;
}

大きな問題点として、Unicode に対応していないので、アーティスト情報に Unicode 文字が入っていると正しく表示できません。ええ、試しに Beyoncé の曲を使うと見事に文字化けました。そのへんの対応は ID3Lib の仕様をちゃんと読まないといけないので、即興では無理でした。

>mosea -f 001a.mp3 get
Artist(ASC): Beyonce

>mosea -f 001w.mp3 get
Artist(ASC): フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
フフフフフp琮 ← Beyoncé だと文字化ける

COM っぽい使い方をしていますが、id3\tag.h をインクルードすると C++ クラスも使えるので、後で書き換える予定です。実際 ID3Lib は COM サーバーとしても使えるようなことが書いてありましたが、Win32 からはそのまま使った方が楽なので、そのへんの検証はパス。