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

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

2
git, maven และ jenkins - versioning, dev และ release สร้างเวิร์กโฟลว์
เป็นวิธีที่ต้องการทำต่อไปนี้ด้วยคอมไพล์ maven และเจนกินส์คืออะไร: ฉันกำลังพัฒนาแอปพลิเคชันซึ่งฉันต้องการรักษาสาขา "dev" และ "release" ฉันต้องการเจนกินส์เพื่อสร้างทั้งสอง อาจเป็นไปได้ว่าการเผยแพร่สิ่งประดิษฐ์จะมีรุ่นเช่น 1.5.2 และ dev-builds จะเป็น 0.0.1-SNAPSHOTs ฉันไม่ต้องการไฟล์ pom.xml 2 ไฟล์ ฉันดูโปรไฟล์ แต่ดูเหมือนว่าพวกเขาจะไม่สามารถเปลี่ยนเวอร์ชันสิ่งประดิษฐ์ได้ วิธีหนึ่งที่ฉันสามารถดูได้คือการเพิ่ม 'ตัวระบุ' ลงในการทดสอบสร้าง แน่นอนฉันสามารถเปลี่ยนชื่อไฟล์ได้เนื่องจากข้อมูลสิ่งประดิษฐ์จริงในเรื่องนี้ไม่สำคัญเพราะแอปเป็นแบบสแตนด์อโลน สิ่งที่จะเป็นวิธีที่ต้องการในการทำเช่นนี้? หรือคุณจะทำอย่างไร

3
บรรลุความเข้ากันได้กับ C ++ 11
ฉันทำงานกับแอพพลิเคชั่นซอฟต์แวร์ขนาดใหญ่ที่ต้องใช้งานบนหลายแพลตฟอร์ม บางแพลตฟอร์มเหล่านี้รองรับคุณสมบัติบางอย่างของ C ++ 11 (เช่น MSVS 2010) และบางแพลตฟอร์มไม่รองรับ (เช่น GCC 4.3.x) ฉันคาดว่าสถานการณ์นี้จะดำเนินต่อไปอีกหลายปี (คาดเดาที่ดีที่สุดของฉัน: 3-5 ปี) เนื่องจากว่าฉันต้องการตั้งค่าอินเทอร์เฟซที่ใช้งานร่วมกันได้ซึ่งผู้คนสามารถเขียนโค้ด C ++ 11 ที่จะยังคงคอมไพล์ด้วยคอมไพเลอร์รุ่นเก่าที่มีความเป็นไปได้ในระดับใดก็ตาม โดยรวมแล้วเป้าหมายคือการลด # ifdef ให้มากที่สุดเท่าที่จะเป็นไปได้ในขณะที่ยังคงเปิดใช้งานไวยากรณ์ / คุณสมบัติ C ++ 11 พื้นฐานบนแพลตฟอร์มที่สนับสนุนพวกเขาและให้การจำลองบนแพลตฟอร์มที่ไม่รองรับ เริ่มต้นด้วย std :: move () วิธีที่ชัดเจนที่สุดในการบรรลุความเข้ากันได้คือการใส่บางอย่างในไฟล์ส่วนหัวร่วม: #if !defined(HAS_STD_MOVE) namespace std { // C++11 emulation template <typename T> inline T& …
12 c++  c++11 

3
มีหนังสืออัลกอริทึมใดบ้างที่สอนเช่น Head First series หรือไม่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ในฐานะโปรแกรมเมอร์ Java ฉันจำเป็นต้องเรียนรู้อัลกอริทึม (สำหรับการเขียนโปรแกรมความท้าทาย) ฉันอ่าน Head First Series (JAVA เป็นของฉัน) และพวกเขาก็เป็นมิตรกับสมอง ดังนั้นฉันจึงสงสัยว่าจะมีหนังสืออัลกอริทึมใดที่จะเข้าใจได้ง่ายและไปที่ปมของแต่ละอัลโก
12 java  books  algorithms 

