インターネットが止まると
Android Studioでの開発も止まる。
主にGradleのbuildのResolve class dependencies
あたりで、外部ライブラリの取得が出来なくなって止まる。
そういう日はお休みでいいと思います。
他のアプリと連携したい
BroadcastとBroadcastreceiverとばかり思っていましたが、startActivityでもいけるらしいし、色々あるみたいです。
Retrofitがタイムアウト
関連しそうなもの
[Google App Engline for Java]SocketTimeoutExceptionの原因 - PSI Labs
https://github.com/square/retrofit/issues/641#issuecomment-60674680
画像アップロートしようとしたら下記のようなエラーで度々止まってひよってる。
それとも、クライアント側で送る前に容量制限するか、画像を縮小かけた方が良いのかな。
メールクライアントとかではよく見かけるけれど...。
1-12 23:36:06.779 20709-22097/com.example.woshidan.localbroadcastreceivertest D/Retrofit: java.net.SocketTimeoutException: timeout at okio.Okio$3.newTimeoutException(Okio.java:207) at okio.AsyncTimeout.exit(AsyncTimeout.java:261) at okio.AsyncTimeout$1.write(AsyncTimeout.java:158) at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) at okio.RealBufferedSink.write(RealBufferedSink.java:46) at com.squareup.okhttp.internal.http.HttpConnection$FixedLengthSink.write(HttpConnection.java:302) at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) at okio.RealBufferedSink$1.write(RealBufferedSink.java:198) at java.io.OutputStream.write(OutputStream.java:82) at retrofit.mime.TypedByteArray.writeTo(TypedByteArray.java:66) at retrofit.client.OkClient$1.writeTo(OkClient.java:88) at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:887) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:749) at com.squareup.okhttp.Call.getResponse(Call.java:268) at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224) at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195) at com.squareup.okhttp.Call.execute(Call.java:79) at retrofit.client.OkClient.execute(OkClient.java:53) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265) at retrofit.RxSupport$2.run(RxSupport.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at retrofit.Platform$Android$2$1.run(Platform.java:142) at java.lang.Thread.run(Thread.java:818) Caused by: java.net.SocketException: Socket is closed at com.android.org.conscrypt.OpenSSLSocketImpl.checkOpen(OpenSSLSocketImpl.java:230) at com.android.org.conscrypt.OpenSSLSocketImpl.access$000(OpenSSLSocketImpl.java:57) at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:725) at okio.Okio$1.write(Okio.java:80) at okio.AsyncTimeout$1.write(AsyncTimeout.java:155) at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) at okio.RealBufferedSink.write(RealBufferedSink.java:46) at com.squareup.okhttp.internal.http.HttpConnection$FixedLengthSink.write(HttpConnection.java:302) at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) at okio.RealBufferedSink$1.write(RealBufferedSink.java:198) at java.io.OutputStream.write(OutputStream.java:82) at retrofit.mime.TypedByteArray.writeTo(TypedByteArray.java:66) at retrofit.client.OkClient$1.writeTo(OkClient.java:88) at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:887) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:749) at com.squareup.okhttp.Call.getResponse(Call.java:268) at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224) at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195) at com.squareup.okhttp.Call.execute(Call.java:79) at retrofit.client.OkClient.execute(OkClient.java:53) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265) at retrofit.RxSupport$2.run(RxSupport.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at retrofit.Platform$Android$2$1.run(Platform.java:142) at java.lang.Thread.run(Thread.java:818)
スクロールしないRecyclerView
べんりぃ。
package com.example.woshidan.layouttokkun; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.MotionEvent; /** * Created by woshidan on 2016/01/12. */ // の下の方 public class NoScrollRecycler extends RecyclerView { public NoScrollRecycler(Context context){ super(context); } public NoScrollRecycler(Context context, AttributeSet attrs){ super(context, attrs); } public NoScrollRecycler(Context context, AttributeSet attrs, int style){ super(context, attrs, style); } @Override public boolean dispatchTouchEvent(MotionEvent ev){ //Ignore scroll events. if(ev.getAction() == MotionEvent.ACTION_MOVE) return true; //Dispatch event for non-scroll actions, namely clicks! return super.dispatchTouchEvent(ev); } }
Amazonが半導体産業にくるらしい
ロボットやCPUのくだりはよくわかんなくて、下のも読んだところ、個人的にはデータセンター用のルーティングとかの通信アルゴリズム改善と、スイッチング周りの回路の設計/開発のような印象を受けました。
CPUなどに使う電子系の素子*1と光系の素子*2の話が一緒くたになっていて分かり難いです。*3
上の記事より下の記事の方が個人的にちゃんとしてる印象。というか、元々ルータ等に使う光スイッチの研究をする研究室にいた身としては、いよいよ論文のIntroなどに書いてたのが本当の世界になるんだ、という感じで感慨深いです。
そして一アプリケーションエンジニアとしてですが、IoTだからこれという動きを知っているからどうこうというより、 Amazonが今後ストレージ関係の企業として幅を利かせる予定満々だから、 サーバ周りを扱うつもりなら、やっぱりちゃんと一度AWS触った方がよさそうよ、というくらいの心づもりしか無いです。
どれだけ幅を利かす企業がすごいことをやったとしても、 それを現場に合わせて、価値を届けるアプリケーションエンジニアとしてやることは、 そう変わらないし、強い覚悟を持って取り組む覚悟が無ければ、ポジションはそう変えられないと思うので。
ただ、あんまり上の方の記事が意味分かんないから、インフラ屋さんは、通信関係/CPUなど目的別に出てくる素子の名前と、その材料の名前とかを覚えておくと、 ニュース見るより多めのことが分かるかもしれない、と思いました。。
この動きを見て、我々も時代はIoTというのは、車の自動運転の開発のニュースが流れてきたから、 人工知能だ〜と言ってるくらいの流行でノリで呟いてみた、くらいの意味だと思います。
さーて、頑張るか...。
分析をする前の話
0と1と10と100と1000を足して5で割るみたいな平均値出して分析しました案件に遭遇してなんだかなってなったので、ひっそりとメモ。
自分はただのWebエンジニアでありデータサイエンティストとかそういうのじゃなくて、Web系のエンジニアが仕事の片手間にどうしても決まらんから、ちょっと数値試しに取ってみようぜ、みたいな状況で思っている話です。
なるべく専門用語とか色々使わないように、ぐだぐだ書いてたんですけど、、
- 生データを眺めて異常値が無いか確認しつつ、散布図書いて値の分布を見ることを最初にやる
- 散布図やヒストグラム等、その値の傾向がつたわりやすいグラフの種類を探す。グラフは実験結果の顔です
- どこかのテレビみたいな誇張をしろという話ではない
- 複雑な分析関数をかませたり、他の人に相談するのはそこから
- ただし、業界とかにもよるのですが、デフォルトでかける解析用関数とかがあるのなら、生データとその関数の結果値、みたいに整理した方が通じやすい
- ここでは、取れたデータはこうで、こういう風な傾向が見えます、というのを一言で言える、あるだけそういってくれるグラフなどを作ることを目標に
- 何がどうあってもそんな単純な分析ではわからないですよ~的な話はデータサイエンティストかその分野の専門家に任せること
- 分析の素人がとりあえず仮説を検証したいときには、単純な理屈と単純な値を組み合わせたほうが聞く方も理解しやすい
- 散布図やヒストグラム等、その値の傾向がつたわりやすいグラフの種類を探す。グラフは実験結果の顔です
- 分析をやる目的とそのために測定する数値と、その数値が変化する要因をまとめておく
- 取る理由の分かっていない数値から、後付けで取る理由を探さない
- 理由が見つからない分析は現実逃避の可能性がある
- とっても意味の無い値を取るための実装に時間をかけるより、目的を考えるのに時間をかけた方がよい
- 分析はリソースの配分を調整したりして全体のスピードアップのためにやる。分析のために時間をかけて全体の進みを止めない
- 取る理由の分かっていない数値から、後付けで取る理由を探さない
- 事前に測定値の取りうる値について調べたり、取る方法を調べておく
- 事前に取っているデータがあれば、その値を基準値として調べておくとよい
- また、事前データの中に予想している兆候が見られなければ分析に使う仮説や指標を見直すことも視野に入れて
- 実は、これ新しく分析用に数値やログを取るコードを仕込む前提で書いていたんですが、ここだけでも分析としては十分な可能性もあるので、時間をかけてよいと思います
- 取る方法は調査や実装では不十分で、本番測定前にテスト測定として、測定項目の過不足や実際に取れた値が事前に出した予測値からずれすぎていないかを確認する期間やテスト環境での測定を行えるとよい
- あれこれ時間かけて計測したつもりで、できていないが一番怖い。その期間のユーザーの動き等は一期一会。
つまり、1行で書くと夏休みの自由研究レベルのことはちゃんとやろうず、という話でした。
あと、こういうのディレクターの方が明るいことも多いので*1、仮説とかの段階で詰まったら相談すればいいと思います。
*1:数値に弱いとしても、プロダクトで起こる出来事やユーザーの流れ等について詳しい
Android調べてて出てきた固有名詞
知らない単語が出てきたらその都度ちゃんと調べましょう...(scrimとfull bleedがよくわかんなくて結構時間を無駄にした...)
- multiplier
1)「乗数」.乗算の因子の一つで,被乗数に掛ける因数のこと.
- scrim
スクリム 《目の粗い薄手の綿布[麻布]; 家具の裏張り・カーテン用など》.
- sibling
兄弟
- full bleed
日本語でいうと余白無し
- innate
生来の,生得の,天賦の,先天的な