しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

C#

Windows App SDK 1.1 Preview 3 で追加された Desktop Acrylic と Mica のサポートを試した

何故か Windows App SDK を使っても、Windows 10 や 11 で追加された Desktop Acrylic や Mica といったウィンドウ効果は適用できませんでしたが、先日リリースされた 1.1 Preview 3 でようやく対応したようです。Windows App SDK 1.1 Preview 3 is now avai…

Windows Property System を使って C# から曲情報を取得する

GW なので趣味アプリの開発を行っていると、音楽ファイルに保存された曲情報を取得する必要が出てきたので、Windows Property System を使って実現したという話です。曲情報というのは以下のようにファイルのプロパティから確認出来るメタデータのことです。…

CsWin32 で Win32 API や COM を使ったアプリケーション開発を効率化する

これまで P/Invoke 定義はドキュメントやヘッダーファイルから手書きすることが多かったのですが、最近は必要な Win32 API や COM インターフェースが多くなってきたので CsWin32 を使って自動生成しています。CsWin32 自体は win32metadata というプロジェ…

Cosmos DB SDK v3 に追加された ReadMany API を使って効率的に複数項目の取得を行う

去年リリースされた Cosmos DB SDK v3.18.0 から Point Read のような API で複数項目を 1 回のメソッド呼び出しで行える ReadMany API が追加されています。Point Read のような API デザインなので Id と対応した PartitionKey 両方の指定が必要です。API …

.NET Framework 3.0 で作られたアプリケーションを .NET 5 に最新化して GitHub で公開するまでに行ったこと

CodePlex に置いてあった .NET Framework 3.0 時代に書かれたアプリケーションを、GitHub に移行しつつ .NET 5 で動くように 2 週間ぐらい頑張った話を書きます。正直なところ 12 年前に書かれたコードを何とかするのはめっちゃ大変でした。今回コードの改善…

