Powered By Blogger
ラベル MS の投稿を表示しています。 すべての投稿を表示
ラベル MS の投稿を表示しています。 すべての投稿を表示

2014年4月3日木曜日

win8のアプリが少ない理由

だって、win8でないと開発できないんだもの。アンドロイドはwindowsのバージョンにこだわらないし、Linuxでも動く。誰でも開発できるのに、METROはwindowsでなければいけないという、こんな制約があるのに、アプリが少ないということの対処に9インチ以下のMETROのOSを無料にするとか、誰に向かって商売してるのかわからない政策を打ち出している。
作る環境を持ってる人が少ないと言っているのにマシンの出荷を増やそうと。いまさら無料にしても、アンドロイドやiPhoneのアプリに追いつける訳がない。今あるアプリの開発者はほぼwin8を導入していないだろう。そこが問題なのに。

win8.1がupdate?

またUIをいじくるらしい。
UIを触られると一番困るのは開発者だ。開発者は取説を書かなければならない。しかもGUIでは、画面のハードコピーが必須である。UIを変えると、関連するハードコピーを差し換える必要が生じる。また、設定方法を記述した箇所の見直しが必要になる。
せっかく、客を説得し、win8を導入してもらったのにUIが変わっていくと、オペレーターの負担が増えるだけだ。
今回のような変更を適用しないユーザーもいるだろう。逆に適用したいユーザーもいるだろう。これを全て開発者が担うことになる。
やはりwindows8は使えない。まず、完全にwindows9としてデスクトップ版とMETRO版をダブルブート形式で提供すればいい。ダイナミックに切り替える必要は全くない。当然だがプログラムは二種類のUIを備えることが可能であり、逆に片方でしか動かない規制も出来るようにする。また、METRO版はデスクトップの1つのwindowで動作可能とする。
これでどうだろ。

噂によれば、windows9にもMETROは残るようで、進歩はしないようだ。
 
 これを繰り返すことで、一回ごとに将来の客を失って行くだろう。

2013年5月7日火曜日

そうか、win8アプリが少ない理由


開発するのにwin8が必要。しかも、くそ重いvs2012をインスト。VMWAREでは重すぎて実現不可能。

結局、パソコンを買い直してまでwin8のアプリを作りたいかということになり、まあ、様子をみるか、となる。

皆が様子見になれば、普及はゆっくりになり、やはり、win9待ちとなる。

MSの戦略ミスだね。あ、戦略なんて無いんだっけ。

102SH

2013年1月20日日曜日

MFC Debugger ファイルを開くでハングアップ

やはり、ハングアップが発生する。理由は分からないが、デバッガでファイルを開くダイアログで、新しいFileExplorerを開くとハングする時がある。常にではない。落ちるのがFile Explorerを呼び出した時点で、画面が表示された時に、ファイル一覧が出なくなる時、一覧表示された直後などで、一定ではないが、固まり方が同じで、その画面がハングした後は、別に起動していたプロセス、デスクトップと順番にクリックしていくと段々に固まっていく。実際は新しい画面を出そうとすると何かを待っているような感じだ。NVIDIAかもしれないが、一応は最新のドライバーを入れているつもりだ。

回避方法として、OpenFileDialogの呼び出しで、旧インタフェースを使うということができる。しかも、デバッガ起動しているときは旧インタフェースで、デバッガ起動でなければ通常インタフェースに切り替えるということにしておけば、デバッガ時のハングだけを回避するための措置として十分である。

以下に方法を述べる。

Appクラスのヘッダーに以下を定義する。CxxxxxxAppはAppクラスの名前

xxxxxxxApp.h に

////////////////////////////////
//// MFC DEBUGGER BUG FIX
////////////////////////////////
#define AVOID_CLASS_NAME CxxxxxxApp
BOOL AVOID_CLASS_NAME::DoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate);
afx_msg void AVOID_CLASS_NAME::OnFileOpen();

xxxxxxxx.cppファイルに

