Google Code-in 2017: Wikimedia


Для начала расскажу что такое Google Code-in для тех, кто не знает — это онлайн конкурс для школьников 13-17 лет, который нацелен на то, чтобы познакомить их с миром Open Source, предоставляя возможность поработать с организациями разрабатывающими открытое ПО. Я принял участие в этом году и стал одним из победителей.


Как проводится этот конкурс? 25 open source организаций конкурса создают небольшие (требующие для выполнения 3-5 часов времени) задания над которыми должны работать участники. В этом году такими организациями были: Wikimedia, Ubuntu, Zulip, FOSSASIA, Drupal, BRL-CAD, coala, Haiku, OSGeo, Apertium, JBoss Community и другие. Менторы организаций выполняют проверку и при необходимости предоставляют помощь (всё-таки для большинства участников GCI является первым опытом работы с открытыми проектами). Конкурс длится 7 недель (конец ноября — начало января).


Предусмотрены призы. За выполнение 3 заданий участники получают футболку. Также каждая организация выбирает 5 лучших участников по общему вкладу в проект — они получают "hoodie", а 2 лучших из них — награждаются поездкой в штаб-квартиру Google (Маунтин Вью, штат Калифорния, США).


На Хабре уже были публикации победителей прошлых лет: Илья Ковалевский — 2012 год (KDE), Михаил Ивченко — 2013 год (KDE), Станислав Кривенко — 2014 год (Apertium)
Однако конкурс меняется и набирает популярность, поэтому я решил также поделиться своим опытом участия.


Количество участников ежегодно растёт
Количество участников конкурса растёт каждый год — статистика из Google Open Source Blog


В этом году участие приняли более 3.5 тысяч школьников из 78 стран (в 2.5 раза больше чем в прошлом году).


Возраст участников конкурса
Возраст участников конкурса — статистика из Google Open Source Blog


Мой опыт


Для меня мир open source всегда был очень интересным, но я не знал с чего начать. Поэтому когда я узнал о Google Code-in, то решил что это будет хорошим стартом. Задания выполнял для Wikimedia. Почему именно эта организация? Во-первых, это более крупный по сравнению с другими проект, а значит там должно быть интереснее всего. Кроме того, все мы пользуемся Википедией — почему бы не помочь ей чем-то в ответ?
Подробнее об участии этой организации в GCI можно почитать на странице конкурса в MediaWiki.
Wikimedia разрабатывает MediaWiki (движок на котором работает Википедия) и другие расширения и инструменты относящееся к нему.


Задания


Первые шаги в мире open source были захватывающими! Было очень приятно встретить много интересных людей на IRC (используется в Wikimedia, как и во многих других организациях для общения) и работать вместе с ними над заданиями! Менторы предоставили тёплое приветствие и помогли настроить всё необходимое окружение для разработки, а также доступ к системе code review (Gerrit).


Выполняя задания я быстро попал в "состояние потока": после того, как у меня приняли первое, я взялся за ещё одно, потом ещё и ещё — общим счётом выполнив 39 заданий. Очень приятно видеть, когда твой патч принимается разработчиками, а таск отмечается как выполненный. Я убедился, что даже начинающие, как я, могут внести свой вклад.


Задание принято!


В Wikimedia задания включали использование различных языков программирования и технологий. Основной язык здесь PHP (т.к. именно на нём написан MediaWiki), но также используются Python, C++, C#, Java, NodeJS, Ruby, Objective-C, Lua. Именно поэтому GCI это хорошая возможность научиться чему-то новому.
Я выполнял различные задания: от простых (таких как исправление несложных багов, улучшение CI, улучшение покрытия юнит тестами, рефакторинг старого кода) до более сложных, включающих в себя добавление новых функций.
Например, одной из сложных, но очень интересных задач было повышение точности инструмента основанном на машинном обучении для определения качества внесённых правок в статью. Я добавил в модель отслеживание количества текста без отсылок к источникам (ведь если ссылок на источники очень мало или совсем нет, то это что-то говорит о качестве статьи?).


