.NET & Win Note

主にVisual Basic .NETについてのメモ書きです。
関連するWindows関係のメモも残していきます。

2002年11月20日 22:50:56

[コントロール]ユーザーコントロール'xxxxxxxxxxxx'を読み込めませんでした

フォームに独自に作成したコントロールを追加しようとしたらこんなエラーが発生
どうやら、前に実験で作ったコントロールが残っていたようです。
左のツールボックスで右クリックして、「ツールボックスのカスタマイズ」を選んで、表示しないようにした。
逆に追加したい場合は、参照ボタンを押してDLLなどを選ぶと良い。
しかし、未だによくわからん(^_^)
コンパイルは通るのに貼り付けるとエラーになることが多い。
さっきは貼り付けただけで無限ループに入ったのかスタックエラーになるし。
コントロールは少しずつ機能をつけていって、確認しながら作るのがいいのかもしれない。

2002年11月20日 22:50:56

[IMAP]オクテット数をカウントするうまい方法?!

お仕事の方が追い込みの時期なんで、全然作ってませんが、ヘルプを見ていろいろ勉強してます。
StreamReaderクラスを見てみると、なんか使えそうなの発見。
(↓VS .NETを入れてる人のみリンク可)
ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/frlrfsystemiotextreaderclassreadblocktopic.htm
まだ、試してないけどね。すんませんね、メモページなんで、こんなんばっかで(笑)

あと、今回はメールの本文は見る必要がないので、実はISO-2022とか関係ないかもです。ヘッダはASCIIのようなので。

2002年11月17日 22:30:09

[IMAP]他のIMAP対応のメールチェッカー ライバル(笑)

http://hp.vector.co.jp/authors/VA028278/software/ledbiff/
IMAPは今のところβのみ対応。フィルタ機能はなさそうな感じです。
検索して、結局これしかみつからんかった。やっぱ少ないんだねぇ。

2002年11月10日 22:59:05

[IMAP]難航中(笑)

どうやって、IMAP のメッセージを処理すればいいのかわからなくなっていたのですが、
IMAP のメッセージのやりとり自体を勘違いしていたようです(笑)

* のタグ無し応答の時は、どのリクエストにたいしての応答が「最後」にくっついてくる
 → * が来た場合は、次々に Queue にため込んで、タグ付きの応答が来た時点で、 Hashtable に追加
タグ無し応答の最後に {90} とか数字がついた場合は、その後90オクテットのデータが続くということを示す
 →90 オクテット (= バイト) のデータを続けて読み込む

こういう仕組みなら、確かに処理できますね。
オクテットって聞き慣れない言葉なので、調べてみたところ「 8 」を意味するようですね。これはつまり8ビットのことで、1バイトと同意なのですな。
こんな感じで、通信の世界では 1 バイトを 1 オクテットと表現するらしいです。

今躓いているのは、VBでは文字列をUnicodeで表現する(全角も半角も2バイト)が、、インターネットでは ISO-2022-JP の文字コード(全角2バイト、半角1バイト、たぶん)を使うので、どうやって長さを取ろうかなという所。
Encording系のクラスかなぁという気がするので、そのあたり見てみるかなと。

2002年11月5日 0:18:49

[IMAP]結構実装がむずかしい

IMAPとPOPについて、下のリンクと前に買った本でちゃんと勉強してみました。
だけど、IMAPは結構面倒です。メールの件名とFromだけ取るなら、順次処理でできるやと思っていたのですが、一応RFCでは「クライアントはいつでもサーバーの応答を受け取れるようにしておく必要がある」という定義があるようなのです。
クライアントもサーバーの応答を待たずに別の命令を送っても良いようです(これは送らなければいい話だけど)

ということは、POPみたいに、これを送ったら、サーバーからこれが帰ってくるからそれを待って、送信されてきたら、次のデータを送って、というような、単純な送信、受信待ちみたいなプログラムには出来ないわけですね。
ただ、サーバー側から一方的に送ってくるメッセージというのはなく、すべてクライアントの要求にたいしての応答で、どの要求にたいしての応答かわかるタグが付いているので、サーバープログラムのようなレベルのものまでは必要なさそうですが、非同期な処理が必要になります。

大枠としては、
  • 送信した内容はキュー(順次処理)に受信した内容はコレクション(どの順番で返事が来るかわからない)に入れておく
  • 受信した内容は随時コレクションに入れておく(スレッドで動いてる必要があるかも)
  • 送信した内容をキューから取り出し、その応答が受信コレクションに入ってきているかチェックする
  • 内容に応じて処理を行う
