オルトプラスエンジニアの日常をお伝えします!

Godot Engineを調べてみた

※この記事は「AltPlus Advent Calendar 2016」の18日目の記事です。

新卒の佐藤です。 現在はサーバーサイドエンジニアとして働かせていただいおります。 技術ブログは初めてなので読みづらい点など多々あると思いますが、ご容赦ください。

今回ですが、タイトルのとおり『Godot Engine』という名前のゲームエンジンを知る機会がありましたので、それについて記事を書こうかと思います。 ちまたでは、豊富なマルチプラットフォーム対応に加え、本格的な2D、3Dゲームの作成が可能ということで、Unityに代わる新たなゲームエンジンとなるのでは、と言われているらしいです。

とりあえず、サンプルプロジェクトを見て、どういうことができるのかというところ確認してみたいと思います。

Godot Engineについての説明や細かい解説などはこちらこちらで紹介がされておりますので、そちらを参照いただければと思います。

ダウンロード

公式サイトのトップにあるダウンロードリンクへ行きます。 ダウンロードページから自分の使用しているOSを選択してください。 あと、今回眺めていくデモプロジェクトをここからDLします。 dl_site.png

DLしてきたものは、解凍してテキトウな場所に置いときます。

僕の場合は一つのファイルにまとめました。 folder.png

デモフォルダはこんな感じです。 demo_folder.png

デモプロジェクトを立ち上げる

とりあえず出てきたexeファイルを実行します。 すると、こんな感じのものが立ち上がります。

waik_up.png

サンプルプロジェクトを立ち上げるには、まず右のImportを選択してください。

import_push.png

で、ここのBrowseを押すとファイルの選択画面に行くので、デモプロジェクトのところまで行きます。

ここから、興味のあるものを見に行きます。 今回は「kinematic_char」というフォルダを選択しました。

中に入るとengine.cfgというファイルがあるので、選択してOpenボタンを押します。 open_before.png

その後「Import」でプロジェクトがProject Listに追加されます。

追加されたプロジェクトをダブルクリックすると、こんな感じのエディタが出てきました。

project.png

とりあえず実行してみます。

first_play-iloveimg-compressed.gif

動きます。

中身を軽く見てみる

このサンプルプロジェクトは名前通り2D上での物理挙動とキャラクターの操作に関してのものらしいです。 また、マップに関してはタイルマップベースで編集することが可能っぽいです。

edit-compressor.gif クソマップ

ほかにもいろいろ見ていきますと - オブジェクト一覧が表示されている『Scene』 - 各オブジェクトのパラメータ等を設定する『Inspector』 - 画像やスクリプトなどのリソースファイルが表示されている『FileSystem』

があります。Unityにあるやつと一緒っぽいですね(Unity以外のGUIゲームエンジンを触ったことがないのでこれが標準なのかもしれませんが...)

こういうのを見るととりあえずキャラクターの移動速度やら何やらを変更したくなるので、スクリプトを見てみます。

上のScriptをクリック(3Dとかは別で使用?AssetLibは見た感じUnityのアセットストア的なものっぽい)

script.png なんと専用エディタ。ありがたい

 どうやら、Godot Engineは『GDScript』という独自のスクリプト言語を使用しているようです。Pythonに似た言語らしいですが、詳しくは公式のDocs(英語)を参照してください(英語苦手)。  Pythonを扱ったことがないので細かいところは分かりません、変数宣言とかが明示的に行えるみたいです。    この辺の細かいことは後々勉強していくとして...  とりあえず、ジャンプ力とかスピードを書き換えて再度再生。

play-compressed.gif 早すぎる。

 ついでにゴールした際のメッセージを日本語に変更してみたのですが、対応していないようです。最後に打った3点リーダーのみ表示されています。

他のプロジェクトも見てみる

ほかには...

light_test.gif

ライトの描写テストだったり

tansaku_test.gif

経路探索のデモや

map_create_test-iloveimg-compressed.gif

別のタイルマップ操作だったり

play_test.gif

普通にゲームっぽいやつもありました。ほかのサンプルも興味がございましたら是非ご覧ください。

まとめ

デモをいじっただけなのですが、非常に軽量でサクサク動いている印象でした(複数のプロジェクト起動でも全然問題なし)。 時間があれば、今度は1からゲームを作ってみたいと思います。

