月別アーカイブ: 2011年01月

5 posts

ボランティア

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

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

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

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

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

私が住んでいるところはつくばに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年半で歌を歌うようになる子供の成長に感動します。

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

人生を変える

今若者が学校を出ても職につけなくて大変厳しい時代が続いています。

私が若い頃はまだ日本に貧乏があって、私の通っていた公立中学から高校に進学したのは、男子で1/3、女子では1/5程度ではなかったでしょうか(もっと少なかったかもしれません)。さらに公立高校から大学に進学したのは同じく男子で1/3、女子も1/5程度だったのでしょう。

当時が今と人々の気持ちで違うのは、当時はたとえささやかであっても、それぞれが「目標」を持てたということでしょう。一つは「アメリカ」が象徴する豊かさへの憧れであり、可能性への期待感があったと思います(可能性を求めて多くの若者が東京を目指しました)。

今の時代は、私たちの時代より数倍物質的には恵まれていますが、心のよりどころをどこにも求めることのできない絶望感があるもかもしれません。

 

私は戦中生まれで、西日本の1地方都市で育ちました。私の父は建築の職人(親方)で、兄3人も父の手伝いをしていました。

私は男ばかり6人兄弟の4番目で、兄弟の中で唯一公立高校に進学し、職人一家の中では「出来る」子供でした。

しかし公平にみれば高校は中くらいの成績で平凡な生徒でしたが、それでものんきに地元の大学に進学して、将来は建築家になることを夢みていました。

家計のことは無関心でしたが、恐らく父の会社は経営が困難になっていて、私を大学に進学させる経済的余裕がありませんでした。

高校3年の正月を前に、父と一緒に働いていた兄から「大学にはやれない」と涙ながらに告げられました。
頭が真っ白になりました。
卒業を間近に就職活動を始めてみても、どこも使ってくれるところはありませんでした。

残された道は私も兄達と同じく父の仕事を手伝うことでした。

3月になると高校の授業もなく、それぞれに就職や進学の準備をしています。
とても皮肉なことに父は地元の大学の工事を請け負っていました。
国立大学の発表の日でした。
天気のいい寒い朝だったと思います。
私も朝から大学の建築現場で、鍬を使ってトロ箱でモルタルを捏ねていました。

誰かが私の目の前を通りすぎようとしています。
「ふっと」目をやると、数日前まで席を同じくしていたクラスメートでした。
小倉君と井口君と北川先生です。

私は声を上げることができませんでした。
かれらが私に気づいたのかどうか知りません。
影絵のように彼らの横顔が「スーと」通り過ぎていきました。
今も鮮明に覚えています。
目の前何メートル先だったのでしょうか。
遠い昔の映像は今も私の脳裏に焼きついたままです。

「なぜこういうことになったのか」私は深く反省しました。
「誰のせいにすることも出来ない」。
「すべては自分のせいだ」。

しばらく建築現場で働きました。
幸い兄弟が沢山いたので兄弟のサポートを受け、2年遅れて地元の(そう私自身土方仕事をしていた)国立大学の建築学科に進むことができました。

 

私は意志の強さを信じています。

「同じ人間に出来ることが自分に出来ないはずがない」と。
(スポーツ等生まれながらの身体能力にかかわることでない限り)

僭越ですが、苦悩する若者にエールを送りたいと思います。
「負けるな」