万年素人からHackerへの道

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

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

    appengine ja night 18 ( #ajn18 )

    http://www.zusaar.com/event/170203

    Google App Engineの倹約のすゝめ
    <スライドのURL>
    http://goo.gl/R99Uj

    →見直し、価格を抑えられる

    #ajin18
    #gaeja

    クラウド

    ・GAEの簡単な詳解
    2008-04-08から公開
    2011-11月に正式リリース

    ・新旧課金体系の違い
    無料枠が小さくなった、純粋な値上げ
    単位時間アタチの使用料が値上げ
    有料とプレミアムの3種類
    最低$9+$2.1/週
    APIの使用回数が課金対象
    データストアAPI
    無料・回数無制限のAPIもある

    ・重要な項目
    ユーザから立ち上がって起動する
    フロントエンド

    ・Frontend Instance Hours
     Frontend インスタンスが起動していた時間

    ・Datastore Weits
     Datastoreの書き込み操作

    →CPU時間だったのがインスタンス時間になった

    起動終了管理できるのが
    バックエンド

    インスタンスごとの稼働期間+APIの使用料を課金。
    インスタンスの数が大きく影響する。

    ・CPU HoursとInstancee

    CPU Hoursだけでなく、インスタンスの起動時間+αが課金対象になる

    インスタンス CPU時間に比べると単位が大きくなる
    インスタンス数を減らす

    インスタンスが空くまで、キューの中で待機する(Pending Request Queue)

    ・スケジューラ
    どの空きインタンスに(Idle Instance)に処理を任せるのかを決める。

    ・Application Settings - Performance
     Max Idle Instance Instances:ここで設定した数以上のアイドルインスタンスが存在しても課金対象にならない。

     Min Pending Latency:Pending Latencyがここで設定した時間を超えるまではインスタンスが立ち上がらない。
     どのくらいきゅーでますか?

     Max Idle Instances 最小限の1を設定する
      Min Pending Katency 15sに設定する
      できるだけインタンスを〜〜

    ・スケール設定による節約の事例
    LingrBot
     RedmineのActivityをURLFetchする

    データストアのwriteとreadを設定しないと

    インスタンス時間を減らす
     concurrent requestを利用する
     1つのインスタンスで同時に複数のリクエストを処理できる
     PythonはHIDに限る

    appengine-web.xml
    true

    app,yaml
    threadsafe: true

    ・Put Ops, Index Writes Opsとは
    新規PUT
    Entity Tableへの書き込み

    Index Tableへの書き込み

    1 Put Ops + 11 Index Write Ops = 12 Write Ops

    上書きPUT(p2のみ変更)

    ・Datastore Writes Operationを節約
    一回のPUT操作=1 write ops...ではない

    ・Single Property Indexを使わない方法
     ・Java
      entity.set〜〜
     ・Slim3
      @Attribute(unindexed = true) private String unindexedString;
     ・Python
      indexed=false
     ・Go
      noindex

    ・unindexed設定後二回目以降のPUT(2)
     p2,p3がunindexedになっ

     unindexedで保存しなおしても、一回目は

    二回目に効果が出る

    一回のPUT操作=1 write ops..ではない!

    Single Property Indexを節約した事例
    ソーシャルゲームアプリケーション
     位置情報を利用した、領地取りゲーム
    ・設定前

     〜〜〜

    ・Datastore Read Ops
    Memcache APIを活用する」
     ・クエリを実行したて50件のエンティティを取得する
     1Query Ops
     50Fetch Ops
    ・51 Read Opsを消費する
    ・キャッシュしても問題ないクエリ結果はキャッシュする。
     memcache APIは無料

    ・Keyだけで良い場合はKeyだけ取得する
    ・Keyの取得だけならSmall Opsとなる
     1Query Ops
     50 Key Fetch Ops
     1 Reads Ops + 50 Small Ops


    ・Backend Instanceにも無料枠がある
     $0.72/dayの無料枠があるので活用しないともったいない。
     Taskの実行に使うのが便利。

    backendsの定義とアプリケーションをデプロイする
    queueの定義のtargetにbackendsの名前を指定する

    ・まとめ
     まずは「課金対象か?」を理解する。
    ・現在の課金の状況を正しく把握する。
    ・節約するポイントを決め、節約する。
     ・Instance Hourの節約
     スケジューラの調整
     concurrrent requetの節約
    Datastore APIの節約
    Writes・・・Single Property Index
    Reads・・・Memcache、Key

    フロントエンドは15分単位だとバックエンドのインスタンスも15分単位

    Staticファイルのキャッシュは

    アンインデックスにしていいがやっぱり復活したい
    →インデックスしなおさないといけない
    PUTしたタイミングでかわる。
    PUTしなおせばよい。

    concurrent request の設定はPython2.5でも有効?
    →有効ではない

    RPCしていないCPUでも複数スレッドに鳴る

    Python2.7でもジャイアンインタプリタロック

    カスタムインデックスはどんんだけながくても1

    プロパティクラスをつくればいける?
    Expand 動的にインデックスされる?

    フロントエンドとバックエンドは料金は特別変わらない

    ・再便場の機能をひと通りレビュー
    松尾さん


    App Engine 細心除法
    →GDDとほぼ同じ情報

    http://goo.gl/s0P9P

    1.5.1 X-AppEngine-Country ProtoRPC(JSONベースRPCのハンドラ構築用モジュール) SDKでのHRDエミュレーション

    ・Pending Latencies
    11/7リリースでは設定できる
    Max必ず新しいインスタンスを生成するようになる

    Min Idle InstancesはAlways Onでは一部の人は設定できた。(1-7)
    ※今はできない

    failfastをfalseにするとPending Queueに入れられる

    Python Memcache CAS
    CASはCompare And Setの略
    排他的なアップデートができる

    API Console 新しめのやつを管理できる

    プレミアムアカウント
    沢山のメールをやりとりしてやっと取得

    Java Remote API

    SSL for Custom Domain TT
    Androidも前のバージョンが使えない
    モダンブラウザならOKだが一部使えない

    AppEngineはトランザクションが苦手。
    できるが、触るエンティティは1つのエンティティの中にいないといけない

    Slim3はGlobal Transactionを実装している

    XG-transactionは5EGまで同時にトランザクションかけれる

    Instance hour が半額 PythonJavaも。

    Python2.5&Linuxで1.55から1.6に上げると重い(レスポンスが悪い。)
    Chromeのバージョンが関係ある可能性がある。
     Pre-connectが関係する。切ってもなおらない?

    有料から無料にするとどうなる?
    Frontendキャッシュが効かなくなる
    エッジサーバがあるが、

    MAXインスタンスで瀬尾ギョできるのは


    #ajn18



    Input系 Unity

    左クリック マウス用

    if (Input.GetMouseButtonDown(0)) {
    	Debug.Log("MOUSE");
    }
    

    これはマウスだけでなくAndroidもなぜか認識

    Input.mousePosition;
    

    Scene::raycastAnyShape: The maximum distance must be greater than zero!



    Raycastをインスペクタで選択させる方法
    http://unity3d.com/support/documentation/ScriptReference/LayerMask.html

        public LayerMask mask = -1;
        void Update() {
            if (Physics.Raycast(transform.position, transform.forward, 100, mask.value))
                Debug.Log("Hit something");
            }        
        }
    

    mask.valueだよ。maskではない。

    16進数の"0x"プレフィックス由来

    http://q.hatena.ne.jp/1149751438

    OnCollisionStayは常ではなかった Unity

    コライダーがぶつかっている間常にログを吐かなかったので、
    コライダーがぶつかっている間は常に判定はしていない。

    void OnCollisionStay(Collision collision) {
        Debug.Log("log");
    }
    

    タグ付け Unity

    gameObject.tag = "hoge"
    

    hogeというタグがない(インスペクタで作ってない)のにGameObjectへ充てるとどうなるか実験した。

    こんなエラーになる

    UnityException: Tag: タグ名 is not defined!

    スタンドアロンサーバ for Unity

    node.jsの使いかたわからないので他のサービスを調べた

    ・SlimNet

    →アセット作ってるがこれはサービスではなさげ?
     http://forum.unity3d.com/threads/111299-Release-SlimNet-Public-Alpha-(Free)

    ・Photon
    http://www.exitgamescloud.com/

    Hello Worldのやりかた
     http://doc.exitgames.com/v3/quickstart/helloworldpart1

    →「Viking MMO Demo」と「Bootcamp FPS Demo」とプラグイン
     http://doc.exitgames.com/v3/demos/unitydemos

    ・uLink
    http://www.muchdifferent.com/?page=game-unitypark-products-ulink

    →FREE (30 DAYS)

    ・SmartFox
    http://www.smartfoxserver.com/