sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

プログラミング

C# NLog の基本的な使い方3(カスタマイズ)

target の layout renderer を使いこなす 日付のカスタマイズ レベルのカスタマイズ 例外のカスタマイズ target の layout renderer を実装する target を実装する どうなってるのか気になったらソースコードを読む サンプル 参考 この記事は、NLog(ログを…

C# NLog の基本的な使い方2(Getting Start)

GettingStart 出力先を設定する NLog "targets" の概念 ログを出力する ログの layout と layoutrenderer について 高度な layout について (CSV, JSON など) target wrappers の概念 ベストプラクティス logger は各クラスで static 変数にする logger の文…

C# NLog の基本的な使い方1(NLog とは?)

NLog is なに? structured logging (構造化ログ) is なに? NLog の特徴を整理 更新頻度 はじめに (Getting started) の選択 参考 この記事は、NLog(ログを管理する機能)の使い方(基本)について調べたことを記事にしています。 2022 年 12 月現在、NLog…

C# デバイスマネージャーを開く(.NET 6)

解決 プラスα 参考 .NET Framework 時代のデバイスマネージャーは、以下のようなコードで呼び出されていたと思います。 Process.Start("devmgmt.msc"); .NET6 や .NET7 が現れる現在だと上記のコードは例外が発生してエラーになります。 An error occurred t…

WPF カスタムコントロールの作り方(ToggleButton の例)

カスタムコントロールライブラリ ToggleControl のうごき サンプル 参考 WPF のカスタムコントロールの作り方……というか、基本的には設計者が設計したとおりに動作すればそれでいいような気もしますが、WPF にはいろんなカスタムコントロールの作り方があっ…

複数の bool 値と byte 値を相互に変換する

byte to bool[8] bool[8] to byte サンプル 参考 DB を設計していると、ひとつの列で bool 値をまとめてしまおうという発想をすることがある。ほとんどのケースで、これは設計ミス(アンチパターン)となりやすいことで知られ、jaywalking(信号無視)パター…

GitHub に間違って API キーをコミットしてしまったときの対応

問題の記録を確認する 対応方法 反映 参考 GitHub に API キーを間違ってコミットしてしまったら。 Git (GitHub) はコードを遡って調べることができる反面、API キーのような情報を修正しようとすると、遡って記録を訂正しなければいけません。思ったよりも…

C# init アクセサー (C#9.0) の使い方

これまでの流れ 一番の違いはオブジェクト初期化子 record 型専用の初期化 with 参考 C# 9.0 から init アクセサーが追加されています。比較的に使いやすいアクセサーですが、利用しているでしょうか。仕様を把握しているでしょうか。 これまでの流れ getter…

C# System.Text.Json コンバーターを利用する方法

C# .Net で Json 形式で書かれたファイルを扱う際は、2022 年現在だと System.Text.Json を利用するのがもっとも手軽だし、一般的だと思います。 このあたりと基本的な使い方については、以下の記事で記述しています。 C# System.Text.Json で非数値 NaN, In…

C# DI コンテナと CompositeDisposable の組み合わせ

使い方の例 参考 DI コンテナを利用しているプロジェクトで、リソースを破棄する処理をしようと思ったとき、CompositeDisposable を利用するという選択肢があります。 Window を閉じて終了するとき、Window の情報の〇〇を保存する アプリを終了するとき、ゲ…

C# 文字列の類似度を計算する N-gram

C# で実装する 参考 あいうえお あいうえの 上記のような文字列の類似度を計算するやり方には「n-gram」や「Jaro–Winkler distance」など色々なやり方があるみたいです。一番簡単と思ったやり方は「n-gram」でした。少し古いですが livedoor の技術ブログに…

C# .NET で試してみる CI/CD の CI (GitHub Actions)

GitHub Actions - workflows リポジトリーに Actions (workflow) を追加する シフト JIS で記述されたファイルはバグる バッジの追加 参考 プログラムを書く際や書いた後、CI/CD を利用/設定することは重要です。CI とは continuous integration(継続的イン…

C# Excel ファイルからセルのデータを読み込む(ClosedXML)

ClosedXML を使った読み込み サンプル 参考 C# で Excel ファイルを読み込んで利用する方法は、ライブラリーを利用したいくつかのやり方があると思います。おそらくよく検討に挙がりそうなのは以下のあたりだと思います。 COM 依存しない ClosedXML (MIT Lic…

Visual Studio ClickOnce 「項目 "xxx" の公開プロパティを適用できません」の対策

ClickOnce でアプリを発行する 発行の設定ファイル アプリケーションのインストール先 エラー:項目 "〇〇" 公開プロパティを適用できません 対策 参考 .NET (.NET Core) でも ClickOnce を利用したアプリケーションの公開(発行)ができると知ったのでテス…

IList から List<T>, IEnumerable<T> に変換する

IList to IList<T> global using ディレクティブ 参考 稀に IList 型のデータを受け取ることがあります。ObservableCollection の CollectionChanged のイベントなどは、IList で変更のあったデータのコレクションを返却します。 しかし、IList から IList<T> に変</t></t>…

LINQ 式のデータベースアクセスでクラス/インターフェースの型などを含めるとエラーになるときの対処

問題例 対応例 考察 参考 C# の LINQ 式によるデータベースアクセスの際に、クラス/インターフェースの値など、プリミティブ型ではない型を含めるとエラーになることがあります。 具体的なエラー内容 たとえば、次のようなコードが考えられます。 問題例 pub…

WPF トーストの表示

WPF (.NET6) でトースト表示をテストしてみた内容を記録します。 かつてのトースト表示は、アプリケーションをパッケージ化したり証明書が必要であったりしたため、利用には面倒がありました。 現在は、かなりの面倒がなくなっており、ちょっとした通知の実…

ソフトウェア開発のマニフェストを読んでみよう

ベタープログラマを読んでいて、ソフトウェア開発のためのマニフェストがあることを知りました。(37章 多くのマニフェスト) より良いコードを書こうと思っているコーダーが、どういったマニフェストを宣言しているのか、いくつか読んだものをまとめたいと…

PlanetScale - SELECT INSERT UPDATE を実行する (Entity Framework)

初期化 SELECT INSERT UPDATE サンプル 参考 PlanetScale (MySQL 互換) の基本的な DML (select, insert, update) を C# の環境で実行してみた。今回は、Entity Framework を介してデータ操作をしてみる。 なお、EF を使わないやり方はこっち PlanetScale - …

PlanetScale - SELECT INSERT UPDATE を実行する

SELECT INSERT UPDATE Transaction & Insert おまけ1 日付を取得する おまけ2 サンプル 参考 PlanetScale (MySQL 互換) の基本的な DML (select, insert, update) を C# の環境で実行してみた。 接続文字列のパラメーターは、NuGet から「DotNetEnv」を使…

PlanetScale と Navicat を接続する

Branches の development/production Navicat 参考 PlanetScale (MySQL 互換) と navicat をテスト接続する機会があったので、その内容をメモ。 特に理由がなければ Arctype が推奨みたいです。 planetscale.com - connection-strings Planetscale は MySQL …

PlanetScale のクイックスタートガイド

はじめに PlanetScale クイックスタートガイド Overview PlanetScale アプリケーション ダッシュボード(ブラウザ)による操作 アカウントを作成する データベースを作成する データベースにスキーマを追加する データを挿入する データベースのブランチを本…

C# PostcodeJP の API を利用して郵便番号から住所を取得する

郵便番号 JSON 対応クラスの例 テスト サンプル 参考 郵便番号から住所を取得するやり方のひとつに PostcodeJP がある。 郵便番号から住所を取得する API は、いくつか無料のものが公開されています。PostcodeJP も無料で利用できますが、ユーザー登録および…

C# RESAS API を利用する

都道府県コード JSON 対応クラスの例 テスト サンプル 参考 都道府県コードや産業分類など、地域の情報(地域経済分析システム)を取得するやり方のひとつに RESAS がある。 RESAS は、2015 年から内閣府の地方創生推進室が開始したサービスで、2016 年から …

C# Null 非参照型と許容参照型 (CS8600)

null を許容する例 補足 null 値を許容する(null-forgiving) アノテーション属性 値/参照型で null 参照型の実装は全然違う ジェネリクス まとめ 参考 C# 8.0 から「C の null 値を許容する参照型」という機能が実装されています。 もともと、C# の参照型…

C# 再試行パターンを実装する

再試行パターン (Retry pattern) 補足 実装 テスト サンプル 参考 DB の操作 (DML) のような 99.99...% 成功する操作は信頼性が高いため(面倒で)リトライ処理を実装しないことがあるかと思いますが、実際はごく稀に失敗することがあって、失敗時の処理を横…

現実的なマルチスレッド (ロック) 対策

マルチスレッドとロックとは? マルチスレッド処理の準備 ロックしないマルチスレッド処理 lock 注意すること Interlocked ReaderWriterLockSlim SemaphoreSlim Mutex 実行結果のまとめ 補足 Volatile 修飾子 原子性 サンプル 参考 2021 年末現在、C# におけ…

C# パターンマッチングのデコンパイルコードを確認する

C# Advent Calendar 2021 を見てると、C# のパターンマッチングが便利らしい。 C#のアプデでめちゃくちゃ便利になったswitch文(パターンマッチング)の紹介 C#のプロパティによるパターンマッチングを使おう でも、パターンマッチングの中身が実際どんな判…

Git tag の基本的な使い方

タグ (tag) の使い方 Visual Studio からタグをつけるとき GitHub でリリースを作るとき 参考 Git のコミットにタグをつけておくと、GitHub なんかのサービスだと特にバージョン管理が見やすく、やりやすくなります。 タグ付けしたほうがよいタイミングが明…

なんでプログラミングは簡単だけど、ソフトウェアエンジニアリングは難しいのか?

Yujian Tang さんの記事が元です Twitter を見てたら流れてきた記事が気になったので、個人的な和訳をメモした内容です。 首がもげるほど頷いた英語記事「なぜプログラミングは簡単なのにソフトウェアエンジニアリングは難しいのか?」職場では後者も必要。…