ホーム » 2019

年別アーカイブ: 2019

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930

カテゴリー

アーカイブ

ブログ統計情報

  • 99,333 アクセス


Linux 文字コード変換のコード

iconv を使用した方法

std::string	SJIS_to_UTF8	(const std::string& sj_str)
{
	tstring	u8_str ;
	iconv_t	icd = ::iconv_open("UTF8","Shift_JIS") ;
	if (icd == (iconv_t)-1) {
		u8_str = ::iconv_SJIS_UTF8(sj_str) ;
		}
	else {
		{
			size_t	sj_size = sj_str.length() ;
			size_t	u8_size = sj_str.length()*3 + 1024 ;
			u8_str.resize(u8_size) ;
			char*	sj_ptr = (char*)(&sj_str[0]) ;
			char*	u8_ptr = (char*)(&u8_str[0]) ;
			::iconv(icd,&sj_ptr,&sj_size,&u8_ptr,&u8_size) ;
			}
		::iconv_close(icd) ;
		}
	return	u8_str.c_str() ;
	}

iconv,uconv の部分

#define	cmd_iconv		_T("iconv")		//	linux
#define	cmd_uconv		_T("uconv")		//	DS116
 
bool	exec_x_conv	(const tstring& s_j_name,const tstring& u_8_name)
{
	tstring	sj_name = ::QuotM_Add_Auto(s_j_name) ;
	tstring	u8_name = ::QuotM_Add_Auto(u_8_name) ;
	tstring	param = _T(" -f sjis -t utf8 ") + sj_name + _T(" -o ") + u8_name ;
	if (::which( cmd_iconv)) {
		tstring	 exe_iconv = cmd_iconv	_T(" ") + param ;
		_tsystem(exe_iconv.c_str()) ;
		return	true ;
		}
	if (::which( cmd_uconv)) {
		tstring	 exe_uconv = cmd_uconv	_T(" ") + param ;
		_tsystem(exe_uconv.c_str()) ;
		return	true ;
		}
	return	false ;
	}
 
std::string	iconv_SJIS_UTF8(const std::string& sj_str)
{
	tstring	tmp_path = ::Get_i_Tools_tmp_date() ;
	tstring	now_str  = ::Now_Format(_T("%M%S")) ;
	tstring	s_j_name = ::Path_AddLastSP(tmp_path) + _T("sj_") + now_str + _T(".txt") ;
	tstring	u_8_name = ::Path_AddLastSP(tmp_path) + _T("u8_") + now_str + _T(".txt") ;
		s_j_name = ::CreateUniqueEmpty(s_j_name.c_str()) ;
		u_8_name = ::CreateUniqueEmpty(u_8_name.c_str()) ;
	std::string	u8_str ;
	{
		v_char	v_c_u8 ;
		v_char	v_c_sj = ::To_v_char(sj_str.c_str()) ;
				 ::v_c_SaveText(s_j_name.c_str(),v_c_sj) ;
		{
				 ::exec_x_conv(s_j_name,u_8_name) ;
			}
		v_c_u8 = ::v_c_Load (u_8_name.c_str()) ;
		u8_str = ::To_tstring( v_c_u8   ).c_str() ;
		}
	return	u8_str.c_str() ;
	}

Fedora  iconv コマンドでの変換


うまく置き換わっていない文字があった.
‘~'(0x7e) が ‘‾'(0x203e) になってしまっていた.
他にも ‘\'(0x5c) が ‘¥'(0xa5) .
http://ossforum.jp/jossfiles/Linux_SJIS_Support.pdf
幾つか違う文字があるようで,iconv の -f sjis を SJIS-WIN でうまくいった.

	tstring	i_param = _T(" -f SJIS-WIN -t utf8 ") + sj_name + _T(" -o ") + u8_name ;
	tstring	u_param = _T(" -f sjis     -t utf8 ") + sj_name + _T(" -o ") + u8_name ;

2020/04/30 ASUSTOR NAS に対応
text_gnc.hxx exec_ic.hxx

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Linux で文字コードの変換

Windows での文字コードの変換部分は MultiByteToWideChar,WideCharToMultiByte でうまく機能している.

 exe \ 入力 シフトJIS UTF-16 UTF-8
_UNICODE → WideChar そのまま → WideChar(CP_UTF8)
_MBCS そのまま → MultiByte → WideChar(CP_UTF8) → MultiByte

MultiByteToWideCharWideCharToMultiByte の使い方は C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src\ などの mbstowcs.c,wcstombs.c を参照.


MSDN で見つけた記事
C++ – STL の文字列クラスと Win32 API による Unicode エンコーディングの変換


Linux 環境での動作は 2014/03 に一度調べていたみたいで ” gcc iconv ” とコメントになっている.
それで https://ja.wikipedia.org/wiki/Iconv にあるコードを Raspberry Pi 環境で実行するとうまく変換できる.
コンパイルエラーになったので string.h のインクルードが必要かも?
同じコードを Synology NAS の DS116 でコンパイルして実行するとうまく動作しない
(そのままのコードでは止まってしまう).
iconv_open で (iconv_t)-1 が返されていて errno は EINVAL になってしまう.


