How to become a MediaWiki hacker/th

บทความนี้เขียนขึ้นเพื่อช่วยให้นักพัฒนาได้เรียนรู้ทักษะพื้นฐานที่จำเป็นเพื่อนำไปสู่การพัฒนาแกนมีเดียวิกิ และส่วนขยายมีเดียวิกิ
 * โปรดทราบว่าในกรณีส่วนใหญ่เมื่อทำงานกับมีเดียวิกิ คุณไม่ต้องการที่จะแฮกแกนวิกิมีเดีย จนกว่าคุณจะรู้ถึงสิ่งที่คุณกำลังทำจริง ๆ

เส้นทางหลักในการเริ่มต้นใช้งานกับการพัฒนาวิกิมีเดียคือการร่วมกับโครงการวิกิมีเดียที่ให้คำปรึกษา ทางเลือกหนึ่งที่ไม่มีการให้คำปรึกษาคือการแก้ไขบั๊กเล็กน้อยที่น่ารำคาญ

หากคุณเป็นนักพัฒนาที่มีประสบการณ์ที่มีความคุ้นเคยกับการใช้มีเดียวิกิอยู่แล้ว ให้เยี่ยมชมแทน

สำหรับวิธีการอื่น ๆ ที่จะได้มีส่วนร่วมในชุมชนวิกิมีเดีย ดู ''

ภาพรวม
มีเดียวิกิเป็นซอฟต์แวร์ที่ทรงอานุภาพของวิกิพีเดีย, โครงการพี่น้อง และวิกินับพันทั่วโลก

มีเดียวิกิได้รับการเขียนขึ้นในภาษาโปรแกรมพีเอชพี ใช้เจเควียรีเป็นไลบรารีของจาวาสคริปต์

มีเดียวิกิเขียนขึ้นเป็นหลักสำหรับแลมป์ และทำงานในระบบปฏิบัติการส่วนใหญ่ มีเดียวิกิใช้เซิร์ฟเวอร์ฐานข้อมูลมายเอสคิวเอล และมาเรียดีบีเป็นหลัก

การพัฒนาเกิดขึ้นในรูปแบบโอเพนซอร์ส โดยเป็นการประสานงานออนไลน์ส่วนใหญ่ และได้รับการสนับสนุนจากมูลนิธิวิกิมีเดีย แม้ว่าอาสาสมัครพัฒนาชุมชนจะมีส่วนสำคัญเช่นกัน


 * อภิปรายการพัฒนา เกิดขึ้นในหลายรายชื่อผู้รับจดหมาย และช่องไออาร์ซี รายการผู้พัฒนาหลักคือ วิกิเทค-แอล ช่องนักพัฒนาซอฟต์แวร์หลักของไออาร์ซี คือ #mediawiki และ #wikimedia-dev
 * ซอร์สโค้ด มีการจัดการโดยใช้ระบบควบคุมการแก้ไขกิต
 * รีวิวโค้ด จะดำเนินการใน ทำตามบทแนะนำนี้เพื่อตั้งค่ากิตและเกอร์ริต เพื่อที่จะส่งแพตช์
 * รายงานบั๊กและงานได้รับการจัดการในฟาบริเคเตอร์

หน้านี้จะช่วยให้คุณเป็นผู้มีส่วนร่วมกับมีเดียวิกิ นี่ไม่ได้เป็นเกี่ยวกับการสอน มันเป็นเพียงแค่จุดที่คุณไปยังสถานที่ต่าง ๆ ที่คุณสามารถไปเรียนรู้ต่อสิ่งที่จำเป็น

ตั้งค่าสภาพแวดล้อมการพัฒนาของคุณ
โครงการส่วนใหญ่ใช้กิตและเกอร์ริต ทำตามเกี่ยวกับการสอนเกอร์ริต เพื่อตั้งค่าบัญชีนักพัฒนาซอฟต์แวร์ของคุณ จากนั้นคุณสามารถย้ายไปยังการดาวน์โหลดโค้ดของเรา, การทำการเปลี่ยนแปลง, การทดสอบเหล่านั้น และการยื่นเสนอแพตช์ มีสองวิธีการตั้งค่าพัฒนาสิ่งรอบข้างของคุณ: โดยติดตั้งเครื่องเสมือนที่กำหนดไว้ล่วงหน้า (วาแกรนต์ หรือ ดอกเกอร์) หรือวิธีการกำหนดค่าด้วยตนเอง