BEGIN_MESSAGE_MAP(CxxxxxxxxApp, CWinApp)
    ON_COMMAND(ID_FILE_OPEN, OnFileOpen) <==これを追加
END_MESSAGE_MAP()

///////////////////////////////////////////////

//// MFC DEBUGGER BUG FIX
///////////////////////////////////////////////
AFX_STATIC void AFXAPI _AfxAppendFilterSuffix(CString& filter, OPENFILENAME& ofn,
    CDocTemplate* pTemplate, CString* pstrDefaultExt)
{
    ENSURE_VALID(pTemplate);
    ASSERT_KINDOF(CDocTemplate, pTemplate);

    CString strFilterExt, strFilterName;
    if (pTemplate->GetDocString(strFilterExt, CDocTemplate::filterExt) &&
        !strFilterExt.IsEmpty() &&
        pTemplate->GetDocString(strFilterName, CDocTemplate::filterName) &&
        !strFilterName.IsEmpty())
    {
        if (pstrDefaultExt != NULL)
            pstrDefaultExt->Empty();

        // add to filter
        filter += strFilterName;
        ASSERT(!filter.IsEmpty());  // must have a file type name
        filter += (TCHAR)'\0';  // next string please

        int iStart = 0;
        do
        {
            CString strExtension = strFilterExt.Tokenize( _T( ";" ), iStart );

            if (iStart != -1)
            {
                // a file based document template - add to filter list

                // If you hit the following ASSERT, your document template
                // string is formatted incorrectly.  The section of your
                // document template string that specifies the allowable file
                // extensions should be formatted as follows:
                //    .<ext1>;.<ext2>;.<ext3>
                // Extensions may contain wildcards (e.g. '?', '*'), but must
                // begin with a '.' and be separated from one another by a ';'.
                // Example:
                //    .jpg;.jpeg
                ASSERT(strExtension[0] == '.');
                if ((pstrDefaultExt != NULL) && pstrDefaultExt->IsEmpty())
                {
                    // set the default extension
                    *pstrDefaultExt = strExtension.Mid( 1 );  // skip the '.'
                    ofn.lpstrDefExt = const_cast< LPTSTR >((LPCTSTR)(*pstrDefaultExt));
                    ofn.nFilterIndex = ofn.nMaxCustFilter + 1;  // 1 based number
                }

                filter += (TCHAR)'*';
                filter += strExtension;
                filter += (TCHAR)';';  // Always append a ';'.  The last ';' will get replaced with a '\0' later.
            }
        } while (iStart != -1);

        filter.SetAt( filter.GetLength()-1, '\0' );;  // Replace the last ';' with a '\0'
        ofn.nMaxCustFilter++;
    }
}


BOOL AVOID_CLASS_NAME::DoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate)
{
    CFileDialog dlgFile(bOpenFileDialog, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL, 0, FALSE);//旧OpenFileDialog

    CString title;
    ENSURE(title.LoadString(nIDSTitle));

    dlgFile.m_ofn.Flags |= lFlags;

    CString strFilter;
    CString strDefault;
    if (pTemplate != NULL)
    {
        ASSERT_VALID(pTemplate);
        _AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate, &strDefault);
    }
    else
    {
        // do for all doc template
        POSITION pos = this->m_pDocManager->GetFirstDocTemplatePosition(); // >m_templateList.GetHeadPosition();
        BOOL bFirst = TRUE;
        while (pos != NULL)
        {
            pTemplate = (CDocTemplate*)(this->m_pDocManager->GetNextDocTemplate(pos)); // m_templateList.GetNext(pos);
            _AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate,
                bFirst ? &strDefault : NULL);
            bFirst = FALSE;
        }
    }

    // append the "*.*" all files filter
    CString allFilter;
    VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
    strFilter += allFilter;
    strFilter += (TCHAR)'\0';   // next string please
    strFilter += _T("*.*");
    strFilter += (TCHAR)'\0';   // last string
    dlgFile.m_ofn.nMaxCustFilter++;

    dlgFile.m_ofn.lpstrFilter = strFilter;
    dlgFile.m_ofn.lpstrTitle = title;
    dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);

    INT_PTR nResult = dlgFile.DoModal();
    fileName.ReleaseBuffer();
    return nResult == IDOK;
}

void AVOID_CLASS_NAME::OnFileOpen()
{
    if (::IsDebuggerPresent()) //デバッグ時のみ上記モジュールを使う
    {
        CString newName;
        if (!DoPromptFileName(newName, AFX_IDS_OPENFILE,
          OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))
            return; // open cancelled
        AfxGetApp()->OpenDocumentFile(newName);
    }
    else
        CWinApp::OnFileOpen();
}

仕方ないね。

2012年12月25日火曜日

VS2012

syncツールでディスクフラッシュしていたつもりが、管理者権限が必要とのこと。通常ユーザがflushできないなんてありえねー。通常ユーザはリムーバブルを扱えないということなのか。アホだな。不便極まりないので、管理者特権を簡単に与えることになるのだ。ビルド後にsyncをやろうとして、syncに管理者特権が必要なら、問い合わせればいいじゃないか。なぜ、起動プロセスで管理者特権が必要なときに問い合わせる機能がないんだろう。

Windowsの管理者特権の与え方がおかしい。8でも同じだろうが。根本的に誰か別の人間が考え直した方がよさそうだ。

あたらしいWindowsを出してくれ。もっと使いやすく、もっと簡単に。IEでだけ使うものは別のOSにして、普通に開発や仕事に使うものは別のOSにして欲しい。コンシューマとビジネス、ディベロッパーはそれぞれ異なるOSで良いと思う。その上で、VMが存在すれば何ともないだろう。

とにかく、IEのバグをOSのバグにしないでほしい。IEのインタフェースが使いやすいわけではない。エクスプローラーが使いやすいのならWin8で変えてしまったのは何故か。人それぞれなら妙なところに妙な変更を加えないで欲しいものだ。いつも思うがWindowsのバージョンアップは改悪だ。Appleの真似は必要ない。

2012年9月27日木曜日

マイクロソフトカンファレンス2012


最新サーバー2012とwindows8の宣伝。

windows8には参った。Androidとwindows7を合わせたというか、切り替えるというか、7のデスクトップが一つのアプリとなったというか。

あんなものを作って、次期バージョンはどうするのだろう。出来ることは全てやったというコンセプト、いやコンセプトなんてものはない。今あるOSやクラウドサービスの機能をできる限り取り込んでみました、というだけのもの。

この先は考えていません、今を取り戻したい。という焦りしか感じませんでした。

他社にない考え方が一つだけ感じた。自社ですべてやる。他社のサービスに頼らない。

クラウドサービスも自社で賄う、という意気込みか焦りか、、、

大丈夫かマイクロソフト!?

頑張れマイクロソフト!

エールを送りたくなった。



Posted via Blogaway 102sh

2012年3月14日水曜日

Windowsのタスクバー

Windowsのタスクバー、位置を動かせたり、幅を変更したりできるけど、標準位置(画面の下部)で1段で使うのが一番だと痛感した。VisualStudioのデバッガはこのせいでハングアップする場合があることがわかった。また、IMEツールバーも表示しないようにした。

たぶん、Microsoftの人たちはこの状態が標準として全てのテストを行っているのだろう。これから逸脱した状態でのテストは行っていないのだろう。オプションなし、常駐プログラムなしで動作確認を行っているのだろう。しかし、そんな環境で使っている人はいないはず。ハングしても誰のせいなのか判らないのがWindowsなのだ。誰のせいか判るようにするには膨大な手間が本当に必要なのだろうか。こんな場合はOpenソースの方が追求はしやすいと思う。ハングしていることよりも中身を公開しないことの方が大事なのだろう。

