451 Unavailable For Legal Reasons

とあるゲームエンジニアのブログです

Microsoft HoloLens のプレオーダーが 12 月 2 日(金)より開始

news.microsoft.com

とうとう日本でもHoloLensのプレオーダーが開始されるようです。価格などについてはリンク先を御覧ください。

以下、HoloLensアプリ開発でスタートダッシュを決めたい開発者のために、読んでおいたほうが良いページをまとめておきます。

環境構築

Install the tools

HoloLensアプリを開発するために必要なツールです。

  • Windows 10 SDK(version 1511以降)
  • Visual Studio 2015 Update 3
  • Unity 5.5 *1
  • Vuforia *2

チュートリアル

Academy

チュートリアルは全部やった方が良いです。HoloLens実機が手元にない場合はEmulatorでできるとこだけ。入力、レンダリング、3Dサウンド、空間認識などを体感するにはDevelopment Editionを買うべし。

HoloToolkit

github.com

HoloToolkitは、Windows Holographicを対象としたホログラフィックアプリケーションの開発するためのコンポーネントを含むリポジトリです。

HoloToolkit-Unity

github.com

HoloToolkitをUnityから利用するためのコンポーネントを含むリポジトリです。 Examplesも含まれています。

UnityのWindows Holographicドキュメント

docs.unity3d.com

色々とHoloLensアプリを開発するための設定やエディタの操作方法が書いてあります。Performance recommendations for Unity へのリンクなどもあります。

UnityのScriptReference

docs.unity3d.com

実際に開発するようになったらScriptReferenceを一番見るようになるかもしれません。

*1:HoloLensをサポートしている正式版の5.5が出たので、HTPよりも5.5をインストールするのがおすすめです。

*2:実世界のオブジェクトをマーカーにして、GameObjectを配置したり追随させたりしたい場合は必要です。

ISUCON6予選問題の実装やベンチマーカーが公開されたので.NET Core実装追加してみた

ISUCON6予選問題の実装やベンチマーカーが公開されましたね。

isucon.net

ということでフォークして.NET Coreの参照実装を追加しました。

GitHub - kiyoaki/isucon6-qualify: Add .NET Core support

追加しただけで動作確認はこれから。 Microsoftは運営・協賛に入ってるのになぜ.NET Coreの参照実装を用意してくれなかったのか。

C#縛りでLT大会 & Meetup@bitFlyerで話してきた

イベントページ

forkwell.connpass.com

資料

www.slideshare.net

振り返り

懇親会にテキーラ差し入れで持って行ったらベロンベロンになりました。懇親会と2次会で何を話したか忘れましたが、楽しかったのはなんとなく覚えています。今後、懇親会にテキーラ差し入れ流行らせようと思っております。

Japan Azure User Group (JAZUG) 6周年で話してきた

イベントページ

jazug.connpass.com

資料

www.slideshare.net

Twitter

togetter.com

振り返り

朝まで飲んでちょっとだけ寝てから登壇したところ、めちゃくちゃテンションが低くなる現象が発生しましたが、PaaS組み合わせて使って楽になろうという話をしてきました。

おばかIoTのイケメンだけ撃てる銃とか、The DAOの事件の話とか面白かったです。

obakapp.doorkeeper.jp

btcnews.jp

LINE Bot APIはServer whitelistを無くした方が良いと思う

Azure FunctionとWebJobで、Azure Storage Queueを介して、LINE Bot APIのメッセージの収集と送信を行うサンプルを作成しました。

github.com

LINE Bot APIへリクエストするにはServer whitelistにIPアドレスを設定する必要があります。*1

おそらく同一MIDを使ったDDoS攻撃への対策だと思いますが、このwhitelistのせいでグローバルIPアドレスを固定できないPaaSが使えなくなってしまいます。 *2

DDoS攻撃への対策についてはwhitelistではなく、一定時間内に一定数を超える複数のIPアドレスから、同一MIDが正しいChannel IDとChannel Secretでリクエストしてきた場合、ブラックリストへ登録してリクエストを一定時間遮断するような実装にするのが良いと思います。*3

例えば下記のような方法があります。

  1. Redisに、MIDをKeyに含めて、下記のようなHashを一定時間のExpireでSetしておく。
  2. isBlockedをチェックしtrueなら遮断
  3. リクエスト元IPアドレスがipAddressと異なる場合、新たなIPアドレスをipAddressをSetしてaddressChangedCountをIncrement
  4. addressChangedCountが一定数を超えたらisBlockedをtrueにしてExpireを延長しておく
{
  "ipAddress": "192.168.1.1",
  "addressChangedCount": 0,
  "isBlocked": false
}

現状、whitelistチェックのためにデータストアへアクセスしているならば、処理コストをあまり増やさずにBOT開発者の利便性を向上させることができると思います。

ちなみにサンプルで作成した構成は下記の通りで

  1. Azure Functionでメッセージを収集しAzure Storage Queueへストア
  2. Azure WebJobでAzure Storage Queueをデキューして返信メッセージを生成しSending messages APIへPOST

この構成だと返信ジョブが失敗した場合に、一定回数のリトライも、リトライに失敗した場合のデータの保存もWebJob SDKが面倒見てくれます。*4

PaaSだと面白いBOTを思いついたら手軽に試せてスケールもしやすいので、LINE Bot APIの開発者の方にはServer whitelistの撤廃を検討頂けるとありがたいです。*5

*1:Callback URLをリクエストしてもらうのはServer whitelistの設定不要

*2:「Azure Web AppsはグローバルIPアドレスを固定にすることは可能ですか?」とMicrosoftに問い合わせてみたところ「まだその機能がありません。将来的にも組み込まれるかどうかもわからないようです。」とのこと

*3:弊社のゲームではBOT検出&遮断アルゴリズムの1つにリクエスト元IPアドレスを使ったものを実装している

*4:queueのアイテム名に「-poison」を付けて別queueに保存される

*5:トライアル版だからServer whitelistがあっただけだったなら杞憂