5
แผนการโจมตีระยะยาวเพื่อเรียนรู้คณิตศาสตร์? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเป็นนักพัฒนาเว็บที่มีความปรารถนาที่จะขยายทักษะของฉันไปเป็นคณิตศาสตร์ที่เกี่ยวข้องกับการเขียนโปรแกรม ในฐานะอาชีพที่ 2 ฉันติดอยู่ในวิทยาลัยและทำสิ่งที่ต้องการบางอย่างขณะทำงาน ฉันหวังว่าการศึกษาของฉันจะสอนฉันถึงทักษะที่จำเป็นในการประยุกต์ใช้คณิตศาสตร์ แต่ฉันพบว่ามันเร็วเกินไปที่จะทดสอบตามความกว้างที่ง่ายต่อการทดสอบได้อย่างไม่มีประสิทธิภาพมากสำหรับเวลาที่ลงทุน ตัวอย่างเช่นในคลาสแคลคูลัส 2 ประสบการณ์การขยายความคิดที่มีประโยชน์จากระยะไกลที่ฉันมีคือปริมาณและพื้นที่ใต้เส้นโค้ง ส่วนที่เหลือเป็นเพียงพีชคณิตสดุดีน่าเบื่อซึ่งในขณะที่มาง่ายสำหรับฉันสามารถทำได้โดยซอฟต์แวร์เช่น wolfram alpha ภายในไม่กี่วินาที นี่ไม่ใช่ความคิดของฉันในการเรียนรู้คณิตศาสตร์ ดังนั้นที่นี่ฉันเป็นนักเรียนที่หงุดหงิดที่กำลังมองหาวิธีที่จะปรับปรุงความเข้าใจในคณิตศาสตร์ของฉันในแบบที่มุ่งเน้นไปที่แอปพลิเคชันการทำความเข้าใจ อย่างไรก็ตามฉันไม่สามารถหากลยุทธ์การศึกษาระยะยาวที่ดีด้วยวิธีนี้ในใจ ดังนั้นสำหรับผู้ที่มีความคิดเหมือนกันคุณจะเรียนรู้คณิตศาสตร์ที่จำเป็นโดยไม่ต้องกังวลมากเกินไปเกี่ยวกับสิ่งต่าง ๆ ที่คอมพิวเตอร์สามารถทำได้ดีกว่าได้อย่างไร
12 education  math 

14
คำที่ดีกว่าสำหรับข้อกำหนดเพิ่มเติมหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา อะไรคือคำที่ดีกว่าสำหรับข้อกำหนดทางเลือกในวิศวกรรมซอฟต์แวร์ วลีนี้ขัดแย้งกัน ฉันใช้ "ข้อกำหนดที่ไม่ใช่คอร์" ในโครงการก่อนหน้านี้

4
โค้ดการจัดการแนวโน้มเป้าหมายควรได้รับการจัดการโดยผู้จัดการการพัฒนาอย่างไร
ก่อนอื่นให้ฉันเหรียญคำ: การดูแลรหัสเป้าหมาย: การตรวจสอบโค้ดในตอนเช้าจากนั้นตรวจสอบการเปลี่ยนแปลงทั้งหมดที่ทำโดยนักพัฒนาคนอื่น ๆ ในไฟล์วันก่อนหน้าโดยไฟล์ (โดยเฉพาะไฟล์โค้ดที่คุณพัฒนาขึ้นในตอนแรก) และแก้ไขการจัดรูปแบบตรรกะ วิธีการแบบยาว ฯลฯ จากนั้นส่งมอบการเปลี่ยนแปลงไปยัง VCS การปฏิบัตินี้มีแนวโน้มที่จะมีข้อดีข้อเสียที่ฉันระบุ: Pro : คุณภาพของรหัส / ความสามารถในการอ่าน / ความสอดคล้องมักจะถูกรักษาไว้ Pro : ข้อผิดพลาดบางอย่างได้รับการแก้ไขเนื่องจากนักพัฒนารายอื่นไม่คุ้นเคยกับรหัสดั้งเดิม คอนดิชั่น : มักจะเป็นการเสียเวลาของผู้พัฒนาเป้าหมาย คอนดิชั่น : บางครั้งแนะนำบั๊กที่ทำให้นักพัฒนาโกรธซึ่งคิดว่าพวกเขาเขียนโค้ดปราศจากข้อบกพร่องในวันก่อนหน้า คอนดิชั่นเนอร์ : นักพัฒนารายอื่นได้รับความเดือดร้อนจาก nitpicking มากเกินไปและเริ่มที่จะไม่ชอบการมีส่วนร่วมในรหัสของเป้าหมายที่อ่อนโยน ข้อจำกัดความรับผิดชอบ: เพื่อความเป็นธรรมฉันไม่ได้เป็นผู้จัดการการพัฒนาจริง ๆ แล้วฉันเป็นผู้พัฒนาที่กำลังทำ "กำลังพุ่งเป้า" ในการป้องกันของฉันฉันคิดว่าฉันกำลังทำสิ่งนี้ด้วยเหตุผลที่ดี (เพื่อรักษาฐานรหัสขนาดใหญ่มากของเราไว้ในเครื่องที่มีน้ำมันดี) แต่ฉันกังวลมากว่ามันสร้างบรรยากาศเชิงลบเช่นกัน ฉันยังกังวลอย่างแน่นอนว่าผู้จัดการของฉันจะต้องแก้ไขปัญหานี้ ดังนั้นถ้าคุณเป็นผู้จัดการคุณจะแก้ไขปัญหานี้อย่างไร UPDATE: ฉันไม่ได้ตั้งใจจะให้เป็นภาษาท้องถิ่น แต่บางคนถามดังนั้นบางทีพื้นหลังบางอย่างจะสว่างขึ้น ฉันได้รับมอบหมายโครงการยักษ์ใหญ่ (200K LoC) เมื่อสามปีที่แล้วและเมื่อไม่นานมานี้ …

