xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

gRPC / MagicOnion 入門 (17) - 切断検知と自動再接続

gRPC はサーバーとクライアントが常時コネクションを張っている状態です。このコネクションが切断されたタイミングを検知して後処理や再接続処理をしたい、というのはよくパターンかと思います。実は、生の gRPC で切断検知をするのは実はかなり面倒です。Ma…

gRPC / MagicOnion 入門 (16) - 複数ユーザーへのプッシュ配信

前回は Unary 通信中にサーバープッシュをする方法を解説しました。しかしそれは 1 つのクライアントに対してプッシュ配信する例だったので、今回は複数クライアントに対してプッシュする方法について見ていきます。 勘のいい方にはパッと分かるかもしれませ…

gRPC / MagicOnion 入門 (15) - Unary 通信中にプッシュ配信

gRPC におけるサーバーからの Push 通知は Server Streaming 通信を用いて行う、というのを以前解説しました。 ですが、この方法では Server Streaming 専用の API を呼び出さないと Push 通知が行われません。一般的には、何か単発の API (gRPC だと Unary)…

gRPC / MagicOnion 入門 (14) - 接続ユーザーを特定する

gRPC で通信を行う際、サーバー側でアクセスしてきているユーザーを特定したいケースは多々あります。これを実現する最も基本的で素朴な方法が、gRPC / MagicOnion 入門 (10) - ヘッダーの利用 で解説したヘッダーにユーザー固有の ID を埋め込むことです。 …

ImageMagick でお手軽 TGA → PNG 変換

業務で .tga で納品される大量のファイルを一括して .png に変換したいということがあったので、ImageMagick Converter を使ってチャチャっとやってみた系のメモです。 ImageMagick をダウンロード 下記サイトからダウンロードできます。各々の OS 環境に合…

ASP.NET Core SignalR を試す

これまで ASP.NET Core には SignalR が提供されていませんでしたが、最近ようやく利用できるようになってきたということで実際に動かして試してみました。今回は、空プロジェクトから簡易チャット機能を動作させるところまでを紹介します。 以下に公式ブロ…

4 色オセロ対決 again - 仙台 IT 文化祭 2017

少し遅くなってしまいましたが...!10/28 (土) ~ 10/29 (日) にかけて仙台 IT 文化祭というイベントに参加/登壇してきました。人生初めての仙台、人生初めての東北。新しいところに踏み入れるのは不思議な緊張感があっていいものですね! ドキドキ・ライブ…

gRPC / MagicOnion 入門 (13) - 送受信されているデータを可視化する

gRPC に限った話ではありませんが、ネットワークを介して送受信しているデータをダンプして目視確認したいことは頻繁にあります。このようなとき、たいてい以下のような方法が採られます。 用途 実装 個別 ダンプしたい箇所にデバッグコードを仕込む 全体 全…

gRPC / MagicOnion 入門 (12) - ログを出力する

アプリケーション開発においてログの出力は非常に重要です。どこで、どのようなことが起こったのかを知る手がかりになります。gRPC には標準でログを出力するための機構が備わっているので、今回はそれを使ってログ出力をしてみます。 コンソールにログを出…

gRPC / MagicOnion 入門 (11) - 通信可能なデータ量を変更する

gRPC でデータを送受信するにあたり、どこまでのサイズが許容されるのか。今回はそのあたりの制限と、その緩和について見ていきます。 既定の通信データ量の制限 gRPC のフレームワークは 1 度の通信で送受信できるデータ容量に制限を設けています。既定では…

gRPC / MagicOnion 入門 (10) - ヘッダーの利用

HTTP/2 をベースとする gRPC にもヘッダーがあり、そこに任意のデータを含めて通信することができます。今回はそんなヘッダーをどうやって利用するのか、その方法について解説します。 ヘッダーにデータを詰めて送信する ヘッダーは Key-Value 形式となって…

gRPC / MagicOnion 入門 (9) - 明示的にステータスコードを返す

HTTP/1.1 にステータスコードというレスポンスの意味を表す数値があったように、HTTP/2 をベースとする gRPC にもステータスコードがあります。これまでの解説ではレスポンスとして正常値のみを返していたので、HTTP/1.1 のステータスコードで言うところの 2…

gRPC / MagicOnion 入門 (8) - 独自型を送受信する

ここまで gRPC / MagicOnion を基本的な通信方法について見てきました。しかし、送受信に利用した型はすべて Primitive 型ばかりでした。独自に定義した型で通信したいと思うのは当然!ということで、今回は独自型でサーバー / クライアント間のやり取りをす…

gRPC / MagicOnion 入門 (7) - Duplex Streaming 通信

前回、前々回と Server Streaming 通信と Client Streaming 通信について解説してきました。今回はこれらを合わせた通信方法である Duplex Streaming 通信について見ていきます。 Step.1 - サービス定義 いつも通り、まずサーバー側で提供するサービスのイン…

gRPC / MagicOnion 入門 (6) - Client Streaming 通信

前回は Server Streaming 通信について見ていきました。今回は Client 側から連続的にデータ送信を行う Client Streaming について解説していきます。 Step.1 - サービス定義 今回もまずサーバー側で提供するサービスのインターフェースを定義します。例えば…

gRPC / MagicOnion 入門 (5) - Server Streaming 通信

