これもつぎの話が分かるための必要知識ですが、オブジェクト指向言語と関係している。
(Object oriented モジュール化するとの意味です。)
.netFramework(または.net)はマイクロソフト社が提供しているWindowsプログラムミングためのライブラリ(Lib)です。
ライブラリ:図書館→知識倉庫のこと
クラス:PGのモジュールのこと。手本、設計図のこと。
中には大きく2タイプあります。
一つはクラスライブラリ(Class liberay) C++やC#、Javaなどオブジェクト指向言語用のWindorws functionや部品のクラスライブラリです。アプリコンパイル段階で取り込まれる。
一つはダイナミックライブラリといい、コンパイル済の実行コードのライブラリですが、アプリリンク段階で実行ファイルに取り込まれる。
(Javaの場合はリンクは存在しないので、Jarファイルにパケージされる。)
分かりますか?おそらく素人だとぼんやりしていると思いますが、もうちょっと具体的に話します。
例えば:Main窓に押しボタン一個作ります。のbuttonClassはあらかじめ.netframeworkライブラリに定義されているので、最初からボタンを描く必要がない。そして、ボタン関連のすべての動作機能はイベントやメゾードとしてbuttonクラスの定義の中に含まれている。
プログラマーとしては、.netframeworkからbuttonClassを引用するだけで、ボタン関連のすべての機能が使える。実際、WindowsPG上はクラス定義を引用するだけではボタンが表示されないので、ButtonClassの”インスタンス”をプログラムメモリー上で生成することで実際画面上にボタンが現れる。
(つまり、この画面上はボタンは一時的なもので、PG終了すると消えるからインスタンスと呼ばれる。)
OK,分かったね。
さらに、クラス(各種部品)のインスタンスがBIOSのメモリ上(画面上)で生成すると、初期化(コントラストというメゾード)もクラス定義のままで実行される。つまり共通的な初期化手順を書く必要もないです。楽ですね。
そして、個別的な初期化手順、例えば、このボタンの表面に”K1”と表示する場合は、コントラストメゾード内で明示的な書く必要がある。
button.contrast(name='k1'){};
の感じですね。文字列'k1'をボタンの名前にするとのことです。この手順はクラスのオーバーライトと言います。ほか、変動のな機能は継承されるからなにも書かなく出いい。
***甚大な問題#1
パソナさんの派遣エンジニアは(誰かの指図により)BingIMEからのテレメトリー関数をSelectedChangedイベントに埋め込んだ。その結果ですが、プルダウンメニューが選択されるたびにテレメトリーが現在の値を発信することになります。
例えば:IMEスキン選択ComboBoxの場合は、a,b,c,d四つのスキンがあります。大体最初おぼ白いでいろいろ弄ると思いますが、弄っているところはすべて”ユーザーが選択した”と発信されるが、実際”確定”はしていません(使われてもいない)。
設定画面が閉じる時は確定ですから、ほんとうはCloseWindowsイベントにテレメトリーを埋めるといいなのに!
このミスはPG自身は動くですが、受信したユーザーユーセジデータは私の予測では4倍膨らむです。その内4の3分は"未確定"データですから、こゆうデータを図表にして分析なんか無意味のほか開発を誤導してしまう。一応多くの人は使っているとの分析結果だけは現場の人には有利で、リストラから逃れるかもしれない。(そゆう意味か?w)
カナイの指摘に対しては、担当K1さんの答えは”そのままでいい”ということで、コンパイルできっているから急いてPJを締めたい感じです。しかしね、K1さんがテレメトリー発信データ応用側のYKさんに対しては、”ドッグフードユーザーが画面上で遊んでいるからデータが多くなった。”とプログラム上の不都合を隠したよりも、YKさんやCさんの言い訳らしきことをブーメランしているような感じがあった。カナイの推測では、このオフィスにはCさん以外にパソナさんをPGミング的指図できるものいない(K1さんもWindowsFrameWork理解がないため、分からないだろうと思われたかもしれないが、しかし、K1さんは上海人の小賢い特性が持っているから、なんとなく”故意な誤り”の匂いが分かっているようだ。)。
事実上、この”誤ったやり方”は、偽物の”ドッグフードユーザー”にテレメトリーを多く発生することに便宜を提供した(場合よりロボット的にテレメトリーを大量発生させることも可能な状態です。)。
***甚大な問題#2
パソナさんの派遣エンジニアはBingIMEからのテレメトリーは初期化メゾードに埋め込みしている。このやり方を引き出した問題は:
IME設定画面(タグ)に上から下にプルダウンボックス四つ並んでいる。A、B、C、Dとします。
テレメトリー仕様上は、Aボックスが選択されたら、A&B&C&D四つのボックスの現在値を”論理和”にして送信する。
TelemetoryはInit()メゾード(あるいはcontrast)に埋め込んだことで、Aボックスのインスタンスが生成された時にコントラストは実行され、テレメトリーも同時発信されます。
その時は、B,C&Dの現在値を取ろうとしますが、B,C,またはDは存在しませんとエラー表示して、失敗してPG終了になります。(実際コンパイル段階で警告メッセージが出ますが、あまり警告多い場合は見逃れてしまうです。)
なぜ?
また追加知識が必要です。
Windowsプログラムミング開発環境ツールいろいろありますが、一番普通に使うVisualStudioを例にします。
VisualStaudioでWIX(MVCモデル)でWindowsプログラム作る場合は、画面作りのCADみたいな機能があります。それは、実際アプリ画面上の部品をCADのように配置します。VSは画面定義ファイル(XMLファイル)を自動的に生成してくれる。
注意!CAD画面をコンパイルするではなく、CAD画面から生成したXML画面定義ファイルをアプリのコンパイルに読ませるです。この方式のメリットは画面部品の位置の座標を書かなくで済むです。自動的CAD画面から座標を拾ってくれるので、作業のスピードがアップ。
実際アプリのプログラムはWindows画面を一瞬で同時生成ではなく、Main枠から複数の部品のインスタンスを順番に生成していく。つまり、
A、B、C、Dボックスの順番でインスタンスが生成される。Aが生成された時にAのコントラスト中に埋め込まれたテレメトリーはBの値と取ろうとすると、Bインスタンスはまた生成されていないから、見つからないというエラーになる。・・・分かったかね?
だから、実装できない。
カナイの指摘に対しては、担当者のK1は”この部分のテレメトリーを消す”との結論だした。そりゃ、察すが経験豊富なカナイを驚いた。このPJ仕様は確かにグローバルサーバー上にあるが、K1が現場で仕様削ることを決めれることは、北京でもK1さんに文句いう人がいないことだ。自由自在プロジェクト、今締まりにしないと年末査定が間に合わはいぞ!って感じです。
ここまでくると、BingIMEのベテランCさんがなぜK1に指導できなかったか?実は指導する気さらさらないじゃない?やはりK1は仕事失敗して契約切られるといいね?Cさんは完全にYKさんの仲間で日本人派だからね。
おまけに、K1さんはパソナさんの派遣さんが論理演算式間違っていることも軽蔑な笑いして、YKさんを聞かせている。もうしかし、CさんとYKさんはテレメトリーデータを増やすつもりで、二人のメクラをつもりで選んだかもしれない。
年末査定後は、K1は見事に昇進され組織上はYKさんを取って代わる形になった。YKさんはもうしかし日本マイクロソフトへ出向かもしれない。だから、その後は日本マイクロソフトからBing派遣さん募集掛けたが、でもこん案件の続きがあれば、MSDから指示出すから、パソナさんは二重派遣にはまるおそれがあります。
あと、BingIME/CopilotIMEは実は使われていないであれば、Cさんの仕事もなくなる。現在一番使われているのはWindows11に組み込まれているWindowsIMEだ!
正直、K1さんは年末昇進ためこの案件を担当していたから、上流からのバックが強いので、すきなように”完成”されると思う。しかし、この案件の別の側面で、現場の人は”仕事確保”のためこの手あの手使うって、もう日本人が集まるところでは信用できんじゃない?
やはり世帯の教育と育ちの問題?
論語「子曰わく、性相近し。習えば相遠し。」
次章のテレメトリーノ3へ
福主人
