Весь список Erlang eXchange 2008
По этой сылке можно найти все видео и все слайды с конференции Erlang eXchange 2008
Erlang Contextual Code Completion Library
Erlang Contextual Code Completion Library
Набор библиотек, позволяющих реализовать контекстно-зависимое автодополнение кода в любом редакторе кода.
Слайды: RabbitMQ
RabbitMQ: Open-Standard Business Messaging
in 5000 lines of Erlang
Слайды с конференции Erlang eXchange 2008. Авторы: Matthias Radestock и Tony Garnock-Jones из LShift Ltd.
EIFAWS - Erlang + Amazon Web Services
Видео с Erlang eXchange 2008
Видео с конференции Erlang eXchange 2008 находятс на Google Video по запросу Erlang eXchange 2008
Темы некоторых видео:
- Erlang Enterprise Integration
- Keynote: Armstrong on Software
- Erlang + D-Trace
- ejabberd for Web 2.0
- Couch DB at 10,000 feet
- Quick Check for Erlang
- Wrangler
- Building a Transactional Data Store
и т.п.
Log4erl
Логгер для Эрланга. Цель проекта - реализация всех свойств семейства Log4* (особенно Log4J)
Получить можно здесь: http://code.google.com/p/log4erl
etorrent
etorrent - это полноценный битторрент-клиент, написаный на Эрланге.
Получить его можно здесь: http://code.google.com/p/etorrent/
Mnesia Unlimited
Неутомимый Joel Reymont закончил свою работу над Мнезией. Теперь Мнезию можно использовать в качестве фронт-енда к любой базе данных, будь то BerkleyDB, MySQL или Tokyo Cabinet
Новая мнезия доступна здесь:
- http://code.google.com/p/mnesiaex/
Там же - пример с использованием Tokyo Cabinet.
Frabjous
Кевин Смит представляет библиотеку frabjous (доступную с сайта GitHub здесь: http://github.com/kevsmith/hypotheticalabs/tree/master).
Frabjous является оберткой над Erlang parse transforms:
- общается напрямую с компилятором, избавляя от необходимости пробегаться по всему дереву AST
- определяет новое поведение (behaviour), ast_transformer, которое можно испольовать для задания parse transforms.
Короткий пример:
-module(pt_test).
-define(SERVER, ?MODULE).
-include_lib("frabjous/include/frabjous.hrl").
-frabjous([{remote_call, [{debug, true}]}]).
-behaviour(gen_server).
Подключив frabjous.hrl, мы "включили" frabjous.
Трансформатор remote_call принимает атрибуты следующим образом:
-call_gen_server([{server, ?SERVER},
{name, add},
...
Erlang + Aptitude
I'm in ur Erlangz, upgrading ur applicationz
Dukes of Erl все не могут угомониться. На этот раз они написали систему, которая позволяет осуществлять горячую замену кода в приложениях, используя Линуксовый apt-get.
Код проекта доступен на Google Code
Настройка ErlyWeb и PostgreSQL
Configuring Erlyweb with postgres
Небольшая статья, описывающая, как настроить ErlyWeb для работы с PostgreSQL
Reia - Ruby/Python для Эрланга
Reia предлагает смешаную парадигму программирования в стиле Питона/Руби. На данный момент цель проекта - компиляция в Erlang AST, который можно скормить компилятору Эрланга.
Ejabberd как основа cloud computing
Serl - Lisp-frontend к Эрлангу
Twoorl
Twoorl - это опенсорсный клон Twitter'a, созданый неуемным Яривом Саданом с помощью ErlyWeb'а
Erlang by example
В продажу поступили первые скринкасты из серии Erlang by example:
- Episode 1: Sending and Receiving Chat Messages (30 mins)
- Episode 2: Messaging Clients By Nickname (29 mins)
- Episode 3: Distributing Clients In A Multi-node Environment (31 mins)
Каждый эпизод стоит 5 долларов. Автор - Kevin Smith
leex- a lexical anaylzer generator
Настройка Emacs
Очередной web-framework
derail - A simple web framework
Torbjorn Tornkvist обхявил о создании еще одного веб-фреймворка для Эрланга.
Особенности фреймворка:
- интеграция в Erlware
- поддержка шаблонов SGTE
На данныый момент собственно релиза нет, код фреймворка генерируется их спецификации (10 строк)
Сам фпеймворк доступен из erlware
Использование tail
Monitoring log files with 'tail'
Статья описывает, как использовать *nix'овую команду tail для отслеживания изменений в log-файлах
Erlbol
Проект Erlbol использует REBOL для создания пользовательских интерфейсов
- Скриншоты
- Документация
- Скачать
QuickCheck demo
Haskell в среде Эрланга
Статья описывает результаты выполнения программ, написаных на Haskell'е в контексте Erlang VM.
Программа, написаня на Хаскеле, копилируется с помощью Yhc Haskell Compiler. Полученый код компилируется в Erlang Core с помощью программы, описаной в статье. После чего полученая программа компилируется в BEAM
Позднее связывание в Эрланге
Автор статьи обнаружил, что MochiWeb использует параметризированые модули, позволяющие реализовать позднее связывание в Эрланге. Статья описывает пример использования параметризированых модулей
Erlang vs. Scala
Довольно длинное сравнение, которое может служить введением как в один, так и в другой язык
Facebook Chat
Описание того, как Эрланг помог разработчикам Facebook'а создать чат, могущий обслуживать до 70 миллионов активных пользователей.
Документация по distel'у
OCamerl - пример
Ocamerl - Erlang … echo-ing in shells
Небольшой пример работы с библиотекой erlocaml.
Opensource приложение на ErlyWeb
FluxHP - World of Warcraft guild DKP/HP manager
Посмотреть на то, как оно работает можно здесь: http://points.flux-medivh.com/
dsl_erlang demo
Если вы помните, Torbjorn Tornkvist решил создать Natural Language DSL Engine, который позволил бы задаваь запросы к Mnesia на более-менее человеческом языке.
Появилась возможность проверить это на практике
Процес установки (с помощью следующий):
wget http://faxien.googlecode.com/files/faxien-launcher-universal-0.3.3.pysudo python faxien-launcher-universal-0.3.3.py
sudo /usr/local/erlware/bin/faxien install-release dsl_engine_demo
/usr/local/erlware/bin/dsl_engine_demo
После этого достаточно перейти в браузере по адресу http://localhost:9898/ и попробовать свои силы (или посмотреть на примеры).
В демо включены две таблицы:
invoice : table that contains all data related to a particular invoice
create_date : the date, in format: YYYY-MM-DD , when the invoice was created
goods_sum : an integer representing the sum of all goods
invno : holds the unique invoice...
Новая версия Lisp-Flavored Erlang
- LFE - это Lisp-2, как Common Lisp, а не Lisp-1, как Scheme. Теперь в LFE функции и переменные разнесены по разным пространствам имен
- В примерах есть два интерпретатора - написаный на Эрланге и написаный на самом LFE
- Присутствует рудиментарный REPL
Остальные подробности - по ссылке
Tag clouds in Erlang with ErlyWeb
Tag clouds in Erlang with ErlyWeb
Статья, объясняющая, как создать облако тэгов с помощью ErlyWeb
Модуль Array
Начиная с версии R12B в Эрланге присутствует модуль array
Эта маленькая заметка описывает, как реализовать двоичный поиск, используя этот новый модуль
Hessian
Proposed Hessian Extension For Erlang
Статья, описывающая детали реализации двоичного протокола Hessian в проекте Cotton
wxErlang
Вышла новая версия GUI-библиотеки wxErlang
Скачать можно по адресу http://www.erlang.org/~dgud/wxerlang
RESTful Webservice
A RESTful web service demo in yaws
Короткая статья, описывающая, как создать веб-сервис с использованием REST в Yaws
Erlang/OTP R12B-2
Поддержка cookies в ejabberd
Add cookie support in ejabberd
Сттья описывает, как добавить поддержку cookies в ejabberd
Проверка распределенных программ
Verification of
Distributed Erlang Programs using Testing, Model Checking and Theorem
Proving
Докторская работа Ханса Свенссона
Erlide 0.3.4
Новая версия Erlide
В новой версии:
- поддержка R11B
- улучшеная консоль с подсветкой синтаксиса
- очистка ETS-таблиц, содержащих данные парсинга и анализа, при выходе из редактора
- лексическое сканирование потребляет меньше памяти
- кэширование документации и структуры файла (для функциональности Go to)
- корректная обработка включаемых файлов (теперь находятся определения в этих файлах)
- простое автодополнение имен модулей в редакторе
Friendsfeed API
Announcing the Erlang FriendFeed API
Friendfeed позволяет отслеживать людей на различных социальных сайтах. Yariv Sadan написал байндинг к его API
Проект доступне на Google Code
Новая версия парсера Erlsom
В новой версии:
- SAX-парсер работает напрямую с binaries, что дает прирост скорости и уменьшение потребления памяти в R12B
Дополнительные изменения в SAX-парсере:
- поддержка пользовательских сущностей (user-defined entities)
- улучшение и упрощение работы с continuation-функцией для поддержки работы в потоковом режиме
- значения на выходе могут быть binaries
Elsom теперь распространяетя под лицензией LGPL
Masterbrain - диспетчер типа rev-proxy
Если у вас есть несколько веб-систем, к каждой из которых хочется предоставить доступ через сайт и/или один и тот же порт, то зачем использовать сторонние компоненты, если можно использовать Эрланг?
На сервере только одна нода будет запущена с Yaws. Это мой веб-сервер. Я настраиваю docroot'ы Yaws для виртуального хостинга моих систем. Потом в каждом
.yaws-файле я помещаю один-единственный удаленный вызов к ноде, которая будет выполнять всю работу. Результат вызова должен быть понятен для Yaws.Это значит, что ни одной из моих систем уже не нужен отдельный Yaws-сервер. Это также означает, что нам больше не нужны традиционные прокси вроде lighttpd. Такой поход...
Crary - легковесный веб-сервер
Цель проекта - достаточно маленький и гибкий веб-сервер, который можно использовать практически для любых нужд... Crary можно легко встроить в приложение, чтобы получить веб-интерфейс к этому приожению или создать веб-сервис для этого приложения.
Пример использования:
start() ->
crary:start(8080, {?MODULE, handler, []}).
handler(#crary_req{method = "GET", uri = #uri{path = "/favicon.ico"}} = Req) ->
crary_dir_listing:write_file(Req, filename:join([my_doc_root(), "favicon.ico"])); ...
Erlang + Facebook
Еще одно приложение для Facebook'а, написаное с использованием Эрланга (Erlang + Mnesia + ErlyWeb)
- Приложение I Play WOW
- Описание
Новая книга по Эрлангу
У Прагматиков намечается новая книга по Эрлангу. В ней будет рассказано про OTP, mnesia, web programming (Yaws, Mochiweb, Erlyweb), а также освещены некоторые другие темы, такие как парсинг XML и юнит-тестироване
Бенчмарк Эрланга
В бенчмарке создается множество процессов и между ними пересылаются простые сообщения
Результаты:
C (pthread - GNU gcc): в 8.5 медленее
Python: в 15 x медленее, в 1.4 больше памяти
Java: в 20 x медленее, в 5.8 больше памяти
Ruby: в 282 x медленее, в 3.4 больше памяти
via Roberto Saccon
Natural language DLS engine
Как бы обернуть QLC так, чтобы человек, даже далекий от программирования, мог бы создавать запросы, возвращающие данные из таблиц Мнесиа.
Добываем dsl_engine.erl из гит-репозитория и начинаем:
X = dsl_engine:init(?MODULE,
["invoice","person"],
[{"invno", "invoice"},
{"estore", "invoice"},
{"goods_amount", "invoice",
...
Identation sensitive Erlang
Питон Эрланг, чувствительный к отступам? Легко: Indentation-sensitive Erlang
Пример:
-module(test).
-compile(export_all).
-scan(indentation).
f(X) ->
X+2
.
g(X) ->
X+4
.
h(X) ->
Y = case X of
a ->
{a}
b ->
{b}
end
Y
.
Простейший способ подвесить Erlang VM
Простейший способ подвесить Erlang VM
Достаточно построить огромное сопоставление с образцом
thx Кирилл Заборский
Exploring Erlang
Erlang + ICU
Hasan Veldstra выпустил альфа-версию библиотеки Starling, байндинга к ICU.
На данный момент библиотека поддерживает сравнение, конкатенацию, получение и нахождение подстроки, переключение регистров
- Home page
- Google Code
Плохой и хороший Эрланг
Why Erlang Sucks от создателя CouchDB Дамиена Катца
In Response to “What Sucks About Erlang” - ответ от создателя ErlyWeb Ярива Садана
Рекурсивные директории и binary pattern matching
Comet + Erlang
Небольшая библиотека, использующая jQuery:
git clone git://www.tornkvist.org/domerl
LYME vs. LAMP
Серия сравнений LYME(Linux + Yaws + Mnesia + Erlang) с LAMP(Linux + Apache + MySQL + PHP)
LYME - новый сайт
LYME - это Linux + Yaws + Mnesia + Erlang
Новый сайт, использующий эти технологии: http://www.dayfindr.com/
Быстрая перезагрузка скомпилированого кода
Часто возникает такой вопрос: как быстро перезагрузить изменный код?
"Русский хакер", предоставивший этот код, разыскивается, для благодарности
lm() ->
[c:l(M) || M <- mm()].
mm() ->
modified_modules().
modified_modules() ->
[M || {M, _} <- code:all_loaded(),
module_modified(M) == true].
module_modified(Module) ->
case code:is_loaded(Module) of
{file, preloaded} ->
false;
{file, Path} ->
CompileOpts =
proplists:get_value(compile, Module:module_info()),
CompileTime =...
ErlyBird 0.16.0
Обновилась IDE ErlyBrd.
По ссылке описание изменений.
Внимание. В новой версии изменился формат метаданных проекта, поэтому перед открытием старых проектов в файле project.xml необходимо заменить
<type>org.netbeans.modules.languages.erlang.project</type>
на
<type>org.netbeans.modules.erlang.project</type>
- Скачать
Простое приложение OTP с Mochiweb
Небольшая статья, описывающая создание небольшого приложения OTP, представляющее собой небольшой вебсервер, раздающий статические файлы
Erlang raytracer
Простой raytracer, написаный на Erlang'е. В планах автора - реальное ускорение производительности при запуске на нескольких машинах.
thx to Дмитрий Азараев за наводку
Lisp Flavoured Erlang
Роберт Вирдинг выпустил Lisp Flavoured Erlang фронт-енд к синтаксису Лиспа для компилятора Эрланга.
Полученый код совместим с "нормальным" кодом на Эрланге. Большинство "фич" работает, но кое-что еще не сделано:
- интерпретатор (не?) обрабатывает рекурсивные letrecs, binaries, receive и try
- нет lisp shell
Как говорит Роберт Вирдинг, пока нет.
Семинар по функциональному программированию
21 февраля в "Эрикссоне" состоялся семинар по функциональному программированию, на котором присутствовали такие люди, как
- Simon Peyton-Jones, Microsoft Research
- Satnam Singh, Microsoft Research
- John Hughes, Chalmers
- John Launchbury, Galois
Ulf Wiger выложил презентации каждого из участников:
- Simon Peyton-Jones: “Taming Effects - The Next Big Challenge”
- Satnam Singh: “Declarative Programming Techniques for Many-Core Architectures”
- John Hughes: “Testing with QuickCheck”
- Simon Peyton-Jones: “Composing Contracts - An Adventure in Financial Engineering”
makefiles и Erlang
[erlang-questions] Use of makefiles - and why we do
В рассылке некоторые упоминали различные системы сборки. Chandru упомянул систему, используемую в T-Mobile, а я так же предлагаю ознакомиться с кодом своей системы на GoogleCode, которую я представил на конференции в Лондоне.
Она еще не полна, в ней отсутствуют некоторые приложения, которые позволят ей работать "из коробки".
Хочется отметить, что erlang-t-build распределенная система сборки. Если система, на которой происходит сборка, многопроцессорная, то вы увидите, что нагрузка на CPU поднимется до 100%, а сама сборка проихойдет быстрее, чем на однопроцессорной системе.
Erlware: генерация документации
Если прилождение содержит документацию в edoc-формате, то эта документация будет автоматически сгенерирована и выложена в репозитории после загрузки приложения в репозиторий. То же относится и к информации по релизам ("control information")
Эта документация будет доступна в
Erlware -> Repository Applications
Erlware -> Repository Releases
на сайте http://erlang.org/
Простейший пул процессов
Статья о том, как организовать простейший пул процессов.
Пример использует модуль pool
Интервью с гуру CORBA Стивом Виноски
Interview: CORBA Guru Steve Vinoski on REST, Web Services, and Erlang
Интервью затрагивает C++, CORBA, REST, но в конце упоминается и Erlang.
Видео, 25 минут
Practical Erlang Mini-Interview
Practical Erlang Mini-Interview
Митни интервью с авторами книги Practical Erlang, которая готовится к выходу в O'Reilly
Ajax + Erlang
Небольшой пример того, как можно использовать Ajax и Erlang (Yaws)
Erlang и Great Computer Language Shootout
Erlang и Great Computer Language Shootout
Решение и ускорение одной из задач на Language sshootout
ejabberd 2.0.0
ejabberd 2.0.0 has been released
Вышла версия 2.0.0 ejabberd'a
- Release notes
- Changelog
- Скачать
Оптимизация Emacs+Erlang
Кортенькая статья, описывающая, как оптимизировать erlang mode для Emacs
ссылка исправлена, thx Кирилл Заборский
ErlyMate больше развиваться не будет
Roberto Saccon сообщил, что он больше не будет развивать проект интеграции Erlang'a в TextMate
Erlang с точки зрения CEO
Могу ли я, как CEO, порекомендовать Erlang? Нет, но я рекомендую использовать систему приложений (an application system). Такая комбинация на данный момент поставляется только в одном варианте - Erlang, но я уверен, что и другие скоро последуют...
Раздача Erlang/OTP в торрентах
По этой ссылке расположен список доступных для скачивания торрентов.
Введение в Erlang FFI
Введение в создание linked_in драйверов для Эрланга
возможно это введение стоит перевести на русский?
autoconf
Automatically generating Erlang/OTP .app and .rel files using GNU Autoconf
Короткая статья, описывающая, как можно использовать GNU Autoconf для (полу)автоматической генерации .app и .rel файлов
Home Subscriber Server
Реализация Home Subscriber Server внутри IP Multimedia Subsystem (IMS) Core Network (CN).
GSM/UMTS Charging Gateway
This project provides a 3GPP-compliant Charging Gateway Function (CGF) as a sink for SGSN/GGSN/etc streamed CDRs on the 3GPP Ga/Gz interface
Arc Challenge + ErlyWeb
Yariv Sadan предложил небольшой хак для ErlyWeb'а, позволяющий решить Arc Challenge так же элегантно:
Erlang + PayPal
Модуль, позволяющий подключиться к сервису PayPal "Website Payments Standard"
Использует код из mochiweb
Распределенная файловая система WalkenFS
Fragmentron - автоматизация Мнезии
Позволяет автоматически распределять данные по узлам, которые могут динамически добавляться в систему или исчезать из нее. Библиотека предназначена для работы в динамических средах типа Amazon EC2.
Используется в проекте WalkenFS
Erlang Fuse
fuserl - Erlang bindings for FUSE
Позволяет создавать файловые системы на Эрланге, используется в проекте WalkenFS
Книга от O'Reilly
Как уже было упомянуто, ходят слухи о возможной книге по Эрлангу от O'Reilly
Земля продолжает полниться слухами. Согласно Пату Айлеру (Pat Eyler), книга таки появится.
- Скорее всего название будет Practical Erlang (бок о бок с Practical Haskell)
- Авторы также преподают Эрланг
- Скоро появится вебсайт для книги
- Книга будет глубже, чем Pragmatic Erlang(хотя и не настолько обширная)
Встраивание YAWS в свои приложения
Embedded Applications with Yaws
Коротенькая статья, описывающая, как создать приложение, реализующее встроенный(embedded) yaws handler.
Erlang Challenge
Цель: Реализовать "продвинутую" параллелньную функцию map: функцию (F1), которая параллельно применяет другую функцию (F2) к каждому элементу (E) списка (L1) и потом собирает результаты в новый список (L2). Порядок элементов в L2 должен соответствовать порядку элементов в L1. Элементы списка L1 гарантированно неизменяемы, вне зависимости от того, что делает функция F2. Чтобы еще усложнить задачу, функция F1 также должна принимать список узлов из кластера (NL), на которые можно распределить вычисления. Каждое применение F2 к элементу из L1 должно происходить на случайном узле из NL, а результат должен отсылать обратно на узел (N), на котором была вызвана функция F1....
Динамическое изменение размера Mnesia
Dynamically sizing a fragmented mnesia store
Статья описывает некоторые подходы к использованию Mnesia на разных нодах
OTP Base вытесняется Sinan'ом
OTP Base (make-like система сборки приложений для Эрланга) временно "уходит в подполье".
Согласно сообщению автора, основной фокус будет на Sinan'е
Erlang Y-комбинатор
Интересная ветка, обсуждающая способы реализации Y-комбинатора в Erlang'е
Erlang/OTP R12B-1
Выпущен релиз R12B-1. Этот релиз устраняет некоторые баги предыдущего релиза.
Скачать релиз, как всегла, можно здесь: http://erlang.org/download.html
Замечания по релизу: http://erlang.org/download/otp_src_R12B-1.readme
Сервер приложений XMPP
Introducing the XMPP application server: The Twitter example
Статья описывает, как использовать протокол XMPP и ejabberd для создания веб-приложения по примеру Twitter'a
Парсинг тектовых и двоичных файлов
Parsing text and binary files with Erlang
Большая статья, описывающая работу с текстовыми и двоичными файлами.
Erlang - образ EC2
Идентификатор образа: ami-dd3fdab4
Образ собран поверх Ubuntu 7.10, стандартного дистрибутива R12B-0 и патча SSL через брэндмауэр.
Этот образ в дальнейшем планируется использовать для развития инфраструктуры viruerl. Подробнее о планах здесь: Thoughts on EC2 & virtuerl
Динамические переменные - хак
Dynamic variables hack in Erlang
"Грязный" хак, позволяющий уменьшить количество передаваемых в функцию аргументов. Использует process dictionary.
Пример:
player_greeting() ->
"Hello, " ++ dynvar:fetch(player).
test() ->
Greeting = dynvar:with([{player, "Dr. Falken"}],
fun player_greeting/0),
Greeting.
Вызов test/0 даст "Hello, Dr. Falken"
Книга "Hardcore Erlang" отменяется
Joel Reymont сообщил, что его книга hardcore Erlang не будет опубликована.
По его словам, в Pragmatic Programmers решили найти другого эксперта по Эрлангу и вбе-приложениям
Отладка с помощью Distel
Bil Clementson описывает, как использовать дебаггер Distel для отладки.
TrapExit снова в строю
TrapExit снова в строю.
За время его отсутствия на сайте появилось:
* erlangport, an Erlang port coded in python
* erltunnel, ap tunnel for TCP connections over http.
* neuron, a spiking neuron in Erlang
* eresye, an Erlang inference engine
* posregex, posix regular expression interface
Poker bots and state machines
Joel Reymont описывает, как он использовал state machines для автоматического тестирование своего покер-сервера
Скринкаст - Erlang на Mac OS X
facebook+ErlyWeb - как использовать concurrency
How to Use Concurrency to Improve Response Time in ErlyWeb Facebook Apps
Стандартный способ решения проблем выглядит примерно так:
1) получаем запрос
2) что-то делаем (обычно операции с базой данных)
3) вызываем Facebook API для отсылки сообщений/обнорвления новостных лент и/или профиля
4) возвращаем ответ
Но пункт 3) довольно долог, так как он вовлекает долгий обмен синхронными сообщениями с серверами Facebook'а
Поэтому лучше сделать так:
1) получаем запрос
2) что-то делаем (обычно операции с базой данных)
spawn(fun() ->
3) вызываем API Facebook'а
end)
4) возвращаем ответ
Единственная проблема в таком решении - если произойдет ошибка, нет возмоности уведомить об этом посетителя. С другой стороны, мы можем ошибку записать в лог и поставить в очередь...
Презентация
Free Session: In-the-Brain of Francesco Cesarini on Erlang for 5 Nines
Видео. 1 час 48 минут. История, примеры, продукты, ответы на вопросы.
Интересный момент: обещана книга про Erlang от O'Reilly в третьем квартале 2008-го года
Exception Conference #07
Exception Conference #07. Киев
15 марта 2008 года в Киеве состоится Exception Conference #07.
Тема конференции - динамические языки программирования.
А именно: Python, Ruby, SmallTalk, Haskell, Groovy и другие.Внимание! Ищутся докладчики.
Предлагаемые темы:
* GUI
* Web
* Сетевые приложения
* Разработка игр
* Системы контроля версий
* Базы данных
* Рефакторинг, TDD, XP, паттерны, ООП
* ORM
* Метапрограммирование
* Параллельное программирование
* Администрирование, автоматизация бизнеса
* VoIP
Думаю, самое время представить Erlang не ожидающей такого подвоха програмерской публике
Новый сайт на Эрланге
Позволяет с легкостью вставлять динамический контент, не заморачиваясь с HTML, FTP или чем-либо еще.
virtuerl
Библиотека, облегчающая работу с grid computing. На данный момент предоставляет обертку для Amazon Elastic Compute Cloud
Пример работы:
Keys = aws_keys:new("YourIdentifier", "YourSecretKey"),
case aws_instance:run(Keys, "gsg-keypair", "ami-0022c769") of
{ok, [H|_T]} ->
case aws_instance:terminate(Keys, proplists:get_value(instanceId, H)) of
{ok, _Result} ->
io:format("Instance terminated~n");
{error, Error} ->
io:format("Oops! Instance still running: ~p~n", [Error])
end;
{error, Error} ->
io:format("Error: ~p~n", [Error]),
io:format("Oops! Running instance failed!~n")
end.
Код проекта: http://code.google.com/p/virtuerl/
Using Erlang In A Web Start-Up
Using Erlang In A Web Start-Up
Whitepaper, описывающие преимущества Эрланга в качестве языка для веб-разработок с точки зрения начинающих компаний.
Integrating Java and Erlang
В статье рассказывается о том, как создать небольшой сервер на Эрланге (который умеет складывать числа) и как создать Java node и обращаться к этому серверу из джавовского кода используя jinterface.
Уровень: относительно Эрланга чуть выше начального.
via: Lazy Cjow Rhrr
ErlyDTL - the Django template language in Erlang
http://www.rsaccon.com/2008/01/erlydtl-django-template-language-in.html
Существует уже несколько шаблонных языков для Эрланга:
- ErlTL(используется в ErlyWeb)
- Sgte(используется в Erlware)
- Seethorugh (хотя проект давно не обновлялся)
- ErlyDTL на основе Django Template Language
ErlyDTL не дает пользователю доступа к Erlang'у, компилируется в .beam-файлы, пре-рендерит максимум возможного во время компиляции и поддерживает следующую функциональность:
- наследование шаблонов
- назначение переменных во время компиляции
- HTML-escaping
- большое количество тэгов и фильтров Django
Еще не весь функционал реалзован, но попробовать ErlyDTL уже можно:
- демонстрация и тестовые шаблоны
- файлы, получающиеся после рендера
Erlang IDE приближается к версии 1.0
http://www.infoq.com/news/2008/01/erlang-ide
По ссылке - интервью Влада Думитреску об ErlIDE
Как обойтись без наследования
Начинающим будет интересно это обсуждение на форуме:
Erlware bootstrappers
Новые бутстрапперы Erlware для Mac OS X 10.5 Leopard и Linux 32/64 bit. Новые бутсрапперы содержат и новую версию Faxien:
- http://code.google.com/p/faxien
Описание того, как можно создать бутстраппер для любимой архитектуры, можно найти здесь: http://code.google.com/p/faxien/wiki/BuildingBootstrapperUnix
Быстрый файловый ввод-вывод в Erlang
Быстрый файловый ввод-вывод в Erlang
Думаете, такого не бывает, да? :) Сейчас мы увидим, что будет, если полагаться на сильные стороны платформы, а не на слабые :). Мы сделаем самое быстрое в мире на момент публикации построчное чтение текстовых файлов для Эрланга.
Остальное - по ссылке
RBridge 0.1
- rbridge 0.1 Released
- на rubyforge
RBridge позволяет использовать Erlang в программах на Руби.
cron.erl
Простой модуль, позволяющий добавлять в программы cron-like функциональность
Сборка мусора в Эрланге
Статья описывает детали реализации сборки мусора в Эрланге. Также описываются некоторые моменты, позволяющие использовать особенности сборщика муора более эффективно (например, spawn_opt)
CouchDB + IBM
http://damienkatz.net/2008/01/new_gig.html
Damien Katz, создатель CouchDB, получил работу в IBM. Его основным полем дятельности будет... CouchDB!
Erlware - новый сервер
Сайт Erlware.org перебрался на новый сервер.
Изменения в настройках git:
git clone http://git.erlware.org/.git
Разработчики, обладающие правами коммита, могут продвигать изменения (push changes) так:
git push ssh://git.erlware.org/usr/local/www/git/.git
С Новым Годом!
Проект "Erlang по-русски" поздравляет вас всех с Новым Годом!
Новости начнут обновляться не скоро :)
Erlang и Javascript
Roberto Saccon работает над компилятором Javascript -> Erlang, что могло бы позволить выполнять код, написаный на Javascript'е в конектсе VM Эрланга.
Тем времененм Alex Graveley написал Er.js, библиотеку, позволяющую использовать concurreency в стиле Эрланга, но в Яваскрипте, да еще и с Эрланговским синтаксисом!
Так как Javascript не поддерживает многопоточность, было использовано много трюков, включая асинхронные таймеры, и многое другое.
ErlyWeb 0.7
ErlyWeb видео и слайды
http://www.bayfp.org/blog/2007/12/25/yariv-sadan-on-erlyweb-video-and-slides/
Презентация, представленная Яривом Саданом на собрании Bay Area Functional Programmers
erlware emacs mode
http://code.google.com/p/erlware-mode/downloads/list
Версия 0.1.1 erlware Emacs/XEmacs mode
Erlang в России
Google group: http://groups.google.com/group/erlang-russian/
Jabber-конференция: erlang@conference.jabber.ru
Подписка на рассылку: http://lists.jabber.ru/mailman/listinfo/erlang-russian
erlyweb and phased_vars IRC tutorial transcript
erlyweb and phased_vars IRC tutorial transcript
Короткий неформальный туториал по pahsed_vars в erlyweb - транскрипт из IRC
ejabberd 2.0.0 beta1
ErlSDB 0.1
Библиотека для рабботы с Amazon SimpleDB
Доступна здесь: http://code.google.com/p/erlsdb/
Как замерять время выполнения функций
Measuring Function Execution Time
Статья описывает, как правильно использовать timer:tc/3 для измерения скорости выполнения функций (и из коммандной строки тоже)
Erlang + DTrace
Tim Becker и D. Bulmer инициировали проект по имплементации Erlang DTrace.
Код расположен на http://www.opensolaris.org/. Более того, было предложено внести этот проект в список проектов OpenSolaris (голосование здесь)
Bulmer также приводит дополнительные аргументы в пользу проекта Erlang DTrace
User Contributions
На сайте trapecit.org естьзамечательный раздел user contributions
Там много есть энное количество вкусных разностей и разных вкусностей. Изредка в него надо заглядывать:
- ErlTunnel, an HTTP tunnel written in Erlang
- A GUI to Mnesia and ets
- libc FILE interface
- Parallel list processing module
- An XML-RPC client/server library
и так далее...
Все об Erlang GS
Практически все, что вы хотели знать о модуле GS в Эрланге.
Правда, согласно этой информации, модуль GS больше развиваться не будет
Получение абстрактной формы функции
http://forum.trapexit.org/mailinglists/viewtopic.php?t=11570
Имея на руках исходник модуля и его .beam, скомпилированый с debug_info, можно получить абстрактную форму функций, находящихся в этом модуле:
Предположим, у нас есть такой модуль:
-module(m).
-export([f/2]).
f(N, X) ->
if N==1; N==2 ->
element(N, {fun() ->
X + 1
end,
...
wxErlang
Новый бета-релиз: http://wxerlang.sf.net/
Требования: R12B и wxWidgets-2.8 (уже статически прилинковано в версиях для Mac и Windows)
Работает под Windows, Solaris-10, Mac и Linux
Mnesia + большое количество апдейтов
Тесты mnesia (в задаче обработки котировок)
Как оказалось, mnesia не справляется с большым количеством обновлений
Распечатка чисел с плавающей запятой
В Эрланге невозможно добиться правильного вывода чисел с плаваюзей запятой с помощью стандартных средств.
На помощь приходит модуль mochinum из MochiWeb
Использование MochiWeb skeleton
Using the mochiweb project skeleton
Краткое описание того, как надо использовать костяк приложения, поставляемый с MochiWeb.
Amazon SimpleDB + Java + Erlang
http://weblog.plexobject.com/?p=1594
Статья описывает, как подключится к Amazon SimpleDB, используя Java и Erlang
Comet и Erlang
Getting started with Comet on Erlang
Описание возможных подходов к решению, а также ссылка на проект ErlyComet (построенного поверх MochiWeb)
Amazon + Erlang
http://www.satine.org/archives/2007/12/13/amazon-simpledb/
По слухам, Amazon SimpleDB использует Эрланг
Erlan automake
Проект, направленый на облегчение процесса сборки и компиляции модулей Эрланга
Ulf Wiger про Эрланг
Запись Ульфа Вигера в comp.lang.functional, описывающая 7 основных пунктов concurrency в стиле Эрланга.
Сама ветка обсуждает синхронный и асинхронный обмен сообщениями, за и против выборочного приема сообщений (selective receive) и различие способов передачи сообщений в Эрланге и Хаскеле
Erlang на Amazon EC2
Starting cluster of Erlang nodes on EC2
Статья показывает, как запустить кластер из нод Эрланга на Amazon EC2
CouchDB: Туториал
http://jan.prima.de/~jan/plok/archives/108-Programming-CouchDB-with-Javascript.html
Туториал о том, как создать простейшее ToDo-приложение, используя CouchDB и JavaScript
Erlang 5.6/OTP R12B
Стала доступна к скачиванию версия Erlang 5.6/OTP R12B
Помимо прочих в этой версии:
- поддержка SMP на Windows. Поддержка SMP автоматически включается на системах, где доступно более одного виртуальных или физических процессоров
- Bitstings и binary comprehensions
- Test server
- Percept - erlang concurrency profiling tool
Прочее можно прочитать в описании релиза
Также рекомендуется к прочтению Efficiency guide, в котором произошли изменения (особенно в разделах, касающихся binaries и lists)
PARE - PARallel Execution in Erlang
PARE - PARallel Execution in Erlang
Считается, что Erlang позволяет писать распределенный код, не заботясь о том, что надо создавать потоки, синхронизировать их и т.п.
Возьмем следующий код:
A = a(),
b(),
c().
Для того, чтобы сделать его распределенным, надо написать:
PidThis = self(),
PidA = spawn_link(fun() -> PidThis ! {self(), a()} end),
spawn_link(fun() -> b() end),
PidC = spawn_link(fun() -> PidThis ! {self(), c()} end),
A = receive {PidA, ResultA} -> ResultA end,
receive {PidC, ResultC} -> ResultC end.
Какой кошмар... А ведь хотелось бы написать что-то в следующем роде:
parallel_execution_3,
A = a(),
b(),
c().
То есть, сказать компилатору, что следующие три выражения надо распараллелить. Статья показывает, как этого можно достигнуть и предлагает рабочий...
Двоичные деревья в Эрланге
http://mark.aufflick.com/blog/2007/11/30/trees-in-erlang
Реализация двоичных деревьев в Эрланге
ROSEN - RObotic Simulation Erlang eNgine
Движок, написаный на Эрланге, цель которого - дать пользователю возможность создавать простые и сложные 3D-объекты, манипулировать ими, а также управлять ими (задавать скорости, вращение и т.п.).
Проект начат университетом Катании.
Проект использует ESDL
Эрланг и строковые лямбды
Отталкиваясь от библиотеки функциональный Яваскрипт, автор предлагает набор похожих утилит для Эрланга.
Примеры (в комментариях приведен эквивалентный код):
%% (fun(X) -> X * 2 end)(6)
(utils:lambda("X * 2"))(6)
%% lists:map(fun(X) -> X * X end, [1,2,3]).
utils:map("X*X", [1,2,3]).
Подстановка параметра унарной функции
(utils:lambda("_*5"))(8).
-> 40
Явные (explicit) параметры
(utils:lambda("X Y->X+2*Y"))(1,4).
-> 9
Неявные (implicit) параметры
(utils:lambda("/2"))(6)
-> 3
utils:lambda("10/"))(2)
-> 5
(utils:lambda("/"))(12,6)
-> 2
Создание цепочек для карринга
%% Оператор -> можно использовать для создания
%% каррированых функций
((utils:lambda("X->Y->X+2*Y"))(1))(4).
-> 9
%% Или отложеных вычислений
Fun=(utils:lambda("X->Y->X+2*Y"))(1).
-> #Fun
Fun(4).
-> 9
Функции высшего порядка
%% compose позволяет создавать композицию функций
%% (в обратном порядке)
(utils:compose("+1", "*2"))(1).
-> 3
utils:map("+1", utils:map("*2", [1,2,3])).
-> [3,5,7]
lists:map(utils:compose(["+1", "*2"]), [1,2,3]).
-> [3,5,7]
Катаморфизмы
%% Реализация lists:reverse с использованием отложенного вызова
Reverse = utils:lambda("utils:foldl("[E] ++ S", [], _)").
-> #Fun
Reverse([1,2,3,4]).
->...
Erlang + Textmate
http://www.rsaccon.com/2007/11/easy-erlang-compiling-with-textmate.html
Модуль для компиляции Эрлнага из Textmate и screencast, показывающий его работу
Problem K на Эрланг: решение №2, последнее + вывод
Digraph + Сеть
http://feeds.feedburner.com/~r/planet_erlang/~3/186934125/click.phdo
Использование модуля digraph для определения статуса серверов в сети
Слайды Erlang User Conference 2007
gen_server для регулярных выражений
http://easyerl.blogspot.com/2007/11/genserver-for-mass-regexp-computing.html
В статье описывается использование библиотеки регулярных выражений LibTre для массивной обработки регулярных выражений
Обновление JSON-библиотеки RFC4627
Благодаря Сэму Руби (Sam Ruby), который провел исследование по поддержке Юникода в различных реализациях JSON'а было обнаружено, что erlang-rfc4627 неправильно кодирует некоторые символы.
Более детальное описание проблемы здесь: http://www.lshift.net/blog/2007/11/16/astral-plane-characters-in-erlang-jsonrfc4627-implementation
Обновленную версию можно получить так:
darcs get http://www.lshift.net/~tonyg/erlang-rfc4627/
CouchDB 0.7.0
http://code.google.com/p/couchdb/downloads/list
Вышла версия 0.7 базы данных CouchDB. В новой версии:
- REST API с использованием JSON в качестве основного формата данных
- Движок для view на основе Javascript'а (используется Spidermonkey от Mozilla)
- система сборки на основе GNU Autotools
- встроенный интерфейс для администрации базы
- экспериментальный полнотекстовый поиск на основе Lucene
- различные мелкие изменения, багфиксы и проч.
Тесты быстродействия Эрланга
http://lionet.livejournal.com/19563.html и обновленные результаты: http://lionet.livejournal.com/19867.html
И такая вот табличка: http://lionet.info/ljimg/erlang-perf-smp-2.png О ней подробнее здесь: http://forum.trapexit.org/mailinglists/viewtopic.php?t=10563
Функциональные веб-библиотеки
http://groups.google.com/group/functional-web-frameworks
Группа, предназначеная для обсуждения и сравнения различных веб-библиотек и фреймворков, написаных с использованием функциональных языков программирования
Service Pack I
Joe Armstrong предложил интересную идею: создать набор скриптов/модулей/приложений, которые улучшили бы работу с Erlang/OTP, не затрагивая саму систему. Он назвал эту идею "Service Pack I".
Среди предложений:
- Улучшить сообщения об ошибках
- Поэкспериментировать с наследованием
- Ускорить запуск Эрланга
- Использование комментариев @spec для динамической проверки ти