[Elixir]Loggerのconsole出力をファイルに書き出す

少しLogに関する知見を得たので、 logger_file_backend とか使ってみることにしました。後でちゃんとCustomLoggerの知見を貯めておこう。 経緯 通常、Loggerはconsoleに書き出されます。しかし、そのままではIOが大変ですし、ファイルに書き出したりしていきたいです。そのため、ログをファイル出力する形にしたいなーと考えていました。 CustomLogger ElixirのLogger のドキュメントを少し読んでみると、デフォルトでは :console としてコンソールに結果が出力され、そこからカスタムするときはCustomLoggerを作れるよ、と書いています。 Custom backends を読んでみると、 GenEvent を使ってCustomLoggerを作ることができるのですね。そこで簡単なファイルへ書き出すCustomLoggerを作ろうとは思ったのですが、通常のLoggerの結果をファイルに書き出す、というシンプルなreposirotyを見つけたので、ひとまずはそれを使ってみることにしました。 Logger_file_backend Logger_file_backend https://hex.pm/packages/logger_file_backend https://github.com/onkel-dirtus/logger_file_backend 他に、Erlangのlagerをラップしたexlagerというのもあるのですが、Phoenixと一緒に使う方法とか探しているとElixirに組み込まれているLoggerを操作する系の方が安易だったので見送りました。 exloger https://github.com/khia/exlager 参考 elixir in production from Tsunenori Oohara 導入した時の、サンプルプロジェクトのコミット https://github.com/KazuCocoa/web_qa_vote/commit/035f5cd6e451cd84d5c3e4304cc0853e8ccf0672More

[Elixir]tear down in ExUnit as on_exit

teardownを探していたのですが、 ExUnit では、現在はteardownは on_exit のcallbackで実装されています。過去、この形に変更されたのですね。 http://elixir-lang.org/docs/v1.1/ex_unit/ExUnit.Callbacks.html#on_exit/2 使い方は以下。 setup の中で on_exit を定義します。これで、この setup_all や setup と同じサイクルで処理が実施されます。 ちなみに、 shouldi を使った時は上手く動作しなかった… 過去、私も書いていた… MIX AND OTP vol 1More

[Elixir]compile timeに決定されるモジュールの定数

Elixirでは以下のように @neko と定義することで、このモジュール内で共通して使える要素を定義できます。最近使い方を誤ってしまったのですが、この値はコンパイル時に決定されるので、それ以降に読まれる値を設定することはできません。 In other words, the value is read at compilation time and not at runtime. As we are going to see, this makes attributes useful to be used as storage during module compilation. http://elixir-lang.org/getting-started/module-attributes.html 例えば、 というような用途では、必ず default が代入されます。 つい忘れていてつまづいたので、メモ…More

[Elixir][Jupyter]Play IElixir on Jupyter

最近、Jupyterを知りました。 Python/Rubyで学んだのですが、Elixirでもあるか探してみたらありました。(なかったら作ってみようとしてた) 使い方は簡単で、Readmeに書いている通りにするだけです。 Jupyter https://jupyter-notebook.readthedocs.org/en/stable/index.html https://github.com/jupyter IElixir https://github.com/pprzetacznik/IElixir IErlang https://github.com/robbielynch/ierlang そのほか、利用可能なKernelは以下 https://github.com/ipython/ipython/wiki/IPython%20kernels%20for%20other%20languages こんな感じで起動できます。 ElixirというかErlang自体、こういう数値計算は得意としない領域なのですが、Elixir/Erlangをブラウザ越しに試す、という環境ではかなり使い勝手の良いものです。 🙂 追記: nbviewerを使えば、GitHub上でコードを簡単に共有もできてとても便利に使えます 🙂 (ただ、Elixir/Erlangは未対応です) http://nbviewer.ipython.org/More

[Elixir]implement binary search with Elixir

ElixirでBinary Searchを実装してみた。メモ。 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 defmodule Search do def binary(_, []), do: -1 def binary(search, [head|tail]) when…More

[Swift]XCUITestにおけるCoverageとScreenshotの在り処

XCUITestでは、自動的にスクリーンショットを取得してくれます。それがどこに保存されるか?というと、以下のように Attachments に保存されました。保存されるファイル名に統一感がないのですが、 plist にテストケースとスクショの結びつけを保存しているのですね。テスト結果をXcode以外からうまいこと見ることできないかなーと思ってたのですが、すんなりホイとはできなさそうな感じです。 /Users/user-name/Library/Developer/Xcode/DerivedData/TestProject-randome-values/Logs/Test/Attachments あと、スクショのタイミングを任意なタイミングではできないので画像比較のためにそれを使う、というのには使えなさそうな感じです。んー。テスト失敗した時の参考になる以上ではちょっと使いにくい感じです。 ついでに、XCUITestでも、カバレッジを取得できる模様?ちゃんと計測はしていないのですが、うまいこと使えれば使えそうでした。 そのほか XCUITest、いろいろ調べてみましたが通知のダイアログなどのシステム設定をリセットする手段ないので、ちょっとテストケースの管理に難しさを感じました。 ちなみに、wait/sleepは適度にwaitしてくれるので、さほど気にしすぎなくても良いのですね。 waitUntil のようなメソッドを定義したのですが、それを使うのは限定的になりそう。retryが内包されているのはGUIから操作するテストケースではありですね。Exceptionを出す種類も、 XCTAssert 系以外にもいくつかあったのですが、ここはXCTestの頃からそのまま使っているもののようですね。 このfastlaneのsnapshotも、このXcode7(XCUITest)対応したみたいですね。 https://github.com/fastlane/snapshotMore

[Swift]SwiftでParameterized Test?

Swift2.1でParameterized Testをどう書こうか、と考えた時、以下な感じでできそうに思えたのでメモ。 parametarized() にBlockとデータセットを与えることで、そのBlockの中の要素を全てBlockにて与えた処理を行う 与えるパラメータは、 struct で定義する 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 import XCTest class xctestSampleTests: XCTestCase { //…More