Iwao Dev

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

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

メモ

Google アナリティクスの設定

analytics.js と gtag.js .


index.html など,エディタで書いた html .
Google アナリティクスに関して,次の 2 つの書き方が混在していた.

    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-TRACKING_ID', 'auto');
        ga('send', 'pageview');
    </script>

    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-TRACKING_ID"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', 'UA-TRACING_ID');
    </script>

検索すると,上の analytics.js は古い形式みたい.

 Google アナリティクスの設定
 最新!?Google Analyticsの「Global Site Tag」(gtag.js)


  にほんブログ村 IT技術ブログへ


Synology NAS で zip

Synology NAS 内(SSH 接続)で,zip ファイルを扱えないかと…
検索すると,Linux 環境では zip や unzip があるらしい.
SSH で接続して確認すると,zip はあるが unzip は command not found .
さらに検索すると Synology Forum に情報があった.
 Unzip?
7z コマンドが利用できるみたい.

Iwao@DS116:~$ zip
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -e   encrypt                      -n   don't compress these suffixes
  -h2  show more help
  -yf  store files/directories that symbolic links point to in an archive
  -cp  codepage, ex: fre,ger,ita,spn,cht,chs,jpn,krn,ptb,rus,dan,nor,sve,nld,plk,ptg,hun,trk,csy

Iwao@DS116:~$ unzip
-sh: unzip: command not found
Iwao@DS116:~$ 7z

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,2 CPUs)

Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...]
       [<@listfiles...>]

<Commands>
  a: Add files to archive
  b: Benchmark
  d: Delete files from archive
  e: Extract files from archive (without using directory names)
  l: List contents of archive
  t: Test integrity of archive
  u: Update files to archive
  x: eXtract files with full paths
<Switches>
  -ai[r[-|0]]{@listfile|!wildcard}: Include archives
  -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
  -bd: Disable percentage indicator
  -i[r[-|0]]{@listfile|!wildcard}: Include filenames
  -m{Parameters}: set compression Method
  -o{Directory}: set Output directory
  -p{Password}: set Password
  -r[-|0]: Recurse subdirectories
  -scs{UTF-8 | WIN | DOS}: set charset for list files
  -sfx[{name}]: Create SFX archive
  -si[{name}]: read data from stdin
  -slt: show technical information for l (List) command
  -so: write data to stdout
  -ssc[-]: set sensitive case mode
  -t{Type}: Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
  -v{Size}[b|k|m|g]: Create volumes
  -w[{path}]: assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
  -y: assume Yes on all queries
Iwao@DS116:~$    

  にほんブログ村 IT技術ブログへ


カメラ座標からワールドに

{
    Prj ctow ;
    {   //  Prj の逆行列を求める
        Matrix pm ;
        Prj    prj(GetEyeChg().Get()) ;
        prj.Get(&pm) ;
        pm.Inv() ;	//  逆行列
        ctow.Set(pm) ;
        }
    for (size_t index=0 ; index<pnts.size() ; index++) {
        Vd3 pnt = pnts[index] ;
        for (size_t index3=0 ; index3<pntsXzY.size() ; index3++) {
            Vd3 pt3 = pntsXzY[index3] ;
            pt3.y = 0 ;
            if (::V3_is_near(pnt,pt3)) {
                Vd3 pntc = pntsXzY[index3] ;
                Vd3 pntw = ::ToVd3(ctow.P3to3(::ToP3(pntc))) ;  //  逆行列を掛けている
                pnts[index] = pntw ;
                break ;
                }
            }
        }
    }


  にほんブログ村 IT技術ブログへ


template の複数の型の順番

先日作成した template .
  template <class V3, class VT> V3 ToV3 (const VT& vt,const long type)
型の順番で,戻り値の型 V3 と,引数の型 VT .
どちらを先に指定した方が良いか悩んだが,呼び出しで省略する場合を考慮するとこれで良さそう.
  Vd4 v4(1,2,3,1) ;
  Vd3 v3(1,2,3) ;
  Vd2 v2(1,2) ;
  Vd3 v43 = ToV3<Vd3/*,Vd4*/>(v4,to_x0y) ;
  Vd3 v33 = ToV3<Vd3/*,Vd3*/>(v3,to_x0y) ;
  Vd3 v23 = ToV3<Vd3/*,Vd2*/>(v2,to_x0y) ;


  にほんブログ村 IT技術ブログへ


