Elixir
iex(1)> MyApp.MySup.start_my_server {:ok, #PID<0.101.0>} iex(2)> recompile 15:34:42.541 [info] Application my_app exited: :stopped Compiled lib/my_app/my_app.ex Compiled lib/my_app/my_sup.ex Generated my_app app {:restarted, [:my_app]} い…
Phoenixフレームワークでは、mix phoenix.serverするとデフォルトでbrunchが立ち上がって、 web/staticらへんのファイルを監視してくれます。 とてもありがたいのですが、「え〜、brunch???」と思う方もいらっしゃるでしょう。 そんなときは、おもむろにconf…
なにが起きた phoenixのv0.16.0が出たのでガッとアップデートしたら、一緒にphoenix_htmlとかもバージョンが上がりました。動くっしょ〜と何も考えずにいたら、動かなくなってました。 症状は、linkヘルパで作ったリンクの内、GET以外(確認したのはPOSTとDELE…
My @elixirlang playground is finally out! You can run code (!) & share/embed snippets. Have a look: http://t.co/dYoYOxMPOn #myelixirstatus— Steve Domin (@stevedomin) 2015, 8月 10 ということなので使ってみよう。 便利っぽい。
なにがしたい 例えば、レガシーなシステムを徐々にモダンにしていきたいので、古いDBと新しいDBを 共存させたいとします。要は、異なる接続先の2つ3つのDBを使いたい。 どうする Repoを2つ作ります。 以下、Phoenixのディレクトリ構成に合わせて説明します。…
Phoenix v0.14.0, mariaex v0.3.2. 発端としては、デフォルトでつくられるidの名前をevent_idにしたかった。というか、事情によりしなければならなかった。table/2にprimary_key: falseを与えるとidが作られないというのはすぐにわかったのだけれど、auto_in…
phoenix_htmlのlinkヘルパは、リクエストメソッドがgetの場合は普通にaタグでリンクを作り、そうでない場合はaタグをformでラップして、onclick属性が働くような組み立て方をしてくれます。 で、何かリソースをdeleteするようなリンクでは、「ホントにOK?」…
これが正解みたいな方法は無いのでは。多分。 # priv/repo/seeds.ex alias MyApp.User alias MyApp.Repo Faker.start Enum.each 1..99, fn i -> params = %{name: Faker.Name.name, email: Faker.Internet.email} User.changeset(%User{}, params) |> Repo.i…
hackneyベースのElixir用HTTPクライアントライブラリのHTTPoisonでGETリクエストを送ろうとしてハマったのでメモ。 どこでハマったかというと、GETパラメータの指定方法がよくわからんかった。結論はこれ。 params = [key1: 1, key2: 2] HTTPoison.get!("htt…
5月のアタマから、だいたい週1回のペースで社内Elixir勉強会をやってきました。 新卒のペーペーですが、ちょっと思うことがあるので、だらだら雑にポエムを垂れ流しておきます。 特に、何か主張したいことがあるわけじゃないです。 ちなみに勉強会の資料はこ…
GMOペパボ社内で「おいお前らElixirやるぞ!!」なことをしました。 資料はこちら Elixirだ 第1回 - 基礎だ - from Joe_noh 一応社内のエンジニアに届くかたちで呼びかけはしましたが、諸々の都合で急遽開催したので、結果ワタシが同期4人に対して1時間ほど…
Erlang 18のリリース後、Elixirに新モジュールMapSetが追加されるようです。 lexmagさんが実装・ベンチマーキングし、HashSetと比較した結果がこちら。 MapSet evaluation - elixir#3242 ひゃー。爆速。 この記事を書いている時点ではまだ全ての関数のベンチ…
以前、Phoenixプロジェクトの新規作成というエントリで書いた方法が、v0.10.0で導入されたbrunch周りでエラーを吐くようになっていて困ったっちー。 そこで、ふとphoenixframework/phoenixのmasterの様子を見てみると、こんなのがマージされてた。さすが、バ…
lib/elixir/lib/hash_set.exです。 なにするやつか iex(1)> set = HashSet.new #HashSet<[]> iex(2)> set = HashSet.put(set, :a) #HashSet<[:a]> iex(3)> set = HashSet.put(set, :b) #HashSet<[:b, :a]> iex(4)> set = HashSet.put(set, :c) #HashSet<[:c,…
ある新しいライブラリに以下の問題があってムムッと思ってプルリクした。 例えばlib/data/people.ymlを置くとする。lib/my_app/module.exでこのファイルを読みたい。 # ダメな例 "lib/data/people.yml" |> File.open # 良い例 "../lib/data/people.yml" |> P…
Phoenix + Ember(Ember CLI) priv/static/js/にember-cliプロジェクトのdistへのsymリンク貼る。 web/templates/layout/application.html.eexとかに <%= if Dict.get(@conn.assigns, :ember_page, false) do %> <script src="js/dist/assets/vendor.js"></script> <script src="js/dist/assets/emph.js"></script> <% end %> とか書く。さらに、dist/ind…
※ 追記 このエントリの内容は古くなっています。以下の記事を参照してくださいな。 phoenix.newがarchiveされるっぽい - mmag 追記終わり。 -- おひさ。 いままでは本家をgit cloneして目当てのバージョンのタグにチェックアウトして、 $ mix phoenix.new my…
Elixirにはhexというパッケージマネージャがあって、そのv0.6.0がリリースされました。 目玉機能はhex.docsで、これで自分のライブラリのドキュメントをhttp://hexdocs.pm/ライブラリ名/バージョン番号に公開できます。バージョン番号を省略すると最新版に飛…
Elixir製の代表的ウェブアプリフレームワークPhoenixで、かの有名なRails Tutorialをなぞってみているのである。 Joe-noh/ph_microblog まだ途中だし、よくわからんとこは端折っているのである。 途中からはCapybaraが出てくるので、Houndを使って結合テスト…
Elixirで何かしようとしたら必ずmix newするのであります。 そしてElixirやErlangのライブラリを使おうとしたら、mix.exsのdepsに書くのであります。 大抵の場合は、 [{:hoge, github: "someone/hoge"}] みたいな感じでいけるけれども、git cloneにも色々あ…
最近Elixirのことしか書いてないです。たぶんもうしばらくこんな感じです。 ErlangでOTP使うときとか、スーパーバイズしたい子供をつくるときに、child_specと呼ばれる書き方でどんな子供をつくるか指定します。公式のドキュメントにはこんな風に書いてあり…
使っていたノーパが壊れ、勢い余ってMBAを注文して舞い上がっている私です。 せっかく環境が新しくなったので、ghqとかモダンなものを入れてますし、せっかく環境が新しくなったので、前から気になってたelixir-modeのタブインデントをスペースにしようと思…
例えば、 defmodule Greeting do Enum.each [:hello, :goodbye], fn (greeting) -> def unquote(greeting) do IO.puts unquote(greeting) end end end というもの。上手く使えばコード量がドチャクソ減って幸せになれるのですが、「invalid syntax in def :h…
つい先ほどElixir 1.0.0がリリースされました。めでたいめでたい。 個人的には、1.0.0-rc2で入った変更に注目しております。 [Kernel] Add <~, ~>, <<~, ~>>, <~>, <|> as operators これです。 次のようなことができるようになりました。 defmodule M do de…
今日はPlugです。 Plugとは まずPlugとはなんぞやというところですが A specification for composable modules in between web applications Connection adapters for different web servers in the Erlang VM だそうです。イメージはRackです。今はCowboyと…
について述べます。 準備 まずは今回使うサンプルをば。この辺にはあんまり触れません。 mix new optsみたいなことして、 # lib/opts.ex defmodule Opts do def main(args) do OptionParser.parse(args) |> IO.inspect end end # mix.exs defmodule Opts.Mix…
1.0のリリースが近づき、Elixir熱の高まりを感じる今日この頃、皆様いかがお過ごしでしょうか。 本日は、Elixirの特徴の1つであるマクロについて書いておこうと思います。対象読者は、Elixirの文法くらいはなんとなく分かるっていう人かな。 コードを書くコ…
ElixirにおけるMixは、Rubyで言うとRakeポジションにあたるモノ。 当然タスクを自作できるはず。 まずmix new hogeして、ディレクトリ掘削作業。 $ mkdir -p lib/mix/tasks/hoge hogeってのはプロジェクト名と揃えておいたけど、fugaでもOK。いっぱい作って…
$ MIX_ENV=dev mix ecto.drop Repo ** (Mix.Error) The database for repo Repo couldn't be dropped, reason given: Password: psql: fe_sendauth: no password supplied . lib/mix/tasks/ecto.drop.ex:32: Mix.Tasks.Ecto.Drop.run/1 (mix) lib/mix/cli.ex…
Elixirのドキュメントを眺めていて、String.codepointsとString.graphemesの違いがわからなかったので調査。 ソースにはこんなコメントが。 複数の記号で1文字をなすものを表現するのがGraphemeという解釈でいいのかな。 つまりElixir特有のものではなくてUn…