oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

AndroidOpenTextbookが大変助かるというお話

Android初心者としてあるあるパターンの事としてはオフィシャルリファレンス
http://developer.android.com/reference/packages.html
を読んでも

  • それをどうやって呼び出すか
  • 中でどんな事すれば良いのか
  • そもそも英語が・・・

とかに良く行き着くわけですね。全体をまだ良くわかっていないから。例えばなんかのクラス使う時にhogeオブジェクト渡せとか書いているけど、これそもそもどこで作るんや?とか。なので一連の流れでどうやれば良いかというのが結構知りたい訳なんです。

で、色々サイト見たり本見たり社内のソース読んだりとかもしたけど、一番見たい「解説されている部分が最小限書かれていて動くプロジェクト」のソースを読みたいけど、本とかブログとかは結構特定部分のソースだけだったりする訳ですよ。まあここは対象としている人がそもそもJavaAndroidある程度分かっている解説とかならまあそうだよね、という感じですが。で、社内のソースはプロダクトのソースなので知りたい事以外の処理がてんこ盛りなので、今の僕だとこんがらがっちゃう訳です。まだ切り分け出来ていないので。

Twitterであー良く分からないービルド通らないー動かないー落ちたーとかワーワーやっていたら

を教えてもらいました。
https://github.com/TechBooster/AndroidOpenTextbook

全てを網羅している訳ではまだ無いけど、今後続々と充実して貰えると大変俺得です。今詰まっていたネットワーク通信(HTTPでGETするだけレベル)解説部分のサンプルソースがプロジェクトごと入っていたので大変助かりました。文章の方も画像もありコードを1行ずつ解説して貰えて細かく解説しているので大変助かりました。Android Studioだとそのままimportするだけでサンプルコードは動きました。
文章を生成するのが今はMacの手法しか書いていないので、まあMacで作ってWindowsで読めば良いんじゃないでしょうか。nodeとかでやっているからLinuxでも生成処理は動くのかな?依存しているライブラリとかまだ分かっていないので適当です。

こちらからは以上です。

【チラ裏】Android学習メモ-4

とりあえず入門書読んでからインターフェイス作ってMySQL操作クラスとRedis操作クラス作ったりしてfor文回して実行したりとかやったので、一旦Androidに戻ってみた。で、Javaの基礎文法の所はまあ・・・って感じになったけど、Android特有の所でやっぱりつまづきまくる。というか、はじめの頃Javaも分からんのに「まあなんとかなるかな?」と思ってよく手を出したな。アホかオレ。とりあえず入門書を一冊読みきってAndroid特有の考えとか用語に馴染みきっていないので、リファレンス本を追加購入しようと思う。オフィシャルのリファレンスだけでは無理。英語も分からんし。細かい所が全く理解できない。なので、また一冊読んでJavaの本をまた読みなおしてもう一度かな。

【チラ裏】Android学習メモ-3

Android学習とか書いておきながらこの3日間くらいはJavaの入門書をずっと読んでいた。今日はとりあえず車クラスとかやっていてもわけわからんので、馴染みのある題材としてMySQLに接続してデータ取ったりぶっ込んだりを書いた。とりあえずmainとそれ以外のクラスを分けて書いたり、コンストラクト書いたりメソッド書いたりインターフェイス書いてみたりをやった。syntax error出まくっては止まって・・なので、そもそもの理解の低さが再確認出来て良かった。明日はRedisとか他のデータストアとの接続・操作クラスを作成してその流れで抽象化やオーバーライドとかをやってみようと思う。

サーバ/インフラエンジニア養成読本「ログ収集〜可視化編」を頂きました!

改めて著者の方々と実際に僕に本を送付する手配をして頂いた@yoshi_kenさん本当にありがとうございます。


社内の他のエンジニアが「本頂きました!^^」とかのツイートをしている*1のを見る度に「ブルジョワが!( ゚д゚)、ペッ」とか思っていたらついに僕も貰える時が来るなんて・・・。もう二度とこんな機会はこなさそうなので、保存版として額に入れておこうかと思いましたが、せっかくなので読んでみました。

特集1「ログ解析から始めるサービス改善」

