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

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

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

Бэк: xk6-cable: поддержка асинхронных проверок

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

k6 – это современный инструмент для нагрузочного тестирования, написанный на Go и использующий JavaScript для описания тестовых сценариев. Из коробки k6 позволяет работать с WebSocket’ами, однако, тестирование Action Cable и AnyCable сценариев получается очень многословным. Для решения этой проблемы было написано расширение xk6-cable.

Сейчас xk6-cable поддерживает только синхронное тестирование, но иногда асинхронность все же может понадобиться (например для дополнительной проверки сообщений из соседних каналов). Мы предлагаем добавить метод channel.on_message(callback), который добавит callback для асинхронной проверки всех приходящих в канал сообщений.

Польза: получить опыт работы с Go, разобраться в том, как устроен k6 и его экосистема расширений, принести пользу Rails сообществу.

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

Пример нового интерфейса:

import { check } from "k6";
import cable from "k6/x/cable";

export default function () {
  const client = cable.connect("ws://localhost:8080/cable");
  const mainChannel = client.subscribe("MainChannel");
  const kgbChannel = client.subscribe("KgbChannel");

  kgbChannel.onMessage((msg) => {
    check(msg, {
      "received msg": (obj) => obj.message === "hello",
    });
  });

  mainChannel.perform("speak", { message: "hello" });

  let message = mainChannel.receive({ author_id: userId });
  check(message, {
    "received its own message": (obj) => obj,
  });

  sleep(1);

  // Terminate the WS connection
  client.disconnect();
}
  1. задать вопросы или попросить уточнения в issue на GitHub;
  2. форкнуть проект xk6-cable на GitHub;
  3. реализовать необходимую функциональность;
  4. сделать Pull Request.

Полезные ссылки: