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

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

2
เหตุใด C # ช่วยให้คุณสามารถแทนที่ async ได้
ใน C # เมื่อคุณแทนที่เมธอดจะอนุญาตให้ทำการแทนที่ async เมื่อไม่ได้ใช้วิธีดั้งเดิม ดูเหมือนว่ารูปแบบไม่ดี ตัวอย่างที่นำฉันมาสู่สิ่งนี้คือสิ่งนี้ - ฉันถูกนำตัวเข้ามาเพื่อช่วยแก้ไขปัญหาการทดสอบโหลด มีผู้ใช้งานพร้อมกันประมาณ 500 คนกระบวนการเข้าสู่ระบบจะแยกย่อยในการวนรอบการเปลี่ยนเส้นทาง IIS กำลังบันทึกข้อยกเว้นด้วยข้อความ "โมดูลหรือตัวจัดการแบบอะซิงโครนัสเสร็จสมบูรณ์ในขณะที่การดำเนินการแบบอะซิงโครนัสยังคงค้างอยู่" การค้นหาบางอย่างทำให้ฉันคิดว่ามีใครบางคนกำลังดูถูกเหยียดหยามasync voidแต่การค้นหาอย่างรวดเร็วของฉันผ่านทางแหล่งข้อมูลไม่พบสิ่งใดเลย น่าเศร้าที่ฉันกำลังค้นหา 'async \ svoid' (การค้นหา regex) เมื่อฉันควรมองหาบางสิ่งเพิ่มเติมเช่น 'async \ s [^ T]' (สมมติว่า Task ไม่ผ่านการรับรอง ... คุณเข้าใจแล้ว) สิ่งที่ฉันพบภายหลังคือasync override void onActionExecuting(...ตัวควบคุมพื้นฐาน เห็นได้ชัดว่าจะต้องมีปัญหาและมันก็เป็น แก้ไขปัญหาที่เกิดขึ้น (ทำให้ซิงโครนัสสักครู่) แก้ไขปัญหา กลับไปที่คำถาม: ทำไมโอทำไมคุณสามารถทำเครื่องหมาย override เป็น async เมื่อรหัสการโทรไม่สามารถรอได้?
16 c#  async 

4
อะไรคือข้อเสียของการจับคู่ตัวบ่งชี้สำคัญกับ enums?
ฉันคิดว่าจะสร้างประเภทที่กำหนดเองสำหรับตัวระบุเช่นนี้: public enum CustomerId : int { /* intentionally empty */ } public enum OrderId : int { } public enum ProductId : int { } แรงจูงใจหลักของฉันในการทำเช่นนี้คือเพื่อป้องกันข้อผิดพลาดชนิดที่คุณบังเอิญส่งคำสั่ง orderItemId ไปยังฟังก์ชันที่คาดว่าจะมี orderItemDetailId ดูเหมือนว่า enums ทำงานได้อย่างราบรื่นกับทุกสิ่งที่ฉันต้องการใช้ในเว็บแอปพลิเคชัน. NET ทั่วไป: การกำหนดเส้นทาง MVC ทำงานได้ดี การทำให้เป็นอันดับ JSON ทำงานได้ดี ทุก ๆ ออมที่ฉันสามารถคิดได้ผลดี ดังนั้นตอนนี้ฉันสงสัยว่า "ทำไมฉันไม่ควรทำเช่นนี้?" นี่เป็นข้อเสียอย่างเดียวที่ฉันนึกได้: มันอาจสร้างความสับสนให้นักพัฒนาอื่น ๆ มันแนะนำความไม่สอดคล้องในระบบของคุณหากคุณมีตัวระบุที่ไม่ครบถ้วน …
16 c# 

