Менторская программа

Регистрация на Менторскую программу 2019-2020 завершена

О программе

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

Как стать участником

Регистрация на Менторскую программу 2019-2020 завершена. Оставь свои контакты внизу страницы, чтобы мы напомнили тебе о старте новой программы.

Проекты осени 2019

1. Оптимизация распределенной системы обработки очереди задач

Менторы: Андрей Костоусов, Иван Перевощиков, Павел Вострецов

Нужен C# разработчик

Описание проекта

Конвейер обработки сообщений в нашем проекте по автоматизации документооборота в ритейле построен на базе реализации паттерна Distributed Task Queue. Это значит, что отдельные этапы обработки сообщений в процессе их доставки клиентам выполняются независимыми агентами «консьюмерами». Каждый этап обработки сообщения должен производиться один и только один раз. Наша распределенная очередь задач реализована при помощи NoSQL БД Cassandra. Нагрузка на эту подсистему в продакшене достигает 1000 новых задач в секунду.

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

  • Реализовать механизм разделения ресурсов между группами задач внутри процесса консьюмера, гарантирующий прогресс по задачам в каждой группе (гарантия liveliness свойства). Это позволит более гибко масштабировать кластер с консьюмерами.
  • Оценить выигрыш от перехода на асинхронную модель исполнения кода (async/await) внутри консьюмеров. Это позволит более эффективно утилизировать системные ресурсы и, в конечном счете, обслуживать тот же поток входящих запросов меньшим количеством консьюмеров.

2. Отказоустойчивый FTP-шлюз

Менторы: Андрей Костоусов, Иван Перевощиков, Павел Вострецов

Нужен C# разработчик

Описание проекта

FTP — один из нескольких типов «транспорта», которые сервис EDI предоставляет клиентам для отправки и получения сообщений. Наша цель — реализовать свой FTP-шлюз так, чтобы он был устойчив к отказам отдельных машин и, в идеале, целого дата-центра.

В качестве основного хранилища данных, где содержится вся информация о передаваемых пользователями сообщениях, мы используем NoSQL БД Cassandra. Сейчас наш FTP-шлюз устроен примерно следующим образом:

  • Непосредственное взаимодействие с пользователями по FTP-протоколу осуществляется при помощи FileZilla Server.
  • ​Сообщения, которые пользователи загружают на FTP-сервер, перекладываются в основное хранилище сервисом-демоном, развернутым рядом с FileZilla Server. Этот демон подвешивается на события FileSystemWatcher-а, который настроен мониторить те же каталоги файловой системы, на которые мапится FileZilla Server. За счет этого мы достигаем суб-секундных задержек между моментом времени попадания файла на FTP-сервер и моментом времени его копирования в основное хранилище.
  • Обратный процесс выгрузки сообщений из основного хранилища в файловую систему, куда смотрит FileZilla Server, производится еще одним сервисом-демоном, который читает внутреннюю ленту событий в Кассандре, содержащую «лог изменений в файловой системе, выставленной через FTP».
  • Пользователи могут не забирать предназначенные им файлы в течение нескольких дней, поэтому для обеспечения отказоустойчивости FTP-шлюза мы должны поддерживать в достаточно актуальном состоянии реплику файловой системы,  выставленной через FileZilla Server, на соседней машине. Репликация состояния файловой системы (в частности, удалений файлов с FTP-сервера) основана на анализе логов FileZilla Server, которые преобразуются в записи в вышеупомянутой ленте событий.

В рамках менторской программы мы предлагаем вам реализовать проект proof-of-concept отказоустойчивого FTP-шлюза, который бы работал без использования локальной файловой системы. То есть реализовать FTP-сервер так, чтобы в качестве его storage-engine-а использовалось наше основное хранилище данных в Кассандре. Такое решение можно попробовать разработать на основе технологии FUSE по аналогии, например, с s3fs-fuse. Отдельно заметим, что о программировании FTP-протокола с нуля здесь речи не идет. Нужно будет взять какой-нибудь достаточно широко распространенный FTP-сервер с исходным кодом и интегрировать систему с ним.

3. TypeScript.ContractGenerator на Roslyn

Менторы: Андрей Костоусов, Иван Перевощиков, Павел Вострецов

Нужен C# разработчик

Описание проекта

В веб-приложениях Контура клиент и сервер обмениваются данными со сложной структурой. Клиентский код мы пишем на TypeScript, серверный — на C#, а значит  нужно описать типы данных, которыми обмениваются сервер и клиент, дважды: на C# и на TypeScript. Писать один и тот же код на двух разных языках — не очень интересное занятие, которое часто приводит к ошибкам, поэтому в Контуре появилась библиотека TypeScript.ContractGenerator. Эта библиотека умеет с помощью рефлексии генерировать типы для TypeScript из C#-классов.

Рефлексия позволяет получить информацию о типах из скомпилированной сборки, поэтому ее возможности сильно ограничены. Например, используя рефлексию, мы не можем перевести на TypeScript тело метода с какими-либо валидациями. Также не получится сгенерировать типы для TypeScript, не собирая предварительно весь проект.

Можно побороть ограничения, которые накладывает использование рефлексии, если использовать Roslyn.

Задачи:

  1. Добавить поддержку Roslyn и не сломать тесты.

  2. Перевести AST, полученное с помощью Roslyn, в AST, которое поймет TypeScript Compiler, чтобы уметь генерировать произвольный код на TypeScript.

4. Генерация документации на основе исходного кода

Менторы: Андрей Костоусов, Иван Перевощиков, Павел Вострецов

Нужен C# разработчик

Описание проекта

