2010

Erlang gen_server_cluster

(2010-04-01)

Distributed server

Let's discuss the following situation: chat server, written in erlang should properly work, being distributed on several computers. At least on of its components must be globally registered: it is resolver, that can tell pid of exact chat room by its name.

Issue on trapexit: A Framework for Clustering Generic Server Instances give us some good information about solution of this problem. I will repeat main points of that article:


Читаем дальше

Как прочесть mp4

(2010-04-01)

Формат файлов mp4, он же QuickTime format в девичестве, он же после доработок ISO Media (ISO/IEC 14496-14) представляет из себя контейнерный формат для упаковки аудио, видео, текста и т.п. Поскольку сам по себе формат является достаточно обобщённым, то хранить в нём можно как всегда что угодно, так что вопрос не в его синтаксической интерпретации (она простая), а в его семантической интерпретации.


Читаем дальше

Erlang records

(2010-02-23)

В эрланге есть такая синтаксическая форма как записи. Это ни в коем случае не семантическая структура, а просто syntax sugar.


-record(article, {
  id,
  user_id = 0,
  body = <<>>,
  published = false
}).

Хочу немного прояснить как они используются и что это вообще такое для тех, кто ещё только начинает знакомиться с эрлангом.


Читаем дальше

Erlang modules on fly

(2010-02-03)

В erlyvideo есть одно неприятное место: в конфиге можно указать несколько виртуальных хостов и каждому из них будет соответствовать собственный сервер, хранящий ссылки на видеопотоки. Супервизор каждого сервера надо именовать, причём атомом, например для хоста default супервизор будет называться media_provider_sup_default. Генерация такого названия достаточно неприятно выглядит:


Name = binary_to_atom(<<"media_provider_sup_", 
                      (atom_to_binary(Host, latin1))/binary>>, latin1).

Технические проблемы на этом заканчиваются, но мне захотелось попробовать, как сделать автокомпилирующийся
на каждой реконфигурации модуль, в котором все vhost-ы забиты в клозы функций. Такой трюк может понадобиться например если такое преобразование происходит очень часто.
В случае со склейкой строк, на каждом вызове функции будет создаваться два бинари. Если же скомпилировать это в модуль, получится многократно быстрее, потому
что не будет никаких лишних выделений памяти. Сделать это оказалось несложно:


Читаем дальше

Sidebar