การสร้างโครงการใน VisualStudio ปัญหาคู่ที่ใกล้ที่สุด

ฉันอยากเข้าทีม C++ ในที่ทำงาน หน้าที่ของพวกเขาคือเขียน CGI ด้วย C++ (ส่วนใหญ่แต่ไม่จำกัดเพียง) ฉันรู้ภาษา C++ พื้นฐาน เมื่ออ่านรายการในคู่มือหนังสือ C++ คำถามคือฉันมีหนังสือสามเล่มจากเพื่อน (จริงๆ แล้วฉันมีเล่มแรก)

  • ภาษาการเขียนโปรแกรม C++ - Bjarne Stroustrup - สำหรับการอ้างอิง
  • เทมเพลต C++ คู่มือฉบับสมบูรณ์- เดวิด แวนเดวอร์ด/นิโคลัส เอ็ม. โจซุตติส
  • การออกแบบ C++ สมัยใหม่ - Andrei Alexandrescu

    ฉันอยากทราบว่ามีโครงการหรือแนวคิดใดบ้างที่คุณสามารถบอกฉันได้ว่าฉันสามารถนำไปใช้เพื่อให้ฉันรู้สึกดีขึ้นได้

    การตั้งค่าที่ฉันต้องการ ฉันมี Macbook และเครื่องเซิร์ฟเวอร์ Ubuntu dev เส็งเคร็งส่วนตัว ฉันสามารถติดตั้งระบบปฏิบัติการ bootcamp ใดก็ได้หากจำเป็น

    คุณช่วยบอกเคล็ดลับในการเริ่มต้นเขียน CGI (หรือบทช่วยสอนอื่นๆ) ให้ฉันได้ไหม

ขอบคุณมาก.

5 คำตอบ

ให้ฉันเพิ่มเนื้อหาการอ่านลงในรายการของคุณ C++ FAQ Lite เป็นที่สุด ทรัพยากรที่ดีที่สุดเพื่อเรียนรู้อินพุตและเอาต์พุต C++ สิ่งนี้มีประโยชน์ทั้งเป็นข้อมูลอ้างอิงสำหรับผู้จับเวลารุ่นเก่าและเป็นการแนะนำสำหรับมือใหม่ ฉันขอแนะนำให้อ่านให้มากที่สุดและลองใช้ตัวอย่างเล็กๆ น้อยๆ ที่สาธิตคุณลักษณะแต่ละอย่างที่กล่าวถึงก่อนที่จะเข้าร่วมโครงการจริง

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

สำหรับสภาพแวดล้อมการพัฒนา ฉันพบว่า Ubuntu เป็นวิธีการตั้งค่าที่ง่ายที่สุด เนื่องจากการตั้งค่าเกือบทั้งหมดสามารถสรุปเป็นซีรีส์ได้ คำสั่ง apt-getติดตั้ง. ตัวอย่างเช่น:

Sudo apt-get ติดตั้ง build-essential

ไม่ว่าคุณจะใช้ OS ใดก็ตาม คุณอาจต้องการสร้างและรันโค้ดของคุณในสภาพแวดล้อมที่คาดเดาได้และทำซ้ำได้ ฉันควรจะชี้ให้เห็นว่า สิ่งแวดล้อมสิ่งที่คุณพัฒนาไม่จำเป็นต้องเหมือนกับที่คุณสร้างและรันโค้ดจริงๆ ตัวอย่างเช่น คุณสามารถเขียนโค้ดทั้งหมดของคุณใน Mac OS X แต่สร้างและรันโค้ดของคุณในคอนเทนเนอร์ Docker ที่รันอินสแตนซ์ Ubuntu ด้วยการกำหนดค่าบิวด์/รันที่ตั้งไว้ล่วงหน้าและทำซ้ำได้

ในแง่ของทรัพยากรสำหรับการนำ CGI ไปใช้ในภาษา C++ (และสำหรับโค้ดอื่นๆ) โปรดตรวจสอบหน้านี้

วิธีที่ดีที่สุดในการพัฒนา C++ ให้ดียิ่งขึ้นคือการเขียนโค้ด C++ เริ่มต้นด้วย raytracer แบบธรรมดาโดยไม่ต้องพึ่งพาภายนอก (เพียงเขียนเอาต์พุตไปยังไฟล์ PPM)

  • ฉันคิดว่านี่เป็นปัญหาที่น่าสนใจทีเดียว และจะช่วยให้คุณเริ่มต้นกับแกนกลางของภาษาได้
  • การไม่มีการพึ่งพาจะช่วยลดสิ่งรบกวนสมาธิด้วยสำนวนห้องสมุดของบุคคลที่สามที่อาจซับซ้อนซึ่งคุณยังไม่สามารถชื่นชมได้ และสิ่งที่น่ารำคาญ เช่น ห้องสมุดและลิงก์ นอกจากนี้คุณยังจะมีนิสัยแปลกๆ เกี่ยวกับ C++ น้อยลงอีกด้วย

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

ล้างทำซ้ำ

ตอบคำถามชื่อ :) สมมติว่า C ++ 03

และใช่ คุณมีผู้วิจารณ์ที่ดีคอยอยู่เคียงข้าง หากคุณต้องการเรียนรู้ C++ ที่ดี บันทึกสำเนาที่เกี่ยวข้อง ไฟล์มาตรฐาน(open-std.org)

อัปเดตล่าสุด: 31/10/2558

ขั้นแรก เรามาเชื่อมต่อไลบรารีคลาสที่คอมไพล์ในหัวข้อก่อนหน้ากันก่อน เมื่อต้องการทำเช่นนี้ ในโครงการ BankApplication หลัก ให้คลิกที่รายการอ้างอิง คลิกขวาเมาส์ และในเมนูที่ปรากฏขึ้น ให้เลือก เพิ่มการอ้างอิง...:

