ひつまぶし

主にメモと雑記と小ネタ。勉強会のレポートとかも時々。

Go言語をsublimetext2で実行するためにしたこと。

目的

windows上SublimeText2を使用してGo言語を動かす。

SublimeTextのプラグインのインストール

PackageContollerのInstall Packageで「Go Sublime」をインストール。
PackageContollerはCtrl+Shift+pで開きます。

windows上でGo言語が動くように

golang.jp 参考サイト様

Downloads - The Go Programming Language

自分の環境に応じたものをDLしてください。
僕はwindows7の64bit版だったので「go1.4.2.windows-amd64.zip」を選択しました。

適当な場所に解凍します。

Go言語のインストール - golang.jp

Zip圧縮ファイル版
インストールしたいディレクトリ(c:\Goを推奨)にzipファイルを解凍します。

c:\Go以外のディレクトリにインストールしたときは、環境変数GOROOTにインストールしたパスを設定する必要があります。

Go言語のルートディレクトリ下のbinサブディレクトリ(例: c:\Go\bin)を環境変数PATHに設定してください。

とあるので、Cドライブ直下に言われるがままに移動。 そして環境変数

GOROOT C:\Go;
PATH   $GOROOT/bin;

の二つを追加。あとGitもよく使用するので、なければ追加しておきましょう。

PATH   C:\Program Files (x86)\Git\bin;

実行してみる

hello_world.go

package main

import "fmt"

func main() {
    fmt.Printf("hello world\n")
}

Ctrl+9を押すとGoを実行するためのコマンドラインに移るのでそこで

go run hello_world.go

と打つと先程作ったhello worldが実行されました!

Unityの入力イベントをフックしたい(願望)

UIの自動テストという魅力的な言葉につられ、ホイホイ仕事を請け負ってしまったので調べながら、書きながらやっていきます。

Java

検証1

MotionEvent | Android Developers

MotionEventというのを使えばできそうな雰囲気。

   /**
    * 入力イベントの実行
    *
    */
    public static void Invoke(final int x, final int y) {
        // アクティビティの取得
        final Activity activity = UnityPlayer.currentActivity;

        final long downTime   = SystemClock.uptimeMillis();
        final long eventTime  = SystemClock.uptimeMillis() + 100;

        // 接触時のイベント発行
        MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);

        // イベントを突っ込む
        activity.dispatchTouchEvent(event);

        // 離れた時のイベント発行
        event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0);

        // イベントを突っ込む
        activity.dispatchTouchEvent(event);
    }

ダメでした。 そもそもUnityPlayer.currentActivityで取得できるActivityのonTouchEventは見てない模様。 そりゃそうかーと思いつつ、もう少し調べてみる。

検証2

UnityPlayerNativeActivityのUnityPlayerで入力制御をしてる雰囲気なので、次はこのあたりを攻めてみます。

UnityPlayerNativeActivityを継承している場合

public class UnityPlayerNativeActivity extends NativeActivity
{
    protected UnityPlayer mUnityPlayer;

    //中略//
}

protectedで宣言されているUnityPlayerが触れるので、

public class InputEventEmitter extends UnityPlayerNativeActivity {
    // Unity側から呼べるようにstaticで。
    private static UnityPlayer mPlayer = null;

    @Override public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // 参照を保持
        mPlayer = mUnityPlayer;
    }
    @Override protected void onDestroy ()
    {
        super.onDestroy();
        // 参照を破棄
        mPlayer = null;
    }
    /**
    * 入力イベントの実行
    *
    */
    public static void Invoke(final int x, final int y) {
        final long downTime   = SystemClock.uptimeMillis();
        final long eventTime  = SystemClock.uptimeMillis() + 100;

        // 接触時のイベント発行
        MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);

        // イベントを突っ込む
        mUnityPlayer.dispatchTouchEvent(event);

        // 離れた時のイベント発行
        event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0);

        // イベントを突っ込む
        mUnityPlayer.dispatchTouchEvent(event);
    }
}

こんなことをしてみました。 ダメでした。

結論

アクティビティを継承する形での入力イベントの発生は難しそう。 iOS編はまた今度まとめて書きます。。。

アプリの広告収入についてメモ。

Unityではじめるプロモーション・マネタイズ UnityAds導入のススメ

もしコーゲンシティ在住の女子高生がUnity製アプリのマネタイズをすることになったら

Unity Ads

Node.js vs Play Framework (with Japanese subtitles)

Node.jsとPlay Frameworkっていうフレームワーク(Slaca)の比較。

スライド内でいい点悪い点上げてて、Node.jsはここがだめだったんだなぁ…とか、あーあるあるって気持ちになったのでメモ。

node.jsでAESを使用して暗号化した時に出たエラー

 

 

TypeError: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
at Decipheriv.Cipher.final (crypto.js:292:27)
at /home/hoge/app/game/node_modules/network/app_data_stream.js:38:29
at fn (/home/hoge/app/node_modules/async/lib/async.js:579:34)
at Object._onImmediate (/home/hoge/app/node_modules/async/lib/async.js:495:34)
at processImmediate [as _immediateCallback] (timers.js:336:15)

 

 

nodejs AES encrypt and decrypt

node.js - nodejs crypt cipher aes256 max data size - Stack Overflow

 

エンコードしようとしたデータサイズが256ビット超えた?ぽいエラー。

システムの根っこの方なのでどうしたもんか…。

aws 調べた事とか

awsのコマンド(主にs3関連)について、仕事で使ったので改めて書いてみた。

 
コマンド
aws [options] <command> <subcommand> [parameters]
 
リファレンス

aws — AWS CLI 1.7.4 documentation

公式のリファレンス。英語力足りないけど見るようにしたい。

 

参考にしたとこ。


[JAWS-UG CLI] S3:#1 ハイレベルS3コマンドを使ってみる (バケットの作成から静的Webホスティング、削除まで) - Qiita

 

s3コマンド一覧

ローカルとs3の操作

  • cp
  • mv
  • rm

フォルダ操作系

  • sync
  • mb
  • rb
  • ls
 
今回使って嵌ったとこ。

aws s3 sync ${LOCAL} s3://${BUCKET}

なんてことはないただの同期させるだけのコマンド。

 

cronで特定の時間にファイルをアップするような仕組みを作ったものの、誤作動してファイルが巻き戻ってしまった!!!

syncはあくまで同期コマンドなので、ローカルのファイルと比較してタイムスタンプが異なる場合は意図してないものがアップされる!!!(当たり前