« 2006年1月 | トップページ | 2006年3月 »

2006年2月の記事

2006-02-25

BIG EYES, SMALL MOUTH ANIME CARD GAME(BlogPet)

maedaで、購入したかったみたい。
maedaと購入すればよかった?
きのうSnowWhiteが、ひまみたいな購入するはずだった。

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-02-22

今日は通院の日

今日は通院の日。

昼眠いので、薬を減らしてもらう。
セディール10朝昼夕食後1錠、トレドミン25朝夕食後1錠、テグレトール寝る前1錠。トレドミンが減った。

岡山県立図書館
借りていた本を返す。

紀伊國屋書店クレド岡山店。

BOARDWALK岡山店。

岡山一番街弘栄堂書店。

| | コメント (0) | トラックバック (0)

プログラムのメモ

Susie Plug-in の使用に関するメモ。

Susie Plug-in の関数の引数の型は LPSTR であり、UNICODE 版のアプリケーションで呼び出すときは注意が必要である。

Susie Plug-in はダイレクトリンクライブラリ(DLL)の一種であり、呼び出しの方法として「静的リンク」「動的リンク」がある。

静的リンクのメリットは「アプリケーションのコーディングが簡単になる」、デメリットは「特定の Susie Plug-in しか使えない」「Susie Plug-in が特定のディレクトリ(アプリケーションと同じディレクトリ、Windows ディレクトリ、システムディレクトリ、環境変数 PATH で指定されたディレクトリ)になければならない」である。

動的リンクのメリットは「Susie Plug-in が追加されても簡単に対応できる」「Susie Plug-in がパスの通っていないディレクトリに存在していても呼び出せる」、デメリットは「アプリケーションのコーディングが複雑になる」である。

静的リンクの場合

  1. implib.exe などを用いて、インポートライブラリを作成する。
    例: implib ifjpeg.lib ifjpeg.spi
  2. Spi_api.txt を参照して、関数定義をコーディングしておく。
    例: extern "C" int _export PASCAL GetPluginInfo(int, LPSTR, int);
  3. アプリケーション内で関数を使用する。
  4. アプリケーションをリンクする際、1. で作成したインポートライブラリもリンクする。

これでアプリケーションから Susie Plug-in を使うことが出来る。

動的リンクの場合

  1. Spi_api.txt を参照して、関数定義をコーディングしておく。
    例: typedef int (PASCAL *PGETPLUGININFO)(int, LPSTR, int);
  2. あらかじめ SHBrowseForFolder 関数を用いるなどして、Susie Plug-in が格納されているディレクトリを取得しておく。取得したディレクトリはレジストリに保存するなどして次回からも使えるようにしておく。
    #パスが通っていることが確実なら、この処理は不要。
  3. 関数ポインタを定義する。
    例: PGETPLUGININFO fpGetPluginInfo;
  4. LoadLibrary 関数で Susie Plug-in をロードする。
    例: if((hSusie = LoadLibrary(szPath)) == NULL) {
             ... (エラー処理) ...
         }
  5. GetProcAddress 関数で関数ポインタを取得する。
    例: if((fpGetPluginInfo
                 = (PGETPLUGININFO)GetProcAddress(hSusie, TEXT("GetPluginInfo"))) == NULL) {
             ... (エラー処理) ...
         }
  6. 5. で取得したポインタで関数を実行する。
    例: (*fpGetPluginInfo)(1, (LPSTR)szCurPath, sizeof(szCurPath));
  7. Susie Plug-in を解放する。
    例: FreeLibrary(hSusie);

これは非常に手抜きな方法。Spi_api.txt に示されている通り、*.spi ファイルを FindFirstFile、FindNextFile 関数などで列挙しておき、画像ファイルに対して IsSupported 関数でチェック、対応する Susie Plug-in の GetPicture 関数で表示するという処理を入れるべきだろう。
#Spi_api.txt では「*.plg」となっているが、多分これは誤植と思われる。

参考文献:
kana's Home Page

| | コメント (0) | トラックバック (0)

コンプレックス

私にはコンプレックスがある。

岡山で生まれ、岡山で育ったにも関わらず、ちゃんとした岡山弁が話せないことだ。

