5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

HTABOXコア Part2

1 :hidebou:2011/03/22(火) 04:27:36.93
HTABOXコアは新たな発想のHTML Application 開発、実行環境です。
現在各種コモンコントロールを提供する3.00のリリース準備中です。
お気軽にご意見をお寄せください。
ttp://kuroda.bglb.jp/htabox/

2 :hidebou:2011/03/22(火) 04:43:59.81
コモンコントロールデモ
ttp://kuroda.bglb.jp/htabox/demo.zip
開発環境途中経過
ttp://kuroda.bglb.jp/htabox/htabox3.zip

3 :hidebou:2011/03/23(水) 00:51:31.13
今日はドキュメント(取説)の仕様を考えていました。要は取り説中のサン
プルコードをそのまま実行して結果が即座に見れるという工夫です。ドキュ
メント自体はMSWORDで書いた方が書式として綺麗なのですが、HTML出力後で
も有効なコントロールやスクリプトをMSWORDでの編集状態で記述することは
できないような気がします。office固有のコントロールでは意味が無いわけ
ですがら。

4 :hidebou:2011/03/23(水) 01:02:00.26
結局ちょっとしたスクリプトを書いて「HTML中のサンプルコードを認識して
innerTextを認識、実行用ボタンを生成する」になりました。これで興味の
あるセクションのヘルプを眺めて、即座に実行結果を見れるようになります。
また、エディタが付属するバージョンではサンプルをエディタ上で編集し、
動作の変化を即座に確認できるわけです。

5 :hidebou:2011/03/23(水) 01:16:36.45
長い間Windows上のHTMLとCOM、そして.NETについてどんな利用の仕方が最も
ふさわしいのかを自分なりに結論付けるために重箱の隅をつつくような事柄
を解析してきましたが、すべては「簡単に結果が得られる」ためにある訳で
すから、細かなことは有る程度切り捨てて「簡単に見栄えのいいアプリケー
ションが書ける」ということを前面に押し出した方向へ重点を置くことにな
ります。

6 :hidebou:2011/03/23(水) 15:42:32.77
HELPファイルとエディタの連動を実装しましたが、まだβではありません。
ttp://kuroda.bglb.jp/htabox/htabox3.zip
今まで分散していたリソースを単一EXEに結合しましたので一気に450kになり
ました。きちんとドキュメントを書くと全体は数Mbになるかも知れません。
ドキュメントを含んだEXEとして、クローン生成用にコンパクトなEXEを別途
用意すべきか、ドキュメントを別ファイルにすべきかを決定しなければなり
ません。

7 :デフォルトの名無しさん:2011/03/23(水) 16:10:19.13
新スレオメ。
山形も風向きによっては福島の影響を大きく受けるみたいで心配です。
このプロジェクトは日本の復興のためにもなります。頑張ってください。

8 :hidebou:2011/03/23(水) 16:14:29.63
これを書きながら思ったのですが、従来のアプリケーションは説明と本来操
作すべきGUIが離れざるを得ない構造になるわけですが、HTMLアプリケーショ
ンの場合縦長のドキュメント中にボタン等のコントロールを置くことは普通
なわけですから、説明とGUIが一体となった構造とすることができます。また
、全体の見出しを俯瞰できるツリーメニューを付けているので例え長大な説明
だったとしても目的の位置へは即座に到達できるわけです。このことにでより
ユーザーフレンドリーなアプリケーションを構築できると感じます。

9 :hidebou:2011/03/23(水) 22:43:11.76
>>7
ありがとうございます。私のような人間が生きさらばえて、生きるべき方々
の命が奪われたことを想うと心が痛みます。

10 :hidebou:2011/03/24(木) 00:11:43.81
HELPファイルでのメニュー、ステータスバー、ツールバーサンプルを実装し
ましたが、まだβではありません。
ttp://kuroda.bglb.jp/htabox/htabox3.zip
確かに間違ったことさえ書かなければプログラムは忠実に動くわけですが、
結構複雑な処理を前から知っていたかのような速度で処理するプログラムを
見るとずいぶん遠くへ来てしまった感があります。マシンと人間の距離は広
がる一方ですから、それを埋めるプログラムは次第に複雑なものにならざる
を得ません。WIN32アプリケーションとしての機能を付加したHTABOXのコード
は良く言えば「有機的」悪く言えば「相互の依存関係が複雑」なものになり
ました。


11 :hidebou:2011/03/26(土) 03:22:21.06
アイコンファイルの構造とアイコンリソースの構造解析にすこし時間を取られ
てしまいましたが、納得のゆくモジュールが書けそうです。HTAタグと同等な
実行時ウインドウへのアイコン追加を3.00に実装する予定です。静的ファイル
を対象としたアイコンリソース置き換え機能は自分用ツールの場合必要が無い
わけですので別途なサービスとする予定です。

12 :hidebou:2011/03/26(土) 18:01:44.34
アイコンについての学習結果を反映してアイコンを付けてみました。また、
HELPはEXEリソースでは肥大化することからHELPディレクトリに置く方向に
しました。次に更新するときは実働するβになる予定です。
ttp://kuroda.bglb.jp/htabox/htabox3.zip


13 :hidebou:2011/03/28(月) 00:44:38.36
コモンコントロールで使用する画像ファイルの検索規則を決定しました。と
言っても表示HTMLのpathnameというごく当たり前な規則ですので通常は意識
する必要が無いと思われます。HTMLから相対パス参照で記述すれば自動的に
絶対パスへ変換して検索します。もし、about:blankに後付けされたエレメン
トを対象にコモンコントロールを生成しようとした場合はpathnameが空です
から、呼び出しスクリプトのパスを基準にします。呼び出しスクリプトが格
納されている場合はEXEのパスとなります。

14 :hidebou:2011/03/28(月) 00:56:39.21
リリースに向けて各コントロールのコードを再チェックしているのですが、
C++プロセスからの実行では問題ないページャーがWSHからだとスレッドが
ブロックすることに気づき対策を模索しました。で解決策が見つかったの
ですが、なぜそうでなければいけないのかという理由は今のところ不明で
す。COMの世界では理由がわからないということはまずありえないのですが、
複数のウインドウ同士がメッセージで通信している状態というのは神のみぞ
知る領域というのが存在するような気がします。


15 :hidebou:2011/03/28(月) 19:08:53.46
今まで、まじめにWIN32でアプリケーションを書いていなかったしっぺ返しに
非常に基本的なことを今更学ぶという時間を過ごしました。特にアイコンと
ビットマップについては、何度もモジュールを書き直し納得のゆくレベルに
できました。バイナリはまだなのですが、SetIcon関数でアイコンを設定し
DrawBitMap関数でウインドウ上の自由な位置へ透過ビットマップを表示した
サンプル画像を置きます。
ttp://kuroda.bglb.jp/htabox/bmp.png

16 :hidebou:2011/03/29(火) 12:17:53.93
ずいぶんと春めいた陽気になりました。コタツにまるまって指が痛くなるま
でコードを打ち続けた日々が遠い過去のようにも思えます。同時に私が強く
こだわってきた事柄がとてもちっぽけなものにも感じられます。私の最大の
長所でもあり、欠点でもある「なぜそうなのか知りたい」という欲望を封印
して現状での私の仕事をより正確に把握していただけるようドキュメントの
作成に専念しなければと感じています。

17 :hidebou:2011/04/01(金) 20:47:38.94
あらためて最も基本的なコントロールであるメニューを省みると、投げやり
な状態で放置してしまっていた事に気づきました。スクリプトからの低水準
関数を用意して、より複雑なメニューを作ってもらおうという予定でしたが、
それでは煩雑になることから従来のTABLE形式のメニュー定義に加えUL/LIに
よるメニュー定義を追加します。これによりネストしたメニューを簡単に定
義できるようになります。また、従来は文字列が表示されるメニューのみで
したが、TDもしくはLIにbackground属性を定義すればビットマップメニュー
も表示可能とします。すでにモジュールは完成していてこの拡張されたメニ
ューについてのドキュメントを作成中です。

18 :hidebou:2011/04/03(日) 07:48:45.75
取り説を作るという作業はプログラムを造る側の立場から使う側の立場へ視点
を変える重要な作業だと痛感します。もしこれが分業化されてしまったら結果
として使いにくいものしか生まれないだろうとさえ思います。一人ですべてを
掌握するメリットは例え全体の改訂が必要な事柄でも、面倒な会議を開くこと
なく内容に反映できることです。大げさな表現かも知れませんがプログラムと
いう存在は一つの人格だと思います。ですから複数のチーム完成させる場合で
も、最終的にユーザーの前でどのように振舞いたいのかをプロデュースする一
人の人間がいないと魂の無いプログラムになってしまう気がします。

19 :hidebou:2011/04/04(月) 12:29:33.14
HTMLファイル単体での実行機序を見直すことにしました。空のダイアログ生成
による独自ディスパッチの取得が今まで何の問題も無く安定動作していること
から当該手法を推奨し、window.onCreate()を復活させてHTML中のスクリプトか
らでも各種コントロールを生成可能とします。学習初期のプログラマーにとって
WSHファイルとHTMLファイルが別だというだけで「面倒」という印象を与えてしま
うかも知れませんから単一HTMLで完結できることは歓迎されると思います。


20 :hidebou:2011/04/05(火) 10:41:13.85
HTABOX3.00を書きながらつくづく思うのですが、結局使う人をうならせるには
愚直に、例え細かいことでも妥協せず書くしかないわけです。ただし、プログ
ラムというものは細かく制御すればするほどオーバーヘッドが増えるわけで、
軽快な動作とは相反する要素となります。だからC++のように最小のオーバー
ヘッドを実現できる環境でないと愚直が鈍重に変化してしまいます。

21 :hidebou:2011/04/05(火) 10:52:01.29
今回スクリプトに提供する各種コモンコントロールもAPI呼び出しやメッセージ
送信を公開して実現する手法もあるわけですが、その方向に進むとDHTMLと変わ
らない重さになってしまう懸念があります。ですから途中での要素の変更のよう
な動作を切り捨てて明快で軽量なことを目指しています。そういった方向では
あるのですが、これだけはオプションとして必要と感じられる部分がありました
らその都度機能を追加してゆく予定です。

22 :hidebou:2011/04/05(火) 17:54:00.65
サンプルコードやドキュメントをHTMLで閲覧でき、ドキュメント上のボタンで
その実行結果が即座に表示されるということを目的として作業していますが、
細かな現実的問題をクリアするのに思いのほか時間を費やしてしまいました。
幸いにもその動作を想定して設計されたタイプライブラリ主導でのCOMサーバー
や.NETスクリプトエンジンは安定して動作していますので、一通りのサンプル
を格納してまもなくβと呼べるものをお見せできそうです。

23 :デフォルトの名無しさん:2011/04/05(火) 20:17:50.19
西日本も福島原発の放射能に曝される。

4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/

24 :hidebou:2011/04/07(木) 02:09:42.19
私は福島へ行く心の準備ができています。あれを封じ込める仕事を若い人にさ
せてはいけません。早急に一民間企業とは隔絶した処理チームを編成して事に
あたらなければ国際的に日本と言う国の信用は地に落ちるものと思われます。

天文学という見地から見れば私達の文明などほんの瞬きほどの時間しか存在し
ていません。もし人類が何万年というオーダーで存在したとすれば、今と同程
度の文明は幾度と無く存在し、その数だけ滅びがあったのだろうと推察するの
が自然です。愚かしい人類の中でも、群を抜いて愚かしい私ですが、せめて人
の役にたてるのであれば今すぐにでも福島に馳せ参じたい心境です。

25 :近畿商事大門 大門一三:2011/04/07(木) 21:32:14.57
まぁ、まぁ、作者さん、ここは冷静になってですね、
今後の日本の復興のために、それぞれが持ってる能力を
得意な分野で最大限発揮するしかないんと違いますか?
山形ゆうたら福島に近いから、いてもたってもいられんのは分からんでもないが
ついこの間までキーボード打ってたオッサンが出る幕はおまへん。
日本と世界の英知が集まれば、必ず光明は見えてきますがな。
壱岐君もそう思うやろ?

26 :hidebou:2011/04/09(土) 02:50:58.74
複数のHTA(正確にはHTMLダイアログ関数で解釈)の表示をタブ切り替えする
ツールを公開します。
ttp://kuroda.bglb.jp/htabox/tab.zip
メニューから任意なHTMLファイルをタブに追加し、タブ表題部分(タイトル)
を右クリックすると削除します。現状では実行されるHTMLには相互を認識する
小規模なディスパッチがダイアログ引数として与えられています。

27 :hidebou:2011/04/09(土) 03:02:18.79
//TABコントロールはダイアログ引数として存在します。
//変数TABにインスタンスを格納したとして各関数を説明します。
var TAB = window.dialogArguments;

//表示されているタブの数
var Length = TAB.Length;
//ドキュメントの追加(フルパス)
TAB.Add("c:\\hoge.htm");
//任意なインデックスのドキュメント取得
var Document = TAB.Get(index);
//任意なインデックスのタブを選択
TAB.Set(index);
//任意なインデックスのタブを削除
TAB.Del(index);


28 :hidebou:2011/04/09(土) 19:05:41.86
このタブコントロール習作ソフトに「Trusted Zone Browser」という名前を
付けました。信頼済みゾーン用ブラウザという意味です。ブラウザが解釈可
能なファイルなら画像単体だろうがテキストだろうが何でも開く事ができま
す。最大の特徴は「全くセキュリティーに関心を持たない」事ですので恐ら
く世界で最軽量なブラウザだと思います。自身が作った複数のHTAのランチャ
ーとして使うのもいいかも知れません。すこし外観の微調整を行いました。
ttp://kuroda.bglb.jp/htabox/tab.zip


29 :hidebou:2011/04/10(日) 00:15:34.74
HTABOX3はリリースビルドでも500kを超えるサイズとなっています。ソースは
その半分くらいですが、さすがにこの大きさになると肩がこります。つい書い
た対症療法的記述が残らないように基本を確認する意味でコンパクトなアプリ
ケーションを書いた結果が上記ブラウザです。あまり拡張する気はありません
が、タブ表示中のファイルパス、URLを単一ファイルにテキストで保存し当該
ファイルを開いた場合は複数のタブを一気に再現する機能と、ページ上のハイ
パーリンク上で右クリックし、IEではなく本ブラウザの新たなタブとしてリン
ク先を表示する機能は是非実現したいと考えています。

30 :hidebou:2011/04/10(日) 00:33:17.94
一応方向性としては複数HTAを融合した形でのアプリケーション構築に対する
習作ということになります。HTAは一つの窓で実行するものという概念を取り
払うことでHTAをモジュールとみなしたメタHTAの実行を可能としています。
例えば一番最初のタブにマスターHTAを置いて以降のタブに存在する実働HTA
へ仕事を依頼して結果を取得するというようなイメージです。また、HTMLとい
う規格そのものがマルチスレッドには不向きですが、設計の段階から別スレッ
ドは別HTAとすれば、同一オブジェクトや変数に対する競合が発生しませんか
らより明確なアルゴリズムで複雑な処理を記述可能になると思われます。

31 :デフォルトの名無しさん:2011/04/10(日) 00:55:00.62
凄いことが始まろうとしている。

32 :デフォルトの名無しさん:2011/04/10(日) 01:54:39.60
いろんな動画みてると再臨界が始まってる可能性が高いみたいだね。
京大の専門家先生によると、もしそうなって格納容器が一気に破損した場合は、
福島原発の半径300キロを目安に退避したほうがいいそうだ。風下になったら躊躇なく逃げよう。
いままでと同じ爆発と同じように対応するわけにはいかんそうだ。
みなさんも心の準備、車やガソリンの準備、お金や身の回りの準備、遠くの親戚との連絡だけはしておいて
何事も起きないように祈りましょう。
作者さん、このスレのみなさんに大事が起きないことを祈る。

33 :hidebou:2011/04/10(日) 03:49:05.48
一括タブ定義ファイルの仕様を決定しました。拡張子TZBのテキストファイル
で単純に改行(\r\n)区切りにフルパスを記述してください。改行のみの行は
無視しますが、何らかの文字列が存在した場合はパス又はURLとみなして生成
を試みますので注意してください。ttp://kuroda.bglb.jp/htabox/tab.zip
にはWindowsXPに標準で存在する4枚のサンプルJPGを一括で表示する例が添付
されています。各自の環境に書き換えて当該ファイルをAppend HTMLで指定
してみてください。

34 :hidebou:2011/04/10(日) 04:05:43.83
ちなみに
http://www.jma.go.jp/jp/quake/
http://tenki.jp/earthquake/
http://weathernews.jp/quake/
というテキストを地震.tzbというファイルに保存すればいかなるブラウザより
高速に3つの情報を得ることができます。勿論、高速なのはセキュリティーな
んて言葉さえ知らないからだということを念頭に置いて使用してください。

35 :hidebou:2011/04/10(日) 22:12:31.11
ttp://kuroda.bglb.jp/htabox/tab.zipを更新しました。
表示ページのハイパーリンク上で右クリックした場合当該リンク先を新たな
タブで表示することができます。マウス座標からのとエレメント特定は基本
的にelementFromPointなのですが、フレーム構成の場合やや複雑な手順が必
要になるようです。また、ヒットしたエレメント自体が<A>とは限りません
ので親エレメント側を巡航し<A>を検索、存在しなかった場合子を列挙して
再帰的に<A>を検索しています。リンク手法が<A>以外だった場合の動作は
考慮していません。これで信頼すべきサイトであればネット上を巡航する
事が可能となりました。


36 :hidebou:2011/04/10(日) 22:27:31.97
このブラウザのバイナリサイズは380kですが、300kはタイトル画像ですので
実質80kです。MSHTA.EXE並のコンパクトなサイズでイントラネット用タブブラ
ウザを実現できたことを素直に喜びたいと思います。現在実装されていない
ツールバーとヘルプファイルを整備して企業内イントラネット専用ブラウザと
しての需要を掘り起こせればと考えています。

37 :hidebou:2011/04/12(火) 00:17:48.07
ttp://kuroda.bglb.jp/htabox/tab.zipを更新しました。
ヘルプは書きかけですが、実用に耐えると思います。正直HTABOX3が大きくな
ってストレスが溜まったものですから、思いっきり軽量なものを書きながら
粛然としない部分を検証しようという意図は思いがけない副産物を生んだよう
です。私はこの子が結構気にいっています。やろうと思えば各タブのHTMLイン
スタンスへHTABOX並の機能を提供することも可能ですが、このブラウザの場合
レスポンスの良さが特徴ですので、あまり欲張ったことは考えていません。

38 :hidebou:2011/04/12(火) 22:59:03.69
ttp://kuroda.bglb.jp/htabox/tab.zipを更新しました。
表示ページのタブ部分の右クリックでポップアップメニューが表示され、
タブの削除、HTMLソースの表示、整形XMLでの表示、を選択できます。
特に整形XMLでの表示はHTMLをXHTML化しなければならない時の変換ツールと
して有効だと思います。このXMLは単なる文字列変換ではなくHTMLのDOM
ノードを再帰巡航してXMLのDOMとしていますからコストはかかりますが整形
XMLであることが保障されています。

39 :hidebou:2011/04/13(水) 00:43:45.84
前から感じていたのですが、結局何らかの分野できちんとしたプログラムを
書けるかということは英文MSDNのどの位置に関連文章があるかを知っている
かどうかに尽きる気がします。さらに独創的なプログラムを書けるかどうか
は英文MSDNの先にある未解説な部分をいかに実験コードで解析してゆけるか
になります。この「解析」に相当する行為は実アドレスを常に参照可能な言
語でなければ困難です。ある推理の元にコードを走らせ、少しづつ変化させ
ながらどこでシステムがハングするかを観察する行為だからです。

40 :hidebou:2011/04/13(水) 00:58:28.40
そういう観点から見ると、ことWindowsに関しては「解析」に使えない言語を
複数習得する必要は全く無く、JScriptかVBScriptで十分に思えます。勿論
現状のJScriptかVBScriptで素敵なアプリケーションというのは書けない訳で
分かっていながら中途半端な言語の知識を習得せざるを得ない状況のように
思えます。私の仕事はJScriptかVBScriptで素敵なアプリケーションが実現で
きるようにC++で下支えをすることと表現できるかも知れません。

41 :hidebou:2011/04/13(水) 18:29:28.27
ttp://kuroda.bglb.jp/htabox/tab.zipを更新しました。
表示中ページのタブ右クリックでHTML/XMLを表示する簡易エディタにコード
ページを指定して入出力する機能を追加しました。せっかく整形XMLを作成し
ている訳ですからUTF-8等でも保存できたほうがよかろうという展開です。


42 :hidebou:2011/04/14(木) 05:08:07.43
ttp://kuroda.bglb.jp/htabox/tab.zipを更新しました。
書きすぎている部分をシェイプしてソースコードを整理しました。さっさと
ドキュメントを書いて個人アカウントの方でVectorにアップするつもりです。
名称は「TZ Browser」キャッチは「HTA用タブブラウザ」になるでしょうか。
その後にHTABOX with Editorを公開することになります。正直、開発を続け
られるかの瀬戸際を通り過ぎてしまった感もあるのですが、なんとか電気代
くらいは稼ぎたいと思っておりますのでよろしくお願いします。

43 :hidebou:2011/04/14(木) 19:02:54.65
今日はちょっとスランプな日です。考えがまとまらず前へ進もうとして
自分で自分の足を踏んでいるような日です。100%成功するための秘訣は
成功するまで諦めないことなんだそうです。確かにそれなら失敗という
概念が無いので前向きに生きれるでしょうね。

44 :hidebou:2011/04/14(木) 22:16:28.95
TZ Browserのバイナリを更新しました。ヘルプは書きかけですが遊べると思い
ます。表示ドキュメントのAタグ上の右クリック以外はツールチップ等で動作
を案内していますので分かると思います。スクリプトからのタブ操作はここに
以前書いたとおりなのですが、詳しくはヘルプの完成をお待ちください。
http://kuroda.bglb.jp/htabox/tzbrowser.zip

45 :hidebou:2011/04/15(金) 01:06:45.70
ちょっとだけWindows上のCOMプログラミングについて呟かせてください。
世の中のサンプルコードを眺めているとどうしてそんなコストの高いことを
しているんだろう?と思うことがしばしばあります。代表的なのはイベント
シンクです。私も現在のスタイルに到達する前はイベントを拾うという実験
もしていますが、もともとCOMはスレッドやプロセスを跨いだメッセージ通信
で実現されていますので双方がCOMであればイベントという概念すら必要あり
ません。単にメソッドを公開してコールしてもらうだけだからです。

46 :hidebou:2011/04/15(金) 01:16:22.48
つまりCOM対COMなら単純なのにCOM対非COMをやろうとするからCOMは難しい
という誤解を生んでいると思うのです。COM対COMならC++でもJScriptや
VBScriptでディスパッチオブジェクトを扱うのと何ら変わらないのです。
じゃぁなぜ皆さんがそうしないのか?つまりなぜC++でIDispatch継承クラス
を書かないのか?問題はそこに帰着すると感じています。


47 :hidebou:2011/04/15(金) 01:26:41.68
手前味噌ではありますが ttp://kuroda.bglb.jp/vcpp/index.htm
で最短のディスパッチ継承クラス作成コードを解説しています。会員認証
はどんなメールアドレスでもサーバーが自動返信するアカウントを受信
できれば有効ですので気軽に登録してください。コードを眺めても最初は
なんのことやらと感じるでしょうが、動かしながらあちこち書き換えるうち
にCOMの本質が理解できるのではないかと思います。

48 :デフォルトの名無しさん:2011/04/15(金) 13:57:50.09
震災のどさくさにまぎれて、いまの日本政府がやろうとしていることのひとつ。

