erlang

マクロでerlang:qlcモジュールの妙な制限を撤廃する

Qlcモジュール erlangにはリスト内包表記でクエリを記述できるqlcモジュールというものが標準で付いており、それをelixirから利用するためのモジュールがQlcだ。hex.pmに登録してあるのでmix.exsにdepsするだけで利用できる。インストールしたのちの話だが、…

QLC for elixir

QLCとはerlangのリスト内包表記を使ったクエリ書式であり、リストやEts, Dets, Mnesiaなどに対応している。今回はこれをelixirで使えるようにしようと思う。 qlcの使い方 基本的には、erlangなので変数は大文字で、 [Expression || Qualifier1, Qualifier2, …

shinjuku.ex#7

久しぶりに開催されたshinjuku.exに参加。今年に入ってからelixir界隈はにぎわってきていて、 Programming Elixir のような書籍が現れてきた。他にもオライリーからも出版されてきている。そんな背景と関係あるのか無いのか、今回はKDDIウェブコミュニケーシ…

erlang like record manipulator

rabbitmqのクライアントamqp_clientをelixirで使おうと思ったのだが、erlangのrecordを使い倒していて困った。elixirにもレコードはあるし、erlangレコードをコンバートする事も出来るのだが、-includeを追いかけてくれないとかのelixirのRecord.extract_fro…

Elixir v0.5.0 releasedの超意訳

はじめのお断り これはPlataformatec社のコンテンツを勝手に翻訳したものです。 追記: twitterで翻訳した旨伝えたところ、怒られなかったです TOEICの成績がヤバすぎる私の超意訳なので、突っ込み歓迎。 文中の「私」は作者のJosé Valimを指します。 では行…

elixirはプログラマの万能薬になるか その4

今回はマクロプログラミングをelixir自身を例題にしていこうと思うが、マクロをプリプロセッサと勘違いしている人も多いので、まずは入門から。 マクロ入門 Elixirのマクロは、コンパイルプロセス中において、構文解析後のツリーを入力として、別のツリーを…

elixirはプログラマの万能薬になるか その3

前回はrubyなところを主に説明してきたので、いよいよ今回はLispな所であり、個人的に最もエキサイティングだと感じているメタプログラミングについて記述する。 メタプログラミング プログラムを書くプログラムを書く事をメタプログラミングと呼ぶ。Cのプリ…

elixirはプログラマの万能薬になるか その2

前回のエントリの続きで、elixirの「ふつうの」言語である側面の説明となる。とはいうものの、関数型言語になじみがない人にとっては新鮮かもしれない。 内容は、Redirecting…とほぼ同じになってしまっている。 データタイプ 基本データタイプ 基本データタ…

elixirはプログラマの万能薬になるか

erlang/OTP界隈でreiaというrubyフレーバーの言語が開発されて以来、erlang/OTP上で動作する言語がいくつか開発されている(efene, LFE(Lisp Flavoured Erlang)など)。どれも、erlang/OTPの独特な機能である、並行性、動的アップグレード、対障害性などをもっ…

otp-R14B04とwxWidgets-2.8.12

otp-R14B04がリリースされたのでビルドしてみると、wxWidgetsを使うアプリケーションを起動しようとするとエラーとなることが分かった。 =ERROR REPORT==== 7-Jun-2009::12:17:09 === WX Failed loading "wxe_driver"@"/usr/local/lib/erlang/lib/wx-0.98.1/…

自分自身のソースを出力するプログラム

hq9+というジョークプログラミング言語を通じて「自分自身のソースを出力するプログラム」を書く事が言語によっては難しい課題である事を知り、erlangで実装してみる事に。 問題の構造 selfn.erl: -module(selfn). -export([start/0]). start() -> {ok, A} =…

erlang-modeでのテンプレートを使った作業

emacsでerlangのコードを書くことが多いと思うが、erlangの標準配布物に含まれているerlang-modeに入っているテンプレートについてまとめてみた。 テンプレートの種類 small-header ファイル名から、モジュール宣言してくれるだけ。 module small-headerと同…

gettextその後

えー。どうも全然お気に召されないようで、集中砲火を浴び、撤退しました。 彼らの言分は、「UTF8で入力されるデータを言語を変換してUTF8で出力する」モジュールらしい。で、私はそれについて、「erlangでは文字リテラルはUCSだからUCSを入力としてUCSを出…

erlang_gettextと(erlang)gettext

erlang_gettextはdeprecatedで、etnt/gettextが現行らしい。だが、そこでも同様の問題が残っていた。 そこでクイックハック。調べた所、file:read_file/1した後detsに格納する際に、そのままbinary_to_list/1して書き込んでいた。OTP13Bからはunicode対応し…

OTP-R14Aとerlang_gettext

ここのところ #prfm やら #aira やらの記事ばかりだったので、ちょっとerlangの話題も。 erlang OTP-R14A しばらく見ていない間にerlangでOTP-R14Aがリリースされていたのでアップグレードしてみた。なお、OTPでは末尾がAとなっているのはベータ扱いなので、…

yawsのwebdavサポートの謎

HTTPでファイルサーバにアクセスできるwebdavって便利ですよね。並行指向パラダイム言語のerlangで開発されているWebサーバyawsでもwebdavサポートがされているらしいので、早速試した見たという話。 設定 yaws.confのバーチャルサーバセクションに以下のよ…

erlywebでテンプレートの再コンパイル

erlywebにはErlTemplateというテンプレートがあるが、erlyweb:compile/2でコンパイルする必要がある。開発の初期は気にならないが、いったんローンチしたあとにテンプレートを変更したいときにどうすればいいのかを調べてみた。 こうならいいな erlからerlyw…

tcp server

OTPなTCP serverってどうやって作るのだろうか、gen_serverはいまいち使えない気が、と思っていたら、http://www.trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principlesにチュートリアルが。gen_serverとgen_tcp:accept/1は相性が悪いので…