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

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

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

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

ПомогУсман ЮнусовУсман Юнусов Усман Юнусов

Фронт: Сделать минималистичный аналог lint-staged

Для новичков, задача на неделю

lint-staged позволяет запускать тесты/форматеры на измененных файлах в pre-commit-хуке.

Это отличный инструмент, но 7 МБ много для ее простой утилитарной функции. Хочется иметь минималистичный аналог, пусть и ценой потери функционала.

Что аналог должен уметь:

  1. Ваш инструмент будет запускать, например, simple-git-hooks.
  2. Инструмент находит, какие файлы изменены в коммите.
  3. Инструмент берет конфиг и получает список команд для паттерна файлов вида "*.js": ["eslint", "prettier"].
  4. Запускает указанные команды.

Чем можно пожертвовать:

  1. Поиском конфига. Пусть путь к конфигу будет указываться в конфиге simple-git-hooks вида "pre-commit": "./node_modules/.bin/nano-staged ./package.json".
  2. Поддержкой частично добавленных файлов, когда коммитят только несколько строк через git add -p — для них можно не запускать скрипты (предупредив об этом в документации и в выводе в консоль при коммите).
  3. Вывод в терминал можно сделать сильно проще.
  4. Можно даже просить пользователя указать прямой путь к исполняемому файла обработчика: "*.js": "./node_modules/.bin/prettier".

Задача — создать новый проект минималистичного аналога lint-staged.

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

  1. Создать новый репозиторий.
  2. Реализовать проект с принципами «нано»-библиотек:

    • Внимательно следить за размером зависимостей и не брать их без необходимости.
    • Не использовать компиляцию и писать проект на JS, который и будет запускаться в Node.js.
  3. Подумать, как использовать множество ядер современных процессоров. Например, можно разбивать файлы на группу по количеству ядер, и каждую группу обрабатывать параллельно.
  4. Написать benchmark и проверить скорость с lint-staged, чтобы она была не ниже. Как минимум для случаев с коммитом с одним небольшим файлов и с множеством файлов.
  5. Скинуть проект Ситнику в Телеграме.
  6. После проверки выпустить его на npm.
  7. Иметь мотивацию поддерживать проект потом еще несколько лет.