[Elixir]引数で与えられた関数を実行する

Elixirで、引数として関数 fn を与えた時、その与えられた関数を実行する方法がぱっと調べただけでは見つからなかったのでメモ。 以下のように、 f.() という形式で、与えられた引数としての関数を実施できるようですね。 簡単なサンプル もう少し進んで、exercismから同様な問題があったのでそれを使って見てみます。 テストコード 実行コード Rubyでいう、 yield を呼び出すのをElixirでは .() で行うのですね。 参考: http://hashrocket.com/blog/posts/elixir-functions-ruby-lambdasMore

『今日もていねいに。』を読んだ

最近、『今日もていねいに。』という本の雰囲気に惹かれて購入しました。 文庫のジャケ買いですね。 著者をみてみるとびっくり、松浦さんでした。 今度、お話聞いてみたい。 内容は松浦さんの仕事観とか含めた考え方、がまとめられたものでした。 結構、私個人が持っている考え方とにているところも多かったです。 話の中で印象的だった箇所。 毎日を楽しく大事に過ごしていきたいですね。More

[Elixir]Pin演算子のちょっとした確認

ElixirにはPin演算子があって、その挙動を少し頭に入れるために簡単なcase文をつくってみました。 Pin演算子は、変数の再代入を防ぐ、という役割を持ちます。 以下は引数として与えられた a が、 SamplePin.pin1(a) ではcase文では b=10 が再代入される SamplePin.pin2(a) ではcase文で b=10 が再代入されず、パターンマッチされる という例です。 Erlangの流れを持ちますが、再代入が許容されるElixirでの再代入という副作用を防ぐ手段ですね。More

[Elixir]belongs_toしているモデルのcontrollerのテストコードを修正する

belongs_toの関係を持つモデルを、 #show で描画するところのcontroller層の話です。そのとあるコードをテストする時、従属の関係にあるモデルをDBに生成しておく必要があるのですが、そのコードを書くにあたりEctoの知識が欠如しててつまづいていたけれど、うまくかけた、というメモ。 Userモデルは、Pageモデルの一部に従属(belongs_to)しているので、Userモデルの要素を取得する場合、PageモデルをDBに生成しておく必要がある、というコードです。 以下のshowがテスト対象となるもので、UserのRepoを取得してきて、それに対してSQLの IN (Repo.preload)をしてきて、その結果を描画するという内容。 それに対して、Repo.insertでPageを作成、その次に従属の関係を作るためにpage_idに生成したpageのidを代入したUserを用意する。 最後に、Repoを更新すると、最低限のデータが揃うので、showで表示する要素としては十分なデータが揃えられる、というものです。 Ectoの理解があるとひょいひょいっとできるのですが、そこが欠如していた時はどう書けば良いかよくわからなかったのですよね…More

[Elixir]Ectoを触ってみる

Elixirの軽量なORMであるEcto それの使いかたをざっと把握していくために少しEctoを触ってみました。 メモです。 対象 標準的なクエリ とか これらはいずれも、以下のようなクエリが発行される。 パイプで接続されたEcto.Queryはクエリを結合していくのですね。 他、以下のようにlimitをかけることも可能。 preloadを行う belongs_to などで関係を持った、異なるテーブルに対してクエリを投げる場合、以下のようにpreloadを使います。 Ecto.Repo#preload/2 は、以下の通り IN で統合したテーブルに対してクエリを投げるのですね。この時に発行されるクエリは以下。 なるほど。More

『誰のためのデザイン? 増補・改訂版』を読んだ

誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論を読みました。 健康診断の待ち時間で、3分の2以上読み終えてさっくり読めた感じ。 この書籍は、多くの事例を交えながら、デザインに関して考察を行っていました。参考文献を見ていると、すでに読んだことのあるものもちらほら。それも相まってか、事例以外のロジック的な話は多くは聞いたことがあるものでした。 教訓は簡単である。我々は人間のためにデザインを行うのだから、人とテクノロジーの両方を理解しなければならない、ということである。 アフォーダンスやシグニファイアという捉え方。デザインに対する見方など、中々に情報が整理された気がします。人間中心デザインは知ってましたが、活動中心デザインはあまり聞いたことがありませんでした。 2種類のエラーの話、スイスチーズモデルの話など、ソフトウェアテストに関わる話も散見されました。ソフトウェアテストでは、古くはISO 9126、認知工学ではISO 9241、新しくはISO 25000でこの領域に関して議論されてきました。それらの話も知っていると、いろいろ学ぶ、感じるところがでてきそうです。 ちなみに、ISO 9126の頃にあった 魅力性 、 魅力的品質 ということば、そろそろやめたいですね。そこからさらに細かく分解されていますし。 自分がより良くできない限り、批判しないこと 時間見つけてHCDの書籍を締めとして読もうかな。More

[Elixir]Plug.Testを使ったRequestのテスト

