WindowsデスクトップアプリのGUIフレームワーク

WindowsデスクトップアプリのGUIフレームワーク(の中でXAMLを使用しているもの)について、以下のサイトに現在の状況が記載されており参考になりました。
https://www.kekyo.net/2021/02/23/7230

インフォテックの利用状況は、過去の案件はWindowsForms、新規案件はWPF、まれにUWPといったところです。
実運用でAvaloniaが使い物になるなら試してみたいですね。

現在実行しているメソッドを取得

C#で現在実行しているメソッドを取得するプロパティを作ってみました。
何かと役に立ちそう。
インライン化されないようにMethodImpl(MethodImplOptions.NoInlining)を指定するのがポイントです。

public static class Current {
    public static MethodBase Method {
        [MethodImpl(MethodImplOptions.NoInlining)]
        get {
            var stackFrame = new StackFrame(1);
            return stackFrame.GetMethod();
        }
    }
}

HTMLからPDFに変換

あるC#案件でHTMLからPDFファイルに変換する必要があった時の話。

C#で使用できるPDFライブラリを探し、PdfSharpにたどり着きました。
少し面倒だが日本語フォントにも対応できます。
しかし、PDFドキュメントの作成方法がGraphicsオブジェクト並のローレベルな描画メソッドなので、HTMLから変換するのは手間がかかりすぎ。

次に見つけたのが、HtmlRenderer.PdfSharp。
これは今回したいHTMLからPDFをそのまま実現できるライブラリ。ありがたい。
ですが、日本語フォントの出力方法が不明。
内部的にPdfSharpを使用しているが、バージョンが古いため日本語フォントを使用する方法が異なり、方法がわからない。

他に良いライブラリも無く、どうしたものかと思っていたが、別に変換が出来れば方法は何でも良いので、
コマンドラインでHTMLからPDFに変換できるソフトを探し、wkhtmltopdfを見つけました。
日本語フォントにも対応でき、正しくPDFに変換できました。

実装がC#なので、C#から使用できるライブラリを探しましたが、こだわる必要が有りませんでした。

忙しくなりました。

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

評価用画像処理ソフト

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

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

これとは別にお客様自身で画像検査システムの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デザインを行っている兄に質問しまくって何とか形になってきました。