1
ทำไม ES6 ถึงไม่มีลูกศรแบบบางฟังก์ชั่น?
ES6 เพิ่มฟังก์ชั่นลูกศรไขมัน ( =>) ซึ่งมีสองความแตกต่างที่สำคัญจากฟังก์ชั่นปกติ: ไวยากรณ์ที่สั้นกว่า (รวมถึงการส่งคืนโดยนัยถ้าคุณใช้เนื้อความที่เป็นนิพจน์เดียว) สืบทอดthisมาจากขอบเขตโดยรอบ สิ่งเหล่านี้เป็นคุณสมบัติที่มีประโยชน์มาก แต่ดูเหมือนว่าฉันจะแยกจากคุณค่าและแอพพลิเคชั่นของพวกเขาโดยสิ้นเชิง - บางครั้งฉันต้องการอย่างใดอย่างหนึ่งหรืออย่างอื่นหรือทั้งสองอย่างหรือทั้งสองอย่าง ดูเหมือนว่าแปลกที่ถ้าฉันต้องการใช้ฟังก์ชั่นไวยากรณ์สั้นฉันต้องใช้this-modifying พฤติกรรม และในทางกลับกัน. ฉันไม่เห็นว่าทำไมความสามารถทั้งสองนี้จึงถูกนำมาใช้เป็นส่วนเสริมของภาษา ถ้าฉันต้องการใช้ฟังก์ชั่นซินแทกซ์สั้น ๆ สำหรับผลตอบแทนและความกะทัดรัดโดยปริยาย (ในบางบริบทที่เต็มfunction (..) { return ...}จะอ่านได้น้อยกว่าเล็กน้อย) แต่ฉันต้องการใช้thisในฟังก์ชั่นของฉันเพื่ออ้างถึงบริบทการโทร? ไม่มีวิธีทำเช่นนี้ CoffeeScript มีทั้งฟังก์ชั่น->และ=>สไตล์และดูเหมือนว่า ES6 ยืม=>สไตล์จากที่นั่น ดังนั้นคำถามของฉันคือทำไม ES6 จึงไม่ยืม->สไตล์นี้ด้วย?
16 javascript  es6 