こんな感じで、なんとかクリアできそうな感じ。ただ、スレッドとか使ったこと無いから勉強だな、また。
というか、TCPClientの使い方を知るために、チャットみたいなテストプログラムをまずは作った方がいいのかも
でも、チャットとなると、ちゃんとしたサーバープログラムが必要になるのか。むむー、とか思ってたらサンプルがあるのね。
[サーバー側サンプル]
[クライアント側サンプル]
このリンクなんかやたらと重いので、なかなか表示されないけど、サーバー側はTcpListenerクラスがキーワードだね。

[マルチスレッド]さっそくマルチスレッドを実験開始

まずは概念から↓
VS.NETを入れてる人だけリンク可
ms-help://MS.VSCC/MS.MSDNVS.1041/vbcn7/html/vaconFreeThreading.htm

2002年11月3日 19:23:43

[IMAP]コマンドとか

だぁーっと作ってしまえばいいんだろうが、なかなか作れないでいるIMAP対応メールチェッカー。
もう、半年ぐらい前から言ってるのに(笑)

IMAPのコマンドについて解説してありました↓
http://www.atmarkit.co.jp/fnetwork/rensai/netpro08/netpro01.html

2002年10月22日 22:17:59

[.NET]オンライントレーニング mamezou.net (無償)

mamezou.net
http://www.mamezou.net/onlinetraining/
Java方面では有名な(株)豆蔵が運営している.NETに関するオンライントレーニングサイトです。

2002年10月8日 1:19:16

[ASP.NET]デバッグできるようになりました

昨日はだるかったので検索しませんでしたが、今日Googleで「ASP.NET デバッグできない」のキーワードで探してみたらありました。
そのものズバリが。
http://support.microsoft.com/default.aspx?scid=kb;ja;JP318465
どうも、ASP.NETがうまくセットアップされない時があるらしい。
たぶん、バグでしょう(笑)
普通にセットアップしたら何回やってもダメだったし。
上記のサイトどおりに、Windowsフォルダにある\Microsoft.Net\Framework\v1.0.3705の中の
aspnet_regiis -i
を実行したら、解決しました。

これで、Windows XP Proffesionalを買った意味がある。
ちゃんとデバッグも動くし、テキストボックスもボタンも無事動作。
IISサービスというの元々無くて、World Wide Webサービスってのがちゃんと動いてました。
疑惑はすべて一掃できました。

しかし、たのしいなASP.NET。
サーブレットやJSPでちまちまやってたのが、泣けてくるほどIDEが使いやすい(^_^)

ASPとは関係ないけど、フォームの継承も出来るようになったので、このあたりで自作のコントロールを試しに作ってみようかなと思う。

2002年10月7日

[ASP.NET]デバッグができん!!

ASP.NETを試したかったので、Windows XP Home EditionからProffesional Editionへのアップグレードを購入して入れてみた。
Home EditionにはIISがついていないからです。

ところが、会社でWindows2000 Proffesionalではインストールして、テキストボックス貼り付けて、デバッグすればそのままデバッグできていたのだが、家の環境では理由の分からないエラーが発生してデバッグが出来ない。
エラーの内容は
「プロジェクトを実行しようとしているときにエラーが発生しました。:Web サーバーでデバッグを開始できません。サーバーは ASP.NET や ATL Server のアプリケーションのデバッグをサポートしていません。セットアップを実行して Visual Strudio .NET サーバーコンポーネントをインストールしてください。既にセットアップが実行されている場合は、有効な URL が指定されていることを確認してください。

また、オンライン ドキュメントで、 ASP.NET と ATL Server デバッグの項を参照することもできます。次回からこのプロジェクトの ASP.NET ページデバッグを無効にしますか?
[はい] [いいえ] [ヘルプ]」

こんな感じ。
IISは既に追加と削除からインストール済み。
インストール後、VS.NETをアンインストールして、インストールし直した。ヘルプに従って.NET Frameworkも入れ直した。
でも、だめ。いったい何なのやら・・・・

ブラウザで直接、ASPファイルを開いてみるが、ボタンやテキストボックスが表示されない。
テキストボックスに文字を設定しておくと、ラベルのように表示される。ボタンに関してはまったく表示されず。

WinXP Proへのアップグレードが失敗しているのか、何か設定が悪いのか?
IISはマシン名を打ち込むとサンプルのページは表示される。妙なのが、サービスの開始停止がやたらと早いこと。
あと、Win2000ではInternet Information Serviceみたいな名前でサービス名が登録されていたはずだが、それらしいのはIIS Adminしかみつからない。ちゃんと動いているのかも疑問である。
何か知ってる人がいたらメールか何かで教えてほしい(^_^)

2002年8月15日 23:01:08

[VB]インターフェースの使いどころ?

