Какие интересные проекты нужно решить в Erlang для учебных целей?

Я недавно открыл для себя Erlang и сейчас прохожу несколько уроков. К настоящему времени я с нетерпением жду возможности реализовать что-то в качестве хобби-проекта. Меня не очень интересует еще один чат-сервер. Я хотел бы написать что-то более интересное (да, я знаю, что это довольно нечеткий термин), которым также можно управлять, поэтому я могу закончить его в свободное время.

Какие-либо предложения?

Редактировать: Проект должен выделять сильные стороны Эрланга (параллелизм, распределенный).

7 ответов

Решение

Для чего-то для себя, подумайте о написании простого сервера; что-то, что, например, обслуживает запросы даты / времени или - немного более интересный - демон HTTP, который обслуживает только статический контент.

Лучшая часть Erlang - это то, как он обрабатывает параллелизм; используйте это.

  1. Создайте распределенную систему, которая ищет каналы Twitter в режиме реального времени и позволяет любому выполнять поиск из веб-интерфейса.

  2. Создайте распределенную файловую систему. Реализуйте распределенные деревья B * или B+Trees в качестве основы этой файловой системы. Сделай это на эрланге.

  3. Создайте распределенное хранилище значений ключей поверх распределенной файловой системы, созданной на шаге 2.

  4. Создайте распределенный веб-индекс (который будет использоваться распределенной системой веб-поиска) поверх хранилища значений ключей.

  5. Создайте распределенный компоновщик. Расширенная автоматизация сборки предлагает удаленную обработку агентов для распределенных сборок и / или распределенной обработки.

  6. Создайте бэкэнд 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, а затем распространить эту вещь на другие узлы, чтобы иметь целый сетевой индекс.

Другие вопросы по тегам