忙しくなりました。

コロナ禍の影響による案件停滞も落ち着き、反動で急激に忙しくなりました。
手が空いている間に進めていました評価用画像処理ソフトは一旦置いといて、納期がある通常業務の開発を進めています。
なんとか前倒しして、評価用画像処理ソフトの開発を進めたいところです。

評価用画像処理ソフト

現在、評価用の画像処理ソフトを作成しています。

社内用には画像処理ソフトがあり、これを使用すれば複雑な画像処理も作成できるのですが、開発者用の複雑なソフトになっています。

これとは別にお客様自身で画像検査システムのPoC(概念実証)が行えるようなソフトを作成しています。
画像処理システムで良く使用する機能だけを簡単に組み合わせできるようにします。
画像処理だけではなく、その前後の開始トリガと結果出力を別機器とやりとりできるソフトになり、そのまま設備に組み込んで画像センサーとして使用できるようになる予定です。

Infortec画像処理システムを表示

VPN接続

先月から常にテレワークになったので、社内プライベートネットワークにVPN接続できるようにしました。

今までは必要なときだけ社内PCにTeamViewerでつないでいましたが、VPNのほうが何でもできて便利ですね。

今までVPNをよく分かっていなかったのでVPN接続出来るようにしてなかったのですが、もっと早くから使っておけば良かったと思ったのと、自分のよく分かっていない技術について知ろうとしなかったことを技術者として情けなく思いました。

コレクションのループ処理で、要素とインデックスを使用したい場合の書き方

C#のお話です。

以下のようなコレクションitemsの各要素にたいして処理を行なう際に、処理内でインデックスが必要な場合はどのようなコードにするのが良いかについて。


var items = new[] { "a", "b", "c" };

 
レガシーな書き方だと以下です。
いまどきfor文でループしたくないですよね。


for(int index = 0; index < items.Length; index++) {
    var item = items[index];
    //indexとitemを使用する処理
}

 
foreachだと以下です。
forよりはマシですが、itemsからインデクサを使用して要素を取得するところが残念です。


foreach(var index in Enumerable.Range(0, items.Length)) {
    var item = items[index];
    //indexとitemを使用する処理
}

インフォテックの社内ライブラリを使用する場合、IListの拡張メソッドForEachが実装してあるので、以下のように実装できます。


items.ForEach((index, item) => {
    //indexとitemを使用する処理
});

上記の方法でだいたいは問題ないのですが、処理をラムダ式で実装出来なかったり、出来ても複雑になってしまう場合、インフォテックの社内ライブラリにIListの拡張メソッドAndIndexが実装してあるので、以下のように実装できます。


foreach (var (item, index) in items.AndIndex()) {
    //indexとitemを使用する処理
}

追加した拡張メソッドはとても単純な実装内容ですが、たったそれだけでコードが非常に分かりやすくなっていると思います。

WEBアプリ

今、弊社では珍しくWEBアプリを作成しています。

いつもはWindowsデスクトップアプリがほとんどですので、WEBアプリ作成に関するノウハウや社内ライブラリが少なく、悪戦苦闘中です。
ですが、新しいことを学習するのはとても楽しく、時間を忘れて没頭してしまいます。

フレームワークは、ASP.NET Core Blazorを使用したかったのですが、既存のDLLの兼ね合いで.net coreでは困難なため、.net frameworkが使用できるASP.NET Core MVCを使用しました。

WEBデザインを行っている兄に質問しまくって何とか形になってきました。

.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で表現できる幅がさらに広がりました。