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」を選択しました。
適当な場所に解凍します。
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編はまた今度まとめて書きます。。。
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はあくまで同期コマンドなので、ローカルのファイルと比較してタイムスタンプが異なる場合は意図してないものがアップされる!!!(当たり前