วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

4
กิจกรรมการสร้างทีมที่ดีจะช่วยพัฒนาทักษะการประเมินได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันรวบรวมการนำเสนอเพื่อส่งมอบให้กับเพื่อนร่วมทีมของฉัน (นักพัฒนาทั้งหมด) และฉันต้องการที่จะรวมกิจกรรมการสร้างทีมสั้น ๆ ที่มุ่งเน้นไปที่การพัฒนาทักษะการประมาณ ไม่มีใครมีข้อเสนอแนะหรือรู้เกี่ยวกับกิจกรรมการสร้างทีมใด ๆ ที่ฉันสามารถใช้ได้?

1
ASP.NET Web Application ทุกอันมี Single Application Domain หรือไม่
ฉันสับสนเล็กน้อย มีโดเมนแอปพลิเคชันเพียงโดเมนเดียวสำหรับทุกแอปพลิเคชันเว็บ ASP.NET เดียวหรือสามารถมีได้ทุกที่ระหว่าง 1 ถึง 100 โดเมนแอปพลิเคชันที่มีอยู่ในกลุ่มแอปพลิเคชันเดียวของเว็บแอปพลิเคชัน

1
ฟังก์ชั่นการสลายตัวเป็นปฏิปักษ์จริงหรือไม่?
ในขณะที่ฉันกำลังอ่านรูปแบบการต่อต้านที่แย่ที่สุดที่คุณเจอฉันคลิกที่ลิงค์ในโพสต์นี้เพื่อลงบนเว็บไซต์เกี่ยวกับรูปแบบการต่อต้าน และหน้าhttp://sourcemaking.com/antipatterns/functional-decompositionทำให้ฉันสงสัย รูปแบบการต่อต้านนี้แย่ขนาดไหนและเป็นรูปแบบการต่อต้านเลยหรือไม่? เพราะถึงแม้ว่าฉันจะเขียนโปรแกรม OOP เป็นส่วนใหญ่ในทุกวันนี้ แต่ฉันก็ยังรู้สึกไม่เต็มใจกับภาษา OOP ที่บริสุทธิ์ทุกอย่างเช่น Java และวิธีการออกแบบที่พวกเขานำมาใช้ และฉันเดาว่าฉันยังคงมีคุณลักษณะบางอย่างของการเขียนโปรแกรมฟังก์ชั่นในขณะที่ฉันเขียนรหัส และสิ่งนี้ทำให้เกิดคำถามขึ้นฉันกำลังทำผิดโดยติดกับ OOP + ฟังก์ชั่นสไตล์หรือเป็นเรื่องธรรมดาในอุตสาหกรรมและไม่ใช่เรื่องเลวร้าย สิ่งที่ฉันรู้จากประสบการณ์คือสไตล์ OOP + ฟังก์ชั่นไม่เข้ากันได้กับนักพัฒนา OOP อย่างแท้จริง แต่ในขณะเดียวกันในขณะที่นักพัฒนา OOP มีปัญหากับการพัฒนา OOP + ฟังก์ชั่นการโต้เถียงก็คือการแก้ปัญหา OOP มักจะใช้งานมากเกินไปและยากต่อการใช้งานและจากประสบการณ์ของฉันไม่ได้ง่ายขึ้นสักหน่อยจริงๆ แนะนำจุดบอดบางอย่างสำหรับข้อบกพร่องที่ร้ายแรงมากที่จะซ่อน ดังนั้นแม้ว่าฉันจะพูดคุยกับเพื่อนร่วมงานของฉันเกี่ยวกับหัวข้อเหล่านี้ฉันก็สรุปได้ว่าไม่มีวิธีใดที่สมบูรณ์แบบจริง และฉันยังคงมีคำถามที่ยังไม่ได้ตอบ ปัญหา OOP ได้รับการเสริมด้วยลิงก์จากโพสต์อื่นในเธรดเดียวกัน ลิงค์จะดูที่สไตล์ OOP ของ Java http://chaosinmotion.com/blog/?p=622 ดังนั้นทัศนคติทั่วไปที่มีต่อการผสมการทำงานของโปรแกรมกับ OOP คืออะไร? และอะไรคือความสมดุลที่นักพัฒนาควรพยายามที่จะบรรลุ?

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

