Нам нужны твои мозги

Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.

На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решение.

Помощь запрашиваетАндрей СитникАндрей Ситник Андрей Ситник

Фронт: Добавить очереди в Logux Server

Для уверенных в себе, задача на пару недель

Logux Server по WebSocket получает набор операций от клиента, и для каждой операции вызывает callback, переданный разработчиком.

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

Нужно добавить последовательную обработку операций в виде очереди.

Задача сложная — требует изменить несколько проектов и хорошо продумать все необычные сценарии.

Польза: получить open source портфолио на Node.js.

  1. Изучить пример logux-приложения.
  2. Изучить протокол Logux.
  3. Посмотреть, как action синхронизируются и обрабатываются в Logux Server.
  4. Найти и изучить, как Logux Server использует Logux Core для синхронизации.
  5. Добавить в Logux Core API, которое позволит не сразу после inMap и inFilter добавлять action в лог, а сначала обрабатывать их где-то в очереди. Например, можно добавить callback onActions, и заставить разработчика самого добавлять action в лог. Узел должен отправлять synced сразу как action’ы будут отправлены в onActions, а не когда они будут добавлены.
  6. Использовать этот API в Logux Server, чтобы вызывать и access() и process() последовательно для всех полученных action’ов.
  7. Добавить в Server#type() опциональный ключ queue, чтобы разные action’ы все же можно было обрабатывать паралелльно.
  8. При выключении сервера, он должен сначала закончить обработку всех action’ов, а только потом завершить работу.
  9. Продумать другие сложные сценарии с учетом того, что каждый action обрабатывается быстро — 100-500 мс.
  10. Можно использовать большие Node.js-библиотеки, но, желательно не требовать запуска какие-то других сервисов для работы с очередьми (но это можно обсудить в группе Логакса).
  11. Отправить PR в Logux Server.

Присылайте свои решения: