Android への VNC 接続
あまり用途は浮かばないが,スマートフォンに VNC 接続する方法.
検索すると droidVNC-NG というのがあった.
最初 droidVNC-NG の設定画面で「START」後,
「CONNECT TO A LISTENING VIEWER」で,クライアントの IP を指定する必要がある?
また,この時フリーズすることがあった.
一度接続できると特に難しい所はない.
文字入力などが楽になるかと思ったが,うまく動作しない?
スクリーンキーボードを表示しての操作となるため,スマートフォンで直接操作した方が早い.
スクリーンショットを撮るなどの用途か?
NAS ADM 4.0.2.RPL2 の更新で…
気づいたら,ASUSTOR NAS の favicon.ico が変わってしまっていた.
LAN 内からその NAS の先頭ページを表示しようとすると ADM の入り口へのリンクが存在する.
ファイアウォールで設定しているので大丈夫だろうとは思うが,ADM のポートが見える様になるのではないか?
ちょっと危険と思われるので,index.php と htm を以前のものに戻した.
2022/03/28
ADM 4.0.5.RRS1 に更新されて,ADM への入り口のリンクは表示されなくなった.
Synology Mail Server
先日 ASUSTOR NAS でメール関係を設定した が,うまく動作しないので今度は Synology NAS で.
Web で検索する と MailPlus Server と Mail Server が見つかる.
が,DS116 には MailPlus Server はインストールできないみたい.
Synology Mail Server は次の様な感じ.
他に POP3 を有効に.
ルータで ASUSTOR NAS へ転送していたものを Synology NAS に(ポートフォワーディングの設定).
ここまでは意外とすんなり.
メーラの設定はまだ完全にはわかってないが,何とか受信できることは確認できた.
直接は関係ないが,ドメインの情報を更新しようとして,確認後の「設定する」を行うとエラー.
メンテナンス情報 のへの入り方がわかり難い.
不要なメールが多いとは思っていたが,重要な情報が伝わりにくいのは如何なものか?
アナウンスのあった 1/26 18:00 頃まで更新できなかった.
2022/01/27
メールのデータは,それぞれのユーザの .Maildir 以下に存在しているみたい.
Iwao@DS116:~$ pwd
/var/services/homes/Iwao
Iwao@DS116:~$ tree .Maildir/
.Maildir/
├── cur
│ ├── 1643079743.M431357P3027.DS116,S=1201,W=1238:2,S
│ ├── 1643079976.M326882P4473.DS116,S=1005,W=1033:2,S
│ ├── 1643080038.M170836P5420.DS116,S=1192,W=1231:2,S
│ ├── 1643080114.M298271P5625.DS116,S=1038,W=1065:2,S
│ ├── 1643085691.M688765P22375.DS116,S=1238,W=1275:2,S
│ ├── 1643085822.M842535P22866.DS116,S=1246,W=1283:2,S
│ ├── 1643086897.M829597P27644.DS116,S=1239,W=1276:2,S
│ ├── 1643087608.M44210P30687.DS116,S=797,W=815:2,S
│ ├── 1643087691.M559494P31029.DS116,S=1238,W=1275:2,S
│ ├── 1643087805.M721122P31507.DS116,S=1247,W=1284:2,S
│ ├── 1643088000.M130631P32277.DS116,S=1230,W=1259:2,S
│ ├── 1643088239.M540466P7084.DS116,S=967,W=995:2,S
│ ├── 1643089198.M442878P23850.DS116,S=1813,W=1852:2,S
│ ├── 1643098555.M720684P30677.DS116,S=1360,W=1401:2,S
│ ├── 1643117771.M942067P12351.DS116,S=881,W=908:2,S
│ ├── 1643153388.M81263P4817.DS116,S=1348,W=1382:2,S
│ ├── 1643202594.M299954P12263.DS116,S=1207,W=1237:2,S
│ ├── 1643204390.M317273P22253.DS116,S=1283,W=1325:2,S
│ ├── 1643258521.M138648P15962.DS116,S=4419,W=4555:2,S
│ └── 1643258534.M602782P15995.DS116,S=5528,W=5694:2,S
├── dovecot.index.cache
├── dovecot.index.log
├── dovecot.list.index.log
├── dovecot-uidlist
├── dovecot-uidvalidity
├── dovecot-uidvalidity.61ef683f
├── maildirfolder
├── new
└── tmp
3 directories, 27 files
Iwao@DS116:~$
仮想ホストの設定 ポート
先日の設定 で LAN 内からそれぞれの NAS に振り分けられる様にはなったが,今度は WAN を含めたもの.
Synology NAS
「ポート」の設定で 54321 の様にポート番号を指定する.
ASUSTOR NAS
ポート番号 54322 を追加する.
これで LAN 内からは test1.mish.work:54321 の様にアクセス可能になる.
あとはルータでそれぞれのポートを通す必要がある.
次の様に振り分けることも可能.
if (hn == "test1.mish") { location.href = "http://test1.mish.work:54321/" ; }
if (hn == "test2.mish") { location.href = "http://test2.mish.work:54322/" ; }
NAS の仮想ホストの設定
LAN 内で NAS の特定のディレクトリに test1.mish.work の様にアクセスするための設定.
Synology NAS
「Web Station」-「Web サービスポータル」の「作成」-「サービスポータルの作成」.
「仮想ホスト」を選択.
ホスト名を test1.mish.work ,ドキュメントルートを NAS 上のあるディレクトリを指定.
これで LAN 内から test1.mish.work の様にアクセスできるようになる.
2023/11/06 DSM 7.2 仮想ホストの設定
ASUSTOR NAS
「Web Center」-「仮想ホスト」の「追加」.
ホスト名を test2.mish.work ,フォルダ名は NAS 上のあるディレクトリを指定.
QNAP NAS
「コントロールパネル」-「アプリケーション」-「Web サーバー」の「仮想ホスト」-「仮想ホストの作成」.
ホスト名を test3.mish.work ,ルートディレクトリは NAS 上のあるディレクトリを指定.
m_atime 2446/05/11 07:38:55
2022/01/17
VC 2019 でビルドした exe でも特に変わらず.
ローカルドライブや Synology NAS では,正しく設定される.
MFC exe で QNAP NAS 上に上書き保存した時にその様になってしまう?
ASUSTOR NAS でも QNAP NAS 同様に正しくない.
デバッガで追いかけると,
CMirrorFile::Close で MFC9EA4BEB9.tmp を ::ReplaceFile の時.
出力されたファイルを CFileStatus で見ると 0x000000037fffffff .
0000 0003 7fff ffff が 2446/05/11 になる.
QNAP NAS WordPress Import
ブログのバックアップ用に,Blogger にインポート .
データが少ないものは移行できたが,メインのブログはうまくインポートできない.
それで QNAP NAS の WordPress に…
WordPress でインポートしようとすると 2M の制限で読み込めない.
phpinfo() ; で表示させると 2047M にはなっている.php.ini も.
どこに持っている情報なのかわからないので ,htaccess で指定することにした.
インポートしていると,何故かエラーになってしまう.
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request
Reason: Error reading from remote server
投稿一覧を見るとデータは入っていそうなので,この状態で様子見.
ASUSTOR NAS upload_max_filesize
ASUSTOR NAS でアップロードできるファイルの制限は 2M になっている.
今回,別の NAS の WordPress ファイルをインポートしようとすると,2MB の制限に引っ掛かって読み込めない.
以前は PHP 5.6 に切替て対応した が,今はこの方法が使えないので php.ini を変更することに.
SSH 接続 して php.ini の upload_max_filesize を 20M に.
反映させるために App Central で PHP 7 を一度停止して,すぐに実行.
Web Center の「Webサーバー」で「有効」にする必要がある.
今回のインポートしようとしたファイルは,11 MB 程度あった.
そのため post_max_size も 8M から 32M に変更.
1 時間程度かかってインポートできた.
WordPress のインポート
Iwao の新規ユーザを作成できませんでした。投稿は現在のユーザに関連付けられます。
amp_validation_error 48cc07251c8d5157b9e9a897d0ed4499 のインポートに失敗しました
amp_validation_error 502662b90c836da49548b5e05fa9600e のインポートに失敗しました
amp_validation_error 6ba58cff20693639d052998163af35c9 のインポートに失敗しました
amp_validation_error 74f0569466346207f7e684496a8f8abc のインポートに失敗しました
amp_validation_error 8c32527465654f1f049900723ae0e156 のインポートに失敗しました
amp_validation_error 95f0f68b6007fd64c4baaea2c4190c0d のインポートに失敗しました
amp_validation_error a23b7a8625ee5499036e0a944b77fb53 のインポートに失敗しました
amp_validation_error e9e8eb16d0b29ff8c18b17b472b7e774 のインポートに失敗しました
“https://mish.myds.me/wordpress/dev/2021/12/03/ws2022-iis-php/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/about/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2021/12/03/ws2022-iis-php/ws2022_iis_add_php_8/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2021/12/22/asustor-nas-mail-server/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2021/12/22/asustor-nas-mail-server/as5202t_mail_server_receive/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2021/12/28/asustor-mail-server-fw/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2021/12/28/asustor-mail-server-fw/as5202t_mail_server_return/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2022/01/05/do-not-work-qnap-nas-page/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
“https://mish.myds.me/wordpress/dev/2022/01/05/do-not-work-qnap-nas-page/qnap_install_perl/” をインポートできませんでした。投稿タイプ amp_validated_url が有効ではありません。
すべて完了しました。 ではお楽しみください !
インポートしたユーザーのパスワードと権限を更新してください。
https://as.mish.work/wordpress/
試してはいませんが,WordPress でのサイズのみであれば .htaccess を直接編集した方が簡単です.
次の様な記述を最後に追加します.
php_value post_max_size 20M
php_value upload_max_filesize 20M
QNAP NAS 上の WordPress の場所
QNAP NAS 上の App Center で,WordPress の更新版 5.8.2 があった.
特に意識しないで更新すると…
今まで \\(NAS)\Web\WordPress\(WordPress のファイル) となっていたものが,なくなってしまった?
以前 Synology NAS を更新 した時も場所が変わってしまったことがあった.
今回はなかなか場所がわからない.
QuLog Center の「イベントログ」で,やっと見つけた.
/share/…/.qpkg/WordPress にあった.
ダッシュボードの動作が遅くなった気がする.
また,先頭のページは表示されるが,それぞれの記事は 404 になってしまう?
記事の編集は問題なくできそうなので,どこかの設定がまだうまくないみたい.
QNAP NAS 上のサイトが…
QNAP NAS 上の幾つかのページがうまく動作しなくなった.
静的なページや,WordPress と Joomla! のページは問題ない.
いろいろと動きを見ると,C++ で書いたコードを呼出しているページがうまく動作していない様子.
SSH 接続して幾つかのコマンドを実行すると command not found となってしまう.
which gcc などで探すと,gcc が見つからない.
以前 gcc などは入れている ので,/opt/bin/gcc として存在するはず.
/opt/bin/ を見ると,perl 関係のものしか入ってない.
App Center で入れた Perl 5.26.1.0.1 がいけなかったみたい.
Entware-std 1.03 を入れ直すことでうまく動作する様になった.
AppCenter にある Perl のパッケージとは共存できない?
ASUSTOR NAS Mail Server – 2
先日から幾つかの所の設定を変更してやっていたが,うまくできないでいた.
今日も設定を確認していて,気づいた所があり.
「設定」-「ADMディフェンダー」-「ファイアウォール」で 80 以外が許可されていなかった.
「app#mail-server」を「許可」する様に.
これで少し進展.エラーが Mail Server から返る様になった.
あとは,メールアカウントの追加か?
これをやっていた時の,Let’s Encrypt での証明書の取得.
*.mish.work はうまく取得できるが,*.myasustor.com はうまくない.
設定を適用できません。 再試行してください。 (Ref. 5401)
ルータの設定を一時的に変更して,80 と 443 を NAS に設定したら「成功」した.
2022/02
うまく動作させることができなかったので,Synology NAS を使用 することに.
「ダイアログ バー」の追加
Win10 環境で VC 6 を使えるようにはなったが,「コンポーネントギャラリ」はうまく機能しないみたい.
今回利用しようとしたのは「ダイアログ バー」.ヘルプの内容は次の様なもの.
ダイアログ バー コンポーネント : 挿入結果
ダイアログ バー コンポーネントを挿入すると、プロジェクト コードに次の変更が加えられます。
- プロジェクトのリソース スクリプトにダイアログ テンプレート リソースが追加されます。このダイアログ テンプレートにコントロールを追加するには、Visual C++ のダイアログ エディタを使用できます。
- 指定したフレーム ウィンドウ クラスに、CDialogBar 型のメンバ変数の宣言が追加されます。デフォルトの変数名 m_wndMyDialogBar は変更できます。ダイアログ バーの初期プロパティ (標準では可視、ドッキング可能など) も指定できます。
- フレーム ウィンドウの OnCreate メンバ関数に初期化コードが追加されます。この初期化コードは、CDialogBar::Create を呼び出して、ダイアログ バーのドッキング オプションを設定します。また、ダイアログ バーの表示/非表示に関する初期化もここで行います。
- ダイアログ バーの表示/非表示に関するメニュー項目のサポートが追加されます。
ダイアログ バー コンポーネントを挿入しても、ダイアログ バーの表示/非表示を切り替えるためのメニュー項目はメニュー リソースに追加されません。このメニュー項目はメニュー エディタを使用して手作業で追加する必要があります。コンポーネントは、メニュー項目の追加手順を記述した “TODO” コメントを追加します。このコメントは、ダイアログ バーを追加したフレーム クラスの OnCreate 関数に挿入できます。
- 2 つの関数のハンドラがフレーム ウィンドウ クラスのメッセージ マップに追加されます。
- OnUpdateXXX 関数はメニュー項目の状態を随時更新します。
- 次に、OnBarCheck 関数は、メニュー項目のチェックマークのオン/オフどおりに、ダイアログ バーが表示/非表示になっているかどうかを調べます。
メニュー項目のプロンプト文字列がプロジェクトのストリング テーブル リソースに追加されます。コマンド ハンドラをインプリメントするには、ClassWizard を使用して、次の手順に従います。
- ResourceView で、ダイアログ バーのダイアログ テンプレートを開きます。
- Ctrl キーを押しながら W キーを押して ClassWizard を開きます。[クラスの追加] ダイアログ ボックスが表示されます。
- [クラスを選択] をクリックして、[OK] をクリックします。[クラスの選択] ダイアログ ボックスが表示されます。
- ダイアログ バー コンポーネントを挿入したときに指定したフレーム ウィンドウ クラスの名前をクリックして、[選択] をクリックします。このクラスとダイアログ リソースを関連付けるかどうかを確認するメッセージ ボックスが表示されます。
- [はい] をクリックします。[MFC ClassWizard] ダイアログ ボックスの [メッセージ マップ] タブの [オブジェクト ID] ボックスの一覧に、ダイアログ バーのコントロールの ID が表示されます。
- 通常の方法で、コントロールにコマンド ハンドラを割り当てます。
メモ ActiveX コントロールをダイアログ バーに追加する場合は、プロジェクトが ActiveX コントロール コンテナ機能をサポートしている必要があります。AppWizard でプロジェクトのスケルトンを生成したときに [ActiveX コントロール] オプションを選択していた場合は、ActiveX コントロール コンテナ機能のサポートがプロジェクトに含まれています。サポートがない場合は、[Gallery] の [Visual C++ Components] フォルダから [ActiveX コントロール コンテナ コンポーネント] を選択してプロジェクトに挿入する必要があります。
実際のコードなどの編集は次の様な手順.
ダイアログリソースの追加.
「スタイル」を「チャイルド」に.
「境界線」を「しない」に.
「タイトルバー」のチェックを外す.
CMainFrame に変数を追加.
CDialogBar m_wndDlgBar ;
CMainFrame::OnCreate に追加.
{
if (!m_wndDlgBar.Create(this, IDD_DIALOG_BAR,
CBRS_RIGHT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
ID_DIALOG_BAR))
{
TRACE0("Failed to create dialog bar m_wndDlgBar\n");
return -1; // fail to create
}
// m_wndDlgBar.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
// EnableDocking(CBRS_ALIGN_ANY);
// DockControlBar(&m_wndDlgBar);
}
Resource.h に ID_DIALOG_BAR を追加.
ダイアログバー上のコントロールに対しての操作は次の様な感じ.
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
if (m_wndDlgBar.GetSafeHwnd() == NULL) { return ; }
CListBox* listBI = (CListBox*)m_wndDlgBar.GetDlgItem(IDC_LIST_BI) ;
FitWindow(&m_wndDlgBar,listBI,3, FALSE, FALSE, FALSE, FALSE) ;
}
ASUSTOR NAS Mail Server
VNC 接続が安定しない?
最近は使う頻度が減ってきたが…
QNAP NAS の Virtualization Station の Win10 x86 への VNC 接続が安定しない.
他にも幾つか登録しているが,うまく開けないものが多い.
また Android からは,いつからかわからないが開けなくなってしまっている.
Virtualization Station へはブラウザからも接続できて操作はできるが,ちょっと反応が悪い.
VNC のクライアントは VNC Viewer ,サーバは UltraVNC を使用している.
ハッキリわからないが,Win10 などのバージョンが上がった関係か?
先ず VNC Viewer を Windows 版 6.21.1109 に更新.Android 版は最新版になっていた.
予想通りだが,特に変わらず.
サーバ側の UltraVNC は 1.2.24 や 1.2.40 が入っていた.これを 1.3.60 に更新.
インストール後,再起動が要求されるが,試しに Android から接続するとうまくいった.
どうも UltraVNC が古いことがまずかったと思われる.
IShellLink::SetShowCmd
ツールなどのスタートアップへの登録.
スタートアップのパスの取得は次の様な感じ.
LPITEMIDLIST pidl = 0 ;
::SHGetSpecialFolderLocation(NULL,CSIDL_STARTUP,&pidl) ;
tstring start_path = ::SH_GetPathFromIDList(pidl) ;
lnk の作成は,以前にツールを作成してその時のものを利用.
http://mish.work/joomla/index.php/i-tools/create-l.html
https://mish.myds.me/wordpress/dev/2020/01/11/msdn-createlink/
lnk のスタートアップへの登録は次の様にできる.
tstring start_lnk = ::Path_AddLastSP(start_path) + ::Path_GetTitle(file_path) + _T(".lnk") ;
tstring descript = _T("コメント") ;
::Create_lnk(file_path.c_str(),start_lnk.c_str(),descript.c_str()) ;
今回は,robocopy のコマンドを BAT ファイルとして生成し,それをスタートアップへ登録したかった.
http://mish.work/joomla/index.php/i-tools/cl-copy.html
動作としてはうまく機能するが,BAT ファイルを使用しているためコマンドプロンプトが表示されてしまう.
最小化された状態で起動する方が動作はスマート?
lnk 作成時に指定できるだろうと思い 検索 するとあった.
シェルリンク
IShellLink::SetShowCmd を使えば良さそう.
SW_SHOWMINIMIZED を指定してもうまく動作しない.SW_SHOWMAXIMIZED はうまく動作する.
SW_SHOWMINIMIZED ではなく SW_SHOWMINNOACTIVE を使うみたい.
::Create_lnk(file_path.c_str(),start_lnk.c_str(),descript.c_str(),work_dir.c_str(),SW_SHOWMINNOACTIVE) ;
::CreateLink している所を変更してうまくいった.
S_lnk.hxx
WS2022 IIS 環境に PHP インストール
先日作成した Windows Server 2022 の IIS 環境 に PHP をインストール.
先ず,CGI を追加.
Web PI のインストール.
Web Platform Installer で PHP 8 のインストール.
次の内容の php を開き,うまく動作していることを確認.
<?php phpinfo(); ?>
Edge で WebGL が表示できない?
Edge で three.js を利用したデータが表示できなかった.
WebGL で表示可能な形式に変換
https://itl.mish.work/i_Tools/to_wgl/
デバッガで追いかけると,WebGL を利用できない様なエラー.
Edge を再起動すると,うまく表示できるようになった.
何だったのだろう?
2023/01/17
Win8.1 環境の Edge で「使用可能な場合はハードウェア …」を OFF にする必要があった.
2024/07/18
仮想マシンの Win11 Edge で表示できなくなっていたので,その設定.
Edge の「設定」-「システムとパフォーマンス」で
「使用可能な場合はグラフィック アクセラレータを使用する」を「OFF」にして「再起動」.
2024/07/24
環境や 3D データなどによると思いますが,
「…グラフィック アクセラレータを…」を「OFF」にすると表示が遅くなったり,表示されなくなることもあります.
::CreateMutex の名称
以前作成した W_mutex を利用.
同じドキュメントを開かない様なガードに使えると思い,単体テスト用のコードを書いた.
#include "messbar.hxx"
#include "itls_tmp.hxx"
#include "cmd_line.hxx"
#include "S_Exec.hxx"
#include "W_mutex.hxx"
tstring make_mutex_name (const tstring& doc_name)
{
tstring mutex_name ;
v_tstring argv = ::get_arg() ;
if (argv.size() > 0) {
mutex_name += argv[0] ;
mutex_name += _T(" ") ;
}
mutex_name += doc_name ;
///////////////////////////////////////////////////////////////
// mutex_name = ::Path_Normalize(mutex_name,_T('/')) ;
///////////////////////////////////////////////////////////////
std::terr << mutex_name << std::endl ;
return mutex_name ;
}
bool t_wait (const tstring& doc_name)
{
tstring mutex_n = ::make_mutex_name(doc_name) ;
size_t bar_max = 1000 ;
MessageBar bar(_T("wait"),bar_max) ;
for (size_t index=0 ; index<bar_max ; index++) {
::Sleep(100) ;
W_mutex mutex(mutex_n.c_str()) ;
bar.SetBarInc() ;
if (mutex.Is_exist()) {
}
else {
break ;
}
}
return true ;
}
bool t_loop (const tstring& doc_name)
{
tstring mutex_n = ::make_mutex_name(doc_name) ;
W_mutex mutex(mutex_n.c_str()) ;
size_t bar_max = 100 ;
MessageBar bar(_T("loop"),bar_max) ;
for (size_t index=0 ; index<bar_max ; index++) {
bar.SetBarInc() ;
::Sleep(30) ;
}
::Sleep(2000) ;
return true ;
}
bool test (const tstring& doc_name)
{
::t_wait(doc_name) ;
::t_loop(doc_name) ;
return true ;
}
int _tmain (int argc,TCHAR* argv[])
{
_tsetlocale(LC_ALL,_T("")) ;
::reg_argv(argc,argv) ;
if (argc > 1) {
test(argv[1]) ;
}
else {
time_t now = ::time(NULL) ;
size_t count = 5 ;
tstring test_cmd ;
S_Exec se ;
{
tstring exe_name ;
tstring tmp_name ;
{
exe_name = argv[0] ;
}
{
tstring temp_dir = ::Get_i_Tools_tmp() ;
tstring time_str = ::Now_Format(_T("%H%M%S")) ;
tmp_name = ::Path_AddLastSP(temp_dir) + time_str + _T(".tmp") ;
}
{
test_cmd = exe_name + _T(" ") + tmp_name ;
}
{
se.SetFile (exe_name.c_str()) ;
se.SetParamaters(tmp_name.c_str()) ;
}
{
for (size_t index=0 ; index<count ; index++) {
std::terr << test_cmd << std::endl ;
se.Execute() ;
::Sleep(2000) ;
}
}
{
::Sleep(1000) ;
tstring mutex_n = ::make_mutex_name(tmp_name.c_str()) ;
size_t bar_max = 1000 ;
MessageBar bar(_T("test wait "),bar_max) ;
for (size_t index=0 ; index<bar_max ; index++) {
W_mutex mutex(mutex_n.c_str()) ;
if (mutex.Is_exist()) {
bar.SetBarInc() ;
::Sleep(100) ;
}
else {
break ;
}
}
}
}
}
return 0 ;
}
#include "messbar.cxx"
Mutex の名称としては,exe 名とドキュメント名を連結したものとした.
最初,実行させるとうまく動作しない(Mutex オブジェクトが存在するはずなのに抜ける).
::CreateMutex に与えている名称がうまくなかった.’\’ が使えない.
パスの区切りを ‘/’ に変更してうまくいった.
次の様なコードをアプリケーションクラスの InitInstance に追加.
{
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen) {
tstring doc_name = cmdInfo.m_strFileName ;
tstring exe_name = ::Get_module_name() ;
tstring mtx_name = exe_name + _T(" ") + doc_name ;
mtx_name = ::Path_Normalize(mtx_name,_T('/')) ;
static W_mutex mutex(mtx_name.c_str()) ;
if (mutex.Is_exist()) {
return FALSE ;
}
}
}
Jetpack Boost の影響?
このページもそうだが,
WordPress のページにつけている「QR コード」が意図した位置に表示されていないことに気づいた.
先日,表示が速くなるかなと思い「Jetpack Boost」の設定を変更した.
どうもこれが影響していたみたい.
「必須ではない JavaScript を後回しに」の機能を「OFF」に.
* QRコードは株式会社デンソーウェーブの登録商標です.
https://www.qrcode.com/faq.html#patentH2Title
再起動マネージャ
何年か前に有効にした「再起動マネージャ」.
Restart Manager in MFC
MFC 再起動マネージャ
その実装がうまくなかった.
編集操作中に「自動保存」が動作すると,意図しない状態になってしまうことがあった.
原因は,実装方法がうまくないだけではあるが,なかなか難しい.
Serialize が呼ばれた時に,一部の情報を更新しているため,例えば選ばれているものに影響を与えてしまう.
実際はデータに応じて選択状態が変わるのだが,それに気づかず操作してしまうことがある.
これとは別にバックアップ機能を持っているので「自動保存」が動作しない様に修正することに.
本当はこれだけでは足りない.
編集操作中に「上書き保存」された時も同様に動作するため,この部分の修正が必要か?
ユーザが意識している操作なので,現状のままとするか?