読者です 読者をやめる 読者になる 読者になる

Erlang リリース コトハジメ

ブログだと細かい変更が面倒なので Gist に書いてみました。Gist の方がレンダリングされて見やすいのでオススメです https://gist.github.com/4243786

AES の CTR モード

[crypto][erlang]AES の CTR モードのストリームタイプ 暗号データにランダムアクセスが可能になる (IVec が固定) ため、並列処理が可能となる AES の Counter Mode を試してみました。 ストリーム暗号なので、パディングがいらないのがいいですね。 まずは…

LZ4 の Erlang バインディングを(作ってもらって)使ってみた

LZ4 Extremely Fast Compression algorithm http://code.google.com/p/lz4/ ドラクエ 10 にも使われている圧縮アルゴリズム LZ4 を Erlang から使うバインディングを試してみました。 https://github.com/joewilliams/erlang-lz4 動かしてみたところ ... セ…

Erlang Study Meeting Tokyo 2012.09 を開催しました

無事成功しました。発表もその後の懇親会も楽しかったです。 プレゼン 全てのプレゼンは英語で発表、質疑応答も基本英語、強制はしていないのですがなんとなくそんな感じに。 @lhoguin cowboy の作者による、cowboy のロードマップやそれに関係するライブラ…

Erlang R15B02 の Google Drive ミラー

Erlang の R15B02 がリリースされたのでミラーを用意しました。今までは Dropbox でしたが速度が尋常じゃなく早いので Google Drive にしてみました。Erlang/R15B02 https://docs.google.com/folder/d/0BwsKtP8AY5SzdzdjbWdWLS1jYzg/edit SHA1(otp_doc_html_…

函数プログラミングの集い 2012 in Tokyo で発表してきました

函数プログラミングの集い 2012 in Tokyo - [PARTAKE] http://partake.in/events/9a5f18bf-ca0c-48cd-a050-8a564c1ab0d9継続開発のススメ Erlang/OTP 編 — Gist https://gist.github.com/9ee65f0dfa9b7dd78fde応用セッションの一発目として「継続開発のスス…

eunit-2.2.3

次にリリースされる R15B02 に入るであろう eunit の最新版にいろいろ機能が入りました。https://github.com/erlang/otp/commit/f968ff87b1d6fb74237010bffa0390953337425e Include fixture setup and cleanup errors in Eunit Surefire report documentatio…

継続開発のススメ Erlang/OTP 編(発表資料たたき台)

函数プログラミングの集い 2012 in Tokyo - [PARTAKE] http://partake.in/events/9a5f18bf-ca0c-48cd-a050-8a564c1ab0d9イベントで発表するので発表資料用のたたき台を作りました。継続開発のススメ Erlang/OTP 編 Gist https://gist.github.com/9ee65f0dfa9…

非公式 MessagePack ライブラリを公開しました

Erlang 勉強したてでも使える、お気軽ライブラリを目指して作りました。 GitHub URL https://github.com/voluntas/yet-another-msgpack-erlang ライセンス Apache 2.0 公式 公式は @kuenishi が書いたものがあります。 URL https://github.com/msgpack/msgpa…

Erlang Binary Pretty Printer を使おう

Erlang のバイナリ表記は十進数です、個人的には見やすいのですが、長くなると何が書いてあるのかわかりにくかったりします。特にテストの時エラー時やデバッグ時はかなり読みにくいなと感じていました。それを解決する素敵なツールが。 binpp です。https:/…

Erlang から YAML を扱う

Erlang から YAML を扱うライブラリに決定的なのが無かったのですが、つい最近出て来ました。libyaml を NIF(Native Implemented Function) でダイナミックリンクしたものです。goertzenator/yamler https://github.com/goertzenator/yamler 使ってみる前に …

型を指定してバイナリから変換するライブラリ

誰得なライブラリな気がするので、微妙ですが ... 作った理由 Erlang で外部 API とかを使って Console とかからデータを貰えるような仕組みを作ると、 かならず必要なのがバリデータとかコンバーターです。毎回似たようなの書いててだるいなぁって思ってい…

ローカル開発時の継続ビルド+テスト Erlang 版