เครื่องเสมือนกับวาแกรนต์

 * การติดตั้งวาแกรนต์ - ขั้นตอนเหล่านี้จะติดตั้งเซิร์ฟเวอร์มีเดียวิกิ กับความต้องการทั้งหมดภายในเครื่องเสมือนลินุกซ์ (สามารถนำมาใช้บนปฏิคมลินุกซ์, วินโดวส์ หรือแมค)

สภาพแวดล้อมการพัฒนาดอกเกอร์

 * เดฟดอกเกอร์มีเดียวิกิ - เรียกใช้มีเดียวิกิโดยใช้ดอกเกอร์ (สามารถใช้ได้กับโฮสต์ลินุกซ์, วินโดว์ส หรือแมคโอเอส)

การติดตั้งด้วยตนเอง

 * ความต้องการการติดตั้ง — ตรวจสอบความต้องการของฮาร์ดแวร์ และติดตั้งเซิร์ฟเวอร์แลมป์, แมมป์ หรือแวมป์ (ลินุกซ์, แมค หรือวินโดวส์ บวกกับอะแพชี, มายเอสคิวแอล/มาเรียดีบี และพีเอชพี)


 * — ดาวน์โหลดซอร์สโค้ดล่าสุดจากซอฟต์แวร์กิต
 * — ต่อด้วยการติดตั้งและกำหนดค่าเริ่มต้น
 * ตั้งค่าโหมดการแก้ปัญหาต่าง ๆ ในสภาพแวดล้อมของคุณ เพื่อแสดงคำเตือนและข้อผิดพลาดในช่วงต้น

มันไม่จำเป็นต้องดาวน์โหลดฐานข้อมูลวิกิพีเดียกองไว้ เพื่อพัฒนาคุณลักษณะมีเดียวิกิ ในความเป็นจริง ในหลายกรณีก็ง่ายต่อการใช้ฐานข้อมูล ที่อยู่ใกล้กับที่ว่างเปล่ามีเพียงไม่กี่หน้าทดสอบพิเศษที่สร้างขึ้น อย่างไรก็ตาม หากมีเหตุผลบางอย่างที่คุณต้องการที่จะมีสำเนาของวิกิพีเดีย คุณสามารถได้รับการถ่ายโอนข้อมูล

Communication tips and guidelines


ข้อเสนอแนะ, คำถาม และการสนับสนุน
Questions how to set up your development environment or how to use Gerrit are out of scope for a task. Do not ask to assign a task to you. 
 * คุณคาดว่าจะทำวิจัยพื้นฐานของตัวเองบางส่วนก่อน: ดูที่รหัส, พยายามที่จะทำความเข้าใจบางอย่างว่ามันควรจะทำอย่างไร, อ่านเอกสารที่เกี่ยวข้อง, พยายามหาสถานที่ที่น่าจะเป็น ที่คุณจำเป็นต้องทำการเปลี่ยนแปลงเพื่อแก้ไขข้อผิดพลาด
 * In a Phabricator task, see the project tags in the side bar to find out which code repository a task is about.
 * หากคุณมีคำถามทั่วไปที่ไม่ได้เชื่อมโยงกับงานเฉพาะที่คุณต้องการใช้ ใช้ช่องทั่วไปเช่น[$discourse การสนับสนุนนักพัฒนาซอฟต์แวร์วิกิมีเดีย] MediaWiki on IRC หรือ รายชื่อผู้รับจดหมาย แต่ไม่ใช่งานเฉพาะ
 * หากคุณมีคำถามเกี่ยวกับข้อผิดพลาดของตัวมันเอง ให้แสดงความคิดเห็นในรายงานที่สอดคล้องกัน
 * หากคุณมีคำถามเกี่ยวกับบั๊กของตัวมันเอง ให้แสดงความคิดเห็นในรายงานบั๊กที่สอดคล้องกัน (โดยทั่วไปเป็นงานใน) "คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขบั๊กนี้ได้หรือไม่ ?" ไม่ได้เป็นคำถามที่ดีสำหรับการเริ่มต้น: คำถามเฉพาะเจาะจงมากขึ้นของคุณ คือ มีใครสักคนที่สามารถตอบได้อย่างรวดเร็วมากกว่า หากคุณไม่มีความคิดในการแก้ไขข้อผิดพลาดทุกวิธี บางทีข้อผิดพลาดยังไม่ได้เกิดขึ้นกับคุณ - โปรดพิจารณาการค้นหาสิ่งที่ง่ายกว่าเป็นอันดับแรก
 * เมื่อถาม ให้อธิบายสิ่งที่คุณพยายามและพบแล้ว เพื่อให้ผู้อื่นสามารถช่วยในระดับที่เหมาะสม เฉพาะเจาะจง - ตัวอย่างเช่น คัดลอกและวางคำสั่งของคุณและข้อมูลที่ส่งออกมาของพวกเขา (หากไม่ยาวเกินไป) แทนการถอดความในคำของคุณเอง หลีกเลี่ยงความเข้าใจผิดนี้
 * Do not ask if you can work on a task.
 * หลีกเลี่ยงอีเมลส่วนตัวสำหรับการร้องขอการสนับสนุนในช่องทางสังคมออนไลน์ของเรา
 * ขอให้ใจเย็นเมื่อต้องการข้อมูลและความคิดเห็น ในไออาร์ซี ไม่ต้องร้องขอที่จะถาม หรือเพียงแค่ถาม: คำถามส่วนใหญ่จะสามารถตอบโดยสมาชิกในชุมชนอื่น ๆ ด้วย หากคุณถามในช่องไออาร์ซี หากไม่มีใครตอบ กรุณาสอบถามเกี่ยวกับรายงานบั๊กหรือหน้าวิกิที่เกี่ยวข้องกับปัญหาที่เกิดขึ้น ขอเพียงอย่ายอมแพ้

