Google Test Labsを覗いてみると、以下の通りFirebaseに移行したとありました。 Firebaseに統合されていることは知ってたのですが、完全にFirebaseの一部に移行するのですね。モバイル系プラットフォームのFirebase化への本気度を感じます。 Test Lab is moving to Firebase. Visit the Firebase console to use Firebase Test Lab for Android. 以下にドキュメントがありました。 https://firebase.google.com/docs/test-lab/#implementation_path サポートしているスクリプトは以下のよう。 Espresso, Robotium or UI Automator 2.0 instrumentation tests written specifically to exercise your app. Robo test, which analyzes the structure of your app’s user interface and then explores it automatically by…More
[Android]codelabsがいろいろ参考になる
最近、Googleのcodelabsを覗きながらGoogleIOであった新しめなツールの把握をしています。 https://codelabs.developers.google.com/ どのくらい時間かかりそうかも書いているし、実際経験したことある人だと表示されている時間ほどチュートリアルにも時間がかからないので効率的にざっとした内容は把握できそうな気がします。 ConstraintLayout ConstraintLayoutを試してみました。 こちら AppleのStoryBoard上でAutoLayoutを操作する感じで使えますね。 サンプルを基に、自分で少しやってみました。 https://github.com/KazuCocoa/myconstraintlayout XMLは微調整をする時以外見なくてよさそうな感じまでなると良いですね。古くからAndroidアプリ開発されている方はXMLとの対話の方がまだ効率的なのかな。 Android Testing Codelab こちら これはオマケみたいなものです。 Espressoを使ったサンプルと、MVCの説明ですね。Activityへの依存性を少なくしてテスト可能な範囲を広げるとか、interfaceを定義してその実装をstub/mockするやり方とか、そこらへんの導入が書いています。 Espresso-contrib はRecyclerViewに対して使えるメソッドを提供していたのは知ってたのですが、 DrawerActions や DrawerMatchers に対してもそうであったのですね。ここは知らなかった… (と思ったら、ATSLのページには書かれていた.. Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource) あと、@SmallTest, @MediumTest, @LargeTestの説明あったけれど、社内で定めた基準とだいたい同じ感じ。 そういえば、Espressoでは、waitとか用意しなくて良いのね。Espressoのテスト、ちょっと調整しよう。 Espresso waits until the UI is idle before it moves to the next operation. Likewise, it waits for AsyncTask…More
Reading “Software Automation Testing Secrets Revealed”
Software Automation Testing Secrets Revealed を読みました。 全体的には主に見積もりや計画という観点から事例を載せてまとめた感じです。ツールの話もありますが、ちゃんと取り組むならこの書籍ではまかなえないかなという感じの量でした。タイトルの通り、よくお題になりやすいテストの実装/実施/分析などの領域とは少しずれた、見積もりとか環境構築、繰り返しなどを考慮した上でのプロジェクト全体からのテストやそれにかかるコストという側面を強くした狙いを持った本な印象です。 いわゆる、開発者テストではない領域のテスト活動に関わる人は読んでて良いのかなと。内容が具体的なので、その方面を経験されている方からすると、頭の中を整理する感じでしょうか。特に、プロジェクトマネジメントとか、テストマネージャと言われる人からすると参考になりそうな。 見積もりの中には、 繰り返し回数 環境面の構築 データの用意 機能の理解 テストシナリオなどのレビュー 実施 などを考慮した形が例として書かれていました。 テストのじっこうの見積もりは、 Critical Path Method Critical Chain Method Resource Leveling などの方法も合わせて書かれていたりと、単に抽象的に “見積もる” という話ではなく、実際にコストを仮定した時の計算など載っていて、計画立ての事例として良い材料だと感じました。 そんな書籍でした。More
[Swift]protocol、再び
Object Orientedではなく、Protocol Oriented(Swift)への理解を深めたい最近です。 https://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2 の記事をざっと読みながら思ったのですが、protocolでは let の定義がつかえないことに疑問を覚えました。StackOverflowでも確かにありました。 http://stackoverflow.com/questions/34385897/why-i-cant-use-let-in-protocol-in-swift protocolは抽象インタフェースになるので、具体的な値が入りません。letはconstantな振る舞いが必要ですが、protocol自体は具体的な値はその具体化されたstructやclass、enumなどで変化するためですね。なので、protocolでは var を使う必要があります。ただ、そのstructなどのprotocolを引き継ぐ時はその先で let を使ったりできます。 なるほどね。 ちなみに、以下がprotocolとそれを使ってstructやenum、extensionした簡単な例です。protocolで { set } を指定していると、当然ながらemutableではいられないので継承した先で同名の変数は let で定義することはできません。 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more…More
[Elixir]add search box
ある人に検索窓まだー?と言われたので、メモがてら軽くサンプル実装してみた。 こんなもんで良いかな… controller def search_email(conn, %{“search” => %{“query” => query}}) do result = User.search_user_with_email_ilike query <> “%” users = Repo.all(User) render(conn, “search_index.html”, users: users, assigns: result) end model def search_user_with_email_ilike(email) do from(user in User, where: ilike(user.email, ^email)) |> Repo.all end web/router.ex post “/search”, UserController, :search_email search_index.html %script function sample(users) { window.alert(users) } – form_for @conn,…More
『啓蒙とは何か』をカントより
永遠平和のために/啓蒙とは何か 他3編 (光文社古典新訳文庫) を読みました。 これ自体ではなく、カントの”啓蒙とは何か”が目当てでした。 カントは、啓蒙を 人が自ら招いた未成年の状態から抜け出ること と定義しています。この未成年の状態とは、他人の指示を仰がなければ自分の理性を使うことができない状態をさします。つまり、他人の指示がなければ自分の理性を使う決意も勇気もないことをさす。 これに対して、カントは幾つか規律を定めている。 悟性の規律(自分自身で考えること) 判断の規律 首尾一貫した思考の規律 これらを学び身につけていくことが啓蒙。 カントの思想はコンピュータシステムを学ぶときにいくつも出くわします。その一面がこの啓蒙ですね。 これとは別に、何か思想を広めるときに”啓蒙活動”するといいますが、その目指すものは自立して判断、実施できるようにする、までなのですね。なるほど。濃厚。More
つい手に取った『メカ屋のための脳科学入門-脳をリバースエンジニアリングする-』を読んだ
SmartNewsの読書チャンネルで見つけて、気になって購入しました。 メカ屋のための脳科学入門-脳をリバースエンジニアリングする- 人の反応・感覚・学習などが、どのようにして脳の細胞やその関わりにより構成されるのかの大枠を知ることができます。人の学ぶ仕組みなども垣間見ることができて、脳科学やさらには深層学習といった 学ぶ や 意思決定 を模倣する領域への面白さも感じることができました。 人の考える仕組みとかに興味ある人はもちろんなのですが、深層学習などから人の学習や脳の科学に興味を持った人や元々そういう方面に興味ある人であれば読んでみると良さそうな感じです。生物学の延長という感じではなく、工学系の大学生に脳科学に興味を持ってもらうために書かれているので、仕組みを紐解くというリバースエンジニアリングな話の流れがあってエンジニアにはオススメできると思いました。 内容 人はハードウェア的に多くを処理している 人の聴く仕組み(音の知覚)から、細胞の反応に入ってきます。そこでは、有毛細胞の振動を起因とした機械仕掛けのセンサの話、神経信号が細胞内外のイオン濃度の膜電位を起電力として電力に変換、脳に音を知覚させるという話が広がります。 神経細胞レベルで情報処理が始まるきっかけは、細胞内外のイオン濃度の平衡状態が崩れることだと知りました。ところで、熱力学第二法則が世界には存在しますね。そのため、実は細胞内のイオン濃度を保つために内外の濃度さを調整するイオンポンプが存在するそうな。このポンプを動かして濃度を保つ事に、脳の基礎代謝の50%が使われているらしいです。脳の半分がこれに使われるのですね。電位を生む源泉。 そのため、このイオンポンプを強制的に操作するような外的刺激を加えることができると、細胞に流れる電気を意図的に操作できます。これが発展したものが、人の感覚補助をする補助装置。あのような補助装置の動きが垣間見れてなるほど感。 運動感覚への関わり。 歩行運動に関わる神経と筋肉の動きは、 4つの指令信号 から再現される10個の活動パターンとして存在するそうです。それらが成熟していき、歩行運動をとれるようになると。さらには、サル、ネコ、ラットなどにおいてもその 4つの命令信号 によって歩行運動が再現されるそうな。骨格などもちがうのに、人問わず基本は同じになってくるのですね。筋肉などを動かす根本は似ていると。 脊髄内には多くの運動モジュールが存在するとのこと。そのモジュールを脳が組み合わせて使うことで、体の動きが決まってくるらしいです。モーターによる身体の補助装置なんかは、この組み合わせをリバースエンジニアリングで観測し、それを元に機械側でも動作を予め予測して動いているらしです。そうせずに、素直に細胞の反応を計測しながら補助装置を反応させると人の反応と機械の反応が乖離して補助にならないとか。こう言うところって、品質を考える上で重要な指標になりそうな気づきです。 脳の反射の話で出てきたのですが、脳の検索性能ってすごいですね。処理能力だけでなく、階層化などしてる。さらには、脳はマルチクロックで動作するし、集団的ベクトル表現を持っているし。奥が深い… 脳による信号の学習というところで、学習前、学習中、学習終盤における神経細胞の動きに関して書かれているところがありました。神経細胞の入出力に注目して見ると、入力に対する処理はだんだんと非同期的になっていくそうです。つまり、学習が進むと細胞はバッチ処理的に効率的に処理を始めるのですね。人の学習も、習慣として身についた後は勝手に処理されていくもんな。バックグラウンドで非同期に処理される感じ。 Brain machine interface を皮切りに、エンジニアの脳への挑戦が進んだことも書いていました。その結果で行き着いた一つが深層学習。 脳の設計に関する話も少し。脳は基本的に干渉設計であって最適設計ではないそう。要求機能が干渉し合うのはシステム開発では望ましくないが、脳は干渉し合う形で設計されている。むむむ。。。神経細胞の多様な反応と、機能マップによる効率化が天秤にかけられているのかも?と。 最後は芸術。 コンピュータグラフィックスの世界で、どのように脳に本物のように見せるか、という話が展開されていました。ヒトは見慣れたものを美しいと思うようになるとのこと。なので、慣れたものほど疑え、というのは脳の構造としてもまっとうなのですね。 締め 人の学ぶ仕組みやその反応の仕組み、奥が深い。ただ、それを模倣しながらコンピュータが発展している面もあるので、分散系に興味あるなら無知ではいない方が良いかな感。More
人工知能学会監修の『深層学習』を読んでTenserFlowへの入り口に触れる
深層学習 Deep Learning (監修:人工知能学会) を読みました。確か、この深層学習系に詳しい知人の誰かがこれ読んでおけば最低限良いと言われたことがきっかけで買いました。TensorFlowなどのツールには時間的には十分に手を出せそうにないので、基礎だけでも知っておこうと思ったことがきっかけです。 こういうロジックと工夫とかがまとまった書籍、良いですよね。大学院までで学んだことが基本となって、そこからさらにこういう理論の構築がされているのだということはよくわかりました。こういう大学院の頃にかじったことが主となる技術として生活を変えていく、というところを垣間見ることができるのって良いですね。 1部 基礎的な話。 確定的なニューラルネットワーク、確率論的なマルコフ過程やその中の統計的機械学習のモデルとしてのボルツマンマシンの話。今回は扱われていなかったけれど、ベイジアンベースの話は成果がどうか気になりますね。計算が複雑になりがちだけれど、計算時間は短い印象です。ベイジアン系。そこから、実装の話になって応用の2部へと話が移ります。 以下、幾つか具体的な話。 DistBelief http://research.google.com/pubs/pub40565.html DropOut 複数モデルの推定値の平均を利用することで、過学習を防ぐ。計算コスト上昇を防ぐために、ランダムでノードを消して学習を繰り返し、その結果を使う。幾つか、計算量増加を防ぐ。 ノードは他のーどを頼らないので、独立性を持つ。 https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf 面白かったところとして、ニューラルネットワークの超パラメータを決定するのにランダム探索が優れていることが報告されているとあったところがあります。私も違った類の計算をする時にランダムに決めることが何故か比較的有効だということがありました。その時は一様ランダム関数でしたが。この書籍で書かれていたところにおけるランダムがどうランダムなのか、は議論があるけれどスコープ外なので省略。(参考文献の研究にはちゃんと書かれているっぽい。) 実装技術のところで、ニューラルネットワークはパーツ自体は単純だが、全体が複雑でそれらが正しく動作しているかのチェックが難しいとありました。実際、この話に限らず複数の独立したモジュールが連なって1つの意味のあるシステムを作る場合、そのテストって難しい。さらにはこの学習系はそれが正しいかをパッとunit testみたいに判定するのが難しい。確率的。。。 2部 画像、音声認識、自然言語に対してこれらの技術がどう使われるかが書いていました。気になったところをメモ。 画像 畳み込みニューラルネットワーク(convolutional neural network) 学習には教師あり学習が基本 1980年代後半の文字認識のためのものから、対して変わっていない 教師なし学習でも、条件によってはk-means法などと同等の結果がでる、というのは面白かったです。ただ、学習なしでは、まだ多層ネットワークで扱おうとしたら処理が仕切れない、という状態なので処理性能を上げるかロジックの短時間化が必要そうなのですね。 音声認識には、深層ニューラルネットワークと隠れマルコフのハイブリッド 時系列における、入力に対する出力 音響モデル。 言語モデルベースの話 自然言語 品詞タグ付けや意味表現など、多くの学習にこの深層学習が応用されている いずれも、現実世界の問題を解くには計算量の削減や計算能力の向上に繋げることがとても重要なのだと感じました。 TensorFlowを読む この書籍とは関係ないですが、TensorFlowの以下も合わせて読みました。DistBeliefとのつながりもわかって、以前さっと眺めた時に比べて理解が深まった気がします。 TensorFlow2015ver2 https://drive.google.com/file/d/0B04ol8GVySUuSmpVdVVjNWtxVWs/view 締め 今の主流が確率的なのか確定的なのか、それらの基礎は何かを含めて知ることができました。確率的はものだと、この書籍ではマルコフ系が主でベイジアン系はさっと触れる程度だったので、マルコフ系が今の所主流なのかな。ただ、サンプル数と計算量からするとベイジアン系も必要とされていそうなので、きっかけあればそちらの技術も覗いてみたいですね。 そういえば、分散系での意思決定には独立性がキモということを思い出した。あと、この手の複雑な計算が混ざるロジックの証明は近似計算大事ですね。近似計算は十分に小さいと見る、といったことの他に確率モデルに近似される、とかなテクニックも必要なのでここまで近似を使い証明に落とし込んだ人たち素直に素晴らしいですね… ともあれ、数学計算だったり聞きなれない用語も多数出てきたので、読むのに集中力が必要だった。More
『世界でいちばん幸せな国フィジーの世界でいちばん非常識な幸福論』を読んだ
世界でいちばん幸せな国フィジーの世界でいちばん非常識な幸福論 を読んだ こういう系の書籍はほとんど読まないのだけれど、オススメされたので読んでみた。 適当にやってこ、とか、幾つか私も共感できるところあったなー。変に考えすぎな人とか読むと良いかもしれないですね。 こういう考え方も知るとか、そういう類のものだと良い感じでした。More
[Erlang][Elixir]if condition in Erlang/Elixir
昨夜のElixirのifの使いかたに対しての話に参加して。メモ。 Elixirのifって、以下の通りcaseから構成されるmacroとしてKernelに定義されているのですよね。nilとfalseに一致したら else を行い、それ以外は if を行うと言う。 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden characters # https://github.com/elixir-lang/elixir/blob/v1.2.5/lib/elixir/lib/kernel.ex#L2321 defmacro if(condition, clauses) do build_if(condition, clauses)…More