Meewerken aan de MediaWiki en Extensies

This page is a translated version of the page How to become a MediaWiki hacker and the translation is 100% complete.

Dit artikel is geschreven om ontwikkelaars de basisvaardigheden te leren die nodig zijn bij het bijdragen aan de ontwikkeling van MediaWiki core en MediaWiki extensies.

Bijdragen aan MediaWiki is vaak moeilijk, dus als u betrokken wilt raken bij Wikimedia development is het bijdragen aan Wikimedia projecten die begeleiding aan bieden, een verstandige keuze. Een alternatief voor deze mentoring is het oplossen van een fout in de software, een bug.

Als u al een ervaren ontwikkelaar bent en al eigen bent met het gebruik van de MediaWiki, ga dan naar Ontwikkelaars hub .

Voor andere manieren om in de Wikimedia community te komen: Hoe een bijdrage te leveren .

Overzicht

MediaWiki is de software achter Wikipedia, de zusterprojecten en duizenden wiki's overal op de wereld.

Het meeste van MediaWiki en de extensies zijn geschreven in de programmeertaal PHP. Er wordt JavaScript gebruikt voor het zorgen voor een interactieve interface met elementen als jQuery en Vue.js als cliënt JavaScript libraries.

Enkele hulpmiddelen zijn geschreven in andere talen zoals batch-bestanden, shell scripts, makefiles en Python.

MediaWiki is voornamelijk geschreven voor het LAMP platform[1] en kan op de meeste besturingssystemen worden uitgevoerd. MediaWiki gebruikt voornamelijk de MySQL of MariaDB database server.[2]

De ontwikkeling is in een open source stijl[3], het wordt grotendeels online gecoördineerd met ondersteuning van de Wikimedia Foundation, waarbij ook de vrijwillige ontwikkelaars van de gemeenschap een grote rol spelen.

  • Discussies over de ontwikkeling gebeurt op Phabricator , mailing lists en IRC kanalen. De belangrijkste lijst voor ontwikkelaars is wikitech-l. Voor IRC kanalen zijn dat #mediawiki verbinden en #wikimedia-dev verbinden.
  • De broncode staat op Gerrit en wordt met Git revisie beheerssysteem beheerd, het kan worden bekeken[4]
  • Het beoordelen van de code wordt via Gerrit gedaan en dat kan hier worden bekeken. Volg deze tutorial om Git en Gerrit te installeren om patches te kunnen doorgeven.
  • Bugrapporten en functieverzoeken zijn aanwezig, projecten worden gecoördineerd op Phabricator en kunnen hier worden bekeken

Een taak vinden of aanmaken

Voordat u ooit een functie ontwikkelt of een bug in een MediaWiki-project oplost, is het belangrijk dat u er onderzoek naar doet. Dit omvatː

  1. Zoeken in Phabricator of er al een open of gesloten taak (veld Documenttypen) bestaat. Als er geen is, maak er een aan. Als het een erg kleine wijziging is, maak er dan geen aan.
  2. Zoek en onderzoek de code die moet worden gewijzigd om de functie te implementeren. Geef commentaar op uw bevindingen in de Phabricator-taak als ze nuttig kunnen zijn voor anderen die het implementeren of die uw wijzigingen beoordelen.
  3. Bepaal of u de functie waarschijnlijk kunt toevoegen of de bug kunt oplossen op basis van de code die u hebt onderzocht en de benodigde wijzigingen. Als de taak groot of complex is, moet u iets eenvoudiger vinden om u in te werken om uiteindelijk taken van die omvang aan te kunnen. Als u denkt dat u het kunt voltooien, ken de taak aan uzelf toe en begin eraan te werken.

De ontwikkelomgeving instellen

Zodra u iets heeft gevonden waar u aan kunt werken, is de volgende stap naar het ontwikkelen van MediaWiki of een extensie het maken van een omgeving om MediaWiki, de database en andere externe functies uit te voeren, zodat u ze kunt ontwikkelen en testen.

U kunt MediaWiki installeren en ontwikkelen op Linux, Windows of macOS met behulp van een van de onderstaande manieren.

Docker

Docker is een goede optie als u snel een MediaWiki-installatie wilt instellen en niet van plan bent veel extensies te installeren.

U kunt ook het hulpmiddel mwcli proberen die Docker instelt met een paar eenvoudige opdrachten en basisfunctionaliteit biedt tussen MediaWiki, MySQL, ElasticSearch, Memcached en andere soorten containers.

Vagrant

Met Vagrant kunt u een MediaWiki-instantie maken die u kunt ontwikkelen en kunt u een van de 250+ extensies toevoegen en ontwikkelen, allemaal met één opdracht.

Dit bespaart u installatie- en configuratietijd in vergelijking met het handmatig toevoegen van extensies in een Docker of lokale installatie, maar het werkt wat langzamer dan de andere twee opties.

Lokale installatie

Lokale installatie is een goede optie als u snel een eenvoudige ontwikkelingsomgeving wilt opzetten zonder Docker te gebruiken.

