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

3 posts

コード

例えば、”様”とか”殿”とか”御中”とかの敬称を幾つかのForm(あるいはクラス)で使うとします。データベースの中の顧客テーブルでこれをどのように表現するかという問題です。

最初の案は、顧客テーブル敬称列に”様”、”殿”、”御中”をそのまま記入します。敬称がたくさん使われていないのであればそれでもいいかもしれませんが、沢山ありしかも列の値(”様”、”殿”、”御中”等)が長い場合、あるいは今後変更が予想される場合は、データベースでは列の値そのままではなくコードを使う方が有利です。

最初に考えるのは、すべてのコードをたとえば2ケタの整数で表現する方法です
(勿論数字でなく、アルファベットでも日本語でもここでの議論では本質的に同じです)。最初の桁はコード分類:たとえば性別は1、敬称は2とします。2桁目は項目の内容:たとえば”様”は”1″、”殿”は”2”、”御中”は”3”
とします。

するとたとえば”12”は敬称の”殿”を表現しています。

この方法の長所は単純だということですが、欠点は後の変更に対応しにくいことです。たとえば分類区分が1桁で足りなくなったとき、あるいはあとで考えるとコードを入れ替えた方がいい等メンテナンス上の弱点があります。

次の案はコード区分項目名コード等の列を持つコードテーブルを作る案です。下のようになっています。

敬称、様、0
敬称、殿、1
敬称、御中、2

顧客テーブル敬称列にはコードテーブルコードを記入します。Formで顧客の敬称を表示するには、顧客テーブルコードテーブルJoinを使って項目名を取得し表示します。画面の[敬称]データを保存するときは、逆に敬称項目名から同じくSQLを使ってコードを算出し、顧客テーブルにこのコードを保存します。

ただしこの方法では顧客のコードを算出するのに、そのたびにデータベースへのアクセスをしますのでいかにも非効率です。

当然データの量とIOアクセスのトレードオフを勘案しなければなりませんが、このテーブルデータをメモリ上に保存することを考えます。

私は長年ある意味原始的なDictionaryを使った方法を使っています。多少工夫をしていますが、ベストと思っている訳ではありません。参考までにご紹介します。

今例として性別敬称の処理を取り上げます。

まず、BICollectionというクラスを定義します(勿論名前は何でもいいです)。
中身は項目名からコードを検索するDictionaryと、逆にコードから項目名を検索するDictionaryからなります。

Public Class BICollection
    Private m_dist項目名2CD As Dictionary(Of String, Integer)
    Private m_distCD2項目名 As Dictionary(Of Integer, String)

	・・・・

     Public Function GetCD(ByVal prm項目名 As String) As Integer
        Return m_dist項目名2CD(prm項目名)
    End Function

    Public Function GetName(ByVal prmCd As Integer) As String
        Return m_distCD2項目名(prmCd)
    End Function
End Class

これに対して、列挙子とオブジェクトを定義します。

    Public Enum CODE
      性別
        敬称
	・・・・
        LAST = 999
    End Enum

    Public BIC性別 As BICollection
    Public BIC敬称 As BICollection

さらに、列挙子をキーにBICollectionオブジェクトをValueにしたDictionaryを定義し、CODE列挙子と項目名からコードを算出するメソッドと、逆にCODE列挙子とコードから項目名を算出するグローバル・メソッドを定義します。

     Public Dct区分2BIC As New Dictionary(Of Integer, BICollection)

    Public Function GetCd(ByVal prmPF As Integer, ByVal prm表示名 As String) As Integer
        Return CType(Dct区分2BIC(prmPF), BICollection).GetCD(prm表示名)
    End Function

    Public Function GetName(ByVal prmPF As Integer, ByVal prmDbCode As Integer) As String
        Return CType(Dct区分2BIC(prmPF), BICollection).GetName(prmDbCode)
    End Function

敬称の”様”からそのコード(今その値は0とします)を計算するには、
GetCd(CODE.敬称, “様”)で、逆に性別の”0″の項目名は、 etName(CODE.敬称, 0)で算出します。

