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

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

1
CSS แบบมีเงื่อนไขตามคลาสตัวแก้ไขภายนอก - แนวปฏิบัติที่ดี?
บทนำ / พื้นหลัง: องค์ประกอบ CSS สำหรับเว็บไซต์ที่มีขนาดค่อนข้างใหญ่เรากำลังทำงานกับ SASS และพยายามจัดการ CSS ในส่วนประกอบ แนวคิดพื้นฐานของส่วนประกอบคือส่วนประกอบควรมีลักษณะเหมือนกันทุกที่โดยไม่ขึ้นกับองค์ประกอบคอนเทนเนอร์ใน DOM ดังนั้นเราต้องการหลีกเลี่ยงสิ่งเช่นนี้ (SASS): // User picture component. .user-picture { img {..} } // Override user picture for the frontpage. body.page-front .user-picture img {..} แต่ถ้าเราต้องการให้ภาพผู้ใช้ดูแตกต่างจากหน้าแรกมันจะต้องเป็นองค์ประกอบที่แตกต่างกัน เช่นกับมรดก SASS หรือด้วย mixin: // User picture component. .user-picture { img {..} } // User …
9 css  component 

1
เหตุใด Apache จึงมีเครื่องมือสองแบบสำหรับการสร้างและการจัดการการพึ่งพา
Apache มีเครื่องมือสองแบบแยก: Apache Maven Apache Ant + Apache Ivy พวกเขาดูเหมือนจะเติมทั้งช่องเดียวกัน ฉันมีสองคำถาม: สิ่งที่เป็นไฮไลท์ของความแตกต่างที่สำคัญระหว่างสองเครื่องมือ? ฉันแน่ใจว่าบทความที่ยาวมาก ๆ สามารถเขียนได้เกี่ยวกับความแตกต่างระหว่างสองเรื่องนี้ฉันไม่ได้มองหารายละเอียดมากขนาดนั้นหรือฉันกำลังมองหาข้อโต้แย้งแบบอัตนัยในการเลือกข้อใดข้อหนึ่ง ประวัติความเป็นมาของการเขียนโปรแกรม - มันเกิดขึ้นได้อย่างไรว่า Apache พัฒนาขึ้นเพื่อสร้างเครื่องมือสองชุดที่แยกจากกันโดยสิ้นเชิง

3
ทำไมไพ ธ อนจึงต้องการทั้งคอมไพเลอร์และล่าม
ฉันเข้าใจความจริงที่ว่า Java ต้องการทั้งคอมไพเลอร์และล่าม มันรวบรวมซอร์สโค้ดเป็น bytecode จากนั้นเครื่องเสมือน (บน Windows, Linux, Android ฯลฯ ) แปลว่า bytecode เป็นรหัสเครื่องสำหรับสถาปัตยกรรมปัจจุบัน แต่ทำไมไพ ธ อนจึงต้องการทั้งคอมไพเลอร์และล่าม เนื่องจาก Python ไม่ได้ขึ้นกับแพลตฟอร์มทำไมไม่ใช้แค่การตีความ? เท่าที่ฉันรู้คุณไม่สามารถรันโปรแกรม Python (เรียบเรียงเป็น bytecode) บนเครื่อง Windows หรือ Linux ใด ๆ โดยไม่มีการดัดแปลง หรือฉันผิด

4
Rand () ให้ตัวเลขเดียวกันอีกครั้งสำหรับช่วงขนาดเล็ก
ฉันพยายามจัดเรียงเกมที่มีตาราง aa ขนาด 20x20 และฉันแสดงผู้เล่น (P) เป้าหมาย (T) และศัตรูสามคน (X) ทั้งหมดเหล่านี้มี X และ Y rand()ประสานงานที่ได้รับมอบหมายโดยใช้ ปัญหาคือว่าถ้าฉันพยายามที่จะได้รับคะแนนมากขึ้นในเกม (เติมพลังงาน ฯลฯ ) พวกเขาทับซ้อนกับจุดอื่น ๆ หนึ่งหรือมากกว่าเพราะช่วงที่มีขนาดเล็ก (รวม 1 ถึง 20) นี่คือตัวแปรของฉันและวิธีที่ฉันกำหนดค่า: ( COORDคือstructด้วย x และ a y เพียงอย่างเดียว) const int gridSize = 20; COORD player; COORD target; COORD enemy1; COORD enemy2; COORD enemy3; //generate …
9 c++  random 

