Codeworld เป็นสภาพแวดล้อมทางการศึกษาที่ใช้ Haskell มันมีแบบจำลองทางคณิตศาสตร์อย่างง่ายสำหรับรูปเรขาคณิตภาพเคลื่อนไหวและเกมแบบโต้ตอบและหลายผู้เล่น สภาพแวดล้อมการเขียนโปรแกรมบนเว็บสนับสนุนภารกิจการศึกษานี้ด้วยตัวแก้ไขและคอมไพเลอร์แบบไม่มีการตั้งค่าการแบ่งปันง่ายและการจัดเก็บคลาวด์ของโครงการและความสามารถในการเรียกใช้โปรแกรมที่ถูกต้องในเว็บเบราว์เซอร์โดยใช้ GHCJs
มีหลายรูปแบบของ Codeworld:
codeworld-api และ blank-canvasCodeworld มีเสถียรภาพและถูกใช้ในโรงเรียนมานานหลายปี! ดูหน้าผู้ใช้สำหรับรายการบางส่วน แม้ว่าเราจะปรับปรุงสภาพแวดล้อมอย่างต่อเนื่อง การเปลี่ยนแปลงเมื่อจำเป็นจะมีกำหนดจะเกิดขึ้นระหว่างเทอมโรงเรียน K-12 ทั่วไป (US) เพื่อลดการหยุดชะงักของชั้นเรียนที่มีอยู่
Google กำลังแจกจ่ายรหัสสำหรับ Codeworld แต่ Codeworld ไม่ใช่โครงการ Google อย่างเป็นทางการและ Google ไม่ได้ให้การสนับสนุน คำถามเกี่ยวกับโครงการหรือรหัสควรถูกถามไปยังรายชื่อผู้รับจดหมาย codeworld-discuss นอกจากนี้ยังมีคำถามและคำตอบที่เป็นมิตรกับนักเรียนที่ http://help.code.world สำหรับคำถามเกี่ยวกับโปรแกรมที่เขียน โดยใช้ Codeworld แทนที่จะเป็นคำถามเกี่ยวกับการสร้างหรือแก้ไข Codeworld
เพียงไปที่ https://code.world เพื่อเริ่มต้น
ไม่จำเป็นต้องดาวน์โหลดหรือติดตั้งอะไรเพื่อใช้ Codeworld ที่เก็บนี้จะมีประโยชน์หากคุณต้องการแยกและแก้ไขสภาพแวดล้อม Codeworld หรือมีส่วนร่วมในการเปลี่ยนแปลง
หากต้องการพูดคุยและรับฟังการประกาศเกี่ยวกับ Codeworld สมัครสมาชิกรายชื่อผู้รับจดหมายได้ที่ https://groups.google.com/forum/#! forum/codeworld-discuss
ควรใช้รายชื่อผู้รับจดหมายเพื่อ:
ในการรายงานข้อบกพร่องหรือคำขอคุณลักษณะที่เป็นทางการของไฟล์ลอง https://github.com/google/codeworld/issues
มีเอกสารเล็กน้อยที่เกี่ยวข้องกับการมีส่วนร่วมใน Codeworld คุณจะต้องยอมรับข้อตกลงใบอนุญาตผู้สนับสนุน ดู CONTRIBUTING.md สำหรับรายละเอียด
การสร้างและเรียกใช้ Codeworld อาจเป็นกระบวนการที่ยาวนาน แต่เป็นไปโดยอัตโนมัติโดยใช้สคริปต์การติดตั้งในไดเรกทอรีรากซึ่งทำงานในรูปแบบส่วนใหญ่ของ Linux รวมถึง Debian, Ubuntu, Redhat และ Centos คำแนะนำทีละขั้นตอนมีดังนี้:
./install.sh เพื่อตั้งค่าโครงการ./run.sh เพื่อเริ่มเซิร์ฟเวอร์ตอนนี้คุณสามารถเข้าถึงระบบ Codeworld ได้ที่ http: // localhost: 8080
หากคุณทำการเปลี่ยนแปลง CodeWorld คุณสามารถสร้างใหม่ได้โดยไม่ต้องสร้างการพึ่งพาใหม่:
./build.sh เพื่อคอมไพล์เพียงแค่ codeworld เองโดยใช้เครื่องมือและไลบรารีที่ติดตั้งไว้ก่อนหน้านี้./run.sh เพื่อเริ่มเซิร์ฟเวอร์นอกจากนี้ยังเป็นไปได้ที่จะสร้างและเรียกใช้เซิร์ฟเวอร์โดยใช้ Docker นี่ยังไม่ได้เป็นวิธีที่แนะนำในการพัฒนาด้วย Codeworld แต่สามารถไปถึงที่นั่นได้ในไม่ช้า
คำสั่งที่จะลองใช้ Docker:
sudo docker build -t codeworld https://github.com/google/codeworld.git
sudo docker run -p 80:8080 -t codeworld
สำหรับตอนนี้คอนเทนเนอร์ Docker ไม่มีวิธีในการเข้าถึงรหัสไคลเอนต์ติดตั้งไดรฟ์ NFS ที่ใช้ร่วมกันหรือขั้นตอนการตั้งค่าอื่น ๆ มันจะใช้งานได้ แต่จะไม่สมบูรณ์ ในอนาคตสิ่งนี้ควรเป็นวิธีมาตรฐานในการปรับใช้ Codeworld
stack.yaml ในรูทของโครงการมีอยู่บางส่วนสนับสนุน Intero และ Travis CI ในเทรวิสการทดสอบ codeworld-compiler ไม่ทำงาน
การสร้างและเรียกใช้ Codeworld ในพื้นที่ที่มีสแต็กไม่ได้รับการสนับสนุนและในความเป็นจริงไม่ได้ผล สแต็คยังไม่สามารถทดแทนสคริปต์เชลล์หรือการใช้นักเทียบท่าด้านบน
Codeworld เสนอการตรวจสอบความถูกต้องสองโหมดหรือความสามารถในการทำงานด้วยการตรวจสอบความถูกต้องด้วยฟังก์ชั่นที่ลดลง สองวิธีที่ให้ไว้มีดังนี้:
การรัน Codeworld ในหนึ่งในสองโหมดเหล่านี้ช่วยให้ผู้ใช้สามารถบันทึกและจัดการโครงการและโฟลเดอร์ของพวกเขา หากไม่มีการเปิดใช้งานการรับรองความถูกต้องผู้ใช้สามารถเขียนสร้างและเรียกใช้รหัส แต่สูญเสียความสามารถในการบันทึกและจัดการโครงการและโฟลเดอร์
สำหรับการตรวจสอบของ Google ในการทำงานคุณจะต้องได้รับคีย์ Google API และจัดเก็บไว้ใน web/clientId.txt
หากต้องการรับคีย์ Google API สำหรับการติดตั้ง CodeWorld ของคุณโปรดปรึกษาทรัพยากรต่อไปนี้:
เมื่อคุณมีคีย์ Google API คัดลอกและวางลงใน web/clientId.txt อินสแตนซ์ CodeWorld ที่กำลังทำงานจะรับการเปลี่ยนแปลงในไฟล์นี้ทันที
โดยทั่วไประบบการตรวจสอบความถูกต้องของ Google จะเป็นระบบที่ง่ายที่สุดในการรักษาเนื่องจากไม่จำเป็นต้องมีการเก็บรหัสผ่านท้องถิ่น นี่คือกลไกที่ใช้โดย CodeWorld รุ่นที่เป็นทางการ
สำหรับแอปพลิเคชันที่การพึ่งพาภายนอกเช่นบัญชี Google ไม่เป็นที่ยอมรับเรามีระบบการรับรองความถูกต้องในท้องถิ่นอย่างง่าย:
สิ่งนี้ให้ระบบการตรวจสอบความถูกต้องในท้องถิ่นที่มีเวิร์กโฟลว์ที่คล้ายกันมากกับ Google Authentication (เช่นเซสชันฝั่งไคลเอ็นต์ไร้สัญชาติ) ปัจจุบันไม่มีส่วนต่อประสานการดูแลระบบบนเว็บ แต่คุณสามารถใช้เครื่องมือ codeworld-auth CLI เพื่อจัดการบัญชีได้
ระบบการรับรองความถูกต้องในท้องถิ่นอาจมีประโยชน์สำหรับสถานการณ์ที่ผู้สอนไม่สามารถคาดหวังได้ว่านักเรียนทุกคนจะมีบัญชี Google ที่ถูกต้องและผู้สอนยินดีที่จะปรับใช้สแต็ค Codeworld ท้องถิ่น
การรับรองความถูกต้องในพื้นที่จะเปิดใช้งานหากไฟล์ codeworld-auth.db มีอยู่ในไดเรกทอรีรากของแอปพลิเคชัน ในการสร้างฐานข้อมูลนี้ให้เรียกใช้ต่อไปนี้จากรูทของที่เก็บ Git:
build/bin/codeworld-auth init-accounts -d codeworld-auth.db
สิ่งนี้จะสร้างฐานข้อมูลบัญชีที่ว่างเปล่าโดยไม่มีบัญชี
สมมติว่าคุณได้สร้างฐานข้อมูลบัญชีตามที่อธิบายไว้ข้างต้นแล้วคุณสามารถสร้างบัญชีใหม่ได้ดังนี้:
build/bin/codeworld-auth create-account -d codeworld-auth.db johndoe Expired
สิ่งนี้จะสร้างบัญชีใหม่ด้วย ID ผู้ใช้ johndoe ด้วยรหัสผ่านที่สร้างขึ้นแบบสุ่ม บัญชีจะถูกตั้งค่าเป็น "หมดอายุ" ซึ่งหมายความว่าผู้ใช้จะได้รับแจ้งให้ป้อนรหัสผ่านใหม่ในเวลาที่ลงชื่อเข้าใช้ครั้งต่อไป
คำสั่งย่อยอื่น ๆ มีไว้สำหรับการอัปเดตและการลบบัญชี ฯลฯ เพื่อขอความช่วยเหลือ:
build/bin/codeworld-auth --help
ในการใช้การรับรองความถูกต้องในพื้นที่คุณจะต้องสร้างความลับ JWT ที่เก็บไว้ในไฟล์ชื่อ codeworld-auth.txt สิ่งนี้ใช้ในการลงนามโทเค็น JWT ที่ผ่านไปมาระหว่างเซิร์ฟเวอร์และเบราว์เซอร์ จากไดเรกทอรีรากของที่เก็บ GIT ให้เรียกใช้คำสั่งต่อไปนี้:
build/bin/codeworld-auth generate-secret -s codeworld-auth.txt
สิ่งนี้จะสร้างคีย์การลงนาม JWT แบบสุ่มใหม่ เซิร์ฟเวอร์ไม่ควรเปิดเผยความลับนี้ให้กับผู้ใช้ภายนอก
หากคุณกำลังติดตั้ง Codeworld บนเซิร์ฟเวอร์เสมือนจริงโปรดทราบว่า RAM เริ่มต้นบนเซิร์ฟเวอร์เหล่านี้มักจะไม่เพียงพอสำหรับ GHC Codeworld จำเป็นต้องรวบรวมโครงการ Haskell ที่มีขนาดใหญ่มากในระหว่างการติดตั้ง สิ่งต่อไปนี้ควรเพียงพอที่จะแก้ไขปัญหานอกหน่วยความจำที่คุณพบ:
$ sudo dd if=/dev/zero of=/swap bs=1024 count=2097152
$ sudo mkswap /swap
$ sudo swapon /swap
สิ่งนี้จะสร้างไฟล์ SWAP 2 GB เพื่อเพิ่มหน่วยความจำเสมือนที่มีอยู่ การติดตั้งด้วยไฟล์ SWAP อาจช้า แต่จะประสบความสำเร็จ (เว้นแต่คุณตั้งใจจะเขียนโปรแกรมที่มีขนาดใหญ่มากใน Codeworld มันมักจะปลอดภัยที่จะลบไฟล์ SWAP หลังจากเรียกใช้เซิร์ฟเวอร์เป็นครั้งแรก)