ASUSTOR NAS Photo Gallery
今度は ASUSTOR NAS の Photo Gallery と AiFoto .
Photo Gallery 3 Beta も存在し,その場合は AiFoto 3 .
上が AiFoto ,下は AiFoto 3 .
AiFoto 3 では,前バージョンでの保存場所 \\AS5202T\PhotoGallery と,新しい保存場所の \\AS5202T\Home\MyPhoto が見える.
スクリーンショットなどはバックアップされない?
2020/11/21
外から VPN で接続してみると,Synology NAS と QNAP NAS は大丈夫だが ASUSTOR NAS は見えない.
ファイアウォールの設定でガードがかかっていたので,VPN 接続の場合通る様に変更.
ADM を起動して「設定」-「ADMディフェンダー」-「追加」.
Synology NAS Photo Station
スマートフォンを変えたことで「WD Cloud」アプリが使えなくなった?
それならばと思い,同じ様な目的で使えるものを Synology NAS で設定してみた.
「パッケージセンター」で「Photo Station」をインストール.
インストール後のアイコンのクリックや次の様な入力で Photo Station を起動できる.
https://ds116/photo/
実体は \\DS116\photo に置かれる.
今度はスマートフォンでの「DS photo」の設定.
この時わかり難かったのが「バックアップ先」の指定方法.
アルバム(PC で言うフォルダ)を作成してそれを選択するのがわかり難い.
チェックボックスの存在がすぐにはわからなかった.
旧スマートフォンの moto g5 にも DS photo を設定.
PC で見ると,多くの jpg の更新日時が 2019/11/08 15:40 から 15:50 になっている.
原因は,この頃内蔵メモリの空きが少なくなり SD カードに移した ためと思われる.
Photo Station や DS photo では,画像ファイルに持っている撮影日時を使用しているので特に問題ない.
2 つの壊れた jpg があったため,これらのファイルのアップロードで何度もリトライして進まなかった.
一度アップロードを止めて,ファイルを削除することで対応.
壊れた jpg は,撮影時容量不足で途中までしか保存できなかった不完全な画像ファイル.
std::vector のコピーで実行時エラー
std::vector のデータ vf3a をコピーしようとして実行時エラー.
--------------------------- Microsoft Visual C++ Debug Library --------------------------- Debug Assertion Failed! Program: c:\Temp\Test\T_gonsa\T_cmb_f\debug.080\T_cmb_f.exe File: c:\program files (x86)\microsoft visual studio 8\vc\include\vector Line: 741 Expression: vector subscript out of range For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) --------------------------- 中止(A) 再試行(R) 無視(I) ---------------------------
原因は vf3a のサイズが 0 .
vf3a.size() が 0 より大きい時のみコピーする様に変更しなければならない.
inline v_u__8 To_v_u__8 (const Vf3A& vf3a)
{
v_u__8 data ;
{
size_t vCount = vf3a.size() ;
u_16 vf3_size = u_16(sizeof(float)*3*vCount) ;
data.resize(sizeof(u_16)+vf3_size) ;
{
::MemMove(&data[0],sizeof(u_16),&vCount,sizeof(u_16)) ;
}
if (vCount > 0) {
::MemMove(&data[2],vf3_size, &vf3a[0],vf3_size) ;
}
}
return data ;
}
NAS 上で OpenMP ?
今まで Windows 上で動かしていた OpenMP 対応のコードを,NAS 上で…
QNAP NAS 上にソースをコピーしてコンパイルすると
[Iwao@TS253D T_cmb_f]$ g++ T_cmb_f.cpp -Wall -fopenmp In file included from T_cmb_f.cpp:12:0: /share/Public/CloudD/GoogleD/Develop/_.SRC/Test/t_g3d_et.hpp:12:10: fatal error: omp.h: No such file or directory #include <omp.h> ^~~~~~~ compilation terminated. [Iwao@TS253D T_cmb_f]$
もう少し単純なコードで…
#ifdef _OPENMP #include <omp.h> #endif #include <clocale> #include <iostream> #include "i_define.hxx" bool Test (void) { #ifdef _OPENMP #pragma omp parallel for #endif for (long index=0 ; index<20 ; index++) { #ifdef _OPENMP #pragma omp critical (wait) #endif std::cout << index << std::endl ; } return true ; } int _tmain (int argc,TCHAR* argv[]) { _tsetlocale(LC_ALL,_T("")) ; { ::Test() ; } return 0 ; }
[Iwao@TS253D T_cmb_f]$ cd ../T_omp/ [Iwao@TS253D T_omp]$ g++ T_omp.cpp -Wall -fopenmp T_omp.cpp:10:10: fatal error: omp.h: No such file or directory #include <omp.h> ^~~~~~~ compilation terminated. [Iwao@TS253D T_omp]$
これとは直接関係ないが,
普通にコンパイルした T_cmb_f を QNAP NAS で実行すると,CPU などの温度が正しく表示されない状態に陥った.
2021/05/24
Ubuntu Linux Station ではうまく動作する.
Linux Center でも動作する.
3D データの読み書きの時間
3D データを保持するために,幾つかの形式での読み書きの時間を計測.
bool T_s_a_l (const GonsA& gnsa_,LPCTSTR pathName) { GonsA gnsa = gnsa_ ; double slt = 0 ; double s_t = 0 ; double l_t = 0 ; { // save ElapseTime et ; ::GonsA_To(gnsa,pathName) ; s_t = et.GetElapse() ; } { // load ElapseTime et ; GonsA ga = ::To_GonsA(pathName) ; l_t = et.GetElapse() ; } { slt = s_t + l_t ; } std::tout << ::Path_GetExtLow(pathName) << _T("\t") << slt << _T("\t") << l_t << _T("\t") << s_t << std::endl ; return true ; }
file ? =\\DS116\public\...\123test-layer2\123test-layer2.3ds ac 1.192 0.711 0.481 imo 4.206 3.195 1.011 x3d 2.213 0.461 1.752 wrl 0.831 0.55 0.281 3ds 0.571 0.37 0.201 ix3 1.853 1.092 0.761 ply 3.114 1.852 1.262 nxr 1.623 0.812 0.811 stl 0.2 0.15 0.05 ipl 4.947 4.436 0.511 file ? =\\DS116\public\...\123test-layer2\123test-layer2.3ds ac 1.202 0.711 0.491 imo 4.016 3.065 0.951 x3d 0.751 0.461 0.29 wrl 0.871 0.601 0.27 3ds 0.511 0.291 0.22 ix3 1.792 1.021 0.771 ply 3.145 1.923 1.222 nxr 1.512 0.701 0.811 stl 0.2 0.15 0.05 ipl 4.867 4.346 0.521 file ? =\\DS116\public\...\9LM-2U-J8F8B-3DLJ.001\9LM-2U-J8F8B-3DLJ.stl ac 16.214 9.504 6.71 imo 100.935 93.545 7.39 x3d 10.004 6.129 3.875 wrl 12.849 9.073 3.776 3ds 27.149 0.301 26.848 ix3 72.023 38.485 33.538 ply 77.751 62.049 15.702 nxr 21.912 9.974 11.938 stl 31.345 30.784 0.561 ipl 1893.04 1886.52 6.519 file ? =\\AS5202T\Home\gcc_test\Test\t_linux\3D\T_s_a_l\n2950x2450mm.dae ac 1.011 0.551 0.46 imo 2.624 2.013 0.611 x3d 1.031 0.33 0.701 wrl 0.772 0.511 0.261 3ds 0.881 0.511 0.37 ix3 2.053 1.182 0.871 ply 2.543 1.502 1.041 nxr 1.443 0.471 0.972 stl 0.41 0.35 0.06 ipl 19.458 18.917 0.541 file ? =\\AS5202T\Home\gcc_test\Test\t_linux\3D\T_s_a_l\n2950x2450mm.dae ac 1.012 0.551 0.461 imo 2.613 2.023 0.59 x3d 0.751 0.33 0.421 wrl 0.731 0.47 0.261 3ds 0.841 0.421 0.42 ix3 2.063 1.172 0.891 ply 2.623 1.652 0.971 nxr 1.593 0.491 1.102 stl 0.41 0.35 0.06 ipl 18.267 17.746 0.521 file ? =\\AS5202T\Home\gcc_test\Test\t_linux\3D\T_s_a_l\133118.x3d ac 18.266 8.762 9.504 imo 55.18 45.175 10.005 x3d 19.888 6.799 13.089 wrl 19.268 14.681 4.587 3ds 15.172 3.165 12.007 ix3 48.259 24.765 23.494 ply 69.459 38.655 30.804 nxr 21.321 6.74 14.581 stl 15.943 15.102 0.841 ipl 1290.08 1282.34 7.741
* この結果は私のコードでの時間で,一般的なコードとは異なると思う.
2020/11/11
'\\testxp\documents\Develop\VC_Test\T_gonsa\T_cmb_f' file ? =\\Z170S0\Temp\i_Tools.tmp\T_cmb_f\20201111\133118.x3d x3d 9.422 5.203 4.219 ipl 303.235 296.594 6.641 wrl 8.016 3.266 4.75 ix3 22.766 8.329 14.437 stl 5.687 5.265 0.422 ply 32.875 17.844 15.031 3ds 5.204 1 4.204 ac 7.733 4.062 3.671 mqo 165.907 162.438 3.469 nxr 11.812 5.047 6.765 imo 26.437 19.484 6.953 ipl 20.437 9.25 11.187 ply 34.625 13.844 20.781 stl 3.359 0.922 2.437 x3d 89.297 30.25 59.047 mqo 47.781 0 47.781 nxr 108.609 43.046 65.563 ix3 294.405 171.546 122.859 wrl 99.313 54.297 45.016 ac 56.454 12.922 43.532 imo 3057.28 3007.03 50.25 3ds 189.515 117.265 72.25 ipl 418.797 407.344 11.453 ix3 27.75 8.078 19.672 ply 43.546 23.093 20.453 x3d 20.391 7.485 12.906 ac 15.406 6.453 8.953 nxr 13.173 5.313 7.86 stl 6.656 5.125 1.531 wrl 13.767 7.282 6.485 imo 52.499 37.187 15.312 mqo 304.547 294.406 10.141 3ds 9.313 1.172 8.141 file ? =
フォルダの更新日時の変更
今までファイルの更新日時の変更は使っていた.
https://www.vector.co.jp/soft/winnt/util/se500182.html
が,このツールでフォルダの更新日時を変更しようとするとできない.
コードは CFile::SetStatus を使用している.
CFileStatus fs ; CFile::GetStatus(file,fs) ; fs.m_mtime = newTime ; CFile::SetStatus(file,fs) ;
CFile::SetStatus の中(…\atlmfc\src\mfc\filest.cpp)を見ると ::SetFileTime を使用している.
また Linux などでも使える utime(…\crt\src\utime.c)も ::SetFileTime を使っている.
VC 6 で作成したものをデバッガで追いかけると ::CreateFile で 0xffffffff が返ってきている.
ASUSTOR NAS で試すと,特に問題なく変更できる.
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/t_mtime/t_utime $ cat t_utime.cpp #include <clocale> #include "i_trace.hxx" #include "filetime.hxx" #include "itls_tmp.hxx" #include "c_which.hxx" int _tmain (int argc,TCHAR* argv[]) { _tsetlocale(LC_ALL,_T("")) ; { tstring temp_path = ::Get_i_Tools_tmp_date() ; tstring fold_path = ::Path_AddLastSP(temp_path) + ::Now_Format(_T("%H%M%S")) ; tstring file_path = ::Path_AddLastSP(temp_path) + ::Now_Format(_T("%H%M%S")) + _T(".tmp") ; { ::Folder_Create (fold_path) ; ::File_CreateEmpty(file_path) ; } { time_t f_time = ::File_GetMTime(file_path.c_str()) ; f_time-= 3600*24*7 ; ::File_SetMTime(file_path.c_str(),f_time) ; ::File_SetMTime(fold_path.c_str(),f_time) ; } { tstring cmd = tstring(cmd_ls_la) + _T(" ") + ::QuotM_Add_Auto(temp_path) ; _tsystem(cmd.c_str()) ; } } return 0 ; } Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/t_mtime/t_utime $ g++ t_utime.cpp -Wall Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/t_mtime/t_utime $ ll total 136 drwxrwxrwx 2 Iwao users 4.0K Nov 7 16:24 ./ drwxrwxrwx 3 Iwao users 4.0K Nov 7 15:32 ../ -rwxr-xr-x 1 Iwao users 122.7K Nov 7 16:24 a.out* -rwxrwxrwx 1 Iwao users 838 Nov 7 16:22 t_utime.cpp* Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/t_mtime/t_utime $ ./a.out total 0 drwxr-xr-x 3 Iwao users 80 Nov 7 16:24 . drwxr-xr-x 3 Iwao users 60 Nov 7 16:24 .. drwxr-xr-x 2 Iwao users 40 Oct 31 16:24 162451 -rw------- 1 Iwao users 0 Oct 31 16:24 162451.tmp Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/t_mtime/t_utime $
2024/01/04
フォルダの更新日時の設定
Win10 他の PC が表示されない
::SHBrowseForFolder を使用している所で,最近 PC 名でアクセスできないと問合せが…
私自身はエクスプローラで直接入力していたので特に困ってはなかったが,ちょっと調べたのでメモ.
「Win10 他の PC が表示されない」で検索すると幾つかの対応方法が見つかる.
Windows10 – ネットワーク上のコンピューターが表示されない時の対処法
Windows 10 にてネットワークコンピュータが表示されない場合
【解決】ネットワークでコンピューターや共有フォルダが表示されない【Windows10】
Windows 10のエクスプローラの[ネットワーク]にPCが表示されない場合の対処方法
SMBv1 は、Windows 10 バージョン1709、Windows Server バージョン1709以降のバージョンでは既定でインストールされません。
「SMB 1」を入れる様な記述も多いが,「WS-Discovery」を利用する方法で…
動作を確認するために,タスクマネージャのサービスで「Function Discovery Resource Publication」を「開始」.
エクスプローラで見える様になる.
保有している NAS で,QNAP TS-253D は表示されている.
Synology NAS DS116 は「Windowsネットワーク探索を有効化して…」のチェックで表示されるようになる.
Synology NAS DS218jをWindowsからネットワーク探索
その他の NAS では設定がわからず,直接入力で対応.
実際はネットワークドライブとして割り当てたり,ショートカットを作成したりしている.
2021/11/10
Win10 などで,Windows Update してからアクセスできなくなった.
この場合は「ゲストログオンを有効にする」必要がある.
https://dev.mish.work/wordpress/2021/11/05/win-2022-classic-asp/
https://youtm-log.com/failure/pc-failure/anzendenai/
2024/12/05
サーバの共有フォルダにアクセスできなくなった場合は,共有アクセス用のアカウントを追加する.
https://dev.mish.work/wordpress/2024/11/15/add-user-win11-24h2/
サーバ上のフォルダ名を記憶可能なツールを追加.
https://download.mish.work/iTls_2024_11.zip
MFC コントロールのサブクラス化
今まで CWnd::SubclassDlgItem を使ってきたが,DDX_Control も同じ様なことをしているのではと思い調べてみた.
リストボックスをサブクラス化した時の OnInitDialog でのコード.
{ m_CtrlListFolder.SubclassDlgItem(IDC_LIST_FOLDER,this) ; m_CtrlListFolder.Init() ; m_CtrlListFolder.ResetContent() ; m_CtrlListFolder.SetItemHeight(30) ; }
IDC_LIST_FOLDER は,オーナードローリストボックス.
Inside Visual C++ や MFC による Windows 95 プログラミング を参考にしたと思う.
MFC のバージョンが上がると少しずつ変更が加わっている.
ソースは DlgData.cpp .VC 11 からは WinCore2.cpp .
MFC のソースは難しい.
かなり前の MSDN で次の内容を見つけた.
[MSVC] MFC を使用しての動的サブクラス化
DDX_Control でもいけそうな気もするが,…
C++ 継承でのエラー C2660
元々一つのクラスとしていたが,それを分割した時のエラー対応のメモ.
bool D_Image::Draw (HDC hdc,const RECT rect) { if (GetDocPath().empty()) { return false ; } { if (::Path_GetExtLow(GetDocPath()) == _T("emf")) { return E_MetaF::Play(hdc,GetDocPath().c_str(),rect) ; } } if (HBMP == NULL && HICN == NULL) { // ... } if (HBMP != NULL) { return ::Bitmap_Draw(hdc,rect,HBMP) ; } else if (HICN != NULL) { return ::Icon_Draw (hdc,rect,HICN) ; } return false ; } bool D_Image::Draw (HWND hwnd) { if (GetDocPath().empty()) { return false ; } if (hwnd == NULL) { return false ; } RECT rect = { 0 } ; ::GetClientRect(hwnd,&rect) ; bool result = false ; { HDC hdc = ::GetDC(hwnd) ; result = Draw(hdc,rect) ; ::ReleaseDC(hwnd,hdc) ; } return result ; }
この E_MetaF::Play の部分を分離.
class D_I_E : public D_Image { public: virtual bool Draw (HDC hdc,const RECT rect) { if (GetDocPath().empty()) { return false ; } { if (::Path_GetExtLow(GetDocPath()) == _T("emf")) { return E_MetaF::Play(hdc,GetDocPath().c_str(),rect) ; } } return D_Image::Draw(hdc,rect) ; } } ;
この状態で変数の宣言を D_I_E として呼び出している所でエラー.
Sel_doc.Draw(this->GetSafeHwnd()) ; // Sel_doc.D_Image::Draw(this->GetSafeHwnd()) ;
--------------------構成: T_DImage - Win32 Debug-------------------- コンパイル中... T_DI_Dlg.cpp \\TestXP\Documents\Develop\VC_Test\Test\etc\EnhMetaF\T_DImage\T_DI_Dlg.cpp(186) : error C2660: 'Draw' : 関数が不正な 1 個の実引数をともなって呼び出されました。 cl.exe の実行エラー T_DImage.exe - エラー 1、警告 0
下の様に修飾すれば通る.
また,D_I_E の関数として次のものを用意すれば D_Image:: の様に修飾しなくても大丈夫.
virtual bool Draw (HWND hwnd) { return D_Image::Draw(hwnd) ; }
構造体の初期化
幾つかの Windows API を呼び出す所を書き換えていて,
RECT や POINT の構造体の初期化で色々と気になり少し調べたことのまとめ.
class として書く場合は,コンストラクタで初期化しているので意識しない.
struct Vector2 { // Vector2 () {} Vector2 (T v=0) : x(v), y(v) {} Vector2 (T x, T y) : x(x), y(y) {} // ... T x ; T y ; } ;
MFC を使用している時も同様.
CRect rect(0,0,0,0) ;
他の Win32 の構造体だと
MEMORYSTATUSEX memStat ; memset(&memStat,0,sizeof(MEMORYSTATUSEX)) ; memStat.dwLength= sizeof(MEMORYSTATUSEX) ; ::GlobalMemoryStatusEx(&memStat) ;
Windows では ::ZeroMemory を使っていることもあり.
#define ZeroMemory(pb,cb) memset((pb),0,(cb))
これまで RECT を 0 にする場合,次の様にも書いていた.
RECT rect = { 0,0,0,0 } ;
次の様に省略する方法もあるのは知っていたがあまり使っていない.
RECT rect = { 0 } ;
K & R 2nd の A8.7 に書かれている.
Web で検索すると ” RECT rect = { } ; ” の様な記述もあったが,これはどうかと…
構造体のコピーや戻り値は悩む所.
RECT の様な単純な構造では特に問題ないと思う.
XML などのツリー構造の場合はデータにより時間がかかるので注意が必要.
2020/10/13
次の様なコードで動作 を確認.
struct strct_c { i__8 i1 ; i_32 i4 ; i_16 i2 ; i_64 i8 ; } ; bool test_struct (void) { strct_a sa_rn ; strct_b sb_rn ; strct_c sc_rn ; strct_a sa_f0 = {1,2,3,4} ; strct_b sb_f0 = {1,2,3,4} ; strct_c sc_f0 = {1,2,3,4} ; strct_a sa__0 = {0} ; strct_b sb__0 = {0} ; strct_c sc__0 = {0} ; strct_a sa_m0 ; memset(&sa_m0,0,sizeof(sa_m0)) ; strct_b sb_m0 ; memset(&sb_m0,0,sizeof(sb_m0)) ; strct_c sc_m0 ; memset(&sc_m0,0,sizeof(sc_m0)) ; ::dump_mem(&sc_rn,sizeof(sc_rn)) ; ::dump_mem(&sc_f0,sizeof(sc_f0)) ; ::dump_mem(&sc__0,sizeof(sc__0)) ; ::dump_mem(&sc_m0,sizeof(sc_m0)) ; return true ; }
TS-253D 再セットアップ – 6
今日 QTS を起動すると,更新版があると表示が…
メッセージに従い操作すると何故か更新できない.
Qfinder やスマートフォンから操作しても更新できない.
他にも,先日から Ubuntu Linux Station の更新がうまくできなくなっている.
これらがうまく機能しなくなったのは先週くらい?から.
閉じた LAN 用にスイッチングハブを追加してそこに接続したのが影響している?
試しに LAN ケーブルを外して更新すると通った.
同様に Ubuntu Linux Station も更新できた.
2020/10/05
記事を書いた時は設定場所がわからなかった.
「ネットワーク」-「インターフェース」の中に「システムの既定のゲートウェイ」がある.
開いた設定画面で LAN 1 に設定.
2020/11/08
先日また QTS の更新版があり更新してみたが…
「システムの既定のゲートウェイ」の設定だけでは回避できないのか?それとも設定が違う?
結局ケーブルを抜いて更新した.
コンソール AP での define
コンソール AP で Windows.h や Afx.h を読み込んだ時のエラーに対応するために i_def_aw.hxx を用意.
_AFXDLL で判断しているため「MFC のスタティックライブラリを使用」には対応できない.
// (VS8)\VC\AtlMFC\Include\AfxV_W32.h #ifdef _MSC_VER #ifdef _UNICODE #ifndef UNICODE #define UNICODE // UNICODE is used by Windows headers #endif #endif #ifdef UNICODE #ifndef _UNICODE #define _UNICODE // _UNICODE is used by C-runtime/MFC headers #endif #endif #endif #ifdef _MSC_VER #ifdef _AFXDLL #include <Afx.h> #else #include <Windows.h> #endif #endif #ifdef _MFC_VER // ... #endif
2022/07/27
その後,Windows.h を使用するコードを書いていてのまとめ.
#include "i_def_aw.hxx" // #include <Windows.h>
Win32 API のみで書いていて,MFC を利用する可能性がある場合は,この様に置き換え可能と思われる.
そうでない場合は,それらを利用するソースの先頭で Afx.h または i_def_aw.hxx をインクルードすれば良い.
https://dev.mish.work/wordpress/?s=i_def_aw
2022/08/01
今回書いた FVersion.hxx の様に MFC を利用しないものは,Windows.h の方が良い.
MFC コードが混在する場合 は,i_def_aw.hxx の利用と _MFC_VER での振り分けが良さそう.
NAS VirtualBox に Win10 … 続き
今日 ASUSTOR NAS AS5202T の ADM を起動すると VirtualBox の更新版があった.
新しいものは 6.1.12.r01 .以前のものは 5.2.22 だったと思う.
以前 PC で作成した vdi を NAS にコピーして利用している環境 DevX .
5.2 の時よりも起動は安定したか?止まってしまうこともあり.
前回,インストールしようとしたが操作ができずそのままとなっていた.
VirtualBox の更新でどこかの設定が変更されたのかはわからないが,以前選択できなかった「リモートデスクトップ」の設定に入れるようになった.
Win10 PC の「リモートデスクトップ接続」で接続してインストール.
いつもの様に進めていくと「Microsoftアカウント」の入力に.
「代わりにドメインに参加する」を選択すると「ローカルアカウント」での入力ができた.
Joomla! の URL
Joomla! のページで,今まで URL に Joomla! が管理している ID が付加されていた.
特に困ってはなかったが,他の NAS に移行すると ID が変わってしまうみたいなので調べてみた.
検索してもなかなかいい情報がヒットしない.
それで見つけたのが次の所.
Joomlaの新しいSEF URL(パーマリンク)
「記事:オプション」の「ルーティング」の所を「モダン」を選択して「URLからIDを削除する」を「はい」に.
Joomla! は,インデックスされるまで 404 となってしまう.
そのため一部のページは次の様なファイルを置くことで対応.
https://mish.work/joomla/index.php/cpp/ref-vcredist-xxx-exe.html
<!DOCTYPE html> <html lang="ja" > <head > <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" /> <title >vcredist</title> <meta http-equiv="refresh" content="0;url=/joomla/index.php/cpp/ref-vcredist-xxx-exe.html"> </head> <body > </body> </html>
TS-253D 再セットアップ – 5
外からアクセスすることはないが,念のため…
QTS に入るためのポートを変更.
Synology NAS では次の所に書かれている.
Synology NAS のセキュリティを強化する方法
QNAP NAS で書かれていた所.
ワンランク上のセキュリティ対策を施す「myQNAPcloud」
Linux Station のインストール.
続いて Ubuntu のインストール.
右の真ん中辺りの http://…/linux-station-vnc/ をクリックして起動できる.
そのままだと英語なので,日本語のインストール.
「Settings」-「Region & Language」-「Manage installed Languages」.
「Install / Remove Languages…」.
「Japanese」にチェックを付けて「Apply」.
どこかに設定があるのかもしれないが,インストールされた「日本語」を選べないので再ログイン.
有効にするために「Restart」.
robocopy でエラー 50 (0x00000032)
次の様なコマンドでファイルをバックアップしていると,
robocopy "\\DevX\Public\Documents\Develop" "\\AS5202T\Public\Document\Develop" /e /xo /xf *.bak ... 6 \\DevX\Public\Documents\Develop\VC_Test\T_mem\T_PhysF\ 8 \\DevX\Public\Documents\Develop\VC_Test\T_STL\ 2020/09/11 10:03:08 エラー 50 (0x00000032) コピー先ディレクトリにアクセスしています \\AS5202T\Public\Document\Develop\VC_Test\T_STL\ この要求はサポートされていません。 30 秒間待機しています... 再試行しています...
何かの拍子に開いたままの状態になってしまったみたいで ASUSTOR NAS で「切断」することで対応.
* 使用しているユーザを切断しない様に注意.
日本語名ファイルのアップロード
次の所から日本語名のファイルをアップロードはできていたが,コードでの対応はうまくできていなかった.
https://itl.mish.work/…/upload.htm
そのため,アップロード時に 7 ビットのファイル名に変換することで対応していた.
これらのコードを書いたのは 3 年位前なので,その当時はまだよくわかっていなかった.
https://dev.mish.work/wordpress/2017/09/04/chttpfile-http-post/
またテクスチャファイル名などが日本語の場合はうまくいかないことも多かった.
最初,日本語名でそのままアップロードすると,いろいろ困った現象に…
PC から NAS 上のアップロード先のファイルが見えなくなってしまった.
一度スマートフォンの NAS 用のファイルマネージャから参照すると PC でも見えるようにはなった.
動作を見ると,サーバ側のコードは動作しているが,格納しているファイル名がうまく渡せていない.
ログなどを確認すると,デバッグ用 MBCS.exe でファイル名が「シフト JIS」のままになっていた.
送られるデータとしては次の所にあたる部分.
$_FILES[‘userfile’][‘name’]
これを UTF-8 にして渡す必要がある.
コードとしては次の所.
v_char Make_send_data (LPCTSTR upFile,LPCTSTR ___boundary) { v_char up_Data = v_c_Load(upFile) ; v_char sndData ; { tstring ct_boundary = ___boundary ; tstring file_img = ::QuotM_Add(_T("file_img")) ; tstring fileName = ::QuotM_Add(::Path_GetName(upFile)) ; tstring dataPre ; tstring dataPst ; dataPre+= CT_boundary__ + ct_boundary + C_CRLF ; dataPre+= CD_cd_f_d_n_ + file_img + CD_cd__fn_ ; dataPre+= fileName + C_CRLF ; dataPre+= CT_ct_a_o_s C_CRLF ; dataPre+= C_CRLF ; dataPst+= C_CRLF ; dataPst+= CT_boundary__ + ct_boundary + CT_boundary__ C_CRLF ; // v_char vc_pref = ::To_v_char(::To__string(dataPre.c_str())) ; v_char vc_pref = ::To_v_char(::To_UTF8 (dataPre.c_str())) ; v_char vc_post = ::To_v_char(::To__string(dataPst.c_str())) ; sndData.insert(sndData.end(),vc_pref.begin(),vc_pref.end()) ; sndData.insert(sndData.end(),up_Data.begin(),up_Data.end()) ; sndData.insert(sndData.end(),vc_post.begin(),vc_post.end()) ; } return sndData ; }
To__string でそのまま char の配列としていたものを UTF-8 にしてから char の配列に.
UpFile.hxx
quotm.hxx
2020/09/08
今度はサーバ側のコード.
本当はクライアントの CInternetSession のコンストラクタで与える User Agent .
UTF-8 でセットすれば良いのはわかるが,引数が LPCTSTR なのでどうすれば良いかわからず.
そのためサーバ側のログを出力する部分でうまく機能しないことがある.
Synology NAS では,一部文字化けするが特に問題なさそう.
ASUSTOR NAS や QNAP NAS では,20200908.txt の読み込み時に止まっている様子.
次の様に //IGNORE を付加して変換.
iconv API は iconv_open(_T("UTF-8//IGNORE")) iconv -f CP932 -t UTF-8//IGNORE 20200908.txt > 20200908.uf8 uconv -f CP932 -t UTF-8 -i 20200908.txt -o 20200908.uf8
FindExecutable と C2664
::FindExecutable の動作を確認しようと思い次の様なコードを書いた.
#include <clocale> #include <iostream> #include <Windows.h> #include "i_define.hxx" #include "tstring.hxx" tstring Get_doc_exe (LPCTSTR doc) { tstring exe_path ; exe_path.resize(MAX_PATH,0) ; ::FindExecutable(doc,NULL,&exe_path[0]) ; return exe_path.c_str() ; } int _tmain (int argc,TCHAR* argv[]) { _tsetlocale(LC_ALL,_T("")) ; { tstring buf ; buf.resize(1000) ; { while (std::terr << _T("file ? =") , std::tin.getline(&buf[0],buf.size())) { tstring str = buf.c_str() ; if (str == _T("q")) { break ; } else if (str == _T("Q")) { break ; } // str = ::QuotM_Del_All(str) ; if (str.empty()) { continue ; } // if (::File_IsNothing(str)) { continue ; } std::tout << ::Get_doc_exe(str.c_str()) << std::endl ; } } } return 0 ; }
MBCS でビルドすると問題ないが,UNICODE にすると,
--------------------構成: get_exe - Win32 Release-------------------- コンパイル中... get_exe.cpp C:\Documents and Settings\All Users\Documents\Develop\VC_Test\PC_doc\get_exe\get_exe.cpp(37) : error C2664: 'class std::basic_istream<unsigned short,struct std::char_traits<unsigned short> > &__thiscall std::basic_istream<unsigned short,struct std:: char_traits<unsigned short> >::getline(unsigned short *,int)' : 1 番目の引数を 'char *' から 'unsigned short *' に変換できません。 (新しい機能 ; ヘルプを参照) 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 C:\Documents and Settings\All Users\Documents\Develop\VC_Test\PC_doc\get_exe\get_exe.cpp(37) : fatal error C1903: 直前のエラーを修復できません; コンパイルを中止します。 cl.exe の実行エラー get_exe.exe - エラー 2、警告 0
C2664 については ここ .
Windows.h の include を i_define.hxx より後に.
::FindExecutable ではうまくない様な記述もあるが,今回の目的にはこれで良いかなと思う.
https://dobon.net/vb/dotnet/system/findassociatedexe.html
https://itl.mydns.jp/…/get_exe_2020_09.zip
更にちょっと面白い動作があったので…
#include "i_define.hxx" #include "tstring.hxx" #include <Windows.h> #include <clocale> #include <iostream> int _tmain (int argc,TCHAR* argv[]) { _tsetlocale(LC_ALL,_T("")) ; { tstring buf ; buf.resize(1000) ; { while (std::terr << _T("file ? =") , std::tin.getline(&buf[0],buf.size())) { tstring str = buf.c_str() ; if (str == _T("q")) { break ; } else if (str == _T("Q")) { break ; } if (str.empty()) { continue ; } ::ShellExecute(NULL,NULL,str.c_str(),NULL,NULL,SW_SHOWNORMAL) ; } } } return 0 ; }
関連付けされているドキュメントは,::ShellExecute で普通に開く.
そうでないドキュメントは,エクスプローラでクリックしたのと同じような動作.
NotePad や MSPaint などと入力すると,幾つかの exe は起動できる.
起動できないものもあり,その違いは不明.
https://itl.mydns.jp/…/se_doc_2020_09.zip
TS-253D 再セットアップ – 4
QTS で Virtualization Station をクリックすると,
「終了」を押してしばらくすると,
「VM の作成」.
予め iso は NAS にコピー済み.
「OK」を押すと,
ここは「キャンセル」.
「Win10x86」のアイコンを押すと,
「スタート」を押すと,Windows のセットアップが始まる.
後は Windows のいつものインストール動作.
「ローカルアカウント」でインストール.
「VM 情報」を選択して「ゲストツールCDを挿入する」.
ブラウザではあまり反応が良くない気がする.
PC などで操作する場合は VNC クライアント を使用した方が少しは快適.