iconv コマンドを試すと Raspberry Pi では OK .
Synology NAS は iconv が存在しない.
検索すると uconv が使えると書かれている.
https://forum.synology.com/enu/viewtopic.php?t=82591


Iwao@DS116:~$ uconv -L
ASCII-Latin Accents-Any Amharic-Latin/BGN Any-Accents Any-Publishing Arabic-Latin Arabic-Latin/BGN Armenian-Latin Armenian-Latin/BGN Azerbaijani-Latin/BGN Belarusian-Latin/BGN Bengali-Devanagari Bengali-Gujarati Bengali-Gurmukhi Bengali-Kannada Bengali-Latin Bengali-Malayalam Bengali-Oriya Bengali-Tamil Bengali-Telugu Bopomofo-Latin Bulgarian-Latin/BGN Cyrillic-Latin Devanagari-Bengali Devanagari-Gujarati Devanagari-Gurmukhi Devanagari-Kannada Devanagari-Latin Devanagari-Malayalam Devanagari-Oriya Devanagari-Tamil Devanagari-Telugu Digit-Tone Fullwidth-Halfwidth Georgian-Latin Georgian-Latin/BGN Greek-Latin Greek-Latin/BGN Greek-Latin/UNGEGN Gujarati-Bengali Gujarati-Devanagari Gujarati-Gurmukhi Gujarati-Kannada Gujarati-Latin Gujarati-Malayalam Gujarati-Oriya Gujarati-Tamil Gujarati-Telugu Gurmukhi-Bengali Gurmukhi-Devanagari Gurmukhi-Gujarati Gurmukhi-Kannada Gurmukhi-Latin Gurmukhi-Malayalam Gurmukhi-Oriya Gurmukhi-Tamil Gurmukhi-Telugu Halfwidth-Fullwidth Han-Latin Han-Latin/Names Hangul-Latin Hans-Hant Hant-Hans Hebrew-Latin Hebrew-Latin/BGN Hiragana-Katakana Hiragana-Latin IPA-XSampa Jamo-Latin Kannada-Bengali Kannada-Devanagari Kannada-Gujarati Kannada-Gurmukhi Kannada-Latin Kannada-Malayalam Kannada-Oriya Kannada-Tamil Kannada-Telugu Katakana-Hiragana Katakana-Latin Katakana-Latin/BGN Kazakh-Latin/BGN Kirghiz-Latin/BGN Korean-Latin/BGN Latin-ASCII Latin-Arabic Latin-Armenian Latin-Bengali Latin-Bopomofo Latin-Cyrillic Latin-Devanagari Latin-Georgian Latin-Greek Latin-Greek/UNGEGN Latin-Gujarati Latin-Gurmukhi Latin-Hangul Latin-Hebrew Latin-Hiragana Latin-Jamo Latin-Kannada Latin-Katakana Latin-Malayalam Latin-NumericPinyin Latin-Oriya Latin-Syriac Latin-Tamil Latin-Telugu Latin-Thaana Latin-Thai Macedonian-Latin/BGN Malayalam-Bengali Malayalam-Devanagari Malayalam-Gujarati Malayalam-Gurmukhi Malayalam-Kannada Malayalam-Latin Malayalam-Oriya Malayalam-Tamil Malayalam-Telugu Maldivian-Latin/BGN Mongolian-Latin/BGN NumericPinyin-Latin NumericPinyin-Pinyin Oriya-Bengali Oriya-Devanagari Oriya-Gujarati Oriya-Gurmukhi Oriya-Kannada Oriya-Latin Oriya-Malayalam Oriya-Tamil Oriya-Telugu Pashto-Latin/BGN Persian-Latin/BGN Pinyin-NumericPinyin Publishing-Any Russian-Latin/BGN Serbian-Latin/BGN Simplified-Traditional Syriac-Latin Tamil-Bengali Tamil-Devanagari Tamil-Gujarati Tamil-Gurmukhi Tamil-Kannada Tamil-Latin Tamil-Malayalam Tamil-Oriya Tamil-Telugu Telugu-Bengali Telugu-Devanagari Telugu-Gujarati Telugu-Gurmukhi Telugu-Kannada Telugu-Latin Telugu-Malayalam Telugu-Oriya Telugu-Tamil Thaana-Latin Thai-Latin Tone-Digit Traditional-Simplified Turkmen-Latin/BGN Ukrainian-Latin/BGN Uzbek-Latin/BGN XSampa-IPA am-am_FONIPA az-Lower az-Title az-Upper ch-ch_FONIPA cs-cs_FONIPA cs-ja cs-ko cs_FONIPA-ja cs_FONIPA-ko dsb-dsb_FONIPA el-Lower el-Title el-Upper eo-eo_FONIPA es-am es-es_FONIPA es-ja es-zh es_419-ja es_419-zh es_FONIPA-am es_FONIPA-es_419_FONIPA es_FONIPA-ja es_FONIPA-zh ia-ia_FONIPA it-am it-ja ja_Latn-ko ja_Latn-ru ky-ky_FONIPA la-la_FONIPA lt-Lower lt-Title lt-Upper nl-Title pl-ja pl-pl_FONIPA pl_FONIPA-ja ro-ja ro-ro_FONIPA ro_FONIPA-ja ru-ja ru-zh sk-ja sk-sk_FONIPA sk_FONIPA-ja tlh-tlh_FONIPA tr-Lower tr-Title tr-Upper uz_Cyrl-uz_Latn uz_Latn-uz_Cyrl yo-yo_BJ zh_Latn_PINYIN-ru Any-Null Any-Lower Any-Upper Any-Title Any-Name Name-Any Any-Remove Any-Hex/Unicode Any-Hex/Java Any-Hex/C Any-Hex/XML Any-Hex/XML10 Any-Hex/Perl Any-Hex Hex-Any/Unicode Hex-Any/Java Hex-Any/C Hex-Any/XML Hex-Any/XML10 Hex-Any/Perl Hex-Any Any-NFC Any-NFKC Any-NFD Any-NFKD Any-FCD Any-FCC Any-ch_FONIPA Any-Latin Any-Telugu Any-Gurmukhi Any-Gujarati Any-Malayalam Any-Oriya Any-Devanagari Any-Kannada Any-Tamil Any-cs_FONIPA Any-ru Any-Bengali Any-uz_Latn Any-Katakana Any-ro_FONIPA Any-ky_FONIPA Any-zh Any-yo_BJ Any-am Any-es_419_FONIPA Any-eo_FONIPA Any-es_FONIPA Any-sk_FONIPA Any-Hant Any-Hans Any-Hiragana Any-la_FONIPA Any-Syriac Any-Greek Any-Greek/UNGEGN Any-Cyrillic Any-Hangul Any-Bopomofo Any-Arabic Any-Thai Any-Armenian Any-Thaana Any-Georgian Any-Hebrew Any-am_FONIPA Any-dsb_FONIPA Any-ia_FONIPA Any-uz_Cyrl Any-pl_FONIPA
Iwao@DS116:~$
DS116 で uconv -L