4
อะไรทำให้“ สไตล์ดี” ใน Java? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันได้ถามคำถามนี้เกี่ยวกับ Stackoverflow และก่อนที่จะถูกโห่ไล่ฉันได้รับคำแนะนำที่เป็นประโยชน์จากPéterTörökว่านี่อาจเป็นสถานที่ที่ดีกว่าในการโพสต์ ฉันเขียนโปรแกรมใน Java มาสองสามปีแล้ว ฉันมักจะพูดคุยเกี่ยวกับการตัดสินใจออกแบบกับเพื่อนร่วมงานบนพื้นฐานของสิ่งที่ถือว่าเป็น 'รูปแบบที่ดี' แท้จริงแล้วมีจำนวนคำถาม / คำตอบ StackOverflow ที่กล่าวถึงการออกแบบบนพื้นฐานของสิ่งที่เป็นสไตล์ที่ดี แต่อะไรที่ทำให้ 'สไตล์ดี'? เช่นเดียวกับหลาย ๆ สิ่งฉันรู้ว่าเมื่อฉันเห็นมัน ... แต่ฉันต้องการความคิดที่ดีกว่าแค่ความรู้สึกผิดชอบชั่วดีของฉันโดยบอกว่าการออกแบบนี้ไม่ถูกต้อง คุณคิดอย่างไรเกี่ยวกับการสร้างโค้ดที่ดีและออกแบบมาอย่างดี? (ฉันยอมรับว่านี่เป็นเรื่องส่วนตัวเนื่องจาก 'สไตล์ดี' จะขึ้นอยู่กับงานในมือ) (นอกจากนี้ฉันควรเพิ่มว่าฉันไม่สนใจสไตล์ทีม - เช่น "เราใช้การเยื้องของ 2 ช่องว่างแทนที่จะเป็น 4" ... และฉันไม่สนใจระเบียบของโค้ด Java) แก้ไข: ขอบคุณสำหรับคำตอบ / ความคิดเห็นที่ดีทั้งหมด ฉันกระตือรือร้นเป็นอย่างยิ่งสำหรับคำตอบที่จะช่วยจัดระเบียบสิ่งต่าง ๆ ที่ทำให้ประแจความรู้สึกผิดชอบของโปรแกรมเมอร์ (และอาจเป็นไปได้)

6
เมื่อใดที่การพัฒนาจะหยุดและเริ่มมีการประกันคุณภาพ
เราเขียนข้อกำหนดคุณสมบัติการทำงานที่สมบูรณ์สำหรับทีมพัฒนาของเราสองคน เราไม่มีผู้ทดสอบมืออาชีพ แต่เราได้ร่างโดยความช่วยเหลือจากเจ้าหน้าที่ช่วยเหลือของเราที่มีอยู่เพื่อทำการทดสอบ QA เราเคยมีปัญหาในอดีตที่ฟังก์ชั่นการทำงานที่สมบูรณ์ไม่ทำงานหรือโค้ดที่ส่งมอบนั้นไม่ตรงตามข้อกำหนด คำถามของฉันคือนักพัฒนาควรหยุดการเขียนโค้ดที่ใกล้เคียงกับทีมงาน QA ในขั้นตอนใด มันมากเกินไปหรือไม่ที่จะให้นักพัฒนาตรวจสอบโค้ดของพวกเขาเทียบกับข้อมูลจำเพาะก่อนส่งมอบให้กับทีมงาน QA?