Open een tekstverwerker voor code

De twee aanbevolen code-editors voor het bewerken van MediaWiki zijn VSCode en PhpStorm. VSCode is gratis en PhpStorm niet, maar u kunt gratis een PhpStorm-licentie verkrijgen als u een student bent door uw GitHub Education-account te koppelen aan uw JetBrains-account of door het aanvragen van een licentie verleend aan Wikimedia.

Om te bepalen welke editor u moet installeren en gebruiken, weet dat er voor PhpStorm meer en krachtigere functies zijn dan voor VSCode. PhpStorm duurt echter langer om te laden bij het starten dan VSCode, omdat het een index van de hele repository bouwt, terwijl VSCode progressief laadt. Daarom is VSCode meestal handig voor het bekijken van bestanden of kleine wijzigingen en PhpStorm voor grotere wijzigingen. Het is logisch om beide om deze redenen te installeren.

Om de MediaWiki-codebase te ontwikkelen die zich in een Docker-container bevindt, kunt u er een externe verbinding mee tot stand brengen en de MediaWiki-map erin openen met behulp van VSCode of PhpStorm.

Code aanpassen en testen

Wijzig de code en bekijk uw wijzigingen door uw MediaWiki-browsertabblad opnieuw te laden. Zorg ervoor dat u de Manual:Coding conventions volgt. Schrijf en voer tests uit op uw code om ervoor te zorgen dat deze werkt en correct is geformatteerd.

Houd er rekening mee dat u tijd kunt besparen door ervoor te zorgen dat uw wijzigingen worden geaccepteerd voordat u de tijd neemt om tests te schrijven. Maak een patch zonder de benodigde tests en vraag iemand om deze te beoordelen en geef aan dat u tests zult toevoegen nadat ze deze hebben beoordeeld.

Een patch maken

Tot slot, om uw code in te dienen om te worden beoordeeld en toegevoegd aan de repository, volg de Gerrit/Tutorial .

Communicatie tips en richtlijnen

Een ontwikkelaar repareert een bug in een MediaWiki-extensie, inclusief onderzoek, git commit, het laten beoordelen en samenvoegen en het sluiten van het Bugzilla-ticket (nu vervangen door Phabricator ).

Follow these tips to communicate effectively and get help from community members.

Use Phabricator tasks effectively

When you plan to work on a Phabricator task:

  • No need to ask for permission: You can work on unassigned tasks without asking someone to assign them to you. There is no authority who assigns tasks or who needs to be asked first.
    • If a task already has a recent patch in Gerrit, choose a different task to work on instead.
    • If an existing patch in Gerrit has not been merged and has not seen any changes for a long time, you could improve that existing patch, based on the feedback in Gerrit and in the task.
  • Do your research: When you consider working on a task, do research before you start coding. Look at the code, try to understand what it is supposed to do, read related documentation, and try to find the places where you need to make code changes.
    • In a Phabricator task, use the project tags in the side bar to find the code repository for the task.
    • If you have no idea at all how to fix the bug, consider finding an easier one first.
  • You do not need to announce your plans before you start working on a task, but you should communicate that you are working on the task.
    • When you start work, set yourself as task assignee by clicking Edit Task… in Phabricator, and set your Phabricator username in the Assigned To field. This communicates to others that you are working on it, so they don't duplicate work.
    • When your plans or interests change: If you are no longer working on a task, remove yourself as the assignee of the task. This tells others that they can work on the task, and they won't expect you to still work on it.
  • Follow Phabricator etiquette.
    • In Phabricator tasks, discuss only specific questions about the topic of that task. Don't use Phabricator to ask general questions, like how to set up a development environment or how to fix problems with Gerrit.

Compose good questions

  • Don't ask to ask...just ask!.
  • Be specific and provide context: Instead of simply asking "Can you give me more info?", "Please guide me", or "Please tell me how to start", include the following information in your question:
    • What are you trying to achieve?
    • What have you already tried? Copy and paste your commands and their output (if not too long) instead of paraphrasing in your own words.
    • What have you found out already during your research? Include links to code, documentation, or other resources you already consulted.
  • Use specific titles and subject lines in your communication. "Proposal draft" or "Need help" is not specific.
  • Keep conversations readable: When you reply in Zulip, in Phabricator tasks, or on mailing lists, only quote sections of previous comments that are relevant to your response. If you quote a complete previous comment, it makes threads hard to read.

Follow communication policies and best practices

Before you send or post your question:

Ask in the right place

  • Ask in public: Do not send private messages if your conversation topic is not secret. Private messages don't help others.
  • Ask and discuss in the best place:
    • In Phabricator tasks, discuss only specific questions about the topic of that task.
    • Ask general technical questions, like how to set up a development environment or how to fix problems with Gerrit, in the places listed on Communicatie .
    • If you take part in an outreach program, then Zulip is for discussing questions about the outreach programs themselves.

Be patient