Azure AD B2C にカスタムドメインを設定して MSAL (C# / JavaScript) から使ってみた

恐らく Azure AD B2C を使っている人全員が待ち望んでいたカスタムドメイン対応ですが、Front Door と組み合わせる形にはなりますが Preview として公開されました。単純に Front Door をリバースプロキシとして使うだけなのですが、割と現実的な落としどこ…

NuGet のロックファイルと CI でのパッケージキャッシュ

基本的に NuGet に関しては CI でのパッケージのキャッシュがあまり効果的ではないのですが、推奨設定での使い方をちゃんと試しておこうと思ったので残します。GitHub Actions や Azure Pipelines には NuGet 向けのサンプル定義が用意されています。中身は…

Managed Identity を使った SQL Database の認証がとても簡単になった話

App Service のドキュメントには Managed Identity を使って SQL Database を利用するサンプルが載っていますが、ここのサンプルコードは結構いい加減で特に .NET Core 向けでは使う気がしないものでした。サンプルコードがダメなだけで SQL Database の設定…

Visual Studio と ReSharper で EditorConfig を作成して Azure Pipelines でチェックする

GitHub で公開してるコードに Pull Request が来た時、思ってた以上にコーディングスタイルがバラバラで困ってたので EditorConfig を追加して CI でチェックするようにしました。C# はみんなが Visual Studio を使っていて、大体は良い感じのコーディングス…

Azure Pipelines の Hosted Agent を使うと C# 7.1 以降のコードがビルド出来ないのを直す

Azure Functions なプロジェクトのビルドで Azure Pipelines を使っていたところ、手元ではビルド出来ていたコードが Azure Pipelines だとビルドエラーになってしまったので、最適な解決策を調べていました。具体的には C# 7.1 以降のコードが Azure Pipeli…

C# で Interactive な Prompt を構築するライブラリを作った

C#

Go や Node.js 向けは見つけられたのですが、C# / .NET Core 向けは探しても見つからなかったので作りました。.NET Standard 2.0 なので .NET Core / .NET Framework の両方で動くはずです。CoreFx の Console ベースで書いていて、Windows / Linux / macOS …

Azure App Service 向けに簡単な Service Discovery を提供するライブラリを作った

Azure App Service や Azure Functions でアプリケーションを書いている時に、別でホストされている API を叩きたい時にはデプロイされた環境単位で向き先を変える必要がありますが、大抵のケースでは App Settings に入れることになるので設定が面倒になっ…

Azure Pipelines で NuGet パッケージのデプロイを自動化

AppVeyor から Azure Pipelines への移行を見越しつつも、ちゃんと NuGet パッケージの発行周りを検証していなかったので Build と Release のパイプラインを組みました。AppVeyor での自動化については前回書いたエントリを参照してください。やっているこ…

AppVeyor で NuGet パッケージのデプロイを自動化

非常に今更感がある内容なのと、Azure Pipelines の方が便利なんじゃないか疑惑もありますが、AppVeyor を使っているプロジェクトが多いので、やっと真面目に対応しました。GitHub 上で新しく Release を作成すると、そのタグ名をバージョンにして NuGet パ…

Swagger / OpenAPI 定義から C# クライアントを自動生成するツールの比較

C#

Swagger / OpenAPI の定義からクライアントを作成するツールがいくつかあって、それぞれ特徴がありそうだったので実際に生成して試してみました。試したのは以下の 3 つです。 Swagger Codegen OpenAPI Generator AutoRest 使った Swagger 定義は公式の Pets…

C# と Polly を使って回復力の高いアプリケーションを書く

昔のように高い信頼性を持つオンプレのハードウェア上で動いていたアプリケーションとは異なり、昨今のクラウド上で動いているアプリケーションは障害が発生する前提でコードを書く必要があります。クラウドのハードウェアは毎日どこかで壊れるので、それを…

Visual Studio 2017 に .NET Framework 4.7.2 SDK をインストールする

通常は Visual Studio Installer から .NET Framework の SDK はインストール出来るはずですが、何故か 4.7.2 はまだ落ちてこないので手動でインストールしようとしましたが、何故か入りませんでした。地味にはまったのでメモとして残しておきます。ここから…

.NET Core のバージョンが難しい

C#

ちょっと前に .NET Core のバージョンがよくわからないという話題が Twitter で上がりました。何のVersionを表示しているのか?有識者に聞かないと良くわからん。 pic.twitter.com/1gqVqpASxP— Takekazu Omi (@takekazuomi) 2017年3月8日@shibayan 全然わか…

CircleCI を使った .NET Core アプリケーションのビルドを高速化する

CI の SaaS はビルドの度にコンテナが生成されて、完了したら破棄されるといったように揮発する性質があるので、キャッシュが効かずに時間がかかりがちです。.NET Core の場合は NuGet パッケージのインストール処理で影響が出やすいです。特に dotnet コマ…

Connect(); // 2015 でリリースされた DNX と .NET Core / CLI について調べた

Connect(); // 2015 では ASP.NET 5 (DNX) や .NET Core の RC 1 が出たので、自分なりに整理するために色々と調べて OS X 上で実際に試してみました。RC 1 ではちゃんとインストーラーやドキュメントが用意されているので簡単です。 DNX / ASP.NET 5 http:/…

COM Interop の基本を IShellLink を使って学びなおした

C#

WinQuickLook で COM インターフェース定義を大量に手書きした時、自分の COM Interop の知識がイマイチなことに気が付いたので、とても分かりやすい IShellLink を使ってまとめます。ちなみに IShellLink はショートカットを作成するためのインターフェース…

P/Invoke と Win32 API の両方で文字コードの罠にはまった話

C#

最近真面目に作っている WinQuickLook は Win32 API と COM の塊なので、P/Invoke で割とはまりました。特に文字コード周りが致命的だったので、簡単に内容をまとめておきます。 DllImport のデフォルト文字コードは ANSI DllImport をデフォルトのまま使う…

GR-PEACH (PinKit) が届いたので .NET Micro Framework を使った開発を試してみた

C#

ESEC2015 でひっそりと予約していた GR-PEACH がやっと届きました、価格は 13k 程です。ESEC2015 で予約したときには 7 月中納品と言われた気がしますが、この際気にしないことにします。日本っぽいデザインのパッケージになっています。大きさはたばこの箱…

NMeCab でも mecab-ipadic-neologd を使ってみた

C#

Twitter で新しい MeCab 用の辞書が公開されたことを知ったので、例によって NMeCab で試してみました。[O] MeCab 用の新語辞書 mecab-ipadic-neologd を公開しましたMeCab に付いている IPA 辞書はかなり更新されていないので新語に弱いですが、今回公開さ…

.NET Core Runtime (CoreCLR) / .NET Compiler Platform (Roslyn) / .NET Execution Environment (DNX) の役割について理解したい

自分でも最近の .NET Core 5 周りで混乱してきたので、整理するために簡単にまとめました。略称も色々なので、そのあたりと役割も一緒に分かってる範囲で書きます。 .NET Core Runtime (CoreCLR) GitHub でオープンソースになると話題になった部分で、RyuJIT…

.NET Core Runtime (CoreCLR) を Ubuntu 14.04 LTS 上でビルドして実行まで試してみた

C#

以前、Raspberry Pi 2 で .NET Core Runtime (CoreCLR) をビルドしようとして挫折しましたが、x64 な Ubuntu を使えば問題なくビルドと実行が出来たので、内容をメモ程度に残しておきます。基本的な手順は CoreCLR の GitHub Wiki にまとまっています。この…

NMeCab で UniDic を使う 2 つの方法を試してみた

C#

前回 NMeCab を試した時には標準の IPA 辞書を使いましたが、今回は辞書として UniDic を使ってみました。UniDic プロジェクト日本語トップページ - SourceForge.JP最終更新日が 2013 年だったので、MeCab に付いている IPA 辞書よりは新しい気がします。と…

マルコフ連鎖を使って文章を自動生成するクラスを C# で書いた

C#

NMeCab で形態素解析が簡単に行えるようになったので、何となくマルコフ連鎖での文章生成を選びました。少し時間かけて C# で実装したので、作成したコードを GitHub に置いておきました。shibayan/MarkovDemoデフォルトでは MarkovKey クラス内で N = 2 と…

NMeCab と NuGet を使って手軽に形態素解析を試した

C#

Azure Search で久しぶりに形態素解析周りが気になったので MeCab でも使うかと思って調べると、今は C# で実装された NMeCab というライブラリがあるんですね。NMeCab - 形態素解析エンジンMeCabの.NET版 (エヌメカブ ケイタイソカイセキ エンジン メカブ …

Twitter や Facebook が SSL 3.0 を無効にしたので死にかけた話

C#

今朝、Twitter や Facebook が SSL 3.0 を素早く無効化したため、API を使って処理を行っていたアプリが全滅するという悲惨な出来事が発生しました。Twitter や Facebook の API を使っている場合、Global.asax.cs とかの初期化コードに以下のような設定を書…