::ToV3<Vd3,Vd2>(v2,to_x0y) で C2784

次の様な template の利用で,C2784 エラー.

    Vd2 v2(1,2) ;
    Vd3 v3 = ::ToV3<Vd3,Vd2>(v2,to_x0y) ;

\\DevS\...\tovxx.hxx(123) : error C2784: 'struct Vector3<T> __cdecl ToX0Y(const struct Vector4<T> &)' : 'const struct Vector4<T> & 用のテンプレート引数を 'const struct Vector2<double>' から減少できませんでした。 C:\... \VF3DView.cpp(236) : コンパイルされたクラスのテンプレートのインスタンス化 'struct Vector3<double> __cdecl ToV3(const struct Vector2<double> &,const long)' の参照を確認してください
template <class V3, class VT> V3 ToV3 (const VT& vt,const long type) { V3 v3 ; { switch (type) { case to_xyz : v3 = ::ToXYZ(vt) ; break ; case to_xzy : v3 = ::ToXZY(vt) ; break ; case to_x0y : v3 = ::ToX0Y(vt) ; break ; default : v3 = ::ToXYZ(vt) ; break ; } } return v3 ; }
Vector4 のものは昨日定義していたが,Vector2 のものを追加.ついでに Vector3 も. template <class T> Vector3<T> ToXYZ (const Vector2<T>& p) { return Vector3<T> (p.x,p.y, 0 ) ; } template <class T> Vector3<T> ToXYZ (const Vector3<T>& p) { return Vector3<T> (p.x,p.y,p.z) ; } template <class T> Vector3<T> ToXZY (const Vector2<T>& p) { return Vector3<T> (p.x, 0 ,p.y) ; } template <class T> Vector3<T> ToXZY (const Vector3<T>& p) { return Vector3<T> (p.x,p.z,p.y) ; } template <class T> Vector3<T> ToX0Y (const Vector2<T>& p) { return Vector3<T> (p.x, 0 ,p.y) ; } template <class T> Vector3<T> ToX0Y (const Vector3<T>& p) { return Vector3<T> (p.x, 0 ,p.y) ; }


  にほんブログ村 IT技術ブログへ


template で複数の型を指定

template で複数の型を指定する場合は,カンマで区切って指定すれば良い.

    template <class V2, class V3> V2 ToV2 (const V3& v3,const long type)
    {
        V2 v2 ;
        switch (type) {
            case to_xy : v2 = ::ToXY(v3) ; break ;
            case to_yz : v2 = ::ToYZ(v3) ; break ;
            case to_zx : v2 = ::ToZX(v3) ; break ;
            case to_xz : v2 = ::ToXZ(v3) ; break ;
            default :    v2 = ::ToXY(v3) ; break ;
            }
        return v2 ;
        }

呼び出しは,次の様な感じ.

    Vd3 v3 = Vd3(1,2,3) ;
    Vd2 v2 = ::ToV2<Vd2,Vd3>(v3,to_xy) ;


  にほんブログ村 IT技術ブログへ


ファイルの検索

あるフォルダ内のファイルを列挙するコード 

MFC
v_tstring	EnumFiles_MFC	(c_tstring& path,const bool skipDot=true)
{
	v_tstring	foundFiles ;
	{
		iFileFind	ff ;
		BOOL		isWorking = ff.FindFile((::Path_AddLastSP(path)+_T("*.*")).c_str()) ;
		while	(isWorking)	{
			 	isWorking = ff.FindNextFile() ;
			if (skipDot && ff.IsDots()) {	continue ;	}
			tstring	fileName = ff.GetFileName() ;
			if (ff.IsDirectory()) {
				fileName = ::Path_AddLastSP(fileName) ;
				}
			foundFiles.push_back(::Path_AddLastSP(path)+fileName) ;
			}
		}
	return	foundFiles ;
	}

