2008年9月14日 (日)

初のオフライン勉強会を終えて

今家に着きました。

本日お越しいただいたたくさんのみなさんありがとうございます。私としては早口でプログラムをちゃかちゃか入力するセッションになってしまったのでちゃんと内容がみなさんに伝わったのか心配だったのですが、直接お話しを聞くことができた何人かの方は大丈夫だったとおっしゃっていましたし、とても良かったとおっしゃってくださった方もいらっしゃったのでほっとしています。

50分のセッションでしたが、私にとっては一瞬のうちに終わった感覚でした。

また、VB中学校初の(?)オフラインイベントとなり、普段VB中学校を見に来てくださっている方とも直接交流できたのがすごくうれしかったです。私は結構レトロな人間で、ミクシーとか、Messengerあるいはメーリングリストのような21世紀のコミュニケーションではどうもしっくりこないのです。やはり直接顔を見てお話しできるというのはいいですね。

今回は合同勉強会ということで発起人であるtechnet.jpのけろさんや、ヒロさん、とっちゃんさんのセッションを聞くこともできました。みなさんはどういう感想を持たれましたか?

ASP.NETやSQL Serverに関するけろさんのセッションの内容は私のよく知っている範囲だったのですが、それでも新しいいくつかの有意義な知識を獲得できました。けろさんの説明も納得できるものでした。(途中のマシントラブルはご愛敬ですね)

PowerShellに関するヒロさんのセッションや、インストーラーに関するとっちゃんさんのセッションは私としては新しい知識の宝庫でした。特にヒロさんのセッションは入門レベルから丁寧に解説されていてすぐに実践できるものという点で重宝でした。私のPowerShellに対する知識とモチベーションはかなり向上しました。

とっちゃんさんのセッションはインストーラーの構造や考え方について初めて知ることばかりでした。私にとっては今後役に立っていく知識となりそうです。

それと並んで懇親会でみなさんと知り合えたことが私の大きな収穫です。

今回参加された方もされなかった方も今後ともよろしくお願いします。

セッションで予告したダウンロードの方はもうちょっとお待ちください。今日はもう寝ます…。

末筆になっていしまいましたが、今回支援してくださったスタッフのみなさんありがとうございます。スタッフのみなさんのおかげで私は自分のセッションに集中することができました。

| | コメント (9) | トラックバック (3)

2008年6月14日 (土)

Expression Web 2の第一印象

Expression Web 2を使ってみました。

Expression Web 2は昔のFrontPageの後継ソフトで、要するにhtmlやWebサイトなどを手軽に作るツールです。ワープロ感覚でhtmlファイルを作れるのがこの手のツールの特徴で、私が運営しているVisual Basic 中学校の記事はFrontPage 2003で作成しています。

FrontPage2003→Expression Web→Expression Web2という流れになっています。これとは別にOfficeに収録されているSharePointDesignerという製品もありますがほとんど同じ機能です。というかExpression WebとSharePointDesignerのどこが違うのかわからないくらいです。

さて、Expression Web2は画面の雰囲気は他のExpressionシリーズの製品と統一されて黒っぽいおしゃれなものになっています。

1_2

でも、見ればわかるようにそれ以外は旧Expression Webと目立った違いはなく、言うなればFrontPage 2008という感じです。

新機能の話や変更点などの情報発信はマイクロソフトにお任せするとして、ここでは相変わらずVB2005、VB2008との相性が悪いという点指摘します。

以前Expression Webが出た時もこのブログで触れたのですが、たとえば、VBで「今1時です。」という文字列をコピーしてExpression Webに貼り付けると全角文字がすべて抜け落ちて「1」だけになってしまうという現象がありました。VBからのコピー&張り付けを重視する私としてはこれでは使い物になりません。

メモ帳などからの貼り付けでは問題ないのですが・・・。

この現象がExpression Web 2では治っているかと思ったのですが相変わらずでした。

以前調査してこの現象の原因はProgram Files\Common Files\microsoft shared\TextConv¥HTML32.CNVの問題であることまでは突き止めています。

このファイルの更新日付はExpression WebとExpression Web 2でまったく同じでした。改善されていないわけです。

前回同様、Frontpage2003に付属していたHTML32.CNVに置き換えたところ現象は治りました。このファイルの更新日付は2005/03/25 16:43です。Frontpage2003を持っていなかったら手が出ないところです。

Expression Webのときは、他にも貼り付けたテキストを複数行まとめてマウスで選択するとスクロールバーの位置が突然先頭に戻ってしまうという現象もあり、使用を断念したのですが、この点はExpression Web 2では改善されているようでご機嫌です。