6
มีดโกนหรือ XSLT ดีกว่าสำหรับโครงการของฉันหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันอยู่ในช่วงเริ่มต้นในการออกแบบระบบที่จะถูกแยกออกเป็นสองส่วน ส่วนหนึ่งคือบริการส่วนอีกส่วนหนึ่งเป็นส่วนต่อประสานกับบริการที่ให้ข้อมูลผ่านทาง OData หรือ XML แอปพลิเคชันจะขึ้นอยู่กับรูปแบบสถาปัตยกรรม MVC สำหรับมุมมองเรากำลังพิจารณาใช้ XSLT หรือ Razor ภายใต้ ASP.NET XSLTหรือRazorจะช่วยแยกข้อกังวลโดยที่ XML ดั้งเดิมหรือการตอบสนองแทนแบบจำลองของคุณ XSLT หรือ 'Razor view' แทนมุมมองของคุณ ฉันจะปล่อยตัวควบคุมออกสำหรับตัวอย่างนี้ ข้อเสนอการออกแบบเบื้องต้นแนะนำ XSLT แต่ฉันแนะนำให้ใช้มีดโกนแทนเป็นเอ็นจิ้นการดูที่เป็นมิตรมากกว่า นี่คือเหตุผลที่ฉันแนะนำให้ใช้กับมีดโกน (C #): ทำงานกับและสร้างเพจที่ซับซ้อนได้ง่ายขึ้น สามารถผลิตเอาต์พุตที่ไม่ใช่ * ML ได้อย่างง่ายดายเช่น csv, txt, fdf เทมเพลต verbose น้อยลง รูปแบบมุมมองถูกพิมพ์อย่างรุนแรงโดยที่ XSLT จะต้องพึ่งพาการประชุมเช่นค่าบูลีนหรือวันที่ มาร์กอัปสามารถเข้าถึงได้ง่ายขึ้นเช่นการขึ้นบรรทัดใหม่การปรับมาตรฐานค่าการปรับมาตรฐานและกฎช่องว่าง …
9 c#  asp.net-mvc  xslt  razor 

2
มันเป็นกลิ่นรหัสหรือไม่ถ้าวัตถุรู้เจ้าของเป็นจำนวนมาก?
ในแอปพลิเคชัน Delphi 2007 ของเราเราใช้โครงสร้างต่อไปนี้มากมาย FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData)); FindOwnerClass เดินทางลำดับชั้นของเจ้าขององค์ประกอบปัจจุบันขึ้นไปเพื่อหาคลาสที่ระบุ (ในตัวอย่าง TdmBasicData) วัตถุที่เป็นผลลัพธ์จะถูกเก็บไว้ในตัวแปรฟิลด์ FdmBasic เราใช้สิ่งนี้เป็นหลักในการส่งดาต้าโมดูล ตัวอย่าง: เมื่อสร้างรายงานข้อมูลที่ได้จะถูกบีบอัดและจัดเก็บไว้ในเขตข้อมูล Blob ของตารางที่เข้าถึงผ่านดาต้าโมดูลแบบ TdmReportBaseData ในโมดูลที่แยกต่างหากของแอปพลิเคชันของเรามีฟังก์ชั่นเพื่อแสดงข้อมูลจากรายงานในรูปแบบเพจโดยใช้ ReportBuilder รหัสหลักของโมดูลนี้ (TdmRBReport) ใช้คลาส TRBTempdatabase เพื่อแปลงข้อมูล Blob ที่ถูกบีบอัดไปยังตารางต่าง ๆ ที่ใช้งานได้ใน Reportbuilder รันไทม์ Reportdesigner TdmRBReport มีการเข้าถึง TdmReportBaseData สำหรับข้อมูลที่เกี่ยวข้องกับรายงานทุกประเภท (ประเภทของรายงานการตั้งค่ารายงานการคำนวณ ฯลฯ ) TRBTempDatabase ถูกสร้างขึ้นใน TdmRBR พอร์ต แต่ต้องมีการเข้าถึง TdmReportBasedata ดังนั้นตอนนี้จะใช้การก่อสร้างด้านบน: constructor TRBTempDatabase.Create(aOwner: TComponent); begin inherited …

