ざつだん。
(00/07/01〜)
・ログを分離しました。
・「変身だ、俺だって'オリジナル'なんだ」
倉木麻衣のアルバムを聴いてみた。「Hey!Hey!Hey!」で「パクリ」だと言われてたヒトの奴です。SURFACEなんかもそうだけど、それなりに味はあるので、悪くないとは思うけど...。
・出張
とりあえず終了。はー長かった。思えば色々あったけど、「時間を拘束」されなくなったってのが一番デカいな。しかし、本当に終わったのだろうか...
・サミット
高速道路で福岡方面への乗り入れが規制されているようだ。
・突貫工事
仕事の関係で修羅場中...(^^; PPA作ってる暇が...
・「Secret of my heart」
倉木麻衣ネタですが、この曲は宇多田ヒカルというより、小松未歩っぽい。「輝ける星」とかに似てるかな、雰囲気が。
・まぁ、作曲したヒトが「狙ったんなら」それっぽくなってしまうのは仕方のない事ではないのかな?
・PPA作ってたら...
何の気はなかったけれど「MemCheck.Pas」噛ませてやったらメモリリークを検出。あいたたー(T_T)
原因を探っていたら、とある場所を発見。修正して、メモリリークはなくなったが、考えることしばし。
...「このソースTEADのパクリやん」
急遽、コメントアウトしてあったMemCheckを元に戻して、いろいろ確認すると、「ユーザー定義メニュー」のフォームを開くとメモリリークが...。がびーん。「ユーザー定義メニュー」を開く度にメモリリークを起こしますが、「何も登録しない」場合には発生しませんし、しょっちゅう開く場所ではないので、楽観視しています。もちろん次のバージョンで直しておきますが。
・TEAD作ってたら...
DEKOは物忘れが激しいので、修正したらその都度Helpを備忘録がてら作成する事にしています。何の気はなかったけれど、「Ctrl+Shift+S」を押してみました。
...「起動が遅いな、SHG-Editor」
気になりだすと止まらないので、こっちも修正。画像読込やホットスポット情報読込はもう殆ど高速化の余地がないため、しばし、考え込む。そうか、「HelpDesigner」の新しいコンテキストリスト読込の所で画像を表示するようにしたんだった。起動時にコンテキストリストを読み込むのはやめて、「次にプロパティウィンドウが開かれたら、コンテキストリストを(再)読込しなさいフラグ」を立てるだけにした。これは「リロード」と同じ理屈。気持、早くなったかな?もちろん正式版に反映しておきます。
・メモリリーク
「徹底的に潰す」のが私の方針なので、「メモリリークフリー」を密かに誇っていたのですが...。もちろん、そんなのソフトの「ウリ」にはできませんが...。頻繁に使うソフトというのは、僅かなメモリリークでもどんどん蓄積されますから無視する事はできません。Win9xではあっという間ですからね。そーいや、Win9xで4回コンパイル(再構築)するとメモリリークでコケる言語系を仕事で「触っています」が、あんなの論外です。
・メモリリークでコケる言語系
NT4.0でも10数回のコンパイル(再構築)で仮想メモリ(256MB!!)を喰い潰すというスバラシイ「仕様」だったりします(ヒント:アイコンがDelphi3ソックリ)。経験則からして「ファイル(ソース)のI/Oでファイルポインタを解放していない」事が原因のようですが、私がこの言語系の開発者でないのでハッキリした事はいえません。まぁ、普通のヒトは触る機会がないでしょうから、幸せですよね(^^;
ちなみにダイアログなのに最大化やサイズ変更ができたり、検索なんかのダイアログのテキストボックスに「Ctrl+V」でクリップボードから文字列を貼り付けようとするといきなりフォームが閉じたり(多分、ショートカットが重複している)します。あぁ、なんなんだろうなぁ?
・CLXはLINUXの夢を見るか
「おおっと、VCLはなくなるのかな?」、と思ったら、そうではないみたい。
「VCLはWindows専用のコンポーネントフレームワークとして提供されます」
って記載があるし。クロスプラットフォームとはいえ「VCLで何の問題があるのだろう?」と真面目に考えてしまったが、よく考えればDCU形式で配布になった場合、バイナリレベルでの互換性が問題になるのか。Linuxはx86ベースだとは限らない訳だし...。
・ネタにしろと言われたので
ネタにしてみました(^^; やなちゃんが昨日の雑談を読んで、何を思ったのか、「現在、自分が関わっているプロジェクト」のソースにMemCheckを喰わせてみたそうな。このプロジェクトは「1フォーム=1EXE」で構成されているようですが(私はオーバーヘッドの関係でこんな事はしませんが^^;)、なんと、開いて閉じただけで20数個のメモリリークが...。処理を行なった場合には50数個検出されたとか...(^^;
つーことは、大小合わせて100程度のフォームがあったら...メニューを移動するだけで...。ご愁傷様、やなちゃん。
・この事を報告すべきか悩んでいるらしい。
彼も今は「外注」の身ですからね。どなどなどーなー、ど〜な〜(ToT)
・今日は電話が多かった。
50回以上取ったんではなかろうか。新入社員でもあるまいて。
・今日は眠かった。
先日の件(「突貫工事」)で、ロクスッポ寝ていないから。8時間掛かっても終わらないバッチ処理を2回もやらなきゃいけなかったのにも閉口。
・Twincle Twincle,Little-Star
今日は七夕ですね。
・やっと
「突貫工事」が終わったみたい。さて、CDを40枚焼かなきゃ。
・PS-One
たかはしくんが買ったので見せてもらったが、「お弁当箱」みたい。多分、想像してるよりもかなり小さいと思うよ>まだ見てないヒト。
・「TEAD ver1.20/Blue-Version/TEAD-CUST ver1.07」
アップ。マイナーバージョンが上がったので、Vectorと正規ユーザーへの通知を行なわなくてはならない。今回も大した変更ではないのだが...。
1.「TEAD-CUST」用の機能を追加。
2.[オプション(O)]-[ユーザー定義メニュー登録(M)...]を開いた場合にメモリリークを起こす事があったバグを修正。
3.[環境設定ウィンドウ]-[ファイル]タブに「前回終了時に開いていたファイルを起動時に読み込む(O)」を追加。
4.ちょっと最適化
・「ちょっと最適化」
内部的には大幅な変更だったりするのだが、動作も、機能も変化は殆どない。不審な点を見かけたので修正したから、ひょっとしたら不具合の幾つかが直っているかもしれない(希望的観測)。
・ver1.2x系は...
大幅な変更が見られるかもしれません...(^^;
・あれれ...
なんだかんだやって、CDを40枚焼いて、ラベル貼って、あがったのがPM06:00で、ちょっとくたばって会社で寝て、起きたらAM03:00(つまり日付が変わってた訳)。
・DiabloII
社内で約2名ハマっている模様。
・K6-2+
ODP
んー、現状で手に入るSocket7用のCPUでは最速なのかな。下手するとK6-III
450よりも速いかも(K6-2+ 533だったら)。まぁ、今となってはSocket7にこだわる理由ってのは殆どないんだけれど...。
・昨日
5年程前に作った「阿○火山博物館」のチケット発券システムのトラブルで難儀する。再インストールだったのだが、覚えてないよなー。ターゲットはMS-DOSで動作するポータブルターミナルで、キーボードの付属していないタッチパネルタイプのもの。当然GUIベースで動作する。グラフィックはすべて自前で描画したっけ。観る機会があったら見て下さい(まぁ、無理でしょうが)。ちなみに開発言語はMS-C。
・バスストップ
ウッちゃんが言っていた「三井グリーンランド」とは、熊本県北部にある荒尾市の遊園地の事です。隣接して、円谷公認(当然か)の「ウルトラマンランド」があります。
・B'z「Juice」
ん、なんだか、ココ最近(ベスト除く)のAlbumの1曲目と「ギリギリchop」を合わせたような感じだな。まだ聴きこんでないけど。
・PPA
なんとか開発再開。ビルトイン手続き/関数の機構をもう少しで実装できるかなってトコ。
・P3A(Project-PPA)
もうそろそろ話してもいい頃なので、概要を公開する事にします。
・PPA(Poor-Pascal for Application)
つまりは、Delphiで使用できるアプリケーション組み込み型のPASCALインタプリタコンポーネントの事です。変数、ビルトイン手続き/関数を定義可能。SourceプロパティにソーステキストをセットしてPPA.Executeでインタプリタ実行を可能としています。
・型
IntegerとStringのみのシンプルな構造です。Integerは内部ではLongIntで動作します。
・マクロ
手続き;
手続き;
といった、バッチ構造も可能。変数を使用する場合には
var
変数:型;
begin
手続き;
手続き;
end.
のようにブロック構造にする必要がある。
・式
条件式は整数式のみ。
if ABC = 'DEF' then
のような比較に文字列式は使えない。このような場合にはStrcmp関数などを用意して問題を回避する。ただし、
変数 := 'ABC' + 'DEF';
といった結合式は使用できる。
・ブロック
ブロックのネストは可能。
if 整数式 then
begin
if 整数式 then
begin
end
end
else
begin
end;
こんなのもOK。
・引数
foo(foo(1,2),3+1)
のようにネスト可能。
・実装度合
「文」を実装すればとりあえず動作するものができる。現状でも関数電卓が作れる程度は実装してある。
・これを
「TEAD」に実装しようという訳。
・ライセンス
現状ではフリーにして公開する気はありません。「巻き込んだ人間」で煮詰めていって、実用に耐え得るレベルになってから考える事にします。
・参考文献(敬称略)
1.PJ(工学社) 1992'-1〜1992'-12 「オリジナルコンパイラの設計と実装(近成人)」
2.Oh!X(ソフトバンクパブリッシング) 1999春号,2000春号 「言語処理プログラムを作る(石上達也)」
3.PurePASCAL/PL0.PAS (藤井義巳/藤木健士)
4.TEditor (本田勝彦)
主に1,2でインタプリタの概念を、3で具体的な実装方法を、4でパーサーの作り方を勉強させて頂きました。
・実は...
なまじバッチ構造に対応するより純粋な「インタプリタ言語」を作る方が簡単だったりする(^^;
procedure foo(引数); <- or function foo(引数):戻り値;
var
variable:型;
begin
// 処理
end;
これがネスト構造になっているだけだから、再帰で処理すればいいしね。一番トップだけ「program 〜 .」で処理すれば、おっけー。ただ、そうなると、「TEAD」にある「コマンド」を処理したい時や、バッチ的に使いたい時には面倒になってしまうからねぇ。
・TEditor ver1.70
さて困った事になった。このバージョンでは行番号とルーラーが実装されているのだ。「TEAD」ではこれを見越してTEditorを直接いじって行番号とルーラーを実装する方法を採らなかった。目論見では実装された時点でラッパーコンポーネントを外すだけで簡単に移行できるハズだった。
・実際
ラッパーコンポーネントを外して純粋なTEditor
ver1.70を組み込んでみたが、この時点ですでに組み込み前のEXEサイズを超えていた。まぁ、EXEのサイズは昨今ではあまり気にされなくなったような風潮があるが...。これにマーカーや、行番号のカーソル、行番号とルーラーのクリックイベント、ポップアップメニューなんかを組み込むと実行形式ファイルの肥大は避けられそうになかった。
・とりあえず
TEditor ver1.70は組み込みましたが、行番号とルーラーに関連するコードはすべて削除しました。理由は前述の奴と、行番号とルーラーのパフォーマンス(スクロールスピードなど)であまり差がなかったからです。この部分は将来のバージョンで変更になりそうなので、それまで先送りにする事にします。
・「TEAD ver1.21/Blue-Version/TEAD-CUST ver1.08」
アップ。大した変化はない。
・ひでぇ話
昨日はうちのママを友達の家から実家に送って帰った。ママは友達の家に「風呂に入りに行っていた」のだ。...話が見えないでしょ?
・事の発端
実家で水がまったく出なくなった。付近の世帯も同様だが。故にお風呂に入れないからママはお友達の家に行ったという訳。
・水が出なくなった理由
実家のある町に小さな石橋がある、小さいと言ってもかなり小さい。橋とは呼べない程に(しかも誰も行かないような所にあるんだな、これが)。これを町が文化財にするそうだ。この近くに山水を引くちいさなトンネルが掘ってあって、そこにパイプは10本程度通っている。つまりこの「文化財」とやらの調査のために実家を含む区域の貯水タンクへ通じるパイプを引っこ抜いてしまったという訳だ。
・他の区域へのパイプ
これはちゃんと繋がっているからタチが悪い。話によるとこの「調査」のために各区域で代表を出して会合があったらしいが、実家の区域からはだれも参加しなかったらしい。そう、区長すらも。だからと言ってパイプ抜くってのもねぇ...
・貯水タンク
実家の区域の貯水タンクには2系統のパイプが通っており、それぞれ別の水源から水を引いている。今回、その片方のパイプが抜かれたために空気が混入し、ポンプが水を送れなくなってしまった。
・文句を言いに行ったのは?
親父様らしい。あれ?区長さんは?って聞いたら、「自分トコで持っているポンプで近くの川から汲み上げた」のだそうな。これには閉口。自分のトコだけよければそれでいい訳ね、ふーん。
・ライフライン
市内で料金を滞納すると真っ先に止まるのは電話->電気、ガス->水道だ。それこそ生命線なのに、それを止めても呑気にしているってのはねぇ。一遍、全部のパイプを抜いてやろうか?小さな石橋のためになんでライフラインを抜く必要があるのか、私には理解できかねる。
・石橋
本当に10mもないよ。誰も通らない山の中にあるし。苔むしてるからだれも石橋だとは思わないだろうね。この「文化財」とやらは数日前の地元紙に掲載されていた(写真には水道のパイプとトンネルも写っていたっけ)が、読んだときには「あんなとこ文化財にして何すんの?」と思ったものだ。観光客は呼べないし、金の無駄遣いじゃないのか?
・「TEAD ver1.22/Blue-Version」
アップ。こんなに早くリリースするつもりはなかったのだが、「TEditor
ver1.71/1.64」がリリースされたので急遽リリース。結構致命的な不具合が前のバージョンには含まれていたようだったので、無視する訳にはいかなかった。よって、「TEAD
ver1.21/Blue-Version」をダウンロードされた方はお手数ですが、このバージョンを必ずダウンロードして下さい。また、このバージョンは「TEditor
1.64」をベースとしています。
・ついでに
このバージョンで「/V」オプション(=リードオンリー)が実装されています。
・ついでに2
Perl5のエディタ環境設定ファイルもアップしてみた。ここら辺りはやし氏の守備範囲か...?
・やし氏へ
「やし」、「やしま」、「やしお」...どれが正解なんですか(^^;
・Netscape
Navigator
ver4.73[ja]をインストールしてみた。何が違うのだろう。
・PPA
ここにつらつらと詳細を書いていたら、アプリケーションエラーでコケたので、詳細はまたの機会に書きます(ToT)
・P3A-Sample-2
やっぱり実物を触ってもらうのが一番手っ取り早いか。サンプルをアップしておいたので、興味があるヒトは触ってみてください。ただし実行形式ファイルのみです。
・祝!! 80000Hit
最近、カウンタの上がり方が早いな、なんて思っていたらもう80000Hitですか。先月はあまり更新しなかったのでAccess/日は若干ヘコんだようですが...。
・昨日
長崎へ行ってきた。市内行って、雲仙行って、島原行って...。結論。「長崎へはフェリーで行け^^;」
・お土産
たれぱんだの枕を買ってきた。長崎に行ってまで...(^^; カワイイからいーじゃん。ちなみにDEKO用です(本当)
・少女趣味
ちょーっとそのケがあるのよねぇ...。
・今日
阿蘇に行ってきた。先日も書いたが阿○火山博物館の絡みだ。しかし6年間もメンテナンスフリーだったからすごいよな、我ながら。
・しかも
今回のトラブルもハードウェア関係だし。
・さて。
最近、PPAの話ばっかりだな(^^; のめりこむ方だから>DEKO。
・CD
サザンのSingleと渡辺美里のAlbumを購入。サザンのは「ダンシングオールナイト」と「原坊のなんかの曲」をMixしたよーな感じ。渡辺美里の奴はベスト版なので悪い訳がなかろう(^^;
デビューSingleの「I'm Free」が入っていないのが残念。「えーと、三浦友和と'かとうかずこ'とウガンダが出てたドラマのエンディング」って皆に説明するのだけれど、誰も解っちゃぁくれねぇ(-_-メ
いい曲なのに...。
・2000円札
熊本は今日入荷(?)だったらしい。朝イチで銀行に用事があったので、ついでに両替してもらった。...こんなもんですか。1/5単位の通貨は使いにくい気がするんですけど...。2500円とかだったら(1/4)ねぇ...。
・世の中
夏休み真っ只中ですか。
・「TEAD ver1.22/Blue-Version」
アップ。こんなに早くリリースするつもりはなかったのだが、「TEditor
ver1.72/1.65」がリリースされたので急遽リリース。結構致命的な不具合が前のバージョンには含まれていたようだったので、無視する訳にはいかなかった。よって、「TEAD
ver1.22/Blue-Version」をダウンロードされた方はお手数ですが、このバージョンを必ずダウンロードして下さい。また、このバージョンは「TEditor
1.65」をベースとしています。
・PPA
P3Aで色々策定中だから、もう少し待ってね(^^;
・Crash! Crash! Taxi,on a neon busy street.
この言い回し、何回目なんだろ?まぁいいや。いやいや、よくないな、うん、よくない<これも(^^;
・掲示板にあったように
MBRをスッ飛ばしてしまい、OSが起動しなくなりました。何をやったかというと...。
・当初
Win98+Win2kに「Corel Linux」をインストールしていました。んで、「Corel
Linux」は私のマシンでは正しく動作しなかったけれど、「Corel Linux」のアンインストール方法がわからなかったのでそのままにしてありました。だから「Corel
Linux」のOSセレクタが起動してWin2KのOSセレクタが起動していたというとんでもない状況でした。
・今日
ALiのWin2k用AGPドライバ(ver1.68)を見つけたのでインストールしました。次にMS-5169のBIOSアップデータがアップされていたのでアップデートしてみました。さて、再起動...
う、動かへん(ToT)
Win2kは起動画面でフリーズし、セーフモードで起動しても駄目でした。BIOSを元に戻しても駄目。何回かやってたらWin2kが紺色の画面と共にエラーメッセージを吐きました。「ACPI...あ、そういう事!」さっさとリセットスイッチを押し、BIOSメニューを開いてEnabledになっていたACPI等の電源周りの設定をすべてDisabledに変更して再起動...動いたぁ!!
・Win2kにて
安心して色々やってたら不意にドライブをフォーマットしてしまいました。「Corel
Linux」のドライブを...。
・そして
MBRはLILOが先頭にあるのに「Corel Linux」のドライブがないためにOSセレクタすら起動しなくなってしまいました。
・復旧
FDから起動しWin98を再セットアップしました。すると、何故かWin2kのOSセレクタが復活しました。理屈はよく解らないけれど、めでたしめでたし(^^;
Win98はゲームと自作アプリテスト専用ですしね。
・WinX68k(けろぴー)
ver0.46がリリースされている模様。
・PPA搭載TEAD
ver1.24-beta
とりあえず、形にしてみた。正式版リリースまでの間、そのまま使ってもらっても構わないがTEADバッチで実装されていた機能のいくつかはまだTEADマクロにインプリメントされていないので、そこら辺には注意して欲しい。
・ベータ版
...にはPPAコンポーネントのヘルプファイルも同梱されています。ただ、書き途中ですが(^^;
・ベータ版(その2)
ヘルプファイルが書き途中な事でもお解りいただけるかとは思いますが、実はPPAはまだ不完全です。ちょっと挙動をみたかったのでフライング実装してしまいました。P3Aで決めていない部分も多々ありますので、コンポーネント自体の配布は未だ未定です。
・P3Aのメンバーのみなさんで...
おのおのの自作アプリに実際に組み込んでもらって、問題点などを挙げながら改良を行なう期間がどうしても必要のようです。
・「HelpDesigner」
の次のバージョンにはPPAが搭載されるようです。詳しくはKoji27氏の開発日記を参照して下さい。
・X68Kネタ
来栖川電工(そうそう、マルチ作ったトコ)から8月頭にもJUPITER-EXが発売される模様。
・EX68
ver2.11がリリースされた模様。
・PPA
作り出してから丸一ヶ月。なんとかカタチにはできた(まだ修正は続いているが...)。最初はどうなる事かと思ったけど、やればなんとかなるものだ。Cライクなマクロを搭載したアプリは多いけど、Pascalライクなマクロを搭載したアプリはあまり見かけない。コンパイラの本にはPascalでこれまたPascalの言語系を作る手法が載っている事が多い。ところが、何故か(日本の)雑誌に載っているコンパイラ/インタプリタ製作の記事はCライクな言語系を作ろうとしている、それもCを使って。それらの参考文献は確かにPascal系の本なのだけれど...。
・私の場合
その雑誌の記事(サンプルはCで記述)を見てPascalライクな言語系を作ってしまったのだから、ある意味本末転倒ではある(^^;
・我が母校
惜しくも甲子園出場は逃したようだね。
・アクセスカウンタ
微妙に上がりが早い。んーなんでかな?
・PPA搭載TEAD
ver1.24-beta#2
PPAの変更によるもの。P3A-Sample-3もついでに変更しておいた。
・PPAの変更
制御構文に「for〜to〜do」と「for〜downto〜do」を追加した。Pascalのfor文は使いにくいので実装をためらったが、やはりお手軽にループを実現できるので実装してみた。
・Pascalで嫌なトコ(制御構文)
最初に前述のfor文。インクリメント/デクリメントで構文が違う(to/downto)のと増分(Step)が指定できないのがね。Cみたいにインクリメント/デクリメント演算子を並べて書けるというのもなんだかしっくりこない。使い方によっては非常に便利なんだろうけど、あそこに記述できる事に必然性を見出せない>俺だけ?
次はCase。これは仕方のない所かも知れないが、制御構文の中で唯一「endと対になるのがbeginではない」ってのが(例外処理除く)。いや、endじゃなければいいんだけどね。endcaseとか(空白はなし)...。よくCのエディタにある「対応する括弧にジャンプ」ってのが無理(イレギュラー処理やれば別)。Cのソースから移植するのに「{}」を「begin/end」に置換しようとするとちょっと難儀してしまう。まぁ、些細な事ではあるが。
repeat〜untilは「begin/end」を使わない唯一の複文だし(例外処理除く)。
全部、難癖のような気もするので、あまり深くツッこまないでね(^^; その点、よくよく考えるとCってコンパイラ/インタプリタの作り易い言語なんだなぁ、と思う次第。String型がないというのもある意味潔くてステキ(^^;
・PCA
以前の雑談で、こんな事を書いた。覚えてらっしゃるだろうか?
>マクロ部分はDLLにして、「TEAD」とのインターフェィスだけちゃんと作っておく。
>そうすれば「俺ぁPascalなんて使ってらんねーぜ」なんてヒトがいても、
>そのヒトがCなりLispなりPerlなりのインタプリタDLLを作ればいいのだから(^^;
PPAを焼き直して「Poor-C for Application(PCA)」というのも考えられなくはないよねぇ。でもどっかの会計ソフト作ってる会社みたいな名前になるので却下かな(^^;
・もっとも、
Cインタプリタならばポインタの概念は必要だろうし、それをインタプリタで実装しようとすると結構、骨かも知れない。Cインタプリタがあまり存在しないのはそういった背景からなのかな?インタプリタでポインタ使ってどれだけのメリットがあるかは不明。P-Codeコンパイラ(まぁ、インタプリタなんだけど)ならちょっとは...。
・PPA搭載TEAD
ver1.24-beta#3
おっと、PPAでの永久ループ脱出のコードを書くのを忘れてた。永久ループに陥ったら[ESC]で強制終了してTEADに戻ります。これだけだと面白くない(?)ので、
function FindWindow(Class,Window:String):Integer;
procedure Keybd_Event(VirtualKey,ScanCode,Flags,ExtraInfo:Integer);
function SendMessage(handle,uMsg,wParam,lParam:Integer):Integer;
と、TEADのハンドルを返す「GetHandle関数」を追加しておきました。
・狙ったのは...
「百式」か...(^^;
・百式
これの共同開発元となっている「深見仏壇店」は熊本(八代市)にあり、なんとDOS/Vパーツ屋もやっているらしい。その名も
「FUPC」
なんだかイカす(^^;
・そーいや永らく「SUPC」に行ってないな...。