C# ファイルがロックされているかを取得

C#でファイルが開かれてロックされているかを取得したかったので.netを調べたが、どうも無いみたい。
無いものは自作。FileInfoクラスのIsLocked拡張メソッドを社内ライブラリに追加しました。
(どこかのサイトを参考に作成したのですが、どこか忘れてしまいました。)

使用頻度は少ないですが、なにかの役にはたつでしょう。


public static bool IsLocked(this FileInfo file) {
    if (file == null) return false;
    if (file.Exists.Not()) return false;
    try {
        using var _ = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    } catch {
        return true;
    }
    return false;
}

今年初めに実家に戻った時福井の雪を久しぶりに見ました。
自分の子供の時より少なく 10cmぐらい積もった程度でした。

雪国で暮らしていると雪で一面白くならないと冬が来た感じがしません
最近は福井でも12月はあまり降らなくなっているのでいいものが見れたと思います。

子供のときから雪を見ていると雪が降ってきても冬だなー程度しか思うことはなく
考えることといえば明日自転車で学校いけるのか 電車が止まって帰れないんじゃないかになります。
電車が止まる、自転車通学できなくなれば何十分も真っ白で一直線の農道を歩くことになります。
雪で歩きにくく、寒いので割と苦行でした。

ReSharperのInlay Hints機能の表示切り替え

3カ月ほど前からVisualStudioに拡張機能のReSharperを導入しました。
リファクタの提案をしてくれたり、スニペットを登録できたりと、何かと便利に感じています。

そのReSharperなのですが、デフォルトで型推論varの実際の型であったり、
引数のパラメータ名であったりを表示してくれる機能 Inlay Hints があります。
この機能、他者が書いたコードを読む際には大変便利なのですが、
下記例のように1行が長くなってしまい、逆に不便に感じることがしばしばあります。

a
Inlay Hintsで冗長になる例

そこで、任意のタイミングでInlay Hintsの表示/非表示を切り替える方法があれば良いのにと思い調べてみたところ、
ReSharperの公式マニュアル[1]に記載されていました。
以下の方法でできるようです。

1. スクロールバー上部アイコンを右クリックして表示したコンテキストメニューから切り替える
2. エディタ上で Ctrl+Shift+Alt+5 ショートカットキーを押す
3. ResharperのOptions -> Environment -> Inlay Hintsで、
Enableのチェックを外す or visibilityをShowAlwaysから別の項目に変更する


1. InlayHintsコンテキストメニュー


3.-ReSharperのOptions

2は押すキー数が多く、3はOptionsウィンドウを開くのに一手間かかるので、
この中だと個人的には 1のコンテキストメニューが一番手軽だと感じました。

マニュアルには、visibilityをPush-To-Hintにすることで、
Ctrlキー長押し?やCtrlキー2回押しで表示を切り替えれる旨の記載があるのですが、
こちらは上手く再現ができませんでした。
圧倒的にこちらの方が手軽なので、VisualStudioにて再現できた方がいれば、
その手順など教えていただけると嬉しいです。

[1] インレイヒント | ReSharper: https://pleiades.io/help/resharper/Inline_Parameter_Name_Hints.html

初級ソフトウェア品質技術者 資格試験

11月に、初級ソフトウェア品質技術者 資格試験を受けました。
ソフトウェアの品質技術を身につけ、品質の向上を目的とした試験で、
ソフトウェアの品質向上に関する知識を体系的に学ぶ為に受験しました。

試験に関しては、初級試験の合格率は40%前後なので、きちんと学習しないと合格は難しいようです。
また今回の試験から新しいシラバス(Ver.3.0)となっており、出題範囲も広くなっています。
私の場合はシラバスの用語をピックアップしながら、テキストを読み進めるスタイルで学習しました。
実務で品質を扱っていないと用語や概念が難しい部分もありますが、
ソフトウェアのライフサイクル(企画~廃棄まで)を意識して、
今はどのプロセスの内容の事を指しているのかを把握する事が重要だと感じました。

学習した内容を生かして、
今後は社内のプロセス改善や品質向上に役立てていきたいと思います。

macでの開発

iPhoneアプリの開発を今後行っていくため、初めてmacをさわりました。
今までほぼWindowsしか扱ってこなかったので、これまでの常識とは異なることが多く大変ですね。

どうにかこうにかテレワークで開発が行える所まで準備ができ、少しずつ慣れていっているところです。

新しいことを学ぶのは大変ではあるものの楽しくて良いです。
時間が無限にあれば良いのですが、そうは行かないのでまずは既存の開発を前倒しして、早いことiPhone開発を初めたいところです。

自作PC

こんにちは mtjです

今回自分の使用しているPCをAMDからintel12世代にしました。
CPUの交換は約3年ぶり IntelCpuは10年ぶりぐらいになります。
DDR5+intel12世代で色々と快適になりました。

