年別アーカイブ: 2010年

47件の投稿

Refactor!

VB2008でDeveloper Express社の無料のRefactorを使っていました。
これで重宝しているのは、メソッドの[パラメータ並びのリオーダー]と、
変数とその初期化を1文で書いたり逆をしたり、変数の位置を実行文の近くに移動したり逆をしたり、
プロパティの作成をサポートしたりとかです。

VSプロパーでも[名前の変更]というのがあります。
このチョッとして機能はとてもありがたいです。
名前が不統一のままで開発を進めると、後で自分でつけた名前に苛立ち、変えたくなります。

[名前の変更]は、コントロール名でも、クラス名でも、メソッド名でも、メソッドのパラメータ名でも
一箇所で修正すればスコープを認識して関連する箇所すべてに亘って変更してくれます。
定期的に使ってプロジェクト全体での名前の統一性に気をつけています。

これまでDeveloper ExpressではVB用に無料の版をだしていたのでずっとこれを使ってきたのですが、
VS2010を導入したのを機会に正規版を購入しました。

私のメインのコンピュータには、VS2008とVS2010がインストールされています。
VB2008では無償のRefactorが動いていたのですが、
有償のRefactorをインストールするとおかしくなりました。
VS2010では新Refactorが問題なく動作するのですが、VB2008を立ち上げるとエラーメッセージが出ます。
但し、VB2008でも新Refoctorが動作します。

VB2008用のRefactorをアンインストールしたら、今度はVB2008でまったくRefactorのアドインが読み込めません。
すなわち、VB2008では全くRefactorが使えなくなりました。

開発元のDeveloper Express社に問い合わせましたが、埒が明きません。

再度無償版をインストールすると、VB2008ではOK。
今度はVS2010で全くRefactorが表示されなくなりました。

こちらをたてればあちらがたたず。

Developer Expressの回答待ちです。

Action Pack

注文していたAction Packが届きました。

やるべき仕事があるので、すぐ飛びつくことができませんが、
Visual Sudio 2010をVistaに、Expression WebをXPにインストールしました。

Visual Studio 2010は画面の「雰囲気」が一変しました。
VS2008のプロジェクトは、自動アップデートで問題なく動作するようです。
私はWPFを全くしらないのですが、これがWPFなのでしょうか。
デザイン的には暗い配色で、ヘルプの構成やデザインも変わりました。
デザインは好き嫌いの分かれるところです。
内容はまだよく分かりません。
VBの継続行でアンダースコアを使ってきましたが一部不要になります。
ざっといえば、継続が分かる部分で、例えばメソッド定義でカンマ以下を[C]のように次行に黙って持っていってもよくなります。

VB2008で気に入っているのは、LINQと拡張メソッドです。
この当りがVS2010でどのように進歩したのか、
また添付のInstallShield Limited Editionが使い物になるのか期待しています。

一方、Expression Webはマクロメディア(現在はアドビ)のDreamWeaverやFireworks等に対応していると思います。
少し触っただけですが、私が所有しているDreamWeaver MXに比べて、機能が豊富になっていると感じました。
これも全体が暗い感じのデザインで評価は分かれると思います。
もう一つ感じたのは、「もしかして[重い]かもしれない」ということです。

どちらにしても、今の仕事の片をつけてから、使って行きたいと思います。
楽しみにしています。

開発環境

開発者にとって開発環境を整えるのは、昨今経済的に大きな負担です。

Windowsの場合MSDNを購入するのが最適ですが、これが安くはありません。
開発者が多数であれば全員にそろえるのは会社にとっては頭の痛い問題です。
開発ツールとしては、MSDNだけでなくたとえばSpreadやDreamweaverやPhotoshop
更にはインストールツールの費用もかさみます。

Java環境ではNetBeansやEclipseが無料ですので、
できればJavaで仕事をしたいと考える開発者もいるかもしれません。

Windowsの世界では、Expressエディションが無料ですから、
これはこれで助かります。
SharpDevelopはマイクロソフトが提供するオープンソースで、
これもなかなかしっかりしています。
特にC#-VBのコンバーターが付いていますので、いつか使ってみたいと思います。

インストールツールはWixを注目しています。
これも確かマイクロソフトがベースを提供しています。
インストール条件をXMLで記述しますので、
とても透過性に優れていて好感をもっていますが、
何より情報が少ないのが残念です。
現在の欠点としてプレインストール(SQLサーバー等)の設定が出来ないと思いますが、
Visual Studioとの組み合わせで解決策があるのではないかと期待しています。
VSのインストールプロジェクトで唯一不満なのは、
インストールの途中でプロダクトIDの入力を求める部分の作りで、
公開されている手法は単純すぎるので、プロテクトになっていないのです。
この点が解消されるのであれば、VSのインストールプロジェクトだけで済ましたいくらいです。