作業メモ。 Elixir 1.0.5 Phoenix 0.14.0 Plug.Testを使ったやつ テスト対象 テストコード Phoenixを使ったやつ http://www.phoenixframework.org/docs/introduction test_helper.exs で、test用DBのcreate、migrationを行っているのですね。 test/test_helper.exs ファイル単位とか、以下のように行単位でテストできるのですね。 タグの付与と実行 moduleへのタグ moduleへのタグ定義 実行 実行 特定のタグのみ除いたテストケースの実行 test case個別へのタグ タグの定義 実行 特定のmoduleを除いたうえで、individual_test:yupを実行する ランダムにテストを実施する これ、面白いなーと感じました。 🙂 テストの自動生成 以下のようにcontroller、modelを作成したら、テストケースも自動生成されていました。 作成したモデルに対する、基本的なテストケースの自動生成良いですね。 ざっと生成されたテストケース見てみると、moduleで作成したリソースの生成/更新などの基本的な正常系、作成失敗などのエラー系。 ちなみに、以下を実行した後だと、 phoenix.gen.html とうViewも自動生成されるので、かなりお手軽。 test/controllers/user_controller_test.exs test/models/user_test.exs HelloPhoenix.ModelCase は、 test/support/model_case.ex で実装されている。More

『目の見えない人は世界をどう見ているのか』を読んだ

『目の見えない人は世界をどう見ているのか』を読みました。SmartNewsの読書コーナーでふと目に入り、興味がわいたので買って読んでみることにした本です。Kindleでも売られていたこと、書籍買ったあとに気づいた… 目に見えない人の見ている世界を、「空間」「感覚」「運動」「言葉」「ユーモア」と章を分けて説明しています。 通常、視覚から得られる情報は8~9割と言われます。その情報を取得できない場合、どのように周囲の情報を手に入れるのか。 視覚から得た情報を処理する脳の箇所が、触覚により活性化する事例の紹介では、人、身体の感覚器としての役割に驚かされます。 芸術鑑賞におけるソーシャルビューイングなど、初めて聞いた話も交えらてました。 多くの場合、(私の勤めているところもそうですが)、費用対効果とか、そういう観点から健常者のみしか正常に使えないようなサービスの開発を主としています。一方で、様々な能力を健常者と同等に持っていない人たちも存在します。そんな人たちも楽しめるような、そんな身近なサービスを開発できるまで世界を進めたいですね。そうすれば、もっと楽しい世界になりそう。 その手段として、広くは「アクセシビリティ」と呼ばれる機能があります。スマホ、Web共に提供される、音声読み上げや色を変化させるような機能です。 例えば、WebだとWAI-ARIA(Web Accessibility Initiative-Accessible Rich Internet Applications)が有名どころでしょうか。スマホアプリの開発でも、accessibilityLabel(iOS)とか、contentDescription(Android)が提供されたりします。 私含む多くの人は、きっとこういう障害も”当事者”となるレベルで経験しないと必要性がわからないでしょう。なのですが、こういう違いも、こういった書籍を通して何か得て、何か違いがあって、その上で同じように楽しさを感じられるような世界に近づけるといいなー、とふと思いました。More

最近のモバイルアプリ向けTaaS

2015年7月10日、納豆の日のときの話になります。納豆食べてないな。。 軽いまとめ Google Cloud Test Labsの、 Out of the box, without any user-written tests, robot app crawlers know just what to look out for and will find crashes in your app for you. が他に比べて優位性を高く持っている感じ 他サービスは昔からある、テストシナリオ与えたりするとそれを実行、レポートを得られるサービス テストシナリオをメンテできる人でないと運用は難しそう 最近、GoogleやAWSから実機テストに関するツールの発表がありましたね。勢いあるなーってことで、ああいった方面の、昔からあるものなんかを並べてみました。 こういうサービス、TaaS(Test as a service)ってよく言われたりします。 Googleのサービスは未使用です。他は少なからず触りました。 海外サービス Google Cloud Test Labs URL: https://developers.google.com/cloud-test-lab/ Applify basedなサービス Android AWS Device Farm…More

[Elixir]Plugのコードを少し読んでみる

PhoenixのPlugの説明を読んでいると、Plug自体の動きが少し気になったので読んでみました。 ここでは、以下の Hello World を追ってみることに。 https://github.com/elixir-lang/plug API Document: http://hexdocs.pm/plug/ Plug自体、簡単なWebサーバの機構を提供するものですね。 ひとまず、 を実行してみる。 まずは以下が呼ばれる。 https://github.com/elixir-lang/plug/blob/master/lib/plug/adapters/cowboy.ex#L41 この中を辿ると、 run(:http, plug, opts, cowboy_options) にいきつく。 ここで何しているかを見てみる。 https://github.com/elixir-lang/plug/blob/master/lib/plug/adapters/cowboy.ex#L118 なるほど。最終的に、Cowboyを実行しているのですね。これはErlang向けの軽量なWebサーバらしい。 Cowboy https://github.com/ninenines/cowboy 返り値として、 {:ok, pid} のタプルを返す。 試しに、もう一度実行すると以下のようにerrorを得られる 今度は :error のタプルですね。:already_started が得られているので、pidを得たい場合、 とすれば得られます。なるほど。 ちなみに、停止するときは、 とします。 これは、 https://github.com/elixir-lang/plug/blob/master/lib/plug/adapters/cowboy.ex#L96 を参考にすれば良いですね。ここで与える :ref は、起動時に与えた Plug.Adapters.Cowboy.http MyPlug, [] の中の MyPlug という名前。 これは、以下のコードを見てみると、確かに:refの引数( build_ref(plug, scheme) )としてplugを与えているのでわかります。 https://github.com/elixir-lang/plug/blob/master/lib/plug/adapters/cowboy.ex#L35 なるほど。Plugというか、Cawboyの理解が少し進んだぞ。 %Plug.Conn{}…More