Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

球が作成できない

背景画像のアップロードで,球を生成してそれに貼り付ける.
コード自体はそれほど難しくないので,1 日位でできると思ってた.
Windows のコンソール AP で,次の様なコードを書いてテスト.
MakeBG.cpp


#include "MessBar.hxx"
#include "i_Trace.hxx"
#include "GonsPrm2.hxx"
#include "Htm_thrj.hxx"

//*******************************************************************************
// make bg files imo and html
// Create : 2018/04/19
//*******************************************************************************
inline bool MakeBG (c_tstring& dibPath)
{
    tstring ext = ::Path_GetExtLow(dibPath) ;
    if      (ext == _T("bmp")) { ;              }
    else if (ext == _T("jpg")) { ;              }
    else if (ext == _T("png")) { ;              }
    else                       { return false ; }
    {
        tstring imoPath = ::Path_ChangeExt(dibPath,_T(".imo")) ;
        tstring htmName = ::Path_ChangeExt(dibPath,_T(".html")) ;
        tstring dmpName = ::Path_ChangeExt(dibPath,_T(".ipl")) ;
        {
            long div = 90/5 ;
            v_Vd3A pntsAry = ::BuildSphere(div) ;
            {
                std::tout << pntsAry.size() << std::endl ;
                if (pntsAry.size() > 0) {
                    Vd3A pnts = pntsAry[0] ;
                    std::tout << pnts.size() << std::endl ;
                    }
                tstring str = ::v_V3_To_tstring(pntsAry,_T(",")) ;
                {
                    std::tout << str << std::endl ;
                    }
                ::SaveText(dmpName.c_str(),str) ;
                }
            v_Vd2A  txuvAry = ::SetTextureUV(pntsAry) ;
                    pntsAry = ::V3_Scale (pntsAry,Vd3(20.)) ;
            Gons1   gons1 = ::Gons_BuildFace(pntsAry,txuvAry,dibPath.c_str()) ;
            GonsA   ga ;
                    ga.push_back(gons1) ;
            Ed3     es = ::GonsA_GetExtent(ga) ;
            {
                std::tout << imoPath << _T("\t") ;
                std::tout << ::V3_To_tstring(es.Volume()) << std::endl ;
                }
            if (es.Volume() != Vd3(0)) {
                es = Ed3(es.L*0.01,es.G*0.01) ;
                ::GonsA_ToOBJ(ga,imoPath.c_str()) ;
                ::HT_Make_three_js_html(imoPath.c_str(),es) ;
                }
            }
        }
    return true ;
    }

//*******************************************************************************
// Make BG
// Create : 2018/04/19
//*******************************************************************************
int _tmain (int argc,TCHAR* argv[])
{
    _tsetlocale(LC_ALL,_T("")) ;
    {
        double s = sin(rad(30)) ;
        double c = cos(rad(30)) ;
        std::tout << ::To_tstring(rad(30)) << _T("\t") << ::To_tstring(s) << _T("\t") << ::To_tstring(c) << std::endl ;
        }
    if (argc > 1) {
        v_tstring argAry ;
        for (int index=1 ; index<argc ; index++) {
            tstring av = argv[index] ;
            ::MakeBG(av) ;
            }
        }
    else {
        tstring buf ;
        buf.resize(1000) ;
        {
            while (std::terr << _T("dib ? =") , 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 ; }
                tstring dib_file = str ;
                ::MakeBG(dib_file) ;
                }
            }
        }
    return 0 ;
    }

#include "MessBar.cxx"

今度は,DS116 でビルドして実行すると,

Iwao@DS116:/var/.../Test/up_bg/data$ ./a.out
0.523599        98314745853377985068733249901357667205561433229409406145971019710277043155206326909160297391588106447153156445277590513896008090831662627743743127151181611161993303763348552511914898438567008016612049817143085994563143448055356356529593034366351316506187159487365573007925410016860727208738652774465536.000000  98321247861193438769252981549279948821735544950351014769381393881588573259178110828643912278175146924986161470094082713103803921735703931192359519739047155548857037547932930737608178537416409042994283830606984599100883034181136178714087912736395732787698542049681305006129736011480288874859116047106048.000000
dib ? =

本当は,

C:\Users\Iwao\...\i_Tools.tmp>\\DevXP\C_Drive\Temp\DS11x\MakeBG\Release.060\MakeBG.exe
0.523599        0.500000        0.866025
dib ? =

cmath が使えない様で,検索すると「-lm でコンパイルが通る」と言うのは見つかる.
が,コンパイルの問題ではなく,実行でうまくない.


当然ではあるが,DS115j でも同様.
試しに,opkg update と opkg install gcc .
root@DS116:/var/…/Iwao# opkg update
Downloading http://pkg.entware.net/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
root@DS116:/var/…/Iwao# opkg install gcc
Upgrading gcc on root from 6.3.0-1 to 6.3.0-1a…
Downloading http://pkg.entware.net/binaries/armv7/gcc_6.3.0-1a_armv7soft.ipk
Configuring gcc.
root@DS116:/var/…/Iwao#
もう一度,ビルドして実行すると,
Iwao@DS116:/var/…/Test/up_bg/data$ g++ MakeBG.cpp
Iwao@DS116:/var/…/Test/up_bg/data$ ./a.out
0.523599 0.500000 0.866025
dib ? =
予想以上に時間がかかってしまったが,何とか…
daikoku_edit.html



PHP $_FILES

やってないとすぐ忘れてしまうのでメモ.
PHP マニュアル POST メソッドによるアップロード


php 側での次の様な取り出し.
 $tempfile = $_FILES[‘fname‘][‘tmp_name’];
fname‘ にあたる部分は,input タグの name 属性.
 <input type=”file” name =”fname” accept=”.jpg,.png”>


CHttpFile でのアップロード の場合は,汎用的になる様に処理している.

	function  uf_upload_files  ()  {
		$d_dir =  uf_get_upload_folder() ;
	//	echo	$d_dir	.  "<br/>\r\n" ;
		$up_status = false ;
		foreach	($_FILES as  $keys => $values) {
			$file_e	= $values ;
			$tempfile =         	$file_e['tmp_name'] ;
			$filename = $d_dir .	$file_e['name'] ;
			$filename = uf_get_up_file_name($filename) ;
			if (is_uploaded_file($tempfile)) {
				$up_status = move_uploaded_file($tempfile,$filename) ;
				}
			}
		return	$up_status ;
		}


アップロード先のアクセス権

次の様な htm と php で,画像をアップできる所を用意.


up.htm

<!DOCTYPE html>
<html lang="ja" >
  <head >
    <meta charset="UTF-8" />
    </head>
  <body >
    <form action="http:./up.php" method="post" enctype="multipart/form-data">
      <input type="file" name ="fname" accept=".jpg,.png">
      <input type="submit" value="upload">
      </form>
    </body>
  </html>

up.php

<?php
  $tempfile = $_FILES['fname']['tmp_name'];
  $fileName = './data/' . $_FILES['fname']['name'] ;
  $up_status = false ;
  if (is_uploaded_file($tempfile)) {
    $up_status = move_uploaded_file($tempfile , $fileName ) ;
    }
  $frm_src = './' ;
  if ($up_status) {
    $frm_src = $fileName ;
    }
  header("Location: {$frm_src}") ;
  ?>

