Какие интересные проекты нужно решить в Erlang для учебных целей?
Я недавно открыл для себя Erlang и сейчас прохожу несколько уроков. К настоящему времени я с нетерпением жду возможности реализовать что-то в качестве хобби-проекта. Меня не очень интересует еще один чат-сервер. Я хотел бы написать что-то более интересное (да, я знаю, что это довольно нечеткий термин), которым также можно управлять, поэтому я могу закончить его в свободное время.
Какие-либо предложения?
Редактировать: Проект должен выделять сильные стороны Эрланга (параллелизм, распределенный).
7 ответов
Для чего-то для себя, подумайте о написании простого сервера; что-то, что, например, обслуживает запросы даты / времени или - немного более интересный - демон HTTP, который обслуживает только статический контент.
Лучшая часть Erlang - это то, как он обрабатывает параллелизм; используйте это.
Создайте распределенную систему, которая ищет каналы Twitter в режиме реального времени и позволяет любому выполнять поиск из веб-интерфейса.
Создайте распределенную файловую систему. Реализуйте распределенные деревья B * или B+Trees в качестве основы этой файловой системы. Сделай это на эрланге.
Создайте распределенное хранилище значений ключей поверх распределенной файловой системы, созданной на шаге 2.
Создайте распределенный веб-индекс (который будет использоваться распределенной системой веб-поиска) поверх хранилища значений ключей.
Создайте распределенный компоновщик. Расширенная автоматизация сборки предлагает удаленную обработку агентов для распределенных сборок и / или распределенной обработки.
Создайте бэкэнд MMORPG, который опирается на распределенное хранение состояния игры / игрока и распределенную обработку пользовательских запросов.
Некоторые вещи из моего обильного списка дел, которые были бы как полезными, так и полезными для сообщества эрлангов в целом:
Профилируйте все доступные магазины Key/Value:
- Напишите библиотеку для тестирования вставки, поиска, удаления, времени поиска для различных магазинов K/V
- Создайте набор тестов, который смогут запустить люди
- Заставьте его работать с ets, dets, proplists, gb_trees, dict, orddict, redblack деревьями, bdb, tokyocabinet, ...
- Создавать красивые графики
- Упростите обновление, добавьте и запустите на любом компьютере
написать новую подпрограмму io_lib:format, которая использует именованные параметры:
- io_lib: nformat ("Привет, ~{name}s~n.", [{name, "Bob"}]).
- Это полезно для интернационализации, если положение параметров изменяется при изменении языка строки формата.
Расширить erl -make (make.erl)
- Разрешить добавление путей к коду (чтобы вам не нужно было делать erl -pa LibraryPath -make)
- Скомпилируйте / загрузите модули поведения перед модулями, которые реализуют эти поведения
- Правильно обрабатывать иерархические модули (в частности, путь вывода)
Это не совсем отвечает на ваш вопрос, но если вы ищете интересный бесплатный проект с открытым исходным кодом, написанный на Erlang, вам непременно стоит зайти на CouchDB. С веб-сайта:
Apache CouchDB - это распределенная, отказоустойчивая и не требующая схемы документно-ориентированная база данных, доступная через RESTful HTTP/JSON API. Помимо других функций, он обеспечивает надежную инкрементную репликацию с двунаправленным обнаружением и разрешением конфликтов, а также может запрашиваться и индексироваться с использованием механизма таблично-ориентированных представлений с JavaScript, выступающим в качестве языка определения представлений по умолчанию.
CouchDB написан на Erlang, но к нему легко получить доступ из любой среды, которая предоставляет средства для выполнения HTTP-запросов. Существует множество сторонних клиентских библиотек, которые делают это еще проще для различных языков программирования и сред.
На сайте CouchDB есть больше деталей. Удачного кодирования!
Найдите что-то, чего нет у Эрланга, что вы понимаете и любите. Я сделал это с помощью etap https://github.com/ngerakines/etap/ Теперь Ник взял на себя управление и используется внутри игр EA. Сделать это было весело, и, как и предыдущий постер, это было нечто реальное, поэтому я научился справляться с реальными проблемами, работая над этим.
Индексирование файлов / поисковая система. Это планировалось во вступительном проекте, но я переключился на что-то другое.
После того, как все заработало, вы можете переместить индексы в mnesia, а затем распространить эту вещь на другие узлы, чтобы иметь целый сетевой индекс.