ひよこメモ

備忘ブログ Ruby, Rails, AWS, html5, css3, javascript, vim,

UnityでBluetooth LE通信を実現したい1

UnityでBluetooth LE通信を実現したい。
Unity用にjavaプラグインの自作は避けられないらしい。
まずはAndroid Studio(Java)を使う。(javaほとんど分からないけど)
Android Studioのバージョンが2と古かったので更新。
Android Studio バージョン3.1.1(2018年4月20日現在最新)
Android Studio 2.0の設定は~/Library/Preferences/AndroidStudio2.0に残るらしい。
JavaSE Development Kit(javaを使うためのパッケージ)インストールが必要。
1.8が最新だがMacは1.6以前が安定しているらしい。
「HAXM installationが変更を加えようとしています。」と聞かれた。
Intel Hardware Accelerated Execution Manager (Intel® HAXM) Android用エミュレータを高速化するものらしい。ハクスム・ハクセム。
インストールが終わったら「Start a Android Studio project」
include Kotlin support?Kotlin:開発工数が削減できて安全でInperoperability(相互運用性)が高い。JetBrains(IntelliJ IDEAを開発する会社)が後ろ盾。AndroidStudio用のプラグインをKotlinが用意してくれてるらしい。
Gradleについて理解が足りない。Gradleはビルドシステム。必要なモジュールをまとめて記述しておける感じ?AndroidSDKのインストールやビルドシステムantのセットアップを自動でやってくれる。Gradle自身のダウンロードもやってくれる。GUIで操作可能。Rubyで使ったMakefileのようなもの。依存関係の管理。taskという仕事のかたまりを作り、それを実行させる。他の人が作った便利なタスクを借りて実行が基本らしい。
(ToolBarのAVD Managerというボタンを押すとエミュレータを実行できる。)
Activity選択は「Empty Activity」を選択。
app>java>com.company.test.myapplication>MainActivity(FinderだとMainActivity.java)選択

package com.company.test.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

エミュレータを起動した状態で再生ボタンを押すと、無事HelloWorldが表示された。
Hello World自体はapp>java>res(Resource)>layout>activity_main.xmlに保存されているText。

Android Studio下部にあるConsoleにて「.gradlew -1 hello」の実行
その前にGradle Scripts>build.gradleに

task hello {
    doLast {
        println 'こんにちは'
    }
}

を追記。
するとConsole実行時にprintlnが表示される。
.gradlewとは?MyApplicationフォルダ直下にあった。gradleをgradleをインストールすることなしに実行できる。

Bluetooth LE通信までの道のりは遠い。
Kotlinが便利そう。
ひとまず最新版AndroidStudioインストールとエミュレータでのHelloworld実行。
ビルドシステムGradle(consoleではgradlew)

golang ユニークなID生成 xid

xid(https://github.com/rs/xid
Go製のUnique ID Generator「xid」について - Qiita
スケールする:対象を拡大・縮小する
UUID:Universally Unique Identifier。ユニークなID。128ビット(16Byte)。16進法が多い。UUIDがかぶる確率は230京回らしい。(https://qiita.com/ta_ta_ta_miya/items/1f8f71db3c1bf2dfb7ea)
Snowflake:Twitter社が作ったユニークなID生成のWebサービス。
全体で12Byte。UUID>xid>Snowflake。20文字のlower caseの英数字。

package main

import (
	"fmt"

	"github.com/rs/xid"
)

func main() {
	// idを生成
	guid := xid.New() //:=は何?
	fmt.Println(guid.String())

	// binaryの各partの情報
	machine := guid.Machine()
	pid := guid.Pid()
	time := guid.Time()
	counter := guid.Counter()
	fmt.Printf("machine: %v, pid: %v, time: %v, counter: %v\n", machine, pid, time, counter)
}

xidtest.go

$ go run xidtest.go
ba0h6ajjcl7tb9gdr440
machine: [115 101 79], pid: 54694, time: 2018-02-12 13:08:10 +0900 JST, counter: 907528

このような結果になる。

GCPコマンド一覧

ログイン
gcloud init
gcloud auth login

接続
gcloud compute --project "プロジェクト名" ssh --zone "ゾーン名" "ユーザー名"

確認
インスタンスの確認
gcloud compute instances list
アカウントの確認
gcloud auth list
設定の確認
gcloud config list
configurationファイルの場所 ~/.config/gcloud/configurations/
configurationファイルの切り替え
gcloud config configurations activate config名


SDKの更新
gcloud components update

GCPのキーについて

・GCPプロジェクトの下にインスタンスがある。

Compute Engine >> VMインスタンス >> 編集でインスタンスの編集 >> SSH認証鍵欄に公開鍵を登録する。(ssh-rsaからはじまる一行の暗号)

秘密鍵と公開鍵のぱっと見の見分け方
秘密鍵
拡張子なし。
公開鍵
公開鍵はpublic keyなので、拡張子は「.pub」となる。

PHP print_r

print_r("文字列" [,bool 返り値オプション]);

わかりやすい形式で変数の値に関する情報を表示する。
返り値オプションは書いても書かなくても大丈夫。trueなら画面に表示せず変数に格納する。falseなら画面に表示し変数には格納しない。デフォルトはfalse。

$test = print_r("aaa", true);
var_dump($test);
結果
string(3) "aaa"

preg_match

preg_match
正規表現によるマッチング。特定の文字列を含むかチェック。マッチしたら1を返す。マッチしなかったら0を返す。
引数は(パターン, 対象)
if (pregmatch('/ab/', 'abcde')) {
文字列あり
}

if (!pregmatch('/ab/', 'abcde')) {
文字列なし
}

正規表現を使わない場合はstrposかstrstr。
strpos:該当する文字列が無ければfalseを返す。見つかったら位置を数値で返す。
if (strpos('abcde', 'bc') !== false) {
//文字列あり
}

if(strpos('abcde', 'bc') === false) {
//文字列なし
}

strstr

XcodeのSize Inspector設定

View

Show
Frame Rectangle(フレーム矩形):影を含むオブジェクトの矩形サイズが「Width」と「Height」に表示される。ドロップシャドウ込み。
Alignment Rectangle(比率矩形):オブジェクト自体の矩形サイズが「Width」と「Height」に表示される。ドロップシャドウ抜き。
矩形・・・正方形や長方形
UIObjectに影を持つものはほとんど無いのでデフォルトのFrame Rectangleで問題ない。
X:左端を支点とした左右の位置。
Y:上部を支点とした上下の位置。
Width:オブジェクトの幅。
Height:オブジェクトの高さ。

Arrange Position View

Center Horizontally In Container:オブジェクトの位置を左右の中心に置く。
Center Vertically In Container:オブジェクトの位置を上下の中心に置く。
Fill Container Horizontally:オブジェクトを左右いっぱいに引き延ばす。
Fill Container Vertically:オブジェクトを上下いっぱいに引き延ばす。

Autoresizing

Layout Margins

Default:
Explicit(明示的な):

Preserve Superview Margins(Superviewのマージンを保持):
Superviewは外枠いっぱいを囲ったView。
Leading Space to Suverview:Superviewから右に伸びるConstraint
Trailling Space to:Superview:Superviewから左に伸びるConstraint
SubviewはSuperviewの中のオブジェクト。
Marginsはオブジェクトを配置する時に使う幅。
Follow Readable Width:

Constraint(制約):右下にあるAdd New Constraintから追加可能。
Constraintを追加すると、Size Inspectorの様子が変わる。