Как стать автором
Поиск
Написать публикацию
Обновить
0.2

Erlang/OTP *

Функциональный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Использование инструмента трассировки событий в Erlang

Время на прочтение4 мин
Количество просмотров2.3K
Вот одна из распространённых проблем многопоточных(concurrent) систем: события возникают постоянно в разных частях программы в разное время, и у вас нет возможности контролировать причину и время их возникновения. Чтобы отследить проблему, мы зачастую можем воспользоваться диаграммой последовательностей. Например, такой (спасибо Wikipedia):



Предназначение данной диаграммы — показать взаимодействие между различными параллельными компонентами системы. В данном примере Fred, Bob, Hank и Renee в ресторане. Каждый может легко нарисовать подобную диаграмму на бумаге. Проблема в том, что наброски на бумаге могут отличаться от того, что происходит во время выполнения вашей программы.

Правда было бы здорово, если бы вы могли строить похожие диаграммы на основе данных трассировки программы автоматически? Что ж, Erlang вам в этом поможет.
Читать дальше →

Пишем модуль для Ejabberd

Время на прочтение9 мин
Количество просмотров6.9K
Если вам нужна нестандартная функциональность от XMPP сервера ejabberd, вы не знаете, как это настроить штатными средствами и не нашли подходящего для этого модуля, то можно написать этот модуль самим.

Так я решил, когда начальство объявило войну пустой болтовней в jabber-е, для чего необходимо было запретить некоторым пользователям чатица с другими, но разрешить с третьими. И хотя у меня всё ещё есть смутное подозрение, что это можно настроить с помощью списков доступа, я решил написать модуль, которым мне будет удобно пользоваться. Этот модуль и послужит примером для рассказа.
Читать дальше →

Разработка веб-приложений при помощи Webmachine

Время на прочтение4 мин
Количество просмотров4.1K
Если вы по каким-либо причинам заинтересованы в разработке веб-приложения на Erlang, то у вас возникнет закономерный вопрос, какую из имеющихся технологий для этого использовать: взять один из существующих веб-серверов, таких как YAWS, Mochiweb, Misultin (назову их так, хотя некоторые из них называют себя фреймворком для построения веб-серверов) или воспользоваться чем-то готовым, например Zotonic CMS или Nitrogen.
Задавшись этим вопросом, вы наверняка найдёте этот пост на Stackoverflow, в котором довольно подробно рассмотрены все плюсы и минусы различных подходов.

В данной статье автор попытался раскрыть тему использования Webmachine для создания веб-ресурсов.
Читать дальше →

Использование контролёров для того, чтобы удержать ErlyBank на плаву

Время на прочтение8 мин
Количество просмотров2.4K
Это четвертая статья в серии «Введение в ОТП». Если вы только что присоединились к нам, рекомендую начать с первой части, в которой говорится о gen_server и закладывается фундамент нашей банковской системы. Если же вы способный ученик, можете взглянуть на готовые к настоящему моменту модули: eb_server.erl, eb_event_manager.erl, eb_withdrawal_handler.erl и eb_atm.erl.

Сценарий: Момент, который нам нравится в банках и банкоматах, заключается в том, что они всегда на том же месте. Используя банкомат, мы можем снять или положить деньги когда захотим, 24 часа в сутки. Или пойти в любое отделение банка, когда оно открыто, зная, что будем иметь полный доступ к нашим финансам. Чтобы гарантировать это, необходимо быть уверенным в том, что наша система автоматизации ErlyBank всегда остается рабочей: процессы должны быть запущены постоянно. ErlyBank поручил нам реализовать эту цель. Стопроцентный uptime! (Или настолько близкий, насколько мы сможем обеспечить)

Результат: Используя контролёр (supervisor) OTP, мы создадим процесс, чья обязанность — следить за запущенными процессами и удостовериться, что они активны.
Читать дальше →

Компиляция «на ходу» в эрланге

Время на прочтение2 мин
Количество просмотров1.9K
В некоторых случаях бывает удобно скомпилировать определенные части программы во время работы приложения. Например, в мире явы так происходит компиляция веб сервером .jsp страниц в сервлеты. Другими возможными применениями подобной техники являются разные языки шаблонов, регулярные выражения и т.д.

В эрланге транслятор встроен в библиотеку времени исполнения, и позволяет полностью управлять всеми стадиями трансляции.

Как это сделать
Читать дальше →

Принудительное приведение типов в Erlang

Время на прочтение6 мин
Количество просмотров2.9K
Принудительное приведение типов в Erlang