จากนั้นในหน้าต่างที่ปรากฏขึ้น ให้ตรวจสอบรายการ BankLibrary ซึ่งจะเป็นตัวแทนของไลบรารีคลาสของเรา และคลิกตกลง

ตอนนี้เรามาเปลี่ยนไฟล์ Program.cs ในโครงการหลักดังนี้:

การใช้ระบบ; ใช้ BankLibrary; เนมสเปซ BankApplication (โปรแกรมคลาส ( โมฆะคงที่หลัก (สตริง args) ( Bank ธนาคาร = ธนาคารใหม่ ("หน่วยธนาคาร"); บูลยังมีชีวิตอยู่ = จริง; ในขณะที่ (มีชีวิตอยู่) ( ConsoleColor color = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.DarkGreen; // แสดงรายการคำสั่งเป็นสีเขียว Console.WriteLine("1. เปิดบัญชี \t 2. ถอนเงิน \t 3. เพิ่ม ไปที่บัญชี" ); Console.WriteLine("4. ปิดบัญชี \t 5. ข้ามวัน \t 6. ออกจากโปรแกรม"); ​​Console.WriteLine("ป้อนหมายเลขรายการ:"); Console.ForegroundColor = color; Convert .ToInt32(Console.ReadLine()); switch (คำสั่ง) ( กรณีที่ 1: OpenAccount(bank) หยุด; กรณีที่ 2: ถอนออก(ธนาคาร); หยุด; กรณีที่ 3: ใส่ (ธนาคาร); หยุด; กรณีที่ 4: ปิดบัญชี ( ธนาคาร); กรณีที่ 5: มีชีวิตอยู่ = เท็จ; ดำเนินการต่อ; จับ (ข้อยกเว้นเช่น) ( // แสดงข้อความแสดงข้อผิดพลาดเป็นสีแดง = Console.ForegroundColor; Console. ForegroundColor = ConsoleColor.Red; Console.WriteLine (เช่นข้อความ) ; Console.ForegroundColor = color) ) ) โมฆะส่วนตัว OpenAccount (ธนาคาร) ธนาคาร) ( Console.WriteLine("ระบุจำนวนเงินที่จะสร้างบัญชี:"); ผลรวมทศนิยม = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine("เลือกประเภทบัญชี: 1. ความต้องการ 2. เงินฝาก") ; AccountType accountType; int type = Convert.ToInt32(Console.ReadLine()); if (type == 2) accountType = AccountType.Deposit; บัญชี WithdrawSumHandler, // ตัวจัดการการถอน (o, e) => Console.WriteLine(e.Message), // ตัวจัดการดอกเบี้ยคงค้างในรูปแบบของแลมบ์ดานิพจน์ CloseAccountHandler, // ตัวจัดการการปิดบัญชี OpenAccountHandler); ถอนเป็นโมฆะคงที่ (Bank ธนาคาร) ( Console.WriteLine("Enter the id of the account that need to be close:"); int id = Convert.ToInt32(Console.ReadLine()); bank.Close(id); ) // ตัวจัดการเหตุการณ์สำหรับ คลาสบัญชี // ตัวจัดการการเปิดบัญชี โมฆะคงที่ส่วนตัว OpenAccountHandler(ผู้ส่งวัตถุ, AccountEventArgs e) ( Console.WriteLine(e.Message); ) // ตัวจัดการสำหรับการเพิ่มเงินในบัญชี โมฆะคงที่ส่วนตัว AddSumHandler(ผู้ส่งวัตถุ, AccountEventArgs e ) ( Console.WriteLine(e.Message ); ) // ตัวจัดการการถอน ส่วนตัว void คงที่ WithdrawSumHandler(ผู้ส่งวัตถุ, AccountEventArgs e) ( Console.WriteLine(e.Message); if (e.Sum > 0) Console.WriteLine(" มาใช้เงินกันเถอะ"); ) / / account close handler private static void CloseAccountHandler(object sender, AccountEventArgs e) ( Console.WriteLine(e.Message); ) ) )

ไลบรารีถูกรวมไว้ที่จุดเริ่มต้นของไฟล์:

การใช้ BankLibrary;

วิธีการหลักจะสร้างออบเจ็กต์ Bank ซึ่งพิมพ์ตามคลาสบัญชี และเราจะโต้ตอบกับออบเจ็กต์บัญชี

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

การวนซ้ำของ while แต่ละครั้งจะสอดคล้องกับหนึ่งวัน ดังนั้นที่จุดสิ้นสุดของลูปจึงเรียกใช้เมธอด bank.CalculatePercentage() ซึ่งจะเพิ่มตัวนับวันของออบเจ็กต์ Account และคำนวณดอกเบี้ย

ผลลัพธ์จะเป็นโปรแกรมต่อไปนี้ จำลองการทำงานของธนาคารและการโต้ตอบกับผู้ใช้

ทุกปี มีการประชุมมากมายจัดขึ้นทั่วโลก ไม่ทางใดก็ทางหนึ่ง
ที่เกี่ยวข้องกับ UNIX และ FOSS การมีส่วนร่วมของผู้เชี่ยวชาญด้านไอทีในโปรแกรมหนึ่งในนั้น -
วิธีที่ยอดเยี่ยมในการโดดเด่น แสดงให้เห็นถึงความคิดริเริ่มสร้างสรรค์ของคุณและ
ความสามารถในการแสดงความคิด เราจะมาดูห้าโครงการที่สร้างสรรค์ที่สุด
นำเสนอในการประชุม USENIX และ Linux Symposium ในช่วงสองปีที่ผ่านมา

Korset - HIDS โดยไม่มีสัญญาณเตือนที่ผิดพลาด

ความนิยมอย่างน่าอัศจรรย์ของภาษาโปรแกรมที่ไม่ปลอดภัย C และ C++
กลายเป็นอันตรายถึงชีวิตด้วยการถือกำเนิดของเทคโนโลยีอินเทอร์เน็ตและเครือข่าย ปัญหาการหยุดชะงัก
stack มีมานานกว่า 25 ปีแล้ว แต่ยังไม่มีการคิดค้นวิธีแก้ปัญหาที่มีประสิทธิภาพ
ผู้ผลิตฮาร์ดแวร์จัดหาโปรเซสเซอร์ด้วยบิต NX ซึ่งปรากฎว่า
ทำได้เพียงหยุดครูวิทยาการคอมพิวเตอร์เท่านั้น สู่ระบบปฏิบัติการ
พวกเขาสร้างตัวสุ่มที่อยู่ต่างๆ ขึ้นมา แม้ว่ากระบวนการเหล่านี้จะซับซ้อนก็ตาม
การใช้งานโค้ดเชลล์ แต่ก็ง่ายต่อการแก้ไขเช่นกัน ผู้สร้างคอมไพเลอร์
พวกเขาล้าหลังและเกิดโพลิสและส่วนขยายอื่นๆ นักอุดมคตินิยมกรีดร้องอยู่ตลอดเวลา
เกี่ยวกับภาษาที่ปลอดภัยประเภทและเครื่องเสมือน นักวิจัยทุกปี
นำเสนอระบบป้องกันใหม่แต่ยังไม่มีความคืบหน้าชัดเจนและดูเหมือนว่า
จะไม่มีวันพบวิธีแก้ปัญหาที่มีประสิทธิภาพ

นักพัฒนาระบบโฮสต์ค่อนข้างแตกต่างจากความยุ่งยากทั้งหมดนี้
ระบบตรวจจับการบุกรุก (HIDS) พวกเขาแนะนำให้มองหาวิธีรักษาที่ไม่ใช่สำหรับ
แต่จากอาการ: จากความล้มเหลวของสแต็กและวิธีการที่เกี่ยวข้อง
ไม่สามารถป้องกันการเจาะได้ แล้วทำไมไม่หยุดผลที่ตามมา
โดยการป้องกันไม่ให้โปรแกรมทำสิ่งที่ไม่ควรทำ

มีอยู่ HIDS สองประเภท: ผู้เข้ารับการฝึกอบรมและ ตามกฎเกณฑ์.
จุดอ่อนของประการแรกคือความจำเป็นในการ "ดำเนินการ" เบื้องต้นของแอปพลิเคชัน -
ผู้เรียน HIDS ต้องใช้เวลาในการวิเคราะห์ว่าแอปพลิเคชันมักจะทำอะไรได้บ้าง
จากนั้นจึงจำกัดความสามารถของซอฟต์แวร์ตามข้อมูลนี้ ในเวลาเดียวกัน
HIDS ดังกล่าวไม่สามารถเรียนรู้เกี่ยวกับทุกสิ่งที่แอปพลิเคชันสามารถทำได้ในทางเทคนิค
และมักจะให้ผลบวกลวงบ่อยครั้ง

HIDS ตามกฎทำงานแตกต่างออกไป พวกเขาเสนอ
ผู้ใช้สามารถสร้างรายการสิ่งที่แอปพลิเคชันได้รับอนุญาตให้ทำ (ซึ่ง
อนุญาตให้เรียกระบบได้ ไฟล์และอุปกรณ์ใดที่สามารถเข้าถึงได้ และ
ฯลฯ) และการดำเนินการอื่นๆ ทั้งหมดจะถูกระงับ ข้อเสีย: ให้แม่นยำ
สร้างกฎขึ้นมา คุณต้องทำงานหนัก (ลองทำดูในเวลาว่าง
เขียนรายการกฎ SELinux สำหรับ Apache และโมดูลทั้งหมดตั้งแต่เริ่มต้น)

นักพัฒนาแนวความคิด HIDS คอร์เซ็ต(www.korset.org)
ประกาศในงาน Linux Symposium 2008 พวกเขาเสนอให้รวมระบบทั้งสองประเภทเข้าด้วยกัน
การตรวจจับการบุกรุกเพื่อสร้าง HIDS ที่เชื่อถือได้เป็นพิเศษซึ่งทำงานได้โดยไม่ต้องใช้
การแทรกแซงของผู้ใช้และไม่จำเป็นต้องมีการฝึกอบรมหรือการเขียนกฎ คอร์เซ็ต
ขึ้นอยู่กับความคิด กราฟการไหลควบคุม (ซีเอฟจี) ซึ่งแสดงถึง
เป็นกราฟที่สะท้อนถึงลำดับที่แอปพลิเคชันดำเนินการเรียกระบบ
กราฟดังกล่าวถูกสร้างขึ้นโดยอัตโนมัติระหว่างการสร้างแอปพลิเคชันและโหลดโดยเคอร์เนล
ก่อนการประหารชีวิต หากระหว่างการดำเนินการกระบวนการเริ่มต้นขึ้น การโทรของระบบ,
ไม่ได้อธิบายไว้ในคอลัมน์หรือแม้กระทั่งเรียงลำดับผิด - กระบวนการจะสิ้นสุดลง

เพื่อให้แนวคิดนี้เป็นจริง ผู้สร้าง Korset ได้จัดเตรียมเครื่องมือสร้าง GNU
(gcc, ld, as, ar) พร้อมด้วย wrappers พิเศษที่สร้าง CFG ตามต้นฉบับ
ข้อความแอปพลิเคชันและไฟล์ออบเจ็กต์ เพื่อใช้งาน Monitoring ที่อยู่ในเคอร์เนล
เอเจนต์ได้รับการแก้ไขด้วยตัวโหลด ELF ซึ่งเมื่อทำการโหลดไฟล์ปฏิบัติการ
ไฟล์ลงในหน่วยความจำจะค้นหาและโหลด CFG ที่กำหนดให้กับมัน (file
application.korset) ฟังก์ชั่น hook พิเศษ security_system_call เขียนไว้
โครงสร้าง security_operations ทำงานทุกครั้งที่มีการเรียกและตรวจสอบระบบ
โดยมีรายการเป็น CFG เอาล่ะ เชื่อมโยงมันทั้งหมดเข้าด้วยกันเป็นโครงสร้าง
Task_struct เพิ่มลิงก์ไปยัง CFG และสถานะ

เมื่อมองแวบแรก Korset นั้นใช้งานง่ายและใช้งานง่าย แต่ไม่ใช่
ทุกอย่างเป็นสีดอกกุหลาบมาก ประการแรก CFG ทำลายความสามารถในการสร้างโค้ดได้ทันทีโดยไม่ต้อง
ซึ่งในบางกรณีก็ทำไม่ได้ ประการที่สอง CFG ไม่ใช่ยาครอบจักรวาล
หากผู้โจมตีจัดการเรียกระบบเชลล์โค้ดในลักษณะดังกล่าว
เพื่อให้สอดคล้องกับที่ระบุไว้ใน CFG (เช่น จะทำ open() แต่ไม่ใช่
ไฟล์การกำหนดค่า แต่เป็นเทอร์มินัลหลอก) จะไม่มีสิ่งใดป้องกันได้
การเจาะ ประการที่สามใน สถานะปัจจุบัน Korset อยู่ไกลจากการผลิต:
ใช้งานได้บน x86 เท่านั้น โดยมีโปรแกรมที่ไม่มีการเชื่อมโยงแบบไดนามิก มัลติเธรด
สัญญาณและคำสั่งเช่น setjmp และ longjmp

Vx32 - แซนด์บ็อกซ์พื้นที่ผู้ใช้

แนวคิดในการใช้แซนด์บ็อกซ์เพื่อเรียกใช้โค้ดที่ไม่ปลอดภัยไม่ใช่เรื่องใหม่
ตัวอย่างที่ปิด: Chroot, FreeBSD Jail, Linux Lguest, Solaris Zones จาวาVM -
ยังเป็นแซนด์บ็อกซ์ชนิดหนึ่งที่บังคับให้ใช้ภาษาที่ปลอดภัยสำหรับประเภทนั้น
การสร้างแอปพลิเคชันและใช้การตรวจสอบรันไทม์จำนวนมาก
ความปลอดภัย. แม้แต่ VMWare และ qemu ก็ไม่มีอะไรมากไปกว่าแซนด์บ็อกซ์ที่อนุญาต
ใช้งานระบบปฏิบัติการในสภาพแวดล้อมเสมือนที่แยกออกมา

แซนด์บ็อกซ์ที่มีการแพร่ภาพอย่างโปร่งใสสมควรได้รับความสนใจเป็นพิเศษ
รหัส x86 เพื่อทำความเข้าใจว่าสิ่งนี้คืออะไร ลองจินตนาการถึง Java ที่สามารถ
รันโค้ด x86 ปกติที่คอมไพล์ด้วย gcc ในเวลาเดียวกัน
โปรแกรมควบคุมไม่สามารถเกินขอบเขตของพื้นที่หน่วยความจำและ
เป็นอันตรายต่อการทำงานของเครื่องเสมือน วิธีเดียวเท่านั้นภายนอก - API พิเศษ
ไม่มีสิ่งใดอยู่นอกจากเธอ แซนด์บ็อกซ์ประเภทนี้น่าสนใจที่สุด
เนื่องจากไม่ต้องการการแทรกแซงในเคอร์เนลจึงไม่บังคับใช้
ภาษาที่ปลอดภัยสำหรับประเภทที่แปลเป็น bytecode ไม่ได้จำลองฮาร์ดแวร์ทั้งหมด
แพลตฟอร์มและให้คุณจำกัดได้ตามที่คุณต้องการ โปรแกรมปฏิบัติการโดยใช้
ตัด API ให้เหลือน้อยที่สุด คุณสามารถสร้างห้องผ่าตัดทั้งหมดได้
การทำงานของระบบในพื้นที่ผู้ใช้

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

โครงการ Vx3 2 (pdos.csail.mit.edu/~baford/vm/),
นำเสนอในการประชุม USENIX'08 ได้สร้างแรงบันดาลใจใหม่ๆ ให้กับแนวคิดของแซนด์บ็อกซ์ดังกล่าว
ชีวิตต้องขอบคุณเคล็ดลับอันชาญฉลาดที่ทำให้สามารถอนุมานได้
ประสิทธิภาพเกือบจะอยู่ในระดับเดียวกับโค้ดเนทีฟ มันคือทั้งหมดที่เกี่ยวกับขอบเขต
พื้นที่ข้อมูล โดยทั่วไปจะจำกัดพื้นที่ข้อมูลของโปรแกรมที่ถูกควบคุม
ล่ามจะวิเคราะห์โค้ดทั้งหมดที่มีการกล่าวถึงเป็นอย่างน้อย
เกี่ยวกับที่อยู่ ไม่ว่าจะเป็นการอ่านจากบัฟเฟอร์ การทำงานกับสแต็ก หรือการเข้าถึงไฟล์
แต่ละคำสั่งที่ถือ
มีที่อยู่ ในเวลาเดียวกันส่วนแบ่งของการเปลี่ยนและการโทรต่างๆ
รูทีนย่อยจะเหลือเปอร์เซ็นต์ของการกระทำที่น่าสงสารซึ่งไม่ได้รับภาระมากนัก
ล่าม. นักพัฒนา Vx32 เข้าใจเรื่องนี้ดี จึงจำกัดพื้นที่
ข้อมูลโปรแกรมตามเซกเมนต์รีจิสเตอร์ (ds, es, ss) ซึ่งยังไม่มี
ใช้ในระบบปฏิบัติการสมัยใหม่เนื่องจากรุ่นหน่วยความจำแบบแบน เป็นผลให้
ล่าม Vx32 ควรสนใจเฉพาะการแยกวิเคราะห์คำสั่งสาขาเท่านั้น
(ซึ่งมีจำนวนน้อยมาก: jmp และอนุพันธ์, call, int, ret) และหยุด
ความพยายามที่จะเปลี่ยนการลงทะเบียนส่วนและการทำงานที่ใช้แรงงานเข้มข้นที่สุดเพื่อให้เป็นไปตาม
ขอบเขตการมองเห็นของพื้นที่ข้อมูลจะดำเนินการโดยโปรเซสเซอร์ ซึ่งทำได้หลายร้อยส่วน
เร็วขึ้นเท่าตัว

ตอนนี้ Vx32 ทำงานได้เสถียรแล้วและอีกหลายอย่าง
โปรเจ็กต์ รวมถึง Plan9 OS ที่ทำงานในโหมดระบบโฮสต์ และ "โปรแกรมจำลอง"
Linux (Linux API บน Vx32) ประสิทธิภาพของระบบเหล่านี้ก็ใกล้เคียงกัน
รหัสเนทิฟ (ค่าใช้จ่ายไม่เกิน 80%) ข้อเสียเปรียบเพียงอย่างเดียวของระบบคือ
หนึ่ง: ความสัมพันธ์ x86

KvmFS - การจัดการระยะไกลของเซิร์ฟเวอร์เสมือน

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

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

ใน Linux ไดรเวอร์นี้เรียกว่า kvm และโดยปกติแล้วคุณจะเปิดใช้งานได้
เสมือนถูกนำมาใช้ เครื่องเคมู- qemu นั้นเป็นตัวแทนของเซต
ตัวเลือกที่น่าสนใจสำหรับการจัดการเซิร์ฟเวอร์รวมถึงฟังก์ชันต่างๆ
การแช่แข็ง/ไม่แช่แข็ง วิธีง่ายๆ ในการย้ายข้อมูลผ่านอินเทอร์เน็ต รองรับรูปภาพที่ถูกบีบอัด
ดิสก์ ฯลฯ การจัดการเซิร์ฟเวอร์โดยใช้ qemu เป็นเรื่องที่น่ายินดี แต่ถ้าเป็นเช่นนั้น
มีเซิร์ฟเวอร์เป็นร้อยหรือเป็นพันเซิร์ฟเวอร์ และเซิร์ฟเวอร์ทั้งหมดกระจัดกระจายไปตามเครื่องหลายเครื่อง
ปัญหาร้ายแรงเริ่มต้นขึ้น

โครงการ เควีเอ็มเอฟเอสที่นำเสนอในงาน Linux Symposium 2007 ได้อย่างแม่นยำ
ออกแบบมาเพื่อลดความซับซ้อนของกระบวนการจัดการเสมือนระยะไกลหลายรายการ
รถยนต์ KvmFS ใช้โปรโตคอล 9P (อันจาก
) เพื่อสร้าง
ระบบไฟล์เสมือนที่สามารถติดตั้งจากระยะไกลได้ เช่น จาก
Linux และจัดการอินสแตนซ์ qemu หลายรายการ เซิร์ฟเวอร์ระยะไกลโดยการบันทึก
คำสั่งพิเศษสำหรับไฟล์ เซิร์ฟเวอร์ KvmFS จะอ่านคำสั่งและส่งไปยังคำสั่งที่ต้องการ
สู่กระบวนการเคมู เพื่อความชัดเจน ด้านล่างนี้คือตัวอย่างการเปิดตัวระบบเสมือนจริง
เครื่องบนเซิร์ฟเวอร์ host.org:

# mount -t 9p host.org /mnt/9
#ซีดี/mnt/9
# tail -f โคลน &
#ซีดี0
# cp ~/disk.img fs/disk.img
# cp ~/vmstate fs/vmstate
# echo dev hda disk.img > ctl
# echo net 0 00:11:22:33:44:55 > ctl
# echo เปิดเครื่องค้าง> ctl
# echo loadvm vmstate > ctl
# echo ยกเลิกการตรึง> ctl

และนี่คือวิธีการย้ายเซิร์ฟเวอร์เสมือนไปยังเครื่องอื่น:

# mount -t 9p host1.org /mnt/9/1
# mount -t 9p host2.org /mnt/9/2
# หาง -f /mnt/9/2/โคลน &
#ซีดี /mnt/9/1/0
# echo หยุด > ctl
# echo "โคลน 0 host2.org!7777/0"> ctl
#เอคโค่ ปิดเครื่อง>การควบคุม

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

AXFS - เปิดแอปพลิเคชันโดยไม่ต้องวางไว้ใน RAM

Linux กำลังพิชิตตลาดอุปกรณ์เคลื่อนที่และเทคโนโลยีแบบฝังตัวอย่างรวดเร็ว ทั้งหมด
ผู้ผลิตสมาร์ทโฟนจำนวนมากขึ้นประกาศใช้ระบบปฏิบัติการแบบเปิดใน
อุปกรณ์ของคุณรุ่นต่อไปนี้ หลายบริษัทกำลังนำออกสู่ตลาด
รุ่นพิเศษ การแจกแจงลินุกซ์สำหรับอุปกรณ์เคลื่อนที่ ลินัส ทอร์วัลด์ส
ส่งแพตช์จำนวนมากไปยังเคอร์เนลด้วยการดำเนินการสนับสนุนสำหรับสิ่งนี้หรือสิ่งนั้น
อื่น อุปกรณ์เคลื่อนที่และดูเหมือนว่าสวรรค์ของแฮกเกอร์นั้นใกล้เข้ามาแล้ว...

น่าเสียดายที่มันไม่ง่ายขนาดนั้น เริ่มแรก เคอร์เนลลินุกซ์พัฒนาขึ้นมาเพื่อ
เวิร์กสเตชันและเซิร์ฟเวอร์ และเมื่อเร็ว ๆ นี้ Tux เท่านั้นที่ดึงปีกของเขาไป
สมาร์ทโฟน ดังนั้นระบบย่อยเคอร์เนลเกือบทั้งหมดจึงได้รับการออกแบบ (และปรับให้เหมาะสม)
แอปพลิเคชั่นในการกำหนดค่าเดสก์ท็อปมาตรฐานซึ่งมีอย่างแน่นอน
ฮาร์ดไดรฟ์ อะแดปเตอร์วิดีโอที่รวดเร็ว RAM จำนวนมาก และ
การแสดงที่ไม่สุภาพมาก ปัญหาเหล่านี้บางส่วนกำลังได้รับการแก้ไข
ง่ายพอ ตัวอย่างเช่นความต้องการหน่วยความจำสามารถลดลงได้
ระดับที่ยอมรับได้ โดยประกอบเคอร์เนลที่รองรับเฉพาะสิ่งที่จำเป็นที่สุดและ
ปรับระบบผ่าน /proc. ระบบย่อยวิดีโอประสิทธิภาพต่ำ? ถ้าอย่างนั้น
ไม่จำเป็นต้องใช้ X Server หนักๆ แค่ framebuffer ก็เพียงพอแล้ว! แต่ที่เหลือมันยากกว่า ใน
โดยเฉพาะเคอร์เนลยังไม่มีระบบไฟล์ที่ให้คุณใช้งานได้ทั้งหมด
ความสามารถของแฟลชไดรฟ์สมัยใหม่

รายการคุณสมบัติที่ระบบไฟล์ดังกล่าวควรมีมีดังนี้:

  1. เขียนข้อมูลใหม่เฉพาะในกรณีที่จำเป็นจริงๆ ขึ้นอยู่กับ
    หน่วยความจำแฟลชถูกจำกัดในแง่ของจำนวนรอบ
    เขียนใหม่
  2. การบีบอัดข้อมูลที่โปร่งใส
  3. ความสามารถในการทำงานโดยไม่ต้องมีเลเยอร์การจำลองอุปกรณ์บล็อกซึ่งสร้างขึ้น
    ค่าใช้จ่ายที่ไม่จำเป็นโดยสิ้นเชิง
  4. ความต้านทานต่อการหยุดชะงักของพลังงาน
  5. รองรับ XIP (eXecute-In-Place) เช่น ความสามารถในการรันโปรแกรม
    โดยตรงจากแฟลชไดรฟ์โดยไม่ต้องโหลดเข้าไป แรม.

Jffs2 ซึ่งรวมเข้ากับเคอร์เนลมาเป็นเวลานาน ไม่รองรับสิ่งเหล่านี้แม้แต่ครึ่งหนึ่ง
โอกาสแต่สร้างขึ้น โดยโนเกีย ubifs (รวมเข้ากับเคอร์เนล
2.6.27) ดีมาก ทำได้เกือบทุกอย่าง ยกเว้นข้อที่ 5 ด้วย XIP คุณสามารถทำได้
ก้าวไปข้างหน้าครั้งใหญ่ ให้ฉันอธิบาย. บน อุปกรณ์เคลื่อนที่ห้องผ่าตัด
โดยปกติระบบจะแฟลชเข้าไปในหน่วยความจำประเภท NOR ซึ่งแตกต่างจากหน่วยความจำที่ใช้
ในแฟลชไดรฟ์หน่วยความจำ NAND รองรับการเข้าถึงเซลล์โดยพลการ
การเข้าถึงแบบสุ่มทำให้คล้ายกับ RAM และแม้กระทั่ง
ให้ท่านได้ใช้ความสามารถนี้ คุณเพียงแค่ต้องสอน ระบบไฟล์
แมปแต่ละส่วนของหน่วยความจำ NOR เข้ากับหน่วยความจำเสมือน - และดูเถิด
เต็มรูปแบบ ระบบปฏิบัติการสามารถทำงานได้โดยไม่ต้องใช้ RAM

ปัญหาเดียวของ XIP ก็คือเทคโนโลยีนี้ไม่เหมาะกับการออกแบบ
ระบบปฏิบัติการสากล นี่เป็นแฮ็คที่พยายามผสมผสาน
ระบบย่อยเคอร์เนลที่เข้ากันไม่ได้ ผู้สร้างระบบไฟล์ เอกซ์เอฟเอส (ขั้นสูง
ระบบไฟล์ XIP
) ซึ่งประกาศในงาน Linux Symposium 2008 ได้ลองแล้ว
แก้ไขข้อบกพร่องนี้โดยใช้กลไกเคอร์เนลอย่างเป็นทางการ กลับไปที่แกนกลาง
2.6.13 ซึ่งเป็นส่วนหนึ่งของการรวมไดรเวอร์ dcss สำหรับสถาปัตยกรรม s390 ได้ถูกเพิ่มเข้ามา
กลไกพิเศษที่ช่วยให้คุณเข้าถึงหน่วยความจำแฟลชดิสก์ได้โดยตรง (ไฟล์
/mm/filemap_xip.c) ก่อนที่ผู้สร้าง AXFS พวกเขาพยายามใช้กลไกนี้
ผู้พัฒนา xip patch สำหรับ cramfs แต่จบลงด้วยแฮ็คสกปรก
ซึ่งไม่อาจล่วงรู้ได้ว่าเป็น ทางออกที่ดีที่สุด- นักพัฒนา AXFS
ปรึกษากับผู้เขียนระบบย่อย หน่วยความจำเสมือนและสร้างขึ้น
ระบบไฟล์ 64 บิต มีข้อดีดังนี้:

  1. XIP สำหรับหน่วยความจำ NOR
  2. ความสามารถในการทำงานกับหน่วยความจำ NAND (XIP ถูกปิดใช้งานโดยอัตโนมัติ)
  3. การบีบอัดแบบโปร่งใสพร้อมขนาดบล็อกตั้งแต่ 4 KB ถึง 4 GB
  4. ความสามารถในการทำงานทั้งกับอุปกรณ์บล็อกและโดยตรง

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

Libferris - ระดับใหม่ของไฟล์เสมือน

ใน เมื่อเร็วๆ นี้ระบบไฟล์เสมือนได้รับความนิยมเป็นพิเศษ
พวกเขาดึงดูดผู้ใช้ด้วยความเก่งกาจโดยที่พวกเขาไม่ต้องการ
ใช้เวลาเรียนรู้อินเทอร์เฟซใหม่และอ่านคู่มือ จากมุมมอง
โปรแกรมเมอร์ virtual FS เป็นวิธีที่สะดวกและง่ายดายในการเชื่อมโยง
ส่วนประกอบ ระบบใหญ่โดยไม่ต้องคิดค้น API ใหม่และใช้ความซับซ้อน
อาร์พีซี

เพื่อไม่ให้ไม่มีมูลความจริง ฉันจะยกตัวอย่างบางส่วนจากสิ่งที่ยิ่งใหญ่เท่านั้น
รายการ FS ดังกล่าว: ระบบย่อย Gnome VFS ซึ่งช่วยให้คุณ "เดิน" ผ่านไฟล์เก็บถาวร
เซสชัน ssh, อิมเมจ ISO; ระบบย่อย KDE KIO ออกแบบมาเพื่อจุดประสงค์เดียวกัน
ฟิวส์โมดูลนิวเคลียร์บนพื้นฐานของจำนวนมหาศาลเพียง
ระบบไฟล์ที่หลากหลาย และถ้าเราคิดในแง่สากลมากขึ้น
ขนาดแล้วไม่มีใครสามารถทำได้โดยไม่ต้องเอ่ยถึงการดำเนินงาน ระบบนรกและ
Plan9 โดยที่ไฟล์เสมือนเป็นส่วนสำคัญของระบบปฏิบัติการและเชื่อมต่อทุกอย่าง
ส่วนประกอบของระบบเป็นคอมเพล็กซ์เดียว

โครงการ ลิบเฟอร์ริส(www.libferris.com)
ซึ่งการบรรยาย Linux Symposium ครั้งหนึ่งได้จัดขึ้นโดยเฉพาะ กำลังดำเนินการอีกมากในเรื่องนี้
ไกลออกไป. นอกจากความสามารถในการเมานต์ทรัพยากรต่างๆ มากมายแล้ว
เสนอกลไกการควบคุมแอปพลิเคชัน (Firefox, X Window) ผ่านไฟล์
อินเทอร์เฟซช่วยให้คุณสามารถแปลงเอกสาร XML เป็นระบบไฟล์และ
กลับ รองรับคุณลักษณะที่ดึงข้อมูลได้ทันทีจากภายใน
ข้อมูลเมตาของเอกสาร และอื่นๆ อีกมากมาย คุณสมบัติที่น่าสนใจ- คนอื่น
กล่าวอีกนัยหนึ่ง โปรเจ็กต์ libferris ยกระดับระบบไฟล์เสมือนไปสู่ระดับใหม่ ซึ่ง
ก่อนหน้านี้มีเฉพาะใน Plan9 ที่กล่าวถึงเท่านั้น

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

ชุดซอฟต์แวร์สำหรับการทำงานกับภาพทางการแพทย์ 3D Slicer พร้อมใช้งานบนหลายแพลตฟอร์ม รวมถึง Windows, Linux และ OS X

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

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

แพลตฟอร์มการจัดการเนื้อหาที่ขับเคลื่อนเว็บไซต์และแอพนับล้าน

ตัวจัดการสื่อที่ออกแบบมาเพื่อสร้างไลบรารีสื่อแบบรวมศูนย์ขนาดใหญ่

ระบบปฏิบัติการฟรีเช่น Unix

ชุดโปรแกรม Office สำหรับการพัฒนาการทำงานร่วมกันพร้อมฟังก์ชันการทำงานเช่น ไมโครซอฟต์ ออฟฟิศหรือ OpenOffice.org

ระบบการสร้างรายวิชา เว็บแอปพลิเคชันฟรีที่นักการศึกษาสามารถใช้เพื่อสร้างเว็บไซต์การสอนออนไลน์ที่มีประสิทธิภาพ Moodle ได้รับความนิยมอย่างมากในหมู่นักการศึกษาทั่วโลกในฐานะเครื่องมือสำหรับสร้างเว็บไซต์แบบไดนามิกสำหรับนักเรียนของตน

ซอฟต์แวร์สำหรับการสร้างและจัดการเนื้อหาเสียงและวิดีโอเพื่อการศึกษา

ระบบควบคุมหลายแพลตฟอร์ม เนื้อหาขององค์กรเขียนด้วยภาษาจาวา ทำงานได้กับหลายฐานข้อมูล (รวมถึง MySQL, Oracle, PostgreSQL, SQLLite และอื่นๆ) และยังรองรับวิธีการตรวจสอบความถูกต้องหลายวิธี

ซอฟต์แวร์สำหรับสร้างคลาวด์ส่วนตัวและสาธารณะ

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

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

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

  • การสร้างรายงาน
  • การวิเคราะห์
  • การรวบรวมข้อมูล
  • แพลตฟอร์มระบบธุรกิจอัจฉริยะ

นักพัฒนา Java™ สามารถใช้ส่วนประกอบของโปรเจ็กต์ได้ การสร้างอย่างรวดเร็ว การตัดสินใจของตัวเองสำหรับการวิเคราะห์ธุรกิจ

ระบบการจัดการข้อมูลดิจิทัลแบบโอเพ่นซอร์สแบบโมดูลาร์

ซอฟต์แวร์ฟรีสำหรับอีคอมเมิร์ซ

ไลบรารีสำหรับการกรองและเรียงลำดับอย่างรวดเร็ว คอลเลกชันขนาดใหญ่- มากถึง 100,000 องค์ประกอบในเบราว์เซอร์

ภาษาโอเพ่นซอร์ส

เปิดภาษาโปรแกรม ซอร์สโค้ดและสภาพแวดล้อมการพัฒนาสำหรับผู้ที่ต้องการสร้างภาพและภาพเคลื่อนไหว

ร- ภาษาเปิดการเขียนโปรแกรมและ สภาพแวดล้อมซอฟต์แวร์สำหรับการคำนวณทางสถิติและกราฟิก ภาษา R ถูกใช้กันอย่างแพร่หลายในหมู่นักสถิติเพื่อการพัฒนาซอฟต์แวร์ทางสถิติและการวิเคราะห์ข้อมูล

ฉันจะหาโครงการโอเพ่นซอร์สเพิ่มเติมได้ที่ไหน

หนึ่งในบริการเว็บที่ใหญ่ที่สุดสำหรับการพัฒนาโครงการด้านไอทีร่วมกัน ฟรีอย่างแน่นอนสำหรับโครงการโอเพ่นซอร์ส คำขวัญของบริการ "Social coding" สามารถแปลได้ว่า "Coding together"

ออกแบบมาเพื่อทำให้โครงการโอเพ่นซอร์สเป็นที่นิยม การใช้เครื่องมือที่มีให้ นักพัฒนาได้สร้างซอฟต์แวร์ที่มีประสิทธิภาพในโครงการมากกว่า 430,000 โครงการ ทรัพยากรมีผู้ใช้ที่ลงทะเบียนมากกว่า 3.7 ล้านคน แคตตาล็อกยอดนิยมรวบรวมลูกค้ามากกว่า 41.8 ล้านรายด้วย โครงการที่เปิดอยู่แหล่งที่มาและให้บริการดาวน์โหลดมากกว่า 4,800,000 ครั้งต่อวัน

เป้าหมายของ Fossdroid คือการโปรโมตแอปพลิเคชันโอเพ่นซอร์สบน Android ผ่านโครงการ F-Droid Fossdroid นำข้อมูลจาก F-Droid และจัดระเบียบแอปตามลำดับที่คล้ายกับ Google Playด้วยความสามารถในการดูตามความนิยม

จะทราบได้อย่างไรว่าซอฟต์แวร์เป็นโอเพ่นซอร์สและมีกฎการใช้งานอย่างไร

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

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

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

และที่นี่คุณจะพบรายชื่อเกมโคลน 49 เกมที่คุณสามารถเขียนได้ ทางเลือกขึ้นอยู่กับระดับความยาก

ต้องการสร้างสิ่งใหม่ ๆ หรือไม่? ลองเข้าไปดู Idea Machine และ The Internet Wishlist ซึ่งผู้คนจะโพสต์คำแนะนำเกี่ยวกับโปรแกรมที่พวกเขาต้องการดู

หากคุณต้องการแบบฝึกหัดภาคปฏิบัติ ให้อ่านรายการไซต์/แหล่งข้อมูลนี้:

แบบฝึกหัดทั่วไป:

  • Project Euler มีมากกว่า 500 รายการ ปัญหาทางคณิตศาสตร์(เกี่ยวกับทฤษฎีจำนวน ระบบจำนวน ฯลฯ) ที่ต้องแก้ไขโดยใช้การเขียนโปรแกรม (ในภาษาใดก็ได้)
  • Code Abbey เก็บปัญหาการเขียนโปรแกรมมากกว่า 200 ปัญหา 125 คนในจำนวนนี้ได้รับใบรับรองสำหรับแนวทางการแก้ปัญหา ซึ่งเป็นแรงบันดาลใจให้นักเรียนจำนวนมาก
  • Rosalind เป็นอีกไซต์หนึ่งที่คล้ายกับ Project Euler ซึ่งนำเสนอปัญหาทางชีวสารสนเทศมากกว่า 200 รายการให้เลือก
  • Codingbat.com มีแบบฝึกหัด Java และ Python สำหรับทั้งผู้เริ่มต้นและโปรแกรมเมอร์ขั้นสูง
  • codegolf.stackexchange.com เป็นไซต์ที่มีการเผยแพร่และหารือเกี่ยวกับปริศนาการเขียนโปรแกรม
  • Ruby Quiz เป็นชุดปริศนาที่ขอให้คุณเขียน โปรแกรมระยะสั้นที่มีความซับซ้อนต่างกันไป โซลูชันดั้งเดิมอธิบายไว้ใน Ruby แต่สามารถใช้งานได้ในทุกภาษา
  • - การเลือกงานลอจิกและการเขียนโปรแกรมแต่ละอย่างด้วย การวิเคราะห์โดยละเอียดโซลูชั่น

ปัญหาจากการเขียนโปรแกรมโอลิมปิก:

  • UVa Online Judge คือการรวบรวมปัญหานับร้อยจากการแข่งขันการเขียนโปรแกรม พร้อมระบบออนไลน์สำหรับตรวจสอบวิธีแก้ปัญหา
  • TopCoder มีปัญหาอัลกอริธึมที่ซับซ้อนซึ่งรวบรวมมาจากการแข่งขันต่างๆ ในช่วงหลายปีที่ผ่านมา นอกจากนี้ยังมีการแข่งขันเขียนโปรแกรมเดือนละหลายครั้ง
  • CodeForces คล้ายกับ TopCoder แต่มี งานเพิ่มเติมในการแข่งขันและคุณสมบัติพิเศษหลายประการ รวมถึง “การแข่งขันเสมือนจริง”
  • Timus - เช่นเดียวกับ UVA ประกอบด้วยปัญหาจากการแข่งขันล่าสุด (ระดับโลกและระดับภูมิภาค)
  • SPOJ นั้นคล้ายคลึงกับ UVA โดยมีภาษาการเขียนโปรแกรมให้เลือกมากมาย
  • USACO มีปัญหาอัลกอริทึมหลายประการพร้อมคำแนะนำในการแก้ไข

สำหรับภาษาเฉพาะ:

  • สำหรับ Prolog, Lisp และภาษาที่คล้ายกัน โปรดไปที่ P-99 และ L-99 ชุดปัญหา 99 ข้อเพื่อปรับปรุงประสิทธิภาพของคุณในภาษาเหล่านี้