6
จะลดสวิตช์ในคำสั่ง switch ได้อย่างไร?
ดังนั้นฉันจึงสร้างวิธีการสร้างบรรทัดคำทักทายตามคนสองคนจากฐานข้อมูล มีพารามิเตอร์สี่ตัว ได้แก่ สองชื่อ ( name1และname2) และสองเพศ ( genderและgender2) สำหรับการรวมเพศทุกครั้งฉันมีเอาท์พุทที่แตกต่างกัน ตัวอย่างเช่น: ถ้าเพศ 1 คือM(ชาย) และเพศ 2 เป็นเช่นMกันผลลัพธ์ควรเป็นดังนี้: Dear Sir name1 and Sir name2, ในเวลานี้สวิตช์ของฉันมีลักษณะดังนี้: switch(gender1){ case 'M': switch(gender2){ case 'M': printf("Dear Sir %s and Sir %s", name1, name2); break; case 'W': printf("Dear Sir %s and Madame %s", name1, name2); break; …

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

2
เราจำเป็นต้องตรวจสอบการใช้งานโมดูลทั้งหมดหรือเพียงแค่ข้อโต้แย้งของวิธีการสาธารณะ?
ฉันได้ยินมาว่าขอแนะนำให้ตรวจสอบข้อโต้แย้งของวิธีการสาธารณะ: หนึ่งควรตรวจสอบโมฆะถ้าเขาไม่คาดหวังโมฆะ? เมธอดควรตรวจสอบความถูกต้องของพารามิเตอร์หรือไม่ MSDN - CA1062: ตรวจสอบข้อโต้แย้งของวิธีสาธารณะ (ฉันมีพื้นหลัง. NET แต่คำถามไม่เฉพาะ C #) แรงจูงใจสามารถเข้าใจได้ หากโมดูลจะถูกใช้ในทางที่ผิดเราต้องการที่จะโยนข้อยกเว้นทันทีแทนที่จะเป็นพฤติกรรมที่คาดเดาไม่ได้ สิ่งที่รบกวนจิตใจฉันคือข้อโต้แย้งที่ผิดไม่ใช่ข้อผิดพลาดเดียวที่สามารถทำได้ในขณะที่ใช้โมดูล นี่คือสถานการณ์ข้อผิดพลาดบางประการที่เราจำเป็นต้องเพิ่มตรรกะการตรวจสอบหากเราทำตามคำแนะนำและไม่ต้องการการเพิ่มระดับข้อผิดพลาด: สายเรียกเข้า - อาร์กิวเมนต์ที่ไม่คาดคิด สายเรียกเข้า - โมดูลอยู่ในสถานะไม่ถูกต้อง โทรภายนอก - ส่งคืนผลลัพธ์ที่ไม่คาดคิด การโทรภายนอก - ผลข้างเคียงที่ไม่คาดคิด (การป้อนสองครั้งในโมดูลการโทร, การแยกสถานะการอ้างอิงอื่น ๆ ) ฉันได้ลองคำนึงถึงเงื่อนไขเหล่านี้และเขียนโมดูลง่าย ๆ ด้วยวิธีการหนึ่ง (ขออภัยไม่ใช่ -C # guys): public sealed class Room { private readonly IDoorFactory _doorFactory; private bool …

1
Unums สามารถเลียนแบบศูนย์ลบของ IEEE ได้อย่างไร
ฉันกำลังอ่าน "จุดจบของข้อผิดพลาด - Unum Computing" โดย John Gustafson ( Youtube ) สิ่งที่ฉันยังไม่แน่ใจเกี่ยวกับคือกรณีที่จัดการใน IEEE โดยศูนย์ลบลงนามได้รับการจัดการกับ Unums ดังนั้นก่อนอื่น unums อนุญาตให้แสดงค่าที่แน่นอนบางอย่าง (คล้ายกับคะแนนลอย) และอนุญาตเพิ่มเติมเพื่อแสดงช่วงเวลาเปิดที่อยู่ระหว่างค่าที่แน่นอน (รวมถึงที่แน่นอน-exact และ∞) ดังนั้นจำนวนจริงทั้งหมดจะถูกแทนด้วยการสลับค่าที่แม่นยำและช่วงเวลาเปิด: -∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0), 0, (0, smallsubnormal), smallsubnormal, ... maxreal, (maxreal, ∞), ∞ ด้วยวิธีนี้ค่าพิเศษ (ตามธรรมเนียม IEEE) เช่นอันเดอร์โฟลว์และโอเวอร์โฟลว์เป็นเพียงช่วงเวลาเปิด ในคำอื่น ๆ : เงื่อนไขพิเศษก่อนหน้านี้ตอนนี้กลายเป็นกรณีปกติ IEEE's -∞สอดคล้องกับสหภาพของ …

2
pi หมายความว่าอย่างไรใน pseudocode อัลกอริทึม BFS นี้
ฉันมีรหัสเทียมต่อไปนี้สำหรับอัลกอริทึมการค้นหาแบบกว้าง BFS(G,s) 1 for each vertex u ∈ V(G) \ {s} 2 color[u] = white 3 d[u] = ∞ 4 π[u] = nil 5 color[s] = gray 6 d[s] = 0 7 π[s] = nil 8 Q = ∅ 9 Enqueue(Q,s) 10 while q ≠ ∅ 11 u = Dequeue(Q) …

3
REST จำกัด เฉพาะการควบคุมภาวะพร้อมกันในแง่ดีหรือไม่?
บริบท เนื่องจากความไร้สัญชาติของรูปแบบสถาปัตยกรรม REST ที่เกี่ยวข้องกับการร้องขอแต่ละรายการนั้นล้วน แต่อยู่คนเดียวเซิร์ฟเวอร์ชั้นนำที่จะไม่เก็บข้อมูลใด ๆ เกี่ยวกับลูกค้า ดังนั้นการควบคุมภาวะพร้อมกันในแง่ร้ายไม่เหมาะสมเพราะจะต้องมีการจัดเก็บเซิร์ฟเวอร์ที่ลูกค้าจะได้รับการล็อคทรัพยากร การควบคุมภาวะพร้อมกันในแง่ดีนั้นจะถูกนำมาใช้ด้วยความช่วยเหลือของEtagส่วนหัว (btw ตามที่ฉันถาม/programming/30080634/concurrency-in-a-rest-api ) ปัญหา ปัญหาหลักที่เกิดขึ้นกับกลไกการควบคุมภาวะพร้อมกันในแง่ดีคือคุณอนุญาตให้ลูกค้าทุกคนทำการดำเนินการใด ๆ ได้ตลอดเวลา และฉันต้องการหลีกเลี่ยงสิ่งนั้นโดยไม่ทำลายหลักการไร้สัญชาติของ REST ฉันหมายความว่าลูกค้าทั้งหมดไม่สามารถดำเนินการใด ๆ ได้ตลอดเวลา คำถาม ในใจของฉันมันเป็นไปได้ด้วยกลไกการควบคุมภาวะพร้อมกันแบบกึ่งมองโลกในแง่ดีเช่นนั้น: ลูกค้าสามารถขอโทเค็น สามารถสร้างโทเค็นเดียวเท่านั้นและมีระยะเวลาที่ จำกัด หากต้องการดำเนินการกับทรัพยากร (เช่นPOSTหรือPUT ) ไคลเอ็นต์จะต้องให้โทเค็นนี้เป็นส่วนหนึ่งของเนื้อความ (หรือส่วนหัว?) ของคำขอ ลูกค้าที่ไม่มีโทเค็นไม่สามารถทำการดำเนินการเหล่านี้ได้ มันคล้ายกันมากกับการควบคุมภาวะพร้อมกันในแง่ดียกเว้นว่ามีลูกค้าเพียงรายเดียวเท่านั้นที่สามารถทำการดำเนินการบางอย่าง (ลูกค้าที่ได้รับโทเค็น) ... ตรงข้ามกับ "ลูกค้าทุกคนสามารถดำเนินการทั้งหมดได้" กลไกนี้เข้ากันได้กับสไตล์สถาปัตยกรรม REST หรือไม่? มันทำลายข้อ จำกัด ใด ๆ หรือไม่? ฉันคิดว่าจะถาม SO แต่ดูเหมือนว่าจะเป็นคำถามระดับสูงที่เกี่ยวข้องกับการออกแบบซอฟต์แวร์

1
แบบอักษรของ Microsoft เช่น Impact ปลอดภัยที่จะใช้ในโครงการโอเพ่นซอร์สหรือไม่
ฉันสร้างโครงการโอเพนซอร์ซที่ต้องใช้แบบอักษร Impact.ttf จาก Microsoft ฉันมองไปรอบ ๆ แต่ไม่พบตัวเลือกใบอนุญาตที่ชัดเจนสำหรับโครงการ MIT แบบอักษรของ Microsoft (เช่น Impact.ttf) ขัดแย้งกับใบอนุญาต MIT หรือไม่ ถ้าใช่มีโอเพ่นซอร์สลิขสิทธิ์ที่แตกต่างกันซึ่งสามารถยอมรับฟอนต์ดังกล่าวได้หรือไม่?

2
เครื่องฮิปฮอปเสมือนจริง (HHVM) จะปรับปรุงประสิทธิภาพรันไทม์ของ PHP ในทางทฤษฎีได้อย่างไร
ในระดับสูง Facebook และอื่น ๆ ใช้เพื่อปรับปรุงประสิทธิภาพ PHP ด้วย Hip Hop Virtual Machine หรือไม่? มันแตกต่างจากการรันโค้ดโดยใช้เอ็นจิ้น zend อย่างไร เป็นเพราะประเภทมีการกำหนดทางเลือกกับแฮ็คที่อนุญาตให้ใช้เทคนิคการเพิ่มประสิทธิภาพล่วงหน้า? curiousity ของฉันเกิดขึ้นหลังจากที่ได้อ่านบทความนี้ยอมรับ HHVM

8
อะไรทำให้ C หยุดการคอมไพล์ / ตีความ / JIT'ed?
Java นั้นได้รับการยกย่องในเรื่องของการพกพาที่น่าทึ่งซึ่งฉันเข้าใจว่าเป็นเพราะ JVM คำถามของฉันคือสิ่งที่ห้ามไม่ให้ C ถูกคอมไพล์ / ตีความ / JIT'ed .. ถ้าเป็นเช่นนั้น C สามารถเขียนได้หนึ่งครั้งและทำให้มันทำงานบนอุปกรณ์ที่คุณเคยมี แต่นี่ไม่ใช่กลไกที่เป็นที่นิยมสำหรับการประมวลผลโปรแกรม C อะไรคือข้อเสียของการประมวลผล C ด้วยวิธีนี้และอะไรคือข้อดีของการประมวลผล Java ด้วยวิธีนี้และไม่ได้รวบรวมรหัสเครื่องนอกเหนือจากความสามารถในการพกพาของหลักสูตร?

4
ฉันจะให้วัตถุโต้ตอบและสื่อสารกันโดยไม่บังคับลำดับชั้นได้อย่างไร
ฉันหวังว่าการพูดจาโผงผางเหล่านี้จะทำให้คำถามของฉันชัดเจน - ฉันเข้าใจโดยสิ้นเชิงถ้าพวกเขาไม่ได้ดังนั้นแจ้งให้เราทราบว่าเป็นกรณีนี้และฉันจะพยายามทำให้ตัวเองชัดเจนขึ้น พบกับBoxPongเกมง่ายๆที่ฉันสร้างความคุ้นเคยกับการพัฒนาเกมเชิงวัตถุ ลากกล่องเพื่อควบคุมลูกบอลและรวบรวมสิ่งที่เป็นสีเหลือง การทำให้ BoxPong ช่วยฉันกำหนดคำถามพื้นฐาน: ฉันจะมีวัตถุที่มีปฏิสัมพันธ์ซึ่งกันและกันโดยไม่ต้อง "เป็น" กันได้อย่างไร กล่าวอีกนัยหนึ่งมีวิธีที่วัตถุจะไม่เป็นลำดับชั้น แต่แทนที่จะอยู่ร่วมกันหรือไม่ (ฉันจะเข้าไปดูรายละเอียดเพิ่มเติมด้านล่าง) ฉันสงสัยว่าปัญหาของวัตถุที่อยู่ร่วมกันนั้นเป็นปัญหาทั่วไปดังนั้นฉันหวังว่าจะมีวิธีการแก้ไขที่แน่นอน ฉันไม่ต้องการที่จะสร้างใหม่ล้อสี่เหลี่ยมดังนั้นฉันเดาคำตอบที่ดีที่สุดที่ฉันกำลังมองหาคือ "นี่เป็นรูปแบบการออกแบบที่ใช้กันทั่วไปในการแก้ปัญหาของคุณ" โดยเฉพาะอย่างยิ่งในเกมง่ายๆเช่น BoxPong เป็นที่ชัดเจนว่ามีหรือควรมีวัตถุจำนวนหนึ่งอยู่ร่วมกันในระดับเดียวกัน มีกล่องมีลูกบอลมีของสะสม ทั้งหมดที่ฉันสามารถแสดงในภาษาเชิงวัตถุแม้ว่า - หรือเพื่อให้ดูเหมือน - มีความสัมพันธ์HAS-A ที่เข้มงวด ทำผ่านตัวแปรสมาชิก ฉันไม่สามารถเริ่มballและปล่อยให้มันทำสิ่งนั้นฉันต้องการให้มันเป็นของวัตถุอื่นอย่างถาวร ฉันได้ตั้งค่าเพื่อให้วัตถุหลักของเกมมีกล่องและกล่องนั้นมีลูกบอลและมีตัวนับคะแนน แต่ละวัตถุยังมีupdate()วิธีการซึ่งจะคำนวณตำแหน่งทิศทาง ฯลฯ และฉันไปลักษณะที่คล้ายกันที่นั่นผมเรียกวิธีการอัพเดตเกมวัตถุหลักซึ่งเรียกวิธีการปรับปรุงของเด็กทุกคนของตนและพวกเขาในทางกลับกันเรียกวิธีการปรับปรุงทั้งหมดของพวกเขาเด็ก นี่เป็นวิธีเดียวที่ฉันสามารถเห็นการสร้างเกมเชิงวัตถุ แต่ฉันรู้สึกว่ามันไม่ใช่วิธีที่เหมาะ ท้ายที่สุดฉันจะไม่คิดว่าลูกบอลเป็นของกล่อง แต่อยู่ในระดับเดียวกันและมีปฏิสัมพันธ์กับมัน ฉันคิดว่าสามารถทำได้โดยการเปลี่ยนวัตถุเกมทั้งหมดเป็นตัวแปรสมาชิกของวัตถุเกมหลัก แต่ฉันไม่เห็นว่าการแก้ปัญหาอะไร ฉันหมายถึง ... ทิ้งความยุ่งเหยิงที่เห็นได้ชัดจะมีวิธีใดสำหรับลูกบอลและกล่องที่จะรู้จักซึ่งกันและกันนั่นคือการโต้ตอบ? นอกจากนี้ยังมีปัญหาของวัตถุที่ต้องการส่งผ่านข้อมูลระหว่างกัน ฉันมีประสบการณ์ค่อนข้างน้อยในการเขียนโค้ดสำหรับ SNES ซึ่งคุณสามารถเข้าถึง RAM ทั้งหมดได้ตลอดเวลา สมมติว่าคุณกำลังสร้างศัตรูที่กำหนดเองสำหรับSuper Mario …

3
การเขียนโปรแกรมการทำงานคืออะไรคำตอบให้กับค่าคงที่ประเภทตาม?
ฉันรู้ว่าแนวคิดของค่าคงที่มีอยู่ในกระบวนทัศน์การเขียนโปรแกรมหลายรายการ ตัวอย่างเช่นค่าคงที่ลูปมีความเกี่ยวข้องใน OO การเขียนโปรแกรมเชิงฟังก์ชันและโพรซีเดอร์ อย่างไรก็ตามชนิดหนึ่งที่มีประโยชน์มากที่พบใน OOP คือค่าคงที่ของข้อมูลประเภทใดประเภทหนึ่ง นี่คือสิ่งที่ฉันเรียกว่า "ค่าคงที่ประเภทตาม" ในชื่อ ตัวอย่างเช่นFractionประเภทอาจมีnumeratorและdenominatorด้วยค่าคงที่ gcd ของพวกเขาเสมอ 1 (เช่นเศษส่วนอยู่ในรูปแบบลดลง) ฉันสามารถรับประกันได้เพียงแค่มีการห่อหุ้มบางประเภทไม่ให้ข้อมูลถูกตั้งค่าอย่างอิสระ ในทางกลับกันฉันไม่ต้องตรวจสอบว่ามันลดลงหรือไม่ดังนั้นฉันจึงสามารถลดความซับซ้อนของอัลกอริทึมเช่นการตรวจสอบความเท่าเทียมกันได้ ในทางตรงกันข้ามถ้าฉันเพียงแค่ประกาศFractionประเภทโดยไม่ให้การรับประกันนี้ผ่านการห่อหุ้มฉันไม่สามารถเขียนฟังก์ชันใด ๆ ในประเภทนี้ได้อย่างปลอดภัยซึ่งคิดว่าเศษส่วนจะลดลงเพราะในอนาคตคนอื่นอาจเข้ามาและเพิ่มวิธี จากการได้รับเศษส่วนที่ไม่ลดลง โดยทั่วไปการขาดค่าคงที่ประเภทนี้อาจนำไปสู่: อัลกอริทึมที่ซับซ้อนมากขึ้นเนื่องจากต้องมีการตรวจสอบ / รับประกันล่วงหน้าในหลาย ๆ สถานที่ การละเมิด DRY เนื่องจากเงื่อนไขล่วงหน้าซ้ำ ๆ เหล่านี้แสดงถึงความรู้พื้นฐานที่เหมือนกัน (ที่ค่าคงที่ควรเป็นจริง) มีการบังคับใช้เงื่อนไขล่วงหน้าผ่านความล้มเหลวรันไทม์มากกว่าการรวบรวมเวลารับประกัน ดังนั้นคำถามของฉันคือสิ่งที่การเขียนโปรแกรมการทำงานตอบสนองค่าคงที่ประเภทนี้ มีวิธีการทำงานที่เป็นไปตามสำนึกของการบรรลุสิ่งเดียวกันมากขึ้นหรือน้อยลง? หรือมีลักษณะบางอย่างของการเขียนโปรแกรมฟังก์ชั่นซึ่งทำให้ประโยชน์ที่เกี่ยวข้องน้อยลง?

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