6
แบบแผนการตั้งชื่อ Javascript
ฉันมาจากพื้นหลัง Java และฉันใหม่กับ JavaScript ฉันสังเกตเห็นวิธีการจาวาสคริปต์หลายวิธีโดยใช้ชื่อพารามิเตอร์อักขระเดียวเช่นในตัวอย่างต่อไปนี้ doSomething(a,b,c) ฉันไม่ชอบ แต่นักพัฒนา JavaScript คนอื่นเชื่อฉันว่าสิ่งนี้ทำเพื่อลดขนาดไฟล์โดยสังเกตว่าไฟล์ JavaScript จะต้องถูกถ่ายโอนไปยังเบราว์เซอร์ จากนั้นฉันก็พบว่าตัวเองกำลังพูดคุยกับนักพัฒนาคนอื่น เขาแสดงให้ฉันเห็นวิธีที่ Firefox จะตัดทอนชื่อตัวแปรเพื่อโหลดหน้าเว็บเร็วขึ้น นี่เป็นวิธีปฏิบัติมาตรฐานสำหรับเว็บเบราว์เซอร์หรือไม่? การตั้งชื่อการแปลงแนวปฏิบัติที่ดีที่สุดที่ควรปฏิบัติเมื่อโปรแกรมใน JavaScript คืออะไร? ความยาวของตัวระบุสำคัญหรือไม่และถ้าเป็นเช่นนั้น

3
WCF Data Services (OData) เทียบกับ ASP.NET Web API หรือไม่ Hypermedia?
ฉันกำลังหาแอพพลิเคชั่นแบบกระจายซึ่งจะประกอบด้วยบริการ REST และไคลเอนต์ที่หลากหลาย (Silverlight, iOS, Windows Phone 7 และอื่น ๆ ) ฉันพร้อมที่จะตัดสินใจว่าจะใช้บริการ REST โดยใช้ WCF Data Services (OData) แต่ตอนนี้ MVC 4 Web API ทำให้ฉันตั้งคำถามกับการตัดสินใจว่า สิ่งที่ฉันชอบเกี่ยวกับ OData คือความสามารถในการสืบค้น URI และไฮเปอร์มีเดียที่คุณได้รับฟรี สิ่งที่ฉันไม่ชอบคือความฟุ่มเฟื่อยของอัตราการโหลด OData; ตัวละครที่ไม่จำเป็นจำนวนมากเดินผ่านเส้นลวด สิ่งที่ฉันชอบเกี่ยวกับ Web API คือ payloads มีความกระชับมากกว่าและมีความสามารถในการสอบถาม URI ของ OData แต่ดูเหมือนว่าขาดไฮเปอร์สื่อ (นอกกรอบอย่างน้อย) เจ้านายของฉันกำลังผลักดันเว็บ API เพราะ "พลังที่ Microsoft สนับสนุนอยู่และ OData …

3
รูปแบบการกำหนดข้อมูลสัมพันธ์ในฐานข้อมูล MySQL?
ฉันกำลังพยายามหาวิธีการสำหรับโครงการที่ผู้ใช้สามารถแก้ไขระเบียนและสามารถดูรุ่นที่ผ่านมาของระเบียนเหล่านั้น นี่คือสคีมาตัวอย่างที่มีการจำลองโดยใช้รายการ: TABLE list ( id int auto_increment primary key, user_id int, title varchar(255) ); TABLE list_tasks ( id int auto_increment primary key, list_id int, title varchar(255), order int, is_complete tinyint ); ดังนั้นผู้ใช้อาจเข้ามาและทำการแก้ไขหลายรายการ (เช่นเพิ่มหรือลบงานสั่งงานใหม่ทำเครื่องหมายว่าเสร็จแล้วเปลี่ยนชื่อบางส่วน ฯลฯ ) จากนั้นบันทึก ณ จุดนี้ฉันต้องการสร้างรายการและงาน 'รุ่น 2' และให้พวกเขาสามารถดูรุ่นก่อนหน้า แต่เมื่อพวกเขาเข้าถึงรายการให้รับรุ่นล่าสุดเสมอ มีวิธีการทั่วไป / รูปแบบการออกแบบสำหรับจัดการกับข้อมูลเวอร์ชันในลักษณะนี้ในฐานข้อมูล MySQL หรือไม่
12 mysql  versioning 