前回は最も簡単な Unary 通信について解説しました。今回はサーバーからのプッシュ配信を行うための Server Streaming 通信について見ていきます。 Step.1 - サービス定義 まずサーバー側で提供するサービスのインターフェースを定義します。例えば以下のよ…

gRPC / MagicOnion 入門 (4) - Unary 通信

ここから実際に gRPC で API を作成し、クライアント/サーバー間で通信していきます。まず「gRPC / MagicOnion 入門 (2) - 4 種類の通信方式」で紹介した最も簡単な Unary 通信から見て行きます。 Step.1 - サービス定義 最初のステップでは、サーバー側にど…

gRPC / MagicOnion 入門 (3) - プロジェクト構造と実装の前準備

今回は MagicOnion を使った API 開発を行うまでの前準備にフォーカスを当てます。主に Console / WinForms / WPF アプリなど向けです。MagicOnion は Unity にも対応していますが、これはだいぶ大変でややこしいので別途解説することにします。 基本的なプ…

gRPC / MagicOnion 入門 (2) - 4 種類の通信方式

gRPC は HTTP/2 の仕様に則った形で 4 種類の通信方式を提供しています。以下のドキュメントにも解説がありますが、簡単に図解します。 Unary RPCs 最もシンプルな 1 リクエスト / 1 レスポンス型の通信方法です。通常の関数コールのように扱えるため、非常…

gRPC / MagicOnion 入門 (1) - 概要

gRPC は Google が開発している HTTP/2 ベースの RPC 通信フレームワークで、以下のような特徴を備えています。 Protocol Buffers を利用したサービス定義 多数のプラットフォーム/言語をサポート HTTP/2 ベースの高パフォーマンスなストリーミング通信 統合…

gRPC / MagicOnion 入門

HTTP/2 をベースとした通信フレームワーク gRPC と、その高レベルラッパーである MagicOnion についての連載インデックス インデックス 概要 4 種類の通信方式 プロジェクト構造と実装の前準備 Unary 通信 Server Streaming 通信 Client Streaming 通信 Dupl…

値の破棄

C#

1 年ほど前 C# 7.0 の新規のについていろいろ書いていたのですが、値の破棄 (discards) という機能について書いてなかったことに気が付きました!ということで、イマサラですが紹介します。 これまでの「値を使わない」ときの書き方 コンパイルを通すために…

Visual Studio 2017 (15.1) インストール後に Unity で Windows Store App 向けビルドが通らないときの対処

4/11 から一般提供が開始された Windows 10 Creators Update。このリリースに合わせて Visual Studio 2017 も更新され、内部バージョンが 15.0 から 15.1 になりました。Visual Studio 上ではこんな感じで通知が来ます。 これをクリックして更新するだけで、…

Vuforia 6.2.x が Unity 5.5.x の Windows Store App 環境下でビルドエラーになるのを回避する方法

Tokyo HoloLens Meetup vol.2 の LT で Vuforia という AR ライブラリについて話していたので、「面白そう!」と思ってチャレンジしてみています。AR マーカー的なものはまだ作ったことがなかった上に HoloLens に対応していると聞いて俄然ヤル気に! と思っ…

Sharing Deep Dive - HoloLens で最もクールな機能の勘所を掴む

2017/03/25 (土) に日本マイクロソフト品川本社にて開催された Tokyo HoloLens Meetup vol.2 に参加/登壇してきました。会場に行くと日本の HoloLens ブームの凄まじさに驚くばかりです。そんな圧倒的ギーク達を前に、僭越ながら HoloLens で最もクールな花…

Unity における Windows Store App のアプリケーションライフサイクル

Unity で VR などの PC / Standalone 向けのアプリケーションを作っている場合、アプリの終了処理をしたかったら MonoBehaviour.OnApplicationQuit を使います。ですが、HoloLens などの Windows Store App (Universal Windows Platform) 向けのアプリケーシ…

BuriKaigi 2017 in Toyama でライブコーディングしてきた

数えれば今回で早 5 回目。毎年恒例、北陸の恒例イベント (?) と言っても過言ではない C# 大好き MVP による、C# ドキドキ・ライブコーディング対決 !! をやってきました。これまでは @Fujiwo / @AILight / @xin9le の 3 人でしたが、今回は @RyotaMurohosh…

1 次元配列から 2 次元辞書を作ろう

以前 2 次元配列の要素をインデックス付きで 1 次元配列に落とす、というのを紹介しました。 となると、その逆もやってみたくなりませんか…?*1 拡張メソッドを作る 通常の ToDictionary メソッドはひとつのプロパティをキーにして辞書を作りますが、このキ…

2016 年を振り返って

ウチの CTO が毎年やっていて、「今年は僕も振り返ってみようかな」という気持ちになったので書いてみます。振り返りは大事だな、と言うことで! 単身赴任 2015 年 9 月に株式会社グラニに転職し、単身赴任生活が始まって早 1 年 3 ヵ月が過ぎました。転職し…

ニンテンドーアカウントが Outlook.com で受信できないときの対処

やってますか?スーパーマリオ ラン!僕も少し嗜む程度にはやっています。 そんなスーパーマリオランはニンテンドーアカウントとの連携ができ、連携するといろいろ良いことがあります。 セーブデータが消えても大丈夫! アイコンを Mii に設定できる 連携し…