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

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

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

リモートツールの良し悪し

こんにちは、mtjです。

コロナによりリモート管理ツールが色々社会で流行るようになってきました。
文字ベースのやり取りができるチャットツールまでは良いのですが リモート会議ツール等に関しては扱う個人の慣れに大きく影響されてしまいます。

リモート会議ツールに関しては
・音声
・画面共有の仕方
・各自発言者の認識

オフラインでは気にしなくても良いような点で不都合が発生します。
会議ツールの選定+事前確認内容の資料等を準備したほうが慣れてない人達にも解りやすい気がしました。

ちなみにマイクはUSB接続がおすすめです ジャック式のでも動きますがPCのデバイスに依存してしまうため満足に動かない、ノイズが酷い等損をする場合があります。

C#9.0 record

C#9.0でrecord型が追加されました。
まだ実務では使用していませんが、
今後C#でとても重要な機能になると思っています。

最も活躍できるのが、DDDのValueObjectでしょうか。
今まではそれらしい事をするには等値性を表現する為に、
Equals()やGetHashCode()をoverrideする必要がありましたが、
record型はコンパイラが自動で行ってくれます。

そして定義がとても簡単に行えます。
Microsoftの説明を引用すると、

public record Person {
 public string LastName { get; }
 public string FirstName { get; }
 public Person(string first, string last) => (FirstName, LastName) = (first, last);
}

と同じことが、

public record Person(string FirstName, string LastName) { }

と書けます。とても簡潔ですね。

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

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

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

2020年お世話になりました。

mgcです。

気が付けば2020年も残り10日となってしまいました。
今年も多くの企業様に大変お世話になりました。
誠にありがとうございました。

ありがたいことに私自身はコロナ禍でも大変忙しくさせていただいておりました。
2021年にはコロナ収束を願い、より一層気を引き締めていこうと思いますので
宜しく願い致します。

それでは皆様くれぐれもお体にはご自愛くださいませ。

プログラミング言語の変化

こんにちはmtjです

プログラミングは基本勉強し続けていくものというのは大体のプログラマが思っている事だと思います。

自分のメインとしているC#も2012年頃と比べるとかなり書き方が違います。(バージョンでいうと5.0から8.0or9.0)

しかし、.Netの互換性等もあり最新のOS向けのプログラムは最新Verで作らないといけないわけではないので
10年前のC#でも現代で動かすことが可能です。
勉強をやめてしまっている人でもプログラムを書くことは可能ですが古い書き方になってしまい
最新の書き方で書かれているものならば理解自体が難しくなってしまうと思います。

言語が進化していれば自ずと勉強していくものですが 言語自体が古く進化がない言語だと勉強が止まってしまうので
その場合はかなり努力が必要だと思います。

そういう意味でも若い人がCobol、VB6等を頑張って保守するのでなく現在の流行りの言語を行わせ
年配者が古い言語を保守すべきなのではないかと感じました。
古い言語を勉強すること自体は幅も広がり悪いことでは無いと思いますが 古い言語を専門にしては先細りの分野なので
将来性が薄いと感じてしまいます。

リファクタリング

既存のソースコードに新しい機能や変更を加えようとするとき、
まず既存のコードをリファクタリングします。
そして切り出したり共通化したクラスやインターフェースなどを、
ソリューションやプロジェクト内のどこに記入するべきか考える必要があります。

全体の設計思想や、選択したフレームワークによって、
適切な場所があるはずですが、なかなか上手く収まらない事もあります。

そのような場合は、自分が全体の設計思想に対する理解が足りていないか、
ソリューションやプロジェクトが上手く構成できていない事がうかがえます。

リファクタリングは基本的には必要な時に行いますが、
例えばテストファースト開発のように、
開発サイクルの中で常時行う方法もあります。

年末の大掃除と同じように、まとめて後でやろうとすると大変です。
普段から少しずつ行っていればリスクも少なく、
ソリューションやプロジェクトの構成もより明確になってゆくものだと思います。

リファクタリングであまり悩むことが無いよう、
安心して開発できる環境を目指したいと思います。

HTMLからPDFに変換

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

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

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

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

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

制御の柔軟性

mgcです。

機械を制御するプログラムであるからこそラダーは柔軟な対応ができるように
設計を行うべきだと感じる事が多々あります。

設計段階で追加改造のことなど考えるのは難しいですが
ある程度頭の中で、[もしかするとこの動作だと難しいかもしれない。]というように
機械の動きを想定しながら最終改造となりそうな箇所を予想して
その分の領域をバッファしておくのも制御屋の力量なのではないかと思います。

設計がうまくできていないと
領域にバッファが無くなり最終的に一括置換でデバイスをずらさなければいけない等の
手間が生じます。
こういった手間を防ぐためにも設計はしっかりと行いたいものです。

PCパーツの変化

こんにちは mtjです。

GPUのRTX3090が販売されました。
以前のRTX2080を軽く超えるものらしいです。
シェーダー処理のFLOPSで言うと2080が11TFLOPSで3090は36TFLOPSらしいです

現状自分は1080tiなのでレイトレーシングすらまともにできないのでどちらでも欲しいのですが
2080の2倍以上という性能は魅力的です。
3090は欲しいのですが価格も20万超えと圧倒的なので悩んでいるところです。

あと数十年もすればこの性能がタブレット等携帯端末になっているかもしれないと考えると本当技術の進化は圧倒的です。

自分たちプログラマもハードの性能を発揮できるように勉強も必要になっていくと思います。
現状でも大量のCPUコアを扱えるので非同期処理等をうまくできないとコアを遊ばせてしまう状態です。

プログラムの変化もそうですが扱うPCの性能、進化を知るのも大事だと感じました。