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

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

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

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

ПомогРодион ДемиховРодион Демихов Родион Демихов

Фронт: Сохранять порядок правил в postcss-nested

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

В экосистеме PostCSS есть плагин postcss-nested для добавления в CSS синтакса вложенных правил (в духе SCSS).

Сейчас postcss-nested некорретно работает, если другие свойства идут после вложенного правила.

.foo {
  a: 1;
  &bar {
    b: 2;
  }
  b: 1;
}
.foo {
  a: 1;
  b: 1;
}
.foobar {
  b: 2;
}

В этом примере b: 1 из .foo после компиляции оказалось выше b: 2 из .foobar.

Правильный результат:

.foo {
  a: 1;
}
.foobar {
  b: 2;
}
.foo {
  b: 1;
}

Польза: получить open source портфолио на Node.js, строка в резюме с PR в популярный проект.

Помощь запрашивалДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

ПомогYuriy OrlovYuriy Orlov Yuriy Orlov

Бэк: GraphQL RuboCop: добавить коп для проверки заполнения описаний типов

Для новичков, задача на пару дней

rubocop-graphql — Ruby gem, проверяющий на соответствие стилю код, использующий DSL graphql-ruby.

Необходимо реализовать коп ObjectDescription, проверяющий, что для всех типов (включая мутации, подписки, резолверы) заполнено описание (метод description).

Польза: научиться писать копы для rubocop, принести пользу Ruby–сообществу.

Помощь запрашивалДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

ПомогAdel NabiullinAdel Nabiullin Adel Nabiullin

Бэк: GraphQL RuboCop: добавить коп для проверки использования :hash_key

Для новичков, задача на пару дней

rubocop-graphql — Ruby gem, проверяющий на соответствие стилю код, использующий DSL graphql-ruby.

Необходимо реализовать коп FieldHashKey, проверяющий, что при объявлении поля везде, где возможно, используется опция :hash_key.

Польза: научиться писать копы для rubocop, принести пользу Ruby–сообществу.

Помощь запрашивалДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

ПомогShpak RomanShpak Roman Shpak Roman

Бэк: GraphQL RuboCop: добавить коп для обнаружения полей, которые можно вынести в отдельный тип

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

rubocop-graphql — Ruby gem, проверяющий соответствие стилю код, использующий DSL graphql-ruby.

Необходимо реализовать коп ExtractType, предлагающий вынести поля с одинаковым префиксом в отдельный тип.

Польза: научиться писать копы для rubocop, принести пользу Ruby-сообществу.

Помощь запрашивалДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

ПомогYasha KrasnovYasha Krasnov Yasha Krasnov

Бэк: Добавить поддержку полиморфных типов в Ruby gem StoreModel

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

StoreModel — Ruby gem, позволяющий работать с JSON-колонками как с объектами, очень похожими на обычные ActiveRecord модели.

Необходимо добавить в StoreModel полиморфные типы, которые будут оборачивать значение из JSON в нужный класс–обертку согласно условиям.

Польза: познакомиться с работой атрибутов в Rails, прокачаться в Ruby, принести пользу сообществу.

Помощь запрашивалАлександр АброськинАлександр Аброськин Александр Аброськин

ПомогРоман ШпакРоман Шпак Роман Шпак

Бэк: Lefthook: добавить сегментированный вывод

Для новичков, задача на пару дней

Lefthook — менеджер Git-хуков для проектов на любых языках.

Требуется добавить возможность управлять логом вывода.

В текущей реализации Lefthook не предоставляет возможности пользователю управлять выводом. Для большого числа проверок количество сообщений может быть излишне большим и лог теряет информативность. Хочется через конфиг указать какие сообщения выводить, а какие нет. Например:

output:
  - meta
  - failures
  - success
  - summary

Польза: попрактиковаться с Go, познакомиться с git hooks.

Инструкции по выполнению

  1. Ознакомиться с более подробным обсуждением задачи или предложенной реализацией.
  2. Задать вопросы или попросить уточнения в issue на GitHub.
  3. Форкнуть проект Lefthook на GitHub.
  4. Реализовать необходимый функционал.
  5. Сделать Pull Request.

Помощь запрашивалВова ДемВова Дем Вова Дем

Бэк: Logidze: создание «слепка» текущего состояния записи вручную

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

Logidze позволяет работать с версиями объектов Active Record моделей и историей их изменений, хранящейся в виде инкрементального лога в отдельной колонке таблицы БД.

Лог изменений генерируется автоматически (с помощью триггеров в БД), и, как правило, разработчики в приложении используют его только для чтения. Однако, в некоторых случаях может возникнуть необходимость зафиксировать текущее состояние записи вручную: например, при массовом обновлении или вставке удобно отключать встроенный трекинг (Logidze.without_logging { ... }), что может привести к неконсистентности лога и текущего состояния записей.

Для решения данной проблемы предлагается добавить специальный метод model.fixup_log_data!, который будет добавлять запись в лог, актуализируя его состояние.

Польза: возможность поработать с базой данных на более низком уровне, принести пользу Rails сообществу.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогВячеслав МефодинВячеслав Мефодин Вячеслав Мефодин

Бэк: Ruby Next: поддержка явного списка преобразований в CLI

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

Ruby Next — транспайлер для Ruby, который позволяет трансформировать новые синтаксические конструкции в совместимые со старыми версиями Ruby и альтерантивными имплементациями.

Один из возможных способов сделать это — воспользоваться ruby-next CLI. Текущая версия CLI позволяет указывать версию Ruby, для которой необходимо сгенерировать код (ruby-next nextify --min-version=2.5), что отлично работает для CRuby и совместимых реализаций, но не всегда подходит для таких платформ как mruby, Opal и других.

Требуется расширить функционал CLI и добавить возможность указывать список преобразований явно: ruby-next nextify --rewrite=pattern-matching --rewrite=endless-method.

Польза: попрактиковаться в написании и тестировании CLI на Ruby, познакомиться с миром транспайлеров, принести пользу Rails сообществу.

Фронт: Перевести Logux Server на pino

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

Сейчас Logux Server использует Bunyan для записи лога. pino совместим на 90% с Bunyan API, но гораздо быстрее.

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

Бэк: Добавить resend в Logux Rails

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

У Logux есть WebSocket-сервер, который посылает новые сообщения в Rails-приложение. Сейчас новое сообщение проходит 2 стадии — проверку прав доступа и сохранение данных в БД. Нужно добавить третий шаг — определение того, в какие каналы нужно переслать сообщение.

Обработка сообщений от Logux идет в Logux::ActionController:

module Actions
  class Comment < Logux::ActionController
    def add
      respond :processed
    end
  end
end

Нужно добавить метод resend, который будет принимать хэш:

    def add
      resend channel: 'users'
      respond :processed
    end

Этот метод будет писать в ответ Logux-серверу:

["resend", @meta.id, { "channel": "users" }]

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

Бэк: Добавить send_back в Logux Rails

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

У Logux есть WebSocket-сервер, который посылает новые сообщения в Rails-приложение. Обработка всех сообщений от Logux идет в Logux::BaseController (который расширяется в Logux::ActionController и Logux::ChannelController):

module Actions
  class Comment < Logux::ActionController
    def add
      respond :processed
    end
  end
end

Нужно добавить метод send_back(action, meta), который будет ставить meta.clients = [meta.client_id] и вызывать Logux.add(action, meta):

    def add
      send_back(type: 'added')
      respond :processed
    end

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

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

Помоглаjayhoneyjayhoney jayhoney

Фронт: Добавить size-limit --watch

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

Нужно добавить новый аргумент: size-limit --watch, который будет следить за изменением файлов и заново запускать Size Limit.

Можно следить только за изменением JS-файлов, package.json и конфига Size Limit, игнорируя node_modules.

Польза: опыт работы с JavaScript в большом опенсорс-проекте.

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

ПомогИван СоловьевИван Соловьев Иван Соловьев

Фронт: Добавить browserslist --update-db для обновления caniuse-lite

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

Browserslist берет данные Can I Use из пакета caniuse-lite. Многие команды его не обновляют и данные last 2 version становятся устаревшими. Сейчас Browserslist определяет, что данные устарели и выводит предупреждение.

К сожалению, npm и Yarn не дают готовые инструменты для обновления версий в глубине дерева зависимостей.

Польза: опыт работы с JavaScript в большом опенсорс-проекте, строка в резюме с PR в известный проект.

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

ПомогАяз ЗайнутдиновАяз Зайнутдинов Аяз Зайнутдинов

Фронт: Перевести токенайзер PostCSS с line, column на offset

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

Сейчас PostCSS сохраняет строку и колонку каждого токена. Но команде Sass для совместимости нужна позиция в CSS-строке (offset) вместо строки и колонки. Можно перевести токенайзер на offset, а строку/колонку вычислять. Это упростит токенайзер и уменьшит расход памяти.

Польза: опыт работы с JavaScript в большом опенсорс-проекте, строка в резюме с PR в известный проект.

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

ПомогОлег ЛевшинОлег Левшин Олег Левшин

Фронт: Добавить print-snapshots --watch

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

Инструмент print-snapshots печает Jest snapshots.

Нужно добавить два параметра, --update и --watch, для обновления snapshots и запуска обновления snapshots при изменении JS-файлов в проекте.

Польза: опыт работы с JavaScript опенсорс-проекте, опыт работы с инструментами тестирования.

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

ПомогИван СоловьевИван Соловьев Иван Соловьев

