sh1’s diary

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

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

ローカルアプリでも API キーの取り扱いに注意する

ローカルのサンプルプログラムでも、GitHub にコミットするときなんかに API キーを使用していると困ることがあります。GitHub にサンプルコードをあげるときは、当然 API キーを隠します。で、API を使用する(実際に動作する)実行コードに書き換えるたび…

Prism 子ウィンドウ(ダイアログ)IDialogAware を表示する

Prism App.xaml MainWindow (View + ViewModel) Dialog1 Dialog2 サンプル 参考 Prism を利用するプロジェクトで子ウィンドウ(ダイアログ)を表示する方法は、バージョンの進化によって変化してきているようです。 現在(下記のバージョン記載)では、ダイ…

C# コーディングガイドライン&プラクティス 2021

この記事は、Microsoft MVP のひとり Vincent Maverick Sanchez Durano のブログ記事「C# Coding Guidelines and Practices - 2021」を個人的に雑訳したものです。 この記事では、一般的なソフトウェアエンジニアリング ガイドラインを紹介します。これらの…

2021 年 会社勤めの買ってよかったモノ、まとめ(好きなモノ10選)

はてなブログ10周年特別お題「10にまつわる4つのお題」の「好きな◯◯10選」ということで、ちょっと早いけど 2021 年の好きな(買ってよかった)モノ10選をまとめてみました。(毎年やっているやつですね) 今年は結構マニアックというか、個性的なものも多…

WPF PasswordBox のバインドとその対策 (Windows Hello)

非推奨でも Password プロパティを Binding する Windows Hello を利用した認証 エラー発生するとき サンプル 参考 PasswordBox コントロールの Password プロパティは仕様のため、バインディングをすることができません。まずもって、バインディングをする…

Prism EventAggregator はユニットテストに Moq を使うこと

この記事は、ARCTOUCH のブログ記事「Using Moq for unit testing with Prism EventAggregator」を個人的に雑訳したものです。 前回記事では、Publisher-Subscriber パターンと EventAggregator を使用するメリット、そして、プロジェクトでの使用方法につい…

Prism EventAggregator を使用する方法

環境構築 (Installation?) コンストラクターの注入 (inject) イベントの作成 イベントの購読 イベントの発行 イベントの購読解除 高度なこと (Advanced stuff) 参考 この記事は、ARCTOUCH のブログ記事「How to use Prism EventAggregator for .NET app deve…

Prism EventAggregator をなぜ使うべきか

EventAggregator is なに? .NET アプリ開発に Prism EventAggregator をなぜ使用するのか? Prism EventAggregator をいつ利用するのか? Xamarin.Forms の EventAggregator ちょっとした注意点 参考 この記事は、ARCTOUCH のブログ記事「Why you should us…

WPF Prism サンプルコードの学習6(公式外サンプル1)

1. Bootstrap 2. ViewModelLocator 3. Module 4. MVVM の基本クラス 5. InteractionRequest 6. Navigation 7. EventAggregator 8. ModuleLoadSeq 9. RegionBehavior 10. ModuleCatalog まとめ 参考 前回まで Prism の公式サンプルを確認しました。補足として…

WPF Prism サンプルコードの学習5 (Navigation, Invoke)

14. UsingEventAggregator 15. FilteringEvents 16. RegionContext 17. BasicRegionNavigation 18. NavigationCallback 19. NavigationParticipation 20. NavigateToExistingViews 21. PassingParameters 22. ConfirmCancelNavigation 23. RegionMemberLifet…

WPF Prism サンプルコードの学習4 (Commands)

11. DelegateCommands 12. UsingCompositeCommands 13. IActiveAwareCommands まとめ 参考 WPF + .NET Core (5以降は Core は省略される) で Prism を使ってみよう。 使用している Prism のバージョンは次のとおり: 8.1.97 (2021/05/25) GitHub - Prism Sa…

WPF Prism サンプルコードの学習3 (ViewModelLocator)

8. ViewModelLocator 9. ChangeConvention 10. CustomRegistrations まとめ 参考 WPF + .NET Core (5以降は Core は省略される) で Prism を使ってみよう。 使用している Prism のバージョンは次のとおり: 8.1.97 (2021/05/25) GitHub - Prism Sample WPF …

WPF Prism サンプルコードの学習2 (Module)

7. Modules 7.1 Modules - AppConfig 7.2 Modules - Code 7.3 Modules - Directory 7.4 Modules - LoadManual 7.5 Modules - Xaml まとめ 参考 WPF + .NET Core (5以降は Core は省略される) で Prism を使ってみよう。 使用している Prism のバージョンは…

WPF Prism サンプルコードの学習1 (Bootstrapper, Region)

1. BootstrapperShell 2. Region 3. Custom Region Adapter 4. View Discovey 5. View Injection 6. ActivationDeactivation 参考 WPF + .NET Core (5以降は Core は省略される) で Prism を使ってみよう。 使用している Prism のバージョンは次のとおり: …

Prism Full App (.NET Core) テンプレートを体験する

テンプレートの構成について WPF_Core_FullSample プロジェクト Core プロジェクト Modules.ModuleName プロジェクト Services.Interfaces プロジェクト Services.Services プロジェクト 新しいサービスを追加するテスト Services.Interfaces の修正 Service…