Macで web2py
ここから落としてみるhttp://web2py.com/examples/default/download
第77回codeseek勉強会&第17回日本C#ユーザー会
URL:http://atnd.org/events/26442ハッシュタグ :#csugip
・IT勉強会スタンプラリー
http://it-stamp.jp/
検索ワードチェック
TIOBE Programming Community Indx+
VB大国日本
日本はレガシー傾向が強い
日本は新しいことへのチェレンジ精神が弱い
うちは〜だからといってる場合ではない
Kinect大人気
史上最速
1800万
KinectFusionでAR
→撮った映像を即座に3Dモデル化
仮想的にお絵かき
ボールをぶつけたり
NUI(Natural User Interface)
・音声認識・音声合成
Kinectも、マイクアレイ搭載で音声認識
・研究プロジェクト
Turning a monolingual speaker into multi-lingual
最近、「翻訳こんにゃく」と話題になった奴
ゲーム開発フレームワーク
スマートホンでゲーム開発
Unity
→クロスプラットフォーム3D開発フレームワーク
PlayStation Suite
→Android端末/PS Vista向け開発スイート
Monoベース
普通の.NET Framework/C#と比べてどうなの?
C#に関しては全機能網羅
C#5.0(次期バージョン)のasync/awaitすら、最新版で対応
ライブラリ
バイナリ依存/Win32依存の激しいところ以外は割りと充実
LINQとか普通にOK
MonoDevelop(等号開発環境)
LinuxやMac↑でも.NET/C#開発可能
◯Unity、PS Suite、なぜC#?
性能
・静的型付け
・JITコンパイル
・値地、ジェネリック
オープン C#はMicrosoftだけのものじゃない
・Mono
・Community Promise ※特許を主張しないことを約束 (某Oracleは主張する)
可搬性
・仮想マシン
・共通型システム
注意:性能いいといっも
C#で性能が出るのはあくまでCPU処理
GPUに頼れない
XNA:性能が欲しければ結局HLSL(シェーダ)各
Windows 8世代の技術
・ネイティブの復権
ただし・・・全部をネイティブでやろうとしない
.NET/
JavaScript連携
2種類のUIフレームワーク
・XAML系とDirectX系
XAML系
メニュー型Ui
ユーザーの対話型操作
XAML系UIとDirectX系UIの混在
療法使いたいことが多々
部分的に低層APIを使って性能アップ
ゲームでもメニューは普通にXAML書きたい
Unituy使ったことある人なら・・・「UI作り、全然イージーじゃねぇ」
このあたりゲームらしく、低層APIで描画
Silverlight 5
メニューはXAMLで
オンライン
サーバー側でもC#
サーバー・クライアント
サーバー側でもC#
人と人とのつながり
今のゲームはネットワーク前提
人と人とのつながり
マルチプレイ(対戦協力)
マッチメイキング
ラインキング
定期的なアップデート
さて、何で作る?
クライアント → サーバ
サーあバーtおクライントで同じ処理をしたいことが
例:魔猫の用に更新したいもの
資源の増加量計算
施設建設の完了判定
いわゆる脳表ゲー
毎秒問い合わせると、
さて、なんで作る
[クライアント] [サーバー]
Unity/C#
PS Suite
→サーバーもクライントもC#
クラウド
ゲームはピークがはっきり出る
土日は経実の三倍
キャンペーン打つと普通の10倍
ということでクラウド
■KINECTプログラミング
STEP BY STEP C# & VB
2012.04.07 初音玲
キネクトのポージング
自己紹介
大手SIIerにて開発部門に在籍
管理職になりません宣言済
現場にいられないなら辞めます宣言済
興味のあるプラットフォームは
Windows Phone
Windows Azure
Kinect
「初音」はミクより先
・Codezineで連載中
http://codezine.jp/author/998
XBOXの入力装置→Windows版発売
HWスペックは
WKINECTの文字がある
Windows版の合がファームウェアが先
ハードウェアスペック
・センサー部
色および深度センサーを備えたレンズ
ボイスマイク
センサーのアジャストを行うためのチルトモーター
・視野角
水平視野:58度、水平視野43度
物理的なチルト可動範囲:プラスマイナス27度
深度センサーの範囲:1.2m〜3.5m
・データストリーミング
320×240解像度:16bitカラー:30フレーム/秒
640×480解像度:32bitカラー:30フレーム/秒
16kHzの16bitオーディオ
・人体トラッキングシステム
2人のアクティブプレイヤーを含む16人までの人体を認識
アクティブプレイヤー一人に対し20の関節をトラッキング
KINECTでできること
我王取得、距離取得
スケルトン(人型)の位置除法取得
音声情報取得 英語だけでなく日本語もできるように
音源方向推定
プログラム KINECT SDK(無料)
・.NET Frameworkの拡張ライブラリ
・VBまたはC#で作成可能
・Windowsフォーム/WPF/XNA
・指定フレームレートによるドリブン
KINECT→KINECT SDK ⇔ アプリ
・Image
・Depth
・Audio
usingしてプロパティやメソッドで
KINECTプログラミング基本の「き」
KinectSrnsor kinect
kinect ColorFrameReady +=
new FrameworkReady +=
new
EventHandler
〜〜
KINECTプログラミング基本の「き」
Wthをつかう
VBの方が簡単
でんぐり返しでも認識
杖をついたのはOK
・認識しない
犬、猫
はいはいの赤ん坊
椅子の上でも1.5では上半身だけ認識できる
右手の
ミクミクダンスとKinectが連携
ストリーミングすることができる
アバターとすることも出来る
■Windows Phone! そういうのもあるのか
もとひろん
MOTO SQUARE SOLUTION
・アプリ公開は有料
AppHubに置かないと
年間9800円
・アプリの審査が必要
・環境は無料
WindowsPhoneSDK7.1
Visual Studio 2010 Express
役に立たないから
傾きを操作できて、パンツが見える ダメ
・XNA
XboxやWindows上で動くアプリに使用される
UIはSilverlight(MS版Flashとも呼ばrた)
WPFの進化系みたいな感じ
3Dモデルも描画する
どんなことができるのか?
XNA
・ゲームループ型の開発
描画
(OnDraw)
更新
(OnUpdate)
描画処理と更新処理がMUGENN
ループで実行
・ハイパフォーマンス
1秒刊に約30回のループ
高速な描画・正確な更新
・コンテンツデータの利用
2D画像、3Dモデル、音楽ファイル、動画ファイル、etc...
・XNAによる開発(デモ)
3Dモデルの描画手順はたったこれだけ
・3Dモデルを追加
・3Dモデルを読み込み(2行)
・3つの行列を設定(3行)
ワール行列
ビューア行列
・VisualStudio
テンプレートが用意されている
「SilverlightXNAアプリケーション」でプロジェクト開始
・メインページからゲームページに遷移が楽
OnnavigatedTo
updateとdraw描画
描画メソッド
◯3つの情報
・ワールド行列
・ビュー行列
モーデルを撮影するための どんな位置、描画
・プロジェクション視野角
画面の縦横比、視野角
3Dモデルを簡単に描画で来てしまう。
Silverlightによる開発
・イベントドリブン型の開発
UIコントロールから発生する各種イベントを利用
・豊富なUIコントロール
ボタン、テキストボックス、テキストブロック、etc///
・視覚的にUIを構築可能
UIコントロールの配置
〜
メインページと画面を設定するのがある
リストボックスで
SilverlightとXNAで簡単に
XNAだけのようなこと
分離ストレージ
設定情報など単一データの保存に利用
・入力デバイス・センサー
〜〜
・分離ストレージ
設定情報など単一データの保存に利用
ファイルもしくはディクショナリ形式
分離・・・他のアプリケーションと隔離されている。保護。文字をキーとしたディクショナリ形式。スコア情報のようなものは。
・ローカルデータベース
スコア情報など複数データの保存に利用
オブジェクトベース(SQLを利用しない」
・ネットワーク
Socketクラス、WCF、WindowsAzure
SORPやRESTもできる
Azureを入れるとできる
■PSSuiteさわってみた
・Sonyの作った共通プラットフォーム
・以下の環境で動く
・Android2.3対応
・〜〜
現在、クローズドβとしてSDKを配布中4月にオープンに移行
4月にオープンに移行
誰でもダウンロード可能に
クローズドベータの制限としてVitaで動かない
〜〜Play
・今後の展開
4月のオープンβからVistaで動作可能
今年後半から正式に移行
99ドル/念で開発環境を利用でき、製品をPSSSとれで販売可能になる
要はAppleのモデルと同じ
Androidの対応状況
用意したすべての機種で延滞
他のゲームもこんな感じ
4gammer.net/games/12/GO12307/201200221064
ゲームは無理
3機種全部だめ
Androidで動かすのは絶望的
クローズドβなので・・・
ドキュメント類が全部公開禁止
VIたでも動かない
話せることがない!
仕方ないのでライブコーディングやります
初期化プログラムを書くのが面倒なのでシューティングを改造する
renderとupdateを使っている
描画 renderr
操作 update
スプライトはタダのテクスチャ
pngをSpriteクラスに読み込ます
・どんな感じなのか?
基本はOpenGLベースなので、裏で行列計算している
GameEngine2Dという高速(らしい)エンジンが搭載されている
この辺はソースも入っているので気になる人はソースを見ると良い
サンプルプログラムからラムダ式やLINQを使っているので、C#をそれりに知っている人向け
非同期処理、Taskクラス
Syncは5.0から
using System.Threading.Tasks;
HTTPの通信系もある
■C# でスマホゲーム開発をしている話 Aiming
ほかにも
DeltaEngine
ExEn
・MonoTouch
OpenGl遣える
XCodeでのUIと連携可能
ーInterface Builder
→ネイティブコードとバインディング可能
→DILでNSオブジェクトを
Cocos2dとか
DLLインポート
・MonoDevelop
IDE
デバッグ
エミュレータ起動
実機転送
・Unity3D
ゲーム開発に必要な者は概ね揃っている
3D描画
物理エンジン
etc
Unity3D
・UnityEditor
レベルエディタ
・MonoDevelop for Unity
UnityEditorと連携したデバッグ
UnityEditorでコンパイル
→Xcodeでコンパイル、転送
超適当に内部技術解説
Monoベースで作られている
Monoの制約に引っ張られます
MonおTouchC#4.0
UnityはC#3.5
.NET Frameworkに完全対応していない(Mono・・・3.5相当、Unity・・・2.0相当)
iOS上ではJIT禁止
なので、事前コンパイルされる
特にUnityはほぼネイティブコードにコンパイルされる・・・らしい
ReflectionmGenerics
制限があるが遣える
そして、ときどき裏切られる・・・
iPhoneビルド、転送にMacが必要
Apple先生には逆らえない
まとめ
・ゲーム開発ならUnityおすすめ
・ツール開発ならMonoTouchおすすめ
・Macを嫌いにならない
現在Aimingでは複数のiPhone(Android)ゲーム開発をしています
ほぼすべてのタイトルがUnity+C#
C#でネットワークゲームのサーバも作っています
多くのプログラマはC++でゲーム開発経験者
アイテムインベントリの特定の条件から取り出すのが
JavaScriptと比べて型きまってていいね
→スコープなど
型チェックが厳しすぎる
※数字がわりに使ってる人がいる
プリプロセッサマクロ欲しい
typedefしたい・・・
friend使いたい・・・
ファイルスコープを超えることができない
UnityでC#の遣える範囲がいまいち把握できない
ツールと連携がしやすい
コード共有が楽
シリアライズ、デシリアライズ
パフォーマンスは許容範囲
GCのお陰でメモリ管理が少し楽
CGがCPU使う
IDE便利
非同期処理をもう少しうまく書けないかな?
iPhoneとAndroidで同じように動いてくれない・・・
→内部動作が違う iPhoneはJIT禁止だが、AndroidはJITで動いている
iPhoneで動いてるのにAndroidでは動いたり。規模縮小すると動いたり。
まとめ
・速度はそこまで気にならない
・メモリ管理はやっぱり意識する
・ツールを使いこなす
・内部動作を理解する(してもらう)
→内部動作がわからないから嫌だ、がいる。
某A社
メインターゲット、iPhoneを中心
ネットワークに繋がるゲーム、MMRPG、ソーシャルゲーム
Unityで編集は?
全員はMacではなく、ほとんどWindows
ビルド確認用はMac
Mac、コメントが書けない
→解決は?
サーバサイド
Linuxで動かしている環境は
進行中
Windowsで動かしている
→本番は悩んでいる
できるならWindowsだが、担当者は嫌だ
Windows8で対応。Unity
ネイティブが使えない
MonoよりAndroidのGCが行われている
Androidの4世代
Unityのここを抑えておけ
チュートリアルを0からやる必要はない。
Mayaつかってるひとはやりやすい。企画の人にはつかえずらい
MonoBehaviorのクラスを生成されてしまう。
その中にゲームロジックを書いてしまう。
ロジックとビューの分離ができなくなってしまう。
そのクラスを作って、MonoBehaviorを使うと楽。
UnityはVisual Studioも選べるのに、PS SuiteはMonoDevelopeのみ。
WP7は固定シェーダーだからUnityでポーティングしにくい?
C#にないtypedefはこれ?
http://d.hatena.ne.jp/gsf_zero1/20070307/p2
F#でUnity
http://d.hatena.ne.jp/pocketberserker/20120118/1326874406
■ASP.NET+C#で開発する大規模ソーシャルゲーム
gloos CTO
池田
前職はJavaで金融向けSI
2007年にん転職、Flexdenendo.tvを開発
C#とJavaScriptが好き
アジェンダ
1.ソーシャルゲームとは?
SNSがプラットフォームに
友達とプレイすることを前提としたアプリ
1回のプレイ時間が5分程度でも成り立つ
終わりのないゲームデザイン
運用中は継続的な改善の繰り返し
コミュニケーションサービス
2.大規模サービスを支えるシステム構成
マジゲート
実は従来のWebアプリと変わらない
プラットフォームの提供するAPIを使う(OpenSocialAPI/OAうth)
トラフィック量が半端ない
OpenSocialとは?
複数Webサイト感で使用可能なソーシャルアプリケーションのための共通API
2007年にGoogleが開発
国内ではMobage/Gree/mixiなどが実装
WAP向けは日本独自の拡張
3.ソーシャルゲームの運用
OpenSocialWAPExtension
ゲーム側ではproxyされたリクエストを処理してHTMLレスポンスを生成
リクエストの認証
APIの利用
OpenSocial API
People/Message/Activity/AppData etc..
・GameAPI
〜〜〜。
・膨大なトラフィック量
リソース後5時間で10万人が登録
リソース後一ヶ月で100万人が登録
1タイトルで65万DAU(Daily Active User)
3.5置くPV/日
膨大なトラフィック量
・リリース後5時間〜〜〜。
楽スターにかかる負荷
・同時セッション数:40万以上
・HTTPリクエスト:15万req/sec
・転送量:3Gbps(画像系は除く)
間違いなく国内でも最大規模!
システム構成
開発言語:ASP.NET + C#(.NET Framework4)
データベース:SQL Server2008 R2
Applicationサーバー:IIS7.5
Load Balancer(Webサーバー)nginx
KVS(Key Value Store):memcached,Redis
画像配信系:よCDN+Varnish+nginx
Q.なんでWindows使ってるの?
C#が好きだったから
でもMicrosoftが好きなわけではない
最初3人しかいなかった
高トラフィックの情報が圧倒的に少ない
IIS+ASP.NETは速い!(Linuxサーバーエンジニア談)
IIS+http://ASP.NET は速いらしい
インフラ構成
・シンプルな構成
・台数は1年ハンデ1000台+に
Azureで→まだ物理サーバ
1ゲームタイトルの規模例
・ロードバランサ:40台
APサーバー:100台
FP用:40台、SP用:40台、Flash合成:20台
memcached:4台、Redis:4台
DBサーバー:3〜5台
画像配信
・とにかくキャッシュ
・スマホで画像も高解像化
Varnishレイヤー
高トラフィックをさばくには
1)アプリケーションの最適化
2)キャッシュの活用
3)DBチューニング&処理の軽減
4)今後に向けて
・APサーバー
ソーシャルゲームの処理はステートレス
スケールは比較的容易
手を抜いた実装はボトルネックに
台数が多いためデプロイが手間
・実装上での心がけ
冗長な処理をしない
データアクセスの最適化
処理の非同期化
ページサイズの最適化(100KB制限)
C#でできることはC#で(LINQ使えば楽)
冗長な処理のモニタリング
1リクエスト内でのDBアクセス数
KVS〜
〜〜
s取りの非同期化
外部へのアクセスは非同期処理で
PageAsyncTask/HttpAsyncHandler
C#5.9の非同期処理に期待(async/await)
ASP.NET 4になって
・ViewState制御の改善(ViewStateMode)
・アプリケーションプールのAuto-Scart
・ウォームアップ(IPろせっsHostPreload〜〜)
〜〜〜
2)キャッシュ
様々なキャシュ
・変更のないマスタデータはオンメモリのDataTableに保持
HttpContext.Itemsの利用
〜〜〜。
〜〜
リクエスト毎/プロセス毎/〜〜に
3)データベースのチューニング
前提として・・・
更新処理が非常に多い
ビッグデータ
気づけば6億件を超えるテーブルも
ボトルネックは間違いなくDBになる
DBs鳥をいかにさばけるかが勝負
・KWS(Key Value Store)の利用
memcached
オンメモリのハッシュテーブル
出たの永続性はない
読み書き共に高速
複雑なデータ構造には向いていない
利用実績が豊富
・Redis
よりも機能が充実
様々なデータ構造(List/Set/SortedSet/Hash)
ディスクへの非同期書き込み
レプリケーション機能
gthub/craigslist/diff/DISQUS/stackoverflowなどで実績
◯KVSの使い所
DBの代わりに使っている
Expireする一時的なデータストアとして
更新規模の高いデータを管理
経験値/スタミナ/達成率等
KVSを常時更新し、適切なタイミングでDBに書き込むケースも
◯データの信頼性よりもトラフィックを裁くことのほうが圧倒的に重要
DBの分割について
・水平分割
テーブルを機能ごとに分割
SQLのJOINができない
・垂直分割
〜〜
DBのボトルネックはI/Oに
・行き着くところはほとんどがディスクI/O
・〜〜
高速ストレージの導入
・PCIe型のSSDを導入(FusionIO社のioDrive)
・1.5K SAS DIsk × 6本(RAID 10):5.500 IOS
〜〜〜
近年の〜
さらに上を行く製品も
2011/11 ioDrive Octalを発表
PCle 2スロット 容量10TB
read性能6.5GB/s write性能3.9GB/sec
4)今後の取組
今取り組んでいること
WindowsAzureでの動作検証
SQLAzure Federationのスケーラビリティ
海外展開刷るにはクラウド有利
開発スタイル
2年間で17タイトルをリリース
開発期間は2ヶ月程度
サービスはリリースしてからが始まり
・トラブルは尽きない
サービスが急成長続けている限り、未知の問題は常に発生する
ミスは必ず起こるが繰り返さなければ良い
〜〜
・まとめ
ソーシャルゲームの概要を詳解
システム構成と高トラフィックへの取り組みを紹介
ソーシャルゲームの運用〜〜〜。
バックアップ、保守
レプリケーションしたり
DBでバックアップしている
150台
何かしら仕組みを
自動化はGUIつかったり、人海戦術でカバーしている
ログの解析。データの取得
データマイニング
→1日前の
Azureをいれるのはグローバルを視野に