これでうまく動いてくれるのなら使い続けたいと思います。

なお、付属のVBのバージョンは6.5でした。

| | コメント (0) | トラックバック (1)

2008年6月 9日 (月)

VB2008ではインターフェースにメソッドを実装できます

VB2008には言語自体に新機能がたくさんあるので、いまだに新しい発見をします。

先日、インターフェースにメソッドを定義する方法があることを発見しました。次のコードは有効なコードです。

Dim s As INullPulg
s.Say()

もちらんINullPulgはクラスではなくインターフェースですよ。インチキはしていません。

上記コードを動作させるために全体のコードも紹介します。

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim s As INullPulg

        s.Say()

    End Sub
End Class

Public Interface INullPulg
End Interface

Public Module ExtensionModule
    <System.Runtime.CompilerServices.Extension()> _
    Public Sub Say(ByVal plug As INullPulg)
        MsgBox("こんにちは!")
    End Sub
End Module

Windowsフォームアプリケーションにこれだけ書けば実際に試せます。

要は拡張メソッドを使っているのですがインターフェースにも拡張メソッドを持たせられるということがちょっと驚きです。このことがどう影響するか今後じっくり考えてみたいです。

この例ではINullPlugを実装したクラスにも自動的にSayメソッドの「実装」が備え付けられます。内部的にはどういう仕組みになっているんでしょうか?一度ILを解剖してみたいです。

このことに気がついたのはLINQで使用するメソッド(LINQの演算子)がIEnumerable(Of …)の拡張メソッドであるという話をよく考えてみたことがきっかけです。

| | コメント (13) | トラックバック (0)

2008年5月26日 (月)

LINQ独自拡張時の遅延実行

C#のyield returnに相当するキーワードがVBにないという話ですが、前回も書いたように私はこのことはそれほど気にならないのです。
確かにyield returnは便利な機能ですが、これがないとできないという要件レベルの機能は多分ないと思うからです。とは言え、VBに導入されれば喜んで使うつもりです。

でもLINQのことを考えるとなんだか煮え切らない気持ちになります。

というのもLINQのいろいろな機能はC#のyield returnで実装されているからです。
これが具体的に影響するのは次の2点です。
1.VBで独自にLINQのキーワードを定義しても遅延実行できない。
2.VBで独自にLINQのキーワードを定義した場合List(Of T)などIEnumerable(Of T)を実装するクラスを媒介して値を戻す必要がある。

(具体例は少し下のリンク先にあります。)

このことが気になっていたので、先日マイクロソフトのセミナーに参加した時にたまたまお話しすることができたMVPのけろ-みおさんと、マイクロソフトの小高さんに聞いてみました。

結果、けろ-みおさんの方で要点まで整理していただきました。
http://techbank.jp/Community/blogs/mymio/archive/2008/05/25/788.aspx
この中でけろ-みおさんは拡張メソッドの中でさらにLINQを使うという面白い試行も紹介しています。
しかも、そのLINQはスパイスが効いています。VBのLen関数をうまくLINQで表現されています。

ちなみにLINQのキーワードを独自定義するにはIEnumerable(Of T)に対する拡張メソッドを作成します。

話は変わりますがマイクロソフトは無料で質のいいセミナーをしばしば開催しています。みなさんもマイクロソフトのサイトをチェックしてみてください。
http://www.microsoft.com/japan/msdn/events/offline/

今回私が参加したのはこの中の「さあ、できることから」というやつです。参加と言っても前でしゃべる人ではなく一般人として参加してきました。
技術的には基本的なことがらが多かったですが、実際の画面操作を見ながらいろいろな話をきけてとても参考になりました。ほぼ同じ内容を6月以降地方でも実施するようですからお近くにお住まいの方は足を運んでみてはどうでしょうか?

| | コメント (2) | トラックバック (0)

2008年4月27日 (日)

C#のyieldを甘く見てました

VBばかり見ていたせいでC#のyieldのすごさを見逃していました。

C# 2.0でyieldが登場した時は、「簡単に列挙できて便利だなぁ、VBにもあればいいなぁ、でもなくてもなんとかなるからしばらくは我慢するかぁ」くらいに思っていたのですが、最近知りました。

yeild returnで返すメソッドは遅延評価されるって皆さんご存知でしたか?(このようなメソッドをサブルーチンではなく『コルーチン』と呼ぶらしいです。)