Weka+JAVAのあるデータ分析実践例

※この記事は「AltPlus Advent Calendar 2016」の17日目の記事ですよ。

ご挨拶

皆さんこんにちは。こちらはブログを書くのが苦手な id:Sherphie です。

今度話したいのは、あるゲームプロジェクトである時期のあるイベントで経験したとある事例です。

具体的なデータは禁則事項ですので開示できないですが、流れのみ話します。

どうぞお楽しみに。

背景

ミッション概要:

最近のイベントから離脱したユーザーの離脱原因が分からない...

サブアカウントも結構活躍していて、手動検出のコストが高い...

何ができるのか?

戦場環境:

  • アカウント数:数百万レベル
  • イベント参加者数:禁則事項
  • 手動検出したサブアカウントサンプル:数個レベル

基本装備品:

  • i5-3740 cpu + 8G ram 普通なデスクトップパソコン1台
  • JDK 1.7/1.8 環境 JAVA base ですから
  • JAVA IDE: Eclipse Mars 他のIDEでも全く問題なし
  • Weka 3.7.14 / 3.8 歴史が長いの有名な機械学習+データマイニングのプラットフォーム

ミッション報酬:

  • バフ:自己満足

では、ミッションスタート!

状況分析

  • ユーザーのイベント参加状況は既に分かったので、教師信号を作って、決定木分析で分析しよう。
  • 大量のサブアカの持ち主は大抵は同じ習慣でサブアカを管理していて、クラスタリングで相似性が高いアカウント検出しよう。

操作の流れ

1. データファイルの読み込み~

固有フォーマットのARFF或いはCSVファイルなど、DBと直接接続も可能ですよ。

f:id:Sherphie:20161216210942j:plain

