Erlang

Riak Source Code Reading #1に参加しました

昨日開催された「Riak Source Code Reading @東京 #1」に参加しました。そして、Riakのbitcaskバックエンドとeleveldbバックエンドのコードに関して発表してきました。その時のスライドがこちら。 https://github.com/kuenishi/riak_scr_jp/blob/master/%231…

RiakのBackendのコードを読む(事前調査篇)

僕よりも詳しそうな人はいっぱいいるのに、なぜかRiak Source Code Reading @東京 #1の担当になってしまったので、Riakのbitcask, eleveldbバックエンドのコードを読んでいく。たぶん最終的にはgistかgithubに資料をまとめるけど、ここに書いてあるのはその…

cryptoモジュールの乱数生成関数を使う

ErlangでセッションID生成のような用途に耐えうる十分安全な乱数生成関数はないものかと調べていたら、どうやらcryptoモジュールのrand_bytes/1やrand_uniform/2あたりが近いらしい。 1> crypto:rand_bytes(16). <<216,145,169,69,119,62,52,12,70,173,20,98…

erlang-mysql-driverを使う - チラシの裏

ErlangでMySQLを使うにはどうするんだろうと思っていて、最初Yxaを見ていたが、erlang-mysql-driverを使うのが正解らしい。今回はPure Erlangな実装のものしか調べていない。 -module(mysqltest). -export([start/0, start/4]). start() -> start("localhost…

membaseは真剣に使わない方がいいと思う

membaseはなかなか面白いプロジェクト、そう思っていた時期が俺にもありました。(AA略membaseのWebコンソールは本当にリッチなので、Erlangでどういう風に書いているのかなぁと思って研究していた次第。とりあえず、管理ユーザーのログイン状態の保持、所謂…

HTMLを出力するあまり使えないアイディア

Webmachineのサンプルコードを見ていて、次のようにhtmlモジュールを作ってhtml出力関数を定義し、 -module(html). -compile(export_all). -define(TAG(T), T(Attrs, Content) -> tag(??T, Attrs, Content)). ?TAG(head). ?TAG(script). ?TAG(title). ?TAG(b…

rabbitmq-managementは使える!

rabbitmq-managementはWebベースでRabbitMQを管理・監視するためのRabbitMQプラグイン。 RabbitMQ - Management Plugin http://www.rabbitmq.com/management.html rabbitmqadminを使ってCLIで出来ることとほぼ同等のことができるようだ。RabbitMQはExchange…

Riak事始

RiakはErlang製の分散型KVS。 http://www.basho.com/Riak.html https://wiki.basho.com/display/RIAK/Riak 「またKVSですか」という見方もあるかと思うが、RiakはRiakなりの良さがある。まずインストールが簡単。以下のページからRPMをダウンロードしてイン…

ErlangのWebSocketの実装

MochiWebをベースにしたもの。もっとあるかもしれないが、試していない。 https://github.com/RJ/mochiweb-websockets https://github.com/davebryson/erlang_websocket https://github.com/sendtopms/Erlwebsockserver misultinもWebSocketをサポートしてい…

rabbit-lifeが面白い

rabbit-lifeはサーバー側をErlang、クライアント側をJavaScriptで実装したライフゲーム。マルチプレーも可能。 https://github.com/kenpratt/rabbit-life 画面イメージとしてはこんな感じ。ゲームとして面白いというよりは、アーキテクチャや使用しているラ…

2-legged OAuthで認証して外部APIを利用する

Erlangでerlang-oauthを使い、2-legged OAuthで認証をして外部APIを利用したい。 http://github.com/tim/erlang-oauth 外部APIというのは、具体的に言うと、ここではmixiのOpenSocial RESTful APIのこと。ちょっと前まではどうやってやるのか分からない(対応…

Erlangのthrift_clientを使ってCassandraと戯れる

もう何度目か分からない空前のErlangブームを迎えているわけですが、ErlangでCassandra/Thriftを使う方法がちょっと分からなかったので、メモ。まず、Thriftの配布物に含まれているlib/erlをMakeして、Erlang用のThriftライブラリをインストールしておくこと…

誰が得するのか分からない

php_app - PHP eval server for Erlang/OTP http://github.com/skeltoac/php_app clone&ビルド。 $ git clone git://github.com/skeltoac/php_app.git $ cd php_app $ erl 1> make:all(). PHPを実行するサーバーを起動。 2> php:start(). PHPコードを実行。 …

BeepBeepのチュートリアルをやってみた(2)

前エントリのBeepBeepチュートリアルの続きをやってみた。そして、挫折した。 Using Ajax with the BeepBeep Microframework BeepBeep, CouchDB and a Trivial Blog 「Ajaxを使う」っていう前者の方は「まあ普通かな」という感じで、Erlangで普通っぽいWebア…

BeepBeepのチュートリアルをやってみた

BeepBeepはErlang製のWebアプリケーションフレームワーク。 BeepBeep http://beepbeep.dmitriid.com/en-US/ 以下のチュートリアルを参考にBeepBeepプロジェクトを作成し、自分のビュー関数、テンプレートを定義するところまでやってみる。 http://lethain.co…

MochiWebのコードを読んでいない奴は素人

id:Voluntasさんにアドバイスを求めたところ、さてはMochiweb読んでない、キサマは素人だなと言われたので、取り急ぎ読む次第です。 http://d.hatena.ne.jp/shot6/20090704/1246664987 ということらしいです。素人でサーセンwwc.f. http://code.google.com/p…

R12B-5でeunit-2.0/includeがインストールされない

RabbitMQのErlangクライアントをビルドするにはeunitが必要、eunitはErlang最新版のR12B-5ならばバンドルされているということで、R12B-5でRPMを作り直した。が、/usr/lib/erlang/lib/eunit-2.0/includeがインストールされていない。おかしいなと思ってググ…

後で読む

期待できそうなCouchDB解説記事。今は時間がないので後で読む。 Reading Erlang: Inspecting CouchDB More CouchDB reading: btree:lookup More CouchDB reading: btree:query_modify Reading Erlang: CouchDB - From REST to Disk in a few function calls …

Reiaを試す

via Simon Willison’s Weblog. Reia (pronounced RAY-uh) is a Python/Ruby-like scripting language for the Erlang virtual machine (BEAM). http://wiki.reia-lang.org/wiki/Reia_Programming_Language ということなのだが、「何だこれ?」感がぬぐえない…

CouchDB

The CouchDB Projecthttp://incubator.apache.org/couchdb/ だいぶ前からcmlenzのブログでなんとなくは知っていたけど、Erlangで実装されているというのは今日初めて知った。FAQには、「最初Cで書いていたけどErlangに直した」って書いてあるな。スケールす…

ピンポン

Erlangにも、Scalaにも、concurrent programmingに関するチュートリアルがあるが、この分野ではErlangの方がきれいに書けるような気がするな。上がErlang、下がScala。 -module(pingpong). -export([start/0, ping/1, pong/0]). ping(0) -> pong ! finished,…

regexp

Erlangを使って、どっかでみたことのある正規表現を試してみるテスト。別に難しいことをやっているわけではないのですが、Erlangのregexpには過度に期待せず、別のアプローチをとった方がよさそうです。 > regexp:match("admin/", "^admin/$"). {match,1,6} …

無限リスト

本家のProgramming Examplesを見ながら練習。 -module(lazy). -export([ints_from/1]). ints_from(N) -> fun() -> [N|ints_from(N+1)] end. 関数を返す関数を定義し、その上で、次のように使う、と。hdはリストの最初の要素を、tlは最後の要素を返す関数。 1…

リスト内包表現

Erlangのリファレンスを見ながら練習。この辺は難しくないところですね。やっぱり、Erlangでもmap, filterよりもリスト内包表現を使うべきなのかな?【追記】 lists:append, lists:map, lists:filterを使うと、リスト内包表現より簡単な場合もあるよ、みたい…

エラー処理の指針

Dr. ArmstrongのPh.D.論文"Programming reliable systems"(リンク先はPDF)を読んでいて驚愕。 4.3 Error handling philosophy Erlangにおけるエラー処理は、他のほとんどのプログラミング言語とは根本的に異なる。エラー処理に関するErlangの哲学は、いくつ…

Erlangで書かれたWiki

Erlang写経に休憩に、Joe Armstrongさん*1のホームページにある、Erlangで書かれたWikiで遊んでみました。 Setting up an Erlang wiki server http://www.sics.se/~joe/tutorials/wiki/wiki.html 上記のページからソースをダウンロードし、手順通りにセット…

random

ぱっと見た感じでは、random:uniform(N)とcrypto:rand_uniform(Hi, Lo)が使えそう。 > random:uniform(100). 73 が、cryto:rand_uniform, crypt:rand_bytesは上手く使えない。ドキュメントには、Nはintegerでよいと書いているのになー。 軽く調べてみた所で…

lists

写経中に出会ったlists関連の関数を試してみます。 lists:flatten 19> lists:flatten([1, 2, 3]). [1,2,3] 20> lists:flatten([1, [2, 3]]). [1,2,3] lists:reverse 22> lists:reverse([1, 2, 3]). [3,2,1] 23> lists:reverse([1, [2, 3]]). [[2,3],1] lists…

string

stringモジュールの練習。 len(String) -> Length > string:len("spam"). 4 equal(String1, String2) -> bool() > string:equal("spam", "spam") true > string:equal("spam", "egg") false む、なぜ、わざわざequalを使うんでしょうか?Javaと同じ理由? ch…

Shell commands

Erlang練習帳。 Shell Commands http://erlang.org/course/sequential_programming.html#shell h()で、直近の20コマンドを表示する。 1> X = 1. 1 2> Y = 2. 2 3> Z = 3. 3 4> h(). 1: X = 1 -> 1 2: Y = 2 -> 2 3: Z = 3 -> 3 ok b()で、束縛された変数を表…