一部のソフトウェアには、匿名の使用状況データを収集するオプションがあります。それはどのように機能しますか?どのように収集され、送信されますか? これを自分で試すための小さなテストを書きたいのですが、どこから始めればよいかわかりません。
1 に答える
データの収集: 収集したいデータは何でも収集できます。たとえば、ユーザーが使用しているフォームを知りたいと考えていました (フォームはたくさんあります)。したがって、すべてのフォームの FormCreate で、Self.Name をテキスト ファイルに追加するコードを呼び出します。現在、フォームの作成と、ユーザーがフォームにアクセスした順序を追跡しています。
必要なデータを収集できます。たとえば、ユーザーが特定のエラー メッセージを何回受け取ったか知りたい場合は、エラー メッセージを表示するたびに、エラー メッセージの名前をファイルに追加します。ユーザーが特定の画面で費やした時間を知りたい場合は、フォームを開いたときの Now() とフォームを閉じたときの Now() を記録し、その差をデータ ファイルに書き込むことができます。
データの送信: 収集した生データをサーバーに転送するか、そのデータを前処理して送信する必要があります。上記の例では、テキスト ファイルを送信するだけです。任意のインターネット ライブラリを使用して、ファイルをサーバーにアップロードできます。Delphi に付属しているため、Indy FTP を使用します。ファイルをアップロードし、一意の名前 (サーバーがその形式を受け入れる場合は GUID でしょうか?) をサーバーに付けます。(別のユーザーのアプリケーションによってまだサーバーにアップロードされていない適切なファイル名を選択することは、あなたが直面する課題の 1 つです)。許可を得ていない限り、ユーザーを特定し、法的な影響を理解するため。週に 1 回程度ファイルをアップロードすることを決定し、または、すべてのユーザーが同時にアップロードしないように、1 日に 1 回ランダムな時間にアップロードします。もちろん、アップロードする前にファイルを前処理して、ファイルを小さくするために何らかの方法でデータを折りたたむこともできます。
データ コレクション ファイルが大きくなりすぎないようにしてください。アップロード後に削除する必要があります。また、アップロード ファイルが大きい場合、バックグラウンドでアップロードするなどの手順を実行しない限り、アプリケーションで顕著な遅延とフリーズが発生します。
ユーザーが非常に厳格なファイアウォールまたはセキュリティ ソフトウェアを使用している場合、このようなファイルの送信は禁止されている可能性があり、ソフトウェアがマルウェアとしてフラグ付けされる可能性さえあることに注意してください。この問題を慎重に検討し、安全で目立たず、匿名で、さまざまなセキュリティ アプリケーションで許可されている方法でデータを Web 経由で送信できるさまざまな方法を評価する必要があります。たとえば、アップロードに使用するプロトコルと、そのプロトコルがサーバーに提供する識別情報 (IP アドレスなど、適切なツールや捜査令状によって漠然と個人的なものになる可能性がある) について理解する必要があります。
次に、サーバーでは、数週間 (またはファイルをアップロードするために選択した任意の時間枠) にわたって、ソフトウェアがユーザーのマシンからアップロードした多くのファイルができます。これらのファイルには、ユーザーがロードしたフォームの名前、受け取ったエラー メッセージの名前、経過時間、または収集してアップロードしたデータが含まれています。次に、そのデータを意味のあるレポートに処理する方法を決定します。すべてのファイルを調べると、次のようなことがわかるかもしれません: ユーザーの 50% はフォーム X を開いたことがありません。または: ほとんどのユーザーはエラー メッセージ #17 を見たことがないか、フォーム TForm3 でエラー メッセージ #22 しか表示されなかった、またはユーザーが平均 45 秒費やしました。 Form4 が表示されます。
上記のほとんどすべてを単純化しました。もちろん、たとえば、収集したデータをテキスト ファイルに追加するよりもはるかに優れた方法で保存できます。テキスト ファイルは、大きくなりすぎたり、遅くなりすぎたりする場合があります。考慮しなければならない法的または倫理的な問題があるかもしれません。
しかし、これは一般的な考え方です。
これは、すべての問題を完全に理解し、適切に設計およびコーディングしない限り、他のユーザーが使用するアプリケーションに組み込むためのカジュアルなプロジェクトではありません。(これは、どのコーディングについても言えることだと思います!) しかし、前述したように、宿題や単に探求するためにどのようにそれを行うかについての概要を上で書きました。)