iconv_open で失敗した場合,iconv コマンドまたは uconv コマンドとするか?


Linux 文字コード変換のコード


2022/07/15
SynoCli File Tools v2.6-16 で iconv が追加された.
SynoCli File Tools などのインストール方法は次の所に書いています.
https://dev.mish.work/wordpress/2022/06/15/ds116-entware/

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Windows , Linux 共通の c++ コード

3 年位前から,少しずつ Windows や Linux に依存しない c++ のコードを書く様にしている.
ソースファイルの文字コードと改行コードは 7 ビットの範囲で crlf にしている.
.sh などは lf でないとうまくない.
html などの場合は UTF-8 .
扱うファイル名も 7 ビットの範囲に限定している.
これで UI を伴わない範囲ではほぼうまく機能している.
次のページからのリンク先で WebGL を使用したサーバのコードはソースレベルで互換性あり.
https://itl.mydns.jp/i_Tools/

他に Windows 専用のコードとの区別のため,ファイル名を小文字に.
これは Linux では大文字,小文字が区別されるため.


今回既存の AP ドキュメントを扱うことに.
Windows でいう「シフト JIS」と「UNICODE」のテキストファイル.
他に UTF-8 のファイルもあるが対応する必要性は未定.
UTF-8 ファイルは Windows のコードでは書いているが,テスト用に存在するのみ.


今までの Windows のコード(tstrmbwc.hxx)では _T や _UNICODE の有無でうまく機能している.
読み込んだ時に _UNICODE の有無でそれぞれの文字コードで保持すればほぼ OK .
「ほぼ」というのは「㎥」の様にシフト JIS にない文字は失われてしまうため.
他にもサロゲートペアにはうまく対応できていない.


Linux でも同様に考えると,読み込んだ時に UTF-8 にすれば良さそう.
wchar_t もあるみたいだが今の時点では考慮しないことにする.
と,思ってテスト用のコードを書いてみたがうまく動作しない.
恐らく変換関連の考え方が理解できていないため.


2020/02 「文字コードを変更してコピー」するツール
https://i–tools.blogspot.com/2020/02/copycc202001.html
「文字コードを変換してコピー」するツール

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 に IIS と PHP – 6

ASP の処理に時間がかかっていると,

Active Server Pages エラー 'ASP 0113'
スクリプトがタイムアウトしました
/Test/ASP/umpc/mbSearch/MBxSrchR.asp
スクリプトを実行する時間の制限を超えました。この制限時間は、プロパティ Server.ScriptTimeout に新しい値を指定するか、IIS 管理ツールの値を変更することによって変更できます。

