年別アーカイブ: 2011年

21件の投稿

札幌

弊社駐車場賃貸管理ソフト「パーキング~」をカスタマイズしたいという話があって、その支援のために札幌に来ました。多分15年ぶり位です。

寒さの程度がわからなくて、3泊4日の旅にボストンバッグに沢山の防寒衣服をつめこんで、快晴の成田を飛び立つと、福島あたりから下界は銀世界です。

青森の最北端尻屋岬から海上に出て、陸が見えてきたところに雲の合間から千歳空港が見えてきました。東京の空港に比べ広々としたところにゆったりと空港が作られています。

空港にはS社のT社長が出迎えに来てくださいました。ここ数日暖かくなって「札幌雪まつりの雪も解けかかっています」のようなお話をしながら暗くなった札幌に到着。

ホテルにチェックイン後S社に移動、T社長のご家族も集まって、歓迎のホームパーティで出迎えていただきました。

S社は住宅地の中の一般住宅をそのまま事務所にしています。アメリカではよくあると聞きますが、アットホームでとてもいいなと思います。

今回私が札幌に来た大きな理由は、ソフトウェアの内容をT社に説明することです。説明は順調に進み、昨日は天気がいいので会社のまわりを散歩しました。
メイン道路で車が通る部分は雪はありませんが、裏道には逆に雪がいっぱいあり、歩くのに神経をつかいます。わずか20, 30分の散歩ですが、顔がピリピリし、やはり北国の冬は厳しいと実感しました。

仕事の目途が付きましたので、本日作業を早めに終え、嫁たちが希望の[ジャガポックル]を買いにJR札幌駅に行きました。

その足で大して遠くないので、寒い中大通り公園まで歩いて雪祭りの出来具合を見に行きました。雪まつりは明日から始まりますが、もうほとんどの雪像が完成していて多くの人が見物に来ています。本番には身動きとれないほどの人出になるそうです。

明日午後帰ります。

ボランティア

孫が引っ越すことになり、大変かなしく思っています。

「そうだボランティアをしよう」と思い、近くの中学校にメールを送り、
「できることがあればやらせてください」とお願いしました。

学生のとき中学生を何人か家庭教師で教えた経験がありますので、
「英語なら大丈夫だろう」
「数学は教科書を見ないとわからないが…」
「勉強の方法なら教える自信がある」等々考えて、
補習のお手伝いでもさせてもらおうと思っていました。

中学校の校長先生からお電話をいただき、
「一度お会いしたい」とのこと、
早速、すぐ側の中学校に出かけました。

地域内の二つの小学校の校長先生もお見えで、
具体的お話ではなかったのですが、
「顔合わせ」ということで、
できることをやらせていただくようお願いし、
先生方もそれなりの期待をされた様子でした。

私が住んでいるところはつくばに1時間程度のところですし、
近くには東大の研究所もあります。

これらの施設には私自身多少のご縁がありますので、
子供たちに研究所を紹介したり、
逆に研究者の方に学校に来てもらったり、
子供たちに多少とも科学技術への親近感を持ってもらうお手伝いができればいいな、
と思っています。

まだ具体的ではありませんが、
次の世代の子供たちに少しでも役に立つことができれば、
これはこれでうれしいことです。

シリアル番号の検査 in MSI セッアップ、 WIX

パッケージソフトを作って、インストールの途中でシリアル番号のチェックをしたい。[InstallShield]等の高価なソフトを買うほどのことではない。このようなケースは結構あるのではないでしょうか。

[Visual Studio]でSetupProjectを作成できますが、添付されているシリアル番号の検査は、非常に単純で内実を知っているユーザからすれば全くの無防備です。

恐らく政治的な(あるいは商売上の)方針だと思いますが、マイクロソフトはこのあたりの実装について公開していません。公開されているカスタムアクションは、製品のインストール終了後直ちにインストールしたプログラムを開くとか、データベースを作成するとかの方法の情報だけで、インストールの途中で独自のシリアル番号のチェックするルーティンを走らす情報はどこを探しても出てきません。

私自身は[InstallAware]というソフトを購入したのである意味緊急という訳ではないのですが、めったに使わないのにOSや[.Net Framework]の更新があるたびに、買い替えなければいけないのは抵抗があります。

手持ちのツールでなんとかしたいと長く考えていました。

なんとかなるのではないかと思いますのでご報告します。
道具立ては[Visual Studio 2010]と[Wix](WixEdit:Wix用無料IDE)です。

