u-ryo's blog

various information for coding...

Kotlin KOTOHAJIME

| Comments

Kotlin事始め

最初、title間違えました。 タイプミスです。 Ergodox EZ(キー配列をカスタマイズ出来るキーボード)が必要かもしれません...

Android開発を、というかIoTに乗ってSmart Glass(Vuzix M100)の アプリ開発を任命付けれられています。 それはそれでありがたいのですが、 今更ながらAndroid開発を学んでいます。 素のAndroid Javaを使う、というのはあまりにもイケてなさそうなので、 いちいちon何々なんてやってられませんよ、ということで、 Kotlinを使ってイマドキのReactive Programmingを、 と思っています。 Kotlinやってると、Groovyでもいいんじゃないの? と思ってしまうのですが、 殊Androidについては、同梱libが大きくなってしまうなど、 やはり後発の強みもあってKotlinのようです。 ただ、Android開発者がJava loveだそうで、 今後のJava8の取り込みようによっては、 Javaだけでも行けるのでは? という気も少しします。 しかしそれは普及率を考えるとまだまだ遠いので、 今はやはりKotlinかと。

しっかし、Android開発って結構めんどいんですね。 IDEがないと開発できないって、 古いtypeの人間としてはそこから苦痛なんですが...

最初は、森洋之,基本からしっかり身につくAndroidアプリ開発入門 Android Studio 2.x対応 プロが本気で教えるアプリ作りの基本「技」 (ヤフー黒帯シリーズ),SBクリエイティブ,2016.7 を間違い直しながら写経することで Android開発を「Hello World」から卒業してから、 長澤太郎,Kotlinスタートブック,リックテレコム,2016.7 を写経しています。 そこでハマったことを。

  1. 実行しても、エラーメッセージを吐かずにemulatorが一瞬立ち上がった後終了 → Run対象をMainActivityTestにしていたから
  2. Dagger2でinjectionするようにしたらprofileImageUrlを取れなくなった → .dagger.ClientModule#provideRetrofit.addConverterFactory(GsonConverterFactory.create(gson))gsonを抜かしてしまっていた
  3. Dagger2でinjectionしたtestでCastがこけてうまく行かない → build.gradletestInstrumentationRunner 'sample.qiitaclient.MockTestRunner'に変更しないとならないのと、RunEdit ConfigurationsAndroid TestsMainActivityTestSpecific instrumentation runner (optional):〜.qiitaclient.MockTestRunner に変更しないとならない

IDEに慣れてないので、fileばっかり見比べてました。downloadしたお手本sampleではDagger2 Testがうまく行くのに、何で自分のはうまく行かないんだろう、ってずっと悩んでました。IDEでのproject settingに問題があったとは。 stackoverflowのTest running failed: Unable to find instrumentation info for: ComponentInfo{} — error trying to test in IntelliJ with Gradleで見付けました。 こんなところに設定があるなんて、知りませんよー。

Let's Encrypt Without Certbot-auto

| Comments

Let's Encrypt、素晴らしいんだけど、 とあるserverで、使っているのがUbuntu 11.04(Natty)、 package systemが何か壊れてて、 依存関係がおかしくて解消できなくて、 というcaseがありました。 基本的にどこを調べても、 Let's Encryptを使うには既存のpackaging systemをbaseにしたものばかりで、 Stackoverflowなんかでも「backportsを使って既存のpackaging依存関係を 修築してから」なんていう話しかなくて。 なんかこう、certobot-autoを使わないで、 っていう話って意外となくて途方に暮れていると、 こんなのがありました。

An ACME Shell script: acme.sh

要は、bashだけでLet's Encryptの証明書を使える、 というもので、 なーんだ最初から全部これでいーじゃん、 という感じです。

wget -O - https://get.acme.sh | shでも行けるというのですが、 何かserver certが違うらしく、--no-check-certificateを付けてもうまく行かず。 幸いgitはあってくれたので、cloneしてcd acme.sh ./acme.sh --installすると、 home直下に.acme.shというdirectoryを掘り、 その下にCSRやLet's Encryptからの証明書を自動で作ってくれる、 更に実行userでcron登録してくれる、 というものなので、実行だけならroot権限不要とはいえ、 証明書filesが一般user home directory以下というのもなんなので、 rootでやった方が良さげです。 というわけで、