管理ツールでの設定は「サイトを選択」-「ASP」-「右クリック」-「機能を開く」.
「サイトを選択」-「ASP」-「右クリック」-「機能を開く」
「動作」-「制限プロパティ」-「スクリプトのタイムアウト」の値を変更 する.
「動作」-「制限プロパティ」-「スクリプトのタイムアウト」

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 に IIS と PHP – 5

DB の場所が変わって「ODBC データ ソース アドミニストレーター」で正しく指定.
動作を確認していると,

Provider エラー '80004005'
エラーを特定できません
/_LIB_/L_LogAcc.asp, 行 224

Win10 IIS Provider エラー '80004005' エラーを特定できません
ADODB.recordset の Open でエラー
サイトの再起動を試したが変わらず.
OS を再起動することでうまく通るようになった.


他にもチェックしていると,

HTTP エラー 500.19 - Internal Server Error
ページに関連する構成データが無効であるため、要求されたページにアクセスできません。
エラー情報の詳細:
モジュール CustomErrorModule
通知 SendResponse
ハンドラー ASPClassic
エラー コード 0x800700b7
構成エラー 一意のキー属性 'fileExtension' が '.imo'に設定されている種類 'mimeMap' の重複コレクション エントリを追加できません
構成ファイル \\?\C:\Users\Public\Documents\web\Test\web.config
要求された URL http://localhost:80/Test/ASP/Default.asp
物理パス C:\Users\Public\Documents\web\Test\ASP\Default.asp
ログオン方法 匿名
ログオン ユーザー 匿名
構成ソース:
5: <staticContent>
6: <mimeMap fileExtension=".imo" mimeType="text/imo" />
7: </staticContent>
詳細情報:
このエラーは、Web サーバーまたは Web アプリケーションの構成ファイルの読み取りに問題があるときに発生します。エラーの原因に関する情報が、イベント ログに記録されている場合があります。
詳細情報の表示 »

HTTP エラー 500.19 - Internal Server Error   ページに関連する構成データが無効であるため、要求されたページにアクセスできません。   ハンドラー ASPClassic   エラー コード 0x800700b7
MINE の設定を外して実行すると,

Microsoft VBScript 実行時エラー エラー '800a01ad'
ActiveX コンポーネントはオブジェクトを作成できません。
/_LIB_/L_LstDir.asp, 行 14

Microsoft VBScript 実行時エラー エラー '800a01ad' ActiveX コンポーネントはオブジェクトを作成できません。
コードの部分を見ると,
set oFSys = Server.CreateObject(“AsFile.FileSys”)
「アプリケーション プール」-「詳細設定」-「32 ビット アプリケーションの有効化」を「True」に.
「アプリケーション プール」-「詳細設定」-「32 ビット アプリケーションの有効化」


他にも,

HTTP エラー 500.19 - Internal Server Error
ページに関連する構成データが無効であるため、要求されたページにアクセスできません。
エラー情報の詳細:
モジュール	   CustomErrorModule
通知	   SendResponse
ハンドラー	   StaticFile
エラー コード	   0x800700b7
構成エラー	   一意のキー属性 'fileExtension' が '.imo'に設定されている種類 'mimeMap' の重複コレクション エントリを追加できません
構成ファイル	   \\?\C:\Users\Public\Documents\web\Test\web.config
要求された URL	   http://localhost:80/Test/iisstart.png
物理パス	   C:\Users\Public\Documents\web\Test\iisstart.png
ログオン方法	   匿名
ログオン ユーザー	   匿名
構成ソース:
   17:         <staticContent>
   18:             <mimeMap fileExtension=".imo" mimeType="text/imo" />
   19:         </staticContent>
詳細情報:
このエラーは、Web サーバーまたは Web アプリケーションの構成ファイルの読み取りに問題があるときに発生します。エラーの原因に関する情報が、イベント ログに記録されている場合があります。
詳細情報の表示 »

MIME の設定がダブっているとうまくない様で,下位の方を削除しようとすると

---------------------------
MIME の種類
---------------------------
この操作の実行中にエラーが発生しました。
詳細: 
ファイル名: \\?\C:\Users\Public\Documents\web\Test\web.config
行番号: 18
エラー: 一意のキー属性 'fileExtension' が '.imo'に設定されている種類 'mimeMap' の重複コレクション エントリを追加できません
---------------------------
OK   
---------------------------

MIME の種類   この操作の実行中にエラーが発生しました。
上位の方から順に削除して対応.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

T90Chi Win10 1803 からの更新

Win10 1803 だった T90Chi が Windows Update 1903 ? の対象に.
そのまま受け入れて進めると 0x80070057 のエラーに.
Win10 1803 Update 0x80070057 エラー
どうしたものかと思ったが「やり直す」を選択.
1 時間程度経ったと思う.
今度は「次の作業が必要です」.
Win10 VirtualBox が対応していないのでアンインストール
VirtualBox をアンインストール.