いろいろ使い方のあるうちの一つ。
Javaでの説明ですが、.netでも使えるでしょう。
説明はこちら

[VB]継承のソースの説明

まともに動くソースに書き換えた物の説明を入れてませんでしたので、一応入れておきます。
たいしたことじゃないんですがね・・・
ソースはここです
下のソースは少しメソッド名を変えています。

Public Class Class1
  Overridable Sub display()
    Console.WriteLine("親のメソッドだ")
  End Sub
End Class

Public Class Class2
  Inherits Class1    ←Class2はClass1を継承
  Overrides Sub display()
    Console.WriteLine("子のメソッドですがな")
  End Sub
End Class

<テスト用のモジュール>

Module Module1
  Public Sub main()
    Dim a As New Class1()
    Dim b As New Class2()
    showMessage(a)
    showMessage(b)
  End Sub

  Sub showMessage(ByVal obj As Class1) ←引数の型はClass1だがClass1を継承したClass2もOK
    obj.display()
  End Sub

End Module

これを実行すると、
親のメソッドだ 
子のメソッドですがな
と表示されます。
1行目はClass1のdisplayメソッドの動きですし、2行目はClass2のdisplayメソッドが実行された結果です。

showMessageメソッドが実行しているのは、displayメソッドを呼び出しているだけですが、動きは与えられたオブジェクトにより異なります。
こういうのを多態性(ポリモーフィズム)と言います。
今回は、コンソールに文字を表示しているだけなので、こんなのを使わずに引数に文字列を渡すだけでも容易に実現出来る機能です。
しかし、もし表示されるメッセージが文字だけではなく、画像だったり音声だったりした場合は対応できません。
いままであれば、それぞれの機能をもった関数を作って、呼び出し側もそれに対応した呼び出し方の物を用意しなくてはいけません。
多態性をうまく使えば、新たに音声を再生したり、画像を表示するdisplayメソッドをもったクラスを追加するだけで、他にあまり影響を与えず機能を追加することが出来ます。

2002年8月15日 2:22:59

[VB]IMAPメールチェッカーリファクタリング

停止していたIMAPメールチェッカーですが、また作り始めました。
今までのソースはほぼ捨てました。
サーバーからのメッセージを.netのQueue(先入れ先出しを実現するクラス。後入れ先出しはstackでしたね^ -^)に押し込み、順次処理するように変えてだいぶすっきりしました。
IMAPサーバーへの接続、ログイン、ログアウト、切断がやっとこ出来ている状態です。

現在、NUnitを使った開発も実験的に試しています。
とりあえず、今回はメールサーバーとのやりとりなので、サーバーから帰ってくる「OK」の数でうまく動いているかをテストするようにしてみました(ログインの時はOKが二つ。ログアウトの時は一つ出ればテスト合格という感じ)
Nunit入門 テストファーストのすすめ

しかし、やってみるとログアウトのテストが成功しない(OKの数が多すぎる)ので、おかしいと思っていたら、ログアウトのテストを行うために一度接続して、次にログアウトするまでにQueueの内容を残したままにしているのに気づきました。
ふむ、確かにこれは仕様が明確になっていいかもしれん。

2002年7月17日 20:56:30

[VB]まともに動く(ぉぃ)継承とポリモーフィズム

最近、.NETのページもアクセスが多いので、見直していたところ全然間違ったソースを発見(文法すら間違っている(笑))
どうも完成前にアップしてたみたいです。

まともにコンパイルできるサンプルソース(笑)

急遽、作り直してみたものの、元々がメモ程度に書いていた物なので、動くには動くがオブジェクト思考的では無いです(^_^)
Module使ってる時点でいまいちですが、テスト用だと思ってください。
解説はこちら

2002年7月17日 20:56:30

[VB]コーディング標準

コーディングする際に役に立つ、変数名やメソッド名などの命名方法。プロジェクト内にとどまらず、標準的な書き方をしておくと他の人がソースを見たときに間違いが少なくなります。
<VB.NETコーディング標準>
http://objectclub.esm.co.jp/eXtremeProgramming/CodingStdVB.doc(Word版)
http://objectclub.esm.co.jp/eXtremeProgramming/CodingStdVB.pdf(PDF版)

<VB.NETコーディング標準フォーラム>
http://db-appli.com/xoops/

MLでも出ていたが、確かにインスタンス変数とプロパティー名の衝突は嫌。
俺はいつもインスタンス変数の方にmをつけてよけてるけど。

[VB]VBでデザインパターン

JavaのデザインパターンをVB.NETに移植したソースがここにあります。
元々の本を参考にしながら読むと良いでしょう。
http://hccweb1.bai.ne.jp/tsune-1/