【政府調達】韓国ベンチャー企業が、日本政府機関のプロジェクト受注 日本で外国ベンチャー企業がプロジェクトを受注するのは極めて異例
http://toki.2ch.net/test/read.cgi/wildplus/1302842274/

1+1 :影の軍団(第弐拾八期首席卒業生)ρ ★ [] :2011/04/15(金) 13:37:54.21 ID:???
韓国ベンチャー企業のウィズドメインが、日本の新エネルギー・産業技術総合開発機構
(NEDO)の特許情報収集サービス事業を受注した。

大韓貿易投資振興公社(KOTRA)が 14日、明らかにした。

ウィズドメインは昨年下半期(7〜12月期)からKOTRAが運営する東京の
コリアビジネスセンター(KBC)IT支援センターの諮問を得て、
20社が参加した 今回のプロジェクトで受注に成功した。

日本の政府調達市場で外国ベンチャー企業がプロジェクトを受注するのは極めて異例だという。

49 :hidebou:2011/04/15(金) 14:17:05.77
何が国益に結びつくのかは難しい判断だろうと思います。理想は政府機関が
エンジニアを育成して実現することなのですが、私もかつて役人の端くれと
して感じたのは情報処理みたいに日進月歩な世界の勉強をしようとしないん
ですね。そうしなくても飯が食えるし、外注することで民間へ税金を還流し
ているというばかげた発想でいるんです。で入札を国際的に開放すれば海外
の企業が受注するのはある意味しかたのないことだと思います。

もし私が政治に関与できる立場だったら「情報処理」を統括する官庁を作って
自前で開発させますし、いいものができたら他国へ売り込んで外貨を獲得する
という発想で取り組むでしょうね。

50 :hidebou:2011/04/15(金) 14:42:29.58
私が知りえる情報というのは限られている訳ですのであくまでも「私見」な
のですが、この国の状況は将棋で言えば「詰めろ」から「必至」に変化した
と感じています。一度「参りました」というのも選択肢の一つだろうと思い
ます。私が若い方々に言いたいのはことソフトウェアの分野においてもはや
「国」を意識する必要は無く、貴方の労力は世界が評価してくれるというこ
とです。その礎を、せめて礎を置く地ならしをできればというのが私の想い
です。

51 :hidebou:2011/04/15(金) 18:52:36.58
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
細部の調整を行い、ヘルプも8割くらいは書きあがったかなぁっという状態
です。このプロジェクトは単体ファイルとしたいことからヘルプも全部リソ
ース格納していますので700kのサイズですが、本体は100k位の軽量さです。

52 :hidebou:2011/04/15(金) 23:32:22.04
WIN32APIの集積でアプリケーションを書く作業が続いていますが、DOS時代を
経験した者にとっては夢のような環境だとつくづく思います。コンピューター
は今も昔も、そしてこれからも単にディスプレイのピクセルを光らせているだ
けです。プログラマーは任意なピクセルを何色に光らせるのかをコントロール
していると言えます。DOSの時代でもウインドウやボタンを表示させることは
できましたし、気の効いたアプリケーションには必須な要素でもありました。
ただし1ピクセルづつコントロールする必要があります。もし複数のウインドウ
が重なって下になった領域のピクセルデータを保存、復元しなければならない
としたら恐ろしく煩雑な処理を記述するはめになるでしょう。

53 :hidebou:2011/04/15(金) 23:50:07.11
TZ Browserのソースコードは現在57kです。たった57kでメインウインドウ、
タブコントロール、ツールバー、ステータスバー、任意な数のHTMLウインド
ウ任意な数のエディタウインドウとその上のリッチエディットコントロール
を制御できるのですから、感心してしまいます。欲を言えば10年前に今の
心境に到達していなかったのが残念です。私はまだ己の知力が低下してきて
いるとは思いませんが、体力のほうはもはやぼろぼろな状態です。

54 :hidebou:2011/04/16(土) 04:38:08.44
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
恐らくタブコントロールというのはサイズ可変なウインドウではなくダイア
ログ等に置くことを前提としているらしく、ウインドウのサイズを可変する
といやらしくチラついていたのでその対策を施しました。またHTMLウインド
ウのスクロールバーもサイズ可変中は領域外へ表示を逃がしています。


55 :hidebou:2011/04/16(土) 15:58:19.16
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
ボタンスタイルのタブを使っていたのですが、特定の条件下で描画の整合性
が失われますので、悩み抜いたあげく普通のタブ表示に変更しました。
HTMLウインドウのスクロールバーもサイズ変更時はチラチラしますけど隠す
ほどのことでもないという判断から元に戻しました。いずれの課題も書こう
と思えばなんでもありなのですが、余計なことを書きすぎると全体がもっさ
りしますのでご了承ください。

56 :hidebou:2011/04/16(土) 21:25:39.81
サンプルスクリプトを書き始めましたが、例によっていろいろと問題を突きつ
けられます。HTABOXの場合はメインになるHTMLインスタンスが複数という状態
は有り得ませんがこのブラウザはすべてのHTMLインスタンスが主役ですのでよ
り過酷な面があります。過酷さゆえにHTABOXを書きながら「これでいいのか?」
と感じていた部分をきっちりと指摘してくるので大変勉強になります。

57 :hidebou:2011/04/17(日) 04:42:28.25
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
タブで実行中HTMLへのファイルドロップ、ファイル選択ダイアログを追加し
ました。ファイルドロップについてはHTABOXと同等でwindow.onFileDropが
存在すれば引数としてパスが渡されます。今回はまじめにVB用として
Window_onFileDropが存在するかも検査しています。

ファイルコモンダイアログは短めの名前にさせていただいて。
var path = TZB.FileOpenDlg("タイトル", "text\\0*.txt\\0", "c:\\", "*.txt");
var path = TZB.FileSaveDlg("タイトル", "text\\0*.txt\\0", "c:\\", "*.txt");
こんな感じです。上記例のTZBはdialogArgumentsから取得してください。


58 :hidebou:2011/04/17(日) 04:53:51.76
いつもCOMとしてコモンダイアログを提供する場合のスレッドやメッセージの
扱いに苦慮するのですが、このブラウザで採用しているスレッドの設計方法は
当りだったようでHTMLウインドウの再描画を阻害することなくごく当たり前に
ダイアログを移動することができます。HTABOXの方ではもっと込み入った方法
となっていましたのでフィードバックできればより軽量なものにできそうです。

59 :hidebou:2011/04/17(日) 14:00:15.05
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
当然の展開としてフォルダダイアログを追加しました。これもオプション等
の細かいことを考えずに呼び出せるよう引数は少なく設計しました。
var fld = TZB.FolderDlg("Title", "c:\\");
「細かい事をやりたい方はHTABOXで」というすみわけを考えておりますので
TZBのHTMLへ提供すべき機能はこれくらいでいいのではないかと思っています。

60 :hidebou:2011/04/17(日) 17:31:31.95
ちょっと欲が出てText操作を充実させることにしました。ブラウザのコード
表示に使っているエディタウインドウの軽量化版をスクリプトから操作でき
るようにしました。通常リッチエディットの書式設定は煩雑な操作を伴いま
すが、ラップして簡潔なものとしました。このウインドウは非表示で動作で
きます。したがって非表示のままTOM(Text Object Model)を操作すれば任
意なコードページのファイル入出力を行い文字列を取得、保存することが可
能です。追加関数は数個なんですが、ここでは見苦しい解説になりますので
サンプルソース付のβ公開をお待ちください。

61 :hidebou:2011/04/17(日) 21:12:17.75
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
EditDemo.htmをブラウザで開くとデモをご覧になれます。自分で動かしても
感じるのですが、HTMLをWIN32ウインドウで包括することによってHTML特有の
もっさりしたウインドウ構築動作を感じさせないメリットがあるようです。

62 :hidebou:2011/04/17(日) 21:36:27.32
このエディットウインドウはこの仕様のままHTABOXにも追加される予定です。
何らかの連続動作を行っていて多量のログをリアルタイムで表示しなければ
ならないような局面でも威力を発揮すると思います。HTMLの場合setTimeout
等でスタックを開放した再突入を行わなければリアルタイムなinnerTextの
更新、表示はできませんのでこういうのが欲しいと考えていました。

63 :hidebou:2011/04/18(月) 01:45:35.12
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
標準のタブ外観はどれがアクティブなのか分かりにくいので非アクティブな
タブ外観だけをフラットに上書きする処理を行いました。新規ページの初期
サイズを0pxとし、タブに治まる直前のチラつきを抑制しました。

64 :hidebou:2011/04/18(月) 11:40:40.73
エディタウインドウを見ていたら突拍子もないことを思いつきました。こんな
動作が欲しいと書き込むと具体的なコードを生成してくれるエディタです。
いままであらゆるプログラミング言語は実世界の問題を一旦抽象化したコード
という形にしなければなりませんが、そのステップを自動化するんです。

「言語解析」「エディタとサーバーの通信」「モジュールデータベース」
「自身のコードが再利用されても構わない多くのプログラマ」「若干のAI」
そんな要素がそろえば実現できなくもない気がします。

65 :デフォルトの名無しさん:2011/04/18(月) 11:57:11.42
たとえば
2ch 書き込み 保守
と検索すると、2chに書き込みするクラスと、その呼び出し方がダウンロードされて表示されるわけですね。
本当にありがとうございました。

66 :デフォルトの名無しさん:2011/04/18(月) 14:03:45.44
TZ Browser、見た目にこだわっているせいでVista以降で利用するとダサい。
軽量がコンセプトなのだから変に小細工しなくていいのでは……?

もし、見た目にこだわりたいのなら
・クラシック
・XPのLuna
・Vista以降のAero
この3つの環境になじむようにすべきでは……?

67 :hidebou:2011/04/18(月) 14:10:20.58
COM(オートメーション)は「あなたはどんな関数をもっていますか?」を
名前で問い合わせる決まりごとなわけです。もし、仕事の内容で「こういう
モジュールもっていますか?」になれば、あながち夢物語でもない気がする
のですが、勿論現在の私にそれを実現する力量があるわけではありません。
多くのモジュールからのチョイスなのか、もっと抽象化されたモジュールを
若干の自動化で具象化すべきなのかとか、そのへんのイメージすらありません。

68 :hidebou:2011/04/18(月) 15:25:05.34
>>66
Vista以降での外観はまだ確認していませんでした。Lunaではテストしていま
すが、「ダサい」の意味が理解できません。いわゆるテーマに対応した外観
を形成しなさいという意味でしょうか?

69 :hidebou:2011/04/18(月) 15:39:09.63
あらためて表示HTML内に
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
を入れてテストして確認しましたが、きちんと機能するようです。メニューや
タブをオーナー描画でビットマップにしなさいという意味でしょうか?

70 :hidebou:2011/04/18(月) 16:04:34.32
Vistaで実際に表示しています。確かにデモのエディタのメニューはテカテカ
してますけど、TZBのメニューはグレイですね。動作PCのコモンコントロール
バージョンを識別した処理が必要なのかも知れません。貴重なご指摘ありがと
うございました。

71 :デフォルトの名無しさん:2011/04/18(月) 18:31:32.18
>>68
メニューバーやツールバーやタブや右下のツマミがVistaでもクラシックな表示だったので気になりました。
「ダサい」とはそういう意味です。郷に入らば郷に従って欲しいと思います。

今度から具体的に書くようにします。クレーマーみたいで本当にすいませんでした。

72 :hidebou:2011/04/18(月) 18:52:10.49
>>71
私の欠点は「書くのは好きでも動かすのは嫌い」なことなんです。なんで2ch
に独白スレッドを作っているかと言えば、動かないとか、ショボイ場合は容赦
なく指摘されるだろうという目的なんです。今回のご指摘でテーマ、マニフェ
ストに関して本腰を入れて勉強する機会をいただきました。本当に感謝してい
ます。

73 :hidebou:2011/04/18(月) 20:29:21.29
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
マニフェストをリソース格納しコモンコントロールバージョン6に対応しまし
た。

74 :hidebou:2011/04/18(月) 20:43:21.64
貧弱な開発機しかないものですから、Vistaも推奨スペック以下のPCで最終的
な動作確認のためだけに動かしていましたが、あらためて眺めると結構いろい
ろと違うんですね。一番驚いたのが「特大アイコン」です。この大きさの32ビ
ットビットマップでアルファマスク付ならそれだけで1Mb近くになるんじゃない
でしょうか。


75 :hidebou:2011/04/18(月) 23:26:42.29
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。Windows2000
でもエラーとならないよう動的にUxTheme.dllから関数をロードしテーマが
当該アプリケーションで要求されているかを判断して非選択タブの外観変更
を行うようにしました。テーマが適用されている場合は選択、非選択の区別
が明確なので余計な動作は回避しようという意図です。

76 :hidebou:2011/04/19(火) 01:36:49.06
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
タブ上の右クリックメニューに「タブ挿入」を追加しました。
今日もサンプルスクリプトが進展しなかったことを深く反省しています。
でもHTABOX3のリリースに向けて大変有益な情報をいただいた日でした。

77 :hidebou:2011/04/19(火) 02:36:06.74
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
全表示パス又はURLの保存、再現機能にバグがあったので訂正しました。
全タブ情報TZBファイルはメニューの保存だと自動的にフルパスが保存され
ますが、手で書く場合面倒だと思うので、相対パスと判断した場合TZBファイ
ルの親ディレクトリを付加して絶対パスを合成します。URLの場合は絶対パス
で無ければなりませんが、一旦GETしての存在確認では重いので単純に存在を
信じる仕様としています。

78 :片山博文MZ:2011/04/19(火) 09:14:35.19
>>74 特大アイコンはPNG形式で埋め込みできる。

79 :hidebou:2011/04/19(火) 11:12:20.64
>>78
現実にはそういう手法をとるんでしょうね。特大の世界になるとイラストレー
ターとしての才能が試されるし、私にはクールなイラストを書く才能が無いの
で衝撃でした。

80 :hidebou:2011/04/19(火) 18:32:14.83
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
まだ完成までは一息の状態ですがスクリプトからタブをコントロールする部分
の解説とサンプルソースは完成しました。Helpを表示して「タブコントロール」
の項目をご覧になるとこのブラウザの特徴が良く理解できると思います。

81 :hidebou:2011/04/19(火) 21:51:52.55
このブラウザのヘルプはサンプルを即座に実行して、そのソースも確認でき
る造りになっていますが、HTABOX3は更に表示されたソースをその場で編集
して実行できる造りになっています。JScript、VBScript、両者の.NET言語
の4種類をパースして実行します。ただHTABOX3は私にとってフルスイングな
プログラミングとなりましたのでどこか余裕の無いものに感じられていまし
た。例えば見やすく理解しやすい説明を書く余裕が無いという懸念です。

82 :hidebou:2011/04/19(火) 22:03:25.50
じゃあ70%のスイングをして自分のフォームを確かめようというのが今回の
TZBです。今日の午前中までヘルプHTMLの仕様に悩んでいましたが、決定し
てしまえば、HTABOXと比較して機能は多くありませんから半日で概ねの内容
を書き上げることができました。自分で総てを管理しているメリットとして
ヘルプを書きながら、「こういう関数が必要」に気づき、さもあるかのよう
に説明を書いた後に実装することもあります。結局、取り説を書くという作
業は使う側に立った作業でなければなりませんから、その時に心がぎすぎす
していては何も伝わらないものができてしまうと感じています。

83 :hidebou:2011/04/19(火) 22:57:38.02
実はもう一つこのブラウザには意図があって場合によってはオープンソース
にしても構わない設計としています。COMやHTABOXを使わなければHTMLアプリ
ケーションの姿は旧態然としたままなわけですが、私のことを気にかけてく
ださる開発者の方からバイナリ依存のHTAは検査ができないから商品にならな
いというお話を伺ったんです。まぁそう言われれば身も蓋も無い訳ですが、
もし、ソースが公開されていて安全な事が保障されているHTAの機能拡張環
境が存在すればHTAも前へ進むことができるんじゃないかという発想です。

84 :hidebou:2011/04/20(水) 02:49:31.83
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
多分非公式関数扱いなのですが、
TZB.CreateSoundBuffer(location, "test.wav");
TZB.PlaySoundBuffer(0);
をデモするsound.htmとtest.wavが添付されています。
DirectSoundの特徴はWAVバッファを事前に作成し、再生要求に対して即座に
応答することです。デモで使用しているモジュールは全WAVデータを保持しよ
うとします。しかもB級でもオーディオマニアが書いたモジュールですので
16bitステレオPCMのみ対応ですから効果音程度の大きさのファイルで遊んで
ください。

85 :hidebou:2011/04/20(水) 11:27:54.79
いつのまにか引数起動に対応していますので、TZBrowser.exeへターゲット
ファイルのアイコンをドロップするとすべてタブ表示しようとします。
どっさり複数のHTAでも構いませんし、複数パスを記録した拡張子TZBなら
表示順を確実にコントロールできます。DirectSound系モジュールはデモの
効果音再生用の他に長時間録音用、長時間再生用モジュールもありますので
こっそり実装するかも知れません。


86 :hidebou:2011/04/20(水) 14:26:45.24
話題はスレ違いなのですけれど、目という感覚器は数十分の一秒間隔で瞬い
ている画像を常に光っていると勘違いするほど時間にルーズなのですが、耳
という感覚器は時間にシビアです。毎秒340m進行する音波を僅か20cm間隔の
両耳で受信しその時間差とエネルギー差から音源の方向を推定するわけです
から神様にしか創れないほど精巧な器官だと思います。

87 :hidebou:2011/04/20(水) 14:35:29.11
ですから耳がリアリティーを感じるということはある意味映像でのリアリテ
ィーより高度であると言えます。ただじっと目を閉じてその音が作り出す空
間や、イメージを楽しむようなアプリケーションをいつか書きたいと思って
います。

88 :hidebou:2011/04/20(水) 17:57:07.04
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
提供関数等に関するヘルプはほぼ書き終えたと思います。
また、リッチエディットのCOMインターフェース解析結果を付録として掲載
しました。MSWORDでVBAを書いた事のある方ならその構造がそっくりなこと
に気づかれると思います。


89 :hidebou:2011/04/21(木) 17:58:09.79
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
自分の勉強にもなりますしDirectSound系関数も正式な機能として付加する
ことにしました。DirectSound.htmが添付していますのでexeへドロップすると
デモをご覧になれます。まだDirectSoundスレッドの振る舞いを理解しきれて
いない部分があって、意地悪な操作をすると止まったりするかも知れませんが
ご容赦ください。確かDirectXはスクリプト向けCOMサービスもあった気がし
ているのですが、このモジュールは考えうるかぎり軽量に仕上げました。
一般的なコンピューターのSN比はもともとたいしたものではないのですが、
それでもCPU負荷を抑えることでベストなSN比を目指そうという方向性です。

90 :hidebou:2011/04/21(木) 18:13:38.59
DirectSoundも
_COM_SMARTPTR_TYPEDEF(IDirectSound,IID_IDirectSound);
から書き始めると結構見てのとおりな記述ができるのですが、いままでそい
う記述をする方を見たことがありません。以前にも書きましたが、DirectX
の上層にある機能はハード依存しますので苦労の割りに得るものが少ないと
思いますが、低層な部分は今後も有効だと思われますので、機会があったら
最初からCOMとしてDirectXを扱う解説を書いてみたいと思っています。

91 :hidebou:2011/04/21(木) 19:52:20.77
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
ウインドウフォーカスが外れても再生を継続する設定としました。この辺は
目的と、好みにもよりますので将来は選択できるようにしたいと思います。

92 :hidebou:2011/04/21(木) 21:12:01.57
簡潔にサウンド系関数を説明します。3種類のサウンドバッファが存在します
がメソッドは統一しています。比較的小規模なWAVを再生するSoundBufferで
説明します。

var TZB = window.dialogArguments;
var Sound = TZB.CreateSoundBuffer(location, "hoge.wav");

CreateSoundBufferは2つの引数を取ります。第1引数は第2引数に相対パスを
指定する場合locationでなければなりません。第2引数が絶対パスである場合
はnullを指定してください。返却値であるオブジェクトには下記のメソッド
があります。引数や返却値はありませんし、そのまんまの名前なので説明の
必要はないと思います。

Sound.Start(); Sound.Pause(); Sound.ReStart(); Sound.Stop();

93 :hidebou:2011/04/21(木) 21:22:39.69
SoundBufferは一旦全ファイルデータをメモリに保持します。ですから大きな
ファイルを保持するのは不利ですが、一旦読み込めば再生要求へのレスポンス
は俊敏です。MusicBufferは3分割した環状バッファにより大規模なファイル
を部分的に読んで再生します。CaptureBufferも同じく3分割した環状バッファ
により再生中の音をキャプチャしてRAWPCMで保存します。Stop()関数が呼ばれ
た場合、Create時に指定されたファイルへPCMを再編しWAVファイルとして出力
します。

94 :hidebou:2011/04/21(木) 21:32:42.19
WAVの形式はCD規格のPCMのみです。また、現状ではファイルサイズを32ビット
で認識していますので4G以上のファイルでの動作は未定義です。結構WAVデー
タは大きなサイズとなりますので、録音時の一時ファイルを分散させて再編時
に無音を検出し、適切なサイズのファイルを自動生成するというような機能
を追加すべきだろうとは考えています。

95 :hidebou:2011/04/21(木) 21:40:43.63
DirectX全般に言えることですが、ハードウェアが持たない機能をソフトウェ
アでエミュレートしようとします。Draw系なら描画が「もたつく」という結果
になるわけですが、Sound系の場合「ノイズ」に結びつく事があります。です
から、多くのエフェクトを追加してゆこうという気はありませんが、是非こ
れだけはというご要望がありましたら気兼ねなく書き込んでください。

96 :hidebou:2011/04/22(金) 00:17:53.30
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
MusicBufferの中断、再開動作で再生位置が乱れるバグを修正しました。
録音の方は中断すると以降無音ですのでこれから原因を追求したいと思います。


97 :hidebou:2011/04/22(金) 02:14:24.73
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
CaptureBufferの中断、再開を修正しました。録音の場合はバッファ長を短く
設定し、操作と録音の開始、停止タイミングのずれを少なくしました。
あと、ボリュームとバッファが稼動しているかを問い合わせる機能は必須で
すね。欲を言えば一定時間の信号レベルを数値で返してプログレスバーのよう
に表示する手がかりを提供できればいいんですけど、その辺は今後の課題と
いうことで。

98 :hidebou:2011/04/22(金) 05:18:41.39
今までは単にプログラミングの題材としてしかDirectSoundを見ていなかった
のですが、あらためて触ってみるとなかなかよくできています。特にPCMクロ
ックを再生時に可変できるのが素敵です。勿論ハードがそのクロックに対応
していることが条件でしょうが、48KHzならほぼ総てのハードが対応している
のではないでしょうか。だとすれば44.1KHzを伸張しながら補間を加え自分の
アレンジしたより高音質な音楽として再生することが可能です。これが96KHz
なら補間の仕方によっては劇的な変化を期待することもできると思います。

99 :hidebou:2011/04/22(金) 11:28:09.44
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
再生系バッファにステータス取得、クロック設定、左右バランス、ボリューム
機能を実装しました。録音バッファはステータス取得のみとなります。

var Status = Sound.GetStatus();
Sound.SetClock(48000);//48KHz
Sound.SetPan(0); //中央
Sound.SetVolume(0); //減衰なし
のような使い方になります。解説はTZBのリリースをお待ちください。

100 :hidebou:2011/04/22(金) 17:32:43.11
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
自分で作ったWAVを自分で再生できないという初歩的なバグを解消しました。
WAVファイルの構造についてはよくある話だからということで複数のサンプル
を比較検討しなかったのですが、そこに落とし穴があったようです。