Для новых функций добавляли тесты, писали документацию. Обязательным был и code review каждого патча (процесс достаточно ценный с точки зрения получаемых знаний и опыта. Я также проверял некоторые патчи других участников конкурса).


В целом, в течении всего конкурса в Wikimedia более 300 участников под руководством 50 менторов выполнили около 760 заданий работая над: ядром Mediawiki, его расширениями, API, мобильными приложениями Kiwix и Wikipedia, а также другими инструментами, такими как Pywikibot и Huggle.


Примеры заданий


Небольшой список самых интересных заданий над которыми я работал — со ссылками на патч, таск в Wikimedia Phabricator и соответствующую страницу задания на сайте GCI.


  • Оцениваем качество правок в статью (pull request, Phabricator, GCI)
  • Добавляем поддержку большего количества языков записи нот в расширение Score (патч, Phabricator, GCI)
  • Добавляем новую служебную страницу в MediaWiki для поиска неиспользуемых файлов (патч, Phabricator, GCI)
  • Добавляем возможность работы с Gerrit в CLI для работы с git сервисами git-repo (pull request, Phabricator, GCI)
  • Добавляем pytest-flask для тестирования сервиса Wikilabels (pull request, Phabricator, GCI)
  • Фикс небольшой проблемы с безопасностью парсера MediaWiki (патч, Phabricator, GCI)
  • Добавляем VCR.py для запуска тестов Pywikibot в оффлайне (патч, Phabricator, GCI)
  • Повышаем покрытие тестами расширения Newsletter (патч, Phabricator, GCI)

Были и очень простые задания, с которыми можно легко разобраться даже без предыдущего опыта работы с open source: включаем CI для одного из расширений (патч, таск), фиксим небольшой баг в оформлении страницы ошибки (патч, таск), добавляем статический анализ в CI стиля Vector (патч, таск)


Два месяца конкурса были наполнены интересной работой и большим количеством общения с людьми со всего мира. Я был так увлечён, что стал немного пропускать школу и уделял меньше времени подготовке к экзаменам. Огромную работу проделали и менторы, составляя новые задания и проверяя наши патчи даже на Рождество и Новый Год. Я также выполнял работу вне конкурса: брал несложные таски из баг-трекера, когда было свободное время (например при ожидании проверки задания). После конкурса также продолжил контрибьютить.


После завершения GCI я получил письмо от Google, где было сказано, что Wikimedia выбрала меня победителем и я получаю "grand prize" — посещение штаб квартиры Google в Маунтин Вью.


Поездка


Поездка была назначена на июнь — для того, чтобы все победители успели получить визу и не были отвлечены от учёбы в школе, подготовки и сдачи экзаменов.


Офис Google


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


В первый день, когда все победители собрались в офисе Google в Сан-Франциско, нам рассказали о том, что мы будем делать в следующие дни и была проведена небольшая игра, чтобы познакомиться. Нам подарили большое количество подарков. На поездке также присутствовали менторы из организаций. Было невероятно приятно встретиться с кем-то из людей, с которыми так много работал несколькими месяцами ранее.


На второй день мы отправились в штаб-квартиру Google в Mountain View — "Googleplex". Была проведена церемония награждения с директором Google Open Source Крисом ДиБона.


Церемония награждения


После этого нам рассказали много интересного про компанию, мы посетили Google Visitor Center, где купили сувениры и сделали большое количество фотографий.


Организаторы поездки также подготовили очень приятный сюрприз: они пригласили сотрудника Google из страны каждого победителя — у нас была возможность поговорить и задать вопросы. Кроме того к нам приходили "гуглеры" c презентациями: один из сотрудников рассказал о том, как он решал сложную криптографическую задачу, другой рассказал о своём open source проекте созданным когда-то в 20% рабочего времени, HR — о том, как написать хорошее резюме, Developer Relations — о различных программах в Google для "поддержания связи" с разработчиками.


