log 2021/2/2
Google Cloud INSIDE Games & Apps
Google Cloud INSIDE Games & Apps
- GKE 自体 1 年ぶりぐらい。1 年前も CI 環境を整えたいぐらいでしか触っていない。
- GKE のアップデートに関しては聞いていても大規模な話が多くて、今の業務コンテクストではあまり関係なさそうというか、そこまで踏み込むことはなさそう。
- DNS Cache とかは、2つ目のセッションでさっそく使ってるという話もあった。
- 2 つ目のセッションの QA というか SRE 的な観点での Kubernetes 導入の背景は興味深かった
- 最初は単に Computing Engne で、今でも DB とかは Computing Engine を使ってるらしい。この辺の構成は全部 Kubernetes に寄せる訳ではやはりないんだな。
- New Relic を全台にいれないために deployment は分けるというのはなるほど。前職でも 1 台にしか入れていなかったのでよくある話なんだろうなと。
- ロギングが標準出力でいいとか、開発環境の整備が楽になるというのは Unity 使ったゲームでもそうなのかというのは少し以外。でもあくまでサーバー関連をということか。
- Visual Studio を素で使っていると、Docker integration すらも Visual Studio に依存してしまうので、どうしたものかとよく思っているが、調べてみようかな。
- 負荷テストの話がメインだったが、
- テストの書きやすさ、実行しやすさ、スケールしやすさ、みたいなのが強調されていてよかった
- ここまで QA が外部からシナリオ付きでテストしてくれてる場合には、個別のアプリケーションの開発はテストどうするんだろう
- ただ、運用面、品質面で下支え & 引っ張ってくれるチームがある組織は強さを感じる
- そこに投資するって判断もすごい大事
log 2021/01/22
.NET 5 Networking Improvements | .NET Blog
つまみぐい
- Better Error Handling
- タイムアウトの場合には
TaskCanceledException
の inner にTimeoutException
が入るようになった HttpRequestException
にStatusCode
が入るようになったEnsureSuccessStatusCode
を呼ぶと入る- GetStringAsync, GetByteArrayAsync and GetStreamAsync のような Response を返さない系も内部で
EnsureSuccessStatusCode
を呼ぶからStatusCode
が取れるよ
HttpRequestException
を手動で作る時にもStatusCode
を含められるようになった
- タイムアウトの場合には
- Sync API for HttpClient.Send
- Security
- .NET のセキュリティ層は OS 依存
- Linux なら OpenSSL で version 1.1.1 以降なら TLS 1.3 を利用
- Win 10 なら version 1903 以降で TLS 1.3 を使えるがテスト目的でまだデフォルトじゃない
- Win 10 の InsiderPreview 20170 で TLS 1.3 をデフォルト ON にした
- .NET 5 の SSL Test で Grade A をとるために Linux 版の SslStream に breaking change を入れた
- そこでいれた default cipher はコードでも変更できるし、system wide の OpenSSL の設定でも変更できる
log 2019/10/18
以下の issue が発端。 Content-Length
の操作では例外になっていたのに置き換えでは例外にならなかった。
Middleware that rewrites content seemingly can't change ResponseStream ContentLength · Issue #14056 · aspnet/AspNetCore · GitHub
GitHub - RickStrahl/Westwind.AspnetCore.LiveReload: ASP.NET Core Live Reload Middleware that monitors file changes in your project and automatically reloads the browser's active page
上記の middleware がなんか良さそうに見える。 Live Reload って標準ではされないんだなぁ。
ExcludeConfigFilesFromBuildOutput
の利用に関しての PR だが、MSBuild の結果に対しての xUnit のテストを書くための拡張が面白い。
Query: Skip updating NewExpression without ctor · aspnet/EntityFrameworkCore@2a39b06 · GitHub
Query 構築のために式ツリーを visitor で走査している部分だと思うが、 NewExpression
という constructor 呼び出しを伴う expression(要は new
) において .NET Framework において Update
がうまくできないため、引数 0 の場合はスキップしてしまおうというもの。
System.Linq.Expressions
は深く見たことないけど、ちょっとおもしろそう。
修正の詳細はあまり理解できないが、テストで使われている QueryTestBase
の内容が面白い。
Maybe
とか追加してあって、ほーとなった。
log 2019/10/17
以下の issue の fix
IHttpContextAccessor cannot be used reliably in some scenarios · Issue #14975 · aspnet/AspNetCore · GitHub
IHttpContextAccessor
を async 実行されるインスタンスに渡した場合に、リクエストが終了した後にも関わらず、直前のリクエストの HttpContext
が取得できてしまう。
DefaultHttpContextFactory
には Dispose
があり、そこで HttpContext
を null
にしているが、HostingApplication
の DisposeContext
で受け取った context
内の HttpContext
も null
にするようにしている。
この辺の関係は読み込めていないが、対処としてはこんな感じらしい。とはいえ、 IHttpContextAccessor
から必要なものだけ取って渡すのがいいって感じなんだろうな。
Best practice の Do not store IHttpContextAccessor.HttpContext in a field 以降
ASP.NET Core Performance Best Practices | Microsoft Docs
Seed Data を migration で突っ込む時の修正。 Non-writable な column を除外している。以下の去年の PR の追加的な感じ。
Seed Data: Exclude concurrency token from Data Operations by smitpatel · Pull Request #13510 · aspnet/EntityFrameworkCore · GitHub
テストを見ていて興味深かったのが、 FakeProvider
namespace 配下。
https://github.com/aspnet/EntityFrameworkCore/tree/afd6ca6a4602e85e973a4dd84a374e1394bd9852/test/EFCore.Relational.Tests/TestUtilities/FakeProvider
地味に便利そうなのだが、別途利用できるように切り出されている感じはしない。
log 2019/10/16
Added more path mappings to labels (#15034) · aspnet/AspNetCore@666fe9b · GitHub Enabling PR auto-labeling (#15020) · aspnet/AspNetCore@d40fd32 · GitHub
.github/labeler.yml
ってなんだろと思ったら、Github Actions だった。
GitHub - actions/labeler: An action for automatically labelling pull requests
Update .ghal.rules.json (#15118) · aspnet/AspNetCore.Docs@eadfbb0 · GitHub
Docs の方は .ghal.rules.json
というので同じく Auto labeler を実行している。
以下の formatting のドキュメントの更新。
Format response data in ASP.NET Core Web API | Microsoft Docs
修正のメインは TextOutputFormatter
が StringOutputFormatter
に変更されている部分。
このドキュメント自体は、API response の body を JSON や XML にフォーマットする部分についてだが、Accept
header でのパターンや URL に入っているパターンなども対応されているのが理解できた。
Blazor 3.1 Preview Updates (#15111) · aspnet/AspNetCore.Docs@9f4646a · GitHub
Blazor 3.1 preview 用の更新。 dotnet new blazorwasm
があるんだなぁ。
Hosting startup updates for 3.0 (#14607) · aspnet/AspNetCore.Docs@5d6eba2 · GitHub
以下のドキュメントの修正。
Use hosting startup assemblies in ASP.NET Core | Microsoft Docs
hosting startup 自体知らなかったのだが面白そう。
An IHostingStartup (hosting startup) implementation adds enhancements to an app at startup from an external assembly. For example, an external library can use a hosting startup implementation to provide additional configuration providers or services to an app.
configuration と services に言及されているが、Controllers と Views も追加できると Rails の mountable engine みたく使えそうだけど、ASP.NET Core は Razor Pages とかもあるし、そう単純にはいかないか。
というか別途 Razor class library というのがあった。
Reusable Razor UI in class libraries with ASP.NET Core | Microsoft Docs
Updates to web API tutorial (#15108) · aspnet/AspNetCore.Docs@591ffb6 · GitHub
以下の Web API 関連のチュートリアルの軽微な修正。
Tutorial: Create a web API with ASP.NET Core | Microsoft Docs
Tutorial: Call an ASP.NET Core web API with JavaScript | Microsoft Docs
log 2019/10/15
Hosted Services sample updates (#14765) · aspnet/AspNetCore.Docs@96dae2e · GitHub
以下のドキュメントの修正
Background tasks with hosted services in ASP.NET Core | Microsoft Docs
Hosted Service ってなんなんだと思っていたが、Console app でも作れるし使いどころありそう。
Implement background tasks in microservices with IHostedService and the BackgroundService class | Microsoft Docs
Identified cmdlet as Powershell (#15086) · aspnet/AspNetCore.Docs@7652afe · GitHub
以下のドキュメントの修正
Add a model to a Razor Pages app in ASP.NET Core | Microsoft Docs
dotnet aspnet-codegenerator
みたいなコマンドでモデルの追加もできるってのは知らなかった。便利そう。
dotnet aspnet-codegenerator command | Microsoft Docs
以下のドキュメントの更新。内容は微修正。
Filters in ASP.NET Core | Microsoft Docs
Filter は大きいカテゴリでも結構あるんだなぁ。
Localization 3.0 Updates (#14874) · aspnet/AspNetCore.Docs@5a11f68 · GitHub
Localization についてのドキュメントの変更。
Globalization and localization in ASP.NET Core | Microsoft Docs
Content-Language HTTP header
を使うようになる。ApplyCurrentCultureToResponseHeaders
を true に設定RequestLocalizationMiddleware
でCurrentUICulture
をContent-Language
にセットできるように- 明示的に
Content-Language
を response header に追加しなくていい - 3.0 からは
RequestLocalizationMiddleware
がDebug
レベルでサポートされていない culture について logging する。これまでは warn で出てたよ。
HTTP.sys options default max connections (#15079) · aspnet/AspNetCore.Docs@7906ab2 · GitHub
以下のドキュメントの修正。 HTTP.sys web server implementation in ASP.NET Core | Microsoft Docs
HTTP.sys web server に関して MaxConnections のデフォルト値の記述を修正。確かに description には registry の設定を使うとなっている。
なんで修正箇所が 3 箇所もあるのかと思ったが、3.0 より前、3.0, 3.1 で 3 つあるようだ。
Handle NewArrayExpression in entity equality · aspnet/EntityFrameworkCore@59fbd88 · GitHub
ss => ss.Set<Order>().OrderBy(o => o.OrderID).Where(o => o.OrderID < 10300) .Select(o => new object[] { o, o.Customer }),
上記のように Select
に Array を渡しても、いい感じに SQL にしてくれるように。
log 2019/10/11
Async void (#14964) · aspnet/AspNetCore.Docs@90ea268 · GitHub
以下のドキュメントの修正 ASP.NET Core Performance Best Practices | Microsoft Docs
ここで指摘されている async void
に関しては、内容見る限りは Best practice というよりは、エラーになって欲しいレベルのことなのではという気が。(Crashes the process
とか書いてあるし)
HttpContext
が recycle されるから、 HTTP Request を処理の終了まで完了させないようにってこと。なるほどなぁ、いろいろ Async になってるけど、こういうとこでも影響出るんだな。
React to localization 3.0 changes (#14870) · aspnet/AspNetCore.Docs@667f9ec · GitHub
.NET Core 3 になったことで変更になった localization 周りのドキュメントの変更。 Insert(0,
よりだいぶ書きやすくなっていて良い。
Localization Extensibility | Microsoft Docs
Globalization and localization in ASP.NET Core | Microsoft Docs
Troubleshoot ASP.NET Core Localization | Microsoft Docs
Add attribute namespace (#14975) · aspnet/AspNetCore.Docs@af3fbf4 · GitHub
以下の Option に関するドキュメントの修正 Options pattern in ASP.NET Core | Microsoft Docs
修正内容自体は、暗黙的だった System.ComponentModel.DataAnnotations
をサンプルに追加したこと。
Option もドキュメントをちゃんと読むといろいろ機能があるなぁ。また、使う時にじっくり読みたい。
IOptionsMonitor<TOptions>
で受け取るIOptionsSnapshot<TOptions>
は要求毎にリロード。そんなに設定ファイルを頻繁に変更することないかもだけど便利そう。IConfigureNamedOptions<TOptions>
は名前付きオプション。delegate で使い分ける時に。微妙に接続先 switch したい時とかに使えるかな。
Updated Introduction for 3.0. (#14993) · aspnet/AspNetCore.Docs@5adf11b · GitHub
以下のドキュメントの修正 Introduction to ASP.NET Core | Microsoft Docs
statement
が directive
に置き換えられている箇所が多数。あと gRPC と Blazor が追加。WebHost
から Host
への変更。
Update VS4Mac instruction (#14994) · aspnet/AspNetCore.Docs@b9f9965 · GitHub
コミットメッセージは VS4Mac となっているが、gRPC の tutorial ページの修正。どうやら、環境別に異なる部分があり、そこの mac のところを直している。 Create a .NET Core gRPC client and server in ASP.NET Core | Microsoft Docs
Node name update (#14989) · aspnet/AspNetCore.Docs@eb4e99a · GitHub
toc.yml (table of contents) の修正。YAML で管理してたのか。
Update sql.md (#14963) · aspnet/AspNetCore.Docs@30f7d4f · GitHub
以下のチュートリアルの修正。Razor page で DB 使う場合のやつ。 Work with a database and ASP.NET Core | Microsoft Docs