たとえば、このC#のコードを眺めます。

        private void button1_Click(object sender, EventArgs e)
        {

            var ar = GetEnum();

            listBox1.Items.AddRange(ar.ToArray());
          
        }

        private IEnumerable<string> GetEnum()
        {
            yield return "Apple";
            yield return "Banana";
            yield return "Cat";
            yield return "Dog";
        }

GetEnumメソッドが実行されるのは、どのタイミングかというとlistBox1.Items.AddRangeの行なんですね。てっきりvar ar = GetEnum()の行かと思ってしまいますよね。ちょっとステップ実行してみてください。

まぁ遅延実行も別になくてもいいんですけど、LINQの演算子の標準実装がこれなんでちょっと気になりました。

クエリ式では定義済みの演算子を使用するだけなので別にVBでLINQの機能が制限されるとかそういうことではないです。ただ、メソッドベースのLINQを使うときに自作の拡張メソッドを作る場合にC#ならばyield returnを使用することで標準のLINQと同じような遅延評価ができるのに、VBだと自作の演算子だけ即時評価にならざるを得ないかなと思っただけです。

はい。別に自作演算子で即時評価が行われてもいまのところ特に困る気はしません。

| | コメント (3) | トラックバック (2)

2008年4月22日 (火)

「考える」の語源

岩波文庫の「日本書紀」は解説(注・補注)が非常に非常に面白いです。日本書紀の内容より補注が面白いです。補注が本文と同じくらいボリュームがあります。

それで今日知ったのですが「考える」という言葉は上古は「カムカヘル」でこれは「カ」を向かい合わせにして比べて合うか合わないか見比べてみるという意味なのだそうです。

そして、「カ」とは点・場所という意味で、いまでも「スミカ」とか「アリカ」とか一部の単語に残っているあの「カ」だというのです。まめ知識といってしまえばそれまでですがなんだか言葉が楽しくなってきますね。

久々の書き込みがVBネタじゃなくてすいません。

| | コメント (0) | トラックバック (0)

2007年10月14日 (日)

F1の状況依存ヘルプの盲点

ご存知の通り、VBではプログラム中にF1キーを押すとその時の状況に応じてヘルプが開くようになっています。

たとえば、次のプログラムを考えます。
If EventLog.Exists("Visual Basic 中学校") Then
    '…
End If

このとき、Existsの個所ににテキスト入力のカーソル(キャレット)を移動してF1キーを押すと、EventLogクラスのExistsのヘルプを見ることができます。

従来はこの使い方しかしなかったので気がつかなかったのですが、先日ある方から指摘を受けて気がついたことがあります。

Capture03_3

同じプログラムで、画像のようにExistsだけを選択状態にしてからF1キーを押すと別のEventLogクラスではないExistsメソッドのヘルプが表示されるのです。(画像はクリックすると大きくなります。)

選択されているときは、どうも選択内容だけをヒントにMSDNライブラリを検索に行って、最初に見つかった該当項目を表示するようです。

これだと、初心者にF1の機能を説明するときに注意事項として伝える必要がありそうですね。

この機能って必要ない気がするので、できればなくして欲しいです。
なんか便利な活用方法ってありますかね?

| | コメント (0) | トラックバック (0)

2007年10月10日 (水)

マイクロソフトが.NETのソースコードを公開する

Visual Studio 2008の発売に歩調を合わせてか、このほど、マイクロソフトが.NETのソースコードを公開すると言う情報が出回っています。
日本語の情報源
http://www.atmarkit.co.jp/news/200710/05/dotnet.html

「公開する」であって「公開した」ではないので、あわてないようにお願いします。

上のリンクを読めばわかりますが、System名前空間やSystem.IO名前空間など基礎的な部分のソースコードから公開されるようです。
ソースコードが公開されるメリットはいくつかありますが、私にとっては「学習効果」が大きいです。
今まで、どうやればいいのかわからなかったり、もっといいやり方があるんじゃないかと悩んでいた部分も.NETの豊富なソースコードをサンプルとして利用することで解決できる可能性があります。
しかも、マイクロソフト純正ですから質が高いことも期待できます。

とは言え、情報源には書いてありませんが.NET Frameworkの大部分はC#で記述されているはずなので、VBファンとしてはちょっと悲しいものがあります。
.NET上ではC#とVBは非常に似ているので、C#でも問題はないのですが…。

ちなみに私が一番ソースコードが見たいのはColor構造体です。あまり取りざたされていませんが、Color構造体にはあるすごい機能があって、私はどうしてもその機能の実現方法がわからないで悩んでいるのです。

それから、謎に満ちたASP.NETの内部の挙動も直接ソースコードレベルで見られるようになるので楽しみです。