Спикер из Waymo


Cпикер из Waymo (дочерняя компания, занимающаяся беспилотными автомобилями) даже не успевал отвечать на вопросы! Его было очень интересно слушать, особенно глядя на проезжающие за окном машины Waymo.


На следующий день, мы путешествовали по городу посещая основные достопримечательности. Было весело, сделали очень много фотографий.


Золотые ворота
Конечно же посетили Золотые Ворота.


Залив Сан-Франциско
Вечером плавали на яхте по заливу Сан-Франциско.


В последний день было ещё несколько очень интересных презентаций сотрудниками Google. Нам рассказали о Kubernetes и продемонстрировали его в работе.


Презентация о Kubernetes
Контейнеры очень полезны — но это не означает что их нужно использовать для всего


Ещё мы узнали о лицензировании открытого ПО (очень полезно, так как то, с чем я с трудом пытался разобраться ранее, тут объяснили понятным языком). Была также интересная презентация о Project Fi (виртуальный оператор сотовой сети Google).


Более того, у Wikimedia есть офис в Сан-Франциско. Поэтому я решил воспользоваться возможностью посетить его.


Офис Wikimedia


Поездка оставила о себе много приятных воспоминаний. Я был очень рад встретиться с командой Google Open Source, менторами и участниками GCI.


Заключение


Статистика по странам
Статистика по странам — Google Open Source Blog


К сожалению, в этом году кроме меня не было победителей из Украины или других стран постсоветского пространства. Надеюсь, что мой пост поможет привлечь внимание к Google Code-in у русскоязычной аудитории.
Если среди читателей (или их детей) есть школьники — ставьте заметку в календарь на середину октября — в этот момент уже будут известны организации, которые будут принимать участие в GCI 2018. Сам конкурс начнётся где-то в конце ноября. Я планирую быть ментором в Wikimedia — если вы выберете эту организацию, пишите — буду рад помочь и ответить на вопросы.


Для студентов рекомендую обратить внимание на Google Summer of Code (организованный той же командой Google, которая работает над GCI), являющийся хорошей возможностью поконтрибьютить в open source.


Общая фотография
Победители, их родители и менторы — фотография Stephanie Taylor, CC-BY-SA


В заключение хочу сказать, что open source играет важнейшую роль в современном мире разработки программного обеспечения. Фундаментальные функции интернета работают благодаря Open Source (Linux, Apache, MySQL, Mozilla Firefox, Chromium, PHP, Python, NodeJS, Go… — всё это open source), за ним и будущее.


Спасибо за внимание и удачных вам pull request-ов!

Комментарии (6)


  1. datacompboy
    15.07.2018 15:34
    +2

    Было бы неплохо добавить ссылки на самые интересные (по собственному мнению) задачи с коммитами.
    И для архива, и для будущего резюме пригодится :)


    1. nikitavbv Автор
      15.07.2018 21:05

      Спасибо! Добавил примеры самых интересных заданий. Кроме того, привёл ссылки на несложные задания с которыми может справиться участник без предыдущего опыта работы с open source (надеюсь это поможет показать, что принять участие в GCI очень просто)


  1. gospodinputin
    16.07.2018 14:05

    Золотые Ворота как то уныло выглядят.


  1. stack_overphlow
    16.07.2018 14:06

    А есть что-то подобное для других возрастов? Понравилась идея, да «весовая категория» не моя.


    1. nikitavbv Автор
      16.07.2018 14:23

      Кроме Google Summer of Code, который я упомянул в статье, рекомендую посмотреть на Hacktoberfest — ежегодный онлайн-фестиваль по поддержке open source. Проводится Digitial Ocean в сотрудничестве с Github, принять участие может любой желающий.
      Кроме того, в GCI и GSoC можно принять участие в любом возрасте как ментор.


      1. Extravert34
        17.07.2018 12:26

        Вот только в Google Summer of Code поездок в США не дают)