After you post your question:

  • Do not ask people for code review in a separate message. People receive Gerrit and Phabricator notifications and will respond when they can.
  • When seeking input and comments, especially during weekends and holidays, you may need to wait until business hours resume. On chat channels like IRC: if nobody answers, try again at a different time; don't just give up!
  • If you don't get an answer even after waiting and being patient, consider if other Communication channels might be a better place to ask your question.

Appendix

 
MediaWiki medewerkers aan het werk in Bangalore, India.

PHP

MediaWiki is in PHP geschreven, u dient daar dus in thuis te zijn om hier te kunnen programmeren.

Leer PHP
  • PHP tutorial — Beschikbaar in veel verschillende talen. Als u niet thuis bent in PHP maar wel in andere object-geörienteerde programmeertalen, dan zal PHP eenvoudig te leren zijn.
  • PHP Programmeren op Wikibooks.
  • PHP op Wikiversity.
PHP bronnen
Dingen om te weten
  • Het script maintenance/eval.php in MediaWiki biedt een basis PHP-interpreter met geladen MediaWiki objecten en klassen.
  • Het script maintenance/shell.php in MediaWiki is een vervanging van maintenance/eval.php op basis van PsySH, zie Manual:Shell.php

Database

Veel functies vereisen wat databasemanipulatie, dus u moet bekend zijn met MySQL / MariaDB.

Leer MySQL/MariaDB
MySQL/MariaDB resources
Dingen om te weten
  • Test uw code met MySQL/MariaDB.
    • MediaWiki gebruikt nu MySQL en MariaDB als databases. Er worden ook andere databases ondersteund zoals PostgreSQL en SQLite. Bijna alle ontwikkelaars gebruiken echter MySQL/MariaDB en testen geen andere databases, bij andere kunnen dus eerder fouten optreden. U wordt daarom geadviseerd om MySQL / MariaDB te gebruiken bij het testen van patches, tenzij u specifiek probeert de ondersteuning voor een andere database te verbeteren. Zorg er in het laatste geval voor dat u ervoor zorgt dat u MySQL / MariaDB niet breekt (of query's schrijft die er vreselijk inefficiënt in zijn), omdat MySQL / MariaDB door bijna iedereen wordt gebruikt.

JavaScript en CSS

JavaScript en CSS worden in de front-end code veel gebruikt. U hoeft niet bekend te zijn met JavaScript, jQuery en CSS om aan de MediaWiki te werken, maar een gebrek aan kennis daarvan kan wel beperken waar u aan kan werken.

Leer JavaScript en CSS
JavaScript en CSS code

MediaWiki

Introductie van de kernconcepten van MediaWiki

De hoeveelheid code van MediaWiki is groot, sommige delen zijn wat rommelig en onoverzichtelijk, het zal wel werken. Wanneer u voor het eerst begint met coderen op de MediaWiki, probeer dan functies te schrijven of bugs op te lossen die slechts een klein gebied van de code raken.

MediaWiki basisdocumentatie
MediaWiki bronnen
  • Manual:Code — Een overzicht met belangrijke bestanden en koppelingen naar meer gedetailleerde informatie.
  • Manual:Hooks — Een lijst met 'hooks'. Als u probeert te vinden welk deel van de codebase iets doet, is vaak een goede plek om te beginnen door te zoeken naar de beschikbare hooks (plekken waar u code kunt toevoegen binnen de bestaande code).
  • Manual:Coding conventions — Algemene codering conventies binnen de MediaWiki gemeenschap.
  • Code documentatie (class referentie) — Automatisch gegenereerde documentatie op basis van de code en het commentaar van de programmeur in de code.
  • Handleiding:Hoe te debuggen — Het debuggen van de MediaWiki.
  • Manual:Eval.php — Een hulpmiddel om bij het gebruik van de MediaWiki de objecten te benaderen en o.a. uit te lezen.

MediaWiki extensies

Introductie van de extensies van MediaWiki.

Als u ervoor kiest om aan een extensie van MediaWiki te werken, bieden de volgende koppelingen meer informatie.

MediaWiki extensies basis
MediaWiki extensies bronnenː

MediaWiki skins

Handleiding:Vormgeving (skin) is handig als u ervoor kiest om met MediaWiki skins te werken.

Zie ook

Voetnoten

  1. MediaWiki kan op de meeste platformen die PHP ondersteunen werken, het gebrek aan bepaalde utilities of functies in het besturingssysteem kan de functionaliteit of performance van MediaWiki op niet-LAMP platforms beperken.
  2. MediaWiki heeft ondersteuning voor andere DBMS dan MySQL en MariaDB, bijvoorbeeld PostgreSQL en SQLite.
  3. De ontwikkelaars zijn vrijwilligers en betaalde staf (of ingehuurde krachten) van verschillende organisaties. In Developers/nl staat een lijst van mensen die aan de code werken.
  4. Blader door de broncode en de revisies van code repositories op https://phabricator.wikimedia.org/diffusion/ of download de broncode via Gerrit.