一人もくもく会 α verでサービス開始しました。

cocos2d-xのfbx-convをlinuxで実行

cocos2d-xはlinuxにもインストールできる。 しかし、一緒にインストールされる3Dモデルのコンバートツールであるfbx-convはWindows用とmac用のものしか付属していない。

wineで動くと良いかと思ったがうまく動かないのでlinuxでビルドを試してみた。OSはLinux Mint18

基本的には下記のとおりだが、順番や不足があるので補足してみる。

Fbx-conv tool source code - Extensions - Cocos2d-x Forums

FBX SDKをインストー

前提としてFBX SDKが必要なので、下記でダウンロード。

Autodesk - Autodesk FBX - FBX Software Development Kit

付属のテキストに書かれているように、インストールするパスを指定して実行するだけ。

./fbx20160_fbxsdk_linux /usr/local/lib/fbx-conv

fbx-convをビルド

下記をclone

github.com

export LD_LIBRARY_PATH=/usr/local/lib/fbx-conv/lib/gcc4/x64/release/libfbxsdk.so
export FBX_SDK_ROOT=/usr/local/lib/fbx-conv/lib/gcc4/x64/release

src/modeldata/Node.hに下記を追加

#include <algorithm>

src/modeldata/FileIO.cppに下記を追加

#include <string.h>

あと実際の実行時にもライブラリへのパスが通っていないといけないので、 /etc/ld.so.conf.d/fbx-conv.confを作成して

/usr/local/lib/fbx-conv/lib/gcc4/x64/release

を書いておく。 このconfファイルを作成したら

ldconfig

で設定を反映させる。

Makefileを作成するため、

./generate_makefile

するとbuild/gmake/fbx-conv.makeが作成されるので、この中の最初のCFLAGSを下記に書き換える。

CFLAGS    += $(CPPFLAGS) $(ARCH) -g -w -std=c++11

あとはbuild/gmakeフォルダでmake。するとcloneしたフォルダの直下にfbx-convが作成される。 ここに実行パスを通しておけば良い。

Linux Mint 18でUnreal Engine

Linux Mint 18にUnreal Engineをインストールして起動するところまでやってみた。

基本的には公式の情報に沿ってビルドだが色々わかりにくいところもあるので補足しつつ。

Building On Linux - Epic Wiki

ソースの取得

wikiをみると、まずgithubからソースをcloneするところから始まる。 しかし、githubを見ても該当のリポジトリが無い。

これは無いのではなく、github上にてEpic Gamesのメンバーにならなければアクセスする権限がない。 下記のようにしてメンバーになる必要がある。

  • Githubのアカウントがない人はまずGithubに登録。
  • Unreal Engineのアカウントがない人はまず登録。(ダウンロードページから登録できる)
  • Unreal Engineのサイトでログインし、自分の情報の編集画面に行くとGithubのIDを設定するところがあるのでそこに設定。 これでEpic GamesのアカウントとGithubのアカウントが関連付けられる。 これで確かメールが送られてくるのでその中のボタンを押せばメンバーになりリポジトリが閲覧できた気がする。

あとはとりあえずcloneしておく。だいぶ時間がかかる。

ビルド前の事前準備

clone後、まずは説明ページの下の方にディストリビューション毎の事前準備の説明があるのでそちらを確認。 たとえば「Setting up on Linux Mint」のような項目がある。

Linux Mintの場合、色々とaptでインストールとシンボリックリンクの作成。 Setup.shだかGenerateProjectFiles.shを行うと勝手に色々インストールしようとするので多分省略しても良いと思う。 自分の場合clang-3.9をインストールしようとして失敗していた。 多分ディストリビューションのバージョンを見て入れるバージョンを変えているのかもしれない。

自分の場合は

LLVM Debian/Ubuntu nightly packages

のYakketyで設定してインストールした。 /etc/apt/sources.listに追記し、apt-get updateしてインストール。

ビルド

あとは書かれているとおりにビルドまで進める。ビルドはすごく時間がかかるし多少容量も使うので注意。

起動

説明通りに起動すると、エラーで停止。 エラーを見るとスプラッシュの画像が読み込めないと出ているので、 実行ファイルのところにcdしてから起動したらそのエラーは消えた。

あとはどうも Could not create OpenGL 4.3 context のようなエラーが出ているので調べてみたら、OpenGL3指定で起動すればいいということが書かれていたので

./UE4Editor -opengl3

としてみたところめでたく起動した。

サンプルがあったのでそれで新規プロジェクトを作成し、エディタ上でプレイ出来たところ。 f:id:dala:20170510220127p:plain