2
ปริญญาโทเทียบกับปริญญาเอก - ยาว [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันอายุ 21 ปีและเป็นนักศึกษาวิทยาศาสตร์คอมพิวเตอร์ระดับปริญญาโทปีแรก ไม่ว่าจะเรียนต่อปริญญาเอกของฉันหรือไม่ก็ตาม ฉันไม่สามารถหยุดคิดเกี่ยวกับมันและฉีกขาดออกเป็นปัญหา ฉันได้อ่านhttp://www.cs.unc.edu/~azuma/hitch4.htmlและบทความอื่น ๆ อีกมากมายที่เกี่ยวข้องกับปริญญาโทและปริญญาเอกบนเว็บ น่าเสียดายที่ฉันยังไม่ได้ข้อสรุป ฉันหวังว่าฉันจะโพสต์ความคิดของฉันเกี่ยวกับปัญหาที่นี่โดยหวังว่าจะ 1) รับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับปัญหาและ 2) ตรวจสอบให้แน่ใจว่าฉันถูกต้องในสมมติฐานของฉัน หวังว่าผู้ที่มีประสบการณ์ในสาขานั้น ๆ จะสามารถบอกฉันได้ว่าฉันคิดผิดหรือไม่ดังนั้นฉันจึงไม่ตัดสินใจตามความคิดที่ผิด ๆ เอาล่ะเอาหัวข้อนี้ไปให้พ้นทาง - เงิน เงินไม่ใช่สิ่งที่ดีที่สุดสิ่งสำคัญสำหรับฉัน แต่มันก็ยังสำคัญ มันเป็นเป้าหมายของฉันเสมอที่จะสร้างตัวเลข 6 ตัว แต่ฉันรู้ว่ามันอาจจะใช้เวลานานกับทั้งสองเส้นทาง ตามเว็บไซต์คำนวณเงินเดือนออนไลน์ส่วนใหญ่เงินเดือนเริ่มต้นเฉลี่ยสำหรับวิศวกรซอฟต์แวร์คือ ~ 60-70k หลักสูตรปริญญาเอกที่นี่คือ 5 ปีดังนั้นนั่นคือประมาณ 300k ที่ฉันพลาดโดยไม่ไปทำงานกับเจ้านายด้วย ฉันเคยมีเพียงครั้งเดียวในชีวิตของฉัน ~ 1k ดังนั้น 300k …

4
สิ่งที่เข้าใจภายใต้“ หน่วย” ในการทดสอบหน่วย
ตามที่ฉันเข้าใจในทฤษฎีภายใต้ "หน่วย" คนหมายถึงวิธี (ใน OOP) แต่ในการทดสอบการปฏิบัติซึ่งยืนยันว่าวิธีการแยกบางอย่างนั้นเป็นการทดสอบพฤติกรรมที่บอบบางมาก (ไม่ได้ตรวจสอบผลลัพธ์ แต่เป็นข้อเท็จจริงที่เรียกวิธีการพึ่งพาบางอย่าง) ดังนั้นฉันเห็นผู้คนจำนวนมากที่เรียนเป็นกลุ่มเข้าใจคลาสเล็ก ๆ ที่เกี่ยวข้องอย่างใกล้ชิด ในกรณีนี้มีเพียงการอ้างอิงภายนอกเท่านั้นที่จะถูกล้อเลียน / ขัดและสำหรับการอ้างอิงที่อยู่ภายในการใช้งานจริงของหน่วย ในกรณีนี้มีสถานะมากขึ้นมีความหมาย (ตามข้อกำหนด) และการทดสอบที่ไม่เปราะบาง ดังนั้นคำถามคือคุณรู้สึกอย่างไรเกี่ยวกับวิธีการเหล่านี้และมันถูกต้องหรือไม่ที่จะเรียกการทดสอบหน่วยวิธีที่สองหรืออาจเป็นการทดสอบบูรณาการระดับต่ำ หากคุณเห็นข้อควรพิจารณาบางประการเกี่ยวกับการใช้ TDD ด้วยวิธีการทดสอบวิธีใดวิธีหนึ่งเหล่านี้ฉันจะขอบคุณสำหรับความคิดของคุณ

5
ภาษาแบบคงที่และแบบไดนามิกสามารถถูกมองว่าเป็นเครื่องมือที่แตกต่างกันสำหรับงานประเภทต่างๆหรือไม่?
ใช่มีการถามคำถามที่คล้ายกัน แต่มักจะมีจุดประสงค์ในการค้นหาว่า 'แบบไหนดีกว่ากัน' ฉันถามเพราะฉันเข้ามาเป็นผู้พัฒนา JavaScript เป็นหลักและไม่มีประสบการณ์ในการเขียนภาษาแบบคงที่ ทั้งๆที่สิ่งนี้ฉันเห็นคุณค่าในการเรียนรู้ C สำหรับการจัดการความต้องการการดำเนินงานที่ระดับต่ำกว่าของรหัส (ซึ่งฉันคิดว่ามีหลายสิ่งที่จะทำอย่างไรกับ static vs dynamic ที่ระดับคอมไพเลอร์) แต่สิ่งที่ฉันพยายามคาดศีรษะ มีบริบทเฉพาะของโครงการหรือไม่ (อาจมีการดำเนินการเกี่ยวกับข้อมูลแบบไดนามิกบางประเภท) ที่เกี่ยวข้องกับสิ่งอื่นนอกเหนือจากประสิทธิภาพที่เหมาะสมกับ Java หรือ C # เทียบกับ Python

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

3
จะใส่วิธีการที่ใช้ร่วมกันทั่วไปได้ที่ไหน
ฉันมีวิธีการมากมายที่ใช้กันทั่วไปทุกที่ ตอนนี้ codefile มีชื่อว่า globals เพื่อแสดงถึงความจริงที่ว่าพวกเขาเป็น ... ในความเป็นจริง ... ทั่วโลก อย่างไรก็ตามฉันไม่ชอบสิ่งนี้ ฉันต้องการจัดกลุ่มสิ่งเหล่านี้เป็นคลาสและส่งผ่านอินเตอร์เฟส ฉันจะทำตัวอย่างเดียว แต่ฉันไม่ได้ตกหลุมพรางเดียวที่นี่ ก่อนอื่นฉันควรตั้งชื่อชั้นเรียนอย่างไร ฉันต้องการหลีกเลี่ยงชื่อกลมเพราะฉันกลัวว่าผู้ดูแลจะเข้าใจผิด นอกจากนี้ฉันควรพิจารณาแยกชุดของวิธีการเพื่อให้พฤติกรรมสามารถเปลี่ยนแปลงและปรับได้อย่างไร ชุดวิธีการประกอบด้วยสิ่งต่าง ๆ เช่น: ตารางการแปลง ปฏิสัมพันธ์ของคลิปบอร์ด การจัดการแบบอักษรที่สร้างขึ้น วิธีการวาดภาพทั่วไป ให้ส่วนต่อประสานกับการเข้าถึงทรัพยากรที่ใช้บ่อย
9 c# 

9
Google หรือ Microsoft ได้รับอะไรจากการโฮสต์ไฟล์ JS บนเครือข่ายการจัดส่งเนื้อหา (CDN)
ในขณะที่คุณรู้จักกับ Google, Microsoft และ jQuery.com ไฟล์ JS ข้อเสนอของพวกเขาCDN ในการทำเช่นนี้พวกเขาจะต้องใช้เซิร์ฟเวอร์ที่สำคัญซึ่งต้องเสียค่าใช้จ่าย ทำไมพวกเขาทำเช่นนี้และพวกเขาได้อะไรจากมัน

3
การรักษาโมเดล MVC ไว้อย่างหลวม ๆ จากฐานข้อมูลหรือไม่
ฉันชอบที่จะให้โค้ดของฉันทดสอบได้และตัดสินใจที่จะใช้กลยุทธ์ Dependency-Injection สำหรับกรอบงาน MVC ปัจจุบันของฉันซึ่งได้พิสูจน์แล้วว่าเป็นวิธีที่ยอดเยี่ยมในการทำให้มั่นใจได้ว่าโค้ดคู่กันอย่างหลวม ๆ ความสามารถในการทดสอบและโมดูล แต่เมื่ออยู่ไกลจากต้นแบบในรูปแบบการออกแบบฉันมีช่วงเวลาที่ยากลำบากในการหาวิธีที่ดีในการรักษาแบบจำลองของฉันให้แน่นควบคู่ไปกับคลาสตัวเชื่อมต่อฐานข้อมูลเท่าที่จะทำได้ สิ่งนี้ทำได้อย่างไร เนื่องจากฉันไม่ได้ให้รหัสทางกายภาพใด ๆ พร้อมกับคำถามนี้ฉันจะขอขอบคุณตรรกะ / ตัวอย่างโค้ดหรือข้อมูลบางอย่างที่สามารถชี้ให้ฉันไปในทิศทางที่จะเข้าใจปัญหาที่อธิบายไว้ข้างต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.