สื่อสารว่าคุณทำงานในภารกิจ
คุณไม่จำเป็นต้องถามว่าคุณสามารถทำงานได้หรือไม่

คุณไม่จำเป็นต้องประกาศแผนการของคุณก่อนที่คุณจะเริ่มทำงานกับบั๊ก แต่ก็ยินดีที่จะต้อนรับ Do not ask to assign a task to you. You do not need to announce your plans before you start working on a bug, but it would be welcome. คุณสามารถตั้งตัวเองเป็นผู้รับโอนสิทธิ์ในงานได้: ใช้เมนูแบบเลื่อนลง เพิ่มการกระทำ… → กำหนด/ยืนยัน ในฟาบริเคเตอร์ ในช่วงล่าสุด เมื่อคุณอยู่ใกล้กับการเสนอแพตช์สำหรับภารกิจ ก็เป็นการดีที่จะประกาศในความคิดเห็นว่าคุณกำลังทำงานอยู่ การประกาศของคุณจะช่วยให้ผู้อื่นไม่ต้องทำงานในบั๊กในช่วงเวลาเดียวกันและไม่ซ้ำงาน

โปรดทราบว่าหากภารกิจมีลิงก์ล่าสุดไปยังแพตช์ในเกอร์ริตและมีโครงการ "แพตช์สำหรับการทบทวน" (Patch-For-Review) ที่เกี่ยวข้องในโครงการฟาบริเคเตอร์ ให้เลือกงานที่แตกต่างออกไปแทนแทน - โดยหลีกเลี่ยงการทำงานซ้ำ หากแพตช์ที่มีอยู่ในเกอร์ริตไม่ได้รับการผสานและไม่เห็นการเปลี่ยนแปลงใด ๆ เป็นเวลานาน คุณยังสามารถเลือกแพตช์ที่มีอยู่แล้วและปรับปรุงได้ ขึ้นอยู่กับข้อเสนอแนะในเกอร์ริตและในภารกิจ

หากคุณหยุดการทำงานในภารกิจ ให้โยกย้ายตัวเองออกในฐานะผู้โอนภารกิจ และตั้งค่าผู้รับโอนไปเป็นผู้รับโอนที่ค่าเริ่มต้น เพื่อให้ผู้อื่นรู้ว่าพวกเขาสามารถทำงานในภารกิจได้และไม่คาดหวังว่าคุณจะยังคงทำงานกับมัน

โดยการสื่อสารในช่วงต้นคุณจะได้รับความเอาใจใส่, ข้อเสนอแนะ และความช่วยเหลือจากสมาชิกในชุมชนมากขึ้น 