2. 次元圧縮 (日本語訳名かっこいい感じ!

分析処理の作業量を減らすために、高次元のデータを情報が出来る限り損失が出ないように低次元のデータに変換します~

f:id:Sherphie:20161216211157j:plain

3. アルゴリズム選択、パラメーター選択、解析スタート!

  • J48(C4.5)アルゴリズムによる決定木分析

f:id:Sherphie:20161216213022j:plain

  • EMアルゴリズムによるクラスタリング

[f:id:Sherphie:20161216213035j:plain

(以上は教科書の内容でそのままコピペでいいです。本説明の削除も忘れないように。)

4. 結果の評価と可視化

  • データ量によって、10秒或いは10時間後、終了~

  • 生成されたモデルの正解率、結構高いですね~

f:id:Sherphie:20161216220109j:plain

  • 生成されたルールモデル。禁則事項が多すぎるので、もう意味が分からない...。けどそれはもう過学習の防止または禁則事項を減らせるために、2%の正解率を犠牲させて枝刈り処理済みました結果です...

f:id:Sherphie:20161216221419j:plain

  • クラスタリングの結果です。各クラスタは色付きで分別されて、黒いクラスターはサブアカ所在のクラスタです。ちなみに条件付きで選出されたインスタンス数(簡単的に言うと調査範囲内のアカウント数)は約70万個ぐらいです。

f:id:Sherphie:20161216220128j:plain

5. もう終わりよ~(え?上記の結果の意義と使い方も分からない?)

  • 決定木構造から生成されたモデルは今後他のユーザーの離脱可能性判断の根拠として使えます。

    • 例:レベル189以下、イベント参加率64%、SRカード持ち数5以内、最後ログイン記録は5日前のユーザー → 今後離脱の可能性は93%です(モデルの正解率)。

   

  • クラスタリングの結果の使え方は、とりあえずサブアカ所在のクラスタ内の他のアカウントも同じサブアカの嫌疑が高いので、そのまま同じポリシーで処置すればいいです。

    • 同じクラスタにあるというのは、その表現されたパターンはかなり相似性が高いですから。

6. JAVAとの連携 

  • 1997年ぐらいからWekaは既にJAVAベースになりましたので、現在Weka内の全ての機能は、JAVAで簡単に使用可能です。

  • 先ほどの決定木分析をJAVAで実行出来るコードはどれぐらいだろう?サンプルコードは下記の様子です。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;

import weka.classifiers.Evaluation;

import weka.classifiers.trees.J48;
import weka.classifiers.Classifier;

import weka.core.Instances;
import weka.core.converters.ArffLoader;

public class J48Test {  
    public static void main(String[] args) throws Exception {  
        //----------------必要なデータの読み込む---------------
        Classifier classifierJ48 = new J48();
        ArffLoader rawatf = new ArffLoader();
        
        //まずは訓練用データ読み込む
        File dataLoader = new File("*** .arff file path ***"); 
        rawatf.setFile(dataLoader);
        Instances instancesTrainJ48 = rawatf.getDataSet();
        
        //次は検証用データの読み込む
        dataLoader = new File("*** .arff file path ***");  
        rawatf.setFile(dataLoader);
        Instances instancesTestJ48 = rawatf.getDataSet();
        
        //-----------------基本パラメーター設定------------------
        //ターゲット属性行位置設定(最初の1行目の番号は0)
        instancesTrainJ48.setClassIndex(0);

      //instancesTestJ48.numAttributes()使ったら属性数を返すことは可能


        //~~~~~~~~~~~~~~~~~~~訓練スタート~~~~~~~~~~~
        classifierJ48.buildClassifier(instancesTrainJ48); 
        
        //-------------------訓練結果の評価----------------
        Evaluation evaluation = new Evaluation(instancesTrainJ48);
        evaluation.evaluateModel(classifierJ48, instancesTrainJ48);
        
        System.out.println(evaluation.toMatrixString());
      }  
}

はい~ミッション完了!(冗談じゃない!何の栄養もないだろう!)

申し訳ないです。以下正文。

  • 結構失礼な話し方で書きまし申し訳ございません。ここまで我慢した読者に心より感謝申し上げます。

  • 練習データではないですので、結構隠す必要があるものが多いので、更に分かり難くなりました。申し訳ございません。

  • 実際のデータ分析過程中、各ゲームデータに対する理解、その理解の結果を活かして必要な情報を洗い出すこと、またはこの情報を活用することが重要です

  • ご覧通り、上記のデータ分析過程中、実際の操作は本当に僅かな何ステップです。

  • 実際の時間コストから見ると、6割の時間は前処理(生データの洗い出し)、3割の時間はアルゴリズムの選択およびパラメータの最適化、残ったのは上記の部分です。

  • 開発工数=お金です。もしデータ分析のツールまで作らなければならないなら、時間コストはもったいないです。

  • 積極的にWeka、Azure、Tensorflowなどのようなプラットフォームを応用すれば、仕事の効率はだんだん高くなれるはずです。

最後、Wekaの開発者たちに感謝します。

G Suite配下のChromebookでAndroidアプリを使おう!

※この記事は「AltPlus Advent Calendar 2016」の16日目の記事です。

ご挨拶 

社内インフラとセキュリティ対策を担当している和田(id:mwadax)です、こんにちは。
 
昨今IoTが盛り上がってきており、身近なものがインターネットにつながってきました。
ネットにつながると、当然ながら次に問題になってくるのがセキュリティですね。
 
ところで、ウォッチドックス2みなさんやってます?
あれはまさに街全体がネット(実際は架空のOSですが)につながっていて、
主人公がなんでもハックして、ドア開けたりATMいじったりとやりたい放題。
セキュリティを疎かにするとあんな感じになるので、しっかり対策をしていかないといけません。
 
閑話休題
 
で、そんな中、みなさんお使いの会社のパソコン。
最近はいろんなデバイスが出てきていますが、まだまだ業務では主流であり、重要なデータも盛り沢山。
当然ながらこちらのセキュリティも、これまで以上にやっていかなくちゃいけません。
 
さて、オルトプラスでは、外部の勉強会参加やお客さんのところに行く機会も多くあり、社外へPCを持ち出す機会がたくさんあります。
当然ながら暗号化だったりと、いろんな対策を仕掛けていますが、最近注目しているのがChromebookです。
 
このChromebook、G Suiteと組み合わせると、設定次第ではローカル上のデータを蓋を閉じるたびに消したり、リモートでのアカウント強制ロックなど、
もし万が一紛失したとしても、とっても安心な制御ができちゃいます。(そもそもローカルにデータが無いので安心)
 
ただ残念ながら、(乱暴に言うと)根本的にはChromeなのでWebしか見れませんから、持ち出し用PCとしては若干物足りません。
今年春ごろChromebookでAndroidアプリが使えると発表されましたが、G Suite上のChromebookは未実装で、どうしたもんかなーと思案していたところ、
なんとこの冬から、G Suite上のChromebook上でもAndroidアプリが使えるとの朗報が。
もしこれがうまく使えれば、できることが飛躍的に広がること間違いなしです。
 
早速Chromebookを取り出してはみたものの、Playストアがどこを探しても出てきません。
おかしいなと思ってよくよく調べると、G Suite や Playストア上で色々な設定が必要でした。
裏返すと、これは管理側でがっつり制御ができる。ということにつながるんですが、いかんせん最初は結構設定に戸惑いましたので、ここでみなさんにご紹介したいと思います。
 
 ※これからG Suiteの管理画面をご紹介していきますが、管理画面は日々進化していくので、2016/12現在の画面だったり項目名ということで御覧いただければ幸いです。
 

Chromebook上に Playストアをだしてみよう

まずAndroidアプリをインストールするため、その入口となるPlayストアを出してみようと思います。
 
Chromebookのデスクトップ画面f:id:mwadax:20161214155131p:plain
最初はPlayストアがありません
 
まずG Suite 側の管理コンソールから、端末管理 > Chrome > ユーザ設定 と進みます。
管理項目で、「Google Play アプリ」項目内の 「Chrome デバイス上の Play ストア(ベータ版)」が、
デフォルト「ポリシーの設定なし(デフォルト = 禁止)」となっているので、これを許可にして保存。
(もし特定のユーザだけ許可したい場合は、組織を作ってその組織だけ許可も出来ます)
 
G Suite管理コンソール画面
f:id:mwadax:20161214155212p:plain
ここを許可にします
 
これでChromebook上にPlayストアが出てきました。
(反映に時間がかかる場合は、 Chromebook上でブラウザから chrome://policy でポリシーの再読込を実行しましょう)
 
Chromebookのデスクトップ画面
f:id:mwadax:20161214155232p:plain
右端にPlayストア登場!
 
これでAndroidアプリ入れられるぞ、と思いたいところですが、まだお待ちを。
次に、ユーザにインストールを許可するアプリを、管理者が決める必要があります。
 
ChromebookのPlayストア画面
f:id:mwadax:20161214155248p:plain
いまChromebook上でPlayストア開いても、許可されたアプリが無いよとのこと。 
 

インストールを許可するアプリを選ぶ

 G Suite の管理コンソールではなく、次はGoogle Play for Work (https://play.google.com/work)に、G Suiteの管理者アカウントでアクセスします。
通常のGoogle Play ではなくて、for work なので、左上に「会社で許可されたアプリ項目」っていう項目が見えますね。
 
Google Play for Workの画面
f:id:mwadax:20161214155307p:plain
左上に「会社・・・」って項目あります。
 
まずユーザに入れさせたいアプリを検索します。ここではSlackにしてみます。
検索結果からSlackアプリをクリックしてアプリ単体のページに進むと、承認ボタンが出てきます。これをもちろん承認をします。
 
このようにユーザにインストールを許可させるアプリを、事前に管理者側で制御することができる。というわけです。
(セキュリティは高まりますが、反面、ユーザが使いたいアプリをすぐに入れられないといった利便性は落ちるので、申請制にするとか運用を考える必要がありますね)
 
さて、許可したからようやく入れられるぞ、と思いがちですが、もうひとつ設定にお付き合いを。
会社全体として許可したアプリを、今度はどのユーザに許可する・許可しない、といったことを決める必要があります。
 
ChromebookのPlayストア画面
f:id:mwadax:20161214155320p:plain
まだ出てきません、もう少しの辛抱です。
 

誰にどのアプリをインストールさせるか決める

行ったり来たりしますが、今度はG Suiteの管理コンソールに戻ります。
管理コンソールの、
端末管理 > Chrome > アプリの管理
に進み、左側のアプリの種類からAndroidアプリを選択します。
 
そうすると、先程承認をしたアプリ(ここではSlack)が出てきました。
もし出てこない場合は、左側のタイプで「承認済み Android アプリ」が選択されているかを確認。
 
この承認済みアプリを選択して進むと、ユーザの設定が出てきます。
このユーザの設定内で、どのユーザ(G Suite上の組織単位ですが)に「インストールを許可」させるか、
に加え、「強制的にインストール」、「タスクバーに固定」を設定することができます。
 
G Suite 管理コンソール画面
f:id:mwadax:20161214155330p:plain
ここでは全部を設定してみます
 
もちろん組織全体に許可することも出来ますし、特定の組織のみ許可する・しないなど、柔軟に設定できます。
例えば、あるアプリは営業部門には強制的にインストールして画面にも出す。それ以外の組織はユーザの任意に任せる。
といった設定も可能になるわけです。
 
これでようやくChromebook上のPlayストアで表示されました。
 
Chromebook上のPlayストア画面
f:id:mwadax:20161214155341p:plain
やっとAndroidアプリに出会えました。
 
あと今回は、「強制インストール」&「タスクバーに表示」にもONをしたので、
ユーザが操作せずとも自動的にインストールされて、なおかつタスクバーにも出てきました。
 
Chromebookのデスクトップ画面
f:id:mwadax:20161214155352p:plain
左側にSlackのアイコンが出てきました
 
長い道のりでしたが、この過程を乗り越えると、(G Suite配下の) ChromebookでAndroidアプリが使えるようになります。
一度慣れてしまえば大したことないんですが、最初はなかなか苦戦しました。(アプリ側にも罠があって、これは最後の課題で説明します)
ただ、思ってた以上に管理側でしっかりとAndoroidアプリの制限ができることがわかって、Chromebook & G Suiteやるな、とも思いました。
これで持ち出しPCのChromebook化計画の実現も、また一歩進みそうです。
 

G Suite配下のChromebookにAndroidアプリを利用させるまとめ

  1. G Suite 管理コンソール 端末管理 > Chrome > ユーザ設定 で、Playストアの利用を許可させる
  2. Google Play for Work  インストールさせたいアプリを検索して許可する
  3. G Suite 管理コンソール 端末管理 > Chrome > アプリの管理 で、許可したアプリをどの組織にどうインストールさせるか設定
※Chromebookに設定が反映されないときは、 ブラウザで chrome://policy にアクセスして再読込する
 

課題

最後に、残った課題 というか ハマったポイントを。
 
今回おもいっきりハマったのがMS Office系のアプリでした。
Chromebookを使っていると、どうしても困るのがMS Office 系のファイルの取り扱いです。
 
社内だけで言えば Googleスプレッドシートやドキュメントの代替えや、Googleドライブ上にExcelファイルなどを載せてのプレビュー表示、
などなど、なんとか回避方法はあります。
しかし、社外とやり取りするファイルはMS Office系のファイルがまだまだ多く、回避方法を使ってもレイアウト崩れやExcel関数の動作不良からは逃れられません。
思い切ってOffice 365 でブラウザ版のExcelなどを使う方法もありますが、ちと工夫が必要なのでハードルは高め。
 
そんな中、ChromebookでAndroidアプリが使えると聞いたときに真っ先に思いついたのが、Androidアプリの Excel や Word を使えば問題解決!ということでした。
が、結局最後までChromebookで使えていません。
これまでご紹介した方法で、例えばExcelアプリを承認しても、Chromebook上のPlayストアには出てきません。
設定を何度やり直したり他の項目を調べても、どうやっても出てきませんでした。(ここがどハマリしました)
 
結果から言うと、MS Officeアプリが、Chromebookに対応していないだけでした。
実は夏頃 G Suite配下ではない普通のChromebookには、たしかにExcelアプリをインストールできたこともあって、なかなかこれに気が付きませんでした。
(なので、これまでご紹介した上記設定を行っても、Chromebookに実際にインストールできないアプリが他にもあるかもしれません。それは設定が間違っているわけではないので、お気をつけください)
 
バージョンが上がったらChromebookでも使えるようになるのか?このまま使えないままなのか?
は、わかりませんが、ここはぜひとも将来的には、MS Office系のアプリがChromebookで使えるようになることを願いつつ、私の記事は終わりにしたいと思います。
 
これまでご覧いただきありがとうございました。
明日の記事もぜひお楽しみください。