画面を撮り忘れたが,10 GB 以上の空きがある外部記憶装置が必要に.
追加している SD カードを指定して継続.
また 1 時間程度して再起動の画面.
Win10 1803 からの更新で「今すぐ再起動」
その後なかなか進まない?


4 時間程度経って,
「コンピューターに対する変更を元に戻しています…」のループ.
コンピューターに対する変更を元に戻しています...
更に 2 時間程再起動を繰り返していたが,「電源」+「音量-」でシャットダウンさせた.


T90Chi Windows Update その後
T90Chi Windows Update その後 – 2

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

ポートを指定してのアクセス

引き続き IIS 環境へのアクセスを調べているが…
幾つか調べたことのメモ


IIS 部分を PHP から呼び出せないかと思い見つけたのが file_get_contents
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

//www.example.com/ はちゃんと表示できるが,他のサイトなどではうまく表示されないことが多い?


auひかりのルータ Aterm BL190HW の設定を幾つか調べたが,特に影響しているものはなさそう.
ASUS RT-AC86U の設定でいろいろ見ていたら「ポートフォワーディング」が気になった.
試しに DS115j に接続する設定を追加したら,うまく動作する.
外部ポート 8000  内部ポート 80  内部 IP アドレスを 192.168.1.115 に.
http://iwao.synology.me:8000/ でアクセスできる.
RT-AC86U ポートフォワーディングの設定
同様に Win10 IIS も設定したがうまく接続できない.こうなると Win10 の設定か?


Win10 の設定を見直していたら IPv4 の設定の「デフォルトゲートウェイ」がブランクになっていた.
Win10 IIS IPv4 「デフォルトゲートウェイ」の設定
これを正しく設定したらうまく接続できるようになった.
http://iwao.synology.me:8080/

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

IPv6 でのアクセス

テスト用に IIS 環境へ接続できないかと…
LAN 内であれば次の様な指定で可能.
//192.168.1.80:8080/
//win10-ltsc:8080/


ASUS RT-AC86U を追加前は BL190HW のポートマッピング設定で設定していた.
LAN 側ホスト 192.168.0.80  プロトコル TCP  ポート番号 8080
2 重ルータにする前のポートマッピング設定


IPv6 ならそれぞれが指定できると思い試すことに…
指定方法は次のページにあった.
URLで IPv6 のIPアドレスを指定して接続する

DS115j http://[240f:33:c6c7:1:211:32ff:fe5f:e655]/
Win10  http://[240f:33:c6c7:1:241f:8b43:86b9:28de]:8080/
Win 7  http://[240f:33:c6c7:1:855d:191e:86aa:6fc3]/


LAN 内であれば意図した動作になりアクセスできる.
どこかの設定が足りないみたいで WAN からはアクセスできていない.


2020/04/22 追加

DevX    http://[240f:33:c6c7:1:81c7:3574:8836:64f6]/

2022/02/20
この時やりたかったことの,仮想ホスト機能などを使った設定.
NAS の仮想ホストの設定
仮想ホストの設定 ポート


2022/04/07
リバースプロキシ

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

WebGL three.js r111

WebGL three.jsr111
その中に 3MF テクスチャ があった.
three.js r111 3mf テクスチャ
3mf を自前のファイルに差替えて試したがうまく表示できなかった.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

FBX SDK 2020.0.1

FBX SDK がまた新しくなっている.
とりあえずダウンロードしてインストール.
FBX SDK 2020.0.1 インストール
ビルドなどは次のタイミングを予定.


Lib を組み込む部分のコードは次の様にしている.

#include <FbxSdk.h>
#ifdef	FBXSDK_VERSION_STRING

#if 	(FBXSDK_VERSION_MAJOR >= 2014)
    	#define	FS_VER_GT_2014_00
#endif
#if 	(FBXSDK_VERSION_MAJOR >= 2019)
    #if	(FBXSDK_VERSION_MINOR >=    1)
    	#define	FS_VER_GT_2019_01
    #endif
#endif
#if 	(FBXSDK_VERSION_MAJOR >= 2020)
    	#define	FS_VER_GT_2019_01
#endif

#if	defined	(FS_VER_GT_2019_01)
    #if     defined	    (_DLL)
    	    #pragma comment (lib, "LibXml2-MD.lib")
    	    #pragma comment (lib, "Zlib-MD.lib")
    #else   //		   !(_DLL)
    	    #pragma comment (lib, "LibXml2-MT.lib")
    	    #pragma comment (lib, "Zlib-MT.lib")
    #endif  //		    (_DLL)
#endif

#if	defined	(FS_VER_GT_2014_00)
    #if	    defined	    (_DLL)
    	    #pragma comment (lib, "LibFbxSDK-MD.lib")
    #else   //		   !(_DLL)
    	    #pragma comment (lib, "LibFbxSDK-MT.lib")
    #endif  //		    (_DLL)
#endif

#endif // FBXSDK_VERSION_STRING
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 に IIS と PHP – 4