1
2
3
4
5
6
7
8
9
10
11
# git clone https://github.com/Neilpang/acme.sh
# cd acme.sh
# ./acme.sh --install
# ./acme.sh --issue -d dev.locationsupporter.info -w /var/lib/tomcat7/webapps/ROOT/
# vi /etc/apache2/sites-enabled/default-ssl
=============================================
SSLCertificateFile /root/.acme.sh/dev.locationsupporter.info.cer
SSLCertificateKeyFile /root/.acme.sh/dev.locationsupporter.info.key
SSLCertificateChainFile /root/.acme.sh/fullchain.cer
=============================================
# crontab -l

これで、pytho2.7もpackage updateも不要だし、 更にお手軽にLet's Encryptを使えるというものでしょう。

Crosswalk

| Comments

Crosswalk という、WebViewを独自に持つことでAndroid間の動作性を統一するlibraryを使ってみました。最近のAPI levelに対応するだけなら、敢えてこんなの使わなくてもいいのかも。

わけあって、Crosswalk sample applicationの一つをcompileしてみました。

how to installは、official pageのまま。

ANDROID_HOMEは、Sdk directoryを指す模様。

それから、android commandを裏で動かすので、そこへのPATHが必要でした。

1
2
$ ANDROID_HOME=/home/u-ryo/Android/Sdk PATH=$PATH:/home/u-ryo/Android/SDK/tools crosswalk-app check android
$ ANDROID_HOME=/home/u-ryo/Android/Sdk PATH=$PATH:/home/u-ryo/Android/SDK/tools crosswalk-pkg -p android client

android commandはGUIを要求するので、Cloud9のconsoleでは動かせませんでした。

Android Video Calling with CrossWalk and PeerJS 見てやってみたんですが、ionic2からはionic browser listというのがなくなって、ionic plugin add cordova-plugin-crosswalk-webviewになったことと、その後ionic platform add androidすると、

1
2
3
4
5
6
Installing "cordova-plugin-crosswalk-webview" for android


        After much discussion and analysis of the market, we have decided to discontinue support for Android 4.0 (ICS) in Crosswalk starting with version 20.

        So the minSdkVersion of Cordova project is configured to 16 by default.

と言われてしまいました...

動かしたかったtargetは、Android 4.0.4なので、Crosswalkダメですね。 実際、「CPU Mismatch」と言われて、x86のものでもarmのでも動きませんでした。 あうー。

Local IP With Hostname Without an Inner DNS (Wildcard DNS)

| Comments

内部DNS建てなくても、hostname付けられるんだって。凄い。

1
2
$ host some-project.127.0.0.1.xip.io
some-project.127.0.0.1.xip.io has address 127.0.0.1

ローカルDNSを立てずにホスト名をIPアドレスに解決する超絶簡単な方法

nip.io でも全く同じことが出来るようです。

1
2
$ host some-project.192.168.33.176.nip.io
some-project.192.168.33.176.nip.io has address 192.168.33.176

更に更に、sslip.ioでは正式なserver certも用意出来ちゃう、なんていう素晴らしいとこだった、ようですが、今はもうダメポです。自分でやるしかなさそうです。とはいっても、wildcard certificationはLet's Encryptでは扱ってないので、やるならお金かかっちゃいますかね...

Trigger as 3 Times Service Down in a Row on Zabbix

| Comments

Zabbixで「3回連続してservice downを観測したらalert、 且つ1回service upを観測したら復帰」とかって、 実は結構面倒なんですね。

cf.トリガーの条件式における記述方法について

1
({TRIGGER.VALUE}=0&{host名:http.max(#3)}=0)|({TRIGGER.VALUE}=1&{host名:http.last(0)}=0)

→何か騙された感じです。色々試すと、単にmax(#3)だけで良さげですよ。

1
2
3
{host名:http.max(#3)}=0
or
{host名:http.max(#3)}=0|{host名:https.max(#3)}=0

↑これだけで、「3回連続してservice downを観測したらalert、 且つ1回service upを観測したら復帰」を実現出来ました。