101 :hidebou:2011/04/23(土) 02:47:30.63
再生の場合は五月蝿ければメインボリューム絞ってもらえばいいわけですが、
録音のレベル決定(結局再生音量ですけど)のためにはどうしてもdbレベル
をモニターできるウインドウが必要ですから夕方からそれを書いています。
short変数が一秒間に44100*2個流れていてその振幅を検査し、一定間隔で
ウインドウへポストする。こうやって書くとそれだけのことですが、現実は
総力戦の様相を呈してきました。

102 :hidebou:2011/04/23(土) 03:06:16.01
もうすぐ、キーボードのついたコンピューターは珍しい存在になると思いま
す。軽量で携帯が便利なら情報端末として、この大きさのコンピューターは
終焉するでしょう。そこで私はこの大きさのコンピューターだから可能な事
をすこしアピールしたいと考えています。その一つのテーマが無圧縮音源で
す。TZBは簡単で便利なテキストサービスとサウンドサービスを提供する新た
なHTMLアプリケーションのプラットフォームにしたいと考えています。

103 :hidebou:2011/04/23(土) 04:51:30.90
終わってみればTZBのソースも100kを越えていました。HTABOX系はソース書か
ない人にとってみれば「なんのことやら」でしょうし、かといって書かない
人を取り込むほどの魅力はなかったんだと思います。HTABOX3はより洗練され
て直感的なものになりますが、それでも今まで束縛の多い環境で書いていた
からこそHTABOXに魅力を感じるという部類のものだと思います。

TZBは出発点に帰ってHTMLアプリケーションをモダンなスタイルで実行するに
は何が必要か?参入者を引き込むには何が必要か?を自分なりに表現したつも
りです。TZBはシェアとしますが、なんら制約は設けません。大げさな言い方
をすれば「この世界に私がいた証」という意味合いのソフトです。

104 :hidebou:2011/04/23(土) 05:36:10.30
再生系のバッファには再生が終端で終了した場合のコールバック関数をスクリ
プトから登録できるようにしたいと思います。これは簡単なことです。録音系
バッファにはコールバック条件を指定された音圧以下の状態が指定された時間
継続したらにしたいと思います。この両者があることによって完全にスクリプ
トで制御した状態での自動再生、自動録音ができることになります。

105 :hidebou:2011/04/23(土) 19:31:52.98
コールバックを実現するためには結構大技が必要なことに気づきました。
今回は音楽プレイヤーを作っているわけではなく、アプリケーションが必要
とするWAVを遅延なく再生する。同時に発音しても問題が起こらない。最後に
そのWAVを作成するための録音機能を装備している。にとどめて明日のリリー
スを目指したいと思います。

106 :hidebou:2011/04/23(土) 21:17:23.12
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
添付のDiretSound.htmは音圧レベルウインドウを表示するデモです。
ウインドウの位置は細かくスクリプトを書くのが面倒だったので同じ位置に
重なって出現しますが、ご了承ください。

107 :hidebou:2011/04/25(月) 04:59:08.18
リリース前にDirectSoundとマルチメディアAPIの音質に差異が生じるのかを
確認したくて一日を費やしてしまいました。wave...API系はコールバックル
ーチンが無いとまともなことはできないのですが、なんか挙動が変だと思っ
たら、この部分ににはごく限られた関数しか使えないという設計ということ
で笑ってしまいました。参入者を蹴落とす罠にしか思えません。結局付ける
予定ではなかったレベル表示ウインドウを用意してPostMessageすることに
しましたけど、これはこれで一つの分野というか独特の世界ですね。

108 :hidebou:2011/04/25(月) 05:13:32.94
基底で動くディバイスの機序というのはそう違わないと思うのですが、私の
開発機ではマルチメディアAPIの方がメリハリの利いた音にになります。まぁ
耳でどうこう言うよりも波形分析すればそれぞれの特性が見えてくると思うの
ですが、TZBには両方装備する予定ですので皆さんの耳で確かめてください。

109 :hidebou:2011/04/25(月) 20:58:37.77
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
添付されたSound.htmを開いてWAVファイルを再生し、両者の違いを確認して
みてください。尚、録音はファイルを選択した段階で上書きされる仕様に変
更しましたのでご注意ください。

110 :hidebou:2011/04/25(月) 21:57:44.58
1週間くらいで決着するだろうと思っていたタブブラウザ作成に結局2週間を
費やしてしましました。「妥協する」っていうことはイコール「負ける」こ
とだと思っていますし、自分が負けたと判断したようなものを世に出すこと
は恥ずかしくてできませんから、徹底した作りこみをしてしまいます。結果
、書けば書くほど「どうしてこんなことも分からないんだろう」と落ち込む
わけです。特に最近は自分の無能さにほとほと嫌気がさしています。

111 :hidebou:2011/04/26(火) 03:43:36.91
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
音圧ウインドウにピーク表示と、右クリックによるピーク表示リセット機能
を追加しました。

112 :hidebou:2011/04/26(火) 14:01:58.28
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
wave系でファイル終端で終了、再度再生した場合のバグを修正しました。

113 :hidebou:2011/04/26(火) 16:23:44.04
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
波形データモニタリング時にアドレスを踏み外す可能性を排除しました。

114 :hidebou:2011/04/26(火) 18:25:19.25
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
一時停止、及び停止でレベルメータをゼロとするよう変更しました。



115 :hidebou:2011/04/26(火) 19:41:51.94
おまけのつもりで書き始めたサウンド系サービスですが、TZB全体の約半分の
コードはサウンド系サービスが占めることになりました。本当はサウンド系
の取り説を書いていたのですが、子供になったつもりで乱暴に操作すると、
まだまだ弱点が見えたものですから、コーディングに戻ってしまいました。
だいぶコードもすっきりしましたので、いよいよリリースできる状態になっ
たと考えています。

116 :hidebou:2011/04/26(火) 22:34:39.49
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
長時間再生用オブジェクトには再生終了時のコールバック機能を付加しま
した。再生が終わった時点で登録されたスクリプト関数をコールバックし
ます。これで次に演奏したい曲を自動的に選んだりできます。
詳しくは添付Sound.htmのコードをご覧ください。

117 :hidebou:2011/04/27(水) 00:43:32.97
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
録音系のコールバック関数定義が可能となりました。勿論音圧と時間を指定
した自動停止と同時に関数が呼び出されます。平均デシベルと時間0.1秒単位
の時間(最長25秒)を指定し、従前の蓄積音圧平均が指定値を下回った場合
自動停止し、ファイルを完成させ、定義関数を呼び出します。具体的には
添付Sound.htmのコードをご覧ください。

118 :hidebou:2011/04/27(水) 06:07:23.25
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
録音バッファ生成時にレートを指定する事にしました。省略されると、
ハードが対応している全モードを列挙しダイアログ表示します。
対応モードは11.025 kHz, Mono 〜 96 kHz, Stereo, 16-bit です。
添付Sound.htmでは一番下の録音オブジェクトがその動作をします。
ちょっと眠いので中途半端な状態ですが続きは後ほど。

119 :hidebou:2011/04/27(水) 15:49:57.51
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
DirectSoundでもMMAPIでも録音オブジェクト生成時にPCM識別子が0の場合ダ
イアログが表示されキャンセルの場合先頭要素が選択されたものとして動作
する仕様としました。また、8bitモードでの音圧計算を適正化しました。
ちなみに開発機における8bit無音は0x80ではなく0x7fでした。振幅がなければ
いずれの値でも無音となるわけですが、ちょっと悩む原因となりました。


120 :hidebou:2011/04/27(水) 18:34:38.48
プログラミングはほとんどの時間が精神的な消耗戦の様相を呈するのですが、
唯一安らかな時間があります。不安無く動作すると確証したコードを何年か
後に読み返しても理解しやすいように整形して、コメントを付加している時
です。それは長い長い戦いの後のほんのひと時の安息なのですが、やっとTZB
をリリースできるレベルと判断できました。

121 :hidebou:2011/04/27(水) 23:41:55.14
長時間再生テストにD minor Choralを繰り返し聴いています。DirectSoundも
MMAPIもそんなに違いはありません。ただPCは音楽演奏以外のディバイスも稼
動していますから場合によってはバッファ的にクリティカルな状況も発生する
可能性があります。ですから最も重要なポイントはファイル入出力かも知れま
せん。mmioOpen時に適切なバッファサイズを指定する事が結構重要な気がしま
す。

122 :hidebou:2011/04/27(水) 23:50:24.86
このテストでWindows Media Playerはデフォルトの状態でもエフェクトして
再生している事に気づきました。端的に言えばイージーリスニング調に加工
して音を出しています。各楽器には若干残響音が付帯し、音声領域を強調す
るように聞こえます。これは圧縮音源を再生する時に粗を隠す目的だと思わ
れますが、楽器の配置がぼやけて臨場感がスポイルされます。是非PCのジャ
ックをオーディオに繋いでその違いを確かめてください。

123 :hidebou:2011/04/28(木) 00:40:39.72
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
タスクバー上での右クリックで例外が発生するバグを解消しました。

124 :hidebou:2011/04/28(木) 19:20:22.59
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
添付Sound.htmはサウンドサービス全般の機能を確認できるデモです。
5種類総てのバッファでコールバック設定可能としました。Play関数は開始
位置(秒)を引数にとり当該位置から再生するものとしました。録音系の
バッファも同じく引数をとりますが、これは関数の仕様を統一するための
ダミーですから指定秒の無音を作るわけではありません。


125 :hidebou:2011/04/28(木) 20:49:23.61
いままで素直にwaveInGetDevCapsが返す能力がハードの能力だと思っていたの
ですが、試しにに48KHz、96KHzでの録音を実行するとすんなり通ります。もう
数年来使っている低価格ビジネスノートでさえそうなんですから、へたに問い
合わせずに96KHzまで全部選択可能に変更したいと思います。

126 :hidebou:2011/04/28(木) 23:36:34.89
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
是非48kや96kの録音にチャレンジしてみてください。また、レベルメーターに
経過時間を表示するようにしました。この場合のウインドウ更新領域は時間文
字領域のみとし複数起動でもリソース消費を最小限にする努力をしています。

127 :hidebou:2011/04/28(木) 23:49:02.60
総括というと大げさですが、サウンド系プログラミングで感じたことを書き
ます。「ノイズとは何か?」を考えた時機械周期がもたらす定常的な信号と
考えられます。コンピューターはデジタルな動きが基本ですから物事は一定
周期で起ころうとします。プログラマーも普通割り切りやすい数やアクセス
が高速なデータ領域を意識します。しかしそれは結果的に別の周期を作り出
す原因ともなります。周期が存在すれば電圧が変化し結果「ノイズ」を助長
しかねないと推察します。

128 :hidebou:2011/04/28(木) 23:58:40.65
例えばリング状にバッファを形成し何分割かする場合、個々のサイズが等しけ
ればプログラミングは楽ですが、常に一定間隔で何かが起こることになります。
もし、個々のバッファサイズと、ファイル入出力のバッファサイズが整数倍で
両者のフラッシュタイミングが重なるようなことも避けるべきでしょう。要は
デジタルに処理するのではなく、いかに滑らかに処理するかというイメージ
で取り組めばいいプログラムが書けるのではないかと自戒の意味も込めて感じ
ています。

129 :hidebou:2011/04/29(金) 02:51:11.22
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
そろそろ「細かすぎて伝わらない...」の世界なのですが、MMAPI再生の安定
を確かなものにするために読み取り、転送機序を改良しました。DirectSound
はソフトウェア的に何らかのバイアスが効いていて破綻しにくい工夫がなされ
ているようです。ですから手を入れる場所がありません。出来の悪い子ほど
可愛いもので、ついMMAPI系の方を応援してしまいます。

130 :hidebou:2011/04/29(金) 19:03:50.41
プログラムの動作結果は環境に左右されます、ましてやほとんどハードウェア
コールで形成される音楽再生について一概に結論付けるのはよろしくないので
すが、当環境に限って言えば長時間音楽を再生しながら別のタスクで負荷をか
ける状況においてDirectSoundの方が良好な結果を示します。DirectSoundの場
合は長大な単一バッファ上の任意な箇所にイベント発生ポイントを設定できる
のに対し、wave...系は一曲分のバッファを用意できないかぎり異なるアドレス
の切り替えを前提とした動作となるからだと思われます。

131 :hidebou:2011/04/29(金) 19:17:19.18
ですから、もしwave系でループ再生し任意なポイントで負荷無くイベントを
発生させ、システムの制御を奪って当該位置のPCMデータを書き換えれば安定
度を上昇されることは可能かも知れませんが、それはDirextSoundをもう一度
書くという意味の無い行為に思われますので深追いはしないことにします。
したがって両者の位置づけは、特段理由が無い限りDirectSoundを推奨としま
す。TZBで採用しているインターフェースは末尾に数字の無いIDirectSoundで
すからWindows2000以降で動作しない機体は無いだろうと予測します。

132 :hidebou:2011/04/30(土) 00:11:36.17
MSDNにはwaveOutProcの解説として
「関数 EnterCriticalSection、LeaveCriticalSection、midiOutLongMsg、
midiOutShortMsg、OutputDebugString、PostMessage、PostThreadMessage、
SetEvent、timeGetSystemTime、timeGetTime、timeKillEvent および
timeSetEvent を除き、アプリケーションでコールバック関数内からシステム
定義関数を呼び出さないようにしてください。ほかのウェーブ関数を呼び出す
と、デッドロックの原因となります。」
とあるのですが、素直にこれに従うと能動的な処理ができなくなり結果的に
システムのメッセージ伝達がビジーな状態となると音が一瞬途切れるという
ストーリーのようです。上記解説を方向をしめす指針と解釈すればMMAPIでの
動作は劇的に安定するというのが落ちのようです。

133 :hidebou:2011/04/30(土) 00:47:53.54
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
恐らくwaveOutProcは自動的に他の動作よりシステムに近い(優先された)
動作と認識されているから、上記解説のような慎重さを要求するんだと思い
ます。従来はPostMessage処理でCPU稼働率2〜3%でしたが、直接処理にすると
3%〜5%程度に上昇することからそう感じています。とてもすっきりしました。

134 :hidebou:2011/04/30(土) 02:19:51.22
プログラムのコーディングというのは百人百様でいいと思うのですが、どう
もファイルの拡張子だけcppで内容はcというソースコードばかり目に付きま
す。これには理由があって、WIN32APIを主に扱うとシステムからコールバッ
クしてもらいたい局面が多々発生し、そのためには静的なアドレスを準備し
なければならないからです。例えばウインドウのプロシージャがそうです。
クラスメンバのように生成しなければアドレスが決定しない要素には書けな
いわけです。結果プロシージャからはクラスメンバにアクセスできないとい
う縛りが発生してしまいます。

135 :hidebou:2011/04/30(土) 02:27:03.99
でもこの問題はとても単純に解決できます。ウインドウプロシージャを例に
考えれば問題は「HWNDは自身のクラスアドレスを知らない」を解決する機構
を準備すればいいのです。プログラムの冒頭に高速なハッシュクラスを置き
静的なプロシージャ内でそのハッシュへHWNDに対応するクラスアドレスを照
会し、得られたアドレスを当該クラス型にキャストしてクラスメンバとして
存在するプロシージャを呼び出せばいいのです。

136 :hidebou:2011/04/30(土) 02:35:31.22
これと同じことをSetWindowLong、GetWindowLongのGWL_USERDATA領域を使って
ハッシュ無しに実現することもできますが、自身が設計登録したウインドウで
なければGWL_USERDATA領域が真に使用されていないのかを確認することはでき
ませんからお勧めできません。特に込み入ったコントロールほどGWL_USERDATA
を使用している可能性が高くなります。例えば私の得意分野であるHTML系がそ
れに該当します。

137 :hidebou:2011/04/30(土) 02:43:56.26
このちょっとした機構はC++によるWIN32APIプログラミングを劇的に可読性
の高いものにします。だいいちファイルスコープのプロシージャに動作が記
述されているクラスを量産したら別インスタンス同士の競合で早晩クラッシ
ュすることになりますが、クラスメンバとしてプロシージャを持てばどんな
に量産されても競合は発生しませんから、JScriptかVBScriptのように記述
できるのです。

138 :hidebou:2011/04/30(土) 03:01:50.85
COMそしてハッシュを用意したシステムコールバックのクラス内引き込みとい
う2つの概念を導入すればCでは到底なしえない、又はCでは到底管理できない
複雑さの仕事をとても単純な記述で処理することができます。しかもそれに
要するオーバーヘッドは極めて小さなものになります。せっかく先人達の苦
労を元に進化したCPPコンパイラを使うことができるわけですからC的C++では
なくC++だから可能というコードを書きたいものです。

139 :hidebou:2011/04/30(土) 06:05:48.13
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
録音モード選択ダイアログ、ドロップダウンリストの残像が残る問題への
対策を施しました。

140 :hidebou:2011/05/01(日) 00:01:20.37
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
低水準wave系にも静的バッファを新設しDirectSound系と対称な構成としました。
これに伴い生成関数の名称を変更しました。
TZB.CreateDirectSound(location, path);
TZB.CreateDirectMusic(location, path);
TZB.CreateDirectCapture(location, path, pcmtype);
TZB.CreateWaveSound(location, path);
TZB.CreateWaveMusic(location, path);
TZB.CreateWaveCapture(location, path, pcmtype);

141 :hidebou:2011/05/01(日) 16:27:10.15
どうも48kや96kで低水準系APIの動作が不安定なんで悩んでいます。ストーリ
ーとしてはあくまでwaveOutGetDevCaps、waveInGetDevCapsが報告してこない
モードは使えないとして切り捨てるべきなんでしょうけど、DirectSound系で
は何ら問題なく処理するものですから、書き方によっては何とかなるんじゃ
ないかと思ってしまいます。


142 :hidebou:2011/05/01(日) 22:21:24.93
今日は実に憂鬱な日でした。結果的に低水準マルチメディアAPIをプロジェク
トから除外する選択をしました。DirectSoundで不可能な機能を今のところ見
出せませんし、私のモジュールはCOM系のメッセージが飛び交っていますので
その辺と相性が悪いという事にして前に進みたいと思います。99%動きそうで
1%だめみたいな動きをされると一番疲れます。

143 :hidebou:2011/05/01(日) 23:15:35.99
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
サウンドサービスはDirectSoundエンジンのみとなりました。一時停止、再開
時の動作を適正化しました。録音終了直前バッファを救済して保存するように
しました。各サウンドバッファの生成関数名を変更しました。
TZB.CreateSoundBuffer(location, path);
TZB.CreateMusicBuffer(location, path);
TZB.CreateCaptureBuffer(location, path, pcmtype);

144 :hidebou:2011/05/02(月) 00:40:33.98
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
DirectSound初期化時にプライマリバッファへ96k,48k,44.1kの順で可能であ
ればモードを変更する要求を出すようにしました。環境によっては音質が向
上するかもしれません。

145 :hidebou:2011/05/02(月) 01:17:57.50
プライマリのレートを上げる努力をしたからだと思いますが、今まで気になっ
ていた時間軸方向の揺らぎも無くなり、きちっと芯のある音になったと感じま
す。メディアプレイヤーと聴き分けると以前にもましてメディアプレイヤーが
エコーをかけて再生していることが分かります。ぜひ器楽曲や声楽曲を聴き比
べてください。96K録音も単純に波形を見た限りは44.1KよりSN比が向上するよ
うです。ファイルサイズはさすがに大きくなりますが、退役したノートをクリ
ーンインストールして96K再生プレイヤーにするのも素敵だと思います。

146 :hidebou:2011/05/02(月) 21:42:37.66
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
サウンドオブジェクト生成は引数無しで行い、各オブジェクトにOpen関数を
設けることでインスタンス同一のまま再生、録音ファイルを変更可能としま
した。またSeek関数、Seekウインドウの表示、を追加しました。Seekウイン
ドウは関数呼び出しでの表示と、レベルウインドウの右クリックメニューか
らの表示が可能としました。詳しくはサンプルHTMLソースをご覧ください。

147 :hidebou:2011/05/02(月) 21:50:32.82
対称ファイルの選択、開始、一時停止、再開、停止、停止時コールバック、
音圧レベル確認ウインドウ、再生位置のシークと操作ウインドウ。
以上の動作をスクリプトからコントロールできますので自動録音、自動再生
を目的としたツールなら十分な機能だと考えています。ボリュームと左右バ
ランス、動作中ステータスの関数も実装していますが解説はドキュメントの
完成をお待ちください。

148 :hidebou:2011/05/02(月) 22:10:38.26
録音PCMコード指定部分をサンプルスクリプトに記載するのを忘れていました。
まもなく録音も動作するサンプルに差し替えますのでご容赦ください。

149 :hidebou:2011/05/02(月) 22:27:22.78
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
Open関数の最終引数はPCMの形式を指定する数値です。再生の場合はファイル
の形式となりますので0を指定してください。録音の場合0はダイアログ表示
と解釈します。引数として指定する場合の具体的数値は下記のとおりです。

0x00000001 /* 11.025 kHz, Mono, 8-bit */
0x00000002 /* 11.025 kHz, Stereo, 8-bit */
0x00000004 /* 11.025 kHz, Mono, 16-bit */
0x00000008 /* 11.025 kHz, Stereo, 16-bit */
0x00000010 /* 22.05 kHz, Mono, 8-bit */
0x00000020 /* 22.05 kHz, Stereo, 8-bit */
0x00000040 /* 22.05 kHz, Mono, 16-bit */
0x00000080 /* 22.05 kHz, Stereo, 16-bit */
0x00000100 /* 44.1 kHz, Mono, 8-bit */
0x00000200 /* 44.1 kHz, Stereo, 8-bit */
0x00000400 /* 44.1 kHz, Mono, 16-bit */
0x00000800 /* 44.1 kHz, Stereo, 16-bit */
0x00001000 /* 48 kHz, Mono, 8-bit */
0x00002000 /* 48 kHz, Stereo, 8-bit */
0x00004000 /* 48 kHz, Mono, 16-bit */
0x00008000 /* 48 kHz, Stereo, 16-bit */
0x00010000 /* 96 kHz, Mono, 8-bit */
0x00020000 /* 96 kHz, Stereo, 8-bit */
0x00040000 /* 96 kHz, Mono, 16-bit */
0x00080000 /* 96 kHz, Stereo, 16-bit */



150 :hidebou:2011/05/03(火) 00:01:17.39
ttp://kuroda.bglb.jp/htabox/tzbrowser.zipを更新しました。
ファイルを変更して再生した場合、シークウインドウ楽曲時間が従前のまま
だったバグを修正しました。

151 :hidebou:2011/05/03(火) 04:17:59.79
マルチメディア低水準APIの名誉挽回のためにピュアAPIなモジュールを書いた
のですが、MSDNどおりでは音がぶつ切り状態なものの、MSDN無視な書き方を
するとTZB環境内での気まぐれな動作が嘘のように安定した動作をします。
元々メッセージでハードと交信しているようなのでIDispatch継承クラス中で
は何らかの衝突が発生したと考えられます。

152 :hidebou:2011/05/05(木) 05:17:26.71
TZBrowser手法の可能性を試す意味と低水準マルチメディアAPIとCOMスタイル
プログラミングの親和性を確認する意味で書きかけですがWAVEプレイヤーを
公開します。DirectSoundに比べややデリケートな部分がありますので、音質
重視な方はレベルメーターを停止できますから試してください。これを書きな
がら私のやりたいことってこういうことだったんだと改めて感じました。
ttp://kuroda.bglb.jp/htabox/wave.zip


153 :hidebou:2011/05/05(木) 05:25:52.44
多分私の書いたアプリケーションは他の方が書くものより外観がそっけない
ものになると思います。勿論、生涯に1本2本の作品なら性能とは関りの無い
外観にも十分時間を割くべきでしょう。しかし、私が考えるソフトウェアの
生産サイクルは3日であり、ドキュメントも含めて1週間でリリースするため
の手法を目指しているんです。1年に52本アプリケーションを完成できる手法
がHTABOXでありTZBrowserでありたいと考えています。

