.NET Framework から .NET Core へ

C#などで作成した既存のプロジェクトを .NET Framework から .NET Core へ移植するのに必要な作業量を調べるツールが有ることを知ったのでメモ。

.NET Portability Analyzer

早速、社内ライブラリで試してみたところ、.NET Coreでさポートされていない機能の一覧が合計25箇所表示されました。DataContextとRemotingに関する内容が大半です。
これくらいなら対応できそうです。

あとは参照している別ライブラリ類ですが、どうも.NET Coreプロジェクトから.NET Framework を使用しているDLLが使用できるようなので大丈夫そうです。
試していないですが、以下のサイトなどで出来ているのでなんとかなるのでしょう。
https://qiita.com/soi/items/e1cf2abf9845164bf439

DataGridViewに任意のコントロールを表示

今回もまたWindowsFormsのDataGridViewコントロールを拡張したお話。

任意のコントロールを表示できるセルを実装しました。

セルのValueプロパティにコントロールをセットすると、セルの描画位置にそのコントロールが表示されます。

もちろん、セルに表示したコントロールを操作することが可能です。

今回の実装により、DataGridViewで表現できる幅がさらに広がりました。

DataGridViewのホットトラッキング

今回もWindowsFormsのDataGridViewコントロールを拡張したお話。

マウスカーソル下にあるセルの背景色・前景色を自動で変更する処理(ホットトラッキング)を社内ライブラリに実装しました。プロパティの設定だけで実現できるのでコーディング不要です。

内部処理は、DataGridViewのOnCellPaintingメソッドをオーバーライドし、マウスカーソル下かによってCellStyleを変更することで実現しています。

DataGridViewにグラフを描画

DataGridViewコントロールにグラフ表示を行う機能を追加しました。
現在対応しているグラフは、横棒グラフ・縦棒グラフ・積上横棒グラフ・線グラフ・面グラフ・点付き線グラフなど。

既存のグラフコントロールを使用して、セルのGraphicsオプジェクトに直接描画しているので、他のグラフに対応するのも簡単です。必要があれば円グラフや3Dグラフなども対応できます。

今回の実装により、DataGridViewで表現できる幅が広がりました。

画像処理ライブラリの機能追加

最近、画像処理案件が続いてあり、社内の画像処理ライブラリに色々と機能追加を行いました。

a) ライブラリの64bit対応
b) 画像処理の並列化
c) 欠陥素子補正
d) 色マッチング処理

まだまだ機能追加したいことがあるのですが、時間が足りないです。
無限に開発をしていたいのですが時間は有限なのでしかたないですね。

ログ + スクリーンキャプチャ

インフォテックで作成するソフトではログファイルを必ず出力するようにしています。

稼働している設備でなにか問題が発生した場合などにログファイルを調べれば、エラーメッセージ・例外スタックトレース・通信内容・シーケンス状態などが全てわかるようにしています。
これにより問題発生時の原因究明・問題改善が容易になります。

今回、ログ出力に機能追加を行い、エラーメッセージを表示する直前にスクリーンキャプチャ画像ファイルを保存する機能を追加しました。
これにより問題発生時の状況把握がさらに容易になります。

先日もこの機能のおかげで、装置問題発生時のA/D即値や波形が確認できたことで、問題が装置側にあることがすぐに分かり即解決できました。

64bitのOpenCV

画像処理ライブラリOpenCVを良く使用するのですが、いつも32bit版のDLLを使用しています。
本来なら64bit版を使用したいところですが、同じソフト内で使用する他のライブラリが32bitしか無いことが少なからずあり64bit版を避けていました。

今回、32bit版と64bit版でどの程度の性能差があるのかが気になり確認してみました。
その結果、64bit版に変更するだけで3割くらい速度アップしました。
処理内容にもよるでしょうか、単純に速くなるのはありがたいです。
それと64bitにすることで1プロセスが使用できるメモリ上限も増えるので、メモリ不足の心配も少なくなります。

今後はできるだけ64bit版を使用するようにし、32bitでしか動作しないライブラリなどは32bitの別プロセスで実行し、プロセス間通信でやりとりする作りが良いと考えています。面倒ですけど。

既存ソフトの作り直し。

今行っている仕事は2台の既存設備の他社製PCソフトを1から作り直し、2台とも同じPCソフトにする案件。

1台は10年前くらいの設備、OSはWindowsXP、言語はC++。
もう1台が厄介で、25年以上前の古参設備、OSはMS-DOS、言語はN88-BASIC。良くあるんですよね、こういう古いソフトの作り直し。

C++のほうは(ソースコードが汚いものの)問題なく読めて理解できます。

N88-BASICのほうはトリッキーです。実際に動かして見ないと何をしているのか追っかけられない。しかたないのでPC98エミュレータを用意して実機無しでも動くようにして調査しています。

それにしても良くN88-BASICのソフトが動いているものです。動かなくなる前に作り直しになってよかったです。壊れてから焦って作り直ししようとしてもすぐには対応出来ませんので。

デザイン

弊社が作成するソフトは工場で使用されるものが大半。
そのため、デザインはあまり気にされません。というよりはデザインにコストをかけることは喜ばれません。

しかし、現在開発を行っているソフトは外販の可能性もありデザインにコストをかけて良く、私が関わってきたソフトで一番凝ったデザインのソフトになっています。

私の兄がフリーランスとしてデザイン会社を営んでおり(https://m-code.jp/)、以前から一緒に仕事が出来ればと思っていましたが、とうとう実現しました。
兄は普段WEBデザインやCGデザインを行っており、パナソニックやオンキョーなどの案件を担当していますので実力は十分。お客様からもとても良い評価を頂きました。

SSD

最近、会社で使用しているデスクトップPCとノートPCをSSDに交換しました。
NVMeなのでHDDに比べて、シーケンスアクセスで10倍、ランダムアクセスで100倍近く高速です。

PC操作時の色々なタイミングで速度を実感でき、快適に開発が行えるようになりました。