DisposeActionクラス

C#で後処理を行いたい場合にfinallyブロックに記載することが良くあります。
途中でreturnで抜けても、例外発生しても必ずfinallyブロックが実行されるので安心です。

たとえば以下のように記載します。


try {
    //ここで処理Aを実行
    counter++;
    //ここで処理Bを実行
} finally {
    counter--;
}

処理Aのあとにcounterを+1し、処理Bを実行後にcounterを-1するコードです。
これだと処理Aでreturnや例外発生するとcounterが-1されて正しく動作しないです。
このコードだと、処理Aだけtryブロックの外側で実行するだけで良いですが、そうもいかない場合も多々あったり。

というわけで、DisposeActionクラスを作ってみました。
いたってシンプルなクラスで、コンストラクタで与えたラムダ式をDisposeメソッド内で実行するだけです。
以下のように使用します。


//ここで処理Aを実行
counter++;
using var _ = new DisposeAction(() => counter--);
//ここで処理Bを実行

先程の問題が解決し、行数が減り、コードも見やすくなったのではなかろうかと思います。

DisposeActionのインスタンスは不要なので、本当は以下のように書けると良いのですが。現状のC#では出来ないです。


using new DisposeAction(() => counter--);

朝倉氏遺跡に行ってみて。

こんにちは mtj です。

福井の朝倉氏遺跡にいってきました。
発掘物の復元方法等色々展示されており勉強になる部分も多々ありました。

巨大な城下町復元ジオラマ等もあり そういった物を作るのも面白そうと感じました。
様々な復元を見て職人の技だなと関心しました。

職業柄エンジニアの視点になってしまうので地味にタッチパッドだったりそういった機器の動作にも惹かれました。

軸制御案件の見積もり

先日、案件の見積もりを行いました。

ざっくり言うと3軸アームを制御してアームに取り付けたセンサによりワークの検査を行うシステムで、
ワークそのものも何かしらのセンサとなります。
機能が多く、かなり見積もり工数が膨らんだため、
工数内に予定通り納められるか不安ではあるのですが、
自分は軸制御の案件は初めてなので実装を楽しみにもしています。

個人的に一番楽しみなポイントは、
ワークであるセンサの出力の波形から適した近似式のパラメータを求めるところです。
近似式を計算する関数に一回通すだけでなく、
n手間加えて若干最適化のような処理を行う仕様となる予定で、
実装するのを楽しみにしています。

まだ注文が出たわけではないのですが、
注文が出たら頑張ります。

社内ライブラリをGit+VisualStudio2022に移行

弊社で開発しているソースコードのバージョン管理はVisualSourceSafeを惰性で使い続けいました。
数年前からは新規プロジェクトはGitを使用していますが、古いソフトはVisualSourceSafeのままです。

社内ライブラリもVisualSourceSafeだったのですが、VisualStudio2022がVisualSourceSafeに対応していないため、この週末にGit+VisualStudio2022に移行しました。
予想していたより問題も起こらず、すんなりと移行完了。単体テストも全てクリア。

こんなに簡単なら、もっと早くに移行しておけばよかった。

ほかのプロジェクトも徐々にVisualSourceSafeからGit+VisualStudio2022に移行を進めていきます。
VisualStudio2022でないと「GitHub Copilot」も使用できないですし。

BitSummitに行ってみて

こんにちは mtjです。

京都で開催されているビットサミットに行ってみました。
日本だけでなく海外からのインディーゲームの展示もありかなりグローバルなイベントだという印象を受けました。
大手企業から学生作品まで大小様々な規模のゲームが展示されており見てて飽きないイベントでした

開発者視点から言うと業界の繋がりを深めるにはいいイベントだなと感じました
学生でそういった開発者(学生同士でも)と話せる機会、作品を見せれるはそれほどないので
こういったイベントでこそこういった物を作ってる等交流を行うことでチャンスを増やすことができると感じました。

ビットサミットとは関係ないのですが当日は祇園祭の出店の日だったのもありかなりの人出でしたどちらも活気があり
京都が盛り上がってる気がしました。

remove.bg