Конвертация сообщения из формата отправителя сообщения в формат получателя сообщения — одна из крупных задач конвейера обработки сообщений EDI. Мы умеем быстро описывать такие конвертации в коде.

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

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

Задачи:

  1. При помощи Roslyn научиться собирать информацию о маппингах полей из исходного кода конвертеров.

  2. Научиться строить соответствие полей c#-модели полям описываемого формата (например, xml).

  3. Реализовать веб-интерфейс для отображения маппингов.

5. Внедрение SQL хранилища в EDI

Менторы: Андрей Костоусов, Иван Перевощиков, Павел Вострецов

Нужен C# разработчик

Описание проекта

Аналитикам EDI для работы время от времени требуются выгрузки различной информации об организациях и их настройках. Сейчас эти данные хранятся в Cassandra и для того, чтобы получить такую выгрузку, аналитик обращается к разработчику, который пишет необходимый для выгрузки данных код, запускает его на production и передает выгрузку аналитику. Мы хотим упростить всем жизнь и дать аналитикам возможность самим выполнять sql-запросы к базе данных.

Кроме того, одним из требований к хранилищам учетных данных в EDI является возможность отслеживать изменения, происходящие с хранимыми объектами. Это требуется для того, чтобы в фоновом режиме актуализировать данные во вторичном хранилище — ElasticSearch. Оно используется, например, в веб-приложении для быстрого поиска организаций по названию.

Для проверки концепта миграции с Cassandra на реляционную БД мы реализовали модуль для взаимодействия с кластером PostgreSQL на базе EntityFrameworkCore, который включает в себя:

  • классы для унифицированного выполнения операций записи, чтения и поиска сущностей;
  • подсистему, которая сохраняет информацию о производимых над сущностями БД изменениях в строго упорядоченной по времени последовательности событий;
  • классы для чтения информации об изменениях в данных, произошедших за указанный период времени.

Теперь мы хотим подготовить наше решение к production-эксплуатации.

Задачи:

  1. Покрыть модуль интересующими нас метриками. К примеру:
    — отслеживать ситуации, при которых результаты запроса фильтруются в приложении, а не на стороне БД;
    — отслеживать время выполнения каждой транзакции.

  2. Организовать тестирование отказоустойчивости модуля.

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

  4. Внедрить его в EDI на примере одной-двух сущностей.

6. Heroes of debugging and compiling lll

Ментор: Евгения Садовничая

Нужен C# разработчик

Описание проекта

Продолжаем работу с прошлого года. Мы разработали свой предметно-ориентированный язык (DSL). Он нужен для того, чтобы описывать правила, по которым затем будет собираться метаинформация с больших (до 10 Гб) структурированных данных.

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

Задачи

  1. Проанализировать код и оптимизировать неэффективные участки.

  2. Научиться дебажить декомилированную версию кода.

Требования

Ищем героя, который придет и запилит недостающие фичи. Если у тебя есть знание или желание разобраться в C# и внутренностях CLR, Roslyn, AST, grammar, compilers, algorithms, то ты нам идеально подходишь:)

7. Разработка игры: Real-time strategy (RTS)

Менторы: Алексей Бровко, Андрей Третьяков, Анатолий Исаков, Дмитрий Шабалков

Нужен C# разработчик

Описание проекта

Мы хотим создать многопользовательскую Real-time стратегию.

Игру с боями в реальном времени, строительством зданий и созданием юнитов.

Перед началом работы хорошо бы познакомиться с шедеврами жанра, к примеру Total War (тактическая составляющая) или Red Alert.

Планируем использовать Unity для клиентской части, SQL базу для хранения данных и сервер на.net для поддержания многопользовательских активностей.

В ходе менторской программы будет возможность:

  • Поработать в команде.
  • Написать код, от которого требуется не просто работоспособность, но и его понимание всей командой разработчиков.
  • Научится работать с системой контроля версий когда в ней больше одного участника.
  • Поработать с sql базой данных через код
  • Познакомиться поближе со стеком, который используется во многих.net командах.

Ищем несколько разработчиков, от которых требуется:

  • Базовое знакомство с Unity.
  • Знание C#.
  • Любовь к играм.

8. Система управления мероприятиями Eventor

Менторы: Анастасия Сычева, Дильбаров Евгений

Нужны: C# разработчик, React разработчик, аналитик, проектировщик

Описание проекта

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

Главные задачи системы:

  • Создать и редактировать мероприятия.
  • Управлять информацией о клиентах компании.
  • Подтверждать и оплатить участие.
  • Оценить прошедшего мероприятия в формате отчета.
  • Генерировать и хранить реферальные ссылки, вычислять агентское вознаграждение за рекомендацию мероприятий компании.
  • Взаимодействовать с CRM.

В команду под проект нужны: проектировщик, аналитик, фронт(react), бэк(c#), тестировщик. Хочешь попробовать себя менеджером — найдем тебе менеджерские задачи.

9. Аналитика для создания экспресс-отчета по проверке компаний Казахстана

Ментор: Эльдар Сафаров

Нужен аналитик

Описание проекта

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

API включает 2 метода:

  • Индикатор — возвращает цветовые индикаторы в отношении компании (красный, желтый, зеленый).
  • Отчет — возвращает pdf-отчет.

Хотим сделать аналогичное решение по проверке компаний, но для Республики Казахстан. Уровень открытости данных Казахстана позволяет нам сделать экспресс-отчет для проверки казахстанских юридических лиц.

Нужно написать аналитику по созданию экспресс-отчета по проверке компаний Казахстана.

Результатом будет являться:

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

Присоединяйтесь к нам, и не пропустите новые события

Остались вопросы?

Пиши на kontur-student@kontur.ru
Я постараюсь ответить как можно быстрее :)