154 :hidebou:2011/05/05(木) 06:06:29.03
例えばこのプレイヤーは表示画面のレイアウトを簡略化するためにHTMLを使っ
ていますが、ほとんどC++で書かれています。その長さは約2000行です。でも
肝心の音を出すエンジンはほんの60行です。この60行を使ってもらうウインド
ウやボタンの為に他の1940行があることになります。もしTZBで今回使ったコン
トロールをHTMLへ埋め込めるようになれば、30行程度のHTMLとスクリプトで
同等のアプリケーションを提供できるでしょう。それが私の意図するところ
です。

155 :hidebou:2011/05/05(木) 14:03:01.10
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
シークバーで移動した場合に停止する可能性を排除しました。低水準APIの
メリットの一つがこのシークです。任意なポイントへ自由に移動できます。
私が何か気づいていない事があるのかも知れませんが、DirectSoundは何故
かバッファ長単位でしか移動できません。つまり2秒のバッファで演奏を開
始した場合偶数秒への移動は問題ないのですが、奇数秒のデータをバッファ
先頭に入れて演奏すると破綻します。DirectSoundが低水準APIより安定して
いる理由はそういった先回りした処理があるからだと考えられます。


156 :hidebou:2011/05/06(金) 04:43:45.58
HTABOX3を完成させるにあたり、一つ何悩んでいたことが解決しました。SPY++
でHTMLウインドウを探ると分かるのですが、ドキュメントのスクロールバーは
通常のコントロールではありません。HTABOX3ではドキュメント上に各種コント
ロールを乗せますが、このスクロールバーより前面に出てしまいます。これは
前述のスクロールバーがドキュメントの子でない以上Zオーダーの問題ではなく、
親の下に子はもぐりこめないという根源的な要因を生み出します。じゃあディ
バイスコンテキストへ領域制限かけて重複を回避すればという発想はあったの
ですが、頭悪いもので今まで成功しませんでした。これで本当に自由な位置、
レイアウトで各種コントロールをHTML上に配置することができ、HTMLの特徴で
ある大きなページでのスクロールを阻害することもありません。

157 :hidebou:2011/05/06(金) 05:17:46.32
今回TZBを書いて気が付いたのですが、アプリケーションは3つの局面に分けて
考えると設計しやすい気がします。一つは「取り説」のような静的局面。もう
一つは「設定」のようなファイル入出力をメインとした局面、最後に本来の機
能を操作するための局面です。TZBはまさしくその3ページをすばやく切り替え
ることができるわけですので極めて直感的な操作を促せると同時に、設計しや
すいというメリットもあります。

158 :デフォルトの名無しさん:2011/05/06(金) 16:08:13.70
TZBrowserについて、
ウインドウ名は
アクティブなタブのタイトル - TZ Browser
としたほうが良いのではないかなと思いました。
コンセプトのシンプルに反するようであれば別に現状のままでも良いかと思いますが

159 :hidebou:2011/05/06(金) 20:41:33.25
おっしゃるとおりだと思います。TZ Browserはあくまで裏方ですので冒頭の
タブに存在するページタイトルとか、タイトルを設定する関数とか、何らか
の手段を提供すべきだと思います。大変有益なご指摘ありがとうございます。

160 :hidebou:2011/05/06(金) 20:51:25.73
44.1Kのデータをウインドウズ標準のPCMドライバで48Kや96Kにコンバートし
ながら再生するとどうなるのかという避けては通れない課題を検証してみま
した。結果は「音が悪くなる」でした。弦楽器なんかは明らかに付帯音がま
とわりついて、聴くに耐えない状態となりました。いかんせんハード依存な
部分がありますからこの開発機ではという注釈が付きますが、元々無いデー
タを補間してもいい結果が得られないというのはありそうな話です。

161 :hidebou:2011/05/07(土) 01:01:49.64
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
11Kから96Kまでモードを選べるレコーダーも実装しました。このプログラム
は沢山の事を教えてくれました。HTABOXもTZBもある程度大きくなったソース
では根本に関るようなな実験や検証をやる勇気が無くなってしまうものですか
ら、喉に刺さった棘のような想いがあったのですが、それを解消できたと思い
ます。この再生、録音ソフトはあえて低水準APIを使っています。結果的にTZB
に搭載されなかった低水準APIへのレクイエムの意味もあります。ぜひ各種モー
ドで録音して、その音色の違いを比較してください。

162 :hidebou:2011/05/07(土) 02:38:57.04
もういじるのはやめにして、このプレイヤーで音楽を聴いてますが、思った
よりも安定しているので自分でも驚いています。いつも作っていると忘れる
事なのですが、作成途中のアプリケーションは99%途中で強制終了させられて
書き換えられる運命なのですが、それを繰り返すことでコンピューター自体
にストレスが蓄積するということは十分考えられることです。ですから私は
低水準APIを過小評価してしまったのかも知れません。

163 :hidebou:2011/05/07(土) 05:20:11.85
このプレイヤーに動作を文字通りプログラミングできるエディタを付けよう
と考えています。いわゆる開発言語によるプログラミングでは無しにPlay
とかStopとかWaitとかの単純な命令を前面にアピールして、コンピューター
の動作を事前に予約する楽しさ、便利さから本格的なプログラミングへの
導入ができればと考えています。ここをご覧になっている方々はすでにプ
ログラミングの楽しさを知っているわけですが、そういう人って全体の1%
にも満たないんじゃないかと感じています。

164 :hidebou:2011/05/07(土) 22:11:49.51
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
テキストエディタウインドウを追加しました。このエディタ上のパスが連続
再生の対象となります。ウインドウ上の右クリックで表示されるメニューか
ら先頭行、カーソル位置からの再生を選択できます。また、多くの場合、WAV
ファイルは長い名前でしかも奥まった位置にある場合が多いことからこのメ
ニューから複数選択可能なファイルダイアログ、フォルダダイアログを表示
し、選択されたWAVファイルパスを一斉にエディタへ送り込む事ができます。

エディタで作成した再生リストは同じく右クリックのメニューから保存、呼
び出しが可能です。これで、何かをしながらBGMを流す用途にも使えます。

165 :hidebou:2011/05/08(日) 01:34:15.53
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました
リスト最終要素以降に改行が無い場合、当該要素を繰り返し再生する部分を修
正しました。プレイヤー、レコーダーで現在の操作対象ファイルパスを表示す
るようにしました。

166 :hidebou:2011/05/08(日) 02:49:22.86
>>132
のMSDNが意図することがおぼろげながら理解できました。waveOutProcを定義
した(つまりwaveOutOpenを実行した)スレッドと関連の無いスレッドへコー
ルバック関数内からSendMessageすると重篤なフリーズに陥ります。今回はま
さしくコールバックが演奏終了と判断した場合に、無関係な演奏リストウイン
ドウへ情報を伝える必要がありましたので、その事実を体験することができま
した。その場合PostMessageにしてトリガーだけを引き情報の伝達手段を別途
用意すべきというのがMSDNの言いたいことだろうと思います。

167 :hidebou:2011/05/08(日) 19:46:37.72
少ないビットレートの録音が逆にだめなことに気づきました。TZB環境では
低水準関数がヒープに確保した領域にアクセスできないという状態を経験し
たのでまったく別の設計とし、96,48,44の16ビットステレオでの動作しか確
認していなかったものですから足元をすくわれた感があります。これが機種
依存な動作でないとすれば録音時は96でサンプリングして任意なレートとチ
ャンネルへダウンコンバートしてファイル保存するというのが賢いかも知れ
ません。

168 :hidebou:2011/05/08(日) 23:11:25.55
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。レコーダーは自動
的に無音を検出すると当初のファイル末尾に000〜999を付加したファイルを
自動生成します。音圧、無音秒数、最短ファイルサイズはレコーダーの操作
ウインドウで設定できます。メモリ領域問題で半日悩んでしまいましたが、
結局一番無難な対策としてスタックサイズを指定して要求サイズをローカル
に確保ということになりました。

169 :hidebou:2011/05/09(月) 00:56:26.55
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
実際にストリーミングラジオを録音して細部の見直しを行いました。停止
音圧は左右平均としていましたが、いずれか大なる方を採用することにし
ました。再生シークバーが敏感すぎてフリーズする可能性を排除しました。


170 :hidebou:2011/05/09(月) 03:37:58.37
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
バッファサイズをやや縮小し、演奏リスト作成時のファイルダイアログが表示
されないことへの対応を行いました。

171 :hidebou:2011/05/09(月) 22:26:18.79
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
プレイヤーウインドウから単にFolderを選択すると当該ディレクトリのWAVE
ファイルを演奏リストととし、先頭から再生を開始するボタンを追加しまし
た。また、演奏リストのキャレットとマウスポインターを整合させました。

172 :hidebou:2011/05/10(火) 02:45:09.54
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
一応アイコン等を追加してアプリケーションとしての体裁を整えました。
名前はPure PCM Playerですから「P3-A01」とでもしましょうか。ボリューム
さえ操作しようとしないシンプルさですので、最も純粋にデータを再生する
ソフトの一つになろうかと思います。

173 :hidebou:2011/05/10(火) 05:38:11.26
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
ステータスバーに録音中ファイルに関するステータスを追加しました。
尚、レベルメーターのhideは音質を重視する目的で総てのWM_TIMERを停止し
ますので、このステータスも非表示となりますが、これは仕様です。

174 :hidebou:2011/05/10(火) 07:56:08.55
ttp://kuroda.bglb.jp/htabox/wave.zipを更新しました。
プレイヤーウインドウからフォルダ一括再生を可能にしたことにより楽曲の
移動を[Prev][Next]で同ウインドウから可能としました。また、移動要求が
重複処理され、フリーズの原因となっていた部分を修正しました。

175 :hidebou:2011/05/10(火) 20:10:37.12
今日はVC++のリソース管理について勉強する日になりました。私の書き方だと
環境が割り振ってくるリソースIDがすごく邪魔なのですが、Visual Studioを
改めて見てみると文字列IDに置き換えても問題が無いことに今日気づきました。
つまり、取り説HTMLがリソース格納される時数値IDの場合src="img/101"とか
後日編集するときに混乱が必至な書き方しかできないわけですが、文字列表現
IDならsrc="img/hoge.bmp"と普通に書けるわけです。で、これを環境からいち
いち文字列IDに変更するよりも直接リソーススクリプトを編集して画像をどん
どん足せるというじつに当たり前な事を今日まで知りませんでした。これでヘ
ルプドキュメントの作業効率が格段にアップすることになりました。

176 :hidebou:2011/05/10(火) 22:38:35.69
http://kuroda.bglb.jp/htabox/p3a01.zip
にファイル名を変更しました。ヘルプ書きかけですが、無いよりは遊べると
思います。


177 :hidebou:2011/05/11(水) 05:42:23.02
TZB環境のデバッグについて深く考えていないことに気づきました。alert()
があれば十分という上級者でなければ、やはりエラーの原因となった部分の
変数値を確認できるべきでしょうから、対策を考えています。今考えている
ことはHTABOXの逆をやろうということです。wscript.exeを子プロセス起動
してHTMLスクリプトエンジンの代行をさせることができないかを検証しなけ
ればなりません。多分この場合のオブジェクトはプロセス境界を突破できる
気がします。

178 :hidebou:2011/05/11(水) 12:31:44.80
プレイヤーはVistaで録音時にいやな固まり方をすることを確認しました。
結局DirectSound?になる可能性もありますが、対策を講じてみます。

179 :hidebou:2011/05/11(水) 14:41:51.55
いろいろやると動いたり、同じ条件でも動かなかったりと、言ってみれば
最悪な状態ですね。頭の悪い私にはとても要因を特定できそうにありません。
再生の方はいたって元気なので切り捨てるのは実にもったいない気もします
が、ここは潔く撤退してDirectSoundエンジンに切り替える決断をしました。
一旦バイナリの公開を中止します。

180 :hidebou:2011/05/11(水) 16:33:26.46
ttp://kuroda.bglb.jp/htabox/p3a01.zip
を更新しました。再生エンジンはシークが自由なメリットを生かして低水準
なままとし、録音側エンジンをDirectSoundに変更しました。結局いいとこ
取りな感じになりました。


181 :hidebou:2011/05/11(水) 17:33:35.08
Vistaでの再生、録音動作を確認しました。Vistaは最終テストでしか触らない
ものですから、録音側ディバイスが見つからなくて一度泣き、テスト機のSN比
があまりに悪いことにもう一度泣きました。Vistaは各アプリケーション毎の
ボリュームを管理しようとしているようですね。

182 :hidebou:2011/05/11(水) 20:16:40.79
ttp://kuroda.bglb.jp/htabox/p3a01.zip
P3-A01をリリースしました。スレッド的には異質な存在ですが、音楽好きな
方なら、お役に立てるソフトになったのではないかと思います。一応シェア
という形ですが、公開されているバイナリになんら機能制限はございません。
動作させてお気づきの点がございましたら、Helpに記載したアドレスまで
ご連絡いただければ迅速に対応させていただきます。

183 :hidebou:2011/05/12(木) 07:47:41.80
TZBのデバッグモード原型実験はなんとか成功したようです。wscript.exeでは
なく、非表示mshta.exeをデバッグ時の仮想母艦とすることでdebugger;ステー
トメントでの停止、IDE環境での変数参照を可能にできそうです。今だからこう
いった事をコーディングできますが、すこし前の私なら無理だろうと諦めるほ
ど内部でやっていることはテクニカルです。母艦mshta.exeは必ず別プロセス
で動作することになる訳ですから。

184 :hidebou:2011/05/12(木) 08:03:36.09
TZBにしてもHTABOXにしても拡張の基礎は自プロセス内で全てをコントロー
ルすることです。これ無しには従来どおりCOMの登録とActiveXObject呼び出
しでしかHTMLを拡張することはできません。従来型の拡張はDLLでしか許され
ませんので、おのずと従属的なものになり制約が多いものとなります。

TZB、HTABOXはHTMLインスタンスを自プロセスに生成し、これを単なるWIN32
ウインドウとして扱います。これによりあらゆる拡張をAPIレベルのスピード
で行うことができますが、スクリプトデバッガに対しては応答しません。
なぜHTABOXがJS、VBS起動になったのかを振り返れば、そうしないとデバッグ
できないからという単純な理由です。

185 :hidebou:2011/05/12(木) 17:46:52.08
そういえばIE9はどうなっているんだろうと確認してみました。MSHTML.DLLを
眺めるかぎりではさほど大きな変化は無いようです。MSHTA.EXEも存在します。
ただ、そのサイズにびっくりしました。Vista32bit版のmshta.exeは僅か12kし
かありません。これは歴代のIEのなかでも最小サイズだと思います。

186 :hidebou:2011/05/12(木) 19:07:25.42
TZBデバッグモードの動作機序が正しい選択だったことを確認できました。
別プロセスMSHTA.EXEがダイアログの生成要求を受けてから表示されるまで
一瞬のタイムラグがありますが、例え個人で使用するツールといえども、不
具合を潰す作業は永遠と続くと思われますので、現実にはこのデバッグモー
ドがメインの動作環境になろうかと思います。ただし今回フックDLLは書きた
くないのでHTML上の右クリックによるハイパーリンク動作だけはリリースモ
ードでしか機能しないという仕様になりそうです。

187 :hidebou:2011/05/12(木) 20:24:46.29
デバッグ動作であるか否かを明確にする意味でもフックDLLがあった方がいい
ように思いはじめました。つまりTZBrowser.exeの傍らにDebug.dllが存在す
ればデバッグ動作であり、無ければリリース動作というルールにすれば間違
ってデバッグモードのアプリケーションを配布することの防止にもつながる
でしょうし、書いてみることにします。フックDLLを起点としたCOM呼び返し
というのは今まで書いたことが無いのですが理論的には問題ないと考えます。

188 :hidebou:2011/05/12(木) 23:41:13.96
実際にやってみるとフックDLL中からのディスパッチ呼び出しというのは実現
が難しいのかも知れません。相手側プロセスのインスタンスと通信させようと
しても蹴られるように見えます。今回実現したいことは単にどこが右クリック
されたかだけですので、おとなしく共有セグメントとイベントハンドルで対処
するしかないように思われます。

189 :hidebou:2011/05/13(金) 03:09:48.77
どうも納得がゆかなくてDLLのコードを何度も書き換えているのですが、MSDN
どおりだとダメでその逆をやると成功します。過去の経験から言ってこういう
状態は「危うい」ですね。自分の環境でだけ動く可能性が高まる気がします。
もうひと粘りしてみますが、デバッグモードではファイルドロップと右クリッ
ク無しというのも選択肢のひとつかも、と思い始めています。

190 :hidebou:2011/05/13(金) 03:53:54.84
デバッグとリリースで機能が違うというのも美しくないのですが、結構根の
深い原因があると思われますので、課題として認識したいと思います。まぁ
ファイルドロップというのはアナーキーな手法ですし、ハイパーリンクの右
クリックも提供するアプリケーションのナビゲート手法として使うことは無
いでしょうから括弧書きがついた機能にしたいと思います。それより実行時
アイコンとタイトルの設定関数を装備してとっとと仕上げたいと思います。

191 :hidebou:2011/05/13(金) 16:34:21.83
最終的なデバッグ仕様を決定しました。TZB.EXEは実行時自身のディレクトリ
にDEBUG.HTAの存在を検査します。存在した場合確認のメッセージボックスを
表示してデバッグモードで動作します。全てのタブ内HTMLは内部的に前述の
非表示HTAの子として通常に生成されますのでMSEやVisualStudioがデバッガ
として登録してあればエラーの発生で自動的に起動します。DEBUG.HTAは空の
ファイルを想定していますが、何か記述してデバッグ動作をカスタマイズして
も面白いかも知れません。

192 :hidebou:2011/05/13(金) 16:53:35.75
致命的な説明不足を犯していることに気づきました。このデバッグモードは
TZBのEXE内部へHTMLをリソース格納した場合のデバッグをサポートするもの
ですから、必要とされるのはまだ先の話でした。通常に引数で与えたHTMLは
当然の事ながら普通にデバッグできます。格納してあるヘルプ内でわざとエ
ラーを発生させた時に、デバッガが起動しないのでその対策を講じたのです
が、いつの間にやら通常デバッグだと思い込んでいました。そろそろ私の頭
も限界なのかも知れません。

193 :hidebou:2011/05/13(金) 23:00:46.04
P3のノウハウをTZBにフィードバックして調整を行っています。自動録音停止
には、最低秒数引数が追加されます。TZBの場合はあくまでもプログラミング
の材料ですので、自動停止後の作成ファイル名はご自身で管理していただきま
す。あと音圧ウインドウを縦横に選択できる引数も追加する予定です。

194 :hidebou:2011/05/14(土) 00:53:14.54
http://kuroda.bglb.jp/htabox/tzb.zip
を更新しました。ダウンロードURLが変更になりました。TZBrowserはTZB.exe
で配布される予定です。添付Sound.htmの最上部のボタンがタイトルとアイコン
の変更関数デモです。SetIconは第一引数location, 第二引数BMP、第三引数マス
ク(BGR)です。このBMPは各種色深度に対応していますが、最終的にWindow付属の
Paintで読んで保存すると確実にWindow純正のBMPとなるようです。

195 :hidebou:2011/05/14(土) 01:36:47.87
ttp://kuroda.bglb.jp/htabox/tzb.zip
を更新しました。録音自動停止最低秒数設定が可能となりました。
TZBでタブコントロールとHTMLアプリケーションの可能性を勉強して1ヶ月ほど
になります。HTABOX3は3分割可変ウインドウという書いてる側もややこしいし、
きっと使う側もそうだろうという状態に陥っていたのですが、スマートな解決
策を見出せたと思います。私は極めて横着な人間ですから、ヘルプが別窓だと
いうだけで見る気がしないんです。かといって同じ窓でもエディタの邪魔にな
る訳ですから、この可変サイズウインドウでのタブコントロールは私にとって
今後全てのアプリケーションの雛形になる素敵なプレゼントでした。

196 :hidebou:2011/05/14(土) 01:54:03.62
TZBはちょっとドキュメントをまじめに書けば終了します。頭の中はHTABOX3
に切り替わってきました。現状のプロトでは各コモンコントロールがメイン
ウインドウに固着してしまっているので、例えばTreeやListを複数表現した
くてもできません。P3を書いていてそれを解決する抽象化イメージが浮かび
ました。食うや食わずの状態ですが、こうしてどこに痛みを感じるわけでも
なく前に進むモジュールを考えられることに感謝しています。

197 :hidebou:2011/05/14(土) 09:06:31.25
今日もいつの間にかあたりが明るくなっていました。HTMLウインドウ上の
各種コントロールをCOMコンポーネントとして任意な数配置できるシステム
の抽象部分を書き上げました。そんなこと無理だろうと思っていたのですが
このシステムではHTMLウインドウとコントロールがウインドウメッセージで
連携します。そのコントロールが何であるかに関らず、指定されたエレメン
ト位置を推測してスクロールに追従します。勿論スクロールバーの表示を阻
害することもありません。HTABOX3ではこのシステムの威力をお見せできると
思います。

198 :デフォルトの名無しさん:2011/05/14(土) 16:47:42.06
> qtjs windows版
> ttp://www.vector.co.jp/soft/winnt/prog/se490867.html
> JavaScript実行環境 プログラミング言語Qtの機能をバインド済み スクリプトでGUIアプリケーション作成可

JavaScriptとC++でGUIという点に似たものを感じてメモ

199 :hidebou:2011/05/14(土) 18:49:01.37
>>198
情報をありがとうございます。
ttp://kuroda.bglb.jp/htabox/tzb.zip
を更新しました。添付するSound.htmは従来別ウインドウだったレベル、シーク
をHTMLエレメント上に出現させる驚愕のデモとなっています。これで思い残す
ことなく「何でもあり」な状態を実現できたと感じています。諦めずに勉強を
続けてきてよかったと感じています。



200 :hidebou:2011/05/14(土) 18:56:08.43
見た目は驚愕なんですが肝心のSeekバーで移動できてませんね。ちょっと修正
が必要なようです。

201 :hidebou:2011/05/14(土) 20:22:01.96
LevelやSeekの表示要求を二重に許していたりする細かな修正点がいくつかあ
ります。P3を書く以前でTZBの開発は停止していましたので、今になって眺め
るとこなれていない部分が散見されます。小規模な手術を行ってクラス相互
の依存関係を修正します。


202 :hidebou:2011/05/14(土) 21:22:21.30
ttp://kuroda.bglb.jp/htabox/tzb.zip
を更新しました。現状で把握できている部分のバグフィクスが完了しました。

コントロールの追加関数は固有のオプションが無い場合2つの引数を取ります。
MusicBuffer.ShowSeek(DocHwnd, 'SEEK2');

TZB上のHTMLスクリプトにはFraHwndとDocHwnd変数が自動的に追加されます。
これはダイアログのフレームHWNDとドキュメントHWNDです。スクリプトに
HWND型はありませんので実際にはVT_I4(4バイト整数)です。何らかのコン
トロールをドキュメントウインドウへ配置する場合必ずこれを第1引数として
渡すことになります。第2引数はウインドウ上の位置を決定するHTMLエレメン
トID文字列です。現在はこのエレメントが不動であると想定していますので、
DHTML手法でこの基準エレメントを動かしてもコントロールは初期位置に表示
されます。

203 :hidebou:2011/05/14(土) 21:38:09.78
半年くらい.NETやWIN32の基礎的な部分を掘り下げる作業になってしまいまし
たが、ある程度の大きさのプログラムは一旦設計したらその基礎は動かしがた
いものになります。やっと書きあがったと思ったら、隣にもっと素敵な書き方
があったという時ほど心が折れる瞬間はありません。とても散発的なデモを
ご覧いただくことしかできていなかったことを深くお詫びしますが、研究は
完了しました。先を追えばきりが無いのですが、私が知りたかったことは全部
知ることができました。