ここでは Windows 10 環境に Classic ASP をインストールする手順を記述しています.
Windows Server 2022 へのインストールは次の所にあります.
WS2022 Classic ASP インストール
WS2022 ASP ActiveX dll exe の設定


Classic ASP は IIS 7.0 と IIS 7.5 に既定ではインストールされない
「インターネットインフォメーションサービス」の以下の項目をチェックしてインストール.
1.「Web 管理ツール」-「IIS 6 管理互換」-「IIS メタベースおよび IIS 6 構成との互換性」
2.「World Wide Web サービス」-「アプリケーション開発機能」-「ASP」
Win10 IIS ClassicASP のインストール


そのままではスクリプトのエラーメッセージは表示されない.
An error occurred on the server when processing the URL. Please contact the system administrator.
If you are the system administrator please click here to find out more about this error.
An error occurred on the server when processing the URL.
Classic ASP スクリプトのエラー メッセージはもはや既定では Web ブラウザーに表示されない
Win10 IIS 「ASP」-「デバッグ プロパティ」-「ブラウザへのエラー送信」
これで localhost には表示されるようになる.
Microsoft VBScript 実行時エラー エラー ‘800a01ad’
ActiveX コンポーネントはオブジェクトを作成できません。
/_LIB_/L_Mainte.asp, 行 33
Microsoft VBScript 実行時エラー エラー '800a01ad'  ActiveX コンポーネントはオブジェクトを作成できません。
別の PC からアクセスすると,
サーバー エラー
500 – 内部サーバー エラーです。
検索中のリソースに問題があるため、リソースを表示できません。
localhost からのアクセスの様なエラーメッセージを表示する方法はわからなかった.


「ActiveX コンポーネントはオブジェクトを作成できません」エラーは 32 ビット ActiveX.dll が起動できないため.
「アプリケーション プール」-…-「32 ビット アプリケーションの有効化」を「True」に.
Win10 IIS 「アプリケーション プール」-...-「32 ビット アプリケーションの有効化」
ActiveX.dll が登録されていないと,
Server オブジェクト エラー ‘ASP 0177 : 8007007e’
Server.CreateObject に失敗しました
/_LIB_/L_Mainte.asp, 行 33
登録するには管理者として実行」した「コマンドプロンプト」などで
RegSvr32 ActiveX.dll
ActiveX.exe は IUSER で起動できるように設定する必要がある.
ActiveX.exe を IUSER で起動できるように設定

https://jml.mish.work/various/iis.html


Classic ASP

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 に IIS と PHP – 3

どこかに設定があるのかもしれないが,
PHP でのエラーなどのログファイル.
場所は c:\Windows\Temp\ .
Win10 IIS PHP のログファイル
今回テストした 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) ;
		}
	$link	= "" ;
	if ($up_status) {
		$p_info = pathinfo($filename) ;
		$pi_ext = $p_info['extension'] ;
		$bmp_name = $filename . ".bmp" ;
		$to_bmp = FALSE ;
		if  	($pi_ext == "png")  {	$img = imagecreatefrompng ($filename) ;   $to_bmp = imagebmp($img,$bmp_name) ;	}
		else if	($pi_ext == "jpg")  {	$img = imagecreatefromjpeg($filename) ;   $to_bmp = imagebmp($img,$bmp_name) ;	}
		else if ($pi_ext == "bmp")  {	$bmp_name = $filename ;                   $to_bmp = TRUE ;                 	}
		if ($to_bmp) {
			$cmd_to	= ("rsz_bmp.exe") . " " . $bmp_name ;
			exec	($cmd_to,$out,$ret) ;
			}
		if ($ret == 0) {
			$rsz_file = $out[count($out)-1] ;
			$bak_file = $filename . ".bak." . $pi_ext ;
			rename($filename,$bak_file) ;
			$rsz_name = pathinfo($rsz_file)['basename'] ;
			$file_rsz = $p_info['dirname'] . "/" . $rsz_name ;
			rename($rsz_file,$file_rsz) ;
			if    	($pi_ext == "png")  {	$img_bmp = imagecreatefrombmp($file_rsz) ;   imagepng ($img_bmp,$filename) ;	}
			else if	($pi_ext == "jpg")  {	$img_bmp = imagecreatefrombmp($file_rsz) ;   imagejpeg($img_bmp,$filename) ;	}
			else if ($pi_ext == "bmp")  {	copy($file_rsz,$filename) ;                                             	}
			if (!file_exists($filename)) {
				$filename = $file_rsz ;
				}
			}
		if (file_exists($filename)) {
			$link .= "<hr/>" ;
			$link .= "<a href='" ;
			$link .= $filename ;
			$link .= "'>" ;
			$link .= $filename ;
			$link .= "</a>" ;
			$link .= "<br/>" ;
			$link .= "<img src='" ;
			$link .= $filename ;
			$link .= "'>" ;
			}
		}
	?>

