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 implode
$array = array("おはよう", "こんにちは", "こんばんは");
var_dump(implode(" / ", $array));
string(48) "おはよう / こんにちは / こんばんは"
配列を文字列で連結する。1つにする。
PHP $_SERVER['HTTP_USER_AGENT']
$_SERVER['HTTP_USER_AGENT']
ブラウザの種類やOSバージョンなどを表示する。
iPhoneやAndroidがわかる。
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
久しぶりにphpを使うためにハマったところ。
久しぶりにphpを使うためにハマったところ。
/etc/apache2/httpd.confのDocumentRootを編集
DocumentRootを編集したら、直下の
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の様子が変わる。
つくるアプリ
GCP
gRPC
今ほどgRPCが必要とされている時代はない - AltPlus Tech Blog
golang
Unity C#
Application LoaderでERROR ITMS-90161: "Invalid Provisioning Profile. みたいなエラーが出た
ERROR ITMS-90161: "Invalid Provisioning Profile. 的なエラーが出た。
このqiitaで解決
qiita.com
解決したのはSigningのAutomatically manage signingのチェックを外したためかも?