How to become a MediaWiki hacker/ru

Эта статья поможет разработчикам обрести базовые навыки, необходимые для того, чтобы можно было делать вклад в развитие MediaWiki.

Если вы уже опытный разработчик и хорошо знакомы с особенностями MediaWiki, посетите .

Обзор
МедиаВики - это программное обеспечение, на основе которой создана Википедия, её родственные проекты, а также тысячи вики по всему миру. Оно поддерживается большинством операционных систем, написано на PHP, использует в основном серверные базы данных MySQL и MariaDB, а также jQuery —клиентскую библиотеку для JavaScript. Разработка МедиаВики поддерживается главным образом организацией Wikimedia Foundation, сообщество добровольцев тоже играет огромную роль в развитии проекта.

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

С чего начать
Зарегистрируйтесь  и прочтите Gerrit tutorial. Затем загрузите исходный код, вносите изменения, тестируйте, предлагайте исправления. Для разработки используйте уже настроенную виртуальную машину (vagrant) или установите всё необходимое сами.

Виртуальная машина с Vagrant


 * Установка Vagrant — Установка сервера МедиаВики со всем необходимым внутри виртуальной машины в Linux (возможно использование Linux, Windows или Mac хостов)

Самостоятельная установка

 * Необходимое ПО — Проверьте аппаратные требования, установите LAMP, MAMP или WAMP (соответственно для Linux, Mac или Windows, а также Apache, MySQL/MariaDB и PHP).
 * — Загрузите исходный код с помощью git.
 * — Установите и проведите первоначальную настройку
 * Настройте режимы отладки для раннего отображения предупреждений и ошибок.

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

Рекомендовано для прочтения


Общие рекомендации
Для работы с отчетами об ошибках (bug report) и последующего внесения изменений, будет полезно сперва ознакомится с данными материалами:

Улучшая движок, не вносите изменений в ядро МедиаВики, если не уверены в своих действиях на сто процентов.  
 * Для начала можно исправлять мелкие ошибки или добавлять новые возможности в МедиаВики.
 * Стандарты оформления кода и другие подобные материалы (,, , …)
 * Следуйте Рекомендациям по комментированию коммита, обратите внимание на пример — всё это поможет вам автоматически добавлять уведомления о вашем патче в соответствующий отчет на . Следовательно, добавлять строки вида "Пожалуйста рассмотрите" в отчет больше не нужно.
 * Обязательно используйте рекомендации из проверочного списка до коммита. Не пропускайте данный шаг, вы поймёте почему.
 * Найдите людей для проверки кода. Найдите и добавьте других участников для анализа вашего патча.
 * Изменение изменения. Не создавайте новых изменений (changeset) на Gerrit для исправления предыдущих!

Обратная связь, вопросы и поддержка
Для общих вопросов об инфраструктуре, архитектуре или рабочем процессе, которые в свою очередь напрямую не связаны с багом, пользуйтесь, почтовой рассылкой или страницами для обсуждений на вики. Например, если возникают проблемы при работе с Gerrit, задавайте вопросы на странице обсуждения Gerrit. Наберитесь терпения. В чате IRC на большинство вопросов ответят такие же участники как и вы. Если ответа нет, спросите в комментариях баг отчета или на соответствующей вики, не оставляйте свой вопрос без ответа.  
 * Для начала исследуйте код, попробуйте понять его, прочитайте документацию, исправьте баг.
 * Для конкретных вопросов о самом баге используйте комментарии в отчете . "Как же мне исправить ошибку?", - не самый лучший вопрос. Подробность и детальность в вопросе помогут получить ответ быстрее. Правильно оценивайте свои способности на данный момент и не пытайтесь исправлять баг, который вам совершенно не понятен. Выберите другой, который проще для вас.
 * Отметьте в своём вопросе ваши наработки и идеи, чтобы другие понимали на каком этапе в решении проблемы вы находитесь. Скопируйте вашу последовательность действий, команд (если их не слишком много) вместо их словесного описания. Это поможет избежать недопонимания.
 * Используйте наши социальные медиа, не скрывайте email.
 * Узнайте больше на.

Дайте знать, что работаете над ошибкой
Это ее обязательно, но приветствуется. В последствии, при создании патча, сообщите о своей работе в комментарии. Это поможет не совершать двойную работу другим участникам.

Вам также следует обращать внимание на подобные отметки. Если увидите "Patch-For_Review", связанный с баг отчетом, то выберите другой. Если патч в Gerrit не изменялся в течении долгого периода времени, попробуйте поработать над ним.

