演算の並列実行でCPUコアを使い切るかどうかを測定 を投稿した時に、tatsuya6502 さん に、 まず、Range from..to-1 は、プログラムの簡潔さに大きく貢献してますが、その分、Enum 内部の処理が複雑になっていると思います(ポイント1)。 というコメントを頂きました。実際どのぐらい差があるのか気になったので、簡単に比較してみました。ソースコードの差異は Enum.map/2 に渡すリストを Range と :lists.seq/2 にしただけです。
Elixir(Erlang)の並列処理の威力を確かめるため、「テストサーバに外部からアクセスできないことを確認する」スクリプトを Elixir で書いてみました。 PythonやRubyなどで普通に直列で実行している場合、途中でつまるサイトがあると、タイムアウトまでそこで止まってしまいます。そういうサイトが複数あった場合にはそりゃもう大変です。並列実行することにより、変なサイトがあっても上限は最悪タイムアウトまでで済むため、精神衛生上とても良いです。しかも Elixir ならとっても簡単に書けます。 ソースコード一式は GitHub に置いてあります。 実行ファイルの作成手順 mix でプロジェクトのガワを作成 mix.exs を編集して依存ファイルをダウンロード Elixirのソースコードを書く コンパイル 実行 mix の設定 mix.exs の生成と編集
Programming Phoenix は Phoenix 1.0 をベースにして書かれていますが、バージョン 1.1.0 で gettext 対応が入ったため、下記引用の部分はそのままだとエラーになって動きません(ネット上のいくつかのサンプルも、同様のロジックのものがありますね)。 原因と対策がわかるまで2〜3時間悩んだため、他の人が同じ罠を踏まないように共有しておきます。 <%= if f.errors != [] do %> <div class="alert alert-danger"> <p> Oops, somthing went wrong! Please check the errors below: </p> <ul> <%= for {attr, message} <- f.errors do %> <li> <%= humanize(attr) %> <%= mess
Phoenix 1.1.0 から gettext に対応しました。日本語の.poファイルを用意し、locale を設定することでエラーメッセージを日本語に変更することができるようになりましたので、方法を共有します。 設定方法 GitHubで公開している日本語の.poファイルの説明そのままなので、説明自体は割愛します。 このファイルを適用すると、モデルの changeset/2 で何も設定しなくても、このようにエラーメッセージが日本語で表示されるようになります。 メッセージの置き換え 標準でメッセージが設定されている関数(Ecto.Changesetとか)では、message オプションを指定すると、メッセージを任意の文字列で置き換えることができます。標準の日本語訳だとしっくりこない場合、便利かと思います。 例) model |> cast(params, @required_fields,
【追記】 tatsuya6502 さん に、コメント頂いた内容を踏まえ、追記・修正を行いました。また、ついでに、ちょっと気になったのでElixirのRangeとErlangの:lists.seqの速度比較もやってみました。 Elixir(= Erlang)の特長の一つに、子プロセスを生成して並列実行することで、各 CPU core を活用することができるという事があります。 各言語で0〜50,000,000までの数字を加算するロジックを書き、ベンチマークと htop による CPU 利用率を測定してみました。 環境 さくらVPSの4G (CPU 4 core, RAM:4GB) C言語: gcc 4.4.7 elixir: 1.1.1(Erlang 18.2.1) python: 2.7.8 php: 5.4.45 ruby: 1.8.7(かなり古い...) 測定結果 言語 時間(秒)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く