さて、私自身数年間MSDNを使っていたのですが、
直近ではMSDNではなくVisual Studioのみ購入しで仕事をしてきました。

そろそろVS2010を使いたくてMSDNの購入を検討していたのですが、
マイクロソフトのAction Packに開発環境が付属していることが分かりました。

Action Packは主に販促用のパッケージだと思いますが、
Development バージョンにはOSやVSの最新版がついています。
とりあえず開発で必要なすべてのツールがそろっているようで、
価格も求めやすく設定されています。
早速注文しました。

FrontPageの後継でしょうか、Expression WebというWeb開発用のツールもあるようです。
わたしはもっぱらDreamweaverを使ってきましたが、
古くなったのでExpression Webを試してみるつもりです。

OOPの工夫

私はFarPoint社のSpread Sheetを多用します。

シートの行を削除したり、コピーやペーストをあちこちの画面(Form)で使いたくなります。このコードをそれぞれの画面で書いていたのでは、メンテナンス上よくありません。

VBでは、共通関数をModuleに書くことはできますが美しくありません。

コントロールに新しい機能追加する一つの方法は、そのコントロールを拡張するカスタムコントロールを作ることです。

しかしカスタムコントロールの作成は少し大げさでメンテナンスに手間取りそうなので別な方法を考えます。いま、これらの処理を受け持つクラス(仮にMySpreadとします)を一つ作ります。

FormではSpreadを配置し、Spreadのデザインやデータの入出力はすべてFormで処理します。MySpreadではSpreadに対応したContextMenuStripのインスタンスを作成し、右クリックしたときのプルダウンメニューの処理をこちらで行うことにします。

FormでMySpreadのインスタンスをつくり、Form上のSpreadとのリンクを付けておきます。

MySpreadの中で行削除や、コピーアンドペースト等のメソッドを準備してやれば、各Formでこれらのコードを書く必要はありません。

Public Class MySpread

    Private WithEvents m_Spd As FpSpread
    Private m_Sheet As SheetView

    Private m_ContextMenuStrip As New ContextMenuStrip
    Private WithEvents m_tsmi挿入 As New ToolStripMenuItem
    '  m_tsmiコピー、m_tsmi切取、m_tsmi貼付、 m_tsmi削除 等以下省略

    Private m_activeRow As Integer
    Private m_コピー元 As Integer
    Private m_コピー中 As Boolean

    Sub New(ByRef Spd As FpSpread, ByVal shtIdx As Integer)
        m_Spd = Spd
        m_Sheet = Spd.Sheets(shtIdx)

        m_tsmi挿入.Text = "挿入"
        m_tsmiコピー.Text = "コピー"
        m_tsmi切取.Text = "切取"
        m_tsmi貼付.Text = "貼付"
        m_tsmi削除.Text = "削除"

        m_ContextMenuStrip.Items.Add(m_tsmi挿入)
        m_ContextMenuStrip.Items.Add(m_tsmiコピー)
        m_ContextMenuStrip.Items.Add(m_tsmi切取)
        m_ContextMenuStrip.Items.Add(m_tsmi貼付)
        m_ContextMenuStrip.Items.Add(m_tsmi削除)
    End Sub

    Private Sub FpSpead_CellClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles m_Spd.CellClick
        If blninit = False Then Exit Sub
        activeRow = e.Row
    End Sub

    Private Sub tsmi挿入_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_tsmi挿入.Click
        m_Sheet.AddRows(activeRow, 1)
    End Sub

    ' 	以下省略

    Private Sub tsmiコピー_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_tsmiコピー.Click
    End Sub

    Private Sub tsmi切取_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_tsmi切取.Click
    End Sub

    Private Sub tsmi貼付_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_tsmi貼付.Click
    End Sub

    Private Sub tsmi削除_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles m_tsmi削除.Click
    End Sub

End Class

実はこの話は以前ご紹介しました、[複数コントロールのセットを何度も使う]と内容的には同じことです。この原始的方法は、結構役立ちます。

とはいえOOPの工夫をもっと体系的に研究する必要があると考えています。デザインパターンを少し勉強しましたが、デザインパターンの技術を採用する場面が余りありません。

私のOOPの勉強は10数年前のJavaに始まり、確か2002年ころから.NETを使用してプログラムを書いていますので、特にVB.NETは目をつむっても書けるくらい慣れ親しんでいますが、デザインパターンはほんの一掴みほどしか利用していません。

理由がよくわかりません。一つには私が、デザインパターンを使いこなすほど勉強していないからだと思いますが、開発している内容も向き不向きがあるかもしれません。

ライブラリ等似たような話題が沢山あって、それらを体系的に構築しなければいけないケースでは、確かにインタフェース(に代表されるデザインパターンの技術)をうまく使う必要があると思います。が、10万行にも満たない事務アプリでは、似たようなクラスあるいは幾層もの階層をもったクラスを余り使いません。このようなケースでデザインパターンを使った高級な技術の必要性を感じていません。

それともう一つ現実的な問題として、そのプロジェクトに投入できる技術者の質と量の問題があると思います。マンパワーを十分かけた大きなシステムならいざ知らず、数万行のアプリケーションの作成では、高級な技術者がそろっているわけではありませんので、難しいコードを使うと後々メンテナンスの維持ができなくなる恐れがあります。その意味でできるだけ分かりやすい原始的コードを書く必要があります。

プログラムの評価の本で、[バグを抑えるためにはローテクを使え]というような文章を読んだことがあります。

確かにそうかもしれないと思っています。

だからといってデザインパターンのような体系的なプログラム技術が不要と言う訳ではありません。十分勉強して機会ある毎に利用すべきだと思います。

(ただし、趣味から言うと、私はデザインパターンより、泥臭いがしかし示唆に富んだJoshua Blochの[Effective Java]の方が好きで、さしあたり、この本を熟読玩味するところから始めようと考えています。)

My Golf

このブログの副題では、「.NET、 LINQ、 XML、CMS そして少しの脱線と」となっていますが、
泥臭くプログラミングしていると、
プログラムのお話で取り立ててご紹介するようなことも思いつかなくて結局「少しの脱線」ではなく、
脱線だらけになっています。

私は50歳過ぎてからゴルフを始めたのですが、
口の悪い級友が「ゴルフのハーフのスコアは、結局始めた年台以上にはならないのだよ」といいました。
(30歳台で始めればハーフ30台、40歳台では同じく40台、50歳台では50台という具合です)

私は「そんなことがあるか。
1年でシングルになった人だっているのだから。
シングルとは言わないが、1年で90(ラウンド)位にはなってみせる」と意気込んで始めたのですが、
それから随分経つのに未だに90を切れないでいます。

理由はいろいろあると思います。

理由1. 
やはり歳をとると体の柔軟性がなくなり、
下半身の安定性に欠けてくるので正確にまた強くボールを打てません。
これはどうにもしようのないことで、それを補うには徹底した練習しかありませんが、
それほど練習する時間も体力もないので、これを改善することはできません。

理由2. 
これまでいい先生に出会いませんでした。
ゴルフを始めたとき、折角だから先生にチャンと付こうと思って、
ある先生に1年くらい毎週見てもらっていたのですが、
私には彼の言うことがわかりません。
ゴルフのスウィングは一瞬のできごとなので頭で考えることと口でいうことと、
実際に体で体現することが異なります。

先生が自分で思いいうことが、実際に彼の動作を正しく表現しているのか問題ですし、
その言葉を聞いた生徒が先生のいうことを正しく理解したか問題ですし、
更には聞いたことをその通りできるかどうか問題です。

人それぞれに体格も体力も体の使い方の癖も違いますので、
「自分流」を口で説明しても相手に伝わらのいのです。

理由3.ゴルファーの性格。

私はゴルフに向いていない性格かもしれません。
私は何事も理詰めで考えます。
これはゴルフに向いていません。

考え、徹底的に練習すればいいのですが、
考えそれに見合った練習をしないのは最悪です。
「テイクバックはこうあげて」
「トップでのクラブの角度はこうで」
「手の位置はこの辺りで」と理屈はよく分かっているのです。

テレビ観戦は好きですし、
ゴルフの「この一冊であなたもシングル!」というような本を何十冊も持ち、
ビデオやDVDをおそらく20本以上は持っていて、練習もそこそこするのですが、
頭で考えることと体ですることとの乖離が大きいのです。

ゴルフのスウィングは一瞬のプレーですので何よりも思い切りが大切なのです。
テイクバックの動作を始めてから色々考えるのは最悪なのです。
スウィングでは頭1、体9位の役割でなければいけません。
私は頭9、体1ですから、これではうまく打てるはずはありません。

私は、昨年秋から近くのダンロップゴルフスクールに通っています。
ここのいいところは、毎回ビデオで自分のスウィングが見えることです。

私は見る目は持っているのですから、
自分のスウィングを見ればいかにひどいものか誰からも言われないでもよく分かります。

問題はここからです、
分かったからできるわけではないので、
自分では言われたことを一生懸命やっているのですが、
ビデオを見るとうまくありません。

「テイクバックでトップの位置はここに上げて」から体が動くのですから、
そこから「ヨイショ」とオーバースウィングが直りません。

毎回毎回先生から同じことをいわれます。

「分かっているよ」

でも、ダンロップゴルフスクールでは一貫した指導方針で分かりやすく、
しかも本人が確認できますので、
欠点を気をつけて練習していけばある程度進歩があるだろうと考えています。