VS2008,2010ではOption Infer On, Option Strict Offが既定なんだ。
VBで型を省略したときの振る舞いをみていて、あれ?既定では暗黙の型変換の禁止(Option Strict)はOffなんだし、これでInvalidCastExceptionでるのか?と思ったら、型推論の利用(Option Infer)はOnが既定だから、型推論でIntegerとして推論された変数aに文字列を入れると実行時にInvalidCastExceptionが発生するんですね。。。
Infer Onを既定とするなら、Strict Onも既定にして欲しかったな。とりあえず、Strict をOnにすればコンパイル時にはじけるので、実行時エラーでしょんぼりしたくなかったら型推論を利用する場合はOption Strictは必ずOnにしたほうがいいですね。
そもそも、そんなエラーが出るようなプロジェクトでStrictをOnに変更したら、至る所でコンパイルエラーになって大変そう。。。まぁコンパイルエラーになるけれど、実行時エラーよりはだいぶマシですよね。
となると、型推論が無い時代のソース(2005以前)からアップグレードしたプロジェクトだと大変だよな。とおもったら、Visual Studio 2008時点のOption Inferのヘルプにこんなのが書いてありました。
On または Off の指定がない場合、Visual Basic 2008 で作成されるプロジェクトの既定値は On になります。以前のバージョンからアップグレードされたプロジェクトの既定値は Off になります。
http://msdn.microsoft.com/ja-jp/library/bb384665(v=VS.90).aspx
この記述2010のヘルプだと消えているんだけれど、2010でアップグレードした場合はどうなるんだろう。
→ ローカル型の推論のヘルプにアップグレードウィザードを利用したらInfer はOffになるって記述を発見
コード内で Option Infer の値を指定しなければ、コンパイラは既定で Option Infer On になります。 Visual Basic 2008 以前からアップグレードされたプロジェクトの場合、コンパイラは既定で Option Infer Off になります。
とりあえず型推論(Infer On)を利用するときは、暗黙の型変換の禁止(Strict On)を有効にして実行時エラーがでないようにしたほうが安心ですね。
ワークグループ構成のTFSでログインするユーザーを切り替える
この記事は、TFS Advent Calendarの12/20分の記事です。TFS Advent Calendar : ATND
(Live Writerの操作を間違って、フライングで16日に一度公開しちゃっていたんだけれど、素知らぬ顔でもう一度公開します。)
TFSでは構築時にTFSのユーザー管理をワークグループ(ローカルコンピューター)で行うか、ActiveDirectory(ドメインサーバー)で行うかを選択できます。ActiveDirectoryでTFSを構成した場合は、Windowsログイン時にユーザーが確定されるので、その認証情報を元にTFSにシングルサインオンできます。ワークグループモードで作った場合は、Windows側で認証されていないので、TFS接続時にユーザーIDとパスワードを入力してログインします。
とはいえ、ワークグループで作成しても、ユーザーIDとパスワードを入力する機会というのはほとんどありません。ほとんどの場合は、初回にTFSに接続した段階のユーザーIDとパスワードをIEがキャッシュとして持っているものを利用するからです。
ただ、TFSエクスプローラーにはログアウト的なメニューが存在しないので、一時的に別のアカウントでログインしたい場合や、ユーザーの変更などで別アカウントでログインしたい場合は、IEの設定を変更して上げる必要があります。
Visual StudioはIEのセキュリティー設定をもとにTFSに接続に行くので、IEのセキュリティー設定で毎回ユーザーIDとパスワードを入力するように変更します。
インターネットオプション>セキュリティー>TFSのセキュリティーゾーン(ここでは信頼済みサイト)>レベルのカスタマイズ
設定ウインドウの一番下にある、ユーザー認証を「ユーザー名とパスワードを入力してログオンする。」に変更します。
この状態でVisual Studioを起動すると、チームプロジェクト接続時にユーザー名とパスワードを聞いてくるようになります。
Mono DevelopでVBのソースをコンパイルする。
Visual Basic Advent Calendar 2011の19日目です。
Atndはこちら。http://atnd.org/events/23108
VBのソースを編集するなら、もちろんVisual Studioですよね。(yoshiomsさんは秀丸で編集していましたが)。
Visual Studio 2005からは、無料のVisual Studio Expressも出てきて、誰でも.NETのプログラミングを簡単に体験できるようになったわけですが、LinuxやらMacやらを使っていたらVisual Studioはインストールできません。
そんな時お勧めなのがMono Develop! !って、僕も、以前Mono for Androidの記事を書いたときに一緒に入ったきり使ってなかったんで、VBのソース開こうとしたら候補に出てきたのでびっくりしたんですけれどね。
せっかく起動してくれたので、とりあえずビルドしてみる?ってことでビルドしたら、残念な感じでエラーが表示されてしまいました。Mono Developでは、コンパイルエラーがあると、問題の部分にメッセージを表示してくれます。コンパイルエラーの出方は好みがあるだろうけれど、これはこれでわかりやすいかもしれませんね。
って、日本語化けてますね。VBのコード自体は日本語も問題なく表示されるので、エラーメッセージリソースのエンコーディングが変なのかな?とりあえずメッセージがおかしいのは置いておいて、どうも.NET 3.5からの拡張構文を理解できていないっぽい。
プロジェクトの設定かな?。。。みたいです。MonoDevelopのメニューで、プロジェクト>オプション>ビルド>一般 を見ると、Mono / .NET 2.0ってのが選択されているようなので、 Mono / .NET 3.5を選択してやりましょう。
早速実行してみましょう。デバック実行はVisual Studioと同じでF5です。
問題なくコンパイルして実行してくれました。
新しい環境だと、Visual Basic名前空間の実装が面倒だとかで、だいたい置いてきぼりを食らうVBですが、Monoがんばりますねー(Mono for AndroidはまだVBに対応していません)。
その他
起動したことなかった(汗)なんだけれど、こいつってASP.NET MVCも標準でサポートしてるんですね(MVCはC#のみ。。。)。びっくり。
おぉ、Visual Studio 2010からサポートされた、マルチスタートアップまでサポートされてる。
チームドキュメントの変更を受け取る
この記事は、TFS Advent Calendarの12/14分の記事です。TFS Advent Calendar : ATND
接続しているプロジェクトをチームエクスプローラーで見ると、ドキュメントツリーの下に幾つかのドキュメントを見て取れます。ここには、プロジェクトで共有するドキュメントなどを格納していくのですが、新しいファイルが追加されたり、ファイルが更新された際にメールで通知を受けるにはどうしたらいいでしょうか。
答え
SharePointの機能を利用して、通知を設定します。
TFSと言うよりも、TFSがポータルサイトに利用しているSharePointの機能なのですが、チームエクスプローラーのドキュメントフォルダーの実体は、そのチームプロジェクトのプロジェクトポータルがホストされているSharePointのリストになります。変更を購読したいリストの通知を設定すればいいだけです。
もちろん通知の機能を利用する場合は、ユーザーに対してメールアドレスが設定されている必要があります。TFSをアクティブディレクトリー構成で構築していれば問題ありませんが、ワークグループ構成で構築したい場合は、ユーザーに対してメールアドレスがうまく設定されない(というか、SharePointのユーザー設定からメールアドレスを設定できない)ので、SPUserの設定をどうにか書き換えて上げる必要があります。
PowerShellを利用したメールアドレスの設定についてはこちら
→ SharePointのユーザーをPowerShellで修正してみる。
プロジェクトポータルのURLがわからない(!?)場合は、チームエクスプローラのコンテキストメニューから、「プロジェクトポータルの表示」をクリックしてプロジェクトポータルを開くのが簡単です。
プロジェクトポータルを開いたら、サイドバーから通知を設定したいリストを選択し、リボンのライブラリを開きます。
ライブラリタブを開き、ブラウザーをそれなりに大きくすると、リボンに幾つかのアクションが見て取れます。ドキュメントが追加されたり、修正されたりした場合にメールによる通知が欲しい場合は、「通知」>「このライブラリに通知を設定」をクリックします。メーラーにアウトルックを利用している場合は、ライブラリタブの「Outlookに接続」を利用すると、ドキュメントをアウトルックで読んだり、更新を確認できるようになって便利です。
通知の設定画面が出てくるので、どの頻度で通知を受け取るか設定してOKボタンをクリックします。
誰かがドキュメントに、ファイルを追加するとこんなメールが来ます。
With
Visual Basic Advent Calendar 2011の12日目です。Atndはこちら。http://atnd.org/events/23108
どうせVBについて書くんなら、VBならではのことを書こう。とはいえ、気になるものはすでにブログの記事なんかにしているから、改めて何を書こうかネタを探すと難しいんだよね。C#には無いものだと、やっぱりMyとかWithとかのキーワードかなぁ。Myは微妙に消えてしまいそうな気もするのでWithかなぁ。
ということで、Withの新しい使い方、初期化子について触れてみます。
今の仕事上、まだまだVB6のプログラムを見ることが多いんだけれど、オブジェクト名のタイプを減らしたいのか、やけに長いスコープでWithを使っているプログラムがあるんですよね。一体このWithはどこにかかっているのか問い詰めたい感じです。
そういったWithの使い方は死んでしまえと思うわけですが、こと初期化に限っていえば、変数の初期化はここからここまででやっていますよーってのがわかるので、そのWithがどのオブジェクトかわかるならWithは短いスコープでどんどん使っていけ!!という感じはしています。もちろんどんなに短くてもネストは嫌です。
そんな意味では、VB9からの初期化子を使ったWithの使い方はさすがだなーと思わせます。
以前Twitterでつぶやいたことがあるんだけれど、拡張メソッドを集めているサイト(http://www.extensionmethod.net/)に、VBだからこそ力を発揮する拡張メソッド、Selfってのが紹介されています。定義はこんな感じです。
<Runtime.CompilerServices.Extension()> _ Function Self(Of T)(ByVal x As T) As T Return x End Function
この拡張メソッドは、obj.Selfとするとobjを返却してくれるメソッドです。これだけだと微妙に何をしたいのかわからないのですが、VBのWithや初期化子を使うと、こんな感じでコードが書けます。
Module Module1 Sub Main() Dim target = New Hoge With { .ThisObject = .Self, .String1 = "abc", .String2 = "123" } Console.WriteLine("{0} = {1}", target.String1, target.ThisObject.String1) End Sub End Module
この初期化しを展開してしまえばそんな難しいことはやっていないし、どこで使うのと聞かれてもパットはでてこないけれど、ちょっと面白いでしょ。
チームビルドでMSBuildファイルを利用する。
この記事はTFS Advent Calendarの9日目の記事です。
サイトはこちら:http://atnd.org/events/22819
TFS2010になってから、チームビルドがWFベースになってしまいついていけていない僕がいます。単純にソリューションファイルをビルドするだけならいいんだけれど、ビルドプロセスをいじり始めると途方にくれてしまいます。だって単純なビルドプロセスでも、こんなWFが作られるんだもん。。。修正する部分は一部分とはいえ、WF初心者にいきなりこれは辛い。
まぁ実際のところは、TFS2010のビルド定義はかなり汎用化されているので、一般的なソリューションファイルをビルドするだけのプロセスだったらデフォルトのテンプレートで事足りてしまうし、TechNetマガジンではできるだけビルドテンプレートのカスタマイズはするなとも書いてありますね。
http://technet.microsoft.com/ja-jp/magazine/gg265783.aspx#
TFS2010からはビルド定義がWFになったおかげで、ビルドプロセスが可視化されたのは嬉しいことなのですが、これまで自分で作ったMSBuild用のカスタムタスクもワサワサあるし、無料で使えるコミュニティーベースのタスクもある。それとは違う次元で自動生成されるビルドプロセスが大きくて理解しきれていないとかとか、ビルドプロセスを自分でカスタマイズするためにWFベースのビルドプロセスに乗り換えちゃうにはまだちょっと敷居が高いわけです。
MSBuildファイルをビルドプロセスに利用する場合は、ビルドのプロセス設定で、ビルドするプロジェクトにMSBuildファイルを指定します。
ビルドするプロジェクトを選択する画面では、ソリューションファイル(sln)の他に、MSBuildプロジェクトファイル(proj)も選択できます。ファイルのフィルターが(*.*proj)になっているので、VBのプロジェクトファイル(vbproj)やC#のプロジェクトファイル(csproj)も一緒に列挙されます。まぁこの子たちもMSBuildファイルですからね。
Mono for Android 2.0
Ice Cream Sandwichに正式対応したMono for Android 2.0がリリースされてています。
http://xamarin.com/monoforandroid
これに伴い、ドキュメントサイトも全面的に再構成が行われているようです。
ドキュメント http://docs.xamarin.com/android
チュートリアル http://docs.xamarin.com/android/tutorials
リリースノートがどこにあるか見当たらないんだけれど、リリース案内のメールを見るかぎり出来上がるパッケージのサイズが小さくなるようでこれは嬉しいかも。1.*でビルドすると、小さなアプリでもパッケージサイズが爆発しているんで。。。
TFS Advent Calendar Day 4 SMTPプロキシを利用したTFSでのメール通知
TFS Advent Calendarの4日目です。
サイトはこちら:http://atnd.org/events/22819
TFSには、TFS内で発生したイベントの通知をメールで受け取る機能が備わっています。
この機能を有効にすると、毎日のバックアップが正常に終了しているか、実行したビルドが正常に終了したかなどをメールで受け取れるので、TFSを使った開発環境を運用する上では必須の機能になるでしょう。詳しくは、MSDNの「電子メール通知の構成および SMTP サーバーの指定(http://msdn.microsoft.com/ja-jp/library/ms400808.aspx)」を参照してください。
SMTPサーバーが標準以外のポートを利用していると、うまく設定できない
ただ、このメール通知機能ですが、ポート番号などを指定できないのでセキュリティーの都合などでSMTPサーバーが標準のポート(25)以外を利用している場合は、うまくSMTPの設定が行えません。
SMTPサーバーに smtp.xxx.xxx:10025みたいな設定ができない
SMTPのプロキシになってくれるソフトを探す。
Windows 2008 R2に付属するIISのSMTPでもおそらく可能(未検証)なんですが、今回はBlackJumboDogというWebサーバーやら、SMTPサーバーやら、プロキシサーバーやらの昨日を備えたサーバーソフトの集合体みたいなソフトウェアを利用してみます。BackJumboDogは下記のURLからダウンロード可能です。
サッポロワークス BlackJumboDog http://www.spw02.sakura.ne.jp/spw/bjd/
このエントリーを書くのに検索したら、作者さんがCLR/Hで発表したスライドを発見しました。
Black jumbodog 運転と改造のすすめ http://www.slideshare.net/furuya02/b-lack-jumbodog
BlackJumboDogはC#のソースコードも公開されていて、独自サーバーをBlackJumboDogに組み込むことも可能なようです。
SMTPサーバーをTFSに立てて対応する
実行するとこんな画面が起動するので、メニューバーから、オプション>プロキシサーバー>SMTPを選択します。
この画面では、SMTPプロキシを利用するのチェックをいれ、こんな感じで設定してあげればいいでしょう。
No | 設定項目 | 設定値 | 備考 |
1 | クライアントから見たポート | 25 | |
2 | 接続先ポート | 10025 | 接続するSMTPサーバーのサービスポートです。 |
3 | 接続先サーバー | xxx.xxx.xxx.xxx | 接続するSMTPサーバーのホスト名かIPアドレスです。 |
BlackJumboDogをサービス化する
BlackJumboDogのサービス登録の設定は、BlackJumboDogを管理者として起動し、メニューの起動/停止>サービス設定から行うことができます(サービス設定はBlackJumboDog停止中でないと選択できません)。
登録ボタンをクリックして、この状態になればサービスの登録は完了です。
TFSの管理コンソールからSMTPの設定を行う
Team Foundation Server 管理コンソールを開き アプリケーション層メニューで、電子メール通知の設定を行います。SMTPサーバーにlocalhostを、電子メール差出人アドレスに、有効な電子メールアドレスを設定してOKボタンをクリックします。
これでTFSで起動しているBlackJumboDog経由でメール通知が飛ぶようになります。
ここまでやったけれど、実は設定で簡単にポート番号を指定する方法があったりするのかな。。。
SharePointのデータをAccessで編集すると、リストに対してSQLで更新できる
SharePoint2010の「Accessで開く」メニューって、単にSharePointのデータシートビューみたいなものをAccessで編集出来るだけのものだと思ってたんだけれど、Accessで開いたあとは通常のテーブルと同様に、SharePoint上のリストに対してクエリーをかけることができるんですね(えっ常識?(汗))。
少し前にOBAって言葉がちょこちょこ出てきて、このごろ聞かないなーと思ったけれど、すでにエンドユーザーがここまで簡単に使えるところまで来てたんですね。
1.SharePointリストをAccessで開く
「Accessで開く」メニューをクリックすると、こんなウインドウが出てくるので、Accessで編集する場合のファイル名を設定して、参照ボタンをクリックしてSharePointリストに関連付けたAccessを開く。
2.更新クエリーを作る
Accessのデザインビューや、SQLビューで更新クエリー作って適当な名前でクエリーを保存する。
デザインビュー
SQLビュー
UPDATE 共通ローカルメッセージ一覧
SET ステータス = “公開済”;
3.更新を実行する
作ったクエリーをダブルクリックすると、こんなダイアログが出てくるから問題なかったら「はい」ボタンをクリックするればクエリーが実行されて、SharePoint側のリストのデータもそのまま更新される。