Если вы прекращаете работу над задачей, удалите отметку о себе как об ответственном (assignee) за неё, чтобы остальные участники могли заняться багом, зная что вы оставили свою работу над ним.

Чем раньше начнёте взаимодействовать с другими участниками, тем больше внимания и помощи получите. 

Работа над расширениями
Следующие ссылки могут помочь вам в работе.


 * Руководства для разработки расширений МедиаВики:
 * Разработка расширений — Как написать расширение для МедиаВики.
 * Расширение для развёртывания — Для того чтобы ваше расширение разместить на сайтах Wikimedia (включая и Википедию), необходимо очень тщательно подойти к обеспечению безопасности и должной производительности.
 * Руководство по разработке расширения


 * Прочие ресурсы:
 * Список простых расширений — Узнайте о работе расширений.
 * Короткое введение в разработку расширений — Видео-презентация (слайды).
 * Создаём расширение МедиаВики — Статья о разработке, лучших практиках, участии в жизни сообщества. От февраля 2011 года.
 * Шаблон специальной страницы — Добавьте специальную страницу для отображения полезной информации.
 * Расширенная вики разметка — Добавьте новые возможности для синтаксического анализа текста вики.

PHP
МедиаВики написан на PHP, соответственно он необходим для работы над ядром движка.


 * Учите PHP
 * Учебник PHP — Доступен на многих языках. Если вы знаете другие языки, использующие объектно-ориентированную парадигму, но не PHP, то обучение будет несложным.
 * PHP Programming at Wikibooks.
 * PHP topic at Wikiversity.


 * Источники по PHP:
 * Руководство PHP — Доступно на многих языках.
 * Стандарты оформления PHP кода, используемые сообществом МедиаВики.


 * Что нужно знать:
 * Сценарий  содержит базовый интерпретатор с объектами и классами МедиаВики.

Базы данных
Зачастую необходимы знания базы данных MySQL/MariaDB.


 * Учите MySQL/MariaDB
 * Учебник MySQL — Из справочного руководства для MySQL 5.0.
 * MySQL at Wikibooks.


 * Материалы по MySQL/MariaDB
 * MySQL справочные материалы — Доступны на многих языках.
 * База знаний MariaDB
 * оформление кода баз данных в сообществе МедиаВики.


 * Что нужно знать:
 * Тестируйте код с MySQL/MariaDB.
 * МедиаВики использует MySQL and MariaDB в качестве основных баз данных. Также поддерживаются и другие:

PostgreSQL и SQLite. Однако почти все разработчики используют MySQL/MariaDB и проводят тесты только используя их, вследствие этого другие базы данных при тестах часто выходят из строя. Поэтому, если вы целенаправленно не занимаетесь улучшением поддержки для других баз данных, то используйте MySQL/MariaDB. Если да, то убедитесь в правильности работы с MySQL/MariaDB (и в эффективности запросов), так как их используют почти все остальные разработчики.

JavaScript и CSS
JavaScript и CSS стали стандартом в разработке фронтенда. Вы не должны быть знакомы с JavaScript, jQuery и CSS для разработки МедиаВики, но соответствующие знания могут понадобиться.


 * Учите JavaScript и CSS
 * JavaScript and CSS at Wikibooks.
 * Начнём обучение jQuery — Учебник jQuery.


 * Материалы по JavaScript и CSS
 * Оформление JavaScript кода в сообществе МедиаВики.
 * Оформление CSS кода в сообществе МедиаВики.

MediaWiki
Кодовая база МедиаВики достаточно велика и местами трудна для понимания, не перестарайтесь. When you're first starting off, aim to write features or fix bugs which are constrained to a small region of code.


 * MediaWiki primers and must-reads:
 * MediaWiki architecture — A high-level overview of the main components of MediaWiki and how they work with each other.
 *  — An overview of why and how to write secure code.


 * MediaWiki resources:
 * — A list of important files and links to more detailed information.
 * — A list of hooks. If you're trying to find what part of the codebase does something, often a good place to start is by searching for the related hooks.
 * — An overview of general coding conventions within the MediaWiki community.
 * — Ways to hack MediaWiki, from user preferences to extensions and core.
 * Code documentation — Automatically generated documentation from the code and code comments.
 * — A guide to debugging MediaWiki.
 * — A tool to interact with MediaWiki objects live.