6
วิธีการของการดีบักรหัส (สถานการณ์ฝันร้าย)
ฉันมักจะมอบหมายงานให้ดีบั๊กแอปพลิเคชันในงานของฉัน มันเป็นแอปพลิเคชั่น BI ที่เราปรับใช้กับธุรกิจซึ่งรวมถึงสภาพแวดล้อมการทดสอบและสภาพแวดล้อมการผลิต ฉันสงสัยว่ามีแอพ / เครื่องมือ / วิธีการที่ผู้คนสามารถแนะนำได้หรือไม่ตามข้อ จำกัด เหล่านี้: ตัวดีบักเกอร์ไม่สามารถใช้ได้บนไซต์ของลูกค้าหรือในเครื่องเนื่องจากซอฟต์แวร์จะขึ้นอยู่กับแอปพลิเคชันของบุคคลที่สามที่เรากำหนดเองซึ่งเราไม่มีสภาพแวดล้อมการทดสอบ (แก้ไข: เพื่อความยุติธรรมมันเป็นไปได้ที่จะแก้จุดบกพร่องในเครื่องในบางกรณีถ้าเราใช้อะไรนอกจากรหัสหลักรหัสที่มีปัญหาส่วนใหญ่อยู่ใน dll ที่ห่อหุ้มการสื่อสารเฉพาะบุคคลที่สาม: ซ็อกเก็ตกระบวนการท่อสบู่เรียก ตรรกะที่กำหนดเองที่เปลี่ยนแปลงพฤติกรรมของรหัสหลักโดยทั่วไปในระหว่างการนำไปใช้งานหรือปรับปรุงสำหรับลูกค้า แทบจะไม่มีการบันทึกในแอพของเรา ไม่มีการทดสอบหน่วย การควบคุมเวอร์ชันมีโซลูชันเต็มรูปแบบเพียง 1 เวอร์ชันเท่านั้น (โดยใช้แหล่งที่มาที่ปลอดภัย 2005) ดังนั้นจึงเป็นไปไม่ได้ที่จะได้รับโซลูชั่นรุ่นก่อนหน้าทั้งหมด แต่เพียงไฟล์เดียว (ถ้าไม่มีใครรู้วิธีแก้ปัญหานี้) ไม่สามารถทำซ้ำภายในเครื่องบ่อยครั้งไม่สามารถทำซ้ำในสภาพแวดล้อมการทดสอบ (มีโอกาสสูงที่การทดสอบและการผลิตไม่เป็นรุ่นเดียวกัน) มีโอกาสสูงที่เวอร์ชันที่ไคลเอ็นต์กำลังใช้จะแตกต่างจากแหล่งที่ปลอดภัย นี่เป็นเพราะแต่ละไฟล์ถูกอัพเดตซึ่งมีโลจิคัลที่กำหนดเองแบบฝังสำหรับไคลเอ็นต์เฉพาะนั้น บ่อยครั้งที่สิ่งที่เกิดขึ้นคือมีการอัพเดตไบนารีซึ่งต้องการการเปลี่ยนแปลงไบนารีอื่น ๆ หลายอย่าง แต่เมื่อการคอมมิชชันเสร็จสิ้นไม่มีใครมีบันทึกหรือความรู้เกี่ยวกับเรื่องนี้ ข้อผิดพลาดทั่วไปที่ฉันเห็นคือ 'ไม่พบฟังก์ชัน / วิธีการ' หรือ 'การเรียกใช้เมธอดมีการระบุพารามิเตอร์มากเกินไป / น้อยเกินไป' บนสภาพแวดล้อมของไคลเอ็นต์ นี่คือโซลูชัน. net VB ไม่สามารถติดตั้งซอฟต์แวร์ใด ๆ …
16 .net  vb.net  n-tier 

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

2
จะหาชื่อที่สะกดยากได้อย่างไร?
นี่คือคำถามที่ฉันเชื่อว่าสามารถแก้ไขได้ด้วย data mining และอัลกอริธึมที่ซับซ้อน แต่ฉันก็ไม่รู้เหมือนกัน ตัวชี้ใด ๆ เกี่ยวกับแหล่งข้อมูลที่จะใช้และอัลกอริทึมที่จะนำไปใช้ใดบ้างยินดีต้อนรับ แบ็คกราวน์:ฉันเป็นชาวโรมาเนียน - ฮังการีที่คาดหวังว่าจะมีลูกด้วยภาษาโปแลนด์ - ยูเครนและไม่ได้ตั้งความคิดของเราในประเทศที่เราต้องการปักหลัก อย่างที่คุณคาดหวังการเลือกชื่อที่ให้นั้นมีความสำคัญที่สุดและมีการถกเถียงกันอย่างเผ็ดร้อน จากด้านข้างของฉันฉันยังคงมีบาดแผลจากความยุ่งยากทั้งหมดที่ฉันต้องทำเมื่อใครบางคนจะสะกดชื่อของฉันเมื่อฉันย้ายจากประเทศหนึ่งไปยังอีก ตัวอย่างเช่นหากคุณถูกเรียกว่า "เอเดรียน" คุณจะได้รับพรในโรมาเนียเพียงเพื่อจะพบว่าคุณได้รับ "เอเดรียอี " เป็นเอกสารภาษาฝรั่งเศสอย่างเป็นทางการ ดังนั้นความต้องการเพียงอย่างเดียวของฉันคือการทำให้ชื่อของทารกถูกสะกดผิดในบางประเทศในยุโรป คำแถลงปัญหา:เมื่อมีกลุ่มประเทศเช่นฝรั่งเศสเยอรมนีสวีเดนโปแลนด์และโรมาเนียค้นหารายชื่อที่ให้ไว้ซึ่งเมื่อออกเสียงอย่างถูกต้องจะไม่ถูกสะกดโดยคนในท้องถิ่น อีกอย่างเป็นทางการ: Let P (c, n)เป็นฟังก์ชั่นที่ให้ผลตอบแทนน่าจะเป็นของชื่อnถูกสะกดผิดในประเทศค ได้รับCชุดของประเทศและ p₀ความน่าจะเป็นหาNชุดของชื่อที่กำหนดเช่นว่า สำหรับn ∈ Nและc ∈ C ทั้งหมด , p (c, n) <p₀ ความคิดเริ่มต้น : ปัญหาหลักคือวิธีการใช้P (c, n) เราสามารถลองประมาณด้วยฮิวริสติก เห็นได้ชัดว่าชื่อนั้นสะกดผิดในสองกรณี: มันใช้น้อยในประเทศนั้น มันคล้ายกับชื่ออื่นที่ไม่ได้ใช้เพียงเล็กน้อยในประเทศนั้น …

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

2
ข้อมูลที่บรรจุใน UDP ควรมี CRC หรือไม่
สำหรับ บริษัท ที่ฉันเคยทำงานให้ฉันต้องใช้ตัวรับสัญญาณซ็อกเก็ตที่ส่วนใหญ่ใช้ข้อมูลในรูปแบบ UDP ผ่านการเชื่อมต่อท้องถิ่นจากฮาร์ดแวร์เซ็นเซอร์บางตัว ข้อมูลที่เป็นปัญหาคือแพ็คเก็ต UDP ที่มีรูปแบบที่ดี แต่ที่น่าสนใจปริมาณข้อมูลนั้นจะสิ้นสุดลงด้วยการตรวจสอบ CRC16 ที่เกิดขึ้นโดยใช้ข้อมูลที่เหลือ ฉันใช้การตรวจสอบในตอนท้ายของฉันตามข้อกำหนด แต่ฉันมักจะสงสัยว่านี่เป็นสิ่งที่จำเป็น ท้ายที่สุดแล้วโปรโตคอล UDP เองนั้นไม่มีซีอาร์ซีแบบ 16 บิตหรือไม่? ดังนั้นแม้ว่าแพ็กเก็ต UDP อาจสูญหายหรือล้าสมัยได้ แต่ฉันรู้สึกว่ามันไม่สามารถเสียหายได้หากไม่ได้รับการละทิ้งโดยฮาร์ดแวร์เครือข่ายก่อนที่จะถึงกระบวนการของระบบปฏิบัติการ หรือมีกรณีใช้พิเศษบางอย่างที่ฉันขาดไป เป็นมูลค่าเพิ่มที่ฉันทำงานในอุตสาหกรรมการป้องกันประเทศซึ่งในขณะที่ฉันแน่ใจว่าคุณสามารถจินตนาการชอบที่จะชัดเจนเกี่ยวกับทุกอย่างเช่นนี้ดังนั้นฉันสงสัยว่ามันเป็นเพียงกรณีของ "ความปลอดภัย OCD" ..

2
การกำหนดเวอร์ชันแบบ Semantic อนุญาตให้มี 4 คอมโพเนนต์ในหมายเลขเวอร์ชันหรือไม่
ตัวอย่างทั้งหมดของการกำหนดเวอร์ชันทางความหมายที่ฉันเห็นแสดงส่วนประกอบที่ใช้งานอยู่ 3 รายการ ไม่เกิน 2 จุดอักขระ ที่$DAYJOBเราใช้ 4 องค์ประกอบในหมายเลขรุ่นของเรา: 5.0.1.2 การกำหนดเวอร์ชันแบบ Semantic อนุญาตสำหรับสิ่งนี้หรือไม่ และในฐานะที่เป็นคำถามที่อยู่ในระดับที่สูงขึ้นและมีเหตุผลมากขึ้น ฉันเริ่มคิดว่าอาจเป็นความคิดที่ดีที่จะบังคับใช้การกำหนดเวอร์ชันแบบ semantic แต่ท้ายที่สุดเอนทิตีเช่น PCI จะแทนที่ ฉันควรจะชี้แจงความคิดเห็น PCI ของฉัน ปัญหาคือการตรวจสอบและมีผลต่อต้นทุนเมื่อองค์ประกอบหลักและรองเปลี่ยนไม่จำเป็นต้องเป็นคุณสมบัติใหม่จริง ตัวอย่างเช่นหากมีการแนะนำคุณลักษณะที่เกี่ยวข้องกับการชำระเงินเราจะชนหมายเลขรองสำหรับ PCI แต่ถ้าเราเพิ่มฟีเจอร์ใหม่ที่เกี่ยวข้องกับสิ่งที่อยู่ใน gui มันก็ไม่ได้ เฉพาะการแก้ไขแพทช์ ดังนั้นในกรณีนี้เราไม่ได้พูดจริง ๆ ในฐานะผู้พัฒนาเนื่องจากมีคนอื่นทำการตัดสินใจเหล่านั้น

1
การรักษาความปลอดภัย REST API: HMAC / การแฮ็กคีย์กับ JWT
ฉันเพิ่งอ่านบทความนี้ที่มีอายุไม่กี่ปี แต่อธิบายวิธีที่ชาญฉลาดในการรักษา REST API ของคุณ เป็นหลัก: ลูกค้าแต่ละรายมีคู่คีย์สาธารณะ / ส่วนตัวที่ไม่ซ้ำกัน เฉพาะลูกค้าและเซิร์ฟเวอร์เท่านั้นที่รู้รหัสส่วนตัว มันไม่เคยถูกส่งผ่านสาย ด้วยการร้องขอแต่ละครั้งไคลเอนต์ใช้หลายอินพุต (การร้องขอทั้งหมดเองการประทับเวลาปัจจุบันและคีย์ส่วนตัว) และเรียกใช้ผ่านฟังก์ชัน HMAC เพื่อสร้างแฮชของการร้องขอ จากนั้นไคลเอ็นต์จะส่งคำขอปกติ (ซึ่งมีรหัสสาธารณะ) และแฮชไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ค้นหาคีย์ส่วนตัวของลูกค้า (ตามคีย์สาธารณะที่ให้ไว้) และทำการตรวจสอบเวลาบางอย่าง (ที่ยอมรับกันโดยทั่วไปว่าฉันไม่เข้าใจ) ที่ยืนยันว่าคำขอไม่ตกเป็นเหยื่อของการโจมตีซ้ำ ถ้าทุกอย่างเรียบร้อยแล้วเซิร์ฟเวอร์จะใช้ไพรเวตคีย์และฟังก์ชั่น HMAC เดียวกันเพื่อสร้างการแฮชของคำขอ เซิร์ฟเวอร์จะเปรียบเทียบแฮชทั้งสอง (อันที่ส่งโดยลูกค้าเช่นเดียวกับที่สร้างขึ้น); หากตรงกันจะมีการตรวจสอบความถูกต้องและอนุญาตให้ดำเนินการต่อได้ จากนั้นฉันสะดุดJWTซึ่งฟังดูคล้ายกันมาก อย่างไรก็ตามบทความแรกไม่ได้พูดถึง JWT เลยและฉันก็สงสัยว่า JWT นั้นแตกต่างจากวิธีแก้ปัญหาข้างต้นหรือไม่และถ้าเป็นเช่นนั้น

5
วิธีสร้างประเภทข้อมูลสำหรับสิ่งที่แสดงถึงตัวมันเองหรืออีกสองอย่าง
พื้นหลัง นี่คือปัญหาที่เกิดขึ้นจริงผมทำงานเกี่ยวกับ: ฉันต้องการวิธีที่จะเป็นตัวแทนของบัตรในเกมบัตรเวทมนตร์: กลุ่ม การ์ดส่วนใหญ่ในเกมเป็นการ์ดที่ดูธรรมดา แต่บางการ์ดก็แบ่งออกเป็นสองส่วนแต่ละการ์ดมีชื่อเป็นของตัวเอง ครึ่งหนึ่งของการ์ดสองส่วนเหล่านี้ถือว่าเป็นการ์ด ดังนั้นเพื่อความชัดเจนฉันจะใช้Cardเพื่ออ้างถึงสิ่งที่เป็นการ์ดปกติหรือครึ่งหนึ่งของการ์ดสองส่วน (ในคำอื่น ๆ บางสิ่งที่มีเพียงชื่อเดียว) ดังนั้นเราจึงมีฐานเป็นการ์ด วัตถุประสงค์ของวัตถุเหล่านี้เป็นเพียงการเก็บคุณสมบัติของการ์ดเท่านั้น พวกเขาไม่ได้ทำอะไรด้วยตนเอง interface Card { String name(); String text(); // etc } มีคลาสย่อยสองชั้นCardซึ่งฉันกำลังเรียกPartialCard(ครึ่งหนึ่งของการ์ดสองส่วน) และWholeCard(การ์ดปกติ) PartialCardมีสองวิธีเพิ่มเติม: และPartialCard otherPart()boolean isFirstPart() สภาผู้แทนราษฎร ถ้าฉันมีดาดฟ้ามันควรจะประกอบด้วยWholeCards ไม่ใช่Cards อย่างที่Cardควรจะเป็นPartialCardและนั่นก็ไม่สมเหตุสมผล ดังนั้นฉันต้องการวัตถุที่แสดงถึง "บัตรทางกายภาพ" นั่นคือสิ่งที่สามารถเป็นตัวแทนหนึ่งWholeCardหรือสองPartialCards ฉันไม่แน่นอนโทรประเภทนี้Representativeและจะมีวิธีการที่Card จะให้ข้อมูลที่เกือบจะไม่มีโดยตรงบนบัตร (s) มันหมายถึงมันเท่านั้นที่จะชี้ไปที่มัน / พวกเขา ตอนนี้คิดที่ยอดเยี่ยม / บ้า / ใบ้ของฉัน (คุณตัดสินใจ) เป็นที่สืบทอด …

1
ภาษาโปรแกรมใดที่ใช้เครื่องหมายเปอร์เซ็นต์ (%) เพื่อหมายถึงโมดูโล / ส่วนที่เหลือมา
ภาษาโปรแกรมใดที่ใช้เครื่องหมายเปอร์เซ็นต์ (%) เพื่อหมายถึงโมดูโล / ส่วนที่เหลือมา โพสต์ก่อนหน้า1 นี้อธิบายว่ามีการเลือกสัญลักษณ์% เนื่องจากมีเครื่องหมายสแลชที่ชาญฉลาดสำหรับการดำเนินการที่เกี่ยวข้องกับการหาร นอกจากนี้ยังกล่าวถึงอิทธิพลของการใช้สัญลักษณ์ C อย่างไรก็ตามฉันไม่แน่ใจว่ามันมีต้นกำเนิดใน C. ภาษาการเขียนโปรแกรม B เป็นตัวตั้งต้นของ C และฉันพบคู่มือผู้ใช้สำหรับ B (PDF, หน้า 12) ที่ระบุว่า: ตัวดำเนินการ% แสดงโมดูโล หากตัวถูกดำเนินการทั้งคู่เป็นบวกผลลัพธ์จะถูกต้อง มันไม่ได้กำหนดไว้เป็นอย่างอื่น คู่มือผู้ใช้นั้นลงวันที่ 1972 แม้ว่าประมาณเมื่อ C ปรากฏ มันทำให้ในทางทฤษฎีมีความเป็นไปได้ที่จะมีต้นกำเนิดใน C แต่กลับไปที่ B. แล้วฉันยังไม่สามารถหาข้อมูลจำเพาะสำหรับภาษาอื่น ๆ ก่อนหน้านี้เพื่อแสดงการใช้สัญลักษณ์% ซึ่งฉันเชื่อว่าคำถามนี้ไม่ซ้ำกัน: คำถามนั้นถามว่าทำไมการดำเนินการแบบโมดูโลจึงเป็นพื้นฐานฉันถามเมื่อสัญลักษณ์โดยเฉพาะปรากฏว่าหมายถึงโมดูโล่

5
C ++: ชั้นเรียนควรเป็นเจ้าของหรือสังเกตการอ้างอิงของมัน?
บอกว่าผมได้เรียนFoobarที่ใช้ (ขึ้นอยู่กับ) Widgetระดับ ในวันเฒ่าที่ดีWidgetwolud จะถูกประกาศให้เป็นสนามในFoobarหรืออาจจะเป็นตัวชี้ที่ฉลาดถ้าต้องการพฤติกรรม polymorphic และมันจะเริ่มต้นได้ใน constructor: class Foobar { Widget widget; public: Foobar() : widget(blah blah blah) {} // or std::unique_ptr<Widget> widget; public: Foobar() : widget(std::make_unique<Widget>(blah blah blah)) {} (…) }; และเราจะพร้อมทุกอย่างให้เรียบร้อย น่าเสียดายที่วันนี้เด็ก ๆ จาวาจะหัวเราะเยาะเราเมื่อพวกเขาเห็นมันและอย่างถูกต้องตามที่คู่รักFoobarและWidgetร่วมกัน วิธีแก้ปัญหานั้นง่ายมาก: ใช้การฉีดพึ่งพาเพื่อสร้างการพึ่งพาจากFoobarชั้นเรียน แต่แล้ว C ++ ก็บังคับให้เราคิดถึงการเป็นเจ้าของการพึ่งพา การแก้ปัญหาทั้งสามอยู่ในใจ: ตัวชี้ที่ไม่ซ้ำ class Foobar { std::unique_ptr<Widget> widget; …

3
เป็นความคิดที่ดีที่จะเพิ่ม ViewModel เหมือนกับ Model
ฉันมีเลเยอร์ต่อไปนี้ในโซลูชันของฉัน: App.Domain App.Service App.Core (บางทีคุณอาจเรียกแอปนี้ว่า DataLayer) App.Web รูปแบบการออกแบบซอฟต์แวร์ไม่ใช่คำถามของฉันฉันมี Model ต่อไปนี้ Domain public class Foo { public int Id {get;set;} public int Name {get;set;} public int Value {get;set;} } ฉันต้องการใช้โมเดลนี้ในมุมมอง (ตัวอย่างเช่นหน้าแรก) และฉันต้องการใช้Id, Name & Valueดังนั้นหากฉันต้องการสร้าง ViewModel ฉันจะเพิ่มสิ่งต่อไปนี้: public class FooViewModel { public int Id {get;set;} public int Name {get;set;} public int …

1
HTTP โปรเกรสซีฟดาวน์โหลดทางเลือกที่ทำงานได้กับ HLS / DASH / RTMP เพื่อให้บริการวิดีโอสดหรือไม่
ฉันกำลังทำงานบนเว็บไซต์ที่ต้องการส่งกระแสข้อมูลวิดีโอสดให้กับผู้ใช้และดังนั้นฉันต้องรับทราบเกี่ยวกับสถานะขออภัยของเทคโนโลยีการสตรีมวิดีโอบนเบราว์เซอร์ในปัจจุบัน โซลูชันยอดนิยมสำหรับสตรีมมิงแบบสดในปัจจุบันทั้งหมดล้วนมีปัญหาด้านความเข้ากันได้ RTMP ต้อง Flash, HLS เป็นเพียงการสนับสนุน natively บน Safari และ Chrome สำหรับ Android, DASHไม่ได้กำเนิดสนับสนุนทุกที่และใช้dash.jsต้องใช้สื่อที่มาส่วนขยายซึ่งยังไม่ได้รับการสนับสนุนอย่างกว้างขวาง สิ่งนี้นำไปสู่คำถามที่ฉันดูเหมือนชัดเจน: เป็นไปได้ไหมที่จะใช้งานง่าย ดาวน์โหลดแบบโปรเกรสซีฟเป็นทางเลือกแทนโปรโตคอลเช่น HLS, RTMP และ DASH ที่ต้องการการสนับสนุนเบราว์เซอร์หรือปลั๊กอิน แนวคิดของการใช้การดาวน์โหลดแบบก้าวหน้าเพื่อสตรีมสื่อสดไม่เคยปรากฏมาก่อน คนทำไปแล้วสำหรับเสียง เครื่องมือเช่นliveCasterช่วยให้คุณสามารถสตรีมเสียง MP3 สดผ่านการตอบสนอง HTTP ก้าวหน้าเดียวโดยไม่จำเป็นต้องเป็นไฟล์ MP3 ที่บันทึกไว้ล่วงหน้าและห้องสมุดเช่น AmplitudeJS ได้หายไปจากทางของพวกเขาที่จะเพิ่มคุณสมบัติที่เกี่ยวข้องกับชนิดของเสียงสตรีมมิ่งที่มีชีวิตนี้ แม้ว่าฉันไม่เคยเห็นอินสแตนซ์ใด ๆ ของเทคนิคนี้ที่ใช้งานในวิดีโอแทนและฉันไม่สามารถบอกได้ว่าทำไม ดูเหมือนว่ามันจะลบเลเยอร์ของปัญหาด้านความเข้ากันได้กับเบราว์เซอร์ด้านที่ยุ่งและยากสำหรับการแลกเปลี่ยนที่ค่อนข้างน้อย (และความเข้ากันได้ยังคงเป็นปัญหาใหญ่สำหรับการสตรีมสดแม้ในกรณีที่ผู้เชี่ยวชาญทำเช่นนั้นถ้าฉันลองดูวิดีโอสดบน BBC ของ iPlayer ใน Firefox มันแค่ให้ข้อความข้อผิดพลาดบอกให้ฉันติดตั้ง Flash) แต่ก็ไม่มีใครใช้ เทคนิคนี้และฉันไม่เคยเห็นใครมาด้วยซ้ำพูดถึงความคิดนอกเหนือจากฉัน ทำไม? มีข้อ …

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