しばやん雑記

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

.NET

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

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

.NET Core 3.0 Preview 7 で Go Live が付いたので WPF アプリケーションを更に対応させた

タイトルの通り .NET Core 3.0 Preview 7 がリリースされ、このバージョンから Go Live が付くようになりました。プロダクション環境で使うことが出来るようになったということです。ちなみに GA は .NET Conf 2019 のタイミングという話です。つまり 9 月末…

Azure Cosmos DB .NET SDK v3 GA 記念チートシート

5 月の Build で月末 GA が発表されていた Azure Cosmos DB の .NET SDK v3 ですが、昨日ついに正式版がリリースされました。特に Public Preview の時からは API が大きく変わっているので注意です。元は JavaScript SDK に近い API でしたが、途中で大幅に…

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 パ…

Per-Monitor DPI 環境下で WPF の Window 位置を調整する

作っているアプリをマルチモニターに対応させつつ、異なる DPI でも問題なく動くように実装していたら、思ったよりもはまったのでメモとして残します。動作確認用にアプリケーションを作ったので、とりあえず公開しておきました。それぞれのボタンを押すと、…

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

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

既存の WPF アプリケーションを .NET Core 3.0 に移行した

Visual Studio 2019 が RC に到達したという話だったので、検証用に使っているマシンにインストールして既存 WPF アプリの .NET Core 3.0 移行がどのくらいのコストで行えるのか試しました。にぃにが書いているように .NET Core 3.0 を Visual Studio 2019 R…

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

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

ASP.NET Core / Entity Framework Core 2.2 と Cosmos DB SDK の改善

書く気力がほぼ無かったんですけど、Cosmos DB の .NET SDK がついに OSS になったのを記念して書きます。.NET Core 3.0 とか Visual Studio 2019 は詳しい人が何か書くはず。とりあえずブチザッキと ufcpp.net を読んでおけば大体は掴めます。Preview 3 の…

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

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

ASP.NET のセッションプロバイダーに Cosmos DB が仲間入り

ASP.NET 4.7.1 に関する情報がブログに公開されてました。Package-First なアプローチらしいです。要するに ASP.NET の新機能と .NET Framework のアップデートのタイミングが別々になるということでしょう。最近はこの方式を採用しているケースが多いですね…

WPF アプリケーションを Desktop Bridge を使って Windows Store に公開してみた

開発した WPF アプリケーションに対して、簡単にアプリケーションの配布を行いたかったので Windows Store に公開してみました。初めての Desktop Bridge です。今回 Windows Store に公開したアプリケーションは WinQuickLook です。実際に行ったきっかけは…

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

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

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 を使って学びなおした

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

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

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

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

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

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

Twitter で新しい MeCab 用の辞書が公開されたことを知ったので、例によって NMeCab で試してみました。http://diary.overlasting.net/2015-03-13-1.htmlMeCab に付いている IPA 辞書はかなり更新されていないので新語に弱いですが、今回公開された新しい辞…

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

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

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

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

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

前回 NMeCab を試した時には標準の IPA 辞書を使いましたが、今回は辞書として UniDic を使ってみました。最終更新日が 2013 年だったので、MeCab に付いている IPA 辞書よりは新しい気がします。とりあえずダウンロードした辞書を dic ディレクトリにまるっ…

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

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

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

Azure Search で久しぶりに形態素解析周りが気になったので MeCab でも使うかと思って調べると、今は C# で実装された NMeCab というライブラリがあるんですね。よくあるラッパーじゃないので使い勝手が良いですし、パフォーマンスも中々良好です。残念なが…

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

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

SendGrid の公式 C# クライアントが残念な感じだったので

本来なら SendGrid の Template Engine を使ってみた的な内容になるはずだったんですけど、公式に提供されている C# のクライアントがバグ持ちで、直すには PCL を捨てないとダメなんじゃないかという感じだったので、カッとなってオレオレクライアントを作…

.NET Framework 4 から追加された ObjectCache と互換性のある RedisCache クラスを作った

.NET Framework 4 から追加された System.Runtime.Caching 名前空間に ObjectCache クラスと、その唯一の実装である MemoryCache クラスが用意されています。ObjectCache クラス (System.Runtime.Caching) | Microsoft LearnASP.NET には専用のキャッシュが…

接続文字列の書き方をまとめてみる(2014 年版)

接続文字列の書き方をまとめてみる - しばやん雑記 でまとめた内容が、流石にちょっと古くなってきたので Azure 周りも含めてアップデートを行っておきます。 SQL Server LocalDB LocalDB は SQL Server 2012 から追加された、インスタンスが常時起動しない…