204 :hidebou:2011/05/14(土) 21:49:26.50
リアルな世界での私の知人がこれを見ているわけも無いのですが、何年か後
の検索エンジンにこの文字列がヒットすることもあるかも知れません。

すべてをなげうって研究に没頭するなど、いい大人のすることではないと自身
でも分かってはいるのですが、この世に私という個性が生まれたことへ最大現
の感謝を表明するには、私という個性が許す限りの理想を実現することしかな
いと考えています。「考えている」よりもそう思わなければ次に呼吸する気力
さえ沸かないと表現すべきでしょうか。少々疲れました。

205 :デフォルトの名無しさん:2011/05/15(日) 00:42:09.04
お疲れさまです。

206 :hidebou:2011/05/15(日) 03:33:30.07
ttp://kuroda.bglb.jp/htabox/tzb.zip
を更新しました。Sound.htm冒頭のボタンはリッチエディットコントロールを
HTML中に埋め込むデモです。つまりこのコントロールは別ウインドウでも表示
できるし、埋め込みもできるというコードで構成され、しかもCOMとしてスク
リプトと通信するわけです。言葉にすると複雑ですが、パターンとして確立
していますのでコードの方はいったってシンプルです。

207 :hidebou:2011/05/16(月) 09:34:32.62
結局何かをうやむやにできない性分なので、別プロセスHTAの子ダイアログ群
のメッセージフックDLL、それに規格を合わせた本体側の変更を行っています
今のところ、コントロールがスクロールバーの前に出ることだけは解決でき
ません。別プロセスの子ダイアログで更にその上のドキュメントウインドウ
でスクロールバー自体はオーナー描画という悪条件ですし、あくまでデバッ
グ目的の環境ですからこれについてはさすがに目をつむろうかと思います。

208 :hidebou:2011/05/16(月) 09:44:40.63
同時にソースコード隠蔽実験も行いました。今のところ暗号器と復号器を
渡して解析をかけられることに対する耐性は無い程度の暗号化ですが、個
人として使う分には誰かがEXEを覗き込んでも暗号文しかないわけですから
実用に耐えるだろうという程度の仕上がりにはなりました。こうやって突き
詰めて行くと、いっそのことTZBをHTABOX3に改名しようという発想も生まれ
てきます。

209 :hidebou:2011/05/16(月) 09:52:48.45
少なくとも今回のフックDLLの成功でHTABOXのデバッグもwscript.exeを使用
せず、別プロセスで起動したHTAの挙動を支配することで行うことができると
考えます。つまりCOMDLL登録しなくてもいいわけです。特に私自身は開発途
中の複数バージョンHTABOXを抱えてしまいますので、果たしてどのバージョ
ンがCOM登録されているのか混乱する局面があって、それ無しにデバックでき
れば大いなる進歩になるんじゃないかと思います。

210 :hidebou:2011/05/17(火) 01:30:15.20
DLLの記述を終了しました。頭がDLLに切り替われば「あぁそうだった」と思い
出すのですが、AプロセスがHookをセットした結果のハンドルは共有セグメント
に置いて固着させないとBプロセスでは未定義なんでしたね。当初に挙動が不審
だったのは、単純ミスだったようです。結果として0xff個までの別プロセスウ
インドウを個別に管理してTZBのタブへ埋め込むフックDLLが完成しました。

211 :hidebou:2011/05/17(火) 17:44:24.08
HTMLダイアログのスクリプトグローバルスコープにalert()と書けばダイアロ
グ本体が表示される前にalertが表示される訳ですが、多くの場合その後ダイ
アログ本体は表示されません。これがIEのバグなのか仕様なのか知れませんが、
てっきり私のプログラムが原因なんじゃないかと無駄な時間を費やしてしまい
ました。親でwindow.showModelessDialog("test.htm");としてtest.htmのスク
リプトを<script>alert("test");</script>にするとこれを検証できます。

212 :hidebou:2011/05/17(火) 23:13:22.40
いろいろ書き進んでゆくうちにより上位にある抽象的なイメージに到達しまし
た。例えばリッチエディットを例にとればWscript環境からはスタンドアロン
のエディタウインドウとして生成でき、HTML中からなら基準エレメントを指定
してその位置に追従する、ディスパッチでラップされたコントロールを作れば
使う側がTZBであれHTABOXであれ、貴方のスクリプトであれ流用できる訳です。

213 :hidebou:2011/05/17(火) 23:25:05.04
非常に当たり前な結論ですし、昔からそういう考えが無かったわけではあり
ませんが、その為に解決しなければならない課題というのは山のようにあっ
て、私などが到底達成できる目標ではないと考えていましたが、いつのまに
かその為の機序をすべて見通せる位置に立っていました。分かってしまえば
目の前にコードはあまりに短く、何年か前にこのくらい書けなかったのかと
いう悔恨の念にさいなまれますが、生きてここに到達できたことを素直に喜
びたいと思います。

214 :hidebou:2011/05/18(水) 03:01:17.62
TZB環境におけるリストビューコントロールの実験を完了しました。TZBのスレ
ッド構造はHTABOXの反省の上に設計されましたのでリストビュー上のイベント
(WM_NOTIFY)をHTML側スクリプトへ反映されることに何ら問題は生じません
でした。本当にWindows上のアプリケーションの書き方自体が変わることにな
るかも知れません。

215 :hidebou:2011/05/18(水) 09:18:49.05
TZBへリストビューとツリービューの実装を行いました。TZBの場合HTMLは最
終的にWS_POPUPの権利を失うことでタブコントロールに治まりますからシス
テムメニュー、ツールバー、ステータスバーが実装されることはありません。
また、ウインドウのサイズが可変な状態を想定するコンセプトから左ページ
ャーメニューも実装する予定はありません。この辺が自身のウインドウを完
全にコントロールしようとするHTABOX系とTZBの明確な相違点になります。

216 :hidebou:2011/05/18(水) 09:57:56.41
フックDLLが完成したことでHTABOXは複数のHTAを表示することが可能となりま
す。また、既に実行中のHTMLウインドウを持つアプリケーションの制御を完全
に奪ってカスタマイズすることが可能となります。例えば丸いウインドウを持
つInternet Explorerを作り出すことができるわけです。ただそこまで行くと
元となるのIEを作った側の権利を侵害することにならないのかという別の問題
が発生するでしょうけど。

217 :hidebou:2011/05/19(木) 03:09:07.20
今日はListViewとTreeViewのコールバック仕様について結論を出しました。
従来の選択エレメントへのclick呼び出しと同時に親となるエレメントへ
selected属性を動的に追加し、選択されたエレメントインスタンスを当該
属性の値へセットすることとしました。結果的に個々のエレメントにonclick
を書かず、親へ転送されたonclickでthis.selected.innerText等を参照して、
選択されたエレメントを識別できるものです。今日はこの事にすごく悩みま
したが、納得できる結論に達したと考えています。

218 :hidebou:2011/05/20(金) 02:31:45.58
親にWM_SIZEが発行された場合のみ各コントロールが自身の基準エレメント位
置を再確認するロジックを組み込み、フックDLLで問題となっていたコントロ
ールとスクロールバーのZオーダー問題を解決しました。内部的にはHTML埋め
込みコントロールクラスを作成し、このクラスを継承するコントロールは自動
的に埋め込み全般のロジックが付加されるようにしました。これだけ抽象化し
てもオーバーヘッドがほとんど生じないというC++の威力をまざまざと見せ付
けられた感があります。

219 :hidebou:2011/05/20(金) 15:34:15.74
そろそろ低層のことを考えるのはやめにしたいと考え始めました。少々無理
筋なことでも執拗にチャレンジすればなんとか打開策は見出せるものですが、
やや現実の社会とはかけ離れたことを考え続けた結果、実社会への適応とい
う能力が極端に低下してしまいました。もっと平たい言い方をすれば私は変
人から狂人へ変化してしまったのではないかと感じています。


220 :hidebou:2011/05/20(金) 15:41:48.62
せめてこの小さな箱の中で起こっていることの「虚構」と「真実」を見極め
たいと勉強を続けてきました。コンピューターを動かすというとこをもっと
平易に、もっと高速に、もっと柔軟にできるのではないか。商業主義を背景
とし、単にハイスペックなハードを要求するだけのWindows系の流れに一石を
投じることはできないのか。

221 :hidebou:2011/05/20(金) 15:54:02.04
自分が知りたい事にある程度結論めいた回答が得られた時に、食うや食わず
の現状と、そこ至った経緯を省みようとするのですが、あまりに長い間プロ
グラムを動かすというただ一点に集中しすぎた結果、もはやストリーが繋が
らなくなっています。ただ自分に都合のいい事柄を拾い集めて自己の擁護の
ために順序良く並べているにすぎない気がします。

222 :デフォルトの名無しさん:2011/05/20(金) 20:11:12.88
とりあえず、夜10時には寝ること。朝6時には起きること。1日1時間、散歩すること。
庭の草取りをすること。
毎日少しずつでも太陽を浴びて汗を流さないと人間の体は壊れます。
そんなあたりまえのことを1週間も続けていると、体は元に戻っていこうとしますから。
大丈夫です。

223 :hidebou:2011/05/20(金) 21:18:35.54
>>222
ありがとう。明日、近所の田植えを手伝ってきます。私にはそういうことが
必要なんだと思います。

224 :hidebou:2011/05/24(火) 19:50:29.91
田植えの全日程を終了しました。全くスレ違いな話題ですが一言言わせて下さ
い。日本と言うシステムは既に終わっています。水田には当年とって50才にな
る私より若い方は見かけません。wikipediaで地方自治体の人口構成を見てくだ
さい。この場合、政令指定都市以外ならどこでも同じです。大学入学年齢で人口
が激減し、卒業後に戻る人口はごく僅かです。水田を這いつくばって、水稲栽培
に励むなど、今の若者には死んでもやりたくない事の一つなのでしょう。結果日
本という国は終わりを迎えました。勿論、世界で必要とされる人材は日本という
枠を超えて評価されますから、プログランミングは国際的な評価を得る近道です。
私がなぜメニュー等の文字列に日本語使わないのか?逆に私はこう質問したい
「なぜ70億の中の1億しか読めない文字列を使用する必要があるのか?」少なく
とも私はその事にかかる労力に見合う成果は期待できないと判断しています。

正直、一日でも早く日本が国際的に正しく評価され、結果として財政破綻し国防
に従事する人間以外の公務員、特別公務員(議員等)は無給のボランティアと
なることを切に祈っています。このまま事なかれ主義を続ければ国として再起す
る可能性さえ失われるのではないと危惧しています。

225 :hidebou:2011/05/25(水) 06:19:00.04
Rich Edit にもう一工夫加えたいと考えています。現状のRich Edit系コード
は実に誰でも書きそうな物でしかなく満足できません。Rich EditにOLE埋め込
みで編集を促すような状態を作ることはMSDNのとおりなのですが、HTMLのパー
ス結果をエディタ上に矛盾の無い形で出現させる事ができるのではないと考え
ています。結果としてHTMLが表示可能なオブジェクトはすべてRich Editに表示
可能となります。具体的には特定の段落が矩形を形成しその中にHTMLウインド
ウが存在するものです。画像等を表示するための静的描画と、そこにあるボタ
ン等がインタラクティブな動的描画の双方を提供したいと考えています。

226 :hidebou:2011/05/26(木) 22:36:56.77
Rich Editへパース済みHTMLを埋め込む手法の基礎実験は終了しました。勿論
もっとも単純なのはDCへの強制書き込みですが、それでは現在当該位置が表示
されているのかを常に監視しなければならないコストがかかります。今回はあ
くまで規格どおりのOLE埋め込みを偽装し、いざ描画する段になると通常のHTM
Lアイコン状態では無しにパースされた画像やテーブルを表示しようという意図
ですので、結構トリッキーなロジックとなります。まだ克服しなければならな
い課題は残っていますが、この技術だけでも一つの商品になるのではないかと
考えています。

227 :hidebou:2011/05/28(土) 19:20:12.50
Rich EditへのHTML埋め込み手法を完成させました。結果的に静的な表示は
無しにして、インタラクティブな表示に一本化しました。考えてみるとIEの
HTMLエンジンはターゲットURLに画像ファイルを指定した場合自動的に<img>
タグを持つシンプルなHTMLを生成しますので、画像等の表示用に特別な手段
を用意する必要が無い事に気づきました。結果的にHTMLエンジンが表示可能
なものは全てRich Editへ挿入することができます。したがって動画を挿入
しても何ら問題は生じません。

228 :hidebou:2011/05/28(土) 19:30:13.05
通常OLEというと正に埋め込みで、当該箇所をダブルクリックすると登録済み
アプリケーションが別窓で起動する訳ですが、単純にエディタ上に任意な大き
さの矩形を予約する目的でOLEを捉え、後はそこを好きに使わせてもらうとい
う発想は、テキストを主体でなければならないドキュメント(例えばソース
コード)へ画像や動画といった形でのコメント挿入を可能にします。

229 :hidebou:2011/05/29(日) 01:18:19.37
ttp://kuroda.bglb.jp/htabox/tzb.zip
を更新しました。添付ole.htmをTZBで開くとRich EditコントロールがHTML
上に表示されます。コントロール下部にあるボタンにより通常OLE埋め込み、
HTMLパース状態埋め込みの動作を確認できます。尚、HTMLのサイズは自動的
に判定しますが、HTMLダイアログ評価しますので、評価時におけるbodyの
marginは0pxなことに注意してください。任意なマージンが必要な場合は明
示的に宣言する必要があります。

230 :hidebou:2011/05/30(月) 15:21:42.59
TZBの取り説は実行可能でなければなりません。HTABOXも同じ手法を採用した
いと考えています。そこで憂鬱な問題が発生してしまいます。WORDでは実行
可能スクリプトを内封したドキュメントが書けないのです。そこでFrontPage
とスクリプトで自動目次生成、使用BMPの自動リソース格納を実現するシステ
ムを書いています。一人の人間が組織と伍して製品を生産するということは
物理的な製品では不可能なことです。しかし、ことコンピューター上の事柄
はそのアルゴリズムさえ明確ならすべて自動化できます。たった一人の人間
が世界を相手に戦える唯一フェアなビジネスフィールドがソフトウェアであ
ると信じていますし、誰かがそれを証明しなければ、未来永劫プログラミン
グとは「下請けの過酷な労働」という地位から向上しないだろうと思ってい
ます。

231 :hidebou:2011/05/31(火) 21:30:02.78
今日はフレーム構成のHTMLページへのコントロール埋め込みについて検証し
ていました。TZBのヘルプ自体がフレームページなので、その場で埋め込み
を実行して見せたかったのですが、位置演算に費やすコストが高くて美しい
仕上がりになりませんでした。子フレームの場合、フレームの位置、フレー
ム内BODYのスクロール位置を常に問い合わせることは避けようの無い事です。
もしこれを採用した場合、非フレームの場合にも当該処理が足を引っ張るこ
とになりますので、フレーム構成ページへのコントロール埋め込みは実装し
ない判断をしました。今後もっと素敵な解決策が見つかるまでの課題とさせ
ていただきます。

232 :hidebou:2011/06/01(水) 15:49:36.50
TZB用ドキュメントを書いています。私は動けば先を書き進めてしまうので
使う側の目線で全てを見直すことは重要な作業です。当然、手直しが必要な
部分も出てきます。ただ、この段階で何かを切り捨てることはあれ、付け加
えることは極力避けるようにしています。ただでさえ仕事が遅いのに、根幹
を書き換えるようでは無限ループに陥るからです。

233 :hidebou:2011/06/01(水) 18:50:05.84
明日TZBを正式にリリースする踏ん切りがつきました。
要は「全力でソフトウェアの勉強をして食えるようになるのか?」
というごく単純な実験を皆さんはご覧になっていることになります。
で、食えない場合はどうなるのか?まだ全てを諦める気にはなりませんので
食べる為にあらゆる手段を考慮しなければなりません。勿論、この分野の研
究に割ける時間は激減するでしょうが、私が息をしている限り同じ主張を継
続してゆきたいとは思っています。

私がここに居て、これをご覧になっている方が幾人かいて、私の書くつたな
いアプリケーションに興味を持っていただけていることに感謝します。TZBは
そんな方々の期待を裏切らない仕上がりになることをお約束します。

234 :hidebou:2011/06/04(土) 12:32:39.42
最終的にドキュメントを仕上げる段階でFrontPageにはアウトラインプロセッ
サが無く、Wordではスクリプトを書けないというジレンマを克服するために
自前でアウトラインプロセッサを書いています。<h1>〜<h6>がツリー表示さ
れて、ドラッグすることでドキュメント全体の構造を変更できるものです。
部分的に文章を書く私にとって無くてはならないものが全体の構造を俯瞰で
きるアウトラインプロセッサです。

235 :hidebou:2011/06/04(土) 12:42:25.50
Windows8はHTML5とJavaScriptでのアプリケーション開発を前面に押し出す
戦略のようです。正にわが意を得たりなわけですが、既に複数HTMLインス
タンスの集積化、複数プロセスHTMLインスタンスの集積化、HTMLウインドウ
へのネイティブウインドウ埋め込みと連動、独自スクリプトパースによる
コードの隠蔽等「HTML+JScript」が注目されればHTABOXやTZBが持つアドバ
ンテージにより多くの方が気づいてくれるのではないかと期待しています。

236 :hidebou:2011/06/14(火) 11:39:44.79
1週間ほど柿の芽を選るバイトに汗を流していました。何かを考える暇も
なく手を動かし続けると心が純化されてゆく気がします。プログラミング
のことはどうでもいいと思えるほど良く眠れます。もし私が「天才」と呼
ばれる部類の人間ならこんな状況でも後世に残る提言ができるのかも知れ
ませんが、私は書いて躓く事でしか前に進めない「凡人」以下な人間です
から、ある程度「精神的不健康」というリスクを負わなければならないと
いうことも感じています。

237 :hidebou:2011/06/17(金) 17:47:29.20
アウトラインプロセッサを書きながら「表現するとは何か?」というような
問題を考えてしまいます。私の考えを自由に閲覧可能にできれば各人のスト
ーリーに沿い最短距離で理解する事ができるでしょうが、いかんせん一旦静
的な文字列にしなければならず、結果的に特定の仮想読者に向けたドキュメ
ントにならざるを得ません。仮想読者の範囲を広げればドキュメントは冗長
なものになりますし、範囲を狭めれば多くの方にとってちんぷんかんぷんな
ものになります。もし、全ての要素がカオスな状態で存在し、読者の閲覧パ
ターンで構造化されるようなアルゴリズムが確立できればノーベル賞もので
しょう。

238 : 忍法帖【Lv=16,xxxPT】 :2011/06/23(木) 13:29:33.85
作者さん、その後の状況はどんなもんなんでしょう?

239 :hidebou:2011/06/23(木) 21:37:59.01
ご心配いただいて申し訳ありません。TZBとHTABOX3用ヘルプHTML作成ツール
を書きながらヘルプ表示方式にも若干の改良を加えておりました。まだこな
れていない部分もあるのですが、このHTML用アウトラインプロセッサは汎用
な動作が可能ですので、公開して使っていただける状態にします。

240 :hidebou:2011/06/23(木) 21:52:13.55
ttp://kuroda.bglb.jp/htabox/outline.zip を公開します。このzipファイ
ルはoutline.exeとtest.htmで構成されています。outline.exeへtest.htmを
ドロップし、HtmlViewタブでtest.htmの冒頭を眺めると操作の説明を見るこ
とができます。要は<Hn>タグを構造化された見出しと認識し、構造を表示し
たツリービューの内のドラッグと、右クリックポップアップメニューで見出
し構造を変更するものです。ただし、まだ動作実績が不足しているので使用
する場合は、原版HTMLを確実に保存し、そのコピーを対象に使用してくださ
い。

241 :hidebou:2011/06/23(木) 22:16:09.53
このアウトラインプロセッサはFrontPageやMsWordで作成されたHTMLの構造を
変更することを想定して設計していますが、エディタで直接HTMLを編集する
ことも可能です。アウトラインを正しく認識するために静的文字列、HTMLコ
メント、JavaScript中コメントを認識する必要がありますので、エディタ上
では若干の色をつけています。それ以外のエディタ機能はほとんど素の状態
なのですが、複数行を選択してのTAB、shift + TABには対応しています。

242 :hidebou:2011/06/24(金) 00:45:38.94
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。エディタのブロックインデント(TAB、shift + TAB)動作
を見直しました。選択範囲中に\r\nが存在した場合のみブロックインデント
を行い。それ以外の場合はデフォルトの動作としました。 

243 :hidebou:2011/06/25(土) 19:59:58.82
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。アウトラインツリーはデフォルトで全展開状態としました。
エディタは<p>及び<p></p>間の<br>を認識し、innerTextを一行80バイトに
自動整形する機能を追加しました。FrontPage、MsWord、ScriptEditor
、VisualStudioでHTMLを作成する場合、それぞれ余計な整形やタグ生成を
したがるためにHTMLレベルで文章を練ることが出来ません。それらに無い
アウトラインプロセッサ機能と、長いinnerTextの自動整形機能を持った
HTMLエディタを書いてしまおうというのが今回の目的でした。

244 :デフォルトの名無しさん:2011/06/25(土) 20:16:14.69
またC:直下にtest.xml吐いてますよ

245 :hidebou:2011/06/25(土) 20:18:09.33
自動整形は文字列編集状態での文字入力で頻繁に呼び出され、<p>タグ内にあ
るか?<br>は存在するか?全体文字列から改行の削除、80バイト整形後の改
行追加、カーソルの復元という作業を行います。WIN32で記述すれば全くスト
レスを感じない速度を実現できますが、間接的な手法では実現しにくい分野
だと思われます。これできちっとした論理構造であらゆるドキュメントを書
く準備が整いました。

246 :hidebou:2011/06/26(日) 20:20:04.98
>>244
ご指摘感謝します。デバッグ用の出力は抑制しました。
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。文章整形時ASCII文字の連続中は改行を抑制することにしま
した。これはエンティティーが改行で分断される事と、\r\nが半角スペース
として誤認される場合がある事への対策です。


247 :hidebou:2011/06/26(日) 20:42:34.61
アウトラインプロセッサのエディタ部にVMLコード生成機能を付加してはどう
かと考え、改めてVMLの仕様に目を通しました。それ自体はさして難しいこと
では無いのですが、仕様として正しいVMLを出力してもFrontPageやMsWordで
再編集した場合に表示されないという壁があるため断念しました。FrontPage
等は極めて独自な手法でVMLを管理していますし、スクラッチで書いたVMLコ
ードも強制的に自身の規則で書き換えます。書き換え後に表示できればまだ
いいのですが、書き換えた挙句表示できないという罠が待っていましたので
あっさり引き下がりました。

248 :hidebou:2011/06/27(月) 02:58:02.82
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ASCII文字連続時の改行抑制に伴いバッファ長を限定するこ
とが危険なことから逐次_bstr_tへの一文字追加へアルゴリズムを変更しまし
た。また、ITextRangeにバグを発見しましたので対策コードを付加しました。
当該zipには従来のtest.htmに加えtest2.htmが添付されています。これはTZB
等のヘルプファイルを想定した画像とVMLの右側配置に関する資料です。内容
は極めて初歩的なものですが、参考にしていただける部分があるかも知れませ
ん。

249 :hidebou:2011/06/27(月) 10:05:54.33
HTABOXと言う発想は従来のアプリケーションをHTML + JScript or VBScript
で実現しようという発想な訳ですから、開発の簡便さを知らなければ外見は
見慣れたアプリケーションになります。そういう意味では別に新しいもので
は無い事になります。最も象徴的な現象は「アプリケーション」と「取り説」
を必ず別ファイルで用意しなければならないだろうという事です。