もちろん rebar 前提です。 OMake とか watch コマンドとか色々ありますが、自分は Python の watchdog を使っています。watchdog は Python で出来てる監視ツールです、pip でインストールしましょう $ pip install watchdogMakefile ... 色々省いてます .P…

string から term を生成する方法

文字列から Erlang Term を作る方法がわからなかったのでメモ。かなりマニアックですが ... 。もっと簡単な方法があったら教えてください。 > {ok,Tokens,_} = erl_scan:string("[{foo,bar},x,3]."). {ok,[{'[',1}, {'{',1}, {atom,1,foo}, {',',1}, {atom,1…

Erlang/OTP R15B01 を CentOS 6.2 にインストールする

インストールメモ。 Dropbox は自分の Public ディレクトリ hipe/native-libs/sctp は使わないので無効にしてある halfword-emulator は有効 systemtap も有効 $ yum install gcc gcc-c++ ncurses-devel make openssl-devel systemtap-sdt-devel $ curl -O h…

軽量ウェブサーバ Cowboy を試す

mochiweb を仕事でも使っているので特に困っていないのですが、せっかくなので cowboy を触ってみることにしました。ちなみに、作者の @lhoguin が来月あたり日本に来るらしく、日本の Erlang な人と会いたいと行っているので興味ある人は是非。 更新 2012-0…

LDAP クライアントが erlang/otp に追加されてた

Erlang で LDAP クライアントといえば eldap で、かなり古い実装で R8 か R9 くらいの頃の実装です。 もともとは GPL だったのが MIT になって github に公開されていました。https://github.com/etnt/eldap 仕事で使うかも知れないと思って、たまにパッチを…

Erlang R15B01 で DTrace(SystemTap) を使ってみる

注意: DTrace まったくわかりません。D 言語(D スクリプト) は書けません。読めません。とりあえずインストールして動かしてみたよ、程度のレベルです。 DTrace 使ったらこんなに幸せになったよエントリーではありません。 追記 2012-04-04 R15B01 が出たの…

Erlang + SPDY + TLS NPN が Firefix 11 で動いた

まったりと SPDY を追っかけたりしてます、今更かよ、遅いよとか禁止。Chrome では既に動いていましたが、Firefox も 11 から有効に出来る様になりましたね。 Jetty が対応したり、Netty が対応したり(Twitter がパッチを送ったそうですね)とちょっとワクワ…

Erlang + UUID ライブラリを触ってみる

RFC 4122 で定義されている UUID を Erlang から使うにはどうやるのかなと思って調べてみました。詳細は参考に書いた "UUID と Perl について" という記事が素晴らしいので、それを読んで下さい。Erlang の NIF バインディングはこれ、rebar の設定が古いの…

jiffy と mochijson2 と simplejson のベンチマークを取ってみた

MBA なのでスペックがしょぼいです。( Core2Duo 1.6 / 4G / SSD 128 ) Erlang R15B Python 2.7.2 追記 2012-03-19 simplejson を 2.4.0 にアップデート tokoroten.json を置き換える 結果 simplejson は C 拡張アリですencode(decode(data)) を 100 回ほど回…

Erlang gen_server(SUB) に対して Python (PUB) からメッセージを送ってみる

Erlang 側で gen_server を複数立てておき、全てを Subscriber として待ち受け状態にして、Python 側からメッセージを送ってみます。メッセージはルートは使わないでファンアウトです。メッセージは JSON でシリアライズしています。 ソース $ git clone git…

zmq で Erlang/Python のデータのやりとりに JSON を使う

通信が確認出来たので、シリアライズしたデータを渡すテストです。 色々ありますが、まずは簡単な JSON データにしてみました。 ソースコード https://github.com/voluntas/snowflake/tree/feature/zmqgit checkout 7c153e853e624b9aeefe6c0e83003b92c8ecbd3…

zmq で REQ/REP を Erlang/Python でつないでみる

Erlang と Python でメッセージのやりとりをしてみます。まずは Erlang が REQ で Python が REP です。 相変わらず同期ですが、テストはシンプルな方が良いので同期から。 サンプルコード https://github.com/voluntas/snowflake/tree/feature/zmqここの 0d…

Lager を使ってみた

概要 Lager というのは Riak の Basho が開発したロギングツールです。https://github.com/basho/lagerそもそも Erlang にはロギングモジュールは付随しているのですが、あからさまに使いにくいのです ... 。 特徴 Lager ですがかなり柔軟に出来ています。 …

eldap_pool というライブラリを作ってみた

作ってみたというよりは既存のライブラリを組み合わせてみた、という方が正しいです。eldap という、古い LDAP ライブラリはあるのですが、これがコネクションプールには対応していなかったので、実際に使うには厳しいのかなぁと考えていたので対応させてみ…

Heroku 上で WebMachine (Erlang) を動かす

heroku コマンドが入っていない場合は gem install heroku で入ります。まずは webmachine を持ってきて、webmachine ベースのアプリを new_webmachine.sh で作ります。 $ cd /tmp $ git clone git://github.com/basho/webmachine $ cd webmachine $ make $ …

riak 1.0.0 の導入方法とクラスターの構築について

riak 1.0.0 がそろそろ出るので導入方法など 変更履歴 パッケージを riak 1.0.0 rc2 に変更 riak って何 Basho Technology, Inc. が開発している Erlang で書かれている商用分散 KVS です。 アジェンダ インストール方法 ローカル環境での構築 クラスター環…

Riak 1.0 の Secondary Index を試す

Riak 1.0 における Secondary Index の制限 マルチインデックスクエリーがない SQL っぽいクエリー言語がない ソート/ページネーションがない 文字列と数値のみ バックエンド DB は LevelDB のみ GitHub からソースを取って来てビルドする 重要なのは 1.0 ブ…

riak-erlang-client を触ってみた

https://github.com/basho/riak-erlang-clientgit clone して make すれば動きます。通信はPB です。ただ中身で使うデータは Erlang の binary です。 term_to_binary -> binary_to_term という方法が使えます。サンプルそのままですが ... riak は 1 ノード…

Riak が使用しているライブラリについて

Riak がそろそろ 1.0.0 が出そうなので、本格的に触ってみることにしました。何が出来るかと言うよりはある程度仕組みをしっておきたいなと思いどんなライブラリを使ってるのか調べてみました。とりあえずさっと眺めただけなので間違ってる可能性大です、突…

mochiweb を使ったデータ分割読み込み処理

mochiweb_multipert:parse_multipart_request/2 を使う データを分割して読み込んだりしたい時、 つまりストリームとしてファイルデータを扱いたいときは mochiweb_multipart モジュールの parse_multipart_request/2 を使います。データが送られてきたタイ…

rebar と Makefile

rebar の Makefile で rebar get-deps と update-deps のタイミングで困っていたのが解決した。単に get-deps の前に update-deps を置くだけで良かった ... 。そうすることで deps が無ければget してくるし、あれば update してから compile になる。

random:choice/1

Python の random にある choice が好きなのでそのまま移植してみました。 -spec choice(list()) -> any(). choice(List) -> lists:nth(crypto:rand_uniform(1, length(List) + 1), List). 速度は全く出ません。あと大きいリストに使うのはやめましょう。

Scientific Linux 6.0 に Erlang をインストールしてみる

Scientific Linux 6.0 (on VMware Fusion) に Erlang をコンパイルして入れて見ています。SL 6.0 は最小インストールにしてみました。コンパイルするために必要なものを ... yum で入れて見ます。抜けがあったらごめんなさい yum install gcc gcc-c++ make o…

Req:respond の Code を取得する場合

これで 404 が取得できます。 Response = Req:not_found(), Response:get(code). また Response には Request も含まれているので Request を取得できます。 Response:get(request) 他には Response の Headers も get(headers) で取得可能です。

Req:respond/1 のメモ

200 Req:ok({"application/json", <<>>}) 404 Req:not_found() 405 Req:respond({405, [{"Allow", "GET,POST"}], <<"405 Method Not Allowed\r\n">>})

mnesia_key_cache を公開しました

他の誰が嬉しいのかわかりませんが、自分が嬉しいライブラリです。https://github.com/voluntas/mnesia_key_cachemnesia にはランダムに一つキーを持ってくるという機能があることにはあるのですが、 その mnesia:first/1 はテーブルロックしてしまって大量…

Erlang で開発されている商用分散 KVS Riak を使ってみた

絶賛書きかけ Riak とは Riak は商用分散 KVS の一つです。Basho Technology が開発を行っておりオープンソースで公開されています。 商用版もあり、一部機能が追加されています。 Riak をインストールする(パッケージ編) Riak をインストールする(ソースコ…

Erlang に興味を持った人へ

随時加筆してます 追記 2011-06-18 rebar.config の erl_opts から fail_on_warning から warnings_as_errors へ変更した rebar.config の xref に fail_on_warning を追加した インストールする Erlang を R14B03 へ変更した ライブラリ紹介に webmachine …

Erlang R14B02 のミラー

いつも遅いなぁと思っているので Dropbox の Public フォルダで公開します。 公開ファイル URL SHA1 ハッシュ値 http://dl.dropbox.com/u/89936/otp_src_R14B02.tar.gz SHA1(otp_src_R14B02.tar.gz)= 3b117f93a4e28c376278bbcca0ede0f936952c88 http://dl.dr…

mochiweb POST/GET 編

mochiweb を使って色々いじっているのですが、ドキュメントが無く、基本ソースを読むしかないのでメモがてらにまとめていきます。まとめ方はかなり適当です、ごめんなさい。HTML がまったくわからないので JSON を使った API の例になるとおもいます。 対象 …

mochiweb 基礎編

mochiweb を使って色々いじっているのですが、ドキュメントが無く、基本ソースを読むしかないのでメモがてらにまとめていきます。まとめ方はかなり適当です、ごめんなさい。 対象 Git の基本を理解している Erlang の基本を理解している HTTP の基本を理解し…

meck + eunit + rebar + cover で WARNING が出る

meck + eunit + rebar + cover を使ってると WARNING が出るようになってしまった:-(WARNING は cover モジュールが出しているのだけれど、meck と cover との相性が悪いんだろうなぁと。 どうにか解決できないか模索中です。WARNING が出る場所は cover.erl…

コネクションプールを持つ redis の erlang client を書いてみた

redis-erl Eshell V5.8.2 (abort with ^G) 1> application:start(redis). ok 2> redis_admin:make_pool(30). ok 3> {ok, Connect} = redis_admin:get_connect(). {ok,redis_connect_1} 5> redis:set(Connect, "10", "30"). ok 6> redis:get(Connect, "10"). …

Dialyzer をまとめてみる

R13B04 と R14B(dev) での違いや使い方をまとめてみる。まずは何が無くともこの辺を使うだろうから実行しておく dialyzer --build_plt --apps erts kernel stdlib mnesia os_mon crypto sasl eunit public_key inets あとで書く

Erlang で OS 情報を取得する

os_mon というモジュールの簡単なまとめです。 Erlang VM の使用メモリ状況や使用 CPU 率を教えてくれるナイスなモジュールです。OTP-OS-MON-MIB まで入っているという素敵さ。で、使うには sasl を起動してから os_mon を起動します。イメージ的にはこんな…

分割されたテーブルの一覧を取得する

@itawasa から教えて貰いましたmnesia_frag を使うとテーブルが細かく分割されてしまいます。このテーブル一覧が欲しいときは、table_info で frag_names を指定すると取得できるようです。 mnesia:activity(async_dirty, mnesia:table_info/2, [store, frag…

lists:zf/2

@itawasa に filter なんだけど true な値を変更して突っ込む関数無いのかなぁといってたらアンドキュメントですがありました。ありましたというか @itawasa が教えてくれました。@itawasa++ 1> F = fun(N) when 3 > N -> {true, N * 10}; (N) -> false end.…

分割された mnesia を使う

mnesia_frag はテーブル分割をしてくれる素敵な仕組みです。mnesia には制限があり1テーブル最大 2GiB までというモノがあります。これでは色々使えません。ということで誰もが思いつくのが Sharding のパーティショニングです。レプリケーションはもともと…