大学時代、学友に「出身どこ?」と聞かれ、「岡山」と答えると、一要に「え?」という顔をされた。それほど「訛り」を感じさせていなかったのだろう。
#ちなみに、小・中・高・予備校・大学と岡山だった。

今も「東京から帰ってきた人」という感覚が拭えない。

いつか話すだけで岡山の人と認識される人になりたいものだ。

| | コメント (0) | トラックバック (0)

2006-02-21

プログラム試行錯誤(続)

その後判明したフォルダ選択コモンダイアログボックスを表示する方法のまとめ。

// Susie Plug-in設定関数
VOID MySusie(HWND hWnd)
{
    BROWSEINFO bi;
    LPITEMIDLIST lpidRoot = NULL, lpidBrowse = NULL;
    TCHAR szCurPath[MAX_FILE], szPath[MAX_FILE];
    HRESULT hr;
    HINSTANCE hSusie;
    PGETPLUGININFO fpGetPluginInfo;

    // 初期フォルダ設定
    if(lstrlen(szSusie) == 0) {
        hr = SHGetFolderPath(hWnd, CSIDL_PROGRAM_FILES, NULL,
                SHGFP_TYPE_CURRENT, szCurPath);
        if(hr == S_FALSE || hr == E_FAIL || hr == E_INVALIDARG) {
            if(GetCurrentDirectory(sizeof(szCurPath), szCurPath) == 0) {
                MyError(hEdit, TEXT("GetCurrentDirectory"), GetLastError());
                return;
            }
        } else if(hr & 0x80000000) {
            Edit_AddMessage(hEdit, TEXT("error:SHGetFolderPath"), TRUE, TRUE);
            return;
        }
    } else
        lstrcpy(szCurPath, szSusie);

    // COM初期化
    hr = CoInitialize(NULL);
    if(hr != S_OK && hr != S_FALSE)
        return;

    if(SHGetSpecialFolderLocation(hWnd, CSIDL_DRIVES, &lpidRoot) != S_OK)
        goto MySusieEnd;

    // BROWSEINFO構造体設定
    ZeroMemory(&bi, sizeof(BROWSEINFO));
    bi.hwndOwner = hWnd;
    bi.pidlRoot = lpidRoot;
    bi.pszDisplayName = szPath;
    bi.lpszTitle = "Susie Plug-in 格納フォルダを選択して下さい";
    bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN |
                 BIF_RETURNFSANCESTORS | BIF_VALIDATE | BIF_USENEWUI |
                 BIF_NONEWFOLDERBUTTON;
    bi.lpfn = BrowseCallbackProc;
    bi.lParam = (LPARAM)szCurPath;

    // フォルダ選択ダイアログ表示
    if((lpidBrowse = SHBrowseForFolder(&bi)) == NULL)
        goto MySusieEnd;

    // ITEMIDLISTからパス取得
    if(SHGetPathFromIDList(lpidBrowse, szPath) == TRUE) {
        lstrcpy(szSusie, szPath);

        // Susie Plug-inロード
        wsprintf(szPath, TEXT("%s\\"PATH_SPI), szSusie);
        if((hSusie = LoadLibrary(szPath)) == NULL) {
            MyError(hEdit, TEXT("LoadLibrary"), GetLastError());
            ZeroMemory(szSusie, sizeof(szSusie));
            goto MySusieEnd;
        }

        // 関数アドレス取得
        if((fpGetPluginInfo = (PGETPLUGININFO)GetProcAddress(hSusie,
                                            TEXT("GetPluginInfo"))) == NULL) {
            MyError(hEdit, TEXT("GetProcAddress"), GetLastError());
            FreeLibrary(hSusie);
            goto MySusieEnd;
        }

        // Susie Plug-in情報取得
        (*fpGetPluginInfo)(1, (LPSTR)szCurPath, sizeof(szCurPath));

        // Susie Plug-in解放
        FreeLibrary(hSusie);
    } else
        Edit_AddMessage(hEdit, TEXT("error:SHGetPathFromIDList"), TRUE, TRUE);

MySusieEnd:
    if(lpidBrowse != NULL)
        CoTaskMemFree(lpidBrowse);

    if(lpidRoot != NULL)
        CoTaskMemFree(lpidRoot);

    CoUninitialize();

    return;
}