実際にはBICollectionにはもう少し情報が付加されていて、性別や敬称の項目名とそのコードをもっていますので、ComboBoxItem設定の仕組みも持っています。

すなわち、項目名をDisplayMemberにコードをValueMemberに設定しますと、ComboBoxで表示されたTextはDisplayMemberに、ValueMemberコードを示します。

しかし、LINQが使えるようになった今は、メモリ上でSQLを作成できますので特別厳密に処理速度を求めるのでなければ、LINQの方が数段すぐれているように思います。

学校

相手が反論できない場で一方的に誰かを批判するのは公正ではありません。
ここで書くことは特定の個人や団体に関するものですが、
それを通して教育界一般へ問題提起するものです。

もし、ご意見、反論があれば、リンク[ご意見・お問い合わせ]からメールを送ってください。
真面目な議論は公正に取り上げます。

これまで何度かこのブログで書きましたが、
近くに孫がいて、私と気が合うし、とても可愛がっていました。

突然その孫の一家が引っ越すことになり、
私は大変悲しく思っていました。

しかし気を取り直して、自分の孫を可愛がるのもいいが、
もっと広く次の世代を担う子供たちの役に立てば、
それはそれでうれしいことだと思い、
近くの中学校に「できることがあればなにかやらせてください」とお願いしました。

中学校と近隣の二つの小学校の校長先生と顔合わせしたのは今年の1月のことでした。
その時、
「当小中学校は市が指定する理数教育推進校になっているのでよろしく」
のようなお話があり、
「今後さらに具体的お話を進めていきましょう」ということで、一回目の会合は終わりました。

早速2月に入れば担当の先生を決めていただいてご相談しながら、
「新学期から何か子供に役立つことが導入できれば」と期待していました。

しかし、2月になると「何とか研修会があって時間がとれなくて…」
3月になると「卒業式があって…」
それに「地震でパニくリまして」
(「今回の大震災が、我が県の小中学校にどれだけの影響があるものか」といぶかります)
そして4月も過ぎ、5月も「平穏に何もなく」過ぎようとしています。

私は、その間つくばの研究所に行って出前講座の内容をお聞きしたり、
近くの東大の研究所でお話を伺ったりして報告しましたが、
反応らしい反応がありません。

ビジネスの世界で誰かとコラボレイトすることになれば、
当然計画を建て緊密に連絡を取りながらことを進めます。

先生方にはそのような感覚がまったくありません。
日常をこなし時間が空いたとき、
「あっ。思い出した。あれをしなきゃ」という感じです。

できの悪い子供が宿題を思い出すようなものです。
物事を詰めていくペースが私たちとは全く合いません。

この人たちはどのような日常を送っているのでしょうか。
子供に勉強を教えているだけなのでしょうか。
子供たちが将来社会人になることを見据え、
社会人としてのルールやマナーを教えるのではないのでしょうか。

「新米教師が慣れないことで」という話ではないのです。
出てくる校長や教頭や担当教師の事務処理能力のなさ最低限のマナーのなさは、
「いったいどうなっているのか」と呆れ果てています。

百歩譲って、いや千歩譲って、
「何か事情があったのだろう」と。
しかし相手がいることを考えず、
陸な連絡もせずチンタラチンタラすることが、
結果として「相手の善意をもてあそんでいる」ことになると気が付かないのか。
無礼千万。

この地区の子供の成績は県内有数なのだそうです。
とすればこの地区の教員の程度が特別悪いということではないのでしょう。

私はこれまで教育現場を一度もみたことがありません。
「先生をとりまく環境も大変だ」という先生に同情的な話を聞きます。

モンスターペアレントの話も聞きます。
確かにそうなのでしょう。

しかしそれを差し引いても、これはいったいどうしたことか。
信じがたいほど嘆かわしい。

視点を巡らせばことは教師だけではないのでしょう。
政治もひどい。
テレビのコメンテイターもひどい。
気がつけば日本中がひどい状態なのかもしれない。