そろそろWindowsも終わりを迎えるのかもしれない。Windows8はAndroidに阿っている。これはAndroidがUIとして正しいとMSが考え始めたということだ。キーボード+マウスの時代が終わり、ソフトキーボード+タッチパネルの時代が来ると思っているようだが、キーボードはソフトは打ちにくい。肩がこってしまう。単なる年のせいか。 打っている以外の指を置いておけないのは辛い。ちょっとでも触ってしまうとキー入力されてしまう。いただけない。

考えていることがそのまま文字になってくれるような物があれば良いのかもしれないが、ふと違うことを考えて、それがワープロに出てくるというのも何だか困った世界になりそうで。

2011年9月28日水曜日

Ready Driver Plus で デバッグモード表示が出ない

T520にReadyDriverPlusを入れたんだけど、デバッグモード表示が出ないんですね。でも署名は強制されていないようです。動作しましたので。んーどうなってるのか。不思議です。

image←出てないでしょ。

2011年8月11日木曜日

ASPの発音

http://x10hosting.com/forums/crossfire/69160-asp-pronunciation-2.html

なぜ、エイ・エス・ピーなのか、アスピではいけないのかということを話している。

http://forums.asp.net/t/Next/892602

ass + "P" は可笑しい(かっこ悪い)から、エイ/エス/ピーだと言っている人が多い。

ass + "P"は間抜けだと思うが、このように読めるASPを名付けたMicrosoftが一番間抜けだと思う。みんなが使わなければならない言葉なのに、変な読み方が出来てしまうのは命名時に気をつけるべき。
.NETをドットネットと読ませるのは構わないが、ネットで検索するとき、.NETはドメイン名として大量に引っかかる。これも間抜けな命名だった。Windowsもそうだ。名前が一般的すぎる。それを使うのであちこちで不都合を起こす。一体誰が名付けたのか。やはりビルゲイツなのか。唯一とまではいかないまでも、特殊な名前をつければ、検索時に他の言葉が排除されて優先的に検索できるとは思わなかったのか。

 Microsoftにインターネットが無かった頃からの癖が残っているのか。

2011年5月12日木曜日

KB2529073 Windows Updateが失敗を繰り返す

シャットダウン時にWindowsUpdateが走り、翌日の朝の立ち上げでKB2529073とKB2534366が失敗する。既に2日で2回行ったみたいだが、失敗していた。しかも失敗までに時間がかかる。失敗するのは仕方ないが時間が掛かるのは許せない。

ググった。それぞれ個別にインストールすれば問題ないとのこと。WindowsUpdateを表示して、KB2529073とKB2534366に付いていたチェックマークをKB2534366だけ外して、1つの更新にして、インストールした。再起動が必要とのことで、再起動させた。再起動して更新後にシャットダウン再起動した。

想像するに、この再起動してシャットダウン、再起動という動作が2つのWindowsUpdateを指定していると出来ないのではないか。よって、再起動できないまま立ち上がろうとするので、インストールを失敗させ、ロールバックして立ち上がる。結局、インストールできないのではないか。これは、WindowsUpdateのバグかな。KB2529073は他のUpdateと排他にしなければならないのを、排他制御していないためにこうなるのだと、、、違っているかもしれないが。

とにかく、立ち上がり時に時間が掛かるのが止まって嬉しい (*⌒▽⌒*)

2011年3月14日月曜日

IE9 日本語版の製品版 延期

地震のためらしいが、別に関係ないんじゃないの? ネットワークへの負荷軽減(これはダウンロードする際のこと?)や節電(これもダウンロードのこと)に対応するためとのこと。

企業は一般的に個人でIE9を自分のPCに入れることはできないので、そもそもダウンロードできない。個人ユーザはダウンロードするかもしれないが、真夜中にダウンロードするのと、ほとんどが光のはずだから、短時間でダウンロードできるので、あまり関係ないような気がする。

MSとしては折角のIE9が震災と同時では縁起が悪いと思ったのか、イベント開催する雰囲気では無いので、宣伝効果が下がるのを嫌がったかだとしか思えない。日本マイクロソフト株式会社は「一日も早い復旧を、心よりお祈り申し上げます。」

復旧か。