// フォルダ選択ダイアログプロシージャ
INT CALLBACK BrowseCallbackProc(HWND hWnd, UINT msg, LPARAM lp, LPARAM lpData)
{
    TCHAR szPath[MAX_FILE];
    LPITEMIDLIST lpid;

    switch(msg) {
        case BFFM_INITIALIZED:
            if(lstrlen((LPTSTR)lpData) > 0)
                SendMessage(hWnd, BFFM_SETSELECTION,
                    (WPARAM)TRUE, (LPARAM)(LPTSTR)lpData);
            break;

        case BFFM_VALIDATEFAILED:
            MessageBox(hWnd, TEXT("不正なフォルダです"), NULL, MB_OK);
            return 1;
    }

    return 0;
}

例によって自作関数や外部変数を多用しているので、その辺は脳内補完のこと。

いくつかの関数の簡単な解説。詳細は Google とかで検索して調べること。

SHGetFolderPath: CSIDL 値から特殊フォルダのパスを取得する関数。

CoInitialize: COM 初期化する関数。BROWSEINFO 構造体の ulFlags メンバに BIF_NEWDIALOGSTYLE や BIF_USENEWUI を指定する際は必須。処理終了後、CoUninitialize 関数で解放しなければならない。

SHGetSpecialFolderLocation: 特殊フォルダの ITEMIDLIST 構造体へのポインタ(PIDL)を取得する関数。使用後、CoTaskMemFree 関数で PIDL を解放しなければならない。

SHBrowseForFolder: フォルダ選択コモンダイアログボックスを表示する関数。戻り値は選択したフォルダの ITEMIDLIST 構造体へのポインタ(PIDL)。使用後、CoTaskMemFree 関数で PIDL を解放しなければならない。

SHGetPathFromIDList: PIDL からパスを取得する関数。

その他の解説。

BROWSEINFO 構造体の pidlRoot メンバには、フォルダ選択コモンダイアログボックスのルートを指定する PIDL を設定する。上記のコードでは「マイ コンピュータ」以下しか表示されなくなる。NULL を指定すると「デスクトップ」以下が表示される(つまり、「マイ コンピュータ」や「マイ ネットワーク」、「マイ ドキュメント」など、全部が表示される)。

BROWSEINFO 構造体の lpfn メンバと lParam メンバには、それぞれコールバック関数とコールバック関数に引き渡すデータを指定する。上記のコードでは、初期オープンフォルダを指定し、コールバック関数内の BFFM_INITIALIZED メッセージ受信時に設定を行っている。

参考文献:
MSDN Library Japan
猫でもわかるプログラミング
HSPの裏技??

| | コメント (0) | トラックバック (0)

2006-02-20

プログラム試行錯誤

忘れないうちにメモ。

フォルダ選択ダイアログボックスを表示するときのやり方。

VOID MySusie(HWND hWnd)
{
    BROWSEINFO bi;
    TCHAR szPath[MAX_FILE + 1];
    LPITEMIDLIST pidl;

    // BROWSEINFO構造体設定
    ZeroMemory(&bi, sizeof(BROWSEINFO));
    bi.hwndOwner = hWnd;
    bi.lpfn = BrowseCallbackProc;
    bi.pszDisplayName = szPath;
    bi.lpszTitle = "Susie Plug-in 格納フォルダを選択して下さい";
    bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN | BIF_STATUSTEXT |
                 BIF_RETURNFSANCESTORS | BIF_VALIDATE | BIF_USENEWUI | BIF_NONEWFOLDERBUTTON;

    // フォルダ選択ダイアログ表示
    if((pidl = SHBrowseForFolder(&bi)) == NULL)
        return;

    // ITEMIDLISTからパス取得
    if(SHGetPathFromIDList(pidl, szPath) == TRUE) {
        lstrcpy(szSpiPath, szPath);
    } else
        Edit_AddMessage(hEdit, TEXT("error:SHGetPathFromIDList"), TRUE, TRUE);

    CoTaskMemFree(pidl);

    return;
}

