万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    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をいれるのはグローバルを視野に