Метка «erlang» - 3

В этой статье я расскажу о том, как мы подружили Cache + Erlang, и зачем нам это нужно. СУБД Cache была выбрана в качестве хранилища данных. Также мы создали и эксплуатируем MCA(Middleware for Cache Applications) — промежуточное программное обеспечение, обеспечивающее конкурентную модель взаимодействия Erlang и Cache.

Для взаимодействия Erlang и Intersystems Cache реализованы возможности:

  • Обрабатывать в Cache сообщения из Erlang, транслируя Erlang tuples (внутренний древовидный формат данных Erlang) в глобалы Cache.
  • Посылать из Cache сообщения процессам Erlang, транслируя глобалы Cache в Erlang tuples.

Разработанное MCA состоит из трёх основных компонент:

  • Message Dispatcher(MD) — управляет обменом сообщениями в конкурентных условиях между различными Erlang-node(EN) и Cache-процессами, обеспечивает кэширование сообщений по определенным правилам. Запускается в соответствующем EN.
  • C-node — обеспечивает подгрузку С/C++ библиотек и обмен сообщениями между ними, взаимодействие системы с shared-memory, EN, CallIn/CallOut (функциональностью, реализованной в Cache на языке С) и т.д. На данный момент к С-node, для веб-приложений, c использованием Cache, нами подключены библиотеки для поддержки XSLT преобразования, обработки регулярных выражений.
  • Porte – шлюз обмена сообщениями (Messaging Gateway) c MD для Cache. Запускается как отдельный background job, который будем называть Porte-job(PJ).

Читать полностью »

Представьте, есть две комманды разработчиков: одни пишут на C#, другие — на Эрланге.
Первые хотят использовать функции из продуктов вторых.
Отлично, надо договориться об API, реализовать его и выдать документацию Шарповым ребятам.
На основе чего будет реализован этот API?
Подумав, пришли к выбору между SOAP и REST.

Поговорим о поддержке данных технологий нашими платформами.

C REST всё понятно: нужны инструменты для работы с HTTP и XML/JSON.
Читать полностью »

Статья для людей, только начинающих знакомиться с эрлангом: как написать простой comet сервер.

Готовый код здесь: github.com/maxlapshin/comet

Описание

Комет-сервер будет написан с использованием cowboy, tinymq, и куска жабаскрипта.

Код выложен на гитхабе с тегами. Основные этапы помечены тегами, можно откатиться, чтобы посмотреть, что именно было сделано в тот или иной момент.

Сама статья пишется параллельно с кодом, что заметно из истории в гите.

Логика такая: по http постим сообщение на сервер, оно попадает в очередь сообщений, откуда его выгребает клиент через long-poll запрос.

Читать полностью »

Главная морская конференция в этом году пройдет 17-23 сентября в Черногории, городке Петровац.

image

IT Sea — это не только доклады и новые знакомства, это — креативная среда, море, солнце, экскурсии, посиделки у костра.

В программе:

  • Круглый стол о будущем Frontend разработки, доклады о JavaScript, Flash (Stage3D), функциональном программировании (Erlang, Closure).
  • Докладчики из Германии, России, Беларуси, Черногории, Македонии.
  • Коллеги перебравшиеся жить в Черногорию поделятся своим опытом по смене обстановки и дадут несколько советов планирующим переезд.
  • Конференц — зал, расположенный в старой венецианской крепости =)

Читать полностью »

Сегодня вышел Erlang плагин для IntelliJ IDEA.
Он бесплатен, доступен как в Community Edition, так и в родственных продуктах: RubyMine, PyCharm, WebStorm и т.д.

Основные возможности

  • Подсветка синтаксиса
  • Автодополнение имен функций, переменных, записей и ключевых слов
  • Поиск по коду для функций, модулей, переменных и записей
  • Базовые рефакторинги: rename и safe delete
  • Навигация по коду: structure view и go to declaration
  • Просмотр докумендации для функций и модулей (edoc формат)
  • Базовый форматтер
  • Подсветка unresoved переменных и записей

Это релиз с набором базовых возможностей для редактирования кода и навигации по проекту, написанному на языке Erlang. Основной его целью понять напраление дальнейшего развития.
Читать полностью »

Когда я первый раз услышал об объектно-ориентированном программировании — сразу отнёсся к нему скептически. Честно говоря, даже не знаю, почему. Просто оно показалось мне каким-то неправильным. Но ООП очень быстро стало популярным (почему — я объясню ниже) и критика в его адрес превратилась в этакую «ругань в церкви». А объектно-ориентированность стала обязательной составляющей любого уважаемого языка программирования.

С ростом популярности Erlang часто стали задавать вопрос «— А Erlang — объектно-ориентированный?». Правильный ответ был бы «— Да что вы, нет!». Но мы не могли так заявлять в полный голос, поэтому пришлось выкручиваться. Мы придумали несколько достаточно нетривиальных ответов, которые бы представляли Erlang типа-объектно-ориентированным языком (для тех, кто больше всего тянет руку с этим вопросом), но при этом и не объектно-ориентированным для тех, кто на самом деле в теме.
Читать полностью »

Вступление

В статье мы попробуем написать игру крестики-нолики на поле размером 10x10, игрока (человека) с ботом (компьютер) с возможностью игры через браузерЧитать полностью »

в 13:23, , рубрики: erlang, Erlang/OTP, метки:

Иногда не хватает в Erlang этой интересной особенности, вот и захотелось мне в заиметь эту фичу.
Читать полностью »

Не так давно наткнулся на одну интересную возможность в Erlang. Если вместо названия модуля при вызове функции передать кортеж, где первый элемент — название модуля, то будет вызвана функция
арностью на единицу больше вызываемой и последним аргументом будет тот самый кортеж.

Пример:

-module(my_module).

-export([test/2]).

test(Arg1,{?MODULE,Arg2}) ->
  io:format("Arg1:~p~nArg2:~p~n",[Arg1,Arg2]).

Можно вызвать как:

my_module:test(1,{my_module,2}).

или так

{my_module,2}:test(1).

Читать полностью »

Не так давно наткнулся на одну интересную возможность в Erlang. Если вместо названия модуля при вызове функции передать кортеж, где первый элемент — название модуля, то будет вызвана функция
арностью на единицу больше вызываемой и последним аргументом будет тот самый кортеж.

Пример:

-module(my_module).

-export([test/2]).

test(Arg1,{?MODULE,Arg2}) ->
  io:format("Arg1:~p~nArg2:~p~n",[Arg1,Arg2]).

Можно вызвать как:

my_module:test(1,{my_module,2}).

или так

{my_module,2}:test(1).

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js