2016年12月22日木曜日

cygwinで、viを使うときの注意

vi コマンドで、入力モードの際に十字キーがうまく動かず文字入力されてしまう場合は、

ホームに .exrcファイルを作成して

$ vi ~/.exrc
set nocompatible
set backspace=indent,eol,start

あと、シェルコマンドを実行する際に \r がコマンドとして認識される場合は、以下を追記

$ vi ~/.bash_profile
export SHELLOPTS
set -o igncr

2016年12月16日金曜日

Firebaseの最新情報は英語サイトでみる

FirebaseのC++のSDKの情報をみると日本語サイトが version 1.0.0 のものだった。
最新の2.1.0 は、英語サイトにのみ情報がある。

https://firebase.google.com/docs/cpp/setup?hl=en

?hl=en をつけると英語サイトになる。

2016年12月14日水曜日

cocos コマンド Android Studioのプロジェクト をコンパイル

忘れそうなので、androidプロジェクトにオプションで –android-studioをつける。

cocos compile -p android --android-studio 

2016年12月13日火曜日

GAEでPHPからdatastoreを使うときのメモ

基本的には公式サイトをよく読むのが基本だが一部古い情報などがあるので参照する場所に注意する。

ライブラリ情報

日本語化されてるページはなぜかPHPについての記述が抜けてるとこが多いので英語のドキュメントを見たほうがよさそう。

インストール

https://cloud.google.com/datastore/docs/reference/libraries#client-libraries-install-php

リファレンス

https://googlecloudplatform.github.io/google-cloud-php/#/docs/v0.20.0/datastore/datastoreclient

ソースコード

https://github.com/GoogleCloudPlatform/google-cloud-php

※日本語のドキュメントからソースコードは以下にリンクされているが個人的に使いにくかったです。
https://github.com/google/google-api-php-client

2016年12月1日木曜日

Windowsでのシンボリックリンク

すぐに忘れるのでメモ

管理者権限でコマンドプロンプト実行

ディレクトリーをリンクする場合

 mklink /D [リンク先] [リンク元]
 mklink /D C:\link C:\directory

Gitとかでも認識するようにするにはジャンクションにする。

 mklink /j [リンク先] [リンク元]
 mklink /j C:\link C:\directory

2016年11月30日水曜日

cocos2d-x ios の UIWebView を WKWebViewに変更する。

ios10 にアップデートしたあたりから、UIWebViewの挙動がどうもおかしい。
不意に落ちたり、ほかのアニメーション実行中に落ちたりするような
よくわからないエラーが多数発生するようになった。


UIWebViewをどんだけいじってもらちがあかなさそうだったのでWKWebViewに思い切って変えてやろうと思った。
変更箇所は比較的少なくてすぐに変更はできた。 ライブラリーに WebKitを追加して
#
# cocos2d-x-3.13.1
#
# cocos2d-x/cocos/ui/UIWebViewImpl-ios.mm


#include "ui/UIWebViewImpl-ios.h"
#include "renderer/CCRenderer.h"
#include "base/CCDirector.h"
#include "platform/CCGLView.h"
#include "platform/ios/CCEAGLView-ios.h"
#include "platform/CCFileUtils.h"
#include "ui/UIWebView.h"

#import   // 追記


// 100行目あたり
@interface UIWebViewWrapper ()  //変更
@property(nonatomic, retain) WKWebView *uiWebView; //  変更


// 120行目あたり
- (void)dealloc {
    self.uiWebView.navigationDelegate = nil;   // 変更
    self.uiWebView.UIDelegate = nil;           // 変更 
    [self.uiWebView removeFromSuperview];
    self.uiWebView = nil;
    self.jsScheme = nil;
    [super dealloc];
}

- (void)setupWebView {
    if (!self.uiWebView) {
        self.uiWebView = [[[WKWebView alloc] init] autorelease]; //  変更
        self.uiWebView.navigationDelegate = self; //  変更
        self.uiWebView.UIDelegate = self; //  変更

        [self.uiWebView setOpaque:NO];
        [self.uiWebView setBackgroundColor:[UIColor clearColor]];
        
    }
    if (!self.uiWebView.superview) {
        auto view = cocos2d::Director::getInstance()->getOpenGLView();
        auto eaglview = (CCEAGLView *) view->getEAGLView();
        [eaglview addSubview:self.uiWebView];
    }
}


// 220行目あたり
- (void)evaluateJS:(const std::string &)js {
    if (!self.uiWebView) {[self setupWebView];}
//    [self.uiWebView stringByEvaluatingJavaScriptFromString:@(js.c_str())]; // コメントアウト
    
    // 以下を追記 コールバックは省略
    [self.uiWebView evaluateJavaScript:@(js.c_str()) completionHandler:^(NSString *result, NSError *error){
        NSLog(@"Error %@", error);
        NSLog(@"Result %@", result);
    }];
}

- (void)setScalesPageToFit:(const bool)scalesPageToFit {
    if (!self.uiWebView) {[self setupWebView];}
//    self.uiWebView.scalesPageToFit = scalesPageToFit; // WKWebViewでは使わなさそうなのでとりあえずコメントアウト
}

今はこれで動いているがまぁ問題があればそこでまた考えよう。

2016年11月22日火曜日

cocos2d-x pushSceneからのenterSceneしたいので、pushEnterSceneの作成

pushSceneをした後に、enterSceneをすると、scenesStackごと破棄されてしまうので
今いるSceneを移動するように pushEnterSceneを作成した。


※ replaceScene で同じことができるようなのでいらなかった。。。


# CCDirector.cpp

void Director::pushEnterScene(Scene *scene)
{
CCASSERT(scene, "the scene should not null");

// _sendCleanupToScene = false;

#if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
auto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();
if (sEngine)
{
sEngine->retainScriptObject(this, scene);
}
#endif // CC_ENABLE_GC_FOR_NATIVE_OBJECTS
_scenesStack.popBack(); // pushScene にこれを追加しただけ
_scenesStack.pushBack(scene);
_sendCleanupToScene = true;
_nextScene = scene;
}

2016年11月13日日曜日

Bitbucketで、コミット間の差分を確認したい場合


https://bitbucket.org/<OWNER>/<REPO>/branches/compare/<commit-hash>..<commit-hash-older>#diff

ブラウザの操作からは、コミット間の差分表示方法がわかりませんでしたが
直接URLを入力するとできるみたいです。

2016年11月4日金曜日

Lua 例外処理 try-catch

Luaには、直接的な例外処理はないみたいなので
pcallを応用して、try-catch的なものを代替わり案としてみる。

--
-- try-catch関数
--

function try_catch(what)
  local status, result = pcall(what.try)
  if not status then
    what.catch(result)
  end
  return result
end


--
-- 使い方
--
  try_catch{
    try=function()
      -- 何か実行する
    end,
    catch=function(error)
      print("caught error " .. error)
    end
  }

2016年11月2日水曜日

Lua ロングカッコ

[===[文字列]===] 文字列の囲み文字は任意の数のイコールとカッコを使ってあらわされれる。 

[=[文字列]=]
[==[文字列]==]
[===[文字列]===]
[====[文字列]====]
[=====[文字列]=====]
[======[文字列]======]
[=======[文字列]=======]
[========[文字列]=========] 

最初、この文字が出てきたときふざけてるのかと思ったけど ちゃんとしたものでした。
1段開き長括弧、2段開き長括弧とか読むらしい。