Blog
MemProofでメモリリークをデバッグ
11月 22nd, 2006
Delphiをしてると、C言語と違いあまりメモリの割り当て・開放を意識しなくてもプログラムを組むことが出来ます。
しかし、そのまま長い間慣れてしまうと、今度は複雑なプログラムを組んだ時に、うっかり開放を忘れてしまうことがよくあるんですね。。
あと、メモリ割り当ての性質をあまり理解できていなかったり。
配列を含む構造型を定義したとき、すでに配列に長さが与えられていたとして、それにZeroMemory関数を実行すると、メモリリークが発生します。この関数は配列をリセットしないんですね。
今考えると当然のように思えますが、知らないとやってしまいそうなミスです。
そんなメモリリークのバグを簡単に見つけられるソフトを紹介します。
MemProofってソフトなんですが、英語やけど結構便利。
開放忘れが発生している、メモリ割り当ての処理のソースコードの位置まで示してくれます。
詳しい使い方はこちらを参照。
しかしやっぱり厳密にどこが悪いのかはコツを掴むまでなかなか大変。
日ごろから気をつけているつもりでも、やっぱり忘れてしまうことはあるから、こまめにチェックしておくと安定したソフトを作るのに役立ちそうです。
iduo v0.41 Release
11月 22nd, 2006
Delphi用汎用スクリプト。
PHPとほぼ同じ文法でスクリプトを実行できます。
関数、演算子の定義が可能。
—-
ずっと前にメモリリークの報告してもらってからなかなか手をつけられなかったんやけど、やっと修正しました。
メモリリークしすぎ!笑
とりあえずSampleのコードを実行する限りではリークは起こりません。
めっちゃ苦労して作ったにも関わらず、今のトコ自分のソフトに適用できてないのが勿体無いなぁ。
すっごい色んなことに使える気がするんやけど。。
接続サービスの仕組み
8月 28th, 2006
amemboと転送バッタに組み込まれてる簡単接続サービス。
どうやってるの??としばしば聞かれるので、ここに書いちゃおうと思います。
と言っても何も特別なことはしてなくて、アイデア料理みたいな感じです。
目的はもちろん、IPアドレスとポートの教える手間を省くこと。
みなさんはIDからどうやってアドレスを引いてるか、と考えるからきっと分からないんだと思います。逆です。
どうやってアドレスをIDとして相手に教えるか??と考えることが重要です。
このソフトは、それ自身だけでそれを解決していません。
つまりサーバを用意し、そこに情報を登録したり読み出したりすることによって実現しています。
これが”接続サービス”という名の所以です。
では具体的な仕組みについてですが、手順を追って説明します。
サーバにまずサービス用のCGIかPHPなどを用意します。
ユーザーのコンピュータはそのスクリプトにアクセスします。その時サーバへ自動的にクライアント情報が送られます。
スクリプトはその情報からIPアドレスを取得します。
クライアントはインターネットを介して接続してきた訳ですから、そのIPは当然WAN IPですよね。なのでLAN環境からのアクセスでも正しくWAN IPを取得できます。
で、アクセス時に一緒に使用ポートと登録したいIDを送ります。
スクリプトはそれらをファイルかデータベースなどに一時的に保持します。
接続相手のユーザーのコンピュータは、同じくスクリプトにアクセスします。
教えてもらったIDの情報を要求するリクエストをサーバに送ります。
スクリプトは先ほど保持した情報を、クライアントに返します。
最後に、ユーザーがソフトを終了するときや切断の時などに、登録した情報を削除すれば一連のサービスは完了。
何の特別な知識も必要なく出来そうですねw
では実際にPHPで、情報をクライアントから取得する所を組んでみます。
<?php
// ID
$id = $_GET['id'];
// 使用ポート
$port = $_GET['port'];
// IPアドレス取得
$addr = $_SERVER['REMOTE_ADDR'];
// ファイルやデータベースに保存する
…
?>
こんな感じ。もう説明要りませんね。

ようこそ、ここは拙作のソフトウェアやWebサービスを気ままに公開するサイトです。