rsz_bmp.exe で画像ファイルを 2^n にリサイズし,その結果のファイル名を標準出力に出力する.
画像を出力する imagebmp などはあまり速くない.
同様の PHP を Synology NAS 上で.
https://itl.mydns.jp/…/tex_pow2.php
PHP のコードが悪いのか? Synology NAS では DIB から元の画像に戻すのがうまくいかない.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 に IIS と PHP – 2

「IIS マネージャー」の「サイト」-「右クリック」で「Web サイトの追加…」.
手順は Win7 の時と同様
「ディレクトリの参照」を「有効」に.


PHP で BMP を作成するコードを検索すると,imagebmp というのがあった.
ここにあったサンプルを /Test/php_gd/make_bmp.php として保存.
呼び出されると php.bmp が生成される.


以下の動作は Synology NAS を使用しています.
Win10 ITSC Test php_gd make_bmp.php

コードを一部修正して現在時刻の画像を作成しています.
上のブラウザの画像をクリックすると現在時刻の画像ファイルを更新します.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Windows API で DIB のリサイズ

プログラミング Windows 第5版(上)
第14章 ビットマップと BitBlt
14.4 GDI ビットマップオブジェクト
HelloBit.c より

i_DIB	DIB_resize	(const i_DIB& dib,const SIZE& new_s)
{
	i_DIB	rsz_dib ;
	RECT	rect = {	0,0,	new_s.cx ,	new_s.cy	} ;
	{
		HDC 	hdc  = ::GetDC(NULL) ;
		HDC 	hmem = ::CreateCompatibleDC(hdc) ;
		HBITMAP	hbmp = ::CreateCompatibleBitmap(hdc,rect.right,rect.bottom) ;
		::SelectObject(hmem,hbmp) ;
		::ReleaseDC(NULL,hdc) ;
		::StretchDIBits(hmem,rect,::Get_DIB_RECT(dib),dib) ;
		i_DIB	rsz = ::ToDIB(hbmp) ;
		::DeleteDC(hmem) ;
		::DeleteObject(hbmp) ;
		rsz_dib = rsz ;
		}
	return	rsz_dib ;
	}

::StretchDIBits による DIB のリサイズ

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Raspberry Pi に ImageMagick

以前調べた時に入っていた ImageMagick
先日追加した SD の Pi 環境には入っていないのでインストール.
検索すると sudo apt install ImageMagick とある.が,入力すると,
pi@raspberrypi:~ $ sudo apt install ImageMagick
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
E: パッケージ ImageMagick が見つかりません
正しくは,
sudo apt install imagemagick
Raspberry Pi に ImageMagick のインストール
パッケージ名は小文字で指定する. imagemagick

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win10 に IIS と PHP のインストール

Win10 環境で PHP を動作させるためのインストールなどの手順
今回使用したのは Win10 LTSC
通常版に比べて不要なものが入らないのでこれを選択.


以前 Win7 環境に PHP を入れた時の手順
IIS での PHP Web サイトの構成
IIS の有効化.CGI が必要.
Win10 IIS のインストール
IIS の動作の確認.
Win10 localhost にアクセス
Win10 他の PC から IP でアクセス
//win10-ltsc でアクセス
Web PI のインストール.
Web PI を起動して PHP をインストール.
Web PI で PHP の追加
何故かエラー?
PHP Managet for IIS は複数バージョンの PHP を切替えるツールの様で今回は無くても良いか?
Web PI で PHP インストールでエラー
php -v や php -r “phpinfo();” で確認すると動作はしている.
Win10 IIS  php -v
次の内容を php として保存し,ブラウザで開く. <?php phpinfo(); ?>
Win10 LTSC phpinfo()

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Fedora 環境で bmp が読めない

先日 GLUT でテクスチャ表示 の動作を確認していた時のこと.
Raspberry Pi ではうまく表示できることまで確認.
Raspberry Pi で GLUT テスクチャ表示
Fedora ではうまく読めない.
コードでテクスチャを生成しての表示ではうまくいく.
Fedora コードでテクスチャを作成しての表示
32 ビット色 BMP のコードは Synology NAS Web サーバなどでもそれなりに動作している.
Synology NAS で i_DIB を使用
32 bit exe ではうまく読み書きできているみたい.


Raspberry Pi (ARM) と Fedora (x64) で BITMAPFILEHEADER などを見ると 64 bit 環境でうまくない.
Raspberry Pi の BITMAPFILEHEADER BITMAPINFOHEADER
Fedora の BITMAPFILEHEADER BITMAPINFOHEADER
例えば bmih.biSize が x64 では 0x50 になっている(ARM では 0x28).


def_bmp.hxx が間違っているみたい.
どうも long の定義が Windows と Linux などでは異なるため.wiki 整数型


DWORD と LONG の定義を u_32 と i_32 に変更(u_32 ,i_32 は i_define.hxx で定義している).

//typedef unsigned long       DWORD;
typedef   u_32                DWORD;
//typedef long                LONG;
typedef   i_32                LONG;