これらのファイルとアップ先のフォルダを用意しただけでは,アクセス権がないのでアップロードできない.
以前は,DSM に入り「File Station」で「権限」を設定していた.
今まで面倒と思いつつ,試しに Windows 環境からアクセス権を「読み取り(RX)(RX)」から「変更」に.

File Station で設定したものと少し異なるが,それなりに動作してそう.



WinFile.exe

Google ニュースで,次の内容を見つけた.
Windows 3.x時代の“ファイルマネージャ”がオープンソース化で復活~Windows 10でも利用可能に
WinXP までは,1999/10/14 8:00:00 の WinFile.exe を使用している.
Win7 でも動作させるための方法があって,試したこともあるがうまく動作しなかった.
Windows File Manager revived


次の所から落として動作を確認してみた.
WinFile v10.0 – Sharing 10 years of improvements
Winfile_orig_plus.zip の方がオリジナルに近いのでやってみたが,設定情報が保存されないみたい.
Winfile_v10.0.zip は,「Properties」などが新しくなってしまっている.



コンソール AP で C2065 C2059

コンソール AP で,ビルドすると

--------------------構成: T_S_xxx - Win32 Debug--------------------
コンパイル中...
T_S_xxx.cpp
\\devs\documents\develop\_.src\_yet\winmfc.hxx(68) : error C2065: 'CListCtrl' : 定義されていない識別子です。
\\devs\documents\develop\_.src\_yet\winmfc.hxx(68) : error C2065: 'ctrl' : 定義されていない識別子です。
\\devs\documents\develop\_.src\_yet\winmfc.hxx(68) : error C2059: 構文エラー : 'const'
\\devs\documents\develop\_.src\_yet\winmfc.hxx(68) : error C2143: 構文エラー : ';' が '{' の前に必要です。
\\devs\documents\develop\_.src\_yet\winmfc.hxx(68) : error C2447: '<L_PROPERTY>' : 関数ヘッダがありません (旧形式の仮引数リスト?)
...
\\devs\documents\develop\_.src\_yet\list.hxx(159) : error C2061: 構文エラー : 識別子 'CListCtrl' がシンタックスエラーを起こしました。
\\devs\documents\develop\_.src\_yet\list.hxx(169) : error C2061: 構文エラー : 識別子 'CListCtrl' がシンタックスエラーを起こしました。
...
\\devs\documents\develop\_.src\...\.....cpp(2017) : fatal error C1903: 直前のエラーを修復できません; コンパイルを中止します。
cl.exe の実行エラー

T_S_xxx.exe - エラー 24、警告 0

#include <AfxCmn.h> を追加.


  • Categories:

MAPI の MapiFileDesc の配列

MFC を使用している方法では,

    LateDelete	ld ;    //  MultiByte の必要があるようなので,UNICODE の時のバッファをここに登録
    //	添付ファイルの準備
    CArray<:MapiFileDesc,MapiFileDesc>	fileDescA ;
    int	fileCount = 0 ;
    int	index = 0 ;
    for (index=0 ; index<PathNames.GetSize() ; index++) {
        CString	    pathName = PathNames[index] ;
        if (::FileIsNothing  (pathName))	{	continue ;	}
        if (::FileIsDirectory(pathName))	{	continue ;	}
        MapiFileDesc	fileDesc ;
        memset(&fileDesc,0,sizeof(MapiFileDesc)) ;
        fileDesc.nPosition		= (ULONG)-1 ;
    #ifdef	_UNICODE
        fileDesc.lpszPathName	= SendMail__ChangeMultiByte(PathNames[index],&ld) ;
        fileDesc.lpszFileName	= SendMail__ChangeMultiByte(FileNames[index],&ld) ;
    #else
        fileDesc.lpszPathName	= LPSTR(LPCTSTR(PathNames[index])) ;
        fileDesc.lpszFileName	= LPSTR(LPCTSTR(FileNames[index])) ;
    #endif
        fileDescA.Add(fileDesc) ;
        fileCount++ ;
        }

MFC を使用しないコードは,

    std::vector<MapiFileDesc>	fileDescA ;
    std::vector<std::string>	pathNameA ;
    std::vector<std::string>	fileNameA ;
    int	index = 0 ;
    {
        for (index=0 ; index<PathNames.GetSize() ; index++) {
            {
                tstring	pathName = PathNames[index] ;
                if (::File_IsNothing  (pathName))	{	continue ;	}
                if (::File_IsDirectory(pathName))	{	continue ;	}
                }
            std::string	pathName= ::To__string(PathNames[index]) ;
            std::string	fileName= ::To__string(FileNames[index]) ;
            pathNameA.push_back(pathName) ;
            fileNameA.push_back(fileName) ;
            }
        {
            for (size_t index=0 ; index<pathNameA.size()&&index<fileNameA.size() ; index++) {
                MapiFileDesc	fileDesc ;
                memset(&fileDesc,0,sizeof(MapiFileDesc)) ;
                fileDesc.nPosition	= (ULONG)-1 ;
                fileDesc.lpszPathName	= &(pathNameA[index])[0] ;
                fileDesc.lpszFileName	= &(fileNameA[index])[0] ;
                fileDescA.push_back(fileDesc) ;
                }
            }
        }

詳しくは見てないが,幾つかの方法が書かれていたので
Sending Email with MAPI


MapiRecipDesc.lpszAddress の “smtp:”
以前コードを直したのが 2002/4 であまり情報がなかった様に思う.
個人的に書いた内容が「Outlook で配信不能になる
参考になりそうな所
Email mit Dateien perWinAPI versenden??
MAPISendMail
MSDN MapiRecipDesc structure
Sending email using MAPI causes error on ‘ResolveName’ function in Window7


S_Mail.hxx



空のコンソール AP で C2065 C2146

空のコンソール AP プロジェクトで,ビルドすると

--------------------構成: MkBG_up - Win32 Debug--------------------
コンパイル中...
MkBG_up.cpp
\\devs\documents\develop\_.src\__cpr_\straryfn.hxx(254) : error C2065: 'MessageCon' : 定義されていない識別子です。
\\devs\documents\develop\_.src\__cpr_\straryfn.hxx(254) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\documents\develop\_.src\__cpr_\straryfn.hxx(254) : error C2065: 'bar' : 定義されていない識別子です。
\\devs\documents\develop\_.src\__cpr_\straryfn.hxx(258) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
\\devs\documents\develop\_.src\__iwao\messbar.hxx(23) : warning C4005: 'MessageBar' : マクロが再定義されました。
        s:\develop\vc_test\_3d\mkbg_up\mkbg_up.cpp(19) : 'MessageBar' の前の定義を確認してください