Erlang — во многом уникальный язык. Я начал его изучать недавно, и, хотя имею более десяти лет опыта в программировании, он продолжает меня удивлять своей гибкостью и удобством в различных моментах.
Но есть одно большое «НО», которое отсутствует в Erlang — это автоматическое приведение типов. Как человек, развращенный неявным приведением типов в большинстве современных языков программирования, я набросал модуль, который позволяет не задумываться о типе исходных данных.
В процессе написания собственной CMS на базе Erlang я постоянно пользуюсь им и рекомендую его для других программистов на Erlang.
Читать дальше →

Введение в gen_event: Уведомления об изменениях счета

Время на прочтение8 мин
Количество просмотров4.3K
От переводчика: попытаюсь подхватить флаг, брошенный tiesto из-за недостатка кармы (кстати, огромное ему спасибо за первые переводы; именно благодаря им я узнал об авторе, чей цикл статей надеюсь продолжить переводить).

Ссылки на предыдущие части можно найти в конце статьи.


Это третья статья в серии «Введение в ОТП». Рекомендую начать с первой части, в которой говорится о gen_server и закладывается фундамент нашей банковской системы, если вы до сих пор не сделали этого. С другой стороны, если вы способный ученик, можете взглянуть на готовые модули eb_atm.erl и eb_server.erl.

Сценарий: С появлением программного обеспечения для центрального сервера и банкоматов на местах, ErlyBank начал оптимистично воспринимать свою технологическую базу. Но в качестве средств защиты от одного из конкурентов они хотели бы реализовать систему, которая отсылает уведомления при снятии определенного количества наличиности. Они хотят иметь возможность изменять пороговое значение суммы вывода наличных, после которого срабатывает уведомление, без перезагрузки ПО. Руководство решило нанять нас, чтобы модернизировать текущую версию в соответствии с поставленной задачей.

Результат: Мы создадим систему уведомлений, основанную на событиях, используя gen_event. Это даст нам базовый фундамент для создания в будущем и других уведомлений, в то же время позволяя легко интегрироваться в текущее серверное ПО.
Читать дальше →

Паралелльная генерация plt файлов для Dialyzer (с депами и плюшками)

Время на прочтение2 мин
Количество просмотров1.5K
Все, кто хоть раз занимался использованием dialyzer для своих приложений знает, что ему надо бы сперва подготовить plt файлы для основных аппликейшенов из поставки самого erlang'а.

Генерация идёт нагружая только одно ядро и довольно долго, в связи с чем появилось большое желание запускать генерацию параллельно.

Обновлено: добавлен патч (и отправлен пулл реквест, разумеется) к dialyzer добавляющий фичу мержа нескольких plt в один большой-и-толстый.
Читать дальше →

Spawnfest ↺ July 9-10, 2011

Время на прочтение1 мин
Количество просмотров598
Spawnfest — ежегодное 48-часовое соревнование разработчиков на языке Erlang, где Вы можете посоревноваться с другими разработчиками в создавании самого лучшего приложения Erlang, библиотеки или чего-либо еще, что Вам нравится! Событие произойдет 9-ого и 10-ого июля.

Огранизаторы говорят, “Мы надеемся, что Spawnfest поможет сплотить сообщество разработчиков Erlang и заинтересовать людей нашим любимым языком программирования.”

Если Вы видели Rails Rumble минувших лет, Вы знаете, чего может достигнуть талантливая команда за выходные.

Спонсорами мероприятия являются Github, Erlang Solutions, Spawngrid, O'Reilly, Manning и другие компании.

В число судей входят Bob Ippolito и Ulf Wiger.

Неблокирующий TCP сервер без использования undocumented features

Время на прочтение5 мин
Количество просмотров5.2K

Введение


В замечательной статье с trapexit «Building a Non-blocking TCP server using OTP principles» рассказывается, как построить неблокирующий TCP сервер используя принципы OTP. Думаю, каждый, кто начинал изучать elrlang рано или поздно сталкивался с этой статьей. Для построения неблокирующего TCP сервера в указанной выше статье используется недокументированный функционал из модуля prim_inet.

Не буду филосовствовать хорошо или плохо использовать undocumented features, в некоторых «костыльных» решениях это действительно нужно, в продакшене я бы предпочел использовать проверенные средства. На заметку, даже в самой статье автор предупреждает: "Examining prim_inet module reveals an interesting fact that the actual call to inet driver to accept a client socket is asynchronous. While this is a non-documented property, which means that the OTP team is free to change this implementation, we will exploit this functionality in the construction of our server [1]."
Читать дальше →

Строю сайты! Like a boss

Время на прочтение6 мин
Количество просмотров3.3K
Like a boss

www.youtube.com/watch?v=NisCkxU544c

Посмотрев презентацию Юрия (yrashk) с Erlang Conference о веб-фреймворках в эрланге я заинтересовался и решил сделать сайтик не на node.js, как намеревался изначально, а используя какой-нибудь эрланговский фреймворк.