ここではまず「なぜログ解析をする必要があるのか?」「何のためにそもそもやるの?」という事が分かりやすく書かれているかなと思います。特にログは大規模であれば膨大な量や情報を抱える為、やみくもに「これも取ってみよう」「あれも計測してみよう」という事をやっても結局「そもそもなんでこれ必要なんだっけ?」で終わるパターンもあるので、まずここを読んで自分に必要な事を再認識する事が必要ですね。その中であるケーススタディを用い解析するにはどのようにするのか、という一連の流れが書かれていて分かりやすいと思います。

特集2「ログ収集ミドルウェアfluentd徹底攻略」

ここでは実際にログ収集をするために、fluentdを用いて収集する方法を具体的に解説しています。fluentdはだいぶオフィシャルサイトや個人ブログ、技評さんの本でも特集が組まれていたりでだいぶ情報が増えていますが、いかんせんfluentdは本体とプラグインの開発が非常に活発なので、1年前の情報が今ではもう・・・みたいな状況になっている部分もある可能性があり、そういう意味では2014年時点で最新のガイドになっているのでは無いでしょうか。
特に誰もが欲しかった「fluentd プラグイン逆引きガイド」を書いてくれているのはありがたいと思います。これで「こんな情報楽に取れないかな」「途中で楽に加工とか出来ないかな」「ここにデータをストアしたいけど出来るのかな」とかの悩みが減るんじゃないでしょうか。
もちろんそれ以外にも基礎的な使い方や、実際によく使うミドルウェアを用いた例、どうやって運用するか、fluentd自体の監視などのきめ細かい内容が書かれている為、fluentdを今使っている人でも読んでおくと色々参考になる情報が多かったです。

特集3「Elasticsearch入門」

fluentd使い始めの頃は「ログを収集してMongoDBに入れる・・・ログを収集してMongoDBに入れる・・・」というのが割りと一般的だった気がしますが、それを可視化する上での手法やMongoDBのキャパシティ的な問題(capped collection使うレベルに収める方が良いというベストプラクティス)やそれをどう検索して必要な情報だけ取得するかなど色々ケアしなければ事があった気がしますが、今はそこをElasticsearchでやる事で、可視化やキャパシティ(まあデータ入れすぎると結局同じ問題出るけど)やストアしたデータへの検索などを解決しているのが主流な感じですね。で、そのElasticsearch自体を解説している章になっています。これを読むとElasticsearch自体のアーキテクチャやどのようにデータ格納すべきか、またどのようにデータを検索すべきか等がわかりやすく記述されていると思います。気になる運用周りやプラグインの紹介もあるので導入する時にまず読んでおくと良いんじゃないでしょうか。入門編なのであれですが、個人的にはJVM周りのチューニングヒントとかelasticsearch.yaml周りの解説、バックアップ・リカバリ、データサイズやリクエスト数によるスペック見積もり等もあると嬉しかったです。

特集4「可視化ツールKibanaスタートガイド」

Kibana自体の日本語のドキュメントとかは余り無く、実際にどのように設定すればどのようなグラフになるのか?という事が非常に分かりやすく解説されていると思います。Kibanaをとりあえずインストールしてみても「これ・・・どこをどういじればいいの・・・?」ってなりがちだったんですが、この特集で分かりやすく記述されているので、Elasticsearchにさえ入っていればもう可視化なんて簡単!という感じなんじゃないでしょうか。個人的には同僚が作ったKibanaで、複数人で更新が頻繁に入るダッシュボードを見るとElasticsearchが悲鳴を上げたりした経験があったので、nginxの分散時にキャッシュの設定だったりとかの参考例まで入っていると嬉しかったです。Elasticsearch自体の負荷が参照によって高まっているとfluentdからの書き込みにも影響が出る可能性があるので。


という訳であーだー勝手な事書きましたが、是非オススメな本なのでみんな買うと良いですよ。

*1:主にid:namikawaさんとか

【チラ裏】Android学習メモ-2

今日はFragmentを隣の人に少し教えて貰った。昨日のドキュメント読んでとか教えてくれた人は「こんな感じかな」というソースを見せて貰ってようやく何のため使うかとかは理解できたけど、既存のlayoutをFragmentに書き換える所がチンプンカンプン。これ、一連の流れで説明見ないと理解出来んな。
もうこれ以上ここに時間使いすぎてもアレなので、一旦Fragmentは離れて早めに終わらせそうなネットワーク通信やった。ただ、初めにメインスレッドで実行すると今のVerはException出るの知らなくて、ビルドしたら動かなくてなんじゃこれとなった。で、通信部分を別のクラスに分割したら、分割したクラスを上手く扱えない。補完では出てくるのに実際に記述するとそんなの知らないと出てくる。この辺はJavaの基本的な知識の欠如。Javaの書籍読みなおす。非同期処理の所とかもとりあえずコピペでやってしまっているので、ネットワーク通信も一旦置いておいて基礎的な非同期処理の所を明日やろう。

【チラ裏】Android学習メモ-1

異動してからとりあえずAndroidの学習をということで、mixiさんのAndroid研修カリュキュラムを教材に出されほぼ独学で読んでやっている。
https://github.com/mixi-inc/AndroidTraining
昨日までは
android studioとgenymotion入れて単体のプロジェクト作ってエミュ上で表示するレベルやって、レイアウトの所をちょろちょろやっていた。
で、今日は
2.02. Activity と Fragment
の実習・課題をやっていた。Activityの所はなんとなくホゲホゲ分かった。TCPソケットの状態遷移みたいな感じでActivityというのは状態遷移している。これで表示したりするものを切り替えている。ただ、Android Studioでデフォで作成されるHello World出すだけのプロジェクトだと、状態遷移全部記述していないけど、これって最低限記述しなければいけないのがonCreate()というお作法とかなのか理解出来ていない。そもそもJavaの知識足りてなさすぎるのと、リファレンスもまだ全然見れていないから分からないのだろう。
https://developer.android.com/reference/packages.html
Fragmentの所はまだチンプンカンプン。なんじゃこれ。

実習の所はFragmentの所で詰まって他が手につかないのはマズイので一回飛ばした。どっかでちゃんと確認する。
ControllerLifecycleAssignment1の課題はそれぞれprintfデバッグみたいに入れて表示して確認したけど、これやって欲しい粒度が合っているのかそもそも微妙な気がしている。明日聞く。
ControllerLifecycleAssignment2の課題はそもそもエミュだと状態保存されないはずの動作が初めから保存されているような動きっぽいけど、破棄されるタイミングちゃんと分かっていないから勘違いしているのかな。とりあえず保存・復元する処理自体は書いたけど、動作が変わっていない気がするのでちゃんと動いているのか確認出来ていない。明日聞く。

この辺で辛くなって少しでも分かりそうなネットワーク通信の課題をちょっと気分転換に見て
https://github.com/mixi-inc/AndroidTraining/wiki/2.09.-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E9%80%9A%E4%BF%A1
画面操作・表示より全然楽そうでそこやってしまおうかと現実逃避しそうになった。

Android Studioの機能をちょろちょろ見始めている。とりあえず背景は黒くした。背景が黒は正義。
明日は周りの人が見るに見かねてペアプロばりに教えてくれるらしいので頑張ろう。

半年後とかにはこのグダグダした「わからない」「出来ない」連発のメモを黒歴史に出来るようにしたい。

サーバ側のSSL Session Cache状況を確認する「rfc5077」というツールが便利

この2日ぐらいスマートフォンアプリ開発エンジニア必須スキルのNginxを触りまくっていて、同僚が見つけて来て触ったら便利だった。
githubはこれ。
https://github.com/vincentbernat/rfc5077

手順はREADMEに書いてあるけど、

sudo yum install openssl-devel  gnutls-devel nss-devel  libpcap-devel libev-devel  nspr-devel pkgconfig
git clone  https://github.com/vincentbernat/rfc5077.git
cd ./rfc5077
git submodule init
git submodule update
make

で完了。カレントディレクトリに/rfc5077-clientというファイルが出来るので、

./rfc5077-client -p 443 example.com

とかやると

な感じでSSL Session IDがどう変化しているか、SSL Session Ticketが有効だとどうか?というのが分かる。

この辺のそもそも知識はid:nappa_zzzさんのブログやスライドが詳しいので、そちらをどうぞ。
ブログ
http://d.hatena.ne.jp/nappa_zzz/20111204/1322961826

スライド