250 :hidebou:2011/06/27(月) 10:13:45.29
それに対してTZBという発想は、HTMドキュメントウインドウ部のみへの拡張
に限定することでウインドウの水平、垂直スクロールを可能なまま維持しま
すから、縦横に大きいウインドウでもユーザーは通常のWEBページを見る感覚
で閲覧、実行することができます。最も象徴的な現象は「実行できる取り説」
を作成できる事です。つまり「アプリケーション」と「取り説」が一体となっ
た新たなアプリケーションの姿を提示することになります。

251 :hidebou:2011/06/27(月) 10:30:02.46
アウトラインプロセッサは現在ヘルプファイル作成という目的の為に存在し
ますが、将来はTZBアプリケーション開発用エディタという位置づけにできれ
ばと考えています。まもなくリリーするTZBのヘルプページがそうなりますが、
ページ内のh1〜h6を構造化したツリーはTZB上の全てのページで利用可能とな
ります。どんなに長大なページでもユーザーはツリーのクリックで目的箇所
へ移動できますから、他の部分にどんなに長い説明文があろうが気にしない
でしょう。そこにあるボタンをクリックすることで、当該ページ若しくはTAB
に追加されたページに表示される実行結果を見るという展開になります。

252 :hidebou:2011/06/27(月) 10:50:24.85
つまりHTMLアプリケーションを「従来型アプリケーションの模倣」というレ
ベルから「HTMLアプリケーションでなければ実現しにくい」というレベルへ
進化させるのがTZBの目的だと考えています。現状のTZBはある程度の拡張の
結果「企業秘密」と認識されるコードを含む状態となってしまいましたが、
前にお話したように、そういった部分を排除、若しくはLIB化してソースを
公開し、複数の叡智でこの発想を推し進めることも想定しています。

253 : 忍法帖【Lv=18,xxxPT】 :2011/06/27(月) 12:24:00.30
USA!TZB!TZB!TZB!

254 :hidebou:2011/06/28(火) 11:21:17.55
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。本文にクォートされた文字列がある場合に改行を抑制する
ことにしました。これでいかなる状況でも<p></p>間の\r\nがHTMLの表示へ
影響を及ぼすことは無いと考えます。現時点でこの本文整形はデフォルトに
機能しますが、リリース時には実行時に選択できるオプションという位置づ
けになろうかと思います。


255 :hidebou:2011/06/29(水) 20:47:28.81
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。このままではスパイスが足らない気がしてツリー画像の色順
と、HTML側見出しの背景色グラデーションを加えてみました。話の流れからす
るとグラデーションはIE固有の機能を利用していると思われるかも知れません
が、Foxでも動作するものとしています。任意な数のDIVを動的に外周へ生成す
ることでグラデーションを実現します。詳細は添付HTMLファイルをご覧くださ
い。

256 :hidebou:2011/06/30(木) 01:32:39.04
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。Enter入力時に前行がtabでインデントされていた場合イン
デントを維持することとしました。勿論<p>内の本文自動整形時にこの機能は
無効です。そろそろ実戦も使えるレベルになってきたかと思います。

257 :hidebou:2011/06/30(木) 14:48:51.47
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ツリー上でのドラッグ、右クリックで表示されるダイアログ
とメニューを詳細にして、考えうる全ての見出し編集動作に対応しました。
ソースの色分けは原則として編集中の行内で判断しています。これはブロック
型のコメントの開始などで文章終端までのサーチが行われては動作が散漫とな
るからです。編集中に文章全体を再評価して厳格な色分けを行うキー操作は
とりあえず「CTRL + TAB」としています。現バージョンではこの再パースに
よって文章中の全<p></p>間文字列は自動的に整形されます。

258 :hidebou:2011/07/01(金) 21:46:32.22
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。Pタグのクラス定義<p class="hoge">に対応し、Pタグ内文
字列の「整形」「無改行」をツールバーで選択可能としました。何れも押さ
れていなければPタグ内文字列には関与しません。

259 :hidebou:2011/07/02(土) 02:51:35.34
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。タブでの切り替えウインドウに「ヘルプ」が追加されまし
た。このヘルプで使用しているツリーがTZBで利用可能となるメニュー用の
ツリービューです。このアウトラインプロセッサではアウトライン用ツリー
が常に表示されますから、やや狭苦しい感がありますがご容赦ください。

TZBの場合、このヘルプウインドウもTZBオブジェクトを利用できますから、
解説と実行を両立したヘルプページが作れるわけです。

260 :hidebou:2011/07/02(土) 03:44:22.55
RichEditについてもだいぶ実践コードを書きましたので概要を理解すること
はできたと思います。私の本業はエディタではなくInternet Explorerコア
解析なのですが、OLEと見せかけてHTMLインスタンスをエディタへ貼り付け
る事には成功していますので、通常のエディタ屋さんでは不可能な事を簡単
に実現できます。例えば文章を操作するHTAをマクロとして作成し、そのHTA
自体が当該文章上に見えるという状態です。また、HTMLを介して.NETコード
により文章を操作することについても何ら障壁はありません。

261 :hidebou:2011/07/02(土) 21:22:26.78
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。実験的な意味合いは薄れましたので、Pタグ整形はメニュー
又はツールバーから選択可能な機能とし、一行長と改行規則をダイアログか
ら設定可能としました。自動整形<->長い一行の動作を非常に軽量に行えます
ので、本文編集時はHTML評価を気にせず単純な整形を用い、HTML評価時に長
い一行とするというのが賢い使い方になるでしょうか。ちなみにHtmlViewは
ファイルの上書き保存を促しますので、そういう使い方なら常に長い一行で
保存されていることになります。

262 :hidebou:2011/07/03(日) 02:49:46.87
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。Tabコントロール領域内でのTreeとHtml連動アルゴリズムを
見直し幅を逐次連動させながら軽量な動作としました。さっき気づいたので
すが、261の時点でアップしたzipファイル名が別名だった事をお詫びします。



263 :hidebou:2011/07/03(日) 22:37:22.20
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。見出しのドラッグと挿入でNextSiblingを指定すると対象
の子を肩代わりして所有してしまうバグを修正しました。例によって書きか
けですが、Helpタブも有効です。今日はTZBのデバッグモードでツリーメニ
ューを動作させるコードで一苦労しました。動いてみると別プロセスと協調
するデバッグモードの方がGUI的にはやや軽量だったりします。メッセージ
キューが分散されることにより、結果として軽量に動作するというところで
しょうか。

264 :hidebou:2011/07/04(月) 01:37:08.67
エディタ部のショートカットキーなんかを考え始めるときりが無いので、ア
プリケーション側はCOMインスタンスとしてエディタとドキュメントを提供し
ユーザーがスクリプトで自由に定義できる方向で考えています。ちなみに現状
でこっそり存在するキーはSHIFT+ENTERで<br>、CTRL+ENTERで<p></p>、
CTRL+TABで全体の再評価となっています。


265 :hidebou:2011/07/04(月) 14:01:35.17
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。マクロ編集、実行機能を追加しました。これに伴いメニュー
やツールバーが変更されましたが、ソース用とマクロ用の2組が存在すると
考えていただければ理解が早いと思います。ただし、アウトライン編集機能は
ソースのみで、実行機能はマクロのみというルールになっています。添付
macro.htmをマクロはソース側文章を自動で制御するサンプルです。マクロと
して読み込んで実行してください。

266 :hidebou:2011/07/04(月) 14:12:59.56
現状の仕様ではマクロ側HTMLのdialogArgumentsにソース側のITextDocument2
実体が渡されています。ですからTZBのように新たなタブを生成するような機
能は提供されていません。この場合はあくまでも文章の編集が目的ですので、
いたずらに多機能を追求すべきではないと考えています。

MSDNのITextDocument2に関する解説では正規表現が利用可能となっています
が、私の環境では利用できたためしがありません。しかし、文字列をJScript
で認識できるこのマクロ手法を使えば、使い慣れた正規表現関数で自在に文章
をコントロールできることになります。


267 :hidebou:2011/07/04(月) 18:07:48.71
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。マクロHTMLのdialogArgumentsをタブインスタンスへ変更し
ました。このインスタンスはLengthプロパティーとGet、Setメソッドを提供
します。マクロから先頭エディタのドキュメントインスタンスを取得する場合
var TAB = dialogArguments;
var TextDocument = TAB.Get(0);
となります。詳しくは添付macro.htmのソースをご覧ください。

268 :hidebou:2011/07/04(月) 19:38:05.83
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。TAB.OutLine();関数を追加しました。これによりマクロか
らアウトライン表示を更新することができます。添付macro.htmは自動的に
60個の構造化した見出しを生成し、アウトライン表示を更新する例です。

269 :hidebou:2011/07/04(月) 23:22:49.87
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。細部の煮詰めを行いました。例えば見出しのRenameでは従
前の文字列がダイアログのテキストボックスに入力された状態としました。

ふと、プログラムとはかくも残酷なものかと感じました。随分前に会社で後
輩社員が仕事でマクロを使ったら先輩社員が反則だと怒ったことが論議を巻
き起こしているという記事がありました。曲りなりにもプログラムを書く立
場から見れば「反則」というのはばかげた発想で「じゃぁ紙と鉛筆以外は全
部反則?」と逆に問いかけたくなります。

270 :hidebou:2011/07/04(月) 23:33:24.23
でも先輩社員の真意はもっと深い意味を持っています。一つは書ける人間に
対する畏敬と危惧が入り混じった感情です。場合によっては後輩社員が通常
は一人が一年かかる事務処理をたった一日で終了させたかも知れません。

第二に、もしその効果が前述のように劇的なものであった場合、書けない人
間の雇用機会が確実に失われる事です。アルゴリズムの定まっている情報処
理はすべてプログラミングできますが、そのことがこういった負の効果を生
み出す事もありえます。

271 :hidebou:2011/07/05(火) 00:00:43.27
このアウトラインエディタを書く進めるうちにTZBとHTABOXは融合できるとい
う直感を得ました。事実アウトラインエディタのマクロ実行ウインドウが現
状のダイアログベースだけではなくHTAベースでも可能とすれば、エディタ機
能の付いたHTABOXとなります。HTMLアプリケーションを従来型ではなくコンテ
ンツ型を主体としたものと捉えれば、その全体構造を俯瞰しながら編集できる
アウトライナー的機能は是非装備すべきだと痛感しています。

272 :hidebou:2011/07/05(火) 02:07:10.11
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。自動整形ルールを見直しました。
<p></p>間にホワイトスペースが連続する場合一個の\x20に置き換えられると
いうのが各ブラウザの仕様のようです。ASCII直後の\r\nはこのホワイトスペ
ースとして扱われ、全角文字直後の\r\nはホワイトスペースとみなさないと
いう前提のアルゴリズムに変更しました。ただし、オプションで単純バイト
換算での改行を許していますので、手順によっては余計な\x20が追加されか
ねないことに注意が必要です。

273 :hidebou:2011/07/05(火) 05:47:36.29
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。実験的にマクロ実行を別プロセスmshta.exeで行う仕様と
しています。HTAのメリットはソース内でウインドウ枠をコントロールでき
ることでしょう。ここでやり取りしているCOMはIDispatch継承ですから、
プロセスが異なっていても、それが原因で書き換える部分は存在しません。

274 :hidebou:2011/07/05(火) 11:20:57.74
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。従来はプロセスが分散することはデメリットしか生じない
と考えていたのですが、多数のコントロールがメッセージで駆動している場
合、分散させることでやや軽量になる傾向を感じることから、マクロの別プ
ロセスHTA実行を積極的に活用しようと思います。正直IE9にはmshta.exeが付
属しないのではないか?と考えていたのですが、ちゃんと付属していた事も
要因の一つです。

275 :hidebou:2011/07/05(火) 23:11:09.70
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ソース及びマクロのエディタ上でポップアップメニューを
表示することにしました。内容は、"Cut","Copy","Paste","Clear","Undo",
"Select All","Find Text", "Replace Text"です。これでオーソドックスな
編集動作には十分対応できるものと考えます。もし正規表現検索置き換えが
必要だとしたら、マクロでHTAを書いてください。書きなれたHTML+スクリプ
トでエディタマクロが書けるメリットを最大限に活用してください。

276 :hidebou:2011/07/07(木) 02:53:47.82
今日はリッチエディット上のIMGタグを実際の画像として表示する部分につい
て、最適な手法を検証していました。結局GDI+でファイルを認識し、互換DC
にビットマップを保持し、描画が要求されたら提供するという手法を採用し
ました。エディタ上の右クリックメニューでIMGタグ直後に画像イメージを
表示するか否かを切り替える仕様を想定しています。

277 :hidebou:2011/07/07(木) 12:16:58.68
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。添付test2.htmをソースとして開き、エディタ上の右クリッ
クで表示されるメニューから<IMG>タグを画像表示するか否かを操作できます。
この例ではpng形式のファイルを表示しています。この動作原理は非常に軽量
ですから、MsWordのように画像が多いと極端に重くなる現象とは無縁です。

278 :hidebou:2011/07/08(金) 19:58:40.74
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ツリー構築アルゴリズムを見直し、より軽量な動作としま
した。これにより、まったく同一な見出しが複数存在しても、ツリーのクリ
ックで当該見出し部分がエディタ最上部に表示されます。またツリー上の
コンテキストメニューを見直し、見出しの移動をより直感的なものとしまし
た。

279 :hidebou:2011/07/12(火) 15:58:45.83
JScriptソース隠蔽についてできるだけ過酷な条件でテストを繰り返していま
す。現状での推測は、完全にアルゴリズムを隠蔽したければ、たとえソースが
スクリプトな状態でも、外部DLLに置けるような記述でなければならないだろう
ということです。具体的には暗黙のwindowとかdocumentという記述を行わず、
関数内で参照が必要な場合は明示的に引数としてもらう必要があるんじゃない
かと言うことです。で、そこまで気を使うんだったら速度的に有利なC++の直接
コーディングによるCOMオブジェクトでもいいんじゃないかと感じます。

280 :hidebou:2011/07/12(火) 16:15:38.28
いろいろ試しているうちに、当然ながら普通にHTMLのスクリプトスコープで
コードをパースすれば、あらゆる状況下で期待通りの動作をすること痛感し
ました。これを受けてカジュアルな隠蔽という発想があってもいいんじゃな
いかと考えています。手法としてはファイルの一時生成が最も単純ですが、
あまりに芸が無い手法なので既存バイナリのリソースデータを動的に変化さ
せるという手法になりそうです。

281 :hidebou:2011/07/12(火) 16:35:13.32
話は前後してしまうのですが、「完全な隠蔽」はJScriptコードをネイティ
ブコンパイルする手法で実現したいと考えています。これは出来上がった
ファイルがバイナリに見えるだけではなく本当にC++コンパイラが吐き出す
ネイティブコードでなければなりません。手法はいたって単純でJScript文
法に出現するオブジェクトをC++クラスでエミュレートし、目的JScriptソー
スをVisual StudioのWIN32DLLプロジェクトに取り込むと自動的にCOMDLLが
生成されるというものです。

282 :hidebou:2011/07/12(火) 19:32:13.46
ttp://kuroda.bglb.jp/htabox/vmldemo.png
をアップロードしました。これはツリービューで基本構造を練るのでは無し
に、フリーハンドでノードの位置を動かしながら練るコントロールの画像で
す。この図のように単純な構造なら数秒で作成することができます。将来は
このコントロール上での移動や削除が文章に反映されることになります。

283 :hidebou:2011/07/12(火) 19:51:49.21
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。実際にフリーハンドでダイアグラムを作成できるHTMLが添付
されています。現状ではこのHTMLの結果を保存する機能は抑制されています。
このデモは「カジュアル隠蔽」を実践している例でもあります。マウス移動
等のシステム系イベントハンドラ駆動というのはスレッド管理という観点から、
最も過酷な状況となります。ここでは安定を重視して単にパースしながらソー
スを隠すことを試みています。

284 :hidebou:2011/07/12(火) 20:30:49.68
添付ダイアグラム.htmは全スクリプトがBASE64風の文字列として記録されて
います。このエンコードはエディタ上で領域を選択し、特定のキーを組み合
わせて押すと、選択領域全体がエンコードされるルールとなります。同じく
デコードも可能としますが、その場合著作者以外のデコードを許さない工夫
が必要になるはずです。最も単純で破られにくい方法として、ソースコード
中の特定規則コメント全体がデコード時に示されたキー文字列と完全に一致
しなければならないというものを想定しています。この場合キー長は無限に
長いものとすることが可能です。

285 :hidebou:2011/07/12(火) 21:11:39.73
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ノードタイトル編集後に新たなサイズで関連ノードとの接
続座標を更新する部分を記述しました。ノードは全く自由に従来の親から新
たな親へ変更することができますが<h1>〜<h6>の見出しを想定しているので
6階層以上の動作は未定義です。

286 :hidebou:2011/07/13(水) 00:10:56.79
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ダイアグラムをXML形式で保存呼び出しできます。文章編集
とは今のところ関連していませんが、カオスな状態での各項目を列挙し、それ
ぞれの関連を確認しながら、最終的にツリー構造を作成するツールとして利用
できるだけの機能は有していると考えます。尚、添付ダイアグラム.htmはマク
ロではありませんので単にoutline.exeへドロップしHtmlViewで動作させてく
ださい。

287 :hidebou:2011/07/13(水) 00:40:31.54
zipにsample.xmlを追加しました。VMLという機能は従来全く陽の当たらない
部分だったのですが、WEBページでは無しにアプリケーションウインドウのグ
ラフィックツールと位置づけると、WIN32APIで書いたら目も当てられないよ
うな仕事を鼻歌交じりにこなすことができます。しかも基本的にベクトル処理
ですから大きさに関り無く軽量です。

288 :hidebou:2011/07/13(水) 03:29:02.83
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ダイアグラム表示の場合は要素タイトル編集の延長として
本文も編集できる流れが自然かもしれないということで実装しました。これ
以前の保存XMLとは仕様が異なりましたので、従前のXMLと互換性はありませ
ん。混沌とした考えを混沌のまま記録し、客観的な観点から再編を繰り替え
すとこが出来ます。「アイディア エディタ」みたいな名前がふさわしいと
思います。

289 :hidebou:2011/07/13(水) 03:42:37.55
このダイアグラムはツリービューでは表現できないものを柔軟に表現できる
可能性を秘めています。ツリー(樹状構造)は親子の結合という言わば強い
結びつき以外の関係を許しませんが、ここではもっと弱い結びつきを同時に
表現できます。例えば強いラインが文章構造やページのリンク構造とするな
ら、弱い結びつきは、引用や参照と例えることができます。この文章がどこ
でアンカー参照されているかという情報を同時に表現できるわけです。

290 :hidebou:2011/07/13(水) 23:39:11.52
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。TZB手法ではタブ内での実行となるためにシステムメニュー
を持てません。これに代わるものとしてVMLによるポップアップシステムを
考案してみました。添付htmlを開いてHtmlViewするとご覧になれます。

291 :hidebou:2011/07/14(木) 02:13:05.52
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。ダイアグラムエディタはStruct Designタブに組み込まれま
した。エディタからHtml Viewに切り替えた場合ソースにエラーがあった場合
HTMLの生成を停止しエディタのハングを抑止しました。文字位置、行位置を
ステータスバーに表示しました。UNICODE単位、BYTE単位で表示しますが、
これは単にVisual Studioの表示形式をそのまま採用しています。

292 :hidebou:2011/07/14(木) 02:50:30.70
私はHTML+JScriptがアプリケーションの主役になるためには、より高速に動
作させるためのバイナリ拡張とソース隠蔽オプションが不可欠だと考えてい
ます。隠蔽のロジックについてはある程度の見極めができているんですが、
いざ自分で書いてエンコード->デバッグ->どこがエラーか当然不明->デコード
->実行->エラー起きないというめんどくささに嫌気がさしたもんですから、
単一エディタ上でコーディング、エンコード、デコード、デバッグが行える
環境を書いてしまおうというのもこのアウトラインエディタの目的です。
これはTZBよりもHTABOXで必要になる機能だろうと考えます。


293 :hidebou:2011/07/17(日) 10:04:33.12
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。Struct Designタブ内の機能を完成させました。まだZオーダ
ーの部分に未解決な問題が存在しますが、全く自由に論理の構造を変更する
ことが可能で、各ノードの位置情報を維持したXMLと単純<Hn>にみなしたHTML
へ出力できます。また、カスケード、縦ツリー、横ツリーへ整列する機能も
追加しました。

294 :hidebou:2011/07/17(日) 10:51:12.66
自分としてはこのStruct Designタブ内におけるVMLによるGUI形成がとても
気に入っています。さずがに500MHzという年代物で動作させるとややもたつ
く感が否めませんが、操作のレスポンスは.NET上でのコントロールを上回る
のではないかと感じています。全く画像ファイルを用意することなくグラフ
ィカルなボタン等を生成できることは、開発時のポータビリティーを向上さ
せる意味において大変有益なことです。

295 :hidebou:2011/07/17(日) 13:42:25.46
アウトラインエディタは「エディタ付きTZB」な訳ですが、マクロは別ウイン
ドウでHTA動作します。このマクロHTAウインドウは複数生成されることにも
対応するために別プロセスで実行されます。つまり裸な状態ですから、エラ
ーが発生すれば、通常のデバッガが起動されるはずです。つまり従来デバッグ
を目的にHTABOX.EXEをCOMEXEとして設計したり、起点をWScriptにしたりして
いましたが、その必要が無くなることを意味しています。勿論リリースモード
でEXE格納されたHTAソースはインプロセスで実行させますので攻撃者がデバッ
ガで停止を試みても応じないというルールにできると考えます。

296 :hidebou:2011/07/17(日) 13:55:29.39
つまり「アウトラインエディタ」の余計な機能を削除しマクロ環境へHTABOX
が有する拡張機能をディスパッチインスタンスとして提供すればそのまま
「HTABOX3エディタ」とすることができます。HTABOX3エディタの最大の目玉
は任意なスクリプトブロックをエディタ上で範囲指定し、その場でエンコー
ドできることになるでしょう。このエンコードはカジュアルなものですから、
未エンコード時と全く同じ動作が保障されます。将来は範囲指定されたソー
スがプリミティブなJScriptコードであった場合Visual Studio環境と連動し
てネイティブコンパイルされることになるでしょうが、その実現にはかなり
の時間を要すると考えています。

297 :hidebou:2011/07/17(日) 14:13:35.21
私の立場からすれば、はじめからHTABOX用ソース、TZB用ソース、.......
を複数管理しようとは思っていないわけで、同一なプロジェクトが生成する
外観の違いをそれそれの呼称で呼ぶという状態が理想です。その外観の違い
は、同一EXEが実行対象と認識するHTMLファイルで演出されてゆくということ
になります。ですからTZBとHTABOX3のバイナリを比較するとリソース部分しか
違わないという事になると思います。で、TZBやHTABOX用に迷路や救急統計を
書いても違うのはリソース部分だけということになります。例えばベースと
なるネイティブコード部に修正の必要が生じても単に格納し直すだけで更新
は完了することになります。

298 :hidebou:2011/07/18(月) 00:35:48.10
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。GUIの配置を見直しツールバーは各エディタに存在するもの
としました。また、無駄な記述を排除したのでやや動作が軽量になりました。
内輪ネタですが、このアウトラインエディタは私にとってはTZB及びHTABOX用
開発エディタですので、フックDLLを配置した起動でデバッグを受け入れるこ
ととした点が最も重要な変更箇所となりました。

299 :hidebou:2011/07/18(月) 15:33:24.30
ユーザー定義型のエンコード規則について考えてみました。基本的に単純な
一段BASE64動作としてこの変換規則をユーザーがキーとして設定できるとい
うルールにしてみようかと思います。通常のBASE64は
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
という並びなわけですが、この順番を任意な並びに変更してエンコードと
デコードを行うものです。無論変更された並びはEXE内にキーとして極めて
難読な形で保存しなければなりません。

