技術ネタ の最近の記事

対象の製品はこちら。

超小型USBシリアル変換モジュール

これを、

このArduino Pro Mini互換機(AE-ATMEGA328-MINI)で使うおうという算段。

本当はこちら

(FT-232RQ)を買おうと思っていたのだが品切れでまぁ隣にあった安いやつでもいけるかなと思って。

結論から言うと

そのままではうまくいかない。

詳しくはこのあたりを。

超小型USBシリアル変換モジュールをArduinoとして使う方法 (https://b.eax.jp/eh/arduino/13744/)

DTRリセットをモジュールに返さないといけないようなのだがこのモジュールではDTRを受け取れない。RTSを引き抜いてくるという裏技が書かれてあるがそれもちょっと...と思い他を探すとこれ。

Arduino Pro Mini 互換 起動メモ (http://www.greysound.com/2014/05/07/arduino-pro-mini-%E4%BA%92%E6%8F%9B-%E8%B5%B7%E5%8B%95%E3%83%A1%E3%83%A2/)

書き込み中にArduino側のリセットボタンを押せばいける、と。

結論としては

うまくいった。

リセットのタイミングが難しいとあるが、Arduino IDEの設定で書込の詳細ログを表示するようにして

のあたりのタイミングでArduinoをリセットすればすんなり書き込めます。

検証環境

Arduino IDE 1.6.7AE-ATMEGA328-MINI
AE-FT234X

どうも。

保存用RITZを開封するか悩んでいます。 ハシモトです。

また、こちらなんですが、Elixirの特集があったんで読みたくて買ったわけなんですね。で、まぁElixirの特集もそれなりに面白く、またMQTTとかの特集も結構良かったんですが、他の特集で「モバイル開発最前線」というのがあって、これはAndroidの開発環境回りのお話だったので、チラッとやってみるかと思ったんですが、色々手こずったのでこちらにログを。 (ちなみにAndroidは出たばかりの頃にチラッとやっただけでほぼ初心者です)

サンプルアプリケーション

https://github.com/yanayanalte/SampleAndroid まず記事で紹介されているサンプルアプリケーションはこちらです。

おもむろに git clone してコンパイルを試みますが

git clone git@github.com:yanayanalte/SampleAndroid.git
cd SampleAndroid
./gradlew assembleDebug

:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72211Library
:app:prepareComAndroidSupportSupportV42211Library
:app:prepareComCrashlyticsSdkAndroidAnswers122Library
:app:prepareComCrashlyticsSdkAndroidBeta112Library
:app:prepareComCrashlyticsSdkAndroidCrashlytics232Library
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore232Library
:app:prepareIoFabricSdkAndroidFabric133Library
:app:prepareDebugDependencies
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugBuildConfig
[Fatal Error] :22:27: 要素タイプ"android:value"に関連付けられている属性"{1}"には、開始引用符が必要です。

FAILURE: Build failed with an exception.

* What went wrong:
Cannot read packageName from path/to/SampleAndroid/app/src/main/AndroidManifest.xml

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 16.873 secs

あえなく失敗します。 どうやらAndroidManifest.xmlのandroid:valueがイカンとのことなので調べますと、fabricのAPI KEYの設定のようです。

Fabric

で、Fabric。Twitterが開発しているモバイルの開発プラットフォームというかクラッシュレポートとかをよろしくやってくれるようですが、こいつのAPI KEYがイカンと。

https://github.com/yanayanalte/SampleAndroid/blob/master/app/src/main/AndroidManifest.xml#L22

「XXXXXXXXXXX」という設定になっています。 fabric自体がよくわからないので、色々ググって、まずどうにかしてAPI KEYを手に入れる事に専念するわけですが、fabricにサインアップしても設定画面などは一向に出てこない。 設定画面から取れるという情報もあるが、そもそも以下の画面しか出てこない。

Gyazo

ので、取り敢えずAndroid Studioにプラグインを突っ込む事にする。 ここでsafariとかでやってるとプラグインのzipを勝手に解凍してしまうので注意。 基本的にはfabricのページの手順に沿ってインストール。 するとAndroidのアイコンの横にfabricのアイコンが現れる。

Gyazo

ので、これをクリックしてサインインして進める。

そして、サンプルアプリケーションをAndroid Studioで開いた状態からこのプラグインを起動させて進めていくと、以下のようにインストールするkitを選べとなる。

Gyazo

CrashlyticのUpdateをクリックすると、

Gyazo

こんな感じでAPI KEYを変更するぜ、と言われるのでApplyボタン(キャプチャでは見切れてますが)を押すとAndroidManifest.xmlが書き換わり、API KEYが取得できる。

$ vi ./app/src/main/AndroidManifest.xml
$ ./gradlew assembleDebug
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72211Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42211Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidAnswers122Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidBeta112Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlytics232Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore232Library UP-TO-DATE
:app:prepareIoFabricSdkAndroidFabric133Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest
Warning: /path/to/SampleAndroid/app/src/main/AndroidManifest.xml:25:1 Warning:
  Element uses-permission#android.permission.INTERNET at AndroidManifest.xml:25:1 duplicated with element declared at     AndroidManifest.xml:5:5
/path/to/SampleAndroid/app/src/main/AndroidManifest.xml:25:1 Warning:
  Element uses-permission#android.permission.INTERNET at AndroidManifest.xml:25:1 duplicated with element declared at     AndroidManifest.xml:5:5
:app:fabricGenerateResourcesDebug
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJava
注意:一部の入力ファイルは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
:app:preDexDebug
:app:dexDebug
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
:app:zipalignDebug
:app:assembleDebug

BUILD SUCCESSFUL

Total time: 38.731 secs

めでたくビルド成功。

だがしかし

この企画はgithubにpushした上でのcircleCIでのビルドを前提としているはず。 API KEYをハードコーディングした状態でpushして良いはずがなかろう....。

ということで環境変数からうまく読み込む方法を調べる。

http://stackoverflow.com/questions/25700680/crashlytics-found-an-invalid-api-key#answer-25704532

安定のStack Overflow。 build.gradleに

manifestPlaceholders = [name: value]

とすれば

${name}

でAndroidManifest.xmlから変数で読み込める模様。 今々ではFlavorは無視するので、/app/build.gradleのdefaultConfigにこのmanifestPlaceholdersを突っ込みます。

あとはbuild.gradleはそもそもgradleなので、こいつに環境変数から値が渡ればOK。

build.gradleからの環境変数の参照 - horie1024の日記

こちらによれば、

ORG_GRADLE_PROJECT_

がプレフィックスにつく環境変数はbuild.gradleからそのまま読み込める模様。 なので、

$ export ORG_GRADLE_PROJECT_FABRIC_API_KEY="YOUR KEY"
$ vi ./app/build.gradle

defaultConfig {
    ....略....
    manifestPlaceholders = [fabricApiKey: FABRIC_API_KEY]
}

$ vi ./app/src/main/AndroidManifest.xml
<meta-data
    android:name="io.fabric.ApiKey"
    android:value="${fabricApiKey}" />

というような感じにすればOK。 circleCIでも上記のようなORGGRADLEPROJECTFABRICAPI_KEYのような環境変数を充ててやればOK。

それにしてもデベロッパーフレンドリーじゃないサンプルだったな...。

久しぶりに技術ネタでも。

大学院の授業でオレオレプロトコルを作る授業がありまして、作ったは良いけどどこかにサクッとデプロイできないかなー、herokuとか良いんじゃないかなー、いや、でもherokuって基本はHTTPのサービスじゃなかったかな、いや、どうだろう?探してみるか?


という事で、ありました。

Ruppell's Sockets | Heroku Dev Center

好きなsocketプログラミングをherokuにデプロイできるぜ!みたいなaddonのようです。 後述しますが、内部的にはsshポートフォワードで実現してるっぽいです。

heroku addons:create ruppells-sockets

こちらのaddonを乗せて

git submodule add https://bitbucket.org/ruppells/sockets-connect.git lib/sockets-connect

gitのsubmoduke突っ込んで

echo 'socket: ./lib/sockets-connect/rs-conn ./any_start_command' > ./Procfile

Procfileに socket コマンドで ./lib/sockets-connect/rs-conn から起動コマンドをキックさせるように記述します。 コマンドが複雑な場合は1つのシェルスクリプトなんかにまとめておけば問題ありませんね。

git add .; git commit -m "Add awesome configuration"; git push heroku master

あとは適宜git commitして、push

heroku config:get RUPPELLS_SOCKETS_FRONTEND_URI #-> tcp://4950.381b424d-12fa-4fad-b464-9013a482ca7f.sockets.ruppells.io:4950

内部的にはsshのポートフォワードで実現しているようなので、上記のようにしてendpointを取得します。

バックエンドのポートはデフォルトだと1337番が勝手に振られて、通信出来ないとステータスコードでエラーと言われます(heroku logs -tのログで確認できます)。 ですので、バックエンドのポートが決まってる場合は

echo 'socket: ./lib/sockets-connect/rs-conn -b 8080 ./any_start_command' > ./Procfile

みたいにして、ポートを指定します。 ですが、ここは結局バックエンドのポートなので、フロントのsshポートフォワードされた方はなんだかうまく指定出来ません...。調べれば分かるかも。

ではでは。

どうも。

秋風に身を切られる思いです。

去年くらいにちらほら出てきたnodejsでのrails系フレームワークの「sails」。
今後使えるのかどうか、またどのくらいベンチが出るんだろうかと思い、ベンチを取ってみました。

使ったのは下記のrailsとsailsのサンプルアプリケーションをherokuに上げました。

rails_sample / github
rails-sample / heroku

sails-sample / github
sails-sample / heroku

これを、apコマンドにてvps(gmo)から叩きます。各アプリケーション共に、controllerを通した上での静的ページと、10件ほどのデータを読み込んで表示させる動的なページを用意して計測しました。

結果

rails static
-----------------
$ ab -n 10000 -c 1000 http://rails-sample1.herokuapp.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking rails-sample1.herokuapp.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        WEBrick/1.3.1
Server Hostname:        rails-sample1.herokuapp.com
Server Port:            80

Document Path:          /
Document Length:        485 bytes

Concurrency Level:      1000
Time taken for tests:   82.283 seconds
Complete requests:      10000
Failed requests:        5
   (Connect: 0, Receive: 0, Length: 5, Exceptions: 0)
Write errors:           0
Non-2xx responses:      4
Total transferred:      13326011 bytes
HTML transferred:       4849511 bytes
Requests per second:    121.53 [#/sec] (mean)
Time per request:       8228.335 [ms] (mean)
Time per request:       8.228 [ms] (mean, across all concurrent requests)
Transfer rate:          158.16 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      161  174   8.1    174     265
Processing:   319 7201 7033.1   4750   59446
Waiting:        0 7193 7013.9   4749   57805
Total:        482 7375 7034.8   4926   59640

Percentage of the requests served within a certain time (ms)
  50%   4926
  66%   6972
  75%   8933
  80%  10621
  90%  16468
  95%  21636
  98%  30056
  99%  35091
 100%  59640 (longest request)

 sails static
-----------------
$ ab -n 10000 -c 1000 http://sails-sample.herokuapp.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking sails-sample.herokuapp.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Cowboy
Server Hostname:        sails-sample.herokuapp.com
Server Port:            80

Document Path:          /
Document Length:        3402 bytes

Concurrency Level:      1000
Time taken for tests:   41.820 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      38747605 bytes
HTML transferred:       34030206 bytes
Requests per second:    239.12 [#/sec] (mean)
Time per request:       4182.031 [ms] (mean)
Time per request:       4.182 [ms] (mean, across all concurrent requests)
Transfer rate:          904.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      161  174   7.3    174     202
Processing:   191 3755 2167.6   3234   26811
Waiting:      191 3753 2167.5   3232   26811
Total:        353 3929 2167.7   3408   26989

Percentage of the requests served within a certain time (ms)
  50%   3408
  66%   3995
  75%   4392
  80%   4828
  90%   6443
  95%   8117
  98%  10287
  99%  12197
 100%  26989 (longest request)

  rails dynamic
---------------------
$ ab -n 10000 -c 1000 http://rails-sample1.herokuapp.com/users
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking rails-sample1.herokuapp.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        WEBrick/1.3.1
Server Hostname:        rails-sample1.herokuapp.com
Server Port:            80

Document Path:          /users
Document Length:        1063 bytes

Concurrency Level:      1000
Time taken for tests:   113.274 seconds
Complete requests:      10000
Failed requests:        122
   (Connect: 0, Receive: 0, Length: 122, Exceptions: 0)
Write errors:           0
Non-2xx responses:      17
Total transferred:      18898109 bytes
HTML transferred:       10508542 bytes
Requests per second:    88.28 [#/sec] (mean)
Time per request:       11327.374 [ms] (mean)
Time per request:       11.327 [ms] (mean, across all concurrent requests)
Transfer rate:          162.93 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      161  175  11.9    174     492
Processing:   301 10530 10858.2   6178   60166
Waiting:        0 9899 9647.1   5972   59731
Total:        463 10705 10859.6   6364   60342

Percentage of the requests served within a certain time (ms)
  50%   6364
  66%   9713
  75%  13072
  80%  15779
  90%  24772
  95%  34554
  98%  47397
  99%  59697
 100%  60342 (longest request)

  sails dynamic
----------------------------------
$ ab -n 10000 -c 1000 http://sails-sample.herokuapp.com/users
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking sails-sample.herokuapp.com (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Cowboy
Server Hostname:        sails-sample.herokuapp.com
Server Port:            80

Document Path:          /users
Document Length:        4151 bytes

Concurrency Level:      1000
Time taken for tests:   56.927 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      46226812 bytes
HTML transferred:       41510000 bytes
Requests per second:    175.66 [#/sec] (mean)
Time per request:       5692.734 [ms] (mean)
Time per request:       5.693 [ms] (mean, across all concurrent requests)
Transfer rate:          793.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      161  174   7.0    174     204
Processing:  2293 5336 662.6   5411    8014
Waiting:     2292 5335 662.6   5410    8013
Total:       2456 5510 664.5   5584    8209

Percentage of the requests served within a certain time (ms)
  50%   5584
  66%   5687
  75%   5759
  80%   5810
  90%   6091
  95%   6234
  98%   7079
  99%   7591
 100%   8209 (longest request)

といった感じで、

ページアプリケーションRequests per second
静的 rails 121.53
静的 sails 239.12
動的 rails 88.28
動的 sails 175.66

割りと有意な結果が出たような気がします。

もうちょっと他のフレームワークも欲しいですね。

ではでは。

備忘録的に....。

nsinitとか入れようとしてもgithubのリポジトリの状態が良くないのか全然インストール出来ない。ので、試行錯誤した結果、boot2dockerにnsenter入れてdocker-enterをboot2dockerにsshする際にキックするという手で落ち着いた。

util-linuxをインストールしてnsenterを入れる

docker@boot2docker:~$ tce-load -wil util-linux

ローカル側にalias作る

alias dsh="ssh -i ~/.ssh/id_boot2docker -t localhost -p 2022 -l docker 'sudo docker-enter $@'"

あとはこんな感じ

dsh $(docker ps -q | head -1)

疲れた。

1   2   3   4   5   6   7   8   9   10