久しぶりのCPU交換だったので色々失敗
AMDCPUは交換時にすっぽんしてしまったのでマザボにダメージがあるかもしれません。
CDドライブの電源コネクタにエアーをしなかったので内部でショートしたのかCDドライブも動かなくなりました。

CDドライブはだめになりましたが intelCpuもCPUクーラーも簡易水冷にしましたが問題なく動いています。
消費電力は高負荷時で約500Wぐらいでした。
PCは満足な状態になったのでいい買い物だったと思います。

簡易水冷をつけて思いましたがPCケースが大分狭いと感じました。
時代の流れでグラボ等色々巨大化してるので10年前のPCケースではもうそろそろ限界かもしれません。
今度大きい変更のときにPCケースも新しくするべきかもしれません。

プログラミング言語の名称の由来 Part 2

大変遅くなりましたが、言語の由来Part2です。

・Java
断定はされていないようなのですが、
言語ロゴがコーヒーカップであるようにコーヒーが由来のようです。
ジャワコーヒー(Java Cofee)のJavaではないかということのようですね。

・Python
イギリスのコメディ番組「空飛ぶモンティ・パイソン」から取られたようです。
わかりやすく特徴的なだけにこの由来は有名かもしれませんね。
開発者は短くて個性的で少し不思議な名前を付けたいと思っていたようなので、
印象に残りやすいのも納得です。

・Rust
植物に寄生するさび菌に由来するようで、堅牢(Robust)の部分文字列でもあるそうです。
開発者チームに自転車好きが多かったためロゴは歯車になった、とどこかで見かけていたため、
てっきり金属の錆のことだと思っていました。

・Dart
最近名前を見聞きする、クロスプラットフォームフレームワークのFlatterで使用される
Dartの名称の由来はググり力が足りず調べても見つかりませんでした。
どなたか知っておられる方がおりましたら教えていただけますと幸いです。

他にもいくつか調べたのですが、書くのにあまり時間をかけ過ぎてもアレなのでこの辺で。
こうやって言語の由来を調べてみると、開発者のことが垣間見える感じがして良いですね。
皆さんも息抜きに自身の好きな言語の由来を調べてみるのはいかがでしょうか。

[1] Java – Wikipedia: https://ja.wikipedia.org/wiki/Java
[2] General Python FAQ — Python 3.10.0 documentation:
https://docs.python.org/3/faq/general.html#why-is-it-called-python
[3] Internet archaeology: the definitive, end-all source for why Rust is named “Rust”:
https://www.reddit.com/r/rust/comments/27jvdt/internet_archaeology_the_definitive_endall_source/

ASP.NET Core MVC

仕事で ASP.NET Core MVC を使用しました。
社内では既に実用していたのですが、
プロジェクトの作成や新規で導入を行ったのは、個人的に初めてとなります。

Razor構文やHTML、JavaScriptでwebページや処理を記述する事になるので、
慣れないと少しぎこちない部分もありますが、新鮮でした。
比較的新しいフレームワークなので、
例えばxxxControllerのxxxが、Viewsのxxxフォルダと対応したり、
1つのViewに相当するyyy.cshtmlがyyy()メソッドと対応したりなど、
フレームワーク側のサポートがあって使いやすいと感じました。

このようなサポートはその命名ルールを強制する事になるので、
開発者としては迷いが少なく助かります。
これをきっかけに、Web関連の知識や技術も学んでいければと思います。

社内ライブラリの.net5(.net core系)対応

社内ライブラリを改造し、.net5などの.net core系で動作するようにしました。

社内ライブラリは.net frameworkで作成されています。
本来であれば.net coreに移行するのが良いのですが、それはなかなか大変です。
とりあえずは.net frameworkのままとして、.net coreプロジェクトで使用しても正しく動作するように改造を行いました。

今までの単体テストも全てパスしましたので、とりあえずはこれで当分なんとかはなるだろうと思います。

いずれは、.net coreへの完全移行も考えないと行けないですが、少なくとも長期サポート版の.net6が出てからですね。

カーネルレベル

こんにちは mtjです。

最近カーネルレベルで対策を行うアンチチートソフトが話題になっている。
カーネルとは と思う方はリングプロテクションで調べてみると早いと思う。

今までの権限では監視しきれないから 低層で動かし広い権限で監視を行おうということだと思う。

昔ならばDirectXをフックして色々するチートが合った気がする
アンチチートソフトがバイナリパターンとかの監視をしているので それなら直接DirectXの動作を書き換えてしまおうという感じなのかもしれない。
現代ではそのレベルでなく デバイスドライバレベル、どこかでUEFI BIOSレベルで動いているという記事も見た気がする。
UEFI BIOSならばリング-2か-3のはずなので 本当にカーネルレベルのリング0だと検知できない気がする

そういったチート対策の記事を見てPCが高度化したことにより解析、脆弱性を突く方法もどんどん高度化しているんだなと感じる
コンピューターセキュリティは本当終わりがなさそう

そして、チートは別としてプログラマーとしてはそういった低層で動くプログラムをどういう風に作り どういう風に導入しているか気になる。