MSC
v_tstring	EnumFiles_MSC	(c_tstring& path,const bool skipDot=true)
{
	v_tstring	foundFiles ;
	{
		tstring	fffPath = ::Path_AddLastSP(path)+_T("*.*") ;
		WIN32_FIND_DATA	fd ;
		memset(&fd,0,sizeof(WIN32_FIND_DATA)) ;
		HANDLE	hFind = ::FindFirstFile(fffPath.c_str(),&fd) ;
		if (hFind != INVALID_HANDLE_VALUE) {
			while	(TRUE)	{
				tstring	fileName = fd.cFileName ;
				if (skipDot) {
					if (fileName == _T("."))   {	fileName = _T("") ;	}
					if (fileName == _T(".."))  {	fileName = _T("") ;	}
					}
				if (!fileName.empty()) {
					if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
						fileName = ::Path_AddLastSP(fileName) ;
						}
					foundFiles.push_back(::Path_AddLastSP(path)+fileName) ;
					}
				if (!::FindNextFile(hFind,&fd)) {
					break ;
					}
				}
			::FindClose(hFind) ;
			}
		}
	return	foundFiles ;
	}

GNUC
v_tstring	EnumFiles_GNUC	(c_tstring& path_,const bool skipDot=true)
{
	tstring 	path = path_ ;
	v_tstring	foundFiles ;
	{
		DIR*	dp = ::opendir(path.c_str()) ;
		struct	dirent*	dent = NULL ;
		do	{
			dent = readdir(dp) ;
			if (dent != NULL)	{
				tstring	fileName = dent->d_name ;
				if (skipDot) {
					if (fileName == _T("."))   {	continue ;	}
					if (fileName == _T(".."))  {	continue ;	}
					}
				if (dent->d_type & DT_DIR) {
					fileName = ::Path_AddLastSP(fileName) ;
					}
				foundFiles.push_back(::Path_AddLastSP(path)+fileName) ;
				}
			}	while (dent != NULL) ;
		::closedir(dp) ;
		}
	return	foundFiles ;
	}

MFC 版で,iFileFind としているのは,VC 6 MFC MBCS 版でのバグのため.

class	iFileFind	:	public	CFileFind	{
	public:
		virtual	CString GetFilePath() const	{
			ASSERT(m_hContext != NULL);
			ASSERT_VALID(this);
			CString strResult = m_strRoot;
			#ifdef	____VC_6_______MBCS_BUG___
			{
				if (strResult[strResult.GetLength()-1] != '\\' &&
					strResult[strResult.GetLength()-1] != '/')	{
					strResult += m_chDirSeparator;
					}
				}
			#else
			{
				LPCTSTR pszResult;
				LPCTSTR pchLast;
				pszResult = strResult;
				pchLast = _tcsdec( pszResult, pszResult+strResult.GetLength() );
				VERIFY(pchLast!=NULL);
				if ((*pchLast != _T('\\')) && (*pchLast != _T('/')))	{
					strResult += m_chDirSeparator;
					}
				}
			#endif
			strResult += GetFileName();
			return strResult;
			}
		} ;

MFC 7 以降であれば,CFileFind として利用可能.


i_FileF.hxx
EnumFile.hxx


  にほんブログ村 IT技術ブログへ


vector<Xxxx<T>> の利用でのエラー

template <class T> Extent2<T> E2_GetExtent (const std::vector<VLine2<T>>& lins)     //  エラー
template <class T> Extent2<T> E2_GetExtent (const std::vector< VLine2<T> >& lins)   //  OK

vector<VLine2<T>> の様にスペースがないとエラーになる.
vector< VLine2<T> > の様に空ければ OK .


  にほんブログ村 IT技術ブログへ


ActiveX.exe , ActiveX.dll の登録

何年かに 1 度ある問合せ.普段あまりやってないとすぐ忘れてしまう.

dll や ocx の登録は,RegSvr32 .
 管理者として起動したコマンドプロンプトで,以下の様に入力して登録できる.
  RegSvr32.exe ActiveX.dll
 RegSvr32 で ocx などの登録
 OCX x64
exe は,管理者として起動したコマンドプロンプトで実行.
  ActiveX.exe
 IIS 環境の再設定


  にほんブログ村 IT技術ブログへ


Magical Finder + WN-AC1167R

moto g5 を Android 8.1 に更新した.

ダウンロードする所の評価はかなり低いが…
Android 7 の時もそうだったが,特に問題なし.

「Web設定画面を開く」で,正しく開くことができる.


Magical Finder は,IPv4 のアドレスを調べる程度の利用.
今は ASUS Router アプリ があるので,あまり必要ではない.


  にほんブログ村 IT技術ブログへ



    top

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