万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Macで web2py

ここから落としてみる
http://web2py.com/examples/default/download

にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

第77回codeseek勉強会&第17回日本C#ユーザー会

URL:http://atnd.org/events/26442
ハッシュタグ :#csugip
・IT勉強会スタンプラリー
http://it-stamp.jp/

C#とゲーム
ゲームはC++、WebはLAMPが多かった


検索ワードチェック
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(等号開発環境)
 LinuxMac↑でも.NET/C#開発可能

◯Unity、PS Suite、なぜC#?

性能
・静的型付け
JITコンパイル
・値地、ジェネリック

オープン C#Microsoftだけのものじゃない
・Mono
・Community Promise ※特許を主張しないことを約束 (某Oracleは主張する)

可搬性
仮想マシン
・共通型システム


注意:性能いいといっも
C#で性能が出るのはあくまでCPU処理
 GPUに頼れない
 XNA:性能が欲しければ結局HLSL(シェーダ)各

Windows 8世代の技術
・ネイティブの復権
 ただし・・・全部をネイティブでやろうとしない

.NET/
JavaScript連携

C++ AMP
 GPU利用

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倍
ということでクラウド

Windows Azure

KINECTプログラミング
STEP BY STEP C# & VB
2012.04.07 初音玲

キネクトのポージング

自己紹介
大手SIIerにて開発部門に在籍
 管理職になりません宣言済
 現場にいられないなら辞めます宣言済

メイン言語は、NETです
 VBC#の違いなんて飾りです

興味のあるプラットフォームは
 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
・指定フレームレートによるドリブン

KINECTKINECT 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

SilverlightXNA

・アプリ公開は有料
AppHubに置かないと
年間9800円
・アプリの審査が必要

・環境は無料
WindowsPhoneSDK7.1
Visual Studio 2010 Express

役に立たないから
傾きを操作できて、パンツが見える ダメ

XNA
XboxWindows上で動くアプリに使用される

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コントロールの配置
 〜

メインページと画面を設定するのがある


リストボックスで
SilverlightXNAで簡単に

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では複数iPhoneAndroid)ゲーム開発をしています
ほぼすべてのタイトルがUnity+C#
C#ネットワークゲームのサーバも作っています
多くのプログラマC++でゲーム開発経験者

usingいいね
ラムダ式いいね
LINQいいね

アイテムインベントリの特定の条件から取り出すのが

JavaScriptと比べて型きまってていいね
→スコープなど
型チェックが厳しすぎる
 ※数字がわりに使ってる人がいる

プリプロセッサマクロ欲しい
typedefしたい・・・
friend使いたい・・・

ファイルスコープを超えることができない

UnityでC#の遣える範囲がいまいち把握できない
ツールと連携がしやすい
コード共有が楽

シリアライズ、デシリアライズ
パフォーマンスは許容範囲
GCのお陰でメモリ管理が少し楽
CGがCPU使う

IDE便利
非同期処理をもう少しうまく書けないかな?
iPhoneAndroidで同じように動いてくれない・・・
→内部動作が違う iPhoneJIT禁止だが、AndroidJITで動いている
 iPhoneで動いてるのにAndroidでは動いたり。規模縮小すると動いたり。

まとめ
・速度はそこまで気にならない
・メモリ管理はやっぱり意識する
ツールを使いこなす
・内部動作を理解する(してもらう)
 →内部動作がわからないから嫌だ、がいる。

某A社
メインターゲット、iPhoneを中心
ネットワークに繋がるゲーム、MMRPG、ソーシャルゲーム

Unityで編集は?
全員はMacではなく、ほとんどWindows
ビルド確認用はMac

Mac、コメントが書けない
 →解決は?

サーバサイド
Linuxで動かしている環境は
進行中
Windowsで動かしている
→本番は悩んでいる
 できるならWindowsだが、担当者は嫌だ

Windows8で対応。Unity
ネイティブが使えない

MonoよりAndroidGCが行われている

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.NETC#で開発する大規模ソーシャルゲーム
gloos CTO
池田

前職はJavaで金融向けSI
2007年にん転職、Flexdenendo.tvを開発
C#JavaScriptが好き

アジェンダ
1.ソーシャルゲームとは?
SNSがプラットフォームに

友達とプレイすることを前提としたアプリ
1回のプレイ時間が5分程度でも成り立つ
終わりのないゲームデザイン
運用中は継続的な改善の繰り返し
コミュニケーションサービス

2.大規模サービスを支えるシステム構成
マジゲー

実は従来のWebアプリと変わらない
プラットフォームの提供するAPIを使う(OpenSocialAPI/OAうth)
トラフィック量が半端ない

OpenSocialとは?
複数Webサイト感で使用可能なソーシャルアプリケーションのための共通API
2007年にGoogleが開発
国内ではMobageGreemixiなどが実装
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をいれるのはグローバルを視野に