2
ทำไมจาวาไม่ใช้เรเดียนซ์ในการค้นหาพื้นฐาน
java.util.Arrays.sort(/* int[], char[], short[], byte[], boolean[] */) ถูกนำมาใช้เป็น 'การปรับพอร์ตสั้น' แทนการเรียงลำดับแบบ Radix ฉันทำการเปรียบเทียบความเร็วเมื่อไม่นานมานี้และด้วยสิ่งต่าง ๆ เช่น n> 10,000 การเรียงลำดับของกัมมันตภาพรังสีก็เร็วขึ้นเสมอ ทำไม?
12 java  sorting 

8
ฉันจะสนับสนุนกำหนดการปล่อยแบบกึ่งเข้มงวดในสภาพแวดล้อมที่มีความเสี่ยงได้อย่างไร?
เมื่อเร็ว ๆ นี้ฉันได้รับความเดือดร้อนมากขึ้นจากสิ่งที่ฉันจะต้องอธิบายว่าเป็นหนึ่งในประสบการณ์ที่น่าผิดหวังและฆ่าตายในอาชีพนี้มากที่สุด: ต้องนั่งดูข่าวที่ผ่านการทดสอบทดสอบใหม่จัดเวทีและสำหรับทุกคน และวัตถุประสงค์คือพร้อมที่จะจัดส่งสินค้า / การปรับใช้ ในฐานะที่เป็นผู้แก้ปัญหาทุกอย่างและไม่ใช่แค่ผู้เขียนโค้ดง่าย ๆ ฉันเข้าใจและสนับสนุนความจำเป็นในการควบคุมการเปลี่ยนแปลงที่เหมาะสม แต่เมื่อไม่นานมานี้ความสมดุลระหว่างการครอบคลุมฐานของเราและการจัดส่งตรงเวลาได้ผ่านไปอย่างไม่สมดุลและฉันก็ไม่ประสบความสำเร็จในการคืนค่าให้กับบางสิ่งที่มีสติ ฉันกำลังมองหาข้อโต้แย้งที่น่าสนใจเพื่อช่วยโน้มน้าวให้การจัดการความเสี่ยงที่ไม่พึงประสงค์: ทีมนักพัฒนาควร (หรือต้อง) สามารถกำหนดตารางเวลาการเปิดตัวของตัวเอง - ภายในระยะเวลา 1-3 เดือนควรระมัดระวังอย่างเพียงพอสำหรับทุก บริษัท ยกเว้น บริษัท ที่ติดอันดับ Fortune 500) การเปิดตัวซอฟต์แวร์เป็นเหตุการณ์สำคัญที่สำคัญและไม่ควรได้รับการปฏิบัติอย่างเป็นทหาร กล่าวอีกนัยหนึ่งความล่าช้า / การหยุดที่ไม่จำเป็นนั้นมีความยุ่งยากและควรได้รับการพิจารณาว่าเป็นทางเลือกสุดท้ายสำหรับปัญหาทางธุรกิจที่สำคัญ และ หน่วยงานภายนอก (ไม่ใช่ dev / ไม่ใช่ IT) ที่ต้องการ (หรือต้องการ) มีส่วนร่วมในฐานะผู้มีส่วนได้ส่วนเสียมีความรับผิดชอบในการร่วมมือกับทีมงาน dev เพื่อให้ตรงกับกำหนดการปล่อยโดยเฉพาะอย่างยิ่งในสัปดาห์ที่แล้วหรือก่อนที่เรือจะวางแผน วันที่ (เช่นการทดสอบผู้ใช้ / การจัดเตรียม) ข้างต้นเป็นคำยืนยันที่แหวนจริงสำหรับฉันจากประสบการณ์ แต่ดูเหมือนว่าตอนนี้ฉันอยู่ในตำแหน่งที่จะต้องพิสูจน์มัน - ดังนั้นฉันขอสิ่งที่มีเนื้อเล็กน้อยที่นี่ถ้าสิ่งนั้นมีอยู่ ทุกคนที่ต้อง …