[Visual Studio 2010]には、マネージコード用のカスタムアクションDll作成ツールが付いていて、C++でもVBでもC#でもカスタムアクションが作成できます。手馴れた言語が使えるのはありがたいことです。

次はWixの情報です。これがなかなかありません。
多分唯一といっていい解説書は、[Wix : A Developer’s Guide to Windows Installer XML](PACKT)です。
ドンぴしゃりの解説はありませんが、Wix一般を勉強するにはいい教科書だと思います。紙が不必要に厚いのが気に入りませんが、英文は平易ですので読み進むのに抵抗はありません。

一番ほしいシリアル番号ルーティンの組み込みの方法は、インターネットで入手可能な[Wixチュートリアル](日本語訳)で十分です。

これだけあれば、[Visual Studio]のセットアッププロジェクトで可能な限りキチンとしたセッアッププロジェクトを作成し、インストールパッケージ(msi)を出力。出来上がったmsiを[WixEdit]で逆アセンブルし[wxs](XMLソースファイル)に変換して、これにカスタムアクションを組み込めばよい。

と思っていたのですが、そうは問屋が卸さないようです。
[Visual Studio]の[msi]を逆アセンブルした[wxs]は、教科書に書いてあることといささか異なります。出来上がった[wxs]はすんなり使えません。

これを色々調べながら使うくらいなら、はじめから[WixEdit]でwxsを作った方がいいようです。[Visual Studio]はDllの依存関係と所在を教えてくれますので、[Visual Studio]ではその辺りの情報だけ使うとよいと思います。

完全ではないのですが、模擬的にこれでよさそうだという[wxs](msi)を作りました。WixEditでターゲットマシンのディレクトリを作り、[Visual Studio Setup Project]からDllの情報を参考にしながら、ディレクトリの中にComponentを作成。[Wixチュートリアル]に従って[UI]を作成。この中で[Visual Studio]で作っておいたカスタムアクション(.CA.dll)をコールするようにしました。

まだ色々詰めなければいけませんが、なんとか物にできそうです。

C# 嫌いなところ

VB to C#の作業は、必要最小限のFormを書き換え、コンパイルエラーがなくなるところまで来ました。まだ沢山の警告が出ますので、これもつぶしていかなければいけません。

C#のいいところは、VBに比べて「オブジェクト指向」らしいというところです。オブジェクト指向の基本理念を守っていますので、使っていてある種安心感があります。オブジェクト指向の本筋を勉強できるかなと思います。

しかし、嫌いなところもあります。これはオブジェクト指向とは関係ない話だと思います。仕様を改定してほしいものです。

先ず、ブロックから抜ける方法です。
VBの[Exit ]構文は、

Exit { DO | For | Function | Property | Select | Sub | Try | While }

です。
ブロックがネストしている場合にも、指定のブロックから抜けることができます。例えば次のようなものです(一部、[Visual Basic .NET ランゲージリファレンス](マイクロソフトプレス)から)。

Sub ExitStatementDemo()
    Try
        Do
            For I As Integer = 1 To 1000
                Dim MyNum As = Int(Rnd * 1000)
                Select Case MyNum
                    Case 7: Exit For
                    Case 29: Exit Do
                    Case 54: Exit Try
                    Case 65: Exit Sub
                End Select
            Next I
        Loop
    End Try
End Sub

C#には[break]がありますが、これは一番内側の繰り返しブロックから抜けるだけです。tryブロックには使えません。

Javaでは、ブロックにラベルを付すことができ[break label]でそのブロックから抜けることができます。
(以下[Java クイックリファレンス](O’Reilly)から)

testfornull: if (data != null) {
    for (int row = 0; row < numrows; row++) {
        for (int col = 0; col < numcols; col++) {
            if (data[row][col] == null) break testfornull;
        }
    }
}

C#ではこれらの仕組みがありませんので、ネストした内側のブロックから抜けるためには、ラベルを用意しFortran流の[goto]を使うしかありません。エレガントではありません。

次はswitch文です。
VBではCase文に[式]等が使え柔軟です。

Dim Number As Integer = 8
Select Number
    Case 1 To 5
        ...
    Case 6, 7, 8
        ...
    Case Is > 8
        ...
    Case Else
        ...
End Select

