Archive for: 𔃷月 2017’

Elixir 自作のListのMax関数

2017年7月11日 Posted by PURGE

defmodule ListMax do
    def max(list), do: _max(list, 0) 
    defp _max([], max), do: max 
    defp _max([head | tail], max) do
        if head > max do
            result = head
        else
            result = max
        end
        _max(tail, result)
    end
end
iex(82)> IO.puts ListMax.max([471,193,433,263,102])
471

Phoenix linkタグ

2017年7月6日 Posted by PURGE

Railsで記述可能なことは、Phoenixでも可能だと信じて、やはり可能だった件。
linkタグの文字に、スタイルを適用したいという場合の対応。

    <%= link "LOGO", to: page_path(@conn, :index), class: "logo" %>

    <%= link to: page_path(@conn, :index), class: "logo" do %>
      <span class="logo"><b>LOGO</b></span>
    <% end %>

Elixir と Ruby のsumの比較

2017年7月5日 Posted by PURGE

Elixir と Ruby のsumの比較。
まだ、関数型プログラミングの記述、特に再帰には慣れていない。

Ruby

sum.rb

def sum(n)
  result = 0
  (1..n).each do |n|
    result = result + n
  end
  result
end

n = 5
puts sum(n)

# => 15

Elixir

sum.exs

defmodule Sum do
  def sum(0), do: 0
  def sum(n), do: n + sum(n - 1)
end

n = 5
IO.puts(Sum.sum(n))

# => 15

または、わかりやすく書くと

defmodule Sum do
  def sum(0) do
    0
  end
  def sum(n) do
    n + sum(n - 1)
  end
end

n = 5
IO.puts(Sum.sum(n))

# => 15

Phoenix で CKEDITOR is not definedエラー

2017年7月4日 Posted by PURGE

環境

Elixir: 1.4.4
Phoenix: 1.2.2

とあるBootstrap のデザインテンプレートを利用しようとしたが、付属のJSとの相性が良くない。
最低限のJSをデプロイしていたが、下記のJavascriptエラーにハマる。

Uncaught ReferenceError: CKEDITOR is not defined

結論から言うと、Phoenixが使用している Brunch というJSのパッケージ管理が邪魔しているようだった。

特にJSのパッケージ管理に困っているわけでなく、むしろ最近のJS界隈の用語には付いて行けてないので、利用するJSは、直接手書きしても問題ない。

config/dev.exs

config :phoenix_sample, PhoenixSample.Endpoint,
  http: [port: 4000],
  debug_errors: true,
  code_reloader: true,
  check_origin: false
  # コメントアウト
  # watchers: [node: ["node_modules/brunch/bin/brunch", "watch", "--stdin",
  #                   cd: Path.expand("../", __DIR__)]]


※但し、CSSもBrunch等で、一つのCSSにまとめている場合は、CSSとFONTのパスの問題を引き起こす可能性があるので注意。

priv/static/js に必要なJSファイルのみ配置する。 app.js / app.js.map への参照は削除

おそらくこれで、不要なJSを参照しなくなるので、Javascriptエラーは無くせるので、問題ないはず。

Brunchとか、JSのパッケージ管理の勉強は、困ったときにゆくゆくに。

Phoenix プロジェクト作成

2017年7月4日 Posted by PURGE

// プロジェクト作成
$ mix phoenix.new PhoenixSample --database mysql --app phoenix_sample
// サーバ起動
$ cd PhoenixSample
$ mix phoenix.server

必要最低限の初期テンプレート

<!DOCTYPE html>
<html lang="ja">
  <head>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
  </head>
  <body>
      <p class="alert alert-info" role="alert"><%= get_flash(@conn, :info) %></p>
      <p class="alert alert-danger" role="alert"><%= get_flash(@conn, :error) %></p>
        <%= render @view_module, @view_template, assigns %>
    <script src="<%= static_path(@conn, "/js/app.js") %>"></script>
  </body>
</html>