remove.bg (https://www.remove.bg/)という写真や画像の背景を消すサイトを使ってみました。
試しにremove.bgを使ってフリー素材から背景を消してみました。

他の画像でも試してみましたが、人物がきれいに切り抜かれています。

また、背景をぼかしたり、

背景を別の画像に差し替えることもできます。

使ってみると結構面白かったです。
趣味でコラ画像を作るのが捗りそうです。

ChatAIを用いたオープンソースコードの調査

先日、PythonのコードをC#に書き直すことになる案件の工数見積のために、
Pythonコードの調査を行いました。
以前もPythonの書き直しの案件はありましたが、
今回は以前と違って他社さんが作成したコードでなくGithub上のオープンソースのコードが対象です。
(もちろんライセンスには準拠します。)

自分がPythonに不慣れなのもあるのですが、
Pythonは型宣言がほとんどなくデータの型を追いにくい
(特に多次元行列をスライス記法でnumpyなどに投げた結果、
 どのようなデータに整形されたかがわかりにくい)
といった理由で読むだけでは判断が付かず、
実際に動かしてみないと処理内容に確証が持てないことが自分は多々あります。

そこで今回は、読んでいる途中でBingChatに投げてみました。
メソッドを貼り付けて、
・「以下のコードを説明してください」
・「以下のコードを1行ずつ説明してください」
などとお願いしたところ、
わかりやすくメソッド概要とコードの1行ずつの解説が出力してくれて、調査の時短になりました。
説明が不明瞭or不足している箇所も部分的に「この部分を説明してください」とお願いすることで、
深堀りして説明を得られました。
これさえあれば自力で解読する必要はないかもしれませんね。
(解説を理解し、間違っていないか判断するためにプログラムの知識は必要ですが)

業務コードを投げるのはコンプライアンス的に問題ですが、オープンソースなら大丈夫ですし、
・GPTのバージョンにより学習期間は異なりますが、
 オープンソースは基本学習済みのため精度の高い回答を貰える可能性が高い
・単純なコードでない限り、自力で解読するより圧倒的に速い
ように思いますので、オープンソースの解読には積極的にChatAIを利用しようと思います。

「GitHub Copilot」で効率的なコーディング

「GitHub Copilot」とは、コーディング中にAIがコード例を提示してくれる、今後のソフトウェア開発を大きく変える革新的なツールです。
弊社でも最近このツールを使用しております。
VisualStudio標準のAI補完機能「InteliCode」よりも柔軟にコード例を提示してくれます。

自分が書いたコードを学習し、適切なコード例を提案してくれます。
開発者は、Copilotが提供するコード例を参考にしながら、より迅速かつ正確なコードを作成することができます。
これにより、開発の生産性が向上し、バグのリスクを低減することができます。

Copilotはまだ新しいツールであり、正しくないコードを提案することもあります。
しかし、Copilotの精度は徐々に向上していくことが期待できますので、今後が楽しみです。

IT技術の勉強

こんにちは mtjです。

IT業界は昔から常に勉強と言われている業界です。
どんどん新しいサービス、デバイス、技術等が生まれ消えていっています。

数十年前はクラウドでクラウドと盛り上がり
その数年後にはディープラーニングで盛り上がり。
現在ではChatGPTでしょうか

盛り上がった物だけで考えてもかなり移り変わっていると思います
デバイスで考えても小型化、高速化も顕著です

そういった技術についていき活用する、勉強することで自分の価値というものが上がっていくと思います。
会社で使っていないから勉強しない、覚えないでなくなんでも吸収していく事をこういう業界だからこそ心掛けたいと思います。

オープンソースのライセンス

先日、とある案件でライセンスを表記せずに使っているオープンソースがたくさんある、
という問題が発生し、対応を依頼されました。

ライセンスにもさまざまな種類があり、
利用する際にソースコードの開示が必要なもの、著作権を表示するだけでよいものなどがあります。

もしライセンスに違反してしまうと、製品の配布停止や損害賠償などにつながる恐れがあります。
実際にライセンス違反で訴訟される事例もあります。

株式会社オージス総研 岩佐 朗子
「OSSライセンス違反とその対策」(2023年6月12日アクセス)
https://www.ogis-ri.co.jp/otc/hiroba/technical/oss-license-violations/

オープンソースを利用するときはライセンスが何かをきちんと確認して、
ライセンス違反しないように利用条件を守ったうえで利用していきたいものです。

商用利用については、GPLなどソースコードの開示の必要がある場合は
自社の独自技術の流出のリスクがあるために製品としての配布が難しいので、
ApacheやMITなど、ソースコードの開示の必要がないものを
使用した方が無難と思われます。