PHP
มีเดียวิกิได้รับการเขียนในภาษาพีเอชพี ดังนั้นคุณจะต้องได้รับความคุ้นเคยกับภาษาพีเอชพี เพื่อที่จะแฮกแกนของมีเดียวิกิ


 * เรียนรู้ภาษาพีเอชพี
 * สอนการใช้ภาษาพีเอชพี — ใช้ประโยชน์ได้ในภาษาที่ต่างกัน หากคุณไม่ได้มีความรู้เกี่ยวกับภาษาพีเอชพีแต่รู้วิธีการเขียนโปรแกรมในจุดหมายภาษาโปรแกรมอื่น ๆ ภาษาพีเอชพีก็จะเป็นเรื่องง่ายสำหรับคุณที่จะเรียนรู้
 * PHP Programming at Wikibooks.
 * PHP topic at Wikiversity.


 * ทรัพยากรภาษาพีเอชพี:
 * คู่มือภาษาพีเอชพี — ให้บริการในภาษาที่แตกต่างกัน
 * การประชุมการเข้ารหัสภาษาพีเอชพีภายในชุมชนมีเดียวิกิ


 * สิ่งที่ต้องรู้:
 * สคริปต์  ในมีเดียวิกิ ได้เอื้ออำนวยตัวแปลภาษาพีเอชพีพื้นฐาน กับอ็อบเจ็คมีเดียวิกิ และประเภทที่ทำการโหลด
 * นอกจากนี้ สคริปต์  ในมีเดียวิกิเปลี่ยนจาก   ที่อิงจากไซเอสเอช (PsySH) ดู Manual:Shell.php.

ฐานข้อมูล
คุณสมบัติหลายอย่างจำเป็นต้องมีการจัดการฐานข้อมูลบางส่วน ดังนั้นคุณจึงต้องมีความคุ้นเคยกับมายเอสคิวแอล/มาเรียดีบี


 * เรียนรู้มายเอสคิวแอล/มาเรียดีบี
 * เกี่ยวกับการสอนมายเอสคิวแอล — จากคู่มืออ้างอิงมายเอสคิวแอล 5.0
 * MySQL at Wikibooks.


 * ทรัพยากรมายเอสคิวแอล/มาเรียดีบี
 * คู่มืออ้างอิงมายเอสคิวแอล — ใช้ประโยชน์ได้ในภาษาที่ต่างกัน
 * ฐานความรู้ของมาเรียดีบี
 * การประชุมการเข้ารหัสฐานข้อมูลภายในชุมชนมีเดียวิกิ


 * สิ่งที่ต้องรู้:
 * ทดสอบโค้ดของคุณกับมายเอสคิวแอล/มาเรียดีบี
 * มีเดียวิกิในปัจจุบันใช้มายเอสคิวแอลและมาเรียดีบี เป็นระบบจัดการเว็บไซต์ของฐานข้อมูลหลัก นอกจากนี้ยังสนับสนุนดีบีเอ็มเอสอื่น ๆ เช่น โพสต์เกรสคิวเอล และเอสคิวไลท์ อย่างไรก็ตาม นักพัฒนาเกือบทั้งหมดใช้มายเอสคิวแอล/มาเรียดีบี และไม่ทดสอบดีบีเอ็มเอสอื่น ๆ ซึ่งส่งผลทำลายอยู่เป็นประจำ คุณจึงควรใช้มายเอสคิวแอล/มาเรียดีบีเมื่อทำการทดสอบแพตช์ หากคุณกำลังพยายามที่จะปรับปรุงการสนับสนุนสำหรับฐานข้อมูลอื่นโดยเฉพาะ ในกรณีหลัง ให้แน่ใจว่าคุณระมัดระวังที่จะไม่ทำลายมายเอสคิวแอล/มาเรียดีบี (หรือเขียนคำสั่งที่มีความน่ากลัวที่ไม่มีประสิทธิภาพในนั้น) ตั้งแต่มายเอสคิวแอล/มาเรียดีบีเป็นสิ่งที่คนอื่นใช้