Фронт: Улучшить генерацию префиксов у Autoprefixer внутри @-moz-document

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

Надо сделать Autoprefixer умнее и генерировать только -moz- внутри выражения @-moz-document.

  body {
    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;
  }

  @-moz-document domain('example.com') {
    body {
-    -webkit-appearance: none;
        -moz-appearance: none;
             appearance: none;
    }
  }

Польза: опыт работы с JavaScript в большом опенсорс-проекте, строка в резюме с PR в известный проект.

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

ПомогВиктор ШабрацкийВиктор Шабрацкий Виктор Шабрацкий

Фронт: Добавить скрипты в clean-publish

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

clean-publish — CLI-инструмент по очистке npm-пакета от лишних конфигов перед публикацией.

Он берет текущий проект, копирует во временную папку, чистит и вызывает npm publish на очищенную временную папку.

Нужно добавить опцию beforeScript, которая перед вызовом npm publish вызовет какой-то другой скрипт, передав туда путь ко временной папке как аргумент.

"clean-publish": {
  "beforeScript": "esm-compiler"
}

Польза: получить опыт разработки под Node.js.

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

ПомогИван МаловИван Малов Иван Малов

Фронт: Уменьшить Gitter Sidecar

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

Gitter Sidecar — виджет чата для open source-проектов. Его использует PostCSS и Logux.

В виджете оказалось много лишнего кода. 17 KB кода, скорее всего, можно ужать до 5-10 KB.

Польза: опыт улучшения производительности, строка в резюме с PR в известный проект.

Помощь запрашивалДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

ПомогЯрослав ЛитвиновЯрослав Литвинов Ярослав Литвинов

Бэк: Реализовать обработку неизвестных атрибутов внутри array-типов StoreModel

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

StoreModel — Ruby gem, позволяющий работать с JSON-колонками как с объектами, очень похожими на обычные ActiveRecord модели.

Ранее в StoreModel был добавлен метод #unknown_attributes, возвращающий Hash с атрибутами, присутствующими в колонке БД, но не объявленными в модели (подробнее — в в документации). Однако, он не работает с array-типами:

class Config
  include StoreModel::Model

  attribute :model, :string
end

data = { name: "Apple iPhone" }
config = Config.to_type.cast_value(data)
config.unknown_attributes
# => { name: "Apple iPhone" }

Config.to_array_type.cast_value([data])
# => ActiveModel::UnknownAttributeError

Необходимо дополнить реализацию модуля StoreModel::Types::ArrayType таким образом, чтобы он собирал все неизвестные атрибуты в #unknown_attributes для каждого из объектов списка:

data = { name: "Apple iPhone" }
configs = Config.to_array_type.cast_value([data])
configs.first.unknown_attributes
# => { name: "Apple iPhone" }

Более подробно проблема описана в задаче.

Польза: прокачаться в Ruby, принести пользу сообществу.

Помощь запрашивалДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

ПомогPaul BlazePaul Blaze Paul Blaze

Бэк: Добавить ссылку на модель-родитель в StoreModel

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

StoreModel — Ruby gem, позволяющий работать с JSON-колонками как с объектами, очень похожими на обычные ActiveRecord модели.

Необходимо добавить в StoreModel возможность установить связь между объектом-оберткой и его родителем — объектом класса ActiveRecord. В результате, у классов, включающих в себя StoreModel::Model, должен появиться метод #parent.

Польза: познакомиться с работой атрибутов в Rails, прокачаться в Ruby, принести пользу сообществу.

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

ПомогНикита МигуновНикита Мигунов Никита Мигунов

Фронт: Исправить поиск Chrome в estimo

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

Estimo запускает JS-файл в Puppeteer (Chrome без UI) и сообщает, сколько потребовалось времени на компиляцию и запуск файла. Size Limit использует его для оценки времени выполнения JS-бандла.

Puppeteer очень долго скачивает сборку Chrome. В 1.0 Estimo перешел на Puppeteer Core и самм начал искать и скачивать Chrome. В итоге, если у пользователя уже установлен браузер Chrome, Estimo может использовать его.

Однако, код поиска и скачивания Chrome работает плохо, особенно на Travis CI. Нужно переписать код и исправить ошибки.

Польза: получить глубокий опыт в работе Puppeteer.

Бэк: Store Attribute: поддержка значений по умолчанию

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

Gem store_attribute добавляет возможность приведения типов для атрибутов Active Record моделей, созданных с помощью store_accessor.

Данный gem предоставляет интерфейс (и использует «под капотом») Attributes API, за исключением возможности указания значений по умолчанию.

Необходимо добавить данный функционал в gem.

Польза: узнать, как устроен Attributes API в Active Record, принести пользу Rails сообществу.

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

ПомогИван СоловьевИван Соловьев Иван Соловьев

Фронт: Добавить в Size Limit опцию --save-bundle

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

Size Limit собирает JavaScript-библиотеку с помощью webpack, чтобы потом проверить результирующий размер.

Иногда непонятно, почему получился именно такой размер — хотелось бы посмотреть содержимое сборки. Для этого можно добавить аргумент --save-bundle ./dir в CLI.

Польза: получить опыт в open source проекте и новых синтаксисах JavaScript.

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

ПомогПавел ВостриковПавел Востриков Павел Востриков

Фронт: Добавить JSON-вывод в Size Limit

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

В CLI Size Limit нужно добавить опцию size-limit --json, которая будет менять формат вывода на JSON:

[
  {
    "name": "index.js",
    "passed": true,
    "size": 1024,
    "loading": 0.05,
    "running": 0.1
  }
]

Польза: получить опыт в open source проекте и новых синтаксисах JavaScript.

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

ПомогПавел ВинникПавел Винник Павел Винник

Фронт: Доделать тему documentation-theme-light для Documentation.js

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

Documentation.js — прекрасная замена мертвому JSDoc. Но все темы для него довольно плохие.

Самое грустное, что для проекта сделали отличную тему documentation-theme-light, но она не закончена.

Нужно добавить JS-скрипты генерации HTML и, опционально, чуть отполировать тему.

Польза: задача идеальна для CSS-разработчиков, которые хотят прокачаться в JavaScript.

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

ПомогИван СоловьевИван Соловьев Иван Соловьев

Фронт: Исправить парсинг Custom Properties в PostCSS

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