しかし、C#([switch])ではCase文のラベルには定数またはリテラルしか使えません。ラベルが列挙子や文字列だけならいいですが、でなければif文を書いた方がいいくらいです。

ついでに嫌な部分を書けば、関数コールで参照渡しを使う場合、オブジェクトのプロパティを渡せないことです。オブジェクトそのものを渡すか、関数コールの前後に作業用の変数を用意しなければならない、ことも大変面倒です。

例えば、沢山のテーブル(クラス)が[更新日]列を持っていて、レコードに変更があれば更新日を書き換えるものとします。クラスの[更新日]プロパティでなく、クラスそのものを参照渡しにすると、クラスの数だけ関数を用意しなければいけません。これではあまりにひどいので汎用化したいのです。ジェネリック(多分だめ)かインターフェースかAbstractを使うことになると思いますが、これがなかなかうまくいきません。

まだ十分研究していませんが、これはこれでコツを掴まなければいけないのだろうと思っています。

コーちゃん

孫のコーちゃんは、2歳5ヶ月になりました。

こちらの言うことのオーム返しが出来るようになり、単語が大分増えました。
「おとうさん」、「おかあさん」は発音があまり上手でなく、
状況がわからないと何といっているか分かりません。

「じいちゃん」ははっきり発音し、時々「じいちゃん」を連発します。
わたしはコーちゃんが大好きですし、
コーちゃんも私が気に入っていると思います。

同年輩の幼児に比べて並外れて活発で、
わたしと散歩する時などそこらじゅう駆け回り、
50センチ程度のところからは飛び降ります。
顔には小さな傷が絶えません。
大きな怪我をしないことを祈っています。

好き嫌いがハッキリしていて、
何でも「好き」、「嫌い」を即答します。
恐らく母親が可愛がりすぎたためだと思いますが、
母親には強烈に駄々をこねます。

親がいないとき私に対してはとてもいい子です。
私のいうことをよく聞いてくれます。

コーちゃんは活発で頭のいい子だと思っていますが(爺馬鹿です)、
唯一気がかりなのは、少し年上の子に無条件で近づいていくことです。

おとなに媚を売るのではないので、
そのような心配ではないのですが、
少し年長の子にはほぼ必ず近づいていき遊ぼうとします。
恐らく、今いい遊び友達がいないのだろうと思います。
同年輩の子供とは波長があわないので、
「いい兄貴が見つかるといいのだが」と思っています。
4月から幼稚園にいくので友達ができることを期待しています。

妻は九州の実家に手伝いにいっていますので、
時々私はコーちゃんと二人きりでお出かけします。
そういうとき私はコーちゃんの家に迎えにいき、
半日コーちゃんと遊んで、彼の家に送っていきます。

お正月妻が我が家に帰ってきました。
4日には、コーちゃんを我が家で遊ばせようと息子に連れてきてもらいました。
遊んでいる間に息子はこっそりと帰ったのですが、
しばらくすると、お父さんを探し始め、「おとうさん、おとうさん」と悲しがります。
彼はお父さんと一緒に来たのであり、
「お父さんがいなくなった」という認識があります。
わたしが彼を連れ出すときは、そのような悲しがりはしません。
「じいちゃん」とのお出かけで親から分かれてきた状況と、
気がついたら親がいなくなったのでは違うのでしょう。

6日には妻と私とコーちゃんでデパートに行きました。
母親と一緒のときはわがままが出るのですが、
お子様ランチはどれも「嫌い」を言わず食べました。

お子様ランチのおまけにオモチャがついていて、
かごの中からプラスチックの包丁で切るトマトのオモチャをもらいました。
家にすでに一式持っているのですが、
とても好きでトマトの真ん中をマジックテープでくっつけたり、
包丁で切ったりして遊んでいます。

食事がすんであまりにチョロチョロするので、
私はコーちゃんを抱き上げて妻の買い物に移動途中トマトを落としてしまい、
衝撃でトマトが欠けました。
コーちゃんはとても悲しそうに「おかあさーん」と泣きそうになります。

妻が食器を物色している間、
コーちゃんと階段に座って、「チューリップ」の合唱をしました。
「さいた さいた チューリップの花が、 
ならんだ ならんだ あか しろ きいろ」
全部は歌えませんが、節回しのところどころで声を出して、
彼なりに精一杯歌います。

この世に生を受けて僅か2年半で歌を歌うようになる子供の成長に感動します。

息子がもしかしたら引越します。
とても悲しく思っています。