จาวาสคริปต์และซีเอสเอส
จาวาสคริปต์และซีเอสเอส ได้กลายเป็นรหัสส่วนหน้าเว็บไซต์ที่สามารถมองเห็นได้ในบราวเซอร์ที่มีอยู่ทั่วไปทุกหนทุกแห่ง คุณไม่ต้องคุ้นเคยกับจาวาสคริปต์, เจเควียรี และซีเอสเอสในการทำงานกับมีเดียวิกิ แต่คุณอาจต้อง โดยขึ้นอยู่กับสิ่งที่คุณจะเลือกทำงาน


 * เรียนรู้เกี่ยวกับจาวาสคริปต์และซีเอสเอส
 * JavaScript and CSS at Wikibooks.
 * เริ่มต้นกับเจเควียรี — เกี่ยวกับการสอนเจเควียรี
 * Learning JavaScript — references and sources.


 * ทรัพยากรจาวาสคริปต์และซีเอสเอส
 * การประชุมการเข้ารหัสจาวาสคริปต์ภายในชุมชนมีเดียวิกิ
 * การประชุมการเข้ารหัสซีเอสเอสภายในชุมชนมีเดียวิกิ

MediaWiki
ฐานรหัสมีเดียวิกิมีขนาดใหญ่ และมีบางส่วนที่น่าเกลียด ไม่ควรต้องถูกครอบงำโดยสิ่งดังกล่าว เมื่อคุณเริ่มต้นครั้งแรก โดยมุ่งมั่นที่จะเขียนคุณลักษณะหรือแก้ไขบั๊ก ซึ่งโดนเฉพาะอาณาบริเวณขนาดเล็กของรหัสเท่านั้น


 * ข้อมูลพื้นฐานของมีเดียวิกิและต้องอ่าน:
 *  — ภาพรวมระดับสูงขององค์ประกอบหลักมีเดียวิกิ และวิธีที่พวกเขาทำงานด้วยกัน
 *  — ภาพรวมของสาเหตุและวิธีการเขียนโค้ดที่เชื่อถือได้


 * ทรัพยากรมีเดียวิกิ:
 * — รายชื่อของไฟล์ที่สำคัญและเชื่อมโยงไปยังข้อมูลรายละเอียดเพิ่มเติม
 * — รายการของตะขอ หากคุณกำลังพยายามที่จะหาสิ่งที่เป็นส่วนหนึ่งของฐานรหัสทำอะไรบางอย่าง ก็มักจะเป็นตำแหน่งที่ดีที่จะเริ่มต้นด้วยการค้นหาตะขอที่เกี่ยวข้อง
 * — ภาพรวมของการประชุมการเข้ารหัสทั่วไปภายในชุมชนมีเดียวิกิ


 * รหัสเอกสาร ( class reference ) — สร้างเอกสารจากรหัส และแสดงความคิดเห็นรหัสโดยอัตโนมัติ
 * — คู่มือการแก้จุดบกพร่องมีเดียวิกิ
 * — เครื่องมือในการโต้ตอบกับอ็อบเจ็ค ของมีเดียวิกิแบบสด ๆ

ส่วนขยายมีเดียวิกิ
หากคุณเลือกที่จะทำงานในรหัสส่วนขยายมีเดียวิกิ ลิงก์ต่อไปนี้จะให้ข้อมูลเพิ่มเติม


 * ข้อมูลพื้นฐานเกี่ยวกับส่วนขยายมีเดียวิกิ:
 * การพัฒนาส่วนขยาย — วิธีการเขียนส่วนขยายสำหรับมีเดียวิกิ
 * สอนการเขียนส่วนขยาย


 * ทรัพยากรส่วนขยายมีเดียวิกิ:
 * แนวทางปฏิบัติที่ดีที่สุดสำหรับส่วนขยาย
 * คำแนะนำสั้น ๆ สำหรับการพัฒนาส่วนขยายมีเดียวิกิ — วิดีโอนำเสนอเกี่ยวกับวิธีการสร้างส่วนขยายมีเดียวิกิ (สไลด์)
 * การทำส่วนขยายมีเดียวิกิ — ครอบคลุมถึงวิธีการในการพัฒนาส่วนขยายสำหรับมีเดียวิกิ, การปฏิบัติที่ดีที่สุด และวิธีการที่จะมีส่วนร่วมในชุมชนมีเดีย ตั้งแต่เดือนกุมภาพันธ์ ค.ศ. 2011
 * ความช่วยเหลือสำหรับนักพัฒนาซอฟต์แวร์ส่วนขยายในศูนย์นักพัฒนาซอฟต์แวร์

ดูเพิ่ม

 * Search for code across repositories
 * – เมื่อคุณได้อ่านข้อมูลอย่างละเอียดในบทความนี้ ก็ถึงเวลาที่จะไปสู่ข้อมูลในศูนย์กลางนักพัฒนา
 * – ชุดของหน้าเว็บที่เกี่ยวข้อง