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 が入るようになった
    • HttpRequestExceptionStatusCode が入るようになった
      • EnsureSuccessStatusCode を呼ぶと入る
      • GetStringAsync, GetByteArrayAsync and GetStreamAsync のような Response を返さない系も内部で EnsureSuccessStatusCode を呼ぶから StatusCode が取れるよ
    • HttpRequestException を手動で作る時にも StatusCode を含められるようになった
  • Sync API for HttpClient.Send
    • 単一タスクを複数スレッドで完了させたり、UI のデッドロックの問題とかで同期 HttpClient Send が欲しい場合がある
    • 同期版は提供するが HTTP 1.1 のみサポートだし、デフォルトの SocketHandler 以外を使う場合は自前で実装する必要があるのが出てくるよ
    • 今後も非同期 API を使うのを推奨はします
  • 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 の設定でも変更できる

Diagnostics improvements in .NET 5 | .NET Blog

  • Diagnostics tool are available without the .NET SDK
    • これまで .NET SDK がないとインストールできなかったけど、単一ファイルにしたので runtime さえあれば動く
  • Analyze Linux memory dumps on Windows
    • dump の解析は、managed object and constructs の special knowledge が必要で、それを runtime 無しに解析するために The Data Access Component (DAC) があった
    • Linux 用の DACWindowsコンパイルしたから、今後は WindowsLinux 上での .NET の process dump を解析できる
    • dotnet dump analyze か VS 2019 16.8 でどうぞ
  • Startup tracing
    • Startup tracing を可能にした
    • dotnet counters monitor -- mydotnetapp.exe みたいな感じでアプリを起動する
  • Assembly load diagnostics
    • Fusion Log Viewer の代わりになるようなのを用意した

log 2019/10/18

Prevent modifying ContentLength after starting response #14056 (#15089) · aspnet/AspNetCore@4dd9bfc · GitHub

以下の 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 って標準ではされないんだなぁ。


Add a flag to prevent config, json files from being copied to the bui… · aspnet/AspNetCore-Tooling@8a99b91 · GitHub

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 は深く見たことないけど、ちょっとおもしろそう。


Query: Translate GroupBy-Aggregate when using result selector (#18415) · aspnet/EntityFrameworkCore@0fd7de0 · GitHub

以下の issue の対応の一部
Query: group by using result selector doesnt translate correctly when grouping key is used in result selector · Issue #18267 · aspnet/EntityFrameworkCore · GitHub

修正の詳細はあまり理解できないが、テストで使われている QueryTestBase の内容が面白い。

https://github.com/aspnet/EntityFrameworkCore/blob/60aba6fc018d8c83d65a32577d5b1feec1f8866c/test/EFCore.Specification.Tests/Query/QueryTestBase.cs

Maybe とか追加してあって、ほーとなった。

log 2019/10/17

Don't re-use DefaultHttpContext if IHttpContextAccessor is in use (#1… · aspnet/AspNetCore@16be9a2 · GitHub

以下の issue の fix
IHttpContextAccessor cannot be used reliably in some scenarios · Issue #14975 · aspnet/AspNetCore · GitHub

IHttpContextAccessor を async 実行されるインスタンスに渡した場合に、リクエストが終了した後にも関わらず、直前のリクエストの HttpContext が取得できてしまう。

DefaultHttpContextFactory には Dispose があり、そこで HttpContextnull にしているが、HostingApplicationDisposeContext で受け取った context 内の HttpContextnull にするようにしている。

この辺の関係は読み込めていないが、対処としてはこんな感じらしい。とはいえ、 IHttpContextAccessor から必要なものだけ取って渡すのがいいって感じなんだろうな。

Best practice の Do not store IHttpContextAccessor.HttpContext in a field 以降
ASP.NET Core Performance Best Practices | Microsoft Docs


Fix Migration Batching When Seed Data Has Non-Writable Columns (I.E. … · aspnet/EntityFrameworkCore@afd6ca6 · GitHub

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 を実行している。


Fixed up explanation of "Special case formatters". (#15121) · aspnet/AspNetCore.Docs@ecf1ede · GitHub

以下の formatting のドキュメントの更新。
Format response data in ASP.NET Core Web API | Microsoft Docs

修正のメインは TextOutputFormatterStringOutputFormatter に変更されている部分。

このドキュメント自体は、API response の body を JSONXML にフォーマットする部分についてだが、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


Address review note re Result Filters and exceptions. (#15091) · aspnet/AspNetCore.Docs@dd77c7c · GitHub

以下のドキュメントの更新。内容は微修正。
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 に設定
  • RequestLocalizationMiddlewareCurrentUICultureContent-Language にセットできるように
  • 明示的に Content-Language を response header に追加しなくていい
  • 3.0 からは RequestLocalizationMiddlewareDebug レベルでサポートされていない 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 にしてくれるように。

https://github.com/aspnet/EntityFrameworkCore/blob/59fbd887f987da6e769f57e853c2ce2d00eb1fd6/src/EFCore/Query/Internal/EntityEqualityRewritingExpressionVisitor.cs#L1026-L1037

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

statementdirective に置き換えられている箇所が多数。あと 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