300 :hidebou:2011/07/18(月) 15:42:18.20
並びかえるといってもこの64文字をすべて定義する必要はなく、重複の無い
形でこの64文字中の任意な文字列が与えられた場合、一定の規則で64文字を
並び替えるというルールがスマートだと考えています。気の短い人は[A]と
いうキーだけでエンコード、デコードを行えますが、誰かが試しに[A]でデ
コードを試みる可能性は高いですから、もっと長いキーを使いましょうと
いう展開になります。

301 :hidebou:2011/07/18(月) 15:52:04.75
従来のHTABOXの場合はランダムビットスクランブルを多段で行って更に変形
BASE64を多段で行うというものだったのですが、今のところエンコードによ
るソース隠蔽はあくまでカジュアル(お気軽)なものと位置付けていますか
ら「素人目には見えない」でよろしいんじゃないかと考えています。

302 :hidebou:2011/07/18(月) 22:38:01.05
スクリプトのエンコード、デコードを繰り返す時に長大なスクリプトをいち
いち範囲指定するのが面倒なものですからSHIFT+CTRL+Sでカーソル位置から
</script>直前までを選択、SHIFT+CTRL+Cでカーソル位置から*/までを選択
という機能を追加したら作業が夢のように簡単になりました。でもこういっ
た部分は個人の好みに左右されますから、マクロ階層とは別にショートカッ
トキー階層を用意してカスタマイズできるようにすべきと考えています。

303 :hidebou:2011/07/19(火) 20:01:06.28
C/C++のプログラミングで最も根源的で重要な課題は、従前に宣言された型
しか有効ではないと言うことです。静的にリンクされますので当然と言えば
当然なのですが、これを回避する方法の一つがIDispatchのような基底クラ
スの導入です。「こんな関数ありますか?」「このIDですよ」という手間を
設けることによって、クラスの記述位置を意識しないコーディングが可能で
す。

304 :hidebou:2011/07/19(火) 20:16:57.54
でも今日、もっと高速にそれを実現する手法が用意されていることに気づき
ました。HWND又はスレッド間のメッセージ通信です。HWND又はスレッドIDが
確定していればそのクラスがどこに記述されていようがトリガーを引くこと
ができますし、COMオブジェクト間のやりとりが複数回のメッセージで構成
されることを考えれば、よりシンプルで高速な手法なわけです。とっても
今更な発見なんですが、気づいていないと余計な継承構造を導入して自爆す
る原因になりかねません。

305 :hidebou:2011/07/20(水) 19:38:15.51
私にとっての「大統一理論」とも言うべき母艦EXEの構築を行っています。
HTABOX3、TZB、OutLine、PCMプレイヤーを搭載されたHTMLファイルの違い
だけで実現できるという、明確な枠組みが存在しますから、そんなに悩む
ことは無いのですが、細かく書きすぎている部分をばっさり捨てて、全体
の構造を再度見直すという作業は、自分が理想とする物への勇気を試され
ている感があります。

306 :hidebou:2011/07/21(木) 22:51:21.25
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。デバッグ用DLLが添付されていますので、起動するとデバッ
グモードで動作するかを問い合わせるダイアログが表示されます。エディタ
で何らかのHTAを記述しHTML Viewした時に文法又は実行時エラーが発生する
と通常通り登録されたデバッガが起動するはずです。このデバッグモードで
のHTMLページは全て別プロセスMSHTA.EXEが生成したダイアログウインドウ
ですから、普段どおりにデバッガが起動するわけです。このEXEはOutLineと
いうよりTZBの原版という位置づけになっています。タブスタイルが選択でき
、タブ上に追加された×ボタンでページを削除できます。

307 :hidebou:2011/07/23(土) 19:27:50.32
ttp://kuroda.bglb.jp/htabox/outline.zip
を更新しました。Struct Designタブで個々の要素にビットマップ情報を持た
せることが可能となりました。WIN32で各種コントロールを設計しHTML中のス
クリプトから利用する手法の最終チェックの意味でposition:absoluteに追従
する走り書きコントロールを実装してみました。また、従来HTML中のエレメン
トを基準に何らかの拡張を行う場合はID必須としていましたが、今回の最終
チェックの過程で、単なるエレメントとして渡されても対応できるようにし
ました。TZB、HTABOXでの各種コントロールは極めて単純なスクリプトで利用
可能となります。

308 :hidebou:2011/07/24(日) 14:12:48.65
全てを統合した環境の仕様が完成しました。実行HTMLへ提要されるディスパ
ッチ中にTZB名前空間があり、TZB系の機能はそこで提供されます。従来はあ
らゆる機能をEXE側へ追加することで、最終的に万能なディスパッチを形成し
ようという方向性でしたが、本体EXEはシンプルで汎用なものとし、リソース
スクリプトを切り替えることによって変幻自在なEXEが生成されてゆくという
手法が、横着な私にぴったりだと考えています。私は常に同じWIN32プロジェ
クトを開くのですが、目的アプリケーション用のリソースへ切り替えてコンパ
イルを行う訳です。根幹の部分でバグフィクスが行われれば、すべてのアプリ
ケーションのバグフィクスも完了したことになります。

309 :hidebou:2011/07/24(日) 14:30:24.70
今回はWindows上のHOOKを徹底的に解析していた時期があったのですが、二つ
のプロセスにまたがったC++クラスインスタンスの維持という課題をクリアす
ると従来のCによる原始的なHOOKでは記述しにくい動作を記述することができ
ます。手っ取り早い表現を用いればもう被HOOKアプリケーションは誰かが書い
たものではなく、私が書いたかのように動作をカスタマイズすることができま
す。しかも私の知る限りWindows上でHOOKを拒否するすべは存在しませんから、
IEだろうがFOXだろうがC++で書かれていようがJavaで書かれていようが、あら
ゆるアプリケーションにちょっかいを出せると考えています。

310 :hidebou:2011/07/24(日) 14:43:39.12
通常本体アプリケーションの拡張はいわるゆ「プラグイン」で行われるわけ
ですが、その場合あくまでも従属的で制約の多い立場でしか動作できません。
それに対しHOOKは本体アプリケーションがシステムと交信する情報を奪った
り、摩り替えたりできますし、HWNDを相手側実行プロセス空間で握ることが
できますから、相手を逆に従属させることができます。

311 :hidebou:2011/07/24(日) 22:36:08.00
やっとHTABOX300というプロジェクトを揺ぎ無い信念で作成することができま
した。この絶望の淵の中で新たな生命が誕生しました。毎回そう思うのです
が、私の愚かさも、私の賢さも、このプロジェクトに凝縮されています。


312 :hidebou:2011/07/24(日) 22:59:20.64
新たなHTABOXはソースコードをEXE格納する際に3種類の実行モードを選択可
能にする予定です。フックDLLを添付し、実行環境でMSHTA.EXEを起動する完
全MSHTA.EXE動作、内部でMSHTA.EXEをエミューレートしMSHTA.EXEを必要と
しない従来の動作、そして最も軽量に動作するだろうHTMLダイアログ動作で
す。ソースエンコードはエディタ上で行えます。ただしフリーバージョンで
は単なるBASE64エンコードとし、固有のエンコードが可能であることを示す
程度に留めます。アイコン、バージョン、外部リソースはEXE生成時にコント
ロール可能とします。拡張機能ディスパッチ抜きに上記機能を搭載したα版
を早期にお見せしたいと考えています。

313 :hidebou:2011/07/25(月) 19:31:18.79
HTABOX With Editorではソースを編集して実行、ダメならまた編集して実
行という事を行える状態にしますが、HTAインスタンスはプロセス中に一個
でなければなりませんから、従来手法では実現できませんでした。今回は
やや面倒でもフックDLL中にEXEと同等なWindowClassを置いてそれを実現し
ます。ただし、空ダイアログによるディスパッチ提供を別プロセスから行っ
た後の被フック環境では特定の操作を行った場合、自身documentへのアクセ
スでも0x80004005が報告される事を確認しました。これはあくまでも限られ
た状況下でしか発生しませんから全体のパフォーマンスを低下させるもので
はありませんが、このフックによる別プロセス動作はあくまでもエディタ環
境からの起動に限定すべきという暗示にも受け取れます。したがってEXE格納
後のHTA起動はDLLやMSHTA.EXEの存在に依存しない従来型インプロセス起動と
すべきというのが今日の結論です。

314 :hidebou:2011/07/25(月) 23:21:28.01
最後にいまだ触ったことの無いバージョンリソースについて調べてみました
。結論から言うとリソースとして扱うよりバイナリファイル中の目的文字列
置き換えで処理した方が柔軟性があるようです。土台、著作表示やバージョ
ン表示を後から変更しようというのは、ややダークな話題になりますから、
一般に解説されている分野ではない気がします。


315 :デフォルトの名無しさん:2011/07/26(火) 23:13:43.29
>>311
お疲れ様です。努力が結実したこと、嬉しく思います。
「受難は天に登るための階段だ」という古いことわざがあります。
困難を憎まず、うまく味方につけて下さい。
その才能の高まりが、正当に評価される日を信じて止まないです。
めっきり暑くなってきましたが、どうかお身体にはお気をつけ下さい。

316 :hidebou:2011/07/27(水) 03:20:55.33
>>315
ありがとうございます。未だ食うに至らず、枝豆を収穫するバイトでなんと
かサーバーを維持する通信費と電気代を維持するありさまですが、夢と闘志
だけは未だ衰えず、私が存在した意義を少しでも残せればと奮闘しておりま
す。どうしても手探りの分野では安定度という点がウィークポイントになり
がちですが、現在HTABOXの原版EXEで実際にテストアプリケーションを開発す
る試験を繰り返しております。

317 :hidebou:2011/07/27(水) 03:44:37.18
今日は、あれこれ試しながらHTABOXでのアドバンテージとしてHTMLイベント
をより高速に伝達して描画に反映させることはできないのかという課題に取
り組んでいました。最初の発想としてはHTMLウインドウの上にレイヤー階層
を置いて、イベントをキャッチすればいいのではないかと考えたのですが、
レイヤーはディスクトップを親としたPOPUPでなければならずHTMLウインドウ
と連携させた場合むしろ散漫な動作を生み出すという結果でした。

318 :hidebou:2011/07/27(水) 03:55:22.62
で、ためしにJScriptで記述してある部分をVBScriptにしてみると案の定速度
は向上します。原理的にはパース後のVBScriptはC++によるCOM操作と同等な
速度で動作するはずです。それに対しJScriptはその柔軟性故にIDispatchEx
を前提とした動作となりますので、最も高速であるべき配列操作においてさえ
Arrayディスパッチに対してGetDispIDとInvokeExを繰り返す規格から逃れるこ
とはできません。

319 :hidebou:2011/07/27(水) 04:09:40.70
将来、動作環境に.NETが必ず期待できるとなれば、立ち上がりこそ時間がか
かるもののJScriptアセンブリとHTMLを融合させることでVBScriptに近い処理
速度を達成できるはずですが、現状においてHTMLアプリケーションを開発し、
そのコードをJavaやC++へ移植する予定が無いならば、VBScriptで記述する方
がいいと結論付けます。JScriptに生のSAFEARRAYを扱う機能を追加すること
はやぶさかではありませんがVBScriptという道具が実在する訳ですから上手
に使い分けるというアプローチが正しいと思います。

320 :hidebou:2011/07/29(金) 15:14:45.03
HTABOXのHTML実行速度実験をやりながら、Mazeのマウス座標判定アルゴリズ
ムを見直し、JavaScriptでのオブジェクト参照を極力配列参照に置き換えて
処理を軽量にしました。
http://kuroda.bglb.jp/maze/mokuji.htm
このWEB版はFoxでの動作も含まれますからあくまで素のJavaScriptです。外
観を形成する画像も一新しましたので、遊んで、コードを眺めて、コードを
書き換えて、楽しんでください。

321 :hidebou:2011/07/29(金) 15:33:37.68
機械という奴は血も涙もないマウス座標判定をしますので、今回は現在座標
と従前判定座標との間に飛ばされたと思われるブロックが一つ存在した場合
に、擬似的に飛ばされた座標でも判定を行うようにしました。したがって角
を曲がる場合、ショートカットしても素通りされたブロックが1つなら通常ど
おり経路が継続します。

322 :デフォルトの名無しさん:2011/07/30(土) 13:42:29.04
>>319
JSは参照渡しをサポートしてないから
使いたくても使えないAPIがたまに出てくる
でもJSの柔軟性は捨てがたい

そういう意味でもVBSとの使い分けは必要になるね

323 :hidebou:2011/07/30(土) 22:45:27.66
今日はHTABOX、TZB、....という複数のプロジェクトをどう配置してソースを
共有すべきかについて勉強し、結論を出しました。通常はライブラリとして
奥まったディレクトリに共有ソースを置くのでしょうが、私のように再イン
ストールを衣類の洗濯のような感覚で行う人間はうっかり置き忘れる可能性が
出てしまいます。そこで親にはソースやヘッダだけを置いてプロジェクトを作
らず、複数の子ディレクトリに存在するプロジェクトからそれを参照するとい
う方式にすると、大変管理しやすいものになるようです。

324 :hidebou:2011/07/30(土) 22:57:05.67
JavaScriptがJavaScriptであるかぎり高速化を謳ったところで、たかが知れ
ているという事実を私はある意味素敵な事だと感じています。多くの人がそ
の速度に不満を持ちながらもクライアント側WEBアプリケーションにおける
事実上のスタンダード言語として使用されている訳ですが、ターゲットをIE
に限定できるHTMLアプリケーションの場合、その実行速度を劇的に改善でき
る可能性を秘めています。

325 :hidebou:2011/07/30(土) 23:08:51.91
VC++コンパイラはExpress Editionに限りますが無償で提供されていますから
適切なヘッダファイルさえ設計できればJavaScriptソースに若干の制約を加え
るだけでネイティブコンパイル可能だと予測しています。ここで言うネイティ
ブはあくまでもC++側のCOM呼び出しに置き換えるという意味ですが、素のJava
Scriptとは異次元な速度を実現できるはずです。

326 :hidebou:2011/08/02(火) 07:48:53.69
枝豆のバイトが本格稼動したので、ソースを書く時間は少なくなりました。
朝5時半から畑で収穫を行い午後5時まで脱穀や選別に汗を流しています。こ
ういう生活をするたびに思うのですが、余暇にプログラミングを行ういわゆ
る「サンデープログラマー」には越えられない壁が存在すると思います。
結局世界に類を見ないチャレンジングな事を実現するためには「死線を越え
る」くらい「不退転な覚悟」が必要です。一仕事終わった後にそんな気が起
こるわけがありません。ですから私は4年間とても幸せな時をすごさせてもら
ったんだとあらためて感じるのです。

327 :hidebou:2011/08/03(水) 18:28:15.26
HTABOXがWSH起動になった背景はデバッグをスムーズに行うためだったわけで
すが、HTMLウインドウの表示、非表示をコントロールできるというメリット
を生み出しました。現在は別プロセスMSHTA.EXEをフックで服従させてHTABOX
互換動作を可能としてますからわざわざWSH起動しなくてもデバッグできるの
ですが、WindowsXP以降のマニフェスト機構を利用してレジストリ未登録COM
をWScript.exeに認識させれば従来は不可能だったトリックを実現できますの
で、勉強してみたいと考えています。

328 :hidebou:2011/08/03(水) 20:10:41.66
上記分野については具体的なサンプルを探すことにあまり苦労しないようで
す。私の知る限りwscript.exeはsystem32に必ず存在しますので、コピーして
自ディレクトリに持って来れば例え疑似餌でも喰らい付くという展開です。
HTML中のスクリプトパースは従来独自の内部スクリプトエンジンで行ってい
ますが、これはスクリプトスコープにHTMLインスタンスさえ出現させることが
できれば何でもいいんです。したがってHTMLスクリプトスコープでWSH.Sleep
とかを呼ぶことに全く問題は無いと予想します。また、将来XPの存在を意識し
なくて済むようになれば、HTML中のスクリプトエンジンを.NETエンジンに置き
換える予定です。JScriptの場合Fast-なら従来互換が保障されますから必要に
応じ.NETライブラリを使えるという新たなステージを提供することができます。


329 :hidebou:2011/08/04(木) 18:48:17.59
マニフェストによる未登録COMで使えるのはCOMDLLのみでLocalServer32のEXE
はプロセス境界によってインスタンス化できないというのがsocial.msdnでの
結論になっているようです。ですから手法としてはダミーDLLを介して異プロ
セス間でのCOMインスタンス共有という事が必要になりそうです。マジックを
披露するためには必ずネタが必要で、それはいつもマジシャンの袖の中に隠さ
れているということでしょうか。複数の手段が候補にあがりますので絞り込む
のにすこし時間が必要かも知れません。

330 :hidebou:2011/08/04(木) 21:05:41.75
意外な事に、wscript.exeは移動すると起動しないようですね。昔はどこへ
持って行っても起動できたと思ったのですが、5.6と5.7との相違ということ
でしょうか?やはり正攻法はwscript.exeの非公開関数攻略なんでしょうが、
今後の課題ということにして、HTABOXは通常のHTMLファイルでの動作を基本
とし、表示前、表示後の動作をコントロールしたい上級者向けに内部スクリ
プトエンジンからの起動、当該動作をデバッグするためのCOM登録という流れ
にしようと思います。

331 :hidebou:2011/08/04(木) 21:24:20.35
330を訂正します。動かないように見えたのはマニフェストが不完全だという
理由でした。

332 :hidebou:2011/08/04(木) 21:48:25.38
ただ、wscript.exeは実在ソースファイルが無いと起動できないでしょうね。
たとえそれがeval一行だとしてもhoge.jsという実在が条件となるならプロ
グラムのファイル構成としては美しくないと言わざるを得ません。せっかく
TypeLib駆動のEXECOMサーバーを開発していましたので、マニフェストによる
未登録COMがらみは先送りという結論は変化しません。

333 :hidebou:2011/08/05(金) 19:53:58.86
話題は寄り道しますが通称「ウイルス作成罪」について私見を述べます。
ソフトウェアが製造物責任法の範疇に含まれなかった事は、プログラムとは
何たるかを踏まえた正しい見識と感じていました。今度は使用者が「意図し
ない動作」と判断しただけで作った人は刑事罰という法律のようです。


334 :hidebou:2011/08/05(金) 20:15:01.89
私のようにあらぬ嫌疑をかけられても正々堂々説明しようという覚悟の人間な
ら問題は無いのですが、検挙されたという報道だけで社会的に致命的なダメー
ジを負う人間はプログラムを発表できないという展開になるわけです。
ここで問題になるのは「意図的」か「バグ」かですが、司法の世界にバイナリ
が読める人間はいないでしょうから「疑わしきは罰する」になりかねないと
感じます。


335 : 忍法帖【Lv=23,xxxPT】 :2011/08/05(金) 22:46:29.17
いまの菅直人の拉致に関連する人物が絡む団体への政治資金問題も一切無視するのが日本のメインストリームのマスコミです。
かつては人権擁護法案の危険性も完全無視したのが日本のメインストリームのマスコミです。
ウィルス法の危険性についても、そこから派生する問題意識を訴えるような番組なんて見たことないです。
作者さんが、時の政権や公安ににらまれるような政治運動に絡むようなことがないように祈るだけです。

336 :hidebou:2011/08/06(土) 03:25:41.41
人間の価値観を突き詰めると「食べる為に生きる」のか「生きるために食べる」
のかというところへ行き着く気がします。「自分の懐が痛むかどうか」が全て
の発想の原点でなければならないとしたら、私はこの世界とは相容れない存在
なのかも知れません。

337 :hidebou:2011/08/06(土) 13:15:16.30
HTABOXのWSH起動デバッグに対応すべく全公開ディスパッチをタイプライブ
ラリ対応モードへ変更する作業を行っています。今のところCOM登録して外
部スクリプトから内部ディスパッチを使うアプリケーションはHTABOXだけ
なのですが、メインソースコードは全アプリケーションが共有して使用しま
すから、潜在的に全てのアプリケーションは自身をEXEサーバーとしてレジ
ストリ登録可能で、そのためのボタンが有るか無いかの違いということにな
りそうです。

338 :hidebou:2011/08/09(火) 09:21:29.58
枝豆相手のバイトですから、成長の具合でお休みが生じたりします。今日は
DirectDrawをHTABOXに搭載する仕様を決定し、簡単なゲームでもお見せでき
ればという課題で勉強しています。DirectDrawについてもオリジナルな提言
をしたいポイントがありまして、システムの解像度とカラーディプスを奪っ
た状態でのウインドウ表示をメインにしたいと思います。単なるウインドウ
表示ではGDIが足を引っ張りますし、全画面表示ではメニュー等のコントロ
ールが使えないので双方のいいところだけを使おうという展開です。

339 :hidebou:2011/08/11(木) 21:13:07.68
http://kuroda.bglb.jp/htabox/directdraw7.zip
をDirectDrawエンジンのコンセプトとして公開します。ウインドウとしてメニ
ュー、タスクバーを表示しながら、解像度自体を変更しています。また、タス
ク切り替え(ALT+TAB)が生じた場合GDIディバイスにVRAMのスナップショット
を表示しています。まだ改良の余地はあるのですが、私の提案するDirectDraw
ウインドウの方向性はご理解いただけると思います。

340 :hidebou:2011/08/11(木) 21:26:38.79
色深度については軽量さと発色のバランス、また、もはや256色モードでは動
作しないディバイスも存在することから65536色モードを基本とする設計とし
ています。使用する画像はTrueColorでかまいませんが、内部で自動的に減色
処理を行います。ただし、COMとしていかにデザインすべきかが煮詰まってい
ませんのでHTABOXへの実装は今回のリリースで行わない可能性が高いと考えま
す。

341 :hidebou:2011/08/22(月) 21:38:15.95
久しぶりに休みだったので、サブの開発環境作成に時間を割きました。
PV700MHzという低スペックなノートなのですが、開発環境というものは意識
して低スペックにしないと、CPUパワーに依存したルーズなコードを放置して
しまいますので...という貧乏人特有の言い訳を用意しています。VS2005以降
は低スペックマシンだと重くて使えませんからVS2003を持っている幸せを噛み
締めつつ、そのインストールの面倒さに閉口する一日でした。

342 : 忍法帖【Lv=29,xxxPT】 :2011/09/05(月) 13:46:29.75
元気出せ日本

343 :hidebou:2011/09/09(金) 07:03:05.54
収穫すべき枝豆も残り僅かとなったようです。4時で起床し20時には横になる
という生活はとても健康的なのですが、頭の中はリセットぎみで、次に何を
書くべきだったのかソースコードを熟読しないと思い出せないでしょう。
良い方向にとらえれば、過去の無駄なしがらみに気づく機会になるでしょうが。


344 :hidebou:2011/09/19(月) 00:05:14.38
コードのことを考えない時間が長くなればなるほど「もう書けないかも」と
いう不安に襲われます。年齢を重ねると何日もの間ひとつの問題へ向けて思
考とコーディングを繰り返す気力も失せてしまうのではないかという不安で
す。このブランクを「災い転じて福」となすように過去のしがらみを断ち切
った開発環境の構築を行っています。

345 :hidebou:2011/09/19(月) 00:27:48.89
具体的には.NETのJSコンパイラを活用した自分用ツールの開発手法について
煮詰めています。従来はHTAまたはWScript.exe用JSでしたので厳密な文法チ
ェック無しに実行時デバッグですべてを修正していた訳ですが、.NETのJSコ
ンパイラを導入すればよりシンプルなコードで、概ねのことは自作COM無しに
処理することができます。.NETの欠点はアセンブリがキャッシュされるまで
のタイムラグですが、あくまでも「自分用ツール」なのでその点は無視でき
ます。