しかし重い…初回だからだろうか。

あとVisual Studioは無いのでちゃんとC++が動くのか不明。

cocos2d-jsでInvalid Native Object

cocos2d-jsにて、androidでrunしてみると、真っ黒で何も表示されない。 FPS表示は動いているのでうごいてはいるらしい。

android studioのログを見てみると下記のようなログが出力されていた。(抜粋)

js_cocos2dx_Node_isRunning : Invalid Native Object
(evaluatedOK == JS_FALSE)
JS: assets/script/jsb_prepare.js:254:Error: js_cocos2dx_Node_isRunning : Invalid Native Object
Evaluating main.js failed (evaluatedOK == JS_FALSE)

main.jsの評価に失敗しているということなので、 もしかすると何かしらwebでしか動かない構文があるのではないかと細かく調べてみたが、見つからない。

次にInvalid Native Objectを調べてみると、どうも実行時だけにでるエラーとのこと。 androidでのJavaScriptの実行時だけ何かエラーが出ているらしい。

最終的に、sceneに定義しているrunningメソッドをgoingという名前に変更したら動いた。 どうもSpriteクラスのメソッドを上書きしていておかしくなっていたらしい。

webだと単にJavaScript上でメソッドを上書きするだけだが、 実機だとc言語側でエラーが出るのでエラー時の挙動が変わってしまうようだ。

A3RTのTalk APIをブログ上で試す

A3RT

リクルートのAI用のAPIであるA3RT

A3RT

が無料で公開されたとのことが下記で紹介されていた。

https://bita.jp/dml/recruit_artapi_

ブラウザ上でテストできるサンプルを作成してみた。

APIキーとメッセージを入れるとレスポンスが返ってくる。APIキーは公式サイトですぐ取れる。

APIキー

メッセージ

試してみた

f:id:dala:20170425200837p:plain

なにそれ…

一人もくもく会をCakePHP3のみに変更

Angular + CakePHP3 で作成していた

一人もくもく会

だが、Angularを捨ててCakePHPのみに修正した。

お客さんのために作成したサイトでも何でもないのでSEO対策とかどうでも良かったのでAngularを入れて試したのだが、 そもそもGoogleボットがレンダリングした状態を認識すらしてくれなかった。

インデックスもされないし、コンテンツも取得されない。 流石にそれはサイトとして存在させるメリットすらないのでAngularを使うのをやめた。

Fetch as Google

Search ConsoleにFetch as Googleという機能があり、 クローラに実際にどのようにサイトが見えているかを確認できるのだが、 それを実行したところ「Loading…」のみが表示されていた。

原因

原因は不明。 ただ、公開直後はFetch as Googleでちゃんとレンダリングされていた。 途中でAngularのバージョンをあげたのでそのあたりが原因かもしれない。

原因の特定

今回は面倒だったので特定せずにCakePHPのみにした。

JavaScriptを使い、tryでエラーをcatchできるので、それで試してみると良い、とどこかに書かれていた。 結局クローラアクセスの場合だけ出るエラーなどがJavaScript上にある場合、こうなってしまうのかもしれない。 JavaScriptフレームワークでサイトを構築するときに気をつけなければならない点のようだ。

werckerでCakePHP3のカバレッジ

CakePHP3でwerckerのCIを設定している。 カバレッジも表示したいのだが、BitBucketのプライベートリポジトリは無料でカバレッジを表示できるサービスが多分無い。

そのため別途解決策として、 出力したカバレッジhtmlを他の適当にレンタルしているサーバーなどにscpで転送することでいつでも見られるようにしてみた。

先日作成したDockerイメージを少し改良してカバレッジと転送したものを作成した。

https://hub.docker.com/r/dala00/wercker-cakephp3-coverage/

scpで転送するのでssh鍵をwerckerの環境変数に設定する必要がある。 また、pipelineの設定もする必要があるがそれらは下記のページが詳しい。

werckerを使ってBitbucketからさくらのVPSに自動デプロイ - funxion

これでビルドが実行するとサーバー上にhtmlがアップされている状態となり、 ブックマークしておけばいつでも見られる状態となる。 (単なるhtmlなので自分の場合IP制限をかけている)

さくらの共用レンタルで.php.htmlが表示できない

さくらの共用レンタルだと、phpunitで出力したカバレッジファイルなどの.php.htmlという拡張子のファイルにアクセスすると

Premature end of script headers

というエラーが出る。

必要なフォルダ内の.htaccess

RemoveHandler .php

とすると正しく表示できるようになる。