В итоге я наткнулся на фреймворк Chicago Boss. Про сам фреймворк я слышал и раньше, но пользоваться пока не довелось.

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

Моделируем полёт PHP на крыльях Erlang

Время на прочтение10 мин
Количество просмотров9.2K
В данной статье изложены размышления и фантазии на тему «как можно было бы скрестить Erlang и PHP, чтобы случилось вселенское счастье», а не описание готовой технологии или продукта. Впрочем, мы намерены это реализовать, скорее всего, в форме open-source проекта, если, конечно, уважаемая хабра-аудитория не отговорит :) Собственно, одна из главных задач этой статьи — понять, насколько идея интересна и потенциально полезна широкому PHP-сообществу. Кстати, некоторые из проблем, обсуждаемых в статье, справедливы и для других популярных скриптовых языков (тут я подразумеваю Ruby и Python), так что предлагаемое решение, возможно, будет актуально и для них.
Интересно, нафига козе баян?

erlanger.ru едет на Erlang Factory 2011 в Лондоне

Время на прочтение1 мин
Количество просмотров665
erlanger.ru едет на Erlang Factory 2011 в Лондоне.Так как программа конференции уже объявлена, планиурется посетить следующие презентации (из тех, что пересекаются по времени):
Читать дальше →

Ближайшие события

Архитектура памяти: Erlang против Java

Время на прочтение4 мин
Количество просмотров12K
Я прочитал очень-очень интересную статью «Стратегии управления памятью для Erlang VM». Она была написана в качестве диссертации Джеспером Вильхельмсоном. Я подумал, что было бы неплохо обсудить различия между управлением памятью в Erlang и Java VM от Oracle.
Читать дальше →

sasl:overload. Или — «не кладите в тарелку больше, чем она может вместить»

Время на прочтение2 мин
Количество просмотров1.6K
Эрланг отличная платформа для построения серверов, и в его стандартной библиотеке предусмотрены многие средства заметно облегчающие жизнь разработчика.

Одной из типовых задач разработчика серверов промышленного уровня -является контроль загрузки. То есть наш сервер должен вести себя адекватно даже если запросов приходит больше, чем может обработать сервер (на нашем железе).

Это собственно является одним из ключевых отличий «наколенных» решений от «энтерпрайс». Настоящий, хорошо спроектированный сервер «в курсе», что он не может тратить ресурсы безгранично, ведет учет ресурсов и контролирует загрузку.

Как это делается?
Читать дальше →

Erlang Web

Время на прочтение4 мин
Количество просмотров7K
Erlang Web — платформа с открытым исходным кодом для приложений, основанных на протоколе HTTP. В настоящий момент поддерживаются веб-серверы INETS и Yaws. Erlang Web разрабатывался в Erlang Training & Consulting Ltd. в течение прошлых трех лет и используется во многих коммерческих и открытых проектах.

Применение


Проекты, использующие Erlang Web:

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

Elixir

Время на прочтение4 мин
Количество просмотров46K
Erlang является уникальной по своим возможностям платформой, и не смотря на это, язык до сих пор является экзотикой. Причин существует несколько. Например, тугая арифметика, непривычность синтаксиса, функциональность. Это не недостатки. Это просто вещи, с которыми большинство программистов не могут или не хотят работать.

Несколько дней назад Jose Valim опубликовал в своем репозитории проект языка, построенного поверх Erlang. Этот язык обладает простой объектной моделью и Ruby-подобным синтаксисом. Под катом выжимки из документации и видео, демонстрирующее простой пример.

disclaimer: %username%, прежде чем делать выводы насчет того, что умеет, а что не умеет elixir, просьба глазами пройтись хотя бы по readme.

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

Logging. «Из коробки»

Время на прочтение8 мин
Количество просмотров6.3K
Ведение логов применяется в каждом программном продукте, дожившем до стадии продакшена. Erlang предоставляет программистам целую экосистему, которая включает и механизмы слежения за приложением. В этой части я рассмотрю именно функционал «из коробки».
Читать дальше →

Слежение за процессами и обработка ошибок, часть 3

Время на прочтение3 мин
Количество просмотров5.7K

Преамбула


В предыдущих частях (часть 1, часть 2) мы полностью рассмотрели механизм создания двунаправленных связей между процессами и процесс распространения ошибок. В данной статье будет разобран, достаточно простой, механизм мониторов и ещё несколько аспектов касающихся работы с процессами.
Читать дальше →

Слежение за процессами и обработка ошибок, часть 2

Время на прочтение4 мин
Количество просмотров3.8K

Преамбула


В первой части данной статьи мы рассмотрели механизм связей между процессами и процесс распространения ошибок. Сегодя давайте рассмотрим один случай, который не был освещен в предыдущей части – постреляем по процессам сигналом kill.
Читать дальше →

Вклад авторов