正義感や向上心や相手の立場を考えて、
「他人事にしないで、自分の考えで、自分で行動する」といったことはどこにいったのでしょうか。
いつからこんなにひどいことになったのでしょうか。

大震災後の復興は容易ではないでしょう。
日本が立ち直るには人材が最重要な財産なのに、
教育現場がこれでいいのだろうか。

色んな意味で落胆しています。

家柄

家柄とか家風とかは死語になっているかもしれません。

しかし、私は時々「家柄」や「家風」について考えます。

平凡な家系に突然猛烈に頑張る人間が出現することがあります。「掃き溜めに鶴」とか「成り上がり者」という言葉がありますが、あまり恵まれていない家系の中から、抜き出た人を揶揄してそういいます。

長いつらい下積みからやっと目標の地点に到達した人は、「やった」という達成感でこれまでの我慢の裏返しとして、他人が見れば滑稽だったり、見苦しかったりの方法で自己表現します。

しかし同じように苦労をした人でも、逆に傍目には爽やかにみえる場合があります。
どこに差があるのでしょうか。

多分その人が苦労を苦労と思うかどうかの「意識」の違いだと思います。同じことでも、ある人は辛いと思い、ある人は「別に。特別なことではないよ」と思うかもしれません。

その違いはその人の成長の過程で精神的な支えがあったかどうかの違いに起因するのでしょう。

周りに支えてくれる人がいなければ(少なくとも自分でそう思っていれば)、彼は歯を食いしばり「負けるものか」と強い意思を持続しなければいけません。そうでなければくじけて絶望の淵に沈んでしまうでしょう。彼は自分に厳しく、周りに厳しい態度をし、
「なんだあの野郎」
「生意気な奴だ」と多くの場合決して好かれることはありません。
彼が背伸びをすればするだけ、周りとの軋轢も大きなものになります。

逆に周りに、
「そのようなことをするものではない」とか、
「そんなことはできて当然でしょう」とかいってくれる人がいたり、言葉よりも前に生活の一部としてそのような行動規範をもつ人は、他人を不愉快にする態度をとらないのでしょう。

長じれば友人が人の精神的成長に大きな影響を与えますが、そもそもはその人が育った家が決定的に重要な役割を果たすでしょう。

そのような家系に生まれなかった人、忠告してくれる友人もいなかった人は、自分で思い知るまで「馬鹿なこと」を積み重ねます。

しかし、馬鹿なことをしてたくさんの失敗や反省から多くのことを学びます。自分の能力の可能性や限界や、他人の痛みや優しさや正義感や人の世のバランス感覚や。

「だからどうした」

別に意味はないのです。
自分の出生を嘆いたり、他人のそれを羨んでみても何の意味もありません。

他人が羨む家系に生まれ、それに甘んじ他人の心や現実社会での正義を学び取っていないまま、勘違いして総理大臣になり、一国に多大の損害を与える人間もいます。

また自分の環境に飽き足らず背伸びし、周りにたくさんの迷惑をかけ、その分他人からの責めを甘受しなければいけないこともあります。

自分の人生を振り返り、恥じ入りあるいは「もうこれでいい」と「丸く」なる人もいるし、
そうならない人もいます。

吉田拓郎はどういう家柄の人か知りませんが、精神的には背伸びして生きてきたのでしょうか。

「俺を許してくれ」という歌があります。
その中に、
「家族を乗り越えたけれど こころが痛い こころがつらい」
という一節があります。

とても切なく何度も聴けません。

私も「前へ」と生きてきたましたが、「たくさんの迷惑をまき散らしたのだろう」と。
「でも、しかたなかったのだ。愚直に生きてきただけだ」とも考えます。

他人の人生を実証的に調べたことはありません。
自分自身の人生や、秀吉やTVに出てくる人たち-尾崎将司や石川遼や吉田拓郎や色んな人の人生をぼんやりみているとそんなことを思います。

それにしても、それなりの家系というのは、三代同じ想いを想い続けて初めて形になるのではないかと思います。孫が爺さんを尊敬しなおかつ乗り越えようとするとき、やっとその家の家柄がきれいな色合いに染まってくるのでしょう。