[Elixir]timestamp in Ecto2.1

Ecto2.1が着々とrcとして改修されていますね。
この中で、Calendar typeの導入が書かれています。

defaultでは、従来は timestamp() などの Ecto.Scheme に設定する値には Ecto.DateTime が格納されていたのですが、ここがデフォルトで NaiveDateTime になるよう。これにより、このSchemeを使っているところは基本的に NativeDateTime でEctoから今まで Ecto.DateTime で受け取っていた時間を扱う必要がありますね。 Ecto.DateTime とかはEcto2.2で完全に削除されるそうな。

https://github.com/elixir-ecto/ecto/blob/e3077b99c24086d5b93580228b1daa6bb0ee0b5a/CHANGELOG.md#integration-with-elixir-13-calendar-types

Schemeの設定としては以下になるそうですね。(ここ@timestamps_opts より。)

[type: :naive_datetime, usec: true]

ちなみに、これが導入PR
https://github.com/elixir-ecto/ecto/commit/12d67912ddddb39ff79cb53d3098569cb427b521

~N[] のsigilとか使われてて、個人的には Map だけで表現されるより読みやすくなった。

[Appium]preventWDAAttachments for XCUITest strategy

Appium1.6.2から、 preventWDAAttachments というパラメータが付与されました。

これは、WebDriverAgentを動作させるときにXcodeのDerivedDataに多くの不要なファイルを書き込むことを抑制するために、そのディレクトリの権限を読み込み専用(555)に変更させるものみたいです。

defaultはtrueのようですね。

https://github.com/appium/appium-xcuitest-driver/blob/0c36c7659373c1c82a1411e50fa2503920909624/lib/desired-caps.js#L45

ただ、これはXcodeの権限設定を一部変更することになるので、capsには明記しておいたほうが良さそう。

[UX]HEART Framework

GoogleのUXの話で、HEARTというフレームワークを見つけました。

http://www.appcues.com/blog/google-improves-user-experience-with-heart-framework/

この記事には、HEARTの中身である以下と、それぞれに対して実例を交えながらどういうものがそれぞれの要素に該当するのか、を説明しています。

name description how to measure
Happiness: satisfaction, likelihood of recommendation / via user surveys User surveys
Engagement: how much an average user is using your product (by time, sessions, etc) Analytics
Adoption: the percent of users that adopt your product after signing up (user onboarding), and/or the percent of users that adopt a specific feature of your product Analytics
Retention: how many users are still present later Analytics
Task Success: time to complete a task, error rate User tests

どうやら、これは以下の論文で話されていたようです。こう言う領域もフレームワークとしてまとめる力があることは、やはり素晴らしいですね。

http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36299.pdf

[Elixir]handle_infoとreply

GenServerなんかにある handle_info/2 の使い方をど忘れしてしまったので、メモ。

自身のブログを検索すると、 [Elixir in Action]OTP/GenServerを学んで非同期/並行処理を学ぶ にすでにメモってたのですが。

以下のような簡単なコールバックを実装し、スクリプトを実行してみます。

まずはGrnServerを持つプロセスを生成します。そのあと、 callcast で定義されていないメッセージを send してあげると、ここでは handle_info/2 に拾われて処理を行います。

defmodule MyInfo do
  use GenServer

  # Callbacks

  def handle_info({:reply, msg}, state) do
    IO.inspect msg
    IO.inspect state
    {:noreply, state}
  end
  def handle_info(_msg, state) do
    {:noreply, state}
  end
end
# Start the server
{:ok, pid} = GenServer.start_link(MyInfo, ["hello"])

# send message to the process
Process.send_after pid, {:reply, "message"}, 1_000

# "message"
# ["hello"]

少し話がそれて、非同期通信の時に何らかの処理を終えた時に通知を受け取りたい場合、そういえば以下のように reply/2 を使って処理を非同期にプロセスに投げることできるのでしたね。上に貼ったリンク先を読み直してて思い出した…

def hanldle_call(....) do
  spawn(fn ->
    data = # 処理
    GenServer.reply(caller, data) # 処理が終われば、GenServerの機構でメッセージを送る
  end)

  {:noreply, do_folder} # まずは非同期的に応答する
end

handle_infoも使うと、以下の通りにも書くことができる、と。
ここの、GenServerのドキュメントにも載っているやり方です。

def handle_cast(:reply_in_one_second, from, state) do
  Process.send_after(self(), {:reply, from}, 1_000)
  {:noreply, state}
end

def handle_info({:reply, from}, state) do
  GenServer.reply(from, :one_second_has_passed)
end

Read Advanced-Test-Automation-Engineer-Syllabus

ソフトウェアテスト/品質界隈だとISTQBやJSTQBは耳にする機会が比較的多いのではないでしょうか。

その中で、以下のようにadvances test automation engineerのシラバスが公開されていたので読んでみました。ジックリとではないのですが、流してどのようなことが書かれているのかをざっと。

http://www.istqb.org/downloads/category/48-advanced-level-test-automation-engineer-documents.html

内容はテスト自動化の話をテストケースの話から実装時の設計の話、実行、レポートの話までと順に書いていました。実装時の設計のところらへんで、データ駆動とかキーワード駆動、プロセス駆動などの話があったりしました。

ざっと見た感じ、開発者からテスト側によっている人の方が読みやすい(想像しやすい)のかなーと思いました。

Design Document Template

This may help me when I try something stuff.

[WebDriver]WebDriver and Mobile JSON Wire Protocol Specification and Appium

I investigated some feature regarding with Selenium3 and associated with it. So, I put some memos I found here.