INT CALLBACK BrowseCallbackProc(HWND hWnd, UINT msg, LPARAM lp1, LPARAM lp2)
{
    TCHAR szDir[MAX_FILE + 1];
    LPITEMIDLIST lpid;

    switch(msg) {
        case BFFM_INITIALIZED:
            if(lstrlen(szSpiPath) > 0)
                SendMessage(hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)szSpiPath);
            else if(GetCurrentDirectory(sizeof(szDir), szDir))
                SendMessage(hWnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)szDir);
            break;

        case BFFM_SELCHANGED:
            lpid = (LPITEMIDLIST)lp1;
            SHGetPathFromIDList(lpid, szDir);
            SendMessage(hWnd, BFFM_SETSTATUSTEXT, (WPARAM)0, (LPARAM)szDir);
            break;

        case BFFM_VALIDATEFAILED:
            MessageBox(hWnd, TEXT("不正なフォルダです"), NULL, MB_OK);
            return 1;
    }

    return 0;
}

例によって自作関数や外部変数を多用しているので、その辺は脳内補完のこと。

注意!このソースコードには足りない部分がかなりある。

  • BIF_NEWDIALOGSTYLEBIF_USENEWUI を指定する際は、COMの初期化を行わなければならないようだ(VBの場合はアプリケーション側で行ってくれるらしいが)が、ここではまだ組み込んでいない。
  • このままだと、BIF_STATUSTEXT を指定しているにも関わらず、ステータステキストが表示されない(BIF_NEWDIALOGSTYLEBIF_USENEWUI を指定しないときは問題なく表示される)。
  • BCCでは BIF_NONEWFOLDERBUTTON が定義されていないので、別途定義する必要がある(定義値は0x0200)。

追記:
続きは「プログラム試行錯誤(続)」。

| | コメント (0) | トラックバック (0)

2006-02-19

父の釣果

昨日、父が釣りに行って釣ってきた魚。

2006-02-19_09-18-30

重量5.4kg。大きすぎて、まな板をはみ出してますが(笑)。

メダイ