| | コメント (0) | トラックバック (1)

2007年10月 8日 (月)

スマートクライアントとかクリックワンス(ClickOnce)ってどういう意味?

Webサイトで偉そうにVBにことを書いたり、ブログまで書いている立場上恥ずかしいのですが実はこの前まで「スマートクライアント」と「クリックワンス(ClickOnce)」と「ノータッチデプロイメント」の3つの言葉の意味がよく分かっていませんでした。

いや、どんなものかは知っていましたよ。みなさんも、これらの言葉を聞いたことくらいはあるのではないでしょうか?意欲的な方はその内容もわかっていらっしゃるかもしれません。

でも、3つの言葉を明確に区別して説明できますか?

今回せっかく調べたので区別できない皆さんのためにここにメモ程度ですが書いておくことにします。

まず、スマートクライアントとは、Windowsフォーム(リッチクライアント)とWebフォーム(シンクライアント)の中間のようなアプリケーションの形態のことで、具体的にはWebでURLを入力したりリンクをクリックすると、Webページが表示されるのではなくWindowsフォームが表示されると言う実行の形式のことです。

これによって、exeやdllファイルはサーバーで管理しつつ、ユーザーはインターネットにアクセスできる環境があればインストールなしでアプリを使用できると言ういいとこどりの技術なのです。

もっとも、実際にはいろいろ前提や制約がありますがまぁ正直便利です。ばりばり現役の技術です。

次に、ノータッチデプロイメントとは、上記のようなプログラムの配布方法の技術のことです。つまり、サーバーにおいておいた実行ファイルがブラウザ経由で呼び出されてクライアントで作動しますよという配布形態を可能にする技術です。これ以前はプログラムの配布と言えばCDなどにSetup.exeをコピーして、CDを入れてインストールしてもらうと言う形態でしたらから、ちょっときいた感じ便利そうですが、実際にやってみるといろいろと面倒な点があったためほとんど普及しませんでした。
VB.NET2003のころに使用されていたもので、現在では廃れた技術です。

最後にクリックワンス(ClickOnce)とは、ノータッチでプロイメントを改良して発達させた配布方法の技術です。配布形態はノータッチデプロイメントと同じなのですが、いろいろと面倒なことがあった点がかなり緩和されていて使いやすくなっています。これなら使ってもいいかなと思わせるものがあります。
VB2005のプロジェクトの設定画面から簡単に設定できますし、現在も現役の技術です。

グレープシティ社のActiveReportsのデモの1つがクリックワンス(ClickOnce)でできているので興味があったら見てみてください。

http://dotnetdemo.grapecity.com/demo/arnet/win_demo_clickonce.htm

説明に書いてありますが、最初にインストールが必要です。このあたりの配布に関する形態も参考にするといいと思います。

こんなところで、どうでしょう?

| | コメント (0) | トラックバック (0)

2007年9月26日 (水)

複雑すぎる件

現在と将来の計画をみていると、プログラムの世界の複雑化が非常な速度で進行しているように感じます。

現在、上級エンジニア・上級プログラマを自負するのならばどれだけのことを知っている必要があるでしょうか?またはどれだけの経験を積んでいる必要があるでしょうか?

VBがどんなに詳しくてもだめです。C#やJavaに詳しくてもだめです。上級を名のるならどれかのプログラミング言語に精通していることはもちろん、データベース・ネットワーク・セキュリティ・Web・スケーラビリティなどをはじめいろいろなことを知っていなくてはいけません。

Javaに精通しているだけでWebサイトを構築できるでしょうか?もちろん、できません。できても穴だらけなはずです。

一昔前はそもそもWeb開発というものがありませんでしたし、セキュリティにもほとんど気を配る必要はありませんでした。データベースも今と比べると低機能・低性能でしたがシンプルでした。そして今、それらは複雑です。複雑系といってもいいくらいです。

さらに、今後の未来を見るとこの傾向は強まるばかりです。

自分の方向性を見定めてポイントしぼった方がいいかも。初学者には敷居が高くなりそうですね。

AJAX、Silverlight、XNA、SAS、VSTS、ADO.NET Entity Framework、SSIS、ADSI、WCF、…、思いつくままに並べてみましたがみなさん、こういった続々と登場する言葉やテクノロジを見て何を感じますか?

あれもこれもと手を出さないで、器用に習得していくことが重要なようです。全部にどっぷりなんてとても無理です。この傾向はなんとなくさびしい感じがします。

| | コメント (0) | トラックバック (0)

«そろそろLINQ