Fedora での GLUT テクスチャ表示

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Raspberry Pi で NAS が …

以前は表示されていたと思うが…
Raspberry Pi のファイルマネージャ Pcmanfm で「移動」-「ネットワーク」で NAS などが表示されていない.
Raspberry Pi のファイルマネージャで「移動」-「ネットワーク」
しばらく対応方法がわからなかった.
「ファイルマネージャ」の「アドレス欄」に smb://ds116/ の様に入力することで接続できることを確認.
Raspberry Pi ファイルマネージャのアドレス欄に smb://ds116/

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

GLUT でテクスチャ表示

今度はテクスチャ.次の様なコードで面に貼り付け.

#include	"glut_cg.hxx"
#include	"gonsprmt.hxx"
#include	"i_dib_f.hxx"

i_DIB	tex_01 ;

int	main(int argc, char* argv[])
{
	{
		tstring	test_bmp = _T("./Tex01.bmp") ;
		//     	test_bmp = _T("/run/user/1000/gvfs/smb-share:server=ds116.local,share=web/i_Tools/Doc/blog/3D_Data/Tex01.bmp") ;
		#ifdef  _MSC_VER
		      	test_bmp = _T("//DS116/web/i_Tools/Doc/blog/3D_Data/Tex01.bmp") ;
		#endif
		tex_01 = ::DIB_Load(test_bmp.c_str()) ;
		}
	{
		GonsA	gnsa ;
		{
			Gons1	box = ::Gons_Box(Vd3(5,0,5)) ;
			box.SetColor(0xffffff) ;
			gnsa.push_back(box) ;
			}
		::set_GonsA(gnsa) ;
		::set_Extent(::GonsA_GetExtent(gnsa)) ;
		{
			C_glut*	gm = ::get_c_glut() ;
			gm->BG     = Vd4(0.9) ;
			gm->EP     = Vd3(0,-10,0) ;
			}
		}
	::glutInitWindowPosition(200,100) ;
	::glutInitWindowSize	(600,600) ;
	::glutInitDisplayMode	(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) ;
	::glutInit           	(&argc,argv) ;
	::glutCreateWindow  	(argv[0]) ;
	::glutReshapeFunc   	(cv_resize) ;
	::glutDisplayFunc   	(cg_display) ;
	::glutKeyboardFunc  	(cv_keyboard) ;
	::glutMouseFunc   	(cv_mouse) ;
	::glutMotionFunc  	(cv_motion) ;
	::cv_init       	() ;
	{
		::glPixelStorei(GL_UNPACK_ALIGNMENT,1) ;
		::glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,tex_01.GetWidth(),tex_01.GetHeight(),0,GL_RGB,GL_UNSIGNED_BYTE,tex_01.GetP_Bits()) ;
		::glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST) ;
		::glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST) ;
		::glEnable(GL_TEXTURE_2D) ;
		}
	::glutMainLoop   	() ;
	return	0 ;
	}

::glTexImage2D の指定と Tex01.bmp の形式が合っていないため
GLUT でテクスチャ表示 間違った GL_RGB の指定でずれている
32 ビット色の画像なので ::glTexImage2D の GL_RGB を GL_RGBA に.
GLUT でのテスクチャ表示 R と B  が合っていない
色の順番が違うので ::glTexImage2D を見ると GL_BGRA_EXT があったのでこれを指定.
GLUT でテクスチャ表示 GL_BGRA_EXT を指定

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

GLUT でうまく表示されない?

以前作成した現在時刻を WebGL で表示するコードを GLUT を使用した方法に書き直し.
現在時刻を WebGL で表示
右側の面が正しく表示されていない.
GLUT での現在時刻の表示
見えない面を表示しない様に判断しているコードは次の様なもの.

{
	Vd3	ev = eye ;
	Vd3	nv ;
	Vd3	pt ;
	for (size_t fvIndex=0 ; fvIndex<pia.size() ; fvIndex++) {
		long	fVert = pia[fvIndex].x ;
		long	nVert = pia[fvIndex].y ;
		Vd3	n1 = ::Vx_get(nrms,nVert) ;
		Vd3	p1 = ::Vx_get(pnts,fVert) ;
		nv = nv + n1 ;
		pt = p1 ;
		}
	ev = ev - pt ;
	nv = nv.Normalized() ;
	ev = ev.Normalized() ;
	double	theta = ::deg(acos(nv.Dot(ev))) ;
	if (theta > 90)		{	continue ;	}
	}

原因は,描画用に与えている視点で目標点が加算されていなかったため.

void	draw(void)
{
	GonsA*	ga = get_GonsA() ;
	Vd3	eye = ::get_c_glut()->EP ;
	//	eye+= ::get_c_glut()->TP ;
	::GonsA_to_gl(*ga,eye) ;
	}

最終的にはこのあたり(C_glut)の見直しが必要.


https://itl.mish.work/Iwao/Doc/algo/to_thick/glut.htm

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.