深いところにすむ海水魚。とくに太平洋側の深海に多い。幼魚は黒みをおび、胸びれがやや丸くて体側に黄色の波状のしまがある。イボダイ類に特有な食道のうはソラマメ形で、内部に多数の歯がある。冬においしく、さしみや吸物などにする。 全長:90cmになる。 分布:日本各地。 (硬骨魚鋼 スズキ目 イボダイ科 Ocycrius japonicus

学習研究社 「魚・貝 原色学習ワイド図鑑」 初版より

今日の夕食に刺身で頂きました。脂がのって、大変おいしゅう御座いました。

| | コメント (0) | トラックバック (0)

2006-02-18

プログラム堕落中(BlogPet)

先日から散々苦労してきたUNLHA32.DLLですが……
よく考えたら、別に誰...........................................................................................................................................................................................................................................................................................................................................................................................
と、SnowWhiteが思ってるの。

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-02-17

プログラム再び

翻訳が一段落したので、再びプログラムを。

今度は Susie Plug-in に挑戦。

これが結構難しい。orz

| | コメント (0) | トラックバック (0)

2006-02-14

BIG EYES, SMALL MOUTH ANIME CARD GAME

以前購入した「BIG EYES, SMALL MOUTH ANIME CARD GAME」だが、現在頑張って翻訳中。
英文の和訳なんて、殆ど10年ぶりなので、機械翻訳を併用しているものの、結構辛い。

とりあえず、ルールブックの翻訳が終わったのだが、かなりぐだぐだな上に、意訳が多い。orz
固有名詞をどう訳すかが結構難しい。

イントロダクション

 あなたはそのすべてから離れて、わずかな休暇を取ることを望んでいます――しかし、アニメ・マルチバースを渡り歩く誰もが、あなたを追い詰めようとしています! 意地の悪い賞金稼ぎ、天使のような魔法少女、執念深いサムライ、強力な魔法使い、悪魔の王子、サイボーグ戦士、そしてかわいい猫娘……誰もあなたをそのままにしておかないでしょう! しかしながら、あなたの敵のうちの1人へ彼らの注意を逸らしてください。そうすれば、最後にいくらかの休息を得ることができるでしょう。

 「ビッグ・アイズ、スモール・マウス アニメ・カードゲーム」は、覚えるのが簡単で、驚きがいっぱいの55枚のカードの人物のバリエーションがあります。驚くほどのアニメ絵と特殊能力を備えた5つのキャラクターの派閥のカスタム・デッキを特色として、アニメ・カードゲームは普段着のプレイやトーナメントプレイの両方にとって理想的です。

我ながら、ひどい訳だ。しかし、ゲームをする上では問題ない程度のものが出来たと自負している。

あとはカード自身に書かれている説明を訳すのみ。
頑張るぞ!

(2006.2.15追記)
ボックス・アートはこんな感じ。
2006-02-15_11-09-50

カード・イラストはこんな感じ。
2006-02-15_11-12-06

なんかビミョーなイラストと思われるかもしれませんが、描いてるのは日本人じゃありませんから!

著作権表示
©2005 Guardians Of Order, Inc. All Rights Reserved.
Guardians Of Order and Big Eyes, Small Mouth are trademarks of Guardians Of Order, Inc.

All rights reserved under international law. No part of this product may be reproduced in part or in whole, in any forms or by any means, without permission from the publisher, except for brief quotes for use in reviews.

http://www.guardiansorder.com

| | コメント (0) | トラックバック (0)

2006-02-12

「・」と「=」

2006年2月12日付の朝日新聞の「ことば力養成講座/外国人名の切れ目」より。

外国人の名前を書き表すのに用いられる「・」(中黒)と「=」。例えば、「シャア・アズナブル」なのか「シャア=アズナブル」なのか。

 朝日新聞では、姓と名を中黒でつなぐ。二つ以上に分かれている姓や名の中では区切らず、「ジャンポール・サルトル」のように書いている。

とあるように、朝日新聞では姓と名を「・」で区切り、姓の区切りは行わないようだ。つまり、「McDonald」「O'Hara」を「マク・ドナルド」「オ・ハラ」ではなく、「マクドナルド」「オハラ」と書くと言うことだ。

1946年に文部省(当時)が作った「くぎり符号の使ひ方(案)」では「・」を用いることとなっているが、1991年の内閣告示「外国語の表記」では「ここでは取決めを行わない」として「・」「=」のどちらを用いても良いことになっている。

教科書では姓と名を「=」で繋ぐものが多いが、別に文部科学省が決めたルールではなく、各教科書会社に任されているらしい。

 一般の本では「マリオ・バルガス=リョサ」(ペルー人作家)のように両方の記号が使われる場合もある。同氏の著書を多く出している新潮社では姓の中にある切れ目を「=」で示したと言っており、同様にしている例も多いようだ。

とあるように、姓と名、ミドルネームを区切るのに「・」を用い、姓の中の区切り(「'」など)を「=」で表すことが多いらしい。

ちなみに、ここでは「=」を半角等号で表しているが、新聞などでは専用の活字を用いているのだろうか? それとも「=」(全角等号)や「〓」(げた記号)なのか? そこのあたりも知りたかったところだ。

| | コメント (0) | トラックバック (0)

姉ちゃんがめいでんっ!

最近「姉ちゃんがめいでんっ!」でググって来る人が多いようなので、関連するサイトを紹介しておく。

ケミカルX ***-/|| CHEMICAL-X ||\-*** vvv MANGA ANIME GAME vvv 漫畫 動漫 遊戲 vvv
おそらく、ここが元祖「姉ちゃんがめいでんっ!」のサイト。最近新作が発表されている。

逝くぞ妄想王、脳内嫁の備えは十分か?
上記とは別系統の「姉でん」。こちらは「姉!ちゃんとしようよ」がベースになっている模様。なので設定とか違うが面白いので気にしない。

一応、元ネタはこれね。
TBSアニメーション「ローゼンメイデン トロイメント」公式HP

| | コメント (0) | トラックバック (1)

2006-02-11

プログラムでへぇ連発中(BlogPet)

きょうSnowWhiteはここへネットに検索したかったみたい。

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-02-09

プログラム一段落

とりあえず、プログラム作成は一段落。まあ、こんなものはいつまでやったって終わらないものなので、よっぽど不具合がない限り、ここまでとする。
#絵を描く人なら何となく分かってもらえるような気がする。

しかし、モノを造り出すっていうのは楽しいなぁ。

| | コメント (0) | トラックバック (0)

2006-02-08

今日は通院の日

今日は通院の日。

最近、ちょっとしたことが可笑しいので、それを伝える。
セディール10×1、トレドミン25×1、テグレトール×1。トレドミンが減った。

岡山県立図書館

読み終わらなかったので、再度借りた。

紀伊國屋書店クレド岡山店。

ゲーマーズ岡山店。

| | コメント (0) | トラックバック (0)

2006-02-06

雪が降った

昼前に雪が降り始めて、あっという間に降り積もってしまいました。

2006-02-06_15-00-38

2006-02-06_15-01-04

2006-02-06_15-01-38

ちなみに、まだ降ってるので、さらに積もるかもしれません。

| | コメント (0) | トラックバック (0)

2006-02-05

OGA例会

今日はOGA例会でした。
やったゲームは

  • キッチンキッチン
  • てろてろ!
  • Guillotine
  • Res Publica
  • MOGUL
  • だんまく
  • 6nimmt!
  • CAMISSIMO

キッチンキッチン
未発売のカードゲームのテストプレイ。料理人になって料理を作るゲームだが、詳細は書かないで欲しいと言われたので書かない。結構面白かった。負けたけど。orz ちなみに首が飛んだりはしない(笑)。

てろてろ!
これも未発売のカードゲームのテストプレイ。なので詳細は書けない。これも面白かった。5人中2位。

Guillotine(ギロチン)
王制フランスの末期を題材にした、貴族や役人(たまに一般人)の首をはね、コレクションするカードゲーム(これだけ書くとひどいゲームだな)。コレクションした首に応じて得点が加算されるのだが、間違って一般人の首をはねたりすると減点されてしまう。アクションカードによって、首をはねる順番を変えたり、他人の首を奪ったりすることもできる。ドイツのゲームだと思うが、良ゲーム。4人中3位。

Res Publica(レス・パブリカ)
民族カードを集めて村を形成し、さらに文明カードを集めて街を形成するカードゲーム。交渉が重要なファクターとなるのだが、「嘘を付いてはいけない」「ルールで許された以上のことを言うと、そこで交渉打ち切り」というルールがあり、他のプレイヤーに悟られることなく欲しいカードを集めるのが結構難しい。交渉系のゲームは苦手なんだ。orz 4人中4位。

MOGUL(ムガール)
競りによって株を手に入れ、配当と株の売買によって得点を得るゲーム。株を手に入れるために競りに勝とうとするとチップが少なくなり、適当なところで競りを降りてチップを得ようとすると前の手番のプレイヤーにチップを奪われたり……。orz タイミングが難しい。少なくとも私は現実の株のトレードには手を出さない方がいいようだ。5人中4位。

だんまく
弾幕系シューティングゲームを題材にしたカードゲーム。他のプレイヤーに弾幕を押し付け、あるいは他のプレイヤーから押し付けられた弾幕を回避して、最終ステージを目指すゲーム。弾幕系のシューティングって苦手なんだよ。orz 4人中4位。

6nimmt!(シックス・ニムト!)
数字の書かれたカードを出し、それを順番に並べ、並べた枚数が5枚を超えると得点を得る。得た得点が少ないプレイヤーが勝利するカードゲーム。ルールがよく分からないままプレイしていたら、得点がすごいことになってしまった。orz 5人中5位。

CAMISSIMO(カミシモ)
前回もやったカードゲーム。ルールも分かってきたので、何とか対処できたのだが、いかんせん手札が悪い。orz 3ゲームやって、最終的に5人中4位。

やはりゲームのテストというのはいろんな意味で面白い。
次回は3月5日。

帰りにBOARDWALK岡山店に寄る。

矢野さんと天さんの掛け合いって言うのは楽しそうだなぁ。

ドレミの街の本の森セルバ。

| | コメント (0) | トラックバック (0)

2006-02-04

今日は通院の日(BlogPet)

きのうは通院したかったみたい。
maedaと通院するはずだったの。

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-02-02

あなたのパソコンにもえたん登場!

窓の杜 - 【NEWS】“もえたん”ヒロインが英単語の訳をお知らせ「魔法のマウス with もえたん」

すごいな、これ。
よく言えば、「遊び心に溢れている」。悪く言えば、「萌えの領域はここまで来たか」。

ちょっぴり心惹かれているのも事実なんだけどね(笑)

| | コメント (0) | トラックバック (0)

« 2006年1月 | トップページ | 2006年3月 »