9
กฎข้อที่สิบของ Greenspun ทุกโครงการขนาดใหญ่มีล่ามเสียงกระเพื่อมหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา กฎที่สิบของ Greenspun (จริงๆแล้วเป็นเพียงกฎเดียว) ระบุว่า: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp. ความทรงจำของฉันคือว่ามีเอกสารบางอย่างในหัวข้อบางทีสำหรับโครงการ Quattro (สเปรดชีต) ของ Borland และอื่น ๆ Google ไม่มีความช่วยเหลือบางทีคำค้นหาที่ถูกต้องอาจไม่เป็นที่สนใจ ฉันกำลังมองหาเอกสารหรือบทความที่สนับสนุนการอ้างสิทธิ์นี้หากมี

4
จัดทำแผนส่งมอบซอร์สโค้ด [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว บริษัท ของเรากำลังจะได้รับซอร์สโค้ดของผลิตภัณฑ์ขนาดใหญ่ สิ่งที่ต้องคำนึงถึงเมื่อการส่งมอบเริ่มต้นเพื่อให้แน่ใจว่าเรามีทุกอย่างและสามารถรักษาผลิตภัณฑ์นั้นได้ในอนาคต

1
GPL คัดลอกประกาศลิขสิทธิ์
"GPL วิธีการ"ได้ดังต่อไปนี้จะพูดเกี่ยวกับการใช้ลิขสิทธิ์ของรหัสที่คัดลอกมาจากโปรแกรมอื่น ๆ : หากคุณคัดลอกรหัสจากโปรแกรมอื่น ๆ ที่ครอบคลุมโดยใบอนุญาตเดียวกันให้คัดลอกประกาศลิขสิทธิ์ของพวกเขาด้วย รวบรวมประกาศลิขสิทธิ์ทั้งหมดเข้าด้วยกันใกล้กับด้านบนของแต่ละไฟล์ ฉันทำการกู้คืนทั้งหมดของไลบรารี C #ซึ่งตัวเองเป็นพอร์ตจากรหัส Visual Basic (VB) ขณะนี้รหัส VB ​​ดั้งเดิมนั้นวางจำหน่ายภายใต้ Microsoft Public License (Ms-PL) แต่เดิมภายใต้ GPL ไลบรารี C # คือ GPL ดำเนินการต่อกับไลบรารี VB ที่เก่ากว่า โดยทั่วไปฉันใช้ 'เทคนิค' เดียวกับที่ใช้ ฉันไม่สนใจที่จะสร้างไลบรารี GPL ดังนั้นจึงไม่ใช่ปัญหา ( จากคำตอบนี้ฉันรวบรวมห้องสมุดของฉันอาจถูกพิจารณาว่าเป็นงานลอกเลียนแบบ) อย่างไรก็ตามฉันคิดว่ามันยุ่งยากในการคัดลอกประกาศลิขสิทธิ์ก่อนหน้าในทุกไฟล์ต้นฉบับ ฉันค่อนข้างจะอ้างอิงพวกเขาในไฟล์ README คำถามนี้กล่าวถึงความจำเป็นในการเพิ่มการแจ้งเตือนไปยังไฟล์ต้นฉบับทุกไฟล์ แต่ไม่มีความสอดคล้องกันระหว่างคำตอบ ดังนั้นฉันต้องการเพิ่มใบอนุญาตให้ทุกไฟล์เพื่อเป็นมาตรการความปลอดภัย ฉันต้องรวมประกาศลิขสิทธิ์ของโครงการที่ห้องสมุดของฉันอยู่ในไฟล์ต้นฉบับทั้งหมดด้วยหรือไม่
12 licensing  gpl 

2
Spring + Hibernate เลือกแทน EJB 3 หรือไม่
ฉันเข้าใจว่าเมื่อใดก็ตามที่โครงการ JEE ใหม่เริ่มต้นขึ้น (ซึ่งจะใช้เทคโนโลยีเหล่านี้) คนต้องการใช้การผสมผสานของ Spring + Hibernate แทนที่จะเป็น EJB 3 ดูเหมือนว่าผู้เขียนโปรแกรมรุ่นเยาว์จะได้รับคำแนะนำให้ทำเช่นนั้นแทนที่จะเป็น EJB การตั้งค่าส่วนตัวนี้หรือมีเหตุผลที่เกี่ยวข้องหรือไม่ (เช่นแผลเป็นส่วนบุคคลที่สร้างโดยรุ่น EJB ก่อนหน้าซึ่งทำให้เกิดความไม่ไว้วางใจใน EJB หรือเทคโนโลยีขยายตัวเมื่อเทียบกับเหตุผลด้านประสิทธิภาพหรือเส้นโค้งการเรียนรู้)

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