346 :hidebou:2011/09/22(木) 22:15:02.91
.NETのJSコンパイラを使って幾日か経過しましたが、規模の小さな実験用
データでは発生しないトラブルが実用的な規模だと発生してしまうことに
気づきました。具体的には数百キロバイト程度の文字列に対して連続した
正規表現操作を行うとVS2003のデバッグ環境がハングするというものです。
fast-の互換コードでも、fast+で.NETの正規表現クラスを使っても同じ症
状が出ます。まぁやってみなければ判らない事でしたので、時間が無駄に
なったとは思いませんが、かなり気が滅入りました。逆に言えばWScriptや
HTAでのJScriptがいかに枯れて堅牢なものであるかを再認識した次第です。

347 :hidebou:2011/09/24(土) 00:25:17.02
最近、皆さんが動かせるものを公開していないので粗品をプレゼントします。
ttp://kuroda.bglb.jp/jscript/clipboard.zip
これはWSH等へクリップボードへの読み書きを提供する軽量なWIN32.EXEです。
.NETだとクリップボードクラスがあるのですが、WSHには無いということで、
皆さんどうしているのかな?っと検索したら、回りくどい手法のオンパレード
でしたから、標準入出力経由で当該機能を実現するEXEを作りました。

使い方は添付のtest.jsをご覧ください。現状で対応している形式はCF_TEXT
のみですが、これだけコンパクトなEXEならDLLと同等なレスポンスで動作す
ると思われます。

348 :hidebou:2011/09/24(土) 00:50:06.34
横着な私にとって、複数のHTMLページのリンク構造を管理するのは最も避けた
い仕事ですから、長大な単一ドキュメントから複数HTMLページを生成してサイ
トへ仕上げる仕事はFrontPageにやってもらうのですが、FrontPageのVBAが曲者
でして、リンク構造が深いと再帰動作でお亡くなりになる傾向があります。
また、単一ページへの操作は成功しても連続したページを高速に操作すると
毎回違った破綻の仕方を見せてくれます。

そこでWSHによる外部操作と内部のDcumentオブジェクトに頼らずエディタの
HWNDへ直接WM_COPYやWM_PASTEを送信する手法で目的を達成しました。その
時必要になったのが上記Clipboard.exeという展開です。

349 :hidebou:2011/10/11(火) 16:37:17.51
2週間ほど身辺のガラクタ等を整理し、プログラミングとは無関係な時間を
過ごしました。当初は3日で終わるつもりだったのですが、いっそのこと
従来の仕事を全く客観視できるほど、距離をおいてみたいという気持ちに
なりました。

350 :hidebou:2011/10/20(木) 00:42:53.07
Windows2003Serverのセットアップを行っています。ところでASP.NETとは何
なの?をまったく知らなかったものですから、単純なサンプルを表示させ、
ブラウザ側のソースを見て驚愕しました。考え方として最終的にサーバーが
レスポンスするHTML+ScriptはEXEのバイナリコードみたいな存在で、それが
どんなに入り組んでいても開発者はソースだけ見ていなさいという発想なん
ですね。これを積極的に活用するつもりは無いのですが、もしブラウザ側が
エラーを報告した場合、EXEに例えればクラッシュしたメモリアドレスから
ソース中のバグを推測するようなもどかしさが発生するんじゃないかと感じ
ました。

351 :hidebou:2011/10/22(土) 12:55:56.71
IIS6.0のISAPIフィルタとASPで共有するCOMDLLという重箱の隅をつつくよう
な分野のプログラミングをここ数日やっているのですが、データベース系の
操作を連続させるとエラーが出るという症状に悩んでいました。

IIS5.xとIIS6.0の最大の違いはスレッドタイプの違いだということは情報と
して頭の中にはあったのですがSTA(シングルスレッドアパートメント)と
MTA(マルチスレッドアパートメント)で実際に何をどう変化させるべきな
のかについて勉強不足だったものですから解決に時間がかかりました。

352 :hidebou:2011/10/22(土) 13:06:09.68
IIS5.x以前のISAPIフィルタにとってカレントスレッドは通常のスレッドです
から必要な時にSTA又はMTAの初期化動作が必要になります。初期化動作が必要
という事を裏返せば終了動作(CoUninitialize)も必要ということです。これは
面倒なことではなく初期化と終了の間に生成したCOMインスタンスは必ず破棄
されるという意味でむしろわかりやすいソースコードになると感じます。

353 :hidebou:2011/10/22(土) 13:30:17.88
IIS6.0のISAPIフィルタにとってカレントスレッドは既にMTA初期化されたスレ
ッドです。したがって初期化せずCOMインスタンスを生成できます。この環境で
COMインスタンスを生成する場合、COM側のMTA対応を前提としたコードでないと
2回目、3回目の呼び出しでエラーとなるようです。具体的には利用するインス
タンスをクラススコープに置いて、各メソッドは当該インスタンスを参照する
という書き方です。これを各メソッドの実行時に個別にインスタンス化しよう
とするとエラーが発生するようです。これはC++のCOMDLLに限った事ではなく
JScriptで書かれたASP中のオブジェクトでも同様と推察され、個々の呼び出し
時に new ActiveXObject するのではなしにできるだけグローバルなスコープ
で new ActiveXObject し各メソッドで利用すべきだと考えられます。

もし、IIS5.xから移植したASPやCOMがIIS6.0以降で得体の知れないエラーとな
る場合、原因の多くはこのスレッドタイプの違いによって生じていると考えら
れます。

354 :hidebou:2011/10/22(土) 14:00:45.12
ISAPIフィルタDLLを開発する場合、どうしても実際に稼動している状態での
変数値を確認したくなるのですが、WWWサービス自体が特殊な保護プロセスで
すから、大変面倒なことになります。また通常のIDE環境デバッグでは動作を
一旦停止するため、タイミングによってはエラーを再現できない可能性が高ま
ります。今回はISAPIフィルタ側からのWM_SETTEXTで文字列情報を受信するEXE
を書き、今まで疑問だったISAPIフィルタの仕様を確認することができました。

IISを根本からカスタマイズするにはWWWサービスから呼ばれないと動作しない
ASPやASPXでは限界がありますが、組み込みDLLを導入すれば高速で堅牢なもの
となります。時間がありましたらIIS周辺のISAPIやCOMについてのドキュメント
を作成して公開したいと考えております。

355 :デフォルトの名無しさん:2011/11/03(木) 21:37:35.21
メンテ不能なコードの件
ttp://www.kijineko.co.jp/node/672
メンテナンス困難なソースコード
ttp://www.kijineko.co.jp/node/925

公開されてるのに読めない・ビルドできないコードって面白い考え方かも

356 :hidebou:2011/11/05(土) 23:14:28.30
>>355
至極当然な話として受け止めました。書いていることを見せたくない派の私
でも、万が一人を雇うことになれば、私にとって可読性の悪いコードを書い
てもらいたくはないと考えるでしょう。私が予見する未来は、アプリケー
ションはもっと具体的な局面を想定したコンパクトなツールに分解されて行き、
オンライン上でそれらを組み合わせることで目的が達成される環境です。

何が言いたいかというと、複数のスタッフが協力しあう大規模なアプリケーシ
ョンは淘汰され、個人単位で管理可能なクラウドパーツが主役になるだろうと
いう気がします。そいういう環境ができて初めて「プログラマーの汗」が真に
報われることになるだろうと考えています。

357 :hidebou:2011/11/05(土) 23:23:25.50
で「ビルド可能な難読コード」というテーマの場合、私ならVisual Studioの
マクロでビルド可能な程度のエンコードを行うでしょう。実際にC++ソースコ
ード中に静的文字列としてスクリプトコードを埋め込まなければならない局面
用にそういうマクロをいくつか書いています。復元したい時にはその範囲を
選択してDecodeマクロを実行するだけですから最も堅牢で確実な手法だと考え
ています。

358 :hidebou:2011/11/05(土) 23:48:07.01
しばらく自分用のツールを書いているのですが、そいうことをしながら混沌
とした自分の考えを具体的な形に描き始めています。TZBを世に送り出そうと
して躊躇したのは「何か芯が足らない」「何をやりたいのかはっきりしない」
という感じがしたからです。今日やっと自分がやりたかった事を明確に表現
するイメージが浮かびました。

359 :hidebou:2011/11/06(日) 00:05:23.07
TZB形式で5つのエディタを編集可能とします。この5つとは
「HTML/HTA」「JScript」「VBScript」「JS.NET」「VB.NET」です。
このエディタ上のコードはHTABOX固有の拡張機能を利用できると同時に、
相互をCOMインスタンスとして呼び出し可能とします。そしてこの5つを
単独のEXEへ格納できるというものにすれば、私の仕事の集大成的なツール
になるだろうと思います。アプリケーションとしてのトリガを引く言語を
限定しないことによって、より自由な発想のプログラミングが可能になる
でしょう。

360 :hidebou:2011/11/22(火) 16:09:06.72
HTAで重い処理を行うと描画が追いつかないような状態になりますが、これは
HTAに限ったことではなく、WIN32で書いたアプリケーションでも全く同じだ
ということに今日まで気づきませんでした。要はメインスレッドのHWNDがス
ムーズにメッセージを処理できるかに帰着するわけで、重くて時間のかかる
処理はスレッドを投げて実行しなければ、いかにも素人の書いたアプリケー
ションという動作になるわけです。逆に言えばHTAやHTML環境のスクリプト
でも上手にスレッドをコントロールすれば洗練された動作にできるだろうと
考えます。

361 :hidebou:2011/11/22(火) 16:17:53.62
ただし、COMという要素が絡むとスレッドを跨げるインスタンスとそうでない
インスタンスが存在すると考えます。ディスパッチ系は基本的にシステムが
提供するマーシャリングでプロセスさえ跨ぐ柔軟性を見せますが、同一プロセ
ス内でも参照が破綻するケースを体験しています。すべては私の勉強不足なの
ですが、できるだけ洗練された環境を提供できるように分析を続けています。

362 :hidebou:2011/11/25(金) 13:13:12.49
従来はHTAウインドウ生成時にある程度クリティカルな状態となっていました。
これは生成の完了をdocument.readyStateで判断しようとしていたからです。
つまり生成途中のHTAインスタンスは、大忙しにもかかわらずreadyStateの
GET要求を処理しなければならなかった訳ですから、環境によっては生成完了を
検出できませんでした。

363 :hidebou:2011/11/25(金) 13:25:11.80
今日は発想を変えて、HWNDに到達するメッセージの流れからドキュメントの
生成完了を判断するというアルゴリズムを採用して、大変良好な結果を得ま
した。HTA生成時には何のストレスもかかりませんからごく普通に起動します。
また、ストレスが無いことによって非レジストリ登録ディスパッチを初期注入
するダイアログ手法もあらゆる環境で成功するという感触を得ています。後は
これをディバッグ用別プロセスフック環境でテストすれば、新たなHTABOXのス
レッドデザインが確立することになります。

364 :hidebou:2011/11/27(日) 19:48:16.93
HTML Application内のスクリプトからはスレッドの優先度設定ができません
から、どこか窮屈な動作になるんですが、今回はあらゆる手を使ってそれを
克服する努力をしています。スレッドの分散はもとより、積極的に複数プロ
セスを活用しようと思います。例えば.NET環境が存在する場合、自身のクロ
ーンEXEを起動してmscorlib::_AppDomainPtrを取得し、汎用なDLLをバックグ
ラウンドでキャッシュした後にプロセス越えで親プロセスへ渡すモジュール
を実験しています。これが成功すれば.NET固有の初回タイムラグを撲滅する
ことができます。

365 :hidebou:2011/11/27(日) 23:47:34.04
実験は成功したようです。効果のほどは実際にさまざまなコードを処理させ
ないと判断できませんが少なくともデフォルトより遅くなることはないと思
われます。これでHTABOX3.00の基本的な仕様を固める情報が出そろいました。

HTABOX3.00は原点に立ち返って通常のHTMLと完全に上位互換な仕様とします。
つまり単一なHTMLにタグと複数のスクリプトがあり、IEやMSHTAで動いていた
コードは絶対にそのままHTABOXでも実行できる状態とします。

366 :hidebou:2011/11/27(日) 23:56:51.95
HTABOXはHTML中のスクリプト言語にJS.NETとVB.NETを使用することができま
す。ただし、現状での.NET系言語に対する考え方はJScriptとVBScriptを補助
するクラスを提供するもの考えていますので.NET系言語から直接documentや
windowを操作するのではなしに、.NETクラスライブラリ機能やWIN32API機能を
JScriptとVBScriptに提供するものになると思います。

367 :hidebou:2011/11/28(月) 00:04:51.55
.NETでの補助が可能となったことで、スクリプトへWIN32API機能を提供する
オブジェクトの位置づけもより明確になります。.NETでできそうな事を用意
する必要はなくなるわけですから、音、描画、各種コモンコントロール等で
ネイティブコードだから実現できる切れを発揮することに専念できると考え
ます。

368 :hidebou:2011/11/28(月) 00:45:24.94
今回の実験でひとつ驚いたことがあります。COMの動作は結局メッセージのや
り取りですから、別スレッドでCOMを生成し、本スレッドから呼び出す場合、
別スレッドの方はGetMessageで動作し続けなければなりません。さもなければ
呼び出し要求に応答できず、オブジェクトではないと判断されてしまいます。


369 :hidebou:2011/11/28(月) 01:01:27.89
ところが.NETの場合、別スレッドでコードをスクリプトエンジンでパースし、
インスタンス化する動作を行い、ループ待機することなくスレッドが終了し、
パースしたエンジン等が破棄されても動作可能に見えます。おそらく.NETシ
ステムはインスタンス化されたCOM(アセンブリ)をシステム領域にストアし
アプリケーションのメッセージループとは切り離された状態で効率的に動作
させようとしているようです。これも実際にコードを走らせないとわかりま
せんが、うまく使えば通常のHTAならWM_PAINTにさえ応答できないような重い
動作の連続を平然とこなすことも可能だと考えられます。

370 :hidebou:2011/11/28(月) 21:38:52.41
HTABOXコア3.00デモを公開します。
http://kuroda.bglb.jp/htabox/htabox300.zip
添付HtaCall.exeへhtml1.htmをドラッグするとデモをご覧になれます。
今回は実行される結果よりHTML中にごく自然な形で.NETコードが存在する
ことに注目してください。JSのDLL参照宣言を除けば全く素の.NETコード
であることをご理解いただけると思います。

371 :hidebou:2011/11/28(月) 22:21:17.06
現状では.NETのGUI系との整合を考慮していません。たとえば.NETのファイル
ダイアログを表示することはできますが、2回目の表示で後ろへ表示されたり
します。ですから、フォルダ、ファイルについてのコモンダイアログは従来
どおりWIN32APIで提供する予定です。気軽にHTAへ.NETコードが書けるという
観点からもう一度.NETクラスライブラリを眺めてみると「宝の山」に見える
かも知れません。

372 :hidebou:2011/11/29(火) 05:55:02.94
今回の研究中にリッチエディットを使った拡張コンソールも出来上がりまし
た。プログラムの性質にはボタン等の静的コントロールで繰り返し同じ動作
を行うものと、ウイザードのようにストーリーがあって一連の動作を行うも
のの2種類があると考えます。後者の場合、画面が変移するよりも経過が見え
るコンソール型GUIの方が適しています。また、自分用ツールの場合はパラメ
ーターを限定するコントロールより、コマンド入力による指示の方が柔軟な
動作を実現できます。自由な色とフォントが使え、画像、HTMLを配置でき、
ハイパーリンクによるクリック動作ができるDOS窓がこの拡張コンソールです。
これはCOMDLLにしてさまざまな言語から使えるものにしようと考えています。

373 :hidebou:2011/11/30(水) 10:19:23.56
私はC++でヘッダファイルを作るのが嫌いです。というよりヘッダだろうが
何だろうが複数のソースファイルでものを管理するのが嫌いです。相互の
参照でエラーが発生した場合、大変わかりにくいバグになるからです。個人
がプロジェクトを管理する最大のメリットは全てをひとつのcppファイルで
完結させる事が可能なことだとさえ感じています。

374 :hidebou:2011/11/30(水) 10:28:57.87
ですから私の中での理想は、あらゆるEXEやDLLを単一cppファイルから生成
することなんですが、そのためには各アプリケーションの差異をリソースの
違いで表現できればいいんじゃないか?というある意味妄想めいた考えに固
執していました。つまりリソースであるHTMLがHTABOX手法でアプリケーション
を表現し、出現させるというものです。ですからHTABOXは私にとって単にHTA
として実行するものではなくC++環境でのアプリケーション管理手法でした。

375 :hidebou:2011/11/30(水) 10:37:57.00
しかし、実際には全機能を最終的にCOMの状態まで引き上げるには大変な労力
が生じる訳で、結局「ああではない、こうではない」とプロジェクト毎にcpp
ファイルを作っては、物置に放り出すという事を繰り返す羽目になっていまし
た。何かを書きながら「それっていつか書いたよね」と物置をかき回す日々に
なりがちでした。で、頭の悪い私は今やっと気づきました「プリコンパイル」
ですべてを切り分ければいいと。

376 :hidebou:2011/11/30(水) 10:57:22.91
HTABOXコア3.00はmain.cppを参照するEXEプロジェクトと、同一cppを参照する
DLLプロジェクトがあり、#defineで切り分けています。これが大変ラクチンで
気に入っていたのですが、これを複数のEXEに応用すれば...という恐ろしく基
本的な事に気づいて「あぁ、全てが解決した」という安堵感というか脱力感と
いうか自分の馬鹿さ加減への怒りというか大変複雑な感情がこみ上げてしばし
呆然としてしまいました。本当に私的にはこれで全てが解決しました。単に
#if defined(hoge) 〜 #endifで複数のWinMainを切り分て単一cppを常に編集す
るという単純な発想で、何らかの修正があらゆるアプリケーションへ即座に適用
される状態を作り出せるし、もう物置をかき回しに行く必要は無いわけです。


377 :片山博文MZ ◆0lBZNi.Q7evd :2011/12/03(土) 17:18:42.15
がんばれ、がんばれ、hi・de・bo・u

378 :hidebou:2011/12/03(土) 23:27:56.20
ありがとうございます。3.00では全てを見直しました。特にHTAやHTML側の実
行コンテキストを尊重した設計としておりますので、全体にスムースな動き
になります。そのために裏方では高速な文字列クラス、Invoke速度の向上等、
今までの全てを投入したものになります。また、3.00の目玉として「動かせる
ヘルプ」を実現すべく、その部分を書いています。もう5年近くこのことばか
り考えてきましたので、良くも悪くも「私のすべて」を出し切ったものにした
いと考えています。

379 :hidebou:2011/12/04(日) 20:58:42.05
今日は朝一番でHTMLダイアログのハング状態を見せ付けられたものですから、
神様のおぼしめしどおりにモーダル、モードレスのHTMLダイアログについて
徹底的に再考しました。結果的にダイアログのフレームはWIN32で形成しクラ
イアント領域にHTMLを表示する方式としました。非表示状態のHTMLを先行して
インスタンス化し、取り込むことで従来より切れのいい出現状態とする事が
できたようです。

380 :hidebou:2011/12/09(金) 12:18:34.87
HTABOX3.00でのソースエンコードシステムについて暫定的ですが仕様を決定
しました。今回のコンセプトとしてHTML側のコンテキストからトリガを引く
ことから、各スクリプトブロック冒頭に待機関数が置かれるものとします。
これにより、当該スクリプトブロックでは拡張ディスパッチの生成タイミン
グを気にすることが無いコードを記述することができます。
HTABOX3.00は引数無しで起動された場合エディタとして機能し、任意なHTML
ファイルを編集できます。エンコードは単に対象スクリプトブロック全体を
選択し、シュートカットキーを押すことで行われます。待機関数コードは自
動的にスクリプト冒頭に追加されます。

381 :hidebou:2011/12/09(金) 12:23:42.99
現時点で挿入する予定の関数は下記のようになります。
<script language="jscript" id="JS001">
function Parse()
{
if(typeof(WIN32) == "undefined") window.setTimeout("Parse()", 1, "JScript");
else WIN32.Parse(document.getElementById("JS001"));
}
Parse();
/*
エンコードされたスクリプトコード
*/
</script>

<script language="vbscript" id="VB001">
Function Parse()
If TypeName(WIN32) = "Empty" Then
Call window.setTimeout("Call Parse()", 1, "vbscript")
Else
Call WIN32.Parse(document.getElementById("VB001"))
End If
End Function
Call Parse()
'
'エンコードされたスクリプトコード
'
</script>

382 :hidebou:2011/12/09(金) 12:29:59.47
3.00のWIN32ディスパッチは従来よりスムースに追加されるため実際に上記
関数を置き、はたして何ループ待機を実行したのかを調べると私の環境では
常に0回と報告されるのですが、万が一にもWIN32が未初期化な状態ですと、
エラーダイアログを拝むことになりますので、保険のようなものと考えてい
ます。

383 :hidebou:2011/12/11(日) 23:56:01.50
ttp://kuroda.bglb.jp/htabox/htabox300.zipを更新しました。
HTABOXコア3.00は引数無しで起動されると、TZB形式のウインドウを表示し
ツリー付のヘルプページとシンプルなHTMLエディタをタブで切り替えること
ができます。エディタで添付test.htmを開き、スクリプトブロックのエンコ
ード、デコード、編集中コードのHTA実行を行うことができます。エンコード
した場合スクリプトは内部ActiveScriptエンジンでパースされますので、VB
のMsgBoxは使えないことに留意してください。久しぶりだったので私はこの
事実を思い出すまで、何処かで踏み外しているんじゃないかと焦ってしまい
ました。

384 :hidebou:2011/12/12(月) 00:23:44.70
私が開発の対象としている分野のユーザーインターフェースを考えた場合、
対話的に操作とその操作による結果を表示するためにテキストエディタは不
可欠な要素と考えています。EXE格納動作はボタンやリストの選択ではなしに
エディタ上に出現するハイパーリンクをクリックしてもらい、そのレスポンス
をエディタ上に表示しながら、EXEを生成するということを考えています。
ただし、このRichEditというコントロールはバージョン間の差異があるので
私の環境で動くものが、他で動くのかという不安が付きまといます。今回は
MSDNが正しいとすれば2.00をインスタンス化するコードなのですが、動きが
変だという方は、ここでもかまいませんし、デモのヘルプに記載されたメル
アドでも結構ですから、環境をお知らせいただけると大変助かります。

385 :hidebou:2011/12/12(月) 10:02:56.20
インプロセスHTAやHTMLDialog生成の場合通常のプライマリースレッドとは
別系統のスレッドが生成され、相互にCOMを利用しあう場合ややこしい問題
が生じていました。今回の最大の改良点はここにあって、EXE側は何も押し
つけず、全てをHTML側の要求に答える形にしようという設計にしています。

でも素のHTMLがHTABOXに何らかの要求を出すことはありえないわけですから、
HTML側スレッドに侵入してHTML側コンテキストのメッセージを監視し、特定
のタイミングで要求を出すということになります。

386 :hidebou:2011/12/12(月) 10:17:00.39
この発想にたどり着く過程に別プロセスMSHTA.EXEインスタンスへHTABOXイン
スタンスを滑り込ませることはできないのか?という実験がありました。結果
的にこれは可能で、相手側コンテキストでトリガさえ引いてもらえれば、相手
側メモリ空間に送り込んだいかなるC++クラスでも自前EXEのそれと同等に動作
させることができるというものでした。まぁCPUは単にアドレスをなぞっている
だけですから当然と言えば当然なのですが。

387 :hidebou:2011/12/12(月) 10:26:19.01
もう何年前になるのか忘れましたが、旧HTABOXを書き始めた頃どうして○○
はできないのか?それを可能にするために何が必要なのか?私にはその答え
にたどり着く権利さえ無いのか?という焦りとも絶望感ともつかない複雑な
心境になりましたが、全てはWindowsがどうやってプログラムを動かしている
のかにあるわけで、その一端を理解できた今、諦めずに良かったと深いため息
をついています。

176 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)