PostCSS парсит значения CSS Custom Properties как обычные значения в CSS-свойствах. Оказалось, что по спецификации там могут быть { и другие символы.

/* Валидный CSS */
html {
  --bracket-block: {1, 2, 3};
  --JSON: [1, "2", {"three": 3}, [4]];
  --javascript: function(rule) { console.log(rule) };
}

Нужно изменить парсер, чтобы правильно обрабатывать CSS Custom Properties.

Польза: получить опыт JavaScript в известном проекте.

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

ПомогВладимир ЩедринВладимир Щедрин Владимир Щедрин

Фронт: Переписать Logux Server с Promise на async/wait

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

В Logux Server надо провести рефакторинг, переведя код на новый синтаксис JavaScript. Поскольку мы теперь требуем Node.js >= 10, Promise можно заменить на async/await.

Польза: получить опыт в open source проекте и новом синтаксисе JavaScript.

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

ПомогСемён ЛевенсонСемён Левенсон Семён Левенсон

Фронт: Добавить поддержку mask-composite в Autoprefixer

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

В Autoprefixer нужно добавить поддержку нового свойства — mask-composite.

Польза: получить опыт JavaScript в известном проекте.

Помощь запрашивалНиколай СверчковНиколай Сверчков Николай Сверчков

ПомогЕвгений ГавриловЕвгений Гаврилов Евгений Гаврилов

Бэк: Поддержка ассоциаций belongs_to в Ruby gem Clowne

Для новичков, задача на несколько дней

Clowne — это Ruby gem для гибкого клонирования моделей, поддерживающий несколько ORM адаптеров.

На данный момент ActiveRecord адаптер реализует клонирование следующих ассоциаций: has_one, has_many, has_and_belongs_to_many. В первой версии это было сделано специально, чтобы избежать возможных избыточных клонирований и неверного результата в конечном итоге.

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

Для покрытия подобного рода кейсов нужно добавить в gem поддерку belongs_to связей (только для ActiveRecord адаптера).

Польза: прокачаться в Ruby, получить опыт работы со сложными Ruby библиотеками.

Помощь запрашивалНиколай СверчковНиколай Сверчков Николай Сверчков

ПомогАнтон ЛоктиковАнтон Локтиков Антон Локтиков

Бэк: gem Clowne: коллбек after_clone для обработки собранной модели

Для новичков, задача на несколько дней

Clowne — это Ruby gem для гибкого клонирования моделей.

Начиная с версии 1.0, Clowne поддерживает два коллбека для обработки клонируемой записи:

  • finalize вызывается до сохранения записи в процессе формирования результата клонирования.
  • after_persist вызывается после сохранения записи для уже сформированной записи.

Однако, существуют промежуточные ситуации, когда необходимо обработать собранную, но еще не сохраненную запись.

К примеру, чтобы избежать использования after_persist и дополнительных операций c базой:

class UserCloner < Clowne::Cloner
  # клонируем пользователя и его посты, которые являются черновиками
  include_association :posts, scope: :draft

  after_clone do |_origin, clone, mapper:, **|
    # актуализируем значение атрибута пользователя
    clone.draft_count = clone.posts.count
  end
end

Альтернативным примером использования может послужить проверка собранной записи по некоторой бизнес-логике:

class UserCloner < Clowne::Cloner
  include_association :posts, scope: :draft

  after_clone do |origin, clone, errors:, **|
    errors.unshift("user clone of #{origin.cache_key} is invalid") if clone.posts.empty?
  end
end

errors = []
operation = UserCloner.call(user, errors: errors)

raise errors.join('; ') if errors.any?

Для покрытия подобного рода кейсов мы можно реализовать after_clone коллбек.

Польза: прокачаться в Ruby, получить опыт работы со сложными Ruby библиотеками.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомоглаЮлия ОлецкаяЮлия Олецкая Юлия Олецкая

Бэк: AnyCable: Rack-совместимый сервер

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

AnyCable позволяет использовать сторонние WebSocket-сервера, более производительные и конкурентно-способные, вместе с Action Cable.

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

И хотя AnyCable предполагает использование стандартного Action Cable сервера при разработке и тестировании, многие разработчики (см. например, статью From Action to Any) предпочитают запускать полноценную конфигурацию локально.

Чтобы упростить локальную разработку, мы предлагаем написать AnyCable-совместимый вебсокет-сервер на Ruby с Rack интерфейсом.

Польза: познакомиться с AnyCable, получить опыт написания конкуретных приложений на Ruby.

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

ПомогДмитрий ШвецовДмитрий Швецов Дмитрий Швецов

Бэк: Yabeda: адаптер для DataDog

Для новичков, задача на два-три дня

Фреймворк yabeda позволяет легко объявлять и собирать метрики о работе Ruby-приложения — и с помощью адаптеров экспортировать их в системы мониторинга. Сейчас есть адаптеры для Prometheus (yabeda-prometheus) и NewRelic (yabeda-newrelic), но это далеко не полный список систем, которых мы хотели бы поддерживать.

Необходимо написать адаптер (Ruby gem) для yabeda, который позволит отправлять кастомные метрики в DataDog.

Польза: познакомиться с работой систем мониторинга изнутри, получить опыт в Ruby open source, принести пользу сообществу.

Решение: победителем признана реализация Дмитрия Швецова на основе Dogstatsd сделанная в соавторстве с Николаем Малининым. Николай начинал решать задачу отдельно, но решил объединить усилия с Дмитрием.

Помощь запрашивалВова ДемВова Дем Вова Дем

Бэк: GraphQL Ruby: поддержка «внешних» схем

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

Gem graphql-ruby предоставляет объектно-ориентированный интерфейс для построения GraphQL API на Ruby.

Одним из преимуществ GraphQL часто называют возможность агрегировать данные из разных источников в одном запросе и прозрачно для клиента.

Отдельно рассматривают случай, когда один провайдер GraphQL API агрегирует данные из других GraphQL API. Этот сценарий носит название schema stitching.

К сожалению, на сегодняшний день поддержка объединения (или сшивания) схем отсутвует в реализации на Ruby.

Необходимо написать плагин (gem) для graphql-ruby, который позволит создавать «внешние» поля в локальную схему.

Польза: познакомиться с GraphQL в Ruby, получить open source опыт Ruby, принести пользу сообществу.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогАлександр АброськинАлександр Аброськин Александр Аброськин

Бэк: GraphQL Ruby: «умная» выборка полей из БД

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

Gem graphql-ruby предоставляет объектно-ориентированный интерфейс для построения GraphQL API на Ruby.

Одной из ключевых особенностей GraphQL является возможность запросить клиентом только те данные, которые ему нужны (а не все те, которые предлагает API).

Однако, запросы к БД, которые выполняются при работе, например, с Active Record, не являются оптимальными: используется "SELECT * ..." вместо выборки лишь тех полей, которые необходимы для формирования ответа клиенту.

При большом количестве колонок в таблице или при хранении значений большого размера выгрузка всех полей и инициализация Active Record могут привести к разбуханию памяти или отрицательно повлиять на скорость выполнения запроса.

Необходимо написать плагин (gem) для graphql-ruby, который позволит «помочь» делать более эффективные запросы.

Польза: познакомиться с GraphQL в Ruby, получить опыт в Ruby open source, принести пользу сообществу.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогАндрей КривкоАндрей Кривко Андрей Кривко

Бэк: Добавить интеграцию с OptionParse в anyway_config

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

Gem anyway_config предоставляет единый API для конфигурирования Ruby приложения из разных источников данных (YAML файлы, переменные окружения), позволяя без лишних усилий следовать принципам Twelve-Factor App методологии.

Необходимо добавить возможность использовать аргументы коммандной строки в качестве еще одного источника данных для конфигурации.

Для этого предполагется добавить интеграцию стандартной Ruby библиотеки OptionParse в anyway_config.

Польза: познакомится с OptionParse в Ruby, принести пользу сообществу.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогМихаил РянзинМихаил Рянзин Михаил Рянзин

Бэк: TestProf: добавить улучшенную поддержку сэмплирования тестов

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

Gem test-prof включает в себя инструмент для запуска случайного набора тестов (документация).

Текущая реализация имеет ряд ограничений:

  • можно запускать только случайный набор файлов, а не отдельных тестов (из-за этого количество тестов в сэмплах может значительно отличаться);
  • не поддерживает фильтрацию тестов в RSpec (например, по тэгам или по описанию).

Необходимо усовершенстовать поддержку сэмплирования в TestProf.

Польза: узнать, как работают изнутри популярные библиотеки для тестирования в Ruby (RSpec и Minitest), принести пользу сообществу.

Помощь запрашивалЮлия ОлецкаяЮлия Олецкая Юлия Олецкая

ПомогДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

Бэк: Добавить API для поддержки различных адаптеров в Ruby gem jwt_sessions

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

Альтернативное решение от Леонида Батижевского.

Gem jwt_sessions предоставляет базовый инструментарий для использования JWT для аутентификации пользователей.

Для хранения токенов сейчас используется Redis, и нет простой (то есть, без monkeypatching) возможности использовать другие хранилища — такие, например, как база данных, или память приложения (что может быть полезно в тестовом окружении).

Необходимо в рамках gem’а реализовать интерфейс для написания сторонних адаптеров, реализовать через него существующий Redis адаптер, а также добавить из коробки in-memory адаптер.

Польза: познакомиться поближе c JWT, применить навыки рефакторинга в Ruby, принести пользу сообществу.

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

ПомогВасилий СтяжкинВасилий Стяжкин Василий Стяжкин

Фронт: Написать скрипт подбора правильного порядка букв алфавита Nano ID

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

Nano ID — это очень маленькая библиотека, где идет борьба за каждый байт. Во многих файлах Nano ID есть строка алфавита. Одна из техник оптимизации — менять порядок символов в алфавите так, чтобы он повторял слова из JS-кода. Тогда gzip работает более эффективно.

Нужно написать скрипт, который бы перебирал все варианты порядка символов, чтобы найти оптимальный порядок.

Польза: получить опыт в JavaScript и оптимизации.

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

ПомогАндрей АлександровАндрей Александров Андрей Александров

Фронт: Управление Grid через комментарии в Autoprefixer

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

Autoprefixer старается конвертировать Grid Layout для Internet Explorer. Эту функцию надо явно активировать, передавая опцию grid: true.

Не у всех пользователей есть возможность выставить опции для Autoprefixer. Надо сделать включение функции с помощью комментария /* autoprefixer grid: on */.

Польза: получить опыт JavaScript в известном проекте.

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

ПомогБогдан ДолинБогдан Долин Богдан Долин

Фронт: Добавить предупреждения grid-area в Autoprefixer

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

Autoprefixer старается конвертировать Grid Layout для Internet Explorer. Некоторые пользователи делают ошибку и пишут grid-area и grid-row и/или grid-column в одном и том же правиле (это бессмысленно).

Надо показывать предупреждение, если в одном правиле есть grid-area и grid-row или grid-column.

Польза: получить опыт JavaScript в известном проекте.

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

ПомогАлександр ХованскийАлександр Хованский Александр Хованский

Фронт: Убрать Cairo из postcss-conic-gradient

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

postcss-conic-gradient — полифил для конических градиентов в CSS.

Он генерирует SVG-картинку для градиента и вставляет эту каринку в CSS как data:uri. Для генерации изображения он сейчас использует Cairo — бинарную зависимость, которую надо отдельно ставить в систему.

Нужно заменить Cairo на какую-то другую библиотеку на чистом JavaScript или вручную генерировать SVG.

Польза: получить опыт работы с графикой в JavaScript, улучшить очень полезный полифил.

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

Помогjanczerjanczer janczer

Фронт: Добавить предупреждения Grid Layout в Autoprefixer

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

Autoprefixer старается конвертировать Grid Layout для Internet Explorer. Однако свойства align-content, align-items, justify-content и justify-items нельзя сконвертировать.

Надо показывать предупреждение, если в одном правиле есть display: grid или display: inline-grid и свойства из списка выше.

Польза: получить опыт JavaScript в известном проекте.

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

Помогojabojab ojab

Бэк: Улучшить ответ при ошибке в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Сейчас при ошибке gem всегда выдает ['error'] в ответ. Нужно возвращать ['error', meta.id, error_stack] или ['error', auth_id, error_stack].

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

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

ПомогДмитрий ТопорнинДмитрий Топорнин Дмитрий Топорнин

Бэк: Генерировать meta.id в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Каждое событие в Logux имеет уникальный ID в meta.id. Но пока Logux Rails не умеет генерировать этот ID.

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

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

ПомогАндрей ПадеринАндрей Падерин Андрей Падерин

Бэк: Улучшить логер в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Нужно улучшить вывод gem’а в консоль согласно списку в issue.

Польза: получить open source портфолио в Ruby, опыт работы с логером в Rails, научиться работать с Logux.

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

ПомогМарк ФростМарк Фрост Марк Фрост

Бэк: Добавить Logux.undo() в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Logux умеет откатить любое событие, которое было создано клиентом или отправлено с сервера. Для этого нужно сгенерировать особое событие. Нужно перенести эту логику в Rails в метод Logux.undo().

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

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

ПомогЮрий ЛебедевЮрий Лебедев Юрий Лебедев

Бэк: Добавить rake-задачи в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Нужно добавить две rake-задачи:

  1. rake logux:actions — чтобы вывести action.type, которые ожидают все обработчики событий из app/logux/actions.
  2. rake logux:channels — чтобы вывести все подписки, которые ожидают обработчики подписок из app/logux/channels.

Польза: получить open source портфолио в Ruby, разобраться с Rake, научиться работать с Logux.

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

ПомогДмитрий ИвлиевДмитрий Ивлиев Дмитрий Ивлиев

Бэк: Исправить реакцию на неизвестное событие в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Если разработчик не создал обработчик для какого-то события или подписки, gem выбросит ошибки NoPolicyError и NoActionError. Вместо этого нужно в ответ выдавать ['unknownAction', meta.id] или ['unknownChannel', meta.id].

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

Бэк: Добавить strong params в Logux Rails

Для новичков, задача на несколько дней

Logux Rails — gem, позволяющий связать Logux-сервер и приложение на Ruby on Rails. В каталоге app/logux/ разработчик описывает права доступа и контроллеры для разных типов событий от Redux и подписок.

Нужно, чтобы в Logux::Actions работала та же фильтрация входящих параметров, что и в контроллерах Rails.

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

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

ПомогИван СоловьевИван Соловьев Иван Соловьев

Фронт: Перезапустить easings.net

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

Easings.net — каталог easing-функций. Easing-функции — очень важный элемент анимаций, поэтому многие разработчики посещают этот сайт, чтобы правильно подобрать анимацию на веб-странице.

Польза: получить опыт JavaScript-разработки; модернизировать популярную шпаргалку для разработчиков.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогДмитрий ЦепелевДмитрий Цепелев Дмитрий Цепелев

Бэк: ActiveRecord: ленивая предзагрузка ассоциаций

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

PR в Rails от Глеба Иванова.

В ActiveRecord предусмотрено несколько методов для предварительной загрузки ассоциированных записей (такие как includes, eager_load и другие). Это позволяет выгружать данные, избегая так называемой проблемы N+1 запросов.

В некоторых случаях мы не знаем заранее, какие ассоциации нам понадобятся при выполнении запроса (простой пример — работа с GraphQL).

Приходится либо предзагружать лишние данные (например, указывая все ассоциации в includes), либо использовать альтернативные подходы, такие как batch loading.

Необходимо написать ленивую реализацию метода preload, которая предзагружает ассоциации только если они используются.

Польза: детально узнать, как работает Rails и ActiveRecord изнутри, принести пользу Rails-сообществу.

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

ПомогЮрий ТимофеевЮрий Тимофеев Юрий Тимофеев

Фронт: Создать nanoid-good, nanoid с фильтром обсценных слов

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

Nano ID генерирует случайные ID. Так как идентификаторы полностью случайные, частью буквенно-цифрового идентификатора может стать обсценное слово.

Нужно создать nanoid-good, который будет проверять ID на плохие слова и, если надо, генерировать ID еще раз.

Польза: получить больше опыта в JavaScript и пополнить open-source портфолио.

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

ПомогБогдан ДолинБогдан Долин Богдан Долин

Фронт: Предупреждать о конфликте имен областей в Autoprefixer Grid

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

Autoprefixer умеет генерировать префиксы для Grid Layout только если имена областей уникальные. Например, в этом случае сгенерировать префиксы нельзя:

.parent-alpha {
  grid-template-areas: "delta  echo";
}

.parent-beta {
  grid-template-areas: "echo  delta";
}

.grid-cell {
  -ms-grid-column: ???; /* не понятно, от какого родителя брать местоположение */
  arid-area: echo;
}

В этих случаях надо выводить предупреждение.

Польза: указать в резюме коммит в известный проект.

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

ПомогИван МаловИван Малов Иван Малов

Фронт: Исправить вложенные медиа-выражения в Autoprefixer Grid

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

В некоторых случаях Autoprefixer генерирует вложенные медиа-выражения. В этих случаях надо объединять медиа-выражения в одно.

@media (min-width: 30em) {
  .wrapper {
    display: grid;
    grid-template-areas: "a b";
  }
}

@media (min-width: 60em) {
  .wrapper {
    grid-template-areas: "a b";
  }
}

@media (min-width: 30em) {
  .a {
    grid-area: a;
  }
}

@media (min-width: 30em) {
  .b {
    grid-area: b;
  }
}

Польза: указать в резюме коммит в известный проект.

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

ПомогДаниил ШашковДаниил Шашков Даниил Шашков

Фронт: Перевести shortid на nanoid

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

shortid использует опасные методы генерации ID. К сожалению, его использует уже слишком много проектов. Поэтому надо заменить в нем метод генерации ID, сохранив прежний API.

Польза: получить больше опыта в JS.

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

ПомогДаниил ШашковДаниил Шашков Даниил Шашков

Фронт: Создать инструмент clean-publish

Для продвинутых, задача на неделю

В современном JavaScript даже у маленького проекта есть куча инструментов разработки — хотя бы линтер и тесты. Для каждого инструмента надо иметь настройки. Иногда настроек получается больше, чем кода самой библиотеки.

Можно держать все эти настройки в отдельных файлах — тогда в папке проекта будет много файлов. Например, из-за длинного списка файлов README на GitHub будет далеко после большого списка файлов.

Можно перенести настройки в package.json, но тогда они окажутся в npm-пакете, что увеличит его размер.

Можно решить проблему, если создать инструмент clean-publish. Он будет копировать файлы проекта во временную папку, убирать лишнее из package.json и вызывать npm publish на временной папке.

Польза: получить больше опыта в JavaScript.

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

ПомогДаниил ШашковДаниил Шашков Даниил Шашков

Фронт: Перевести yaspeller на cosmiconfig

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

Сейчас yaspeller берет свои настройки только из файла .yaspellerrc. Хотелось бы, чтобы он поддерживал поле "yaspeller" в package.json, как многие остальные инструменты из npm.

Чтобы не писать много кода поиска настроек, можно использовать библиотеку cosmiconfig.

Польза: получить больше опыта в JavaScript.

Помощь запрашивалДолганов СергейДолганов Сергей Долганов Сергей

ПомогМеркушин МихаилМеркушин Михаил Меркушин Михаил

Бэк: Гемизация «простейших контрактов» на Ruby

Для продвинутых, задача на неделю

Контракт — это набор валидаций (тестов), которые запускаются во время production сессии взаимодействия с внешней системой по API (например, CRM системой или социальными сетями).

Такие валидации решают проблему упрощения отладки и распознавания отклонений в поведении внешних зависимостей. Пример реализации — poro_contract.

Нужно создать новый gem (назовем его simple_contracts), который:

  1. внутри работает по таким же принципам, как POROContract, или просто оборачивает его в gem;
  2. является самой простой реализацией «контрактов» на Ruby в виде gem с минимумом зависимостей;
  3. обладает способностью прогонять проверку «контракта» параллельно, не влияя на основной поток исполнения (в случае использования IO в теле контракта).

Польза: получить отличный опыт с многопоточным программированием в Ruby; освоить контрактный подход к тестированию API.

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

ПомоглаАня КирюхинаАня Кирюхина Аня Кирюхина

Фронт: Ускорить токенайзер PostCSS

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

В хороших парсерах разбор разбит на два шага: строка → токены и токены → дерево объектов. Первый шаг называется токенайзер.

Сейчас токенайзер возвращает [token_name, content, start_line, start_column, end_line, end_column]. Есть мнение, что можно сильно ускорить токенайзер, если:

  1. Возвращать Uint32Array(token_code, offset_start, offset_end, start_line, start_column, end_line, end_column). То есть, вместо строки с именем токена использовать цифровой код. А content парсер может взять сам из строки входящего CSS по offset_start и offset_end.
  2. Если токенайзер будет использовать один и тот же экземпляр Uint32Array. В итоге не будет постоянно создаваться больше объектов и вызываться сборщик мусора.

Польза: указать в резюме коммит в известный проект.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогВасилий ФедосеевВасилий Федосеев Василий Федосеев

Бэк: TestProf: поддержка трейтов в FactoryDefault

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

FactoryDefault – это один из инструментов, входящих в состав TestProf.

Он позволяет переиспользовать уже созданные фабрикой объекты для вложенных ассоциаций, решая таким образом проблему каскадов фабрик.

Необходимо сделать так, чтобы FactoryDefault учитывал используемые при создании ассоциаций трейты.

Польза: узнать, как работает FactoryGirl изнутри, принести пользу сообществу.

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

ПомогЕвгений ПетуховЕвгений Петухов Евгений Петухов

Фронт: Исправить логику вставки row/column в Автопрефиксере

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

Autoprefixer умеет вставлять префиксы Grid Layout для Internet Explorer. Поддерживается даже grid-template-areas.

Но, в некоторых случаях, префиксы для grid-template-areas в медиа-выражении могут быть вставлены не в том месте. Нужно изменить логику.

Польза: указать в резюме коммит в известный проект.

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

ПомогАнтон ТужикАнтон Тужик Антон Тужик

Фронт: Предупреждать об устаревшем caniuse-lite в Browserslist

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

Многие пользователи Autoprefixer и Babel забывают обновлять базу браузеров caniuse-lite. В этой базе есть информация о времени релиза каждой версии браузера. Взяв дату самой свежей версии браузера, можно примерно узнать время релиза caniuse-lite. Если база не обновлялась уже полгода, надо показать предупреждение пользователю.

Польза: указать в резюме коммит в известный проект.

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

ПомогEvilebot TnawiEvilebot Tnawi Evilebot Tnawi

Фронт: Обновить зависимости в cssnano

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

cssnano сжимает CSS и используется по умолчанию в webpack. Эта задача поможет с выпуском cssnano 4.

Надо обновить зависимости и API.

Польза: указать в резюме коммит в известный проект.

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

ПомогИгорь УваровИгорь Уваров Игорь Уваров

Фронт: Починить работу со шрифтами в cssnano

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

cssnano сжимает CSS и используется по умолчанию в webpack. Эта задача поможет с выпуском cssnano 4.

Нужно разобраться с ошибкой шрифтов.

Польза: указать в резюме коммит в известный проект.

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

ПомогВлад ЯнчевскийВлад Янчевский Влад Янчевский

Фронт: Починить работу с initial в cssnano

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

cssnano сжимает CSS и используется по умолчанию в webpack. Эта задача поможет с выпуском cssnano 4.

Сейчас cssnano, встретив:

.a {
  all: initial;
  color: red;
}
.b {
  all: initial;
  color: blue;
}

может превратить свойства в:

.a {
  color: red;
}
.a,
.b {
  all: initial;
  color: red;
}
.b {
  color: blue;
}

В итоге правило будет работать неправильно.

Польза: указать в резюме коммит в известный проект.

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

ПомогEvilebot TnawiEvilebot Tnawi Evilebot Tnawi

Фронт: Починить mergeLonghand в cssnano

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

cssnano сжимает CSS и используется по умолчанию в webpack. Эта задача поможет с выпуском cssnano 4.

Правило mergeLonghand иногда работает неправильно. Надо изучить его и починить.

Польза: указать в резюме коммит в известный проект.

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

ПомогЕвгений ГрачевЕвгений Грачев Евгений Грачев

Фронт: Починить работу с -ms-input-placeholder в cssnano

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

cssnano сжимает CSS и используется по умолчанию в webpack. Эта задача поможет с выпуском cssnano 4.

Сейчас cssnano, встретив :-ms-input-placeholder {} ::-ms-input-placeholder { }, объединит правила в :-ms-input-placeholder, ::-ms-input-placeholder { }. К сожалению, это ломает поддержку Internet Explorer.

Польза: указать в резюме коммит в известный проект.

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

ПомогСергей КарапетянСергей Карапетян Сергей Карапетян

Фронт: Починить работу со Custom Properties в cssnano

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

cssnano сжимает CSS и используется по умолчанию в webpack. Эта задача поможет с выпуском cssnano 4.

Сейчас cssnano, встретив padding: 10px; padding: var(--name), удалит первое свойство. Надо исправить это поведение.

Польза: указать в резюме коммит в известный проект.

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

ПомогПавел ВинникПавел Винник Павел Винник

Фронт: Добавить postcss-preset-env на сайт PostCSS

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

Скоро postcss-preset-env заменит cssnext и станет одним из «главных» плагинов PostCSS. Но на сайте PostCSS мы все еще рекомендуем cssnext.

Задача подойдет, если вы больше фокусируетесь на дизайне и CSS, но хотите получить больше опыта с React.

Польза: указать в резюме коммит в известный проект.

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

ПомогДаниил СеверинДаниил Северин Даниил Северин

Фронт: Сделать хороший дизайн главной страницы postcss-preset-env

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

Скоро postcss-preset-env заменит cssnext и станет одним из «главных» плагинов PostCSS.

У плагина есть сайт, но его главная страница совсем не информативная.

Задача подойдет, если вы больше фокусируетесь на дизайне и CSS.

Польза: указать в резюме коммит в известный проект.

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

ПомогСтанислав БотевСтанислав Ботев Станислав Ботев

Фронт: Добавить проверку наличия :focus в Stylelint

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

Многие пользователи пользуются сайтами с клавиатуры; у некоторых даже нет другой возможности. Но большинство фронтенд-разработчиков забывают указать :focus стили.

Эту проблему можно уменьшить, если добавить в Stylelint правило, которое будет напоминать разработчику писать :focus стиль.

Чтобы понять, каким элементам нужен :focus, можно использовать стили :hover. Можно считать, что всем стилям с :hover, нужен какой-то парный стиль с :focus.

Польза: указать в резюме коммит в известный проект.

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

ПомогСтанислав БотевСтанислав Ботев Станислав Ботев

Фронт: Добавить правило про reduced-motion в Stylelint

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

Некоторым пользователям не нравится, когда на странице много анимаций. В Safari есть специальное медиа-выражение @media (prefers-reduced-motion) { }. Если пользователь не хочет анимаций, Safari будет его применять.

Но большинство фронтенд-разработчиков про него забывают. Эту проблему может решить новое правило для Stylelint.

Польза: указать в резюме коммит в известный проект.

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

ПомогПавел ВостриковПавел Востриков Павел Востриков

Фронт: Добавить поддержку игнорирования следующей строки в Autoprefixer

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

Сейчас Autoprefixer понимает особые комментарии /* autoprefixer: off */ и /* autoprefixer: on */, которые выключают или включают его на весь блок стилей.

Нужно добавить поддержку комментария /* autoprefixer: ignore next */, чтобы Autoprefixer игнорировал только следующее свойство или правило.

Польза: указать в резюме коммит в известный проект.

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

ПомогПавел ВостриковПавел Востриков Павел Востриков

Фронт: Добавить выбор версий Node.js в Browserslist

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

Browserslist — общий конфиг списка браузеров для Autoprefixer, Babel и других front-end инструментов. В конфиге разработчики пишут запросы вида last 2 versions, Browserslist переводит это в список конкретных версий браузеров.

Но для Babel и ESLint нужно указывать не только браузеры, но и версии Node.js.

Польза: указать в резюме коммит в проект с 20 млн. загрузок в месяц.

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

ПомогСергей ЛысенкоСергей Лысенко Сергей Лысенко

Фронт: Добавить поддержку color-adjust в Автопрефиксер

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

CSS-свойство color-adjust из черновика CSSWD работает в webkit-браузерах через свойство -webkit-print-color-adjust.

Нужно добавить поддержку этого свойства в Автопрефиксер.

Польза: написать в резюме, что сделали минорный релиз Автопрефиксера.

Бэк: Добавить новые источники данных в Ossert: Twitter

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

Нужно добавить в Ossert новые источники данных. Отличным кандидадатом с достаточно богатым API является Twitter.

Это позволит измерить еще один важный аспект развития Open-Source библиотек — хайп, реакцию на посты про проект, а также количество заинтересованных проектом.

Польза: возможность научиться работать с API Twitter, написать надежный API клиент и узнать больше о метриках и поведении разработчиков свободного ПО.

Помощь запрашивалВова ДемВова Дем Вова Дем

Бэк: Добавить поддержку Plezi/Iodine в LiteCable

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

LiteCable – это альтернативная реализация фреймворка ActionCable из Rails, совместимая с ActionCable-клиентами, но при этом имеющая минимум зависимостей.

Необходимо добавить в LiteCable интеграцию с Plezi (Iodine) “из коробки” (по аналогии с тем, как это сделано для AnyCable).

Польза: познакомиться и научиться работать с новым веб-сервером для Ruby приложений (Iodine); разобраться во внутреннем устройстве real-time фреймворков.

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

ПомогАлексей КомаровАлексей Комаров Алексей Комаров

Фронт: Сделать калькулятор вероятность коллизии NanoID

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

NanoID — JavaScript-библиотека для генерации случайных ID. Как и у UUID, есть определенная вероятность того, что будет сгенерированы два одинаковых ID.

Вероятность очень мала; в то же время, у многих пользователей генерируется небольшое количество идентификаторов, так что они могут уменьшить длину желаемого ID без особых рисков. Но чтобы понять, насколько можно уменьшить такую длину, нужно сделать калькулятор.

Польза: получить опыт JS-разработки; получить публичный сайт в свое резюме.

Бэк: Isolator: инструмент для отслеживания побочных эффектов внутри транзакций БД

Для продвинутых, задача на неделю

Необходимо написать инструмент для Ruby-стека, который будет отслеживать выполнение потенциально опасных действий внутри транзакции БД (например, HTTP-запросов или отправки фоновых задач в очередь).

Польза: разобраться в том, как работают популярные ORM и другие библиотеки для работы с «внешним миром»; написать инструмент, которым будет активно пользоваться Ruby-сообщество.

Помощь запрашивалКирилл КузнецовКирилл Кузнецов Кирилл Кузнецов

Бэк: Добавить поддержку Chef Client 13 в кукбук для управления БД PostgreSQL: postgresql_lwrp

Для продвинутых, задача на пару дней

postgresql_lwrp — самый удобный и гибкий кукбук для системы управления конфигурациями Chef, обеспечивающий установку и настройку БД PostgreSQL.

Нужно обеспечить его работу в Chef Client версии 13.

Польза: возможность попрактиковаться в написании кукбуков Chef, разобраться в особенностях Chef 13.

Помощь запрашивалАндрей ДерябинАндрей Дерябин Андрей Дерябин

ПомогМихаил МандроновМихаил Мандронов Михаил Мандронов

Бэк: Поддержка Excon для Sniffer

Для новичков, задача на пару дней

Sniffer – это гем для логирования и анализа HTTP-траффика, который поддерживает большинство ruby-библиотек для работы с HTTP-запросами.

Hеобходимо добавить поддержку Excon.

Польза: получить опыт разработки gem’ов, разобраться в принципах работы с HTTP-запросами в Ruby, помочь полезному проекту

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

ПомогВладимир БоровикВладимир Боровик Владимир Боровик

Фронт: Добравить поддержку конфига в Size Limit

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

Прямо сейчас Size Limit читает свои настройки из package.json. Но было бы хорошо добавить поддержку отдельного файла настроек, например, .size-limit с JSON внутри.

Польза: получить больше опыта работы с Node.js.

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

ПомогИгорь ДерябинИгорь Дерябин Игорь Дерябин

Фронт: Добравить запрос по году релиза в Browserslist

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

Browserslist — инструмент для Autoprefixer и Babel для выбора браузеров, которые нужно поддерживать в проекте.

Есть хорошая идея добавить запрос вида since 2013 для выбора версий браузеров, вышедших с 2003 года.

Польза: принять участие в проекте с 11 млн. загрузок.

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

ПомогАлексей КомаровАлексей Комаров Алексей Комаров

Фронт: Улучшить поддержку Grid Layout от IE в Autoprefixer

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

Autoprefixer умеет вставлять -ms- префиксы для CSS Grid Layout, заменяя синтаксис, но эта поддержка очень ограничена. Есть мнение, что ее можно улучшить.

Польза: разобраться в Grid Layout, принять участие в большом open-source проекте.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогЮрий ЛебедевЮрий Лебедев Юрий Лебедев

Бэк: Active Record JSONB ассоциации

Для продвинутых, задача на неделю

Необходимо реализовать возможность хранить данные для ассоциаций (внешние ключи) в поле колонки типа JSONB (PostgreSQL), сохранив при этом большую часть функционала ассоциаций Active Record.

Польза: возможность научиться работать с внутренностями ActiveRecord и JSONB.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогНиколай СверчковНиколай Сверчков Николай Сверчков

Бэк: Clowne: инструмент для клонирования моделей

Для продвинутых, задача на неделю

Необходимо написать инструмент для клонирования моделей (например, Active Record) с гибкими настройками. Существующие гемы (deep_clonable и amoeba), к сожалению, неудобны при работе со сложной бизнес-логикой и завязаны на ActiveRecord.

Польза: попрактиковаться в написании расширяемого DSL на Ruby и написать инструмент, которым будет активно пользоваться сообщество.

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

ПомогИгнат ЗакревскийИгнат Закревский Игнат Закревский

Бэк: OmniAuth-стратегия для входа через новый eBay OAuth API

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

Необходимо разработать OmniAuth-стратегию для входа в приложения на Ruby с учетной записью eBay в виде отдельного гема.

Сейчас есть гемы, которые реализуют вход через метод Auth’n’auth (например, подзаброшенный гем omniauth-ebay), а через метод OAuth — нет. (Технически оба метода работают по протоколу OAuth, что вносит путаницу).

Для работы с новыми REST API eBay пользователь должен входить именно через новый метод входа.

Польза: возможность разобраться, как же работает вход через соцсети протокол OAuth и библиотека OmniAuth.

Решение: итоговая реализация основана на решении Игната Закревского, но и Андрей Падерин и Илья Долгирев прислали рабочие решения, за что им выражается благодарность.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогИлья ДолгиревИлья Долгирев Илья Долгирев

Бэк: Интеграция EventProf и Minitest

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

EventProf – один из инструментов, входящих в состав TestProf. На данный момент работает “из коробки” только с фреймворком RSpec.

Необходимо реализовать интеграцию Minitest и EventProf.

Польза: узнать, как работают профайлеры кода изнутри, научиться писать расширения для Minitest.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогРуслан ГафуровРуслан Гафуров Руслан Гафуров

Бэк: Поддержка Fabrication в TestProf

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

TestProf – это набор инструментов для профилирования тестов, который включает в себя FactoryProf, анализатор использования фабрик в тестах.

Необходимо добавить поддержку Fabrication (альтернатива FactoryGirl) в FactoryProf: сбор общей статистики по использованию фабрик, построение factory flame графиков.

Польза: узнать, как работают профайлеры кода изнутри, познакомиться с гемом Fabrication.

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

ПомогИгорь ЛобановИгорь Лобанов Игорь Лобанов

Фронт: Убрать CoreJS из EmojiMart

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

EmojiMart — один из лучших контролов для выбора эмодзи. Сейчас у него в зависимостях есть огромный core-js. Эта зависимость нужна для поддержки ES2016+ в IE. Но, судя по всему, они загружают такую большую зависимость ради пары строк кода.

Нужно убрать core-js и починить работу в IE более простыми способами.

Польза: получить опыт оптимизации размера проекта.

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

ПомогНикита ФилатовНикита Филатов Никита Филатов

Фронт: Уменьшить размер EmojiMart

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

EmojiMart — один из лучших контролов для выбора эмодзи. Но сейчас они собирают всё с помощью webpack. В итоге, если пользователь подключает emoji-mart и core-js, у него в сборке оказывается два core-js — один пользовательский и второй от EmojiMart.

Нужно переделать сборку с webpack на просто Babel, сохраняя древовидную структуру. После чего добавить плагин для вырезания propTypes.

Польза: получить опыт оптимизации размера проекта.

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

ПомогИгорь ДерябинИгорь Дерябин Игорь Дерябин

Фронт: Задержка при состоянии connecting в Logux Status

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

Logux Status показывает состояние синхронизации. Функция status() является фундаментом, чтобы построить свой UI состояния синхронизации.

Одни из шагов синхронизации — connecting и connectingAfterWait. Они говорят о том, что Logux пытается подключится к серверу.

Когда нет Wi-Fi, состояния connecting и connectingAfterWait отображаются слишком быстро — всего на 1—10 мс. В итоге интерфейс неприятно мигает.

Польза: принять участие в разработке Logux.

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

ПомогИгорь ДерябинИгорь Дерябин Игорь Дерябин

Фронт: Опция keepLast для Logux

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

Logux хранит события в логе. Чтобы чистить лог, он использует понятие «смысла жизни». У каждого события есть «смысл жизни» — массив строк. В любой момент разработчик может убрать смысл жизни у события. Как только у события не остается смыслов жизни, оно удаляется.

Однако, на практике, часто нужно одно и то же действие — хранить в логе только одно событие какого-то типа. Для этого приходится часто повторять один и тот же код:

log.add({ type: "app/A" }, { reasons: ["app/lastA"] }).then(meta => {
  log.removeReason("app/lastA", { maxAdded: meta.added - 1 });
});

Этот код добавляет в лог событие со смыслом жизни app/lastA и удаляет этот смысл у всех предыдущих событий.

Код приходится писать слишком часто. Стоит добавить опцию keepLast, которая бы делала то же самое.

log.add({ type: "app/A" }, { keepLast: "app/lastA" });

Польза: принять участие в разработке Logux.

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

ПомогВладимир БоровикВладимир Боровик Владимир Боровик

Фронт: Переподключать Logux при появлении связи

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

Logux, при разрыве связи, раз в несколько секунд пытается подключиться снова.

Браузеры посылают событие online при появлении связи. Мы можем запускать попытку связи чуть раньше.

Польза: принять участие в разработке Logux; получить опыт работы с редкими API браузера.

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

ПомогАлексей НикифоровАлексей Никифоров Алексей Никифоров

Фронт: Делать несколько попыток при ошибке связи в Yaspeller

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

Yaspeller — JS-утилита, которая проверяет орфографию, посылая запрос на сервера Яндекса. Интернет не всегда стабилен — иногда запрос заканчивается ошибкой связи.

Нужно исправить Yaspeller, чтобы он, в случае ошибки, делал еще 2 запроса и только потом возвращал ошибку.

Польза: получить опыт разработки под Node.js.

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

ПомогАнтон АртамоновАнтон Артамонов Антон Артамонов

Фронт: Перенести все логи Logux Server на Bunyan

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

Сейчас у Logux Server два типа логов — Human и Bunyan. Но можно сильно упростить код, если генерировать формат Human из Bunyan.

Польза: принять участие в разработке Logux; получить опыт разработки на Node.js и Bunyan.

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

ПомогКонстантин МамаевКонстантин Мамаев Константин Мамаев

Фронт: Общие тесты для хранилища лога Logux

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

Logux может хранить лог в разных хранилищах — в памяти или IndexedDB. На подходе SQL-хранилище.

Сейчас у каждого хранилища свои тесты — много тестов дублируются. Нужно создать общие тесты для всех хранилищ.

Польза: принять участие в разработке Logux; получить опыт тестирования и Promise.

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

ПомогВладимир КатюринВладимир Катюрин Владимир Катюрин

Бэк: Привязка параметров запроса к отчету rspec-sqlimit

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

Необходимо доработать сообщение об ошибке RSpec-матчера exceed_query_limit из гема rspec-sqlimit таким образом, чтобы показывать выполненные SQL запросы вместе с их переменными.

Польза: возможность сделать первый вклад в Open Source проект (особенно если вы не знаете, с чего начать). Попутно можно познакомиться с механизмами ActiveSupport Notifications и Instrumentation, разобраться в устройстве матчеров RSpec.

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

ПомогВиктор ПасынокВиктор Пасынок Виктор Пасынок

Фронт: Навигация стрелками на сайте Stylelint

Для новичков, задача на пару дней

У Stylelint есть сайт со списком правил. Они перечисленны списком, но их сложно читать последовательно — нет ссылок на следующее и предыдущее правило.

Польза: получить опыт в JS.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогАндрей НовиковАндрей Новиков Андрей Новиков

Бэк: Инструмент для создания частичного, анонимизированного дампа базы данных

Для продвинутых, задача на неделю

Необходимо разработать инструмент (gem) для создания частичного, анонимизированного дампа базы данных Rails (ActiveRecord) приложения.

Это позволит нам использовать на тестовых серверах данные, максимально приближенные к боевым, но при этом не делать полный дамп (который может быть очень большим). Дополнительно в целях безопасности мы также хотим анонимизировать часть данных (персональные данные и т.п.).

Польза: возможность познакомится с внутренностями ActiveRecord, попрактиковаться в написании Ruby gems и написать инструмент, которым будет активно пользоваться сообщество.

Помощь запрашивалВова ДемВова Дем Вова Дем

Бэк: Утилита для запуска WebSocket-клиентов с поддержкой сценариев

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

Необходимо разработать Ruby-инструмент (CLI) для выполнения сценариев взаимодействия WebSocket-клиентов с сервером.

Утилита может быть использована как для blackbox-тестирования (в том числе и нагрузочного) WebSocket-приложений, так и просто в качестве удобного консольного клиента при разработке.

Польза: возможность применить на практике методы многопоточного программирования, попрактиковаться в написании CLI, поближе познакомиться с технологией WebSocket.

Решение: итоговая реализация основана на решениях Кирилла Архипова и Сергея Елушева, за что им выражается особая благодарность.

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

ПомогТимур РамазановТимур Рамазанов Тимур Рамазанов

Бэк: Policy Object Pattern

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

В GitHub-репозитории tram-policy опубликована документация к gem, реализующему базовый класс для контексто-специфичных валидаторов в Ruby. В описании приводится мотивация, примеры интерфейса и поддерживаемых фич; дан список классов и объектов, составляющих публичный интерфейс. Сейчас репозиторий содержит только документацию без какого-либо кода (помимо тривиальных объявлений).

Задача состоит в том, чтобы полностью разработать gem в соответствии с описанием.

Польза: возможность попрактиковаться в написании gem’ов, реализовать один из базовых паттернов разработки средствами чистого Ruby (попутно сняв «ауру магизма» с валидаторов, как мы привыкли к ним в Rails), познакомиться с классической библиотекой I18n, создать простыми средствами один из базовых компонентов для сложных Rails/PORO приложений.

Решение: Второе и третье места с благодарностью за участие в разработке достаются Анастасии Власовой и Сергею Чечаеву, также предложившим свои решения.

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

ПомогЕвгений ШкодинЕвгений Шкодин Евгений Шкодин

Фронт: Виджет для Logux

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

Нужно сверстать виджет статуса синхронизации по макетам Антона Ловчикова.

Польза: принять участие в разработке Logux; получить больше опыта в webpack и создании виджетов.

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

ПомоглаЖулдуз ЖанкеноваЖулдуз Жанкенова Жулдуз Жанкенова

Фронт: Тесты для Browserslist CLI

Для новичков, задача на пару дней

Browserslist используют Автопрефиксер, ESLint и Babel. У него есть консольный интерфейс. Но он не покрыт тестами — регулярно в нем находят проблемы.

Польза: получить больше опыта в тестировании.

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

ПомогМаксим ГатилинМаксим Гатилин Максим Гатилин

Фронт: Генератор настроек Stylelint

Для новичков, задача на пару дней

У CSSComb есть шикарный инструмент для генерации настроек. Он содержит неколько шагов, и на каждом шаге показывает несколько примеров кода. Пользователь выбирает, какой ему больше нравится — и после всех шагов получает готовые настройки для CSSComb.

Надо создать такой же для Stylelint. Только показывать настройки прямо в процессе.

Польза: получить реальный сайт в резюме, получить опыт в JS.

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

ПомогАнтон АртамоновАнтон Артамонов Антон Артамонов

Фронт: Bunyan-формат в Logux Server

Для новичков, задача на пару дней

Bunyan становится форматом логов де-факто в Node.js. Для удобной интеграции с инфраструктурой в Logux Server нужно добавить поддержку этого формата.

Польза: принять участие в разработке Logux; получить больше опыта в JS и построении систем логирования.

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

ПомогВладимир ТрухинВладимир Трухин Владимир Трухин

Фронт: Отображать ошибки с Logux-сервера на клиенте

Для новичков, задача на пару дней

Logux-сервер работает с клиентом по веб-сокету. При ошибке сервера, клиент не отобразит страницу с ошибкой, как было бы с PHP или Ruby on Rails.

Поэтому надо добавить способ отображения серверной ошибки к консоли браузера.

Польза: внести свой вклад в протокол Logux; получить больше опыта в JS.

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

ПомогРоман ФурсовРоман Фурсов Роман Фурсов

Фронт: Цвета в логере Logux

Для новичков, задача на пару дней

В Logux Status есть log(), который выводит в консоль информацию о том, что происходит с Logux. Вывод идет обычным текстом, хотя Chrome уже поддерживает цветной вывод.

Польза: принять участие в разработке Logux; получить больше опыта в JS и console.

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

ПомогАлексей КузнецовАлексей Кузнецов Алексей Кузнецов

Фронт: Страница тестирования Logux Status

Для новичков, задача на пару дней

Для UI-функций недостаточно модульного тестирования. В Logux Status нужна страница, где можно было бы в реальности посмотреть на все его возможности.

Польза: принять участие в разработке Logux; получить больше опыта в JS и webpack.

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

ПомогРоман ФурсовРоман Фурсов Роман Фурсов

Фронт: Добавить ES2015+ в конфиг ESLint для Logux

Для новичков, задача на пару дней

Logux написан на ES5, чтобы работать в браузере без компиляции. Но Logux Server не будет работать в браузере. Минимальной версией node.js будет 4, так что его можно переписать на ES6.

Польза: принять участие в разработке Logux; получить больше опыта в работе с ESLint и ES6.

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

ПомогКонстантин ЕпишевКонстантин Епишев Константин Епишев

Фронт: Перевести Logux-сервер на ES6

Для новичков, задача на пару дней

Logux написан на ES5, чтобы работать в браузере без компиляции. Но Logux Server не будет работать в браузере. Минимальной версией node.js будет 4, так что его можно переписать на ES6.

Польза: принять участие в разработке Logux; получить больше опыта в работе с ESLint и ES6.

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

ПомогАндрей МануйловАндрей Мануйлов Андрей Мануйлов

Фронт: Логер в Logux Status

Для новичков, задача на пару дней

Logux Status — это подборка методов отображения статуса синхронизации в браузере. Нужно добавить вывод процесса синхронизации через console.log.

Польза: принять участие в разработке Logux; получить больше опыта в JS.

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

ПомогАнтон СавоськинАнтон Савоськин Антон Савоськин

Фронт: Перевести Logux-сервер на µWS

Для новичков, задача на пару дней

Logux-сервер сейчас использует пакет ws для работы с веб-сокетами. Но пакет uWebSockets гораздо быстрее.

Польза: принять участие в разработке Logux; получить больше опыта в работе с веб-сокетами.

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

ПомогАндрей МануйловАндрей Мануйлов Андрей Мануйлов

Фронт: Смена favicon в Logux Status

Для новичков, задача на пару дней

Logux Status — это подборка методов отображения статуса синхронизации в браузере. Нужно добавить смену favicon при онлайне, офлайне и ошибке.

Польза: принять участие в разработке Logux; получить больше опыта в JS.

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

ПомогВладимир ТрухинВладимир Трухин Владимир Трухин

Фронт: Подтверждения закрытия вкладки в Logux Status

Для новичков, задача на пару дней

Logux Status — это подборка методов отображения статуса синхронизации в браузере. Нужно добавить подтверждение закрытия вкладки при неотправленных событиях в логе.

Польза: принять участие в разработке Logux; получить больше опыта в JS.

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

ПомогАндрей МануйловАндрей Мануйлов Андрей Мануйлов

Фронт: Привлекать внимание при ошибке в Logux Status

Для новичков, задача на пару дней

Logux Status — это подборка методов отображения статуса синхронизации в браузере. Нужно добавить смену <title> при ошибке, чтобы подсветить вкладку в браузере.

Польза: принять участие в разработке Logux; получить больше опыта в JS.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогТимур РамазановТимур Рамазанов Тимур Рамазанов

Бэк: Поддержка ассоциаций в Logidze

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

Библиотека Logidze позволяет работать с версиями объектов ActiveRecord моделей и историей их изменений.

Необходимо расширить эту интеграцию, добавив поддержку ассоциаций.

Польза: возможность познакомится с внутренностями ActiveRecord и научиться с ними работать.

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

ПомогДенис РасловДенис Раслов Денис Раслов

Фронт: Проверка сообщений в Logux

Для новичков, задача на пару дней

Нужно добавить в Logux Sync код, который будет проверять формат и типы принятых сообщений.

Польза: принять участие в разработке Logux; разобраться с его протоколом.

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

ПомогПавел КовалевПавел Ковалев Павел Ковалев

Фронт: Настройки Logux-сервера через аргументы и переменные среды

Для новичков, задача на пару дней

Сейчас порт, хост и пути к TLS-ключам можно задать только в коде сервера. Нужно добавить в Logux-сервер чтение CLI-аргументов и переменных среды.

Польза: принять участие в разработке Logux; разобраться в Logux-сервере.

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

ПомогГригорий МорозГригорий Мороз Григорий Мороз

Фронт: Понятные ошибки в Logux-сервере

Для новичков, задача на пару дней

Нужно вывести подробное описание по самым распространенным ошибкам запуска Logux-сервера и объяснить что делать, чтобы их исправить.

Польза: принять участие в разработке Logux.

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

ПомогПавел КовалевПавел Ковалев Павел Ковалев

Фронт: Перевести Logux-сервер на снимки Jest

Для новичков, задача на пару дней

Logux-сервер сейчас использует свою систему снимков для тестирования. Но у Jest уже есть хорошая система снимков. Нужно перенести тесты на них.

Польза: принять участие в разработке Logux; получить больше опыта в тестировании.

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

ПомогНикита ГусаковНикита Гусаков Никита Гусаков

Фронт: ES5-плагин для ESLint

Для новичков, задача на пару дней

Нужно написать eslint-plugin-es5 с правилами для ESLint для проверки того, что в коде не используется ES2016.

Польза: получить опыт расширения ESLint, поучаствовать в проекте Logux.

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

ПомоглаАнна СтолярАнна Столяр Анна Столяр

Фронт: Перенести проверку протокола в клиент Logux

Для новичков, задача на пару дней

Нужно добавить на клиент предупреждение о нешифрованом веб-сокете в продакшене. Убрать эти ограничения на сервере.

Польза: принять участие в разработке Logux и разобраться с его внутренним устройством.

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

ПомогОлег АлешкинОлег Алешкин Олег Алешкин

Фронт: Парсер PostCSS для синтаксиса Sass

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

PostCSS имеет сменные синтаксисы. Это особо полезно для Stylelint, чтобы проверять исходники. Сейчас можно работать с Less и SCSS.

Нужно взять dart-sass и сделать на его основе парсер синтаксиса Sass, который использует отступы.

Польза: познакомиться с командой Sass; многие крупные проекты смогут использовать ваш проект для Stylelint.

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

ПомоглаНаталия КоротковаНаталия Короткова Наталия Короткова

Фронт: Добавить кнопку Gitter на postcss.org

Для новичков, задача на пару дней

PostCSS использует чат Gitter для помощи разработчикам. У сервиса появился скрипт для добавления чата на любой сайт. Надо добавить его на postcss.org.

Польза: получить опыт с React и красивую строку в резюме.

Помощь запрашивалЭмиль КашкевичЭмиль Кашкевич Эмиль Кашкевич

Бэк: Поддержка Yarn для npmdc

Для новичков, задача на пару дней

Сейчас gem npmdc проверяет наличие установленных npm-пакетов и соответствие их версий на основе файла package.json.

Нужно добавить поддержку Yarn.

Польза: возможность попрактиковаться в программировании на чистом Ruby и написании gem’ов, помочь полезному проекту, который нужен в каждом современном большом Ruby веб-приложении.

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

ПомогМаксим СеменовМаксим Семенов Максим Семенов

Фронт: Среды в Browserslist

Для новичков, задача на пару дней

Автопрефиксер, Stylelint, babel-preset-env и cssnext используют Browserslist, чтобы пользователь мог разом указывать список браузеров, которые нужно поддерживать в этом проекте.

Нужно доработать Browserslist, чтобы в browserslist можно было указывать отдельный список для production и development среды.

Польза: сделать функцию, которой будут пользоваться многие веб-разработчики. Эта функция будет использоваться в create-react-app Дэна Абрамова.

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

ПомогСтепан КузьминСтепан Кузьмин Степан Кузьмин

Фронт: Browserslist и package.json

Для новичков, задача на пару дней

Автопрефиксер, Stylelint, babel-preset-env и cssnext используют Browserslist, чтобы пользователь мог разом указывать список браузеров, которые нужно поддерживать в этом проекте.

Нужно доработать Browserslist, чтобы он смотрел не только в browserslist, но и в ключ browserslist в package.json.

Польза: сделать функцию, которой будут пользоваться многие веб-разработчики. Эта функция будет использоваться в create-react-app Дэна Абрамова.

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

ПомогОлег АлешкинОлег Алешкин Олег Алешкин

Фронт: Загрузка статистики для Browserslist

Для новичков, задача на пару дней

Автопрефиксер, Stylelint, babel-preset-env и cssnext используют Browserslist, чтобы пользователь мог разом указывать список браузеров, которые нужно поддерживать в этом проекте.

Browserslist поддерживает указание браузеров по проценту рыночной доли. Можно указывать реальную статистику пользователей сайта, чтобы точнее считать долю.

Нужно добавить поддержку файла browserslist-stats.json для указания статистики сайта.

Польза: сделать функцию, которой будут пользоваться куча веб-разработчиков.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогТимур РамазановТимур Рамазанов Тимур Рамазанов

Бэк: Фильтрация полей для версионирования в Logidze

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

В библиотеку Logidze нужно добавить функционал фильтрации полей, учитываемых при версионировании.

Это позволит уменьшить размер лога, а значит расход ресурсов и время на обработку.

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

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

ПомогМакс ЛарионовМакс Ларионов Макс Ларионов

Фронт: SugarSS в Sublime Text

Для новичков, задача на пару дней

Нужно добавить поддержку синтаксиса SugarSS в плагин PostCSS для Sublime Text.

Польза: очень простая задача, чтобы разобраться в опенсорсе; позволит понять, как устроен Sublime Text внутри; попасть в анонсы PostCSS.

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

ПомогАлексей БондаренкоАлексей Бондаренко Алексей Бондаренко

Фронт: Событийная архитектура PostCSS

Для продвинутых, задача на месяц

Нужно придумать новый API для плагинов PostCSS — чтобы они все работали вместе, в одном цикле прохода по AST-дереву.

Задание сложное. Оно меньше про код и больше про переговоры, анализ и архитектуру. Но зато дает максимальное количество опыта.

Польза: стать одним из ведущих коммитеров PostCSS, добавить в резюме строку о разработке грамотной архитектуры в мировом проекте.

Бэк: Добавить новые источники данных в Ossert: StackOverflow

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

Нужно добавить в Ossert новые источники данных. Отличным кандидадатом с достаточно богатым API является StackOverflow.

Это позволит охватить еще один важный аспект развития Open-Source библиотек — доступность и объем поддержки, а также заинтересованность в них.

Польза: возможность научиться работать с API StackOverflow и узнать больше о метриках и способах измерения зрелости свободного ПО.

Помощь запрашивалВова ДемВова Дем Вова Дем

ПомогКирилл СадовникКирилл Садовник Кирилл Садовник

Бэк: Инструмент для тестирования совместимости для AnyCable

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

Нужно написать скрипт (и упаковать его в гем), который позволит проводить аттестационное тестирование (от англ. “conformance testing”) приложений-серверов для AnyCable.

Это повысит скорость и удобство разработки новых реализаций серверов, а также поможет поддерживать актуальность текущих реализаций.

Польза: возможность подробно изучить ActionCable и AnyCable, попрактиковаться в написании гемов и написать инструмент, которым будет активно пользоваться сообщество.

Помощь запрашивалСергей ДолгановСергей Долганов Сергей Долганов

Помог null

Бэк: Добавить новые источники данных в Ossert: Reddit

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

Нужно добавить в Ossert новые источники данных. Отличным кандидадатом с достаточно богатым API является Reddit.

Это позволит охватить еще один важный аспект развития Open-Source библиотек — доступность и объем поддержки, а также заинтересованность в них.

Польза: возможность научиться работать с API Reddit и узнать больше о метриках и поведении разработчиков свободного ПО.

Помощь запрашивалСергей ДолгановСергей Долганов Сергей Долганов

ПомогСергей МаксимовСергей Максимов Сергей Максимов

Бэк: API Endpoint Sampler

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

Пусть существует Rails приложение с некоторым HTTP API. Будем каждый URL этого API считать эндпоинтом, например:

GET /api/v1/projects/:project_id/notes
GET /api/v1/projects/:project_id/notes/:note_id
POST /api/v2/projects
PUT /api/v3/projects/:project_id

Что хочется получить:

Gem для сбора, просмотра и тэгирования проб (пар запрос/ответ) определенных эндпоинтов HTTP API произвольного Rails-приложения. Тэгом считать произвольную строку.

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

ПомогЕвгений ЖаровЕвгений Жаров Евгений Жаров

Фронт: Тестирование CSS-минификаторов

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

Нужно сделать скрипт, который будет брать пару популярных сайтов (типа GitHub) и на их верстке тестировать все минификаторы с помощью gemini или подобного тестирования по скриншотам. Результатом работы будет HTML страница с результатами каждого минификатора.

Польза: разобраться в тестировании по снимкам; познакомиться со всеми разработчиками CSS-минификаторов; строчка в резюме о том, что на качество всех CSS-минификаторов повлияли лично вы.