\\devs\documents\develop\_.src\__cpr_\openfile.hxx(56) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\documents\develop\_.src\__cpr_\openfile.hxx(66) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
\\devs\documents\develop\_.src\__iwao\enumfile.hxx(342) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\documents\develop\_.src\__iwao\enumfile.hxx(346) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
\\devs\documents\develop\_.src\__iwao\enumfile.hxx(412) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\documents\develop\_.src\__iwao\enumfile.hxx(419) : error C2228: '.SetBarMax' : 左側がクラス、構造体、共用体ではありません。
\\devs\documents\develop\_.src\__iwao\enumfile.hxx(420) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
....
\\devs\documents\develop\_.src\__iwao\f_copyfn.hxx(66) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\documents\develop\_.src\__iwao\f_copyfn.hxx(67) : error C2228: '.SetBar' : 左側がクラス、構造体、共用体ではありません。
\\devs\documents\develop\_.src\__iwao\f_copyfn.hxx(68) : error C2228: '.SetBar' : 左側がクラス、構造体、共用体ではありません。
\\devs\documents\develop\_.src\__iwao\f_copyfn.hxx(72) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
cl.exe の実行エラー

MkBG_up.exe - エラー 53、警告 1

リビルドすると通る.


「プリコンパイル済みヘッダーを自動的に使用」になっているためで,
「プリコンパイル済みヘッダを使用しない」にするか,pch を正しく指定する.


半年ほど前にも同じ記事を書いてた.


  • Categories:

VC 6 LNK2001 __beginthreadex

空のコンソール AP プロジェクトで,Afx.h を追加でインクルードしてビルドすると,

--------------------構成: MkBG_up - Win32 Debug--------------------
リンク中...
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
c:\Temp\Test_3D\MkBG_up\Debug.060/MkBG_up.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー
MkBG_up.exe - エラー 3、警告 0

プロジェクトの設定で「共有 DLL で MFC を使用」などに変更.



あなたのサイト … を読み込めません

メールを確認していると,

iwaoodn さん、こんにちは。
2018年3月29日 (木) 10:55 AMに確認しましたが、あなたのサイト http://mish.myds.me/wordpress/dev を読み込めませんでした。
Your site is returning a 403 error, which normally indicates that your host’s security measures are blocking our monitoring requests. Please have them confirm that they are not blocking any requests from our user agent.
引き続きサイトが停止しているようであれば、ホスティング事業者に助けを求めた方がよいでしょう。サイトが再び稼働してオンラインになれば、もう一度お知らせします。
View your site’s activity to investigate when and perhaps why it went down.
モニターについてもっと詳しく
このメールが届いた理由
You are receiving this email because you have activated Jetpack Monitor on your site. If you need to contact support, please include this reference: [136721373/blocked].
Manage your email settings
Automattic, Inc., 60 29th Street #343, San Francisco, CA 94110, USA
Automattic は Jetpack、WordPress.com、WooCommerce などの運営会社です。600名以上の従業員が50以上の都市で働いており、常時社員募集中です。


LAN 内からアクセスは特に問題がない.
Moto G5 で外からアクセスすると 403 .

WSR-300HP が不安定なことが影響したのか?


Aterm BL190HW,WSR-300HP,DS116 を再起動して,うまく動作する様になったことを確認.



送信された URL に noindex タグが…

以前から,Serch Console で次のような状態になっていた.


http://mish.myds.me/wordpress/i-tools/ に関するメッセージを表示 »
サイト http://mish.myds.me/wordpress/i-tools/ の インデックス登録の対象範囲 に関する問題の修正を確認しています
http://mish.myds.me/wordpress/i-tools/ の所有者様
弊社では、貴サイトの インデックス登録の対象範囲 に関する問題の修正について確認を開始いたしました。具体的には、6 ページに現在影響を及ぼしている「送信された URL に noindex タグが追加されています」について確認しております。
テストが完了しましたら、結果をお送りいたします。以下のリンクにアクセスして、テストの進捗状況をご確認いただくこともできます。


調べてみると,html のソースに「All in One SEO Pack」とコメントがある.

「All in One SEO」-「一般設定」内の「Noindex 設定」を意図した状態に変更して対応.



T5400 Windows アップデートで…

T5400 が Windows アップデートで,起動しなくなってしまった.
再起動後,




リセットがかかる.


セーフモードで起動すると自動的に,

その後勝手に再起動して,

この状態で今 2 時間近く.


その後しばらくして,やっと起動できた.



WSR-300HP が不安定?

2017/07 に追加した,WSR-300HP の Wi-Fi が最近不安定になり始めた?
先週一度,昨日,今日.

外には接続せずLAN 内のみでの運用.有線は問題なく動作している.
「無線LAN設定」の「有効」のチェックを外して,またチェックして対応している.

ファームウェアのバージョンは 2.40 なので,これで良さそう.


暫く落ち着いていたように思うが,昨日からまた調子が悪い.
個人的に,このメーカー製との相性か?



B-Spline ノットベクトル

v_double	BS_make_knot	(const Vd4A& pnts,const size_t order)
{
	v_double	knot ;
	size_t		degree = order - 1 ;
	{
		for (size_t index0=0 ; index0< degree ; index0++) {
			knot.push_back(0) ;
			}
		for (size_t index_=0 ; index_< pnts.size()-degree ; index_++) {
			knot.push_back(index_) ;
			}
		for (size_t indexL=0 ; indexL< degree+1 ; indexL++) {
			knot.push_back(pnts.size()-degree) ;
			}
		}
	return	knot ;
	}

「制御点 8 個,次数(degree) 2」で求まったノットは,
    0   0   0   1   2   3   4   5   6   6   6         



B-Spline basis

3D グラフィックスのための数学入門 157 ページをコードに.
コードは,kodatuno を参考にさせてもらった.

double BS_basis (const double t,c_v_double& knot,const long order,const long i) { if (order <= 0) { return 0. ; } if (order == 1) { // Ni,0(t) if (t == knot[knot.size()-1]) { if (knot[i]<=t && t<=knot[i+1]) { return 1. ; } else { return 0. ; } } else { if (knot[i]<=t && t< knot[i+1]) { return 1. ; } else { return 0. ; } } } else { double n1 = 0 ; // (*/0) --> n = 0 double n2 = 0 ; double d1 = knot[i+order-1] - knot[i ] ; // T(i+k) -T(i) double d2 = knot[i+order-0] - knot[i+1] ; // T(i+k+1)-T(i+1) if (!::V1_is_near<double<(d1,0)) { n1 = t - knot[i] ; // t - T(i) n1 = n1 * BS_basis(t,knot,order-1,i ) ; // N(i, k-1)(t) n1 = n1 / d1 ; } if (!::V1_is_near<double<(d2,0)) { n2 = knot[i+order-0] - t ; // T(i+k+1)-t n2 = n2 * BS_basis(t,knot,order-1,i+1) ; // N(i+1,k-1)(t) n2 = n2 / d2 ; } return (n1 + n2) ; } return -1. ; }
double BS_basis (const double t,const long order,const long i) { if (order <= 0) { return 0. ; } if (order == 1) { // Ni,0(t) if (i<=t && t< i+1) { return 1. ; } else { return 0. ; } } else { double n1 = 0 ; double n2 = 0 ; double d1 = order - 1 ; // k double d2 = order - 1 ; // k if (!::V1_is_near<double<(d1,0)) { n1 = t - i ; // t-i n1 = n1 * BS_basis(t,order-1,i ) ; // N(i ,k-1) n1 = n1 / d1 ; } if (!::V1_is_near<double<(d2,0)) { n2 = (i+order-0) - t ; // i+k+1 - t n2 = n2 * BS_basis(t,order-1,i+1) ; // N(i+1,k-1) n2 = n2 / d2 ; } return (n1 + n2) ; } return -1. ; }
long pt_count = 7 ; v_vd_n.resize(pt_count) ; for (size_t index=0 ; index<10 ; index++) { for (size_t index_d=0 ; index_d<div_c ; index_d++) { double t = double(index*div_c + index_d)/div_c ; for (size_t i=0 ; i<pt_count ; i++) { double r = ::BS_basis(t,order,i) ; Vd3A v3a = v_vd_n[i] ; Vd3 v(v3a.size(),r*100,0) ; v3a.push_back(v) ; v_vd_n[i] = v3a ; } } }




BRD-UT16WX その後 – 2

あまり使用しない BD ドライブ.
BD レコーダ周りを片付けていたら,以前買った Home Alone 1,2 が出てきた.
これを PC で見ようと思ったが,…
 再生できない? なんで?
前回見ることができた BTTF も見れなくなっている.
DVD は問題ない.



DBR-T2007 追加

T460 の調子が悪くなったので追加.

T460 と並べて設置.
「リモコンコード」を T460 と同じコードを設定してしまったため,両方が反応する様になってしまった.
T2007 を「リモコンコード3」に変更して,意図した動作になった.


口コミではあまり良くない評価も見られるが,簡単に操作した限りは T460 と同じ様な感じ.
DiXiM Digital TV plus で,T2007 も表示される.


あまり意味はないが,Moto G5 の「テレキングプレイ」で T2007 の TV を見られることを確認.



Rational B-Spline

Vd4 として w に設定してみたが,これで良いのか?

Vd3A	b_spline	(const Vd4& q0,const Vd4& q1,const Vd4& q2,const Vd4& q3,const long div_c)
{
	Vd3A	vd3a ;
	for (long index=0 ; index<=div_c ; index++) {
		double	t  = 1./div_c*index ;
		double	n0 = 1./6 * (1.-t)*(1.-t)*(1.-t) ;
		double	n1 = 1./2 * t*t*t - t*t + 2./3 ;
		double	n2 =-1./2 * t*t*t + 1./2 * t*t + 1./2 *t + 1./6 ;
		double	n3 = 1./6 * t*t*t ;
		double	px = ( (n0*q0.x)*q0.w + (n1*q1.x)*q1.w + (n2*q2.x)*q2.w + (n3*q3.x)*q3.w ) / ((n0)*q0.w + (n1)*q1.w + (n2)*q2.w + (n3)*q3.w) ;
		double	py = ( (n0*q0.y)*q0.w + (n1*q1.y)*q1.w + (n2*q2.y)*q2.w + (n3*q3.y)*q3.w ) / ((n0)*q0.w + (n1)*q1.w + (n2)*q2.w + (n3)*q3.w) ;
		double	pz = ( (n0*q0.z)*q0.w + (n1*q1.z)*q1.w + (n2*q2.z)*q2.w + (n3*q3.z)*q3.w ) / ((n0)*q0.w + (n1)*q1.w + (n2)*q2.w + (n3)*q3.w) ;
		vd3a.push_back(Vd3(px,py,pz)) ;
		}
	return	vd3a ;
	}



QR コードが表示されない?

いつからなのか不明だが,DS116 上の qr_img.php を使用している所で正しく表示されなくなっていた.
気付いたのは昨日の昼頃.

DS115j 上や,//itools.hp2.jp/Test/qr/ のものはうまく動作している.
//itools.hp2.jp/ は DS116 上のものを利用しているのでうまく表示されない.


「Web Station」-「PHP 設定」で,「PHP エラーメッセージ表示…」にチェック.

すると,次の様なエラー.
 Fatal error: Call to undefined function ImageCreate() in /…/php/qr_img.php on line 609
検索すると GD が動作していないとのこと.
gd にチェックを付けてうまく動作する様になった.
OFF にした覚えはないので,DS116 上の何かの更新で無効になってしまったのか?



QR コード生成 – 2

以前設定した「QR コード生成」を,もう少し汎用的に.
先ず,PHP が利用できるフリーのサーバを用意.
  SiteMix を利用.
  //itools.hp2.jp として登録.
QRcode Perl CGI & PHP scripts ver. 0.50」をサーバーに転送.
  
c_qr_img.js を転送.
  
これを利用したページ.
  //itools.hp2.jp/Test/qr/index.html


次の様なスクリプトを HTML の表示したいところに挿入する.
  <script src =”/Test/qr/c_qr_img.js” > </script>
  <script> call_qr_img_href() ; </script>
  <script> call_qr_img_free(“http://itl.mydns.jp”) ; </script>


src=”/Test/qr/c_qr_img.js” の部分は,”//itools.hp2.jp/Test/qr/c_qr_img.js” でテスト可能.
最終的には c_qr_img.js の次の所を,利用環境に合わせて編集してください.
   var domain = “//itools.hp2.jp” ;
   var qr_php = domain + “/Test/qr/qr_img/php/qr_img.php” ;




うまく動作しない時のチェック方法
QR コードが表示されない場合

JavaScript 内の qr_img.php の呼び出しが間違っている可能性があります.
ブラウザによっては「要素を調査」などで php を呼び出している部分を確認できます.


何も表示されない場合
JavaScript 自体をうまく呼び出せてない可能性があります.
html 内の呼び出し部分を確認してください.


c_qr_img.js

function	call_qr_img_php  (data,is_draw_data)
{
	var	domain	= 	"//itools.hp2.jp" ;
	var	qr_php	=	domain	+  "/Test/qr/qr_img/php/qr_img.php" ;
	{
		var	qr_img	=  "<img  src='"  +  qr_php  +  "?d="  +  data  +  "'>" ;
		document.write	(qr_img) ;
		}
	if (is_draw_data) {
		document.write	("<br/>") ;
		document.write	(data) ;
		}
	}

function	call_qr_img_href ()
{
	var	href	=	location.href ;
	call_qr_img_php	(href,true) ;
	}

function	call_qr_img_free (freeText)
{
	call_qr_img_php	(freeText,true) ;
	}


Win10 1709 その後

内臓のディスク容量が少ないので,「ジャンクション」を利用して D にしていた.

C:\Users\Public\Documents>dir /a
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は 9899-964A です
 C:\Users\Public\Documents のディレクトリ
2018/01/21  13:56    <DIR>          .
2018/01/21  13:56    <DIR>          ..
2016/02/11  01:29    <JUNCTION>     Asus [C:\Public\Document\Asus]
2017/09/29  20:52               278 desktop.ini
2016/02/11  01:49    <JUNCTION>     Dropbox [C:\Public\Document\Dropbox]
2016/12/22  11:01    <DIR>          images
2016/02/11  01:27    <JUNCTION>     M... [C:\Public\Document\M...]
2016/02/11  01:16    <JUNCTION>     M... [C:\Public\Document\M...]
2015/07/10  18:55    <JUNCTION>     My Music [C:\Users\Public\Music]
2015/07/10  18:55    <JUNCTION>     My Pictures [C:\Users\Public\Pictures]
2015/07/10  18:55    <JUNCTION>     My Videos [C:\Users\Public\Videos]
2018/01/21  14:20    <DIR>          Temp
2016/02/11  01:26    <JUNCTION>     Tools [C:\Public\Document\Tools]
2016/02/20  16:28                 0 VC_Path.BAK
2016/02/20  16:31             2,563 VC_Path.txt
2016/12/21  23:45               168 web.config
2017/02/17  22:12    <DIR>          w_Conf
               4 個のファイル               3,009 バイト
              13 個のディレクトリ   3,028,328,448 バイトの空き領域

* 一部ディレクトリ名などは編集済み.
JUNCTION という情報は残っているようではあるが,D ドライブを正しく指していない.
確か,1607 でも一部(%Temp% 直下のジャンクション)がうまく引き継がれなかった.
ここが引き継げないのはわからなくもないが,Public\Documents 以下は何とかできないものか?



template の利用

//*******************************************************************************
//	Name	: Vxx_tstr.hxx
//		: Vxx --> tstring
//	Create	: 2014/01/22
//*******************************************************************************
#pragma		once
#include	"i_vector.hxx"
#include	"Vector.hxx"
#include	"T_tstrng.hxx"

inline	tstring	x_To_tstring	(const i_64	v)	{	return	::i64tot	(v,10) ;	}
inline	tstring	x_To_tstring	(const u_64	v)	{	return	::u64tot	(v,10) ;	}
inline	tstring	x_To_tstring	(const long	v)	{	return	::i64tot	(v,10) ;	}
inline	tstring	x_To_tstring	(const int	v)	{	return	::i64tot	(v,10) ;	}
inline	tstring	x_To_tstring	(const float	v)	{	return	::To_tstring_rz	(v,0, 7) ;	}
inline	tstring	x_To_tstring	(const double	v)	{	return	::To_tstring_rz	(v,0,15) ;	}

template  <class V2>	tstring	V2_To_tstring(const V2& vt,LPCTSTR sp=_T(" "))
{
	tstring	str = ::x_To_tstring(vt.x) + sp ;
		str+= ::x_To_tstring(vt.y) + sp ;
	return	str ;
	}
template  <class V2>	tstring	V2_To_tstring(const std::vector<V2>& va,LPCTSTR sp2=_T("\t"),LPCTSTR sp=_T("\r\n"))
{
	tstring	str ;
	for (size_t index=0 ; index<va.size() ; index++) {
		str += ::V2_To_tstring<V2>(va[index],sp2) + sp ;
		}
	return	str ;
	}

次の様にすると, tstring pt_str = ::V2_To_tstring(pt2) ; C:\...\T_SplVw.cpp(99) : error C2667: 'V2_To_tstring' : 2 個のオーバーロード関数があいまいで最適な変換ができません。 C:\...\T_SplVw.cpp(99) : error C2668: 'V2_To_tstring' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)

呼出し方法を忘れるので…
  Vl2A pt2 ;
  tstring pt_str = ::V2_To_tstring<Vl2>(pt2) ;
他にも,
  ::V2_To_tstring<Vd2>(::ToVd2A(tuvs)) ;



WordPress サイドバーにテキスト追加

<hr/>
<div style="text-align : center ;" >
  <iframe src='/3D_Data/scene_js/cube_sj.html' name='frm_1' width='65%'> </iframe>
  <script src="/_lib/js/i_lib/2017.12/c_qr_img.js" > </script>
  <script> call_qr_img_href() ; </script>
  <hr/>広告<br/>
  <!-- admax sp --> <script src="//adm.shinobi.jp/s/4c50d8bcfb7ba3cdc7dd08d34af646cf"> </script>
  <!-- admax pc --> <script src="//adm.shinobi.jp/s/81f09af7fdcffc43a2018c06df975139"> </script>
</div>


opkg install tree

以前 DS115j には tree コマンドを入れていたが,DS116 はまだだったので…

Iwao@DS116:/tmp/http$ sudo -i
Password:

root@DS116:~# opkg install tree
-ash: opkg: command not found

root@DS116:~# cd /var/services/homes/Iwao/
root@DS116:/var/services/homes/Iwao# source ./set_ds_inc.sh
root@DS116:/var/services/homes/Iwao# opkg -v
opkg version 0.1.8
root@DS116:/var/services/homes/Iwao# opkg install tree
Installing tree (1.7.0-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/tree_1.7.0-1_armv7soft.ipk
Collected errors:
 * opkg_install_pkg: Package tree md5sum mismatch. Either the opkg or the package index are corrupt. Try 'opkg update'.
 * opkg_install_cmd: Cannot install package tree.
root@DS116:/var/services/homes/Iwao# opkg update
Downloading http://pkg.entware.net/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
root@DS116:/var/services/homes/Iwao# opkg install tree
Installing tree (1.7.0-1) to root...
Downloading http://pkg.entware.net/binaries/armv7/tree_1.7.0-1_armv7soft.ipk
Configuring tree.
root@DS116:/var/services/homes/Iwao# tree
.
├── gcc_test
│   ├── 20170922.out
│   ├── a.out
│   ├── editad
│   ├── EditAd.cpp
│   ├── edit_ad.php
│   └── T_P_ini.cpp
├── set_ds_inc.sh
├── Temp
│   └── rc.local
└── www
    └── dmp_   .php

3 directories, 9 files


html がダウンロードに…

html から php を呼出す様にするために,.htaccess に次の内容を追加.
 AddType application/x-httpd-php .php .html
一部の環境ではうまく動作するように見えたが,幾つかの環境でダウンロードになってしまう.


.htaccess を削除して,再度 html を開くと,またダウンロードになってしまう.
別のサーバ名(//mish.myds.me ではなく//ds116)から入ると,正しく表示出来る.
原因はブラウザのキャッシュで,クリアして正しく表示出来る様になった.



QR コード生成

QRコードをどこかで使えないかと思いちょっと調べてみた.


先ず読取りから.
moto g5 や 107SH での読取りは,「公式QRコードリーダー”Q”」が良さそう.
 「機能一覧」には「読み取り内容コピー」とある.


今度は生成.
15 年位前に一度調べて,何か面倒そうなイメージがあったが…
検索すると,Y.Swetakeさんの「QR code CGI & PHP scripts」が多くヒットする.
QRcode Perl CGI & PHP scripts ver. 0.50」が最新の様で,「ver. 0.50j ( 2013/5/18)」をダウンロード.
それを解凍し,//ds115j/…/qr/qr_img/ 以下にコピー.
//…/php/qr_img.php を開くと,
 Fatal error: QRcode : Data do not exist. in /…/qr/qr_img/php/qr_img.php on line 88
 「QRcode Perl … トラブルシューティング」を見ると,qr_img.php?d=address とする必要があるとのこと.
 README.sjis にもちゃんと書いてある.


読取りでアドレスをメールなどで送信する方法は見つけた.
「設定」の中の「開く前に確認メッセージを表示」にチェックを付ける.
読取り後の確認画面に,「コピー」や「共有」のメニューが表示される.


2018/01/26 JavaScript 経由で,qr_img.php を呼び出し


* QRコードは(株)デンソーウェーブの登録商標です.



Connection to iwao.synology.me has been lost since 2017-12-01 14:07:12 +09:00

メールを確認していると,次の様な内容が
Dear user,
Connection to iwao.synology.me has been lost since 2017-12-01 14:07:12 +09:00. Please check the network connection of your DiskStation, and make sure its DDNS service is enabled.
Sincerely,
Synology Account


なぜかわからないが,192.168.11.1 の方が「デフォルトゲートウェイ」になっている.
192.168.11.1 は,Wi-Fi 接続側.
「コントロールパネル」のいろいろな設定を見ると確かに 192.168.11.1 の方が選択されている.
チェックを外したり,順番を入替えたりしても「有線」の方に変更できない.
結局,「ワイヤレス」-「ネットワークマップ」で,「ワイヤレスAP」に一度設定して戻すことで対応.




空のコンソール AP でビルドすると

空のコンソール AP プロジェクトを追加して,何度かビルドしていると…

--------------------構成: up_nView - Win32 Debug--------------------
コンパイル中...
up_nView.cpp
\\devs\...\__cpr_\straryfn.hxx(254) : error C2065: 'MessageCon' : 定義されていない識別子です。
\\devs\...\__cpr_\straryfn.hxx(254) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\...\__cpr_\straryfn.hxx(254) : error C2065: 'bar' : 定義されていない識別子です。
\\devs\...\__cpr_\straryfn.hxx(258) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
\\devs\...\__iwao\messbar.hxx(23) : warning C4005: 'MessageBar' : マクロが再定義されました。
        c:\documents...\up_nview\up_nview.cpp(19) : 'MessageBar' の前の定義を確認してください
Message::SetMessage      No Support MsgStr
\\devs\...\__iwao\enumfile.hxx(342) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\...\__iwao\enumfile.hxx(346) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
\\devs\...\__iwao\enumfile.hxx(412) : error C2146: 構文エラー : ';' が、識別子 'bar' の前に必要です。
\\devs\...\_.src\__iwao\enumfile.hxx(419) : error C2228: '.SetBarMax' : 左側がクラス、構造体、共用体ではありません。
\\devs\...\develop\_.src\__iwao\enumfile.hxx(420) : error C2228: '.SetBarInc' : 左側がクラス、構造体、共用体ではありません。
...
cl.exe の実行エラー
up_nView.exe - エラー 31、警告 1

「プリコンパイル済みヘッダーを自動的に使用」になっていることがあるので「…使用しない」に.


  • Categories:

WLI-UC-AG300N その後

DS115j に接続した Wi-Fi(WLI-UC-AG300N)が,またうまく動作しなくなった.

DS116 を追加してから DS115j での使用頻度は減っていた.
前回この現象を確認した頃は暑い時期だったので,それが影響しているものかと思っていた.
また,WLI-UC-AG300N の問題(個体差)だろうと勝手に思っていた.
DS116 を追加した時にも WLI-UC-AG300N を追加しているので,DS115j と交換してみた.
しかし,DS115j での現象は変わらない.つまり,WLI-UC-AG300N の問題ではなく DS115j でうまくないみたい.



wordpress の「パブリサイズ共有」設定

先日環境をここに移してから「パブリサイズ共有」設定がうまく機能していなかった.
今日確認するとうまく動作する様になっている.
特に設定を変更した覚えはないのに…
先日までは「設定」-「共有」と入って,設定後「変更を保存」しても,対象の所に登録されなかった.



WN-AC1167R 追加

アクセスポイントとして WN-AC1167R を追加.
単に接続するだけならば,特に難しい部分はなし.
最初「APモード」としてうまく認識していなかったのか,AC アダプタを抜いて再起動.
ちょっと失敗したのが,有線 LAN が 100 M .
 パッケージの「有線 Giga」は誤解を招きそうと思う(私もちゃんと見てなくて勘違い).
 型番で G が付くものが有線 LAN を含む全ポート Gigabit 対応?


無線 LAN のチャンネルや帯域を設定は,AC1167R の IP アドレスが必要になる.
Magical Finder が必要で 107SH にインストール(Moto G5 は Android 7.0 のため?動作しない).

ここで表示される IP アドレスを PC のブラウザに入力して設定.


AC1167R に WD Cloud をつなげたので,次のアラートが…
 イベント タイトル:10/100 でイーサネット ポート %1 に接続されています
 イベント タイトル:ネットワーク リンク停止
再起動したりしているので当然だが,ある時からほぼ毎日 2:00 と 9:00 にメールが来るようになっていた.
原因はルータ BL190HW の「省エネモード設定」で,とりあえず無効に.


設置してしばらくして気付いたのが,Web サーバが外からアクセスできなくなっていた.
LAN 内からは問題ないので,Web サーバの再起動と,ルータ BL190HW を再起動.


2017/11/07
WN-AC1167R の現在時刻が正しくない.1/1 にリセットされている.
また,「インターネットに接続されてない」という表示があった?
再起動して OK .


2017/11/08
Aterm WR9500N より,届く範囲が少し狭い様に感じる.
届きにくかった部屋は解消できているので,出力も少し押さえて利用.


2017/11/16
その後,特に問題なく安定しているように見える.


2018/02/15
Magical Finder for Andriod Version 4.0.0 Build 1115 で,Moto G5 でも動作する様になっている.


2018/02/28
107SH では動作しなくなった?



CObArray <--> CObList

CObList の形式のデータを配列として処理したかったので,その相互変換(Sort_ind.hxx 内).


#ifdef		_MFC_VER
//*******************************************************************************
//	ObList	->	ObArray
//	Create	:	2017/10/30
//*******************************************************************************
inline	bool	To_ObArray	(const CObList& src,CObArray* dstAry)
{
	if (dstAry == NULL)		{	return	false ;		}
	dstAry->RemoveAll() ;
	{
		POSITION pos = src.GetHeadPosition();
		while (pos != NULL)	{
			CObject*	pObj = src.GetNext(pos);
			dstAry->Add(pObj) ;
			}
		}
	return	true ;
	}

//*******************************************************************************
//	ObArray	->	ObList
//	Create	:	2017/10/30
//*******************************************************************************
inline	bool	To_ObList	(const CObArray& src,CObList* dstLst)
{
	if (dstLst == NULL)		{	return	false ;		}
	dstLst->RemoveAll() ;
	{
		for (INT_PTR index=0 ; index<src.GetSize() ; index++) {
			CObject*	pObj = src[index] ;
			dstLst->AddTail(pObj) ;
			}
		}
	return	true ;
	}

#endif	//	_MFC_VER


NW71 追加

airdisk NW71 を追加.

よく調べなかったからではあるが,’A+Disk’ は,Moto G5 では動作しない.
iodata のサイトのマニュアルのダウンロード先から,pdf を入手.
http://www.iodata.jp/lib/manual/pdf2/airdisk.pdf
または,アイオープラザの airdisk 紹介ページから.
https://www.ioplaza.jp/select/airdisk/pdf/airdisk-h03.pdf


pdf によると HiDisk に変更されている.
Wi-Fi 接続した状態で,192.168.222.254 にアクセスすると,

初期状態ではパスワードがかかっていないので SSID のパスワードを設定.
ブラウザからの Basic Setting からでも入れる.



T5400 そろそろ…

Windows Update を行って,再起動.もう一回再起動.

340 の末期の頃と似た現象.


Aero などのトラブルシューティングに入っていくと,
「デスクトップ ウィンドウ マネージャーが無効になっている」.

意外とこの状態の方が表示周りはサクサク動いている様に感じる.


DiXiM Digital TV plus で再生ができない.


2017/10/20 今日はネットワークが見えなくなった.PC の再起動で対応.


2017/11/01 仮想マシンのマウス入力が効かなくなった.仮想 PC の再起動で対応.


2017/11/08
今度は,USB 機器が突然認識しなくなった.
接続し直したり,再起動してもダメ.
特に困ったのは,切替機(USH2-24SSV)に接続したキーボードとマウス.
さらに再起動して,別のポートにキーボードとマウスを接続してやっと認識できた.


2017/11/09
これとの関係ははっきりしないが,仮想 PC から NAS の参照で幾つかのファイルが開けない現象が発生.
他にも,Outlook のフォルダ構成が変わってしまい意図しない所に移動している?


2017/11/16
今日になって,ネットワークが不安定.

NAS やルータ,PC を再起動して何とかつながる様になったみたい.
Aero が動作する様になった.この再起動の時,Windows Update があったのでその影響か?



BRD-UT16WX その後

今年の初めの頃に BRD-UT16WX を追加したが,BD が見れなくてあまり活用できていなかった.
今日 CD を焼きたいと思い,IOPortal に行くと WinDVD が新しくなっている.
これをダウンロードしてインストール,
実行すると前回再生できなかった BTTF が見られるようになった.



NSZT-W64 地図更新

先週位からナビ起動時に,地図データ更新期限のメッセージ…
いつもお世話になっているトヨタの人に聞くと「面倒ですよ」とのこと.
個人的に躓いたのは次の内容.
 ナビ情報の登録
 予想以上の更新時間
 更新の失敗


ナビ情報の登録は,私の場合は「品番」と「シリアル」が必要でした.

 車台番号ではダメで,その画面の一番下で入力するのですが,それがわかり難かった.
確認はしていませんが,ナビ本体でも確認できる様です.
 トヨタ純正カーナビNSZT-W64のシリアル番号の調べ方(SDカードの地図更新)


地図データの更新
「地図SDを抜かないで…」と出ているので,その間検索してみると 3 時間以上かかるとのこと.
手順なども含めこちらで詳しく書かれています.
 トヨタのナビ更新サービスのマップオンデマンドが結構大変な件
更新を行っていたのが昨日の夜だったので,そのまま放置.


画面を撮るのを忘れたのですが,確か 84/3468 で止まった状態.
 今思うと,PC がスリープに入ったのが原因?
検索すると,ちょっと表示は異なるのですが,
 地図データ更新(失敗) 地図SDリカバリー
 地図データ更新(失敗) 地図SDリカバリー 続きです
そこにある手順通りに,
 ユーザー情報削除
 ローカル地図データ削除
MapOnDemand を再起動して,zip のドロップから再度操作.
3 時間位かかって,やっと更新終了.
はっきりは分かりませんが,SD への書き込みが動作する前に止まっていたのではと思います.



外からの接続が不安定

朝見ると,http://itl.mydns.jp や http://iwao.synology.me などへの外からの接続ができなくなっていた.
外へのアクセスは特に問題なさそう.
先日 DS116 を追加して,いろいろいじったためと思ったが…
DS115j のログにエラーがある.
Error システム 2017/09/27 03:24:25 SYSTEM System failed to register [27.92..] to [xxx.jp] in DDNS server …


5 年以上前から 121.108…. から変更されなかったので,丁度良いと思っていたのに…
IP が変わったことにより,何かの整合性が取れてないのかもしれない.
ルータ,アクセスポイント,外からアクセスできるサーバなど,何度か再起動して落ち着いた?



DS116 追加

1 年近く DS115j を使用してきたが,想定していた以上の利用になりちょっとパワー不足に.
特に,週末実行している Antivirus Essential が動き出すと DSM などもうまく入れないこともある.


DS116 と DS115j の比較性能を参考にして DS116 に.
データが全く同じではないので単純には比べられないが,26000 個のスキャン 6 時間が 15 分程度に.


DS115j から DS116 へのファイルのコピーでの状態.

DS115j では,CPU とメモリがボトルネックになっている様であるが,DS116 ではまだ余裕がありそう.


2017/09/29
ストレージや,DS116 では 40 ℃ 前後だが,DS115j の本体?の温度は 50 ℃ 位になっている.







CHttpFile でのアップロード

CHttpFile を使用したアップロードのコードを整理.
サーバ側は先日の php と同様.



//*******************************************************************************
//	send request define
//	Create	:	2017/08/28
//*******************************************************************************
#define	C_CRLF			_T("\r\n") ;
#define	CT_ct_mp_fd_b_		_T("Content-Type: multipart/form-data; boundary=")
#define	CT_boundary__		_T("--")
#define	CD_cd_f_d_n_		_T("Content-Disposition: form-data; name=")
#define	CD_cd__fn_		_T("; filename=") ;
#define	CT_ct_a_o_s		_T("Content-Type: application/octet-stream")

//*******************************************************************************
//	make send data
//	Create	:	2017/08/28
//*******************************************************************************
inline	v_char	Make_send_data	(LPCTSTR upFile,LPCTSTR ___boundary)
{
	v_char	up_Data = v_c_LoadText(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+=	T_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_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()) ;
		}
	#ifdef	_DEBUG
	{
		::i_Dump(sndData,(::Path_GetName(upFile)+_T(".txt")).c_str()) ;
		}
	#endif
	return	sndData ;
	}

//*******************************************************************************
//	upload
//	Create	:	2017/08/28
//*******************************************************************************
inline	bool	UploadFile	(LPCTSTR svrName,LPCTSTR php,LPCTSTR upFile)
{
	{
		if (::File_IsNothing(upFile))			{	return	false ;		}
	//	if (::File_GetSize  (upFile) > 2048*1024)	{	return	false ;		}
		}
	tstring	head ;
	v_char	sndData ;
	{
		tstring	___boundary = _T("-----UpFile__2017_08_30") ;
			___boundary = _T("-----") + ::Path_GetName(_T(__FILE__)) + _T("__") + ::Now_Format(_T("%H%M%S")) ;
		head	= CT_ct_mp_fd_b_	+ ___boundary ;
		sndData = Make_send_data(upFile,  ___boundary.c_str()) ;
		}
	tstring	serverN = svrName ;
	tstring	portStr ;
	{
		v_tstring	strAry = ::String_Split(svrName,false,_T(":")) ;
		if (strAry.size() >= 2) {
			serverN = strAry[0] ;
			portStr = strAry[1] ;
			}
		}
	INTERNET_PORT	nPort = 0 ;
			nPort = ::ttou2(portStr) ;
	tstring		userAgent = _T("drop_up") ;
			userAgent = ::Path_GetName(_T(__FILE__)).c_str() ;
	#ifdef	_WIN32
	{
		userAgent = ::Path_GetName(::i_GetModuleFileName()) ;
		{
			tstring	osVer	= _T("Windows NT ") + ::To_tstring_rz(::GetWinVer_exe()) ;
				osVer	+=  tstring(_T(" "))+ Bracket_Add(::GetWinVerStr_exe(),_T('(')).c_str() ;
			userAgent += _T(" ") + osVer ;
			userAgent += EXE_AddVerBuildStr() ;
			}
		}
	#endif
	CInternetSession	session(userAgent.c_str()) ;
	CHttpConnection*	pServer = NULL ;
	CHttpFile*		pFile = NULL ;
	DWORD			dwStatus = 0 ;
	try	{
				pServer = session.GetHttpConnection(serverN.c_str(),nPort) ;
				if (pServer == NULL)				{	return	false ;		}
			{
				CString	headStr = head.c_str() ;
				pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,	php) ;
				if (pFile == NULL)				{	return	false ;		}
				pFile->SendRequest(headStr,(LPVOID)(&sndData[0]),DWORD(sndData.size())) ;
				pFile->QueryInfoStatusCode(dwStatus) ;
				}
			{
				delete	(pFile) ;
				delete	(pServer) ;
				}
		}
	catch	(CInternetException* e) {
		CString	errMsg ;
		e->GetErrorMessage(errMsg.GetBuffer(1024),1024) ;
		errMsg.ReleaseBuffer() ;
		std::tout << LPCTSTR(errMsg) << std::endl ;
		return	false ;
		}
	session.Close() ;
	return	true ;
	}

//*******************************************************************************
//	upload files
//	Create	:	2017/08/29
//*******************************************************************************
inline	bool	UploadFiles	(c_v_tstring& upFiles)
{
	v_tstring	svr_php = ::UF_get_server_php() ;
	tstring		serverN = svr_php[0] ;
	tstring		phpName = svr_php[1] ;
	for (size_t index=0 ; index<upFiles.size() ; index++) {
		tstring	upFile = upFiles[index] ;
		if (::File_IsNothing(upFile))		{	continue ;		}
		if (!::UploadFile(serverN.c_str(),phpName.c_str(),upFile.c_str()))	{
			return	false ;
			}
		}
	return	true ;
	}

UpFile.hxx



データ送信 htm , php

html で複数のファイルを指定,php でそれを move_upload_file .


up_data.htm


<form enctype="multipart/form-data" action="up_data.php" method="POST">
    upload file:<br/>
    <input name="file_1" type="file" /><br/>
    <input name="file_2" type="file" /><br/>
    <input type="submit" value="send" />
    </form>


up_data.php


<?php
    if (!file_exists("./data")) {
        mkdir("./data") ;
        }
    foreach ($_FILES as $keys => $values) {
        $file_e = $values ;
        $tempfile =                $file_e[‘tmp_name’] ;
        $filename = ‘./data/’ .  $file_e[‘name’] ;
        if (is_uploaded_file($tempfile)) {
            move_uploaded_file($tempfile,$filename) ;
            }
        }
    $scan_f = scandir("./data") ;
    foreach ($scan_f as $key => $value) {
        echo $value . "<br/>\r\n" ;
        }
    ?>




データ送信 CHttpFile

送信するデータの中身をどの様に指定するかわかってないので,CHttpFile でもう一度やり直し.
MSDN CHttpFile クラスにあるサンプルのコードで,前回と同様にデータが送れることは確認.


content.txt を用意して,あればそれを読込んで送る様に変更.
   CString strData = _T(“Some very long data to be POSTed here!”);
   {
     CString dataFile = _T(“./content3.txt”) ;
     if (::File_IsExist(dataFile)) {
       strData = ::LoadText(dataFile).c_str() ;
       }
     }


Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryHQUnqULNgae5Y5HW
——WebKitFormBoundaryHQUnqULNgae5Y5HW
Content-Disposition: form-data; name=”file_imo”; filename=”up_Cube.imo”
Content-Type: application/octet-stream

v 0 0 -5
v 0 0 0
v 0 5 0
v 0 5 -5
v 5 0 -5
v 5 5 -5
v 5 0 0
v 5 5 0
f 1 2 3 4
f 5 1 4 6
f 7 5 6 8
f 2 7 8 3
f 3 8 6 4
f 2 1 5 7

——WebKitFormBoundaryHQUnqULNgae5Y5HW
Content-Disposition: form-data; name=”file_htm”; filename=”up_Cube.htm”
Content-Type: application/octet-stream
 
<!DOCTYPE html>
<html lang=”ja” >
<head >
<meta charset=”UTF-8″ />
< script src=”/_lib/js/webgl/threejs/r84/build/three.js”> </script>
< script src=”/_lib/js/webgl/threejs/r84/examples/js/Detector.js”> </script>
< script src=”/_lib/js/webgl/threejs/r84/examples/js/controls/OrbitControls.js”> </script>
< script src=”/_lib/js/webgl/threejs/r84/examples/js/loaders/MTLLoader.js”> </script>
< script src=”/_lib/js/i_lib/threejs/r84/IMOLoader.js”> </script>
< script src=”/_lib/js/i_lib/threejs/r84/c_3js_4.js”> </script>
< script src=”/_lib/js/i_lib/2017.03/filePath.js”> </script>
</head>
<body>

var imoFile=’up_Cube.imo’;
ThreeStart3 (imoFile,5,5,5) ;

</body>
</html>
 
——WebKitFormBoundaryHQUnqULNgae5Y5HW–
 


データは送られているが,PHP の $_FILES にうまく設定されていない.
   $str = var_export($_FILES,true) ;
ヘッダ部分の指定が間違っていたみたいで,
   CString strHead ;
   {
     CString dataFile = _T(“./content3.txt”) ;
     if (::File_IsExist(dataFile)) {
       strData = ::LoadText(dataFile).c_str() ;
       {
         v_tstring strAry = ::String_SplitLine(strData) ;
         if (strAry.size() > 0) {
           strHead = strAry[0].c_str() ;
           strAry.erase(strAry.begin()) ;
           strData = ::String_Join_Line(strAry).c_str() ;
           }
         }
       }
     }
送信部分も,SendRequestEx から SendRequest に変更.
   pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T(“/…/t_mfc_h/t_mfc_h.php”)) ;
   pFile->SendRequest(strHead,(LPVOID)LPCTSTR(strData),strData.GetLength()) ;
   pFile->QueryInfoStatusCode(dwStatus) ;


  • Categories:


    top

    %d人のブロガーが「いいね」をつけました。