【Elixir】Phoenix をインストールしてみた

Elixir のWebフレームワーク Phoenix をインストールしてみた。(^^)/~

yng.hatenablog.jp

qiita.com

www.casleyconsulting.co.jp

無事にブラウザで http://localhost:4000 にアクセスして Phenix の画面を見ることができた!

 

が。データベースの設定をしていないので、それはこれから。MySQLPostgreSQL もインストールはしているが、ユーザも作ってなかったみたい(汗

 

 

【ELM】リアクティブプログラミング?

書店で

[関数型リアクティブプログラミング ](http://amzn.asia/a8yKDTE)

[RxJavaリアクティブプログラミング](http://amzn.asia/0tloosC)

を見てなんだか気になったので、ぐぐった。

 

ninjinkun.hatenablog.com

qiita.com

qiita.com

今どきはやりの React と関係があるのだろうか?

まあ、理解するには触ってみる・動かしてみるしかないだろう。

で、ググっているうちに、ELMという関数型言語があるらしいことに気づいた。

codezine.jp

doloopwhile.hatenablog.com

はじめに · プログラミング言語Elmの薄い本

The Elm Architecture · An Introduction to Elm

本家 http://elm-lang.org/

これも面白そう。触ってみたい。

【Scala】Akkaでアクターモデル

Scala 単独ではアクターモデル(メッセージパッシング)はできないが、Akka というライブラリで実現できるらしい。

 

[Akka実践バイブル アクターモデルによる並行・分散システムの実現 ](http:// http://amzn.asia/1ZucXbW)

発売当時から知っていたが、お値段が高いので我慢していた。

が。勢いあまって本日購入!

 

www.slideshare.net

【Rust】なんかすごくよさげ

言語の存在は知っていたが、実はとてもよさげだった。

Rust (プログラミング言語) - Wikipedia

並列性の機構は軽量タスクとして提供される。これと類似の仕組みはErlang言語などのアクターモデルの言語にも見られるものである。それらのシステムにおいて、複数のタスク同士は直接にデータを共有するのではなく、メッセージ・パッシングによってデータのやり取りを行う。性能上の理由から、データのやり取りには固有の箱[21]を使って行われ、データの複製はされない。それらの箱は所有者が一人であることが保証されたもので、送信タスクから受信タスクに向けて開放することができる

Erlang と同じ、軽量プロセスを持っていたとは!アクターモデルでメッセージパッシングということは軽量プロセスごとにメッセージキューを持っている?

www.rust-lang.org

プログラミング言語Rust

tracpath.com

2018年01月15日のツイート

【Elixir】ESpec動いた!

漸く動いた(^^)/~

 

使い方をググって見つかったコードはこれ。

GitHub - antonmi/espec: Elixir Behaviour Driven Development

defmodule SyntaxExampleSpec do
  use ESpec
  it do: expect true |> to(be_true())
  it do: expect(1 + 1).to eq(2)
  it do: (1..3) |> should(have 2)
end

 

悩んだところは次の2点。

  1. テスト対象の関数呼び出しってどれ?
  2. テスト対象のモジュールをimport? include? require 等なにかしなくていいの?

mix と ESpec な事例はググっても他に見つからなかった。

 

ので。Spec系の元祖?な RSpec についてググった。

はじめてのRSpec - まずテスト書いてからコード書くシンプルなチュートリアル - Qiita

使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita

    it '13歳以上の場合、漢字で答えること' do
      user = User.new(name: 'たろう', age: 13)
      expect(user.greet).to eq '僕はたろうです。'
    end

この記述から、expect(テスト対象関数) .to eq(期待値)という書式であることが分かった。

 

一方、spec/sample01_spec.exs から lib/sample01.ex 内に定義されている Sample01 モジュールを利用するための書式はググってもみつからなかった。

なので、当てずっぽうに import キーワードを使ってみたら当たりだった。

defmodule Sample01Spec do
 use ESpec
 import Sample01

# it do: expect true |> to(be_true())
# it do: expect(1 + 1).to eq(2)
# it do: (1..3) |> should(have 2)

# it do: expect(ret2).to eq(2)

 it do: expect(sumlist([1,2,3])).to eq(6)
 it do: expect(sumlist([2,4,6])).to eq(12)
 it do: expect(sumlist([1,4])).to eq(5)
end

 